From 6cadae999f957fa3b2f186d1cedbeaac53c6c32f Mon Sep 17 00:00:00 2001 From: Kitsune Date: Wed, 1 Jul 2026 18:27:30 -0400 Subject: [PATCH] Fix Client-Only Classes in Dedicated Server --- .../fr/iglee42/createcasing/CreateCasing.java | 5 +- .../createcasing/CreateCasingMixinPlugin.java | 13 ++++- .../createcasing/blocks/AutoClutchBlock.java | 20 ++------ .../createcasing/client/AutoClutchClient.java | 19 +++++++ .../client/ClientItemPredicates.java | 24 +++++++++ .../client/ClientModelWrappers.java | 23 +++++++++ .../client/ClientRenderTypes.java | 15 ++++++ .../EncasedSliceAndDiceCompat.java | 9 +--- .../registries/EncasedBlocks.java | 50 +++++++++---------- .../registries/EncasedCreativeModeTabs.java | 21 ++------ .../utils/CasingBuilderTransformers.java | 9 +++- src/main/resources/createcasing.mixins.json | 4 +- 12 files changed, 138 insertions(+), 74 deletions(-) create mode 100644 src/main/java/fr/iglee42/createcasing/client/AutoClutchClient.java create mode 100644 src/main/java/fr/iglee42/createcasing/client/ClientItemPredicates.java create mode 100644 src/main/java/fr/iglee42/createcasing/client/ClientModelWrappers.java create mode 100644 src/main/java/fr/iglee42/createcasing/client/ClientRenderTypes.java diff --git a/src/main/java/fr/iglee42/createcasing/CreateCasing.java b/src/main/java/fr/iglee42/createcasing/CreateCasing.java index 89b45f2e..6a87c9d5 100644 --- a/src/main/java/fr/iglee42/createcasing/CreateCasing.java +++ b/src/main/java/fr/iglee42/createcasing/CreateCasing.java @@ -5,7 +5,6 @@ import com.simibubi.create.foundation.item.ItemDescription; import com.simibubi.create.foundation.item.KineticStats; import com.simibubi.create.foundation.item.TooltipModifier; -import com.tterrag.registrate.util.RegistrateDistExecutor; import fr.iglee42.createcasing.commands.CreateCasingCommand; import fr.iglee42.createcasing.compat.sliceanddice.EncasedSliceAndDiceCompat; import fr.iglee42.createcasing.config.EncasedConfigs; @@ -16,12 +15,12 @@ import fr.iglee42.createcasing.mixins.create.fluids.SpoutBlockEntityAccessor; import fr.iglee42.createcasing.registries.*; import net.createmod.catnip.lang.FontHelper; +import net.createmod.catnip.platform.CatnipServices; import net.minecraft.core.Direction; import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.CreativeModeTab; import net.minecraft.world.level.ItemLike; -import net.neoforged.api.distmarker.Dist; import net.neoforged.bus.api.EventPriority; import net.neoforged.bus.api.IEventBus; import net.neoforged.fml.ModContainer; @@ -78,7 +77,7 @@ public CreateCasing(IEventBus modEventBus, ModContainer container) { - RegistrateDistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> CreateCasingClient.onCtorClient(modEventBus)); + CatnipServices.PLATFORM.executeOnClientOnly(() -> () -> CreateCasingClient.onCtorClient(modEventBus)); neoForgeEventBus.addListener(this::registerCommands); modEventBus.addListener(this::setup); diff --git a/src/main/java/fr/iglee42/createcasing/CreateCasingMixinPlugin.java b/src/main/java/fr/iglee42/createcasing/CreateCasingMixinPlugin.java index 31605cb0..4ac1beec 100644 --- a/src/main/java/fr/iglee42/createcasing/CreateCasingMixinPlugin.java +++ b/src/main/java/fr/iglee42/createcasing/CreateCasingMixinPlugin.java @@ -1,6 +1,8 @@ package fr.iglee42.createcasing; +import net.neoforged.api.distmarker.Dist; import net.neoforged.fml.loading.LoadingModList; +import net.neoforged.fml.loading.FMLEnvironment; import org.objectweb.asm.tree.ClassNode; import org.spongepowered.asm.mixin.extensibility.IMixinConfigPlugin; import org.spongepowered.asm.mixin.extensibility.IMixinInfo; @@ -19,10 +21,19 @@ public String getRefMapperConfig() { @Override public boolean shouldApplyMixin(String targetClassName, String mixinClassName) { - if (mixinClassName.contains("sliceanddice")) return LoadingModList.get().getModFileById("sliceanddice") != null; + if (mixinClassName.contains("sliceanddice")) + return isModLoaded("sliceanddice"); + if (mixinClassName.endsWith("CreateJeiMixin")) + return FMLEnvironment.dist == Dist.CLIENT && isModLoaded("jei"); + if (mixinClassName.endsWith("SchematicHandlerMixin")) + return FMLEnvironment.dist == Dist.CLIENT; return true; } + private static boolean isModLoaded(String modId) { + return LoadingModList.get().getModFileById(modId) != null; + } + @Override public void acceptTargets(Set myTargets, Set otherTargets) { diff --git a/src/main/java/fr/iglee42/createcasing/blocks/AutoClutchBlock.java b/src/main/java/fr/iglee42/createcasing/blocks/AutoClutchBlock.java index b3c6539e..714c5644 100644 --- a/src/main/java/fr/iglee42/createcasing/blocks/AutoClutchBlock.java +++ b/src/main/java/fr/iglee42/createcasing/blocks/AutoClutchBlock.java @@ -4,12 +4,10 @@ import com.simibubi.create.content.kinetics.base.AbstractEncasedShaftBlock; import com.simibubi.create.content.kinetics.base.KineticBlockEntity; import com.simibubi.create.foundation.block.IBE; -import com.tterrag.registrate.util.RegistrateDistExecutor; import fr.iglee42.createcasing.blockEntities.AutoClutchBlockEntity; +import fr.iglee42.createcasing.client.AutoClutchClient; import fr.iglee42.createcasing.registries.EncasedBlockEntities; -import fr.iglee42.createcasing.screen.AutoClutchScreen; -import net.createmod.catnip.gui.ScreenOpener; -import net.minecraft.client.player.LocalPlayer; +import net.createmod.catnip.platform.CatnipServices; import net.minecraft.core.BlockPos; import net.minecraft.server.level.ServerLevel; import net.minecraft.util.RandomSource; @@ -21,11 +19,8 @@ import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.StateDefinition; -import net.minecraft.world.level.block.state.properties.BlockStateProperties; import net.minecraft.world.level.block.state.properties.BooleanProperty; import net.minecraft.world.phys.BlockHitResult; -import net.neoforged.api.distmarker.Dist; -import net.neoforged.api.distmarker.OnlyIn; public class AutoClutchBlock extends AbstractEncasedShaftBlock implements IBE { @@ -54,18 +49,11 @@ public BlockEntityType getBlockEntityType() { @Override protected InteractionResult useWithoutItem(BlockState p_60503_, Level world, BlockPos pos, Player player, BlockHitResult p_60508_) { - RegistrateDistExecutor.unsafeRunWhenOn(Dist.CLIENT, - () -> () -> withBlockEntityDo(world, pos, be -> openScreen(be,player))); + CatnipServices.PLATFORM.executeOnClientOnly( + () -> () -> withBlockEntityDo(world, pos, be -> AutoClutchClient.openScreen(be, player))); return InteractionResult.SUCCESS; } - @OnlyIn(Dist.CLIENT) - protected void openScreen(AutoClutchBlockEntity be, Player player){ - if (!(player instanceof LocalPlayer)) - return; - ScreenOpener.open(new AutoClutchScreen(be)); - } - @Override public void tick(BlockState state, ServerLevel worldIn, BlockPos pos, RandomSource random) { BlockEntity be = worldIn.getBlockEntity(pos); diff --git a/src/main/java/fr/iglee42/createcasing/client/AutoClutchClient.java b/src/main/java/fr/iglee42/createcasing/client/AutoClutchClient.java new file mode 100644 index 00000000..ecabe3d5 --- /dev/null +++ b/src/main/java/fr/iglee42/createcasing/client/AutoClutchClient.java @@ -0,0 +1,19 @@ +package fr.iglee42.createcasing.client; + +import fr.iglee42.createcasing.blockEntities.AutoClutchBlockEntity; +import fr.iglee42.createcasing.screen.AutoClutchScreen; +import net.createmod.catnip.gui.ScreenOpener; +import net.minecraft.client.player.LocalPlayer; +import net.minecraft.world.entity.player.Player; + +public final class AutoClutchClient { + + private AutoClutchClient() { + } + + public static void openScreen(AutoClutchBlockEntity be, Player player) { + if (!(player instanceof LocalPlayer)) + return; + ScreenOpener.open(new AutoClutchScreen(be)); + } +} diff --git a/src/main/java/fr/iglee42/createcasing/client/ClientItemPredicates.java b/src/main/java/fr/iglee42/createcasing/client/ClientItemPredicates.java new file mode 100644 index 00000000..cea204ac --- /dev/null +++ b/src/main/java/fr/iglee42/createcasing/client/ClientItemPredicates.java @@ -0,0 +1,24 @@ +package fr.iglee42.createcasing.client; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.entity.ItemRenderer; +import net.minecraft.client.resources.model.BakedModel; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; + +import java.util.function.Predicate; + +public final class ClientItemPredicates { + + private ClientItemPredicates() { + } + + public static Predicate make3dItemPredicate() { + return item -> { + ItemRenderer itemRenderer = Minecraft.getInstance() + .getItemRenderer(); + BakedModel model = itemRenderer.getModel(new ItemStack(item), null, null, 0); + return model.isGui3d(); + }; + } +} diff --git a/src/main/java/fr/iglee42/createcasing/client/ClientModelWrappers.java b/src/main/java/fr/iglee42/createcasing/client/ClientModelWrappers.java new file mode 100644 index 00000000..86f2e898 --- /dev/null +++ b/src/main/java/fr/iglee42/createcasing/client/ClientModelWrappers.java @@ -0,0 +1,23 @@ +package fr.iglee42.createcasing.client; + +import com.simibubi.create.foundation.block.connected.CTSpriteShiftEntry; +import com.tterrag.registrate.util.nullness.NonNullFunction; +import fr.iglee42.createcasing.fluids.EncasedFluidTankModel; +import fr.iglee42.createcasing.fluids.EncasedPipeAttachmentModel; +import net.minecraft.client.resources.model.BakedModel; + +public final class ClientModelWrappers { + + private ClientModelWrappers() { + } + + public static NonNullFunction encasedPipeAttachment(String setName) { + return model -> EncasedPipeAttachmentModel.withAO(model, setName); + } + + public static NonNullFunction encasedFluidTank(CTSpriteShiftEntry side, + CTSpriteShiftEntry top, + CTSpriteShiftEntry inner) { + return model -> new EncasedFluidTankModel(model, side, top, inner); + } +} diff --git a/src/main/java/fr/iglee42/createcasing/client/ClientRenderTypes.java b/src/main/java/fr/iglee42/createcasing/client/ClientRenderTypes.java new file mode 100644 index 00000000..6ef85e39 --- /dev/null +++ b/src/main/java/fr/iglee42/createcasing/client/ClientRenderTypes.java @@ -0,0 +1,15 @@ +package fr.iglee42.createcasing.client; + +import net.minecraft.client.renderer.RenderType; + +import java.util.function.Supplier; + +public final class ClientRenderTypes { + + private ClientRenderTypes() { + } + + public static Supplier cutoutMipped() { + return RenderType::cutoutMipped; + } +} diff --git a/src/main/java/fr/iglee42/createcasing/compat/sliceanddice/EncasedSliceAndDiceCompat.java b/src/main/java/fr/iglee42/createcasing/compat/sliceanddice/EncasedSliceAndDiceCompat.java index 7b544543..7cf7ab7a 100644 --- a/src/main/java/fr/iglee42/createcasing/compat/sliceanddice/EncasedSliceAndDiceCompat.java +++ b/src/main/java/fr/iglee42/createcasing/compat/sliceanddice/EncasedSliceAndDiceCompat.java @@ -2,8 +2,6 @@ import com.possible_triangle.sliceanddice.block.slicer.SlicerBlock; import com.possible_triangle.sliceanddice.block.slicer.SlicerBlockEntity; -import com.possible_triangle.sliceanddice.block.slicer.SlicerRenderer; -import com.possible_triangle.sliceanddice.block.slicer.SlicerVisual; import com.possible_triangle.sliceanddice.compat.ModCompat; import com.possible_triangle.sliceanddice.index.SDBlockEntities; import com.possible_triangle.sliceanddice.index.SDBlocks; @@ -21,15 +19,12 @@ import fr.iglee42.createcasing.casings.CasingSet; import fr.iglee42.createcasing.casings.CasingSets; import fr.iglee42.createcasing.config.CCStress; -import fr.iglee42.createcasing.ponder.CustomPonderScenes; import fr.iglee42.createcasing.registries.EncasedBlockEntities; import fr.iglee42.createcasing.registries.EncasedBlockStateGens; -import fr.iglee42.createcasing.registries.EncasedCreativeModeTabs; -import mezz.jei.api.registration.IRecipeCatalystRegistration; +import fr.iglee42.createcasing.utils.CasingBuilderTransformers; import net.createmod.catnip.math.Pointing; import net.createmod.catnip.math.VecHelper; import net.createmod.ponder.api.registration.PonderSceneRegistrationHelper; -import net.minecraft.client.renderer.RenderType; import net.minecraft.core.Direction; import net.minecraft.resources.ResourceLocation; import net.minecraft.tags.BlockTags; @@ -79,7 +74,7 @@ private static BlockEntry createSlicer(String name) { .initialProperties(SharedProperties::stone) .properties(BlockBehaviour.Properties::noOcclusion) .blockstate((c,p)->p.simpleBlock(c.get(),slicerModel(p,name,false))) - .addLayer(()->RenderType::cutoutMipped) + .transform(CasingBuilderTransformers.cutoutMipped()) .transform(CCStress.setImpact(4.0)) .item(AssemblyOperatorBlockItem::new) .model((c,p)->p.getBuilder(c.getName()).parent(slicerModel(p,name,true))) diff --git a/src/main/java/fr/iglee42/createcasing/registries/EncasedBlocks.java b/src/main/java/fr/iglee42/createcasing/registries/EncasedBlocks.java index ec0c7ae2..a8f0e894 100644 --- a/src/main/java/fr/iglee42/createcasing/registries/EncasedBlocks.java +++ b/src/main/java/fr/iglee42/createcasing/registries/EncasedBlocks.java @@ -49,9 +49,8 @@ import fr.iglee42.createcasing.blocks.shafts.*; import fr.iglee42.createcasing.casings.CasingSet; import fr.iglee42.createcasing.casings.CasingSets; +import fr.iglee42.createcasing.client.ClientModelWrappers; import fr.iglee42.createcasing.config.CCStress; -import fr.iglee42.createcasing.fluids.EncasedFluidTankModel; -import fr.iglee42.createcasing.fluids.EncasedPipeAttachmentModel; import fr.iglee42.createcasing.fluids.FluidSet; import fr.iglee42.createcasing.fluids.FluidSets; import fr.iglee42.createcasing.items.WoodenCogwheelBlockItem; @@ -63,7 +62,6 @@ import fr.iglee42.createcasing.transmissions.TransmissionSets; import fr.iglee42.createcasing.utils.CasingBuilderTransformers; import net.createmod.catnip.data.Couple; -import net.minecraft.client.renderer.RenderType; import net.minecraft.core.Direction; import net.minecraft.core.registries.Registries; import net.minecraft.world.item.BlockItem; @@ -107,7 +105,7 @@ public class EncasedBlocks { .blockstate((c,p)->EncasedBlockStateGens.axisBlock(c,p,b->new ModelFile.UncheckedModelFile(CreateCasing.asResource("block/creative_cogwheel/block")),false)) .transform(CCStress.setCapacity(16384.0)) .onRegister(BlockStressValues.setGeneratorSpeed(256,true)) - .addLayer(()-> RenderType::cutoutMipped) + .transform(CasingBuilderTransformers.cutoutMipped()) .item() .properties(p -> p.rarity(Rarity.EPIC)) .transform(customItemModel()) @@ -214,7 +212,7 @@ private static BlockEntry createMixer(String name){ .properties(BlockBehaviour.Properties::noOcclusion) .transform(axeOrPickaxe()) .blockstate(EncasedBlockStateGens.mixer(name)) - .addLayer(() -> RenderType::cutoutMipped) + .transform(CasingBuilderTransformers.cutoutMipped()) .transform(CCStress.setImpact(4.0)) .item(AssemblyOperatorBlockItem::new) .model((c,p)->p.getBuilder(c.getName()).parent(mixerModel(p,name,true))) @@ -360,7 +358,7 @@ public static BlockEntry createGearshift(String name) { .initialProperties(SharedProperties::stone) .properties(p -> p.noOcclusion() .mapColor(MapColor.PODZOL)) - .addLayer(() -> RenderType::cutoutMipped) + .transform(CasingBuilderTransformers.cutoutMipped()) .transform(CCStress.setNoImpact()) .transform(axeOrPickaxe()) .blockstate((c, p) -> EncasedBlockStateGens.axisBlock(c,p,gearshiftModel(p,name),false)) @@ -375,7 +373,7 @@ public static BlockEntry createClutch(String name) { .initialProperties(SharedProperties::stone) .properties(p -> p.noOcclusion() .mapColor(MapColor.PODZOL)) - .addLayer(() -> RenderType::cutoutMipped) + .transform(CasingBuilderTransformers.cutoutMipped()) .transform(CCStress.setNoImpact()) .transform(axeOrPickaxe()) .blockstate((c, p) ->EncasedBlockStateGens.axisBlock(c,p,clutchModel(p,name),false)) @@ -420,7 +418,7 @@ public static BlockEntry createEncasedFan(String name) { .initialProperties(SharedProperties::stone) .properties(p -> p.mapColor(MapColor.PODZOL)) .blockstate((c,p)->p.directionalBlock(c.get(),fanModel(p,name))) - .addLayer(() -> RenderType::cutoutMipped) + .transform(CasingBuilderTransformers.cutoutMipped()) .transform(axeOrPickaxe()) .transform(CCStress.setImpact(2.0)) .item() @@ -437,7 +435,7 @@ public static BlockEntry createHarvester(String name){ .transform(axeOrPickaxe()) .onRegister(movementBehaviour(new HarvesterMovementBehaviour())) .blockstate((c,p)->p.horizontalBlock(c.get(),harvesterModel(p,name,false))) - .addLayer(() -> RenderType::cutoutMipped) + .transform(CasingBuilderTransformers.cutoutMipped()) .item() .tag(AllTags.AllItemTags.CONTRAPTION_CONTROLLED.tag) .model((c,p)->p.getBuilder(c.getName()).parent(harvesterModel(p,name,true))) @@ -467,7 +465,7 @@ public static BlockEntry createRoller(String name){ .transform(axeOrPickaxe()) .onRegister(movementBehaviour(new RollerMovementBehaviour())) .blockstate((c,p)->p.horizontalBlock(c.get(),rollerModel(p,name,false))) - .addLayer(() -> RenderType::cutoutMipped) + .transform(CasingBuilderTransformers.cutoutMipped()) .item(RollerBlockItem::new) .tag(AllTags.AllItemTags.CONTRAPTION_CONTROLLED.tag) .model((c,p)->p.getBuilder(c.getName()).parent(rollerModel(p,name,true))) @@ -478,13 +476,13 @@ public static BlockEntry createRoller(String name){ public static BlockEntry createSaw(String name){ return REGISTRATE.block(name+"_mechanical_saw", CustomSawBlock::new) .initialProperties(SharedProperties::stone) - .addLayer(() -> RenderType::cutoutMipped) + .transform(CasingBuilderTransformers.cutoutMipped()) .properties(p -> p.mapColor(MapColor.PODZOL)) .transform(axeOrPickaxe()) .blockstate(new CustomSawGenerator(name)::generate) .transform(CCStress.setImpact(4.0)) .onRegister(movementBehaviour(new SawMovementBehaviour())) - .addLayer(() -> RenderType::cutoutMipped) + .transform(CasingBuilderTransformers.cutoutMipped()) .item() .tag(AllTags.AllItemTags.CONTRAPTION_CONTROLLED.tag) .model((c,p)->p.getBuilder(c.getName()).parent(sawItemModel(p,name))) @@ -512,7 +510,7 @@ public static BlockEntry createAutoClutch(String name) { .initialProperties(SharedProperties::stone) .properties(p -> p.noOcclusion() .mapColor(MapColor.PODZOL)) - .addLayer(() -> RenderType::cutoutMipped) + .transform(CasingBuilderTransformers.cutoutMipped()) .transform(CCStress.setNoImpact()) .transform(axeOrPickaxe()) .blockstate((c, p) ->EncasedBlockStateGens.axisBlock(c,p,autoClutchModel(p,name),false)) @@ -722,7 +720,7 @@ public static BlockEntry createFluidPipe(String name) { .properties(p -> p.forceSolidOff()) .transform(pickaxeOnly()) .blockstate(EncasedBlockStateGens.pipe(name)) - .onRegister(CreateRegistrate.blockModel(() -> model-> EncasedPipeAttachmentModel.withAO(model, name))) + .onRegister(CreateRegistrate.blockModel(() -> ClientModelWrappers.encasedPipeAttachment(name))) .item() .model((c,p)->p.getBuilder(c.getName()).parent(new ModelFile.UncheckedModelFile(CreateCasing.asResource("block/fluid_pipe/"+name+"/item")))) .build() @@ -734,7 +732,7 @@ public static BlockEntry createGlassFluidPipe(String return REGISTRATE.block(name+"_glass_fluid_pipe", CustomGlassFluidPipeBlock::new) .initialProperties(SharedProperties::copperMetal) .properties(p -> p.noOcclusion()) - .addLayer(() -> RenderType::cutoutMipped) + .transform(CasingBuilderTransformers.cutoutMipped()) .transform(pickaxeOnly()) .blockstate((c, p) -> { p.getVariantBuilder(c.getEntry()) @@ -749,7 +747,7 @@ public static BlockEntry createGlassFluidPipe(String .build(); }, BlockStateProperties.WATERLOGGED); }) - .onRegister(CreateRegistrate.blockModel(() -> model-> EncasedPipeAttachmentModel.withAO(model, name))) + .onRegister(CreateRegistrate.blockModel(() -> ClientModelWrappers.encasedPipeAttachment(name))) .loot((p, b) -> p.dropOther(b, pipe.get())) .register(); } @@ -760,7 +758,7 @@ public static BlockEntry createFluidPump(String name) { .properties(p -> p.mapColor(MapColor.STONE)) .transform(pickaxeOnly()) .blockstate(pump(name)) - .onRegister(CreateRegistrate.blockModel(() -> model-> EncasedPipeAttachmentModel.withAO(model, name))) + .onRegister(CreateRegistrate.blockModel(() -> ClientModelWrappers.encasedPipeAttachment(name))) .transform(CCStress.setImpact(4.0)) .item() .model((c,p)->p.getBuilder(c.getName()).parent(pumpModel(p,name,true))) @@ -774,7 +772,7 @@ public static BlockEntry createSmartFluidPipe(String .properties(p -> p.mapColor(MapColor.TERRACOTTA_YELLOW)) .transform(pickaxeOnly()) .blockstate(new CustomSmartFluidPipeGenerator(name)::generate) - .onRegister(CreateRegistrate.blockModel(() -> model-> EncasedPipeAttachmentModel.withAO(model, name))) + .onRegister(CreateRegistrate.blockModel(() -> ClientModelWrappers.encasedPipeAttachment(name))) .item() .model((c,p)->p.getBuilder(c.getName()).parent(smartPipeModel(p,name,true))) .build() @@ -788,11 +786,11 @@ public static BlockEntry createFluidTank(String name,CTSpr .isRedstoneConductor((p1, p2, p3) -> true)) .transform(pickaxeOnly()) .blockstate(new CustomFluidTankGenerator(name)::generate) - .onRegister(CreateRegistrate.blockModel(() -> model->new EncasedFluidTankModel(model,sideSprite,topSprite,innerSprite))) + .onRegister(CreateRegistrate.blockModel(() -> ClientModelWrappers.encasedFluidTank(sideSprite, topSprite, innerSprite))) .transform(displaySource(AllDisplaySources.BOILER)) .transform(mountedFluidStorage(AllMountedStorageTypes.FLUID_TANK)) .onRegister(movementBehaviour(new FluidTankMovementBehavior())) - .addLayer(() -> RenderType::cutoutMipped) + .transform(CasingBuilderTransformers.cutoutMipped()) .item(FluidTankItem::new) .model(AssetLookup.customBlockItemModel("fluid_tank",name, "block_single_window")) .build() @@ -816,7 +814,7 @@ public static BlockEntry createItemDrain(String name) { return REGISTRATE.block(name+"_item_drain", CustomItemDrainBlock::new) .initialProperties(SharedProperties::copperMetal) .transform(pickaxeOnly()) - .addLayer(() -> RenderType::cutoutMipped) + .transform(CasingBuilderTransformers.cutoutMipped()) .blockstate((c, p) -> p.simpleBlock(c.get(), itemDrainModel(p,name))) .item() .model(AssetLookup.customBlockItemModel("item_drain",name)) @@ -828,10 +826,10 @@ public static BlockEntry createFluidValve(String name) { return REGISTRATE.block(name+"_fluid_valve", CustomFluidValveBlock::new) .initialProperties(SharedProperties::copperMetal) .transform(pickaxeOnly()) - .addLayer(() -> RenderType::cutoutMipped) + .transform(CasingBuilderTransformers.cutoutMipped()) .blockstate((c, p) -> BlockStateGen.directionalAxisBlock(c, p, (state, vertical) -> fluidValveModel(p, name, false,vertical,state.getValue(FluidValveBlock.ENABLED)))) - .onRegister(CreateRegistrate.blockModel(() -> model->EncasedPipeAttachmentModel.withAO(model, name))) + .onRegister(CreateRegistrate.blockModel(() -> ClientModelWrappers.encasedPipeAttachment(name))) .item() .model((c,p)->p.getBuilder(c.getName()).parent(fluidValveModel(p,name,true,false,true))) .build() @@ -850,7 +848,7 @@ public static BlockEntry createHosePulley(String name) { return REGISTRATE.block(name+"_hose_pulley", CustomHosePulleyBlock::new) .initialProperties(SharedProperties::copperMetal) .properties(BlockBehaviour.Properties::noOcclusion) - .addLayer(() -> RenderType::cutoutMipped) + .transform(CasingBuilderTransformers.cutoutMipped()) .transform(pickaxeOnly()) .blockstate(hosePulley(name)) .transform(CCStress.setImpact(4.0)) @@ -909,7 +907,7 @@ public static BlockEntry createSpout(String name) { .initialProperties(SharedProperties::copperMetal) .transform(pickaxeOnly()) .blockstate((ctx, prov) -> prov.simpleBlock(ctx.getEntry(), spoutModel(prov,name,false))) - .addLayer(() -> RenderType::cutoutMipped) + .transform(CasingBuilderTransformers.cutoutMipped()) .item(AssemblyOperatorBlockItem::new) .model((c,p)->p.getBuilder(c.getName()).parent(spoutModel(p,name,true))) .build() @@ -923,7 +921,7 @@ public static BlockEntry createSpout(String name) { .properties(BlockBehaviour.Properties::noOcclusion) .transform(axeOrPickaxe()) .blockstate(EncasedBlockStateGens.encasedCustomPipe(name,casingName)) - .onRegister(CreateRegistrate.blockModel(() -> model-> EncasedPipeAttachmentModel.withAO(model, name))) + .onRegister(CreateRegistrate.blockModel(() -> ClientModelWrappers.encasedPipeAttachment(name))) .loot((p, b) -> p.dropOther(b, pipe.get())) .transform(EncasingRegistry.addVariantTo(pipe)) .onRegisterAfter(Registries.ITEM, CreateCasing::hideItem); diff --git a/src/main/java/fr/iglee42/createcasing/registries/EncasedCreativeModeTabs.java b/src/main/java/fr/iglee42/createcasing/registries/EncasedCreativeModeTabs.java index fd784888..f560d7d9 100644 --- a/src/main/java/fr/iglee42/createcasing/registries/EncasedCreativeModeTabs.java +++ b/src/main/java/fr/iglee42/createcasing/registries/EncasedCreativeModeTabs.java @@ -7,12 +7,10 @@ import fr.iglee42.createcasing.CreateCasing; import fr.iglee42.createcasing.casings.CasingSet; import fr.iglee42.createcasing.casings.CasingSets; +import fr.iglee42.createcasing.client.ClientItemPredicates; import fr.iglee42.createcasing.transmissions.TransmissionSets; import it.unimi.dsi.fastutil.objects.*; import net.createmod.catnip.platform.CatnipServices; -import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.entity.ItemRenderer; -import net.minecraft.client.resources.model.BakedModel; import net.minecraft.core.registries.Registries; import net.minecraft.network.chat.Component; import net.minecraft.world.item.*; @@ -20,7 +18,6 @@ import net.minecraft.world.level.block.Block; import net.neoforged.api.distmarker.Dist; -import net.neoforged.api.distmarker.OnlyIn; import net.neoforged.bus.api.IEventBus; import net.neoforged.fml.loading.FMLEnvironment; import net.neoforged.fml.util.thread.EffectiveSide; @@ -60,8 +57,8 @@ public static class RegistrateDisplayItemsGenerator implements CreativeModeTab.D static { MutableObject> isItem3d = new MutableObject<>(item -> false); - if (CatnipServices.PLATFORM.getEnv().isClient()) - isItem3d.setValue(makeClient3dItemPredicate()); + CatnipServices.PLATFORM.executeOnClientOnly( + () -> () -> isItem3d.setValue(ClientItemPredicates.make3dItemPredicate())); IS_ITEM_3D_PREDICATE = isItem3d.getValue(); } @@ -73,16 +70,6 @@ public RegistrateDisplayItemsGenerator(boolean addItems, DeferredHolder makeClient3dItemPredicate() { - return item -> { - ItemRenderer itemRenderer = Minecraft.getInstance() - .getItemRenderer(); - BakedModel model = itemRenderer.getModel(new ItemStack(item), null, null, 0); - return model.isGui3d(); - }; - } - private static Predicate makeExclusionPredicate() { Set exclusions = new ReferenceOpenHashSet<>(); exclusions.addAll(CreateCasing.hidedItems.stream().map(ItemLike::asItem).toList()); @@ -250,4 +237,4 @@ public enum Type { } } -} \ No newline at end of file +} diff --git a/src/main/java/fr/iglee42/createcasing/utils/CasingBuilderTransformers.java b/src/main/java/fr/iglee42/createcasing/utils/CasingBuilderTransformers.java index 7b9473f3..d4524ba9 100644 --- a/src/main/java/fr/iglee42/createcasing/utils/CasingBuilderTransformers.java +++ b/src/main/java/fr/iglee42/createcasing/utils/CasingBuilderTransformers.java @@ -17,9 +17,9 @@ import com.tterrag.registrate.builders.BlockBuilder; import com.tterrag.registrate.util.entry.BlockEntry; import com.tterrag.registrate.util.nullness.NonNullUnaryOperator; +import fr.iglee42.createcasing.client.ClientRenderTypes; import fr.iglee42.createcasing.config.CCStress; import fr.iglee42.createcasing.registries.EncasedBlockStateGens; -import net.minecraft.client.renderer.RenderType; import net.minecraft.core.Direction; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.ItemLike; @@ -38,6 +38,11 @@ public class CasingBuilderTransformers { + @SuppressWarnings({"deprecation", "removal"}) + public static NonNullUnaryOperator> cutoutMipped() { + return builder -> builder.addLayer(() -> ClientRenderTypes.cutoutMipped()); + } + public static NonNullUnaryOperator> encasedShaft(BlockEntry shaft, String casing, Supplier casingShift) { String sId = shaft.getId().getPath().replace("_shaft",""); if (shaft.equals(AllBlocks.SHAFT)) sId = "normal"; @@ -92,7 +97,7 @@ public static BlockBuilder encasedCogwheelBase(BlockBuilder b, String cogwheel, String casing, Supplier casingShift, Supplier drop, boolean large) { - BlockBuilder builder = encasedBase(b, drop).addLayer(() -> RenderType::cutoutMipped) + BlockBuilder builder = encasedBase(b, drop).transform(cutoutMipped()) .blockstate(large ? EncasedBlockStateGens.encasedLargeCogwheel(cogwheel,casing) : EncasedBlockStateGens.encasedCogwheel(cogwheel,casing)) .item() diff --git a/src/main/resources/createcasing.mixins.json b/src/main/resources/createcasing.mixins.json index 298d3e04..151664f7 100644 --- a/src/main/resources/createcasing.mixins.json +++ b/src/main/resources/createcasing.mixins.json @@ -15,12 +15,10 @@ "create.ChainConveyorConnectionHandlerMixin", "create.ChainDriveBlockMixin", "create.ChuteBlockEntityMixin", - "create.CreateJeiMixin", "create.DeployerBlockEntityAccessor", "create.DeployerBlockEntityMixin", "create.BlockStressValuesMixin", "create.PackagerBlockMixin", - "create.SchematicHandlerMixin", "create.arm_interactions.DeployerMixin", "create.arm_interactions.DepotMixin", "create.arm_interactions.SawMixin", @@ -38,6 +36,8 @@ ], "client": [ "create.BeltModelMixin", + "create.CreateJeiMixin", + "create.SchematicHandlerMixin", "create.client.ChainConveyorRendererMixin", "create.client.ChainConveyorVisualMixin", "create.client.DrillRendererMixin",