From 3f464bcefab62e96974a2ad3921837fcb41832bc Mon Sep 17 00:00:00 2001 From: justliliandev <36055315+justliliandev@users.noreply.github.com> Date: Fri, 14 Feb 2025 10:02:53 +0100 Subject: [PATCH 01/11] stop adventure mode from changing block configs (#7043) --- .../behaviour/ValueSettingsInputHandler.java | 4 ++-- .../networking/BlockEntityConfigurationPacket.java | 6 ++++-- .../create/foundation/utility/AdventureUtil.java | 11 +++++++++++ 3 files changed, 17 insertions(+), 4 deletions(-) create mode 100644 src/main/java/com/simibubi/create/foundation/utility/AdventureUtil.java diff --git a/src/main/java/com/simibubi/create/foundation/blockEntity/behaviour/ValueSettingsInputHandler.java b/src/main/java/com/simibubi/create/foundation/blockEntity/behaviour/ValueSettingsInputHandler.java index 5ab4fd6848..27e3d73ede 100644 --- a/src/main/java/com/simibubi/create/foundation/blockEntity/behaviour/ValueSettingsInputHandler.java +++ b/src/main/java/com/simibubi/create/foundation/blockEntity/behaviour/ValueSettingsInputHandler.java @@ -5,6 +5,7 @@ import com.simibubi.create.AllTags.AllItemTags; import com.simibubi.create.CreateClient; import com.simibubi.create.foundation.blockEntity.SmartBlockEntity; import com.simibubi.create.foundation.blockEntity.behaviour.filtering.SidedFilteringBehaviour; +import com.simibubi.create.foundation.utility.AdventureUtil; import com.simibubi.create.foundation.utility.RaycastHelper; import net.minecraft.core.BlockPos; @@ -92,7 +93,6 @@ public class ValueSettingsInputHandler { } public static boolean canInteract(Player player) { - return player != null && !player.isSpectator() && !player.isShiftKeyDown(); + return player != null && !player.isSpectator() && !player.isShiftKeyDown() && !AdventureUtil.isAdventure(player); } - } diff --git a/src/main/java/com/simibubi/create/foundation/networking/BlockEntityConfigurationPacket.java b/src/main/java/com/simibubi/create/foundation/networking/BlockEntityConfigurationPacket.java index 35d80758f6..fb7ab5b0c0 100644 --- a/src/main/java/com/simibubi/create/foundation/networking/BlockEntityConfigurationPacket.java +++ b/src/main/java/com/simibubi/create/foundation/networking/BlockEntityConfigurationPacket.java @@ -2,6 +2,8 @@ package com.simibubi.create.foundation.networking; import com.simibubi.create.foundation.blockEntity.SyncedBlockEntity; +import com.simibubi.create.foundation.utility.AdventureUtil; + import net.minecraft.core.BlockPos; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.server.level.ServerPlayer; @@ -33,7 +35,7 @@ public abstract class BlockEntityConfigurationPacket { ServerPlayer player = context.getSender(); - if (player == null) + if (player == null || player.isSpectator() || AdventureUtil.isAdventure(player)) return; Level world = player.level(); if (world == null || !world.isLoaded(pos)) @@ -63,7 +65,7 @@ public abstract class BlockEntityConfigurationPacket Date: Fri, 14 Feb 2025 04:09:26 -0500 Subject: [PATCH 02/11] Fix endermen teleporting to Shafts and Fluid Pipes (#6967) --- src/main/java/com/simibubi/create/AllBlocks.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/simibubi/create/AllBlocks.java b/src/main/java/com/simibubi/create/AllBlocks.java index bc794ecc36..40cc436574 100644 --- a/src/main/java/com/simibubi/create/AllBlocks.java +++ b/src/main/java/com/simibubi/create/AllBlocks.java @@ -355,7 +355,7 @@ public class AllBlocks { public static final BlockEntry SHAFT = REGISTRATE.block("shaft", ShaftBlock::new) .initialProperties(SharedProperties::stone) - .properties(p -> p.mapColor(MapColor.METAL).forceSolidOn()) + .properties(p -> p.mapColor(MapColor.METAL).forceSolidOff()) .transform(BlockStressDefaults.setNoImpact()) .transform(pickaxeOnly()) .blockstate(BlockStateGen.axisBlockProvider(false)) @@ -822,7 +822,7 @@ public class AllBlocks { public static final BlockEntry FLUID_PIPE = REGISTRATE.block("fluid_pipe", FluidPipeBlock::new) .initialProperties(SharedProperties::copperMetal) - .properties(p -> p.forceSolidOn()) + .properties(p -> p.forceSolidOff()) .transform(pickaxeOnly()) .blockstate(BlockStateGen.pipe()) .onRegister(CreateRegistrate.blockModel(() -> PipeAttachmentModel::new)) From 7a0ebd96d1175daccca4bfefa24dce1f92b6beff Mon Sep 17 00:00:00 2001 From: simibubi <31564874+simibubi@users.noreply.github.com> Date: Fri, 14 Feb 2025 11:10:45 +0100 Subject: [PATCH 03/11] Belt smelts - Fixed items processed by spout/press/deployer not able to be processed by fan afterwards #7012 #6559 #7013 - Fixed belt items resetting fan processing progress on reload --- .../fluids/spout/SpoutBlockEntity.java | 1 + .../belt/transport/TransportedItemStack.java | 19 +++++++++++++++++++ .../deployer/BeltDeployerCallbacks.java | 2 ++ .../kinetics/press/BeltPressingCallbacks.java | 2 ++ 4 files changed, 24 insertions(+) diff --git a/src/main/java/com/simibubi/create/content/fluids/spout/SpoutBlockEntity.java b/src/main/java/com/simibubi/create/content/fluids/spout/SpoutBlockEntity.java index 7ac5e382b6..756d0401a0 100644 --- a/src/main/java/com/simibubi/create/content/fluids/spout/SpoutBlockEntity.java +++ b/src/main/java/com/simibubi/create/content/fluids/spout/SpoutBlockEntity.java @@ -113,6 +113,7 @@ public class SpoutBlockEntity extends SmartBlockEntity implements IHaveGoggleInf // Process finished ItemStack out = FillingBySpout.fillItem(level, requiredAmountForItem, transported.stack, fluid); if (!out.isEmpty()) { + transported.clearFanProcessingData(); List outList = new ArrayList<>(); TransportedItemStack held = null; TransportedItemStack result = transported.copy(); diff --git a/src/main/java/com/simibubi/create/content/kinetics/belt/transport/TransportedItemStack.java b/src/main/java/com/simibubi/create/content/kinetics/belt/transport/TransportedItemStack.java index aa55002608..fb522c9f83 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/belt/transport/TransportedItemStack.java +++ b/src/main/java/com/simibubi/create/content/kinetics/belt/transport/TransportedItemStack.java @@ -3,7 +3,9 @@ package com.simibubi.create.content.kinetics.belt.transport; import java.util.Random; import com.simibubi.create.content.kinetics.belt.BeltHelper; +import com.simibubi.create.content.kinetics.fan.processing.AllFanProcessingTypes; import com.simibubi.create.content.kinetics.fan.processing.FanProcessingType; +import com.simibubi.create.content.kinetics.fan.processing.FanProcessingTypeRegistry; import net.minecraft.core.Direction; import net.minecraft.nbt.CompoundTag; @@ -74,6 +76,12 @@ public class TransportedItemStack implements Comparable { nbt.putInt("InSegment", insertedAt); nbt.putInt("Angle", angle); nbt.putInt("InDirection", insertedFrom.get3DDataValue()); + + if (processedBy != null && processedBy != AllFanProcessingTypes.NONE) { + nbt.putString("FanProcessingType", FanProcessingTypeRegistry.getIdOrThrow(processedBy).toString()); + nbt.putInt("FanProcessingTime", processingTime); + } + if (locked) nbt.putBoolean("Locked", locked); if (lockedExternally) @@ -92,7 +100,18 @@ public class TransportedItemStack implements Comparable { stack.insertedFrom = Direction.from3DDataValue(nbt.getInt("InDirection")); stack.locked = nbt.getBoolean("Locked"); stack.lockedExternally = nbt.getBoolean("LockedExternally"); + + if (nbt.contains("FanProcessingType")) { + stack.processedBy = AllFanProcessingTypes.parseLegacy(nbt.getString("FanProcessingType")); + stack.processingTime = nbt.getInt("FanProcessingTime"); + } + return stack; } + + public void clearFanProcessingData() { + processedBy = null; + processingTime = 0; + } } \ No newline at end of file diff --git a/src/main/java/com/simibubi/create/content/kinetics/deployer/BeltDeployerCallbacks.java b/src/main/java/com/simibubi/create/content/kinetics/deployer/BeltDeployerCallbacks.java index e18b1d699a..a14f80bf14 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/deployer/BeltDeployerCallbacks.java +++ b/src/main/java/com/simibubi/create/content/kinetics/deployer/BeltDeployerCallbacks.java @@ -113,6 +113,8 @@ public class BeltDeployerCallbacks { .collect(Collectors.toList()); blockEntity.award(AllAdvancements.DEPLOYER); + + transported.clearFanProcessingData(); TransportedItemStack left = transported.copy(); blockEntity.player.spawnedItemEffects = transported.stack.copy(); diff --git a/src/main/java/com/simibubi/create/content/kinetics/press/BeltPressingCallbacks.java b/src/main/java/com/simibubi/create/content/kinetics/press/BeltPressingCallbacks.java index 900aab84b3..2ae6407f11 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/press/BeltPressingCallbacks.java +++ b/src/main/java/com/simibubi/create/content/kinetics/press/BeltPressingCallbacks.java @@ -49,6 +49,8 @@ public class BeltPressingCallbacks { boolean bulk = behaviour.specifics.canProcessInBulk() || transported.stack.getCount() == 1; + transported.clearFanProcessingData(); + List collect = results.stream() .map(stack -> { TransportedItemStack copy = transported.copy(); From 7294ba9e2208945b4c2dcba6573d4dd8488b29ae Mon Sep 17 00:00:00 2001 From: IThundxr Date: Fri, 14 Feb 2025 05:12:09 -0500 Subject: [PATCH 04/11] Fix display links not working with large stack size inventories (#7055) - Fixes #6992 --- .../simibubi/create/foundation/item/CountedItemStackList.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/simibubi/create/foundation/item/CountedItemStackList.java b/src/main/java/com/simibubi/create/foundation/item/CountedItemStackList.java index 224f6a0fcf..6fb8085d9a 100644 --- a/src/main/java/com/simibubi/create/foundation/item/CountedItemStackList.java +++ b/src/main/java/com/simibubi/create/foundation/item/CountedItemStackList.java @@ -22,7 +22,7 @@ public class CountedItemStackList { public CountedItemStackList(IItemHandler inventory, FilteringBehaviour filteringBehaviour) { for (int slot = 0; slot < inventory.getSlots(); slot++) { - ItemStack extractItem = inventory.extractItem(slot, inventory.getSlotLimit(slot), true); + ItemStack extractItem = inventory.getStackInSlot(slot); if (filteringBehaviour.test(extractItem)) add(extractItem); } From 3c47276b67cbabaf7c08ff258bd97ba97010ea99 Mon Sep 17 00:00:00 2001 From: Niklas Widmann Date: Fri, 14 Feb 2025 11:13:48 +0100 Subject: [PATCH 05/11] use remaining items to calculate remainder items for basin recipes (#7076) --- .../content/processing/basin/BasinRecipe.java | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/simibubi/create/content/processing/basin/BasinRecipe.java b/src/main/java/com/simibubi/create/content/processing/basin/BasinRecipe.java index 3bb7827151..0cf479e12d 100644 --- a/src/main/java/com/simibubi/create/content/processing/basin/BasinRecipe.java +++ b/src/main/java/com/simibubi/create/content/processing/basin/BasinRecipe.java @@ -22,6 +22,8 @@ import com.simibubi.create.foundation.recipe.IRecipeTypeInfo; import com.simibubi.create.foundation.utility.Iterate; import net.minecraft.client.Minecraft; +import net.minecraft.world.Container; +import net.minecraft.world.inventory.CraftingContainer; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.crafting.CraftingRecipe; import net.minecraft.world.item.crafting.Ingredient; @@ -32,7 +34,7 @@ import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.capability.IFluidHandler; import net.minecraftforge.items.IItemHandler; -public class BasinRecipe extends ProcessingRecipe { +public class BasinRecipe extends ProcessingRecipe { public static boolean match(BasinBlockEntity basin, Recipe recipe) { FilteringBehaviour filter = basin.getFilter(); @@ -148,23 +150,24 @@ public class BasinRecipe extends ProcessingRecipe { } if (simulate) { + CraftingContainer remainderContainer = new DummyCraftingContainer(availableItems, extractedItemsFromSlot); + if (recipe instanceof BasinRecipe basinRecipe) { recipeOutputItems.addAll(basinRecipe.rollResults()); - + for (FluidStack fluidStack : basinRecipe.getFluidResults()) if (!fluidStack.isEmpty()) recipeOutputFluids.add(fluidStack); - for (ItemStack stack : basinRecipe.getRemainingItems(basin.getInputInventory())) + for (ItemStack stack : basinRecipe.getRemainingItems(remainderContainer)) if (!stack.isEmpty()) recipeOutputItems.add(stack); - + } else { recipeOutputItems.add(recipe.getResultItem(basin.getLevel() .registryAccess())); if (recipe instanceof CraftingRecipe craftingRecipe) { - for (ItemStack stack : craftingRecipe - .getRemainingItems(new DummyCraftingContainer(availableItems, extractedItemsFromSlot))) + for (ItemStack stack : craftingRecipe.getRemainingItems(remainderContainer)) if (!stack.isEmpty()) recipeOutputItems.add(stack); } @@ -225,7 +228,7 @@ public class BasinRecipe extends ProcessingRecipe { } @Override - public boolean matches(SmartInventory inv, @Nonnull Level worldIn) { + public boolean matches(Container inv, @Nonnull Level worldIn) { return false; } From 4949df978ae516e422a79ecb81e63eb1c86c065c Mon Sep 17 00:00:00 2001 From: MoePus <547007249@qq.com> Date: Fri, 14 Feb 2025 19:16:38 +0900 Subject: [PATCH 06/11] use itemRenderer.render instead of renderStatic in ValueBoxRenderer (#7125) --- .../foundation/blockEntity/behaviour/ValueBoxRenderer.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/simibubi/create/foundation/blockEntity/behaviour/ValueBoxRenderer.java b/src/main/java/com/simibubi/create/foundation/blockEntity/behaviour/ValueBoxRenderer.java index fc60eb4e41..2a20d8fdb5 100644 --- a/src/main/java/com/simibubi/create/foundation/blockEntity/behaviour/ValueBoxRenderer.java +++ b/src/main/java/com/simibubi/create/foundation/blockEntity/behaviour/ValueBoxRenderer.java @@ -34,7 +34,7 @@ public class ValueBoxRenderer { float zOffset = (!blockItem ? -.15f : 0) + customZOffset(filter.getItem()); ms.scale(scale, scale, scale); ms.translate(0, 0, zOffset); - itemRenderer.renderStatic(filter, ItemDisplayContext.FIXED, light, overlay, ms, buffer, mc.level, 0); + itemRenderer.render(filter, ItemDisplayContext.FIXED, false, ms, buffer, light, overlay, modelWithOverrides); } public static void renderFlatItemIntoValueBox(ItemStack filter, PoseStack ms, MultiBufferSource buffer, int light, From d95515a4053a16e269cd3241049fdcceb4b335a8 Mon Sep 17 00:00:00 2001 From: Kevin Z Date: Fri, 14 Feb 2025 03:17:38 -0700 Subject: [PATCH 07/11] add writeBytes to displayLinkPeripheral to allow write utf8 from CC:T (#7231) --- .../peripherals/DisplayLinkPeripheral.java | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/src/main/java/com/simibubi/create/compat/computercraft/implementation/peripherals/DisplayLinkPeripheral.java b/src/main/java/com/simibubi/create/compat/computercraft/implementation/peripherals/DisplayLinkPeripheral.java index 693a72aa71..2c3008b9c1 100644 --- a/src/main/java/com/simibubi/create/compat/computercraft/implementation/peripherals/DisplayLinkPeripheral.java +++ b/src/main/java/com/simibubi/create/compat/computercraft/implementation/peripherals/DisplayLinkPeripheral.java @@ -1,5 +1,7 @@ package com.simibubi.create.compat.computercraft.implementation.peripherals; +import java.nio.charset.StandardCharsets; +import java.util.Map; import java.util.concurrent.atomic.AtomicInteger; import org.jetbrains.annotations.NotNull; @@ -8,7 +10,11 @@ import com.simibubi.create.content.redstone.displayLink.DisplayLinkBlockEntity; import com.simibubi.create.content.redstone.displayLink.DisplayLinkContext; import com.simibubi.create.content.redstone.displayLink.target.DisplayTargetStats; +import dan200.computercraft.api.lua.IArguments; +import dan200.computercraft.api.lua.LuaException; import dan200.computercraft.api.lua.LuaFunction; +import dan200.computercraft.api.lua.LuaValues; +import dan200.computercraft.api.lua.ObjectLuaTable; import net.minecraft.nbt.ListTag; import net.minecraft.nbt.StringTag; import net.minecraft.nbt.Tag; @@ -53,6 +59,28 @@ public class DisplayLinkPeripheral extends SyncedPeripheral map) { + ObjectLuaTable table = new ObjectLuaTable(map); + bytes = new byte[table.length()]; + for (int i = 0; i < bytes.length; i++) { + bytes[i] = (byte) (table.getInt(i + 1) & 0xff); + } + } else { + throw LuaValues.badArgumentOf(args, 0, "string or table"); + } + writeImpl(new String(bytes, StandardCharsets.UTF_8)); + } + + protected final void writeImpl(String text) { ListTag tag = blockEntity.getSourceConfig().getList(TAG_KEY, Tag.TAG_STRING); int x = cursorX.get(); From 773fd257b929285a851a4ee5d3e4b0f9c51efd5f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luiz=20Kr=C3=BCger?= <46863600+itisluiz@users.noreply.github.com> Date: Fri, 14 Feb 2025 07:18:51 -0300 Subject: [PATCH 08/11] fix: Resolve issue with book & quills on lectern contraptions (#7276) Resolves #7253. Where an attempt to parse JSON out of a writable book (not a written book), which has raw string data for the pages array caused a game crash. --- .../create/foundation/utility/NBTProcessors.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/simibubi/create/foundation/utility/NBTProcessors.java b/src/main/java/com/simibubi/create/foundation/utility/NBTProcessors.java index d23f57e895..62cd194ad4 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/NBTProcessors.java +++ b/src/main/java/com/simibubi/create/foundation/utility/NBTProcessors.java @@ -15,13 +15,16 @@ import net.minecraft.nbt.ListTag; import net.minecraft.nbt.StringTag; import net.minecraft.nbt.Tag; import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceLocation; import net.minecraft.tags.BlockTags; import net.minecraft.world.item.EnchantedBookItem; import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.entity.SpawnerBlockEntity; import net.minecraft.world.level.block.state.BlockState; +import net.minecraftforge.registries.ForgeRegistries; public final class NBTProcessors { @@ -43,6 +46,11 @@ public final class NBTProcessors { return data; CompoundTag book = data.getCompound("Book"); + // Writable books can't have click events, so they're safe to keep + ResourceLocation writableBookResource = ForgeRegistries.ITEMS.getKey(Items.WRITABLE_BOOK); + if (writableBookResource != null && book.getString("id").equals(writableBookResource.toString())) + return data; + if (!book.contains("tag", Tag.TAG_COMPOUND)) return data; CompoundTag tag = book.getCompound("tag"); @@ -67,7 +75,7 @@ public final class NBTProcessors { if (!book.contains("tag", Tag.TAG_COMPOUND)) return data; CompoundTag itemData = book.getCompound("tag"); - + for (List entries : NBTHelper.readCompoundList(itemData.getList("Pages", Tag.TAG_COMPOUND), pageTag -> NBTHelper.readCompoundList(pageTag.getList("Entries", Tag.TAG_COMPOUND), tag -> tag.getString("Text")))) { From b1565391a498cd2311e704855b0955a32d875784 Mon Sep 17 00:00:00 2001 From: simibubi <31564874+simibubi@users.noreply.github.com> Date: Fri, 14 Feb 2025 11:44:37 +0100 Subject: [PATCH 09/11] Update CreateNBTProcessors.java --- .../create/foundation/utility/CreateNBTProcessors.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/main/java/com/simibubi/create/foundation/utility/CreateNBTProcessors.java b/src/main/java/com/simibubi/create/foundation/utility/CreateNBTProcessors.java index c55e66907d..8bb79c133a 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/CreateNBTProcessors.java +++ b/src/main/java/com/simibubi/create/foundation/utility/CreateNBTProcessors.java @@ -9,7 +9,10 @@ import net.createmod.catnip.nbt.NBTProcessors; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.ListTag; import net.minecraft.nbt.Tag; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.Items; import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraftforge.registries.ForgeRegistries; public class CreateNBTProcessors { public static void register() { @@ -26,6 +29,11 @@ public class CreateNBTProcessors { if (!data.contains("Book", Tag.TAG_COMPOUND)) return data; CompoundTag book = data.getCompound("Book"); + + // Writable books can't have click events, so they're safe to keep + ResourceLocation writableBookResource = ForgeRegistries.ITEMS.getKey(Items.WRITABLE_BOOK); + if (writableBookResource != null && book.getString("id").equals(writableBookResource.toString())) + return data; if (!book.contains("tag", Tag.TAG_COMPOUND)) return data; From e9eec088ce9ee0dbd301cbc72cb5e6b558fba4b2 Mon Sep 17 00:00:00 2001 From: IThundxr Date: Sun, 12 Jan 2025 13:36:06 -0500 Subject: [PATCH 10/11] Mixed Mixins - Rewrite mixins, for the third and hopefully final time --- .../equipment/sandPaper/SandPaperItem.java | 5 +-- .../item/filter/attribute/ItemAttribute.java | 8 ++--- .../BlockDestructionProgressExtension.java | 4 +-- .../foundation/item/CustomUseEffectsItem.java | 13 ++++---- .../foundation/mixin/ArmorTrimMixin.java | 3 +- .../mixin/ContraptionDriverInteractMixin.java | 1 + .../mixin/CustomItemUseEffectsMixin.java | 7 ++-- .../create/foundation/mixin/EntityMixin.java | 27 +++++---------- .../foundation/mixin/ProjectileUtilMixin.java | 19 +++++++++++ .../mixin/ShulkerBoxBlockMixin.java | 9 +++-- .../accessor/HumanoidArmorLayerAccessor.java | 1 - .../mixin/accessor/LevelRendererAccessor.java | 7 ++-- .../mixin/accessor/MouseHandlerAccessor.java | 1 - .../client/BlockDestructionProgressMixin.java | 4 +-- .../foundation/mixin/client/CameraMixin.java | 4 +-- .../EntityContraptionInteractionMixin.java | 14 ++++---- .../mixin/client/HeavyBootsOnPlayerMixin.java | 13 +++----- .../mixin/client/HumanoidArmorLayerMixin.java | 13 ++++++-- .../mixin/client/HumanoidModelMixin.java | 2 -- .../mixin/client/LevelRendererMixin.java | 5 +-- .../mixin/client/ModelDataRefreshMixin.java | 33 ------------------- .../mixin/client/PlayerRendererMixin.java | 8 ++--- .../compat/JourneyFullscreenMapMixin.java | 1 - src/main/resources/create.mixins.json | 1 + 24 files changed, 90 insertions(+), 113 deletions(-) create mode 100644 src/main/java/com/simibubi/create/foundation/mixin/ProjectileUtilMixin.java delete mode 100644 src/main/java/com/simibubi/create/foundation/mixin/client/ModelDataRefreshMixin.java diff --git a/src/main/java/com/simibubi/create/content/equipment/sandPaper/SandPaperItem.java b/src/main/java/com/simibubi/create/content/equipment/sandPaper/SandPaperItem.java index 8b7c13f7be..73b2eb02da 100644 --- a/src/main/java/com/simibubi/create/content/equipment/sandPaper/SandPaperItem.java +++ b/src/main/java/com/simibubi/create/content/equipment/sandPaper/SandPaperItem.java @@ -9,6 +9,7 @@ import com.simibubi.create.foundation.item.CustomUseEffectsItem; import com.simibubi.create.foundation.item.render.SimpleCustomRenderer; import com.simibubi.create.foundation.mixin.accessor.LivingEntityAccessor; +import net.createmod.catnip.data.TriState; import net.createmod.catnip.math.VecHelper; import net.minecraft.MethodsReturnNonnullByDefault; import net.minecraft.core.BlockPos; @@ -206,9 +207,9 @@ public class SandPaperItem extends Item implements CustomUseEffectsItem { } @Override - public Boolean shouldTriggerUseEffects(ItemStack stack, LivingEntity entity) { + public TriState shouldTriggerUseEffects(ItemStack stack, LivingEntity entity) { // Trigger every tick so that we have more fine grain control over the animation - return true; + return TriState.TRUE; } @Override diff --git a/src/main/java/com/simibubi/create/content/logistics/item/filter/attribute/ItemAttribute.java b/src/main/java/com/simibubi/create/content/logistics/item/filter/attribute/ItemAttribute.java index a51ca3cd12..b17d142dab 100644 --- a/src/main/java/com/simibubi/create/content/logistics/item/filter/attribute/ItemAttribute.java +++ b/src/main/java/com/simibubi/create/content/logistics/item/filter/attribute/ItemAttribute.java @@ -3,17 +3,17 @@ package com.simibubi.create.content.logistics.item.filter.attribute; import java.util.ArrayList; import java.util.List; -import com.simibubi.create.foundation.utility.CreateLang; - import org.jetbrains.annotations.Nullable; import com.simibubi.create.AllRegistries; +import com.simibubi.create.foundation.utility.CreateLang; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.chat.MutableComponent; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Level; + import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; @@ -43,9 +43,9 @@ public interface ItemAttribute { return null; ItemAttributeType type = AllRegistries.ITEM_ATTRIBUTE_TYPES.get().getValue(id); - if (type == null) { + if (type == null) return null; - } + ItemAttribute attribute = type.createAttribute(); attribute.load(nbt); return attribute; diff --git a/src/main/java/com/simibubi/create/foundation/block/render/BlockDestructionProgressExtension.java b/src/main/java/com/simibubi/create/foundation/block/render/BlockDestructionProgressExtension.java index 2a7bca863f..1948efe36d 100644 --- a/src/main/java/com/simibubi/create/foundation/block/render/BlockDestructionProgressExtension.java +++ b/src/main/java/com/simibubi/create/foundation/block/render/BlockDestructionProgressExtension.java @@ -8,7 +8,7 @@ import net.minecraft.core.BlockPos; public interface BlockDestructionProgressExtension { @Nullable - Set getExtraPositions(); + Set create$getExtraPositions(); - void setExtraPositions(@Nullable Set positions); + void create$setExtraPositions(@Nullable Set positions); } diff --git a/src/main/java/com/simibubi/create/foundation/item/CustomUseEffectsItem.java b/src/main/java/com/simibubi/create/foundation/item/CustomUseEffectsItem.java index 58c76c7536..9fa4267415 100644 --- a/src/main/java/com/simibubi/create/foundation/item/CustomUseEffectsItem.java +++ b/src/main/java/com/simibubi/create/foundation/item/CustomUseEffectsItem.java @@ -1,5 +1,6 @@ package com.simibubi.create.foundation.item; +import net.createmod.catnip.data.TriState; import net.minecraft.util.RandomSource; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.item.ItemStack; @@ -8,20 +9,20 @@ public interface CustomUseEffectsItem { /** * Called to determine if use effects should be applied for this item. * - * @param stack The ItemStack being used. + * @param stack The ItemStack being used. * @param entity The LivingEntity using the item. - * @return null for default behavior, or boolean to override default behavior + * @return {@link TriState#DEFAULT} for default behavior, or {@link TriState#TRUE}/{@link TriState#FALSE} to override default behavior */ - default Boolean shouldTriggerUseEffects(ItemStack stack, LivingEntity entity) { - return null; + default TriState shouldTriggerUseEffects(ItemStack stack, LivingEntity entity) { + return TriState.DEFAULT; } /** * Called when use effects should be applied for this item. * - * @param stack The ItemStack being used. + * @param stack The ItemStack being used. * @param entity The LivingEntity using the item. - * @param count The amount of times effects should be applied. Can safely be ignored. + * @param count The amount of times effects should be applied. Can safely be ignored. * @param random The LivingEntity's RandomSource. * @return if the default behavior should be cancelled or not */ diff --git a/src/main/java/com/simibubi/create/foundation/mixin/ArmorTrimMixin.java b/src/main/java/com/simibubi/create/foundation/mixin/ArmorTrimMixin.java index 975e19728a..2737c8650c 100644 --- a/src/main/java/com/simibubi/create/foundation/mixin/ArmorTrimMixin.java +++ b/src/main/java/com/simibubi/create/foundation/mixin/ArmorTrimMixin.java @@ -2,8 +2,6 @@ package com.simibubi.create.foundation.mixin; import java.util.function.BiFunction; -import com.simibubi.create.Create; - import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -12,6 +10,7 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +import com.simibubi.create.Create; import com.simibubi.create.content.equipment.armor.AllArmorMaterials; import net.minecraft.Util; diff --git a/src/main/java/com/simibubi/create/foundation/mixin/ContraptionDriverInteractMixin.java b/src/main/java/com/simibubi/create/foundation/mixin/ContraptionDriverInteractMixin.java index b575a7de5f..e80d631192 100644 --- a/src/main/java/com/simibubi/create/foundation/mixin/ContraptionDriverInteractMixin.java +++ b/src/main/java/com/simibubi/create/foundation/mixin/ContraptionDriverInteractMixin.java @@ -11,6 +11,7 @@ import org.spongepowered.asm.mixin.Shadow; import com.simibubi.create.content.contraptions.AbstractContraptionEntity; import net.minecraft.world.entity.Entity; + import net.minecraftforge.common.capabilities.CapabilityProvider; import net.minecraftforge.common.extensions.IForgeEntity; diff --git a/src/main/java/com/simibubi/create/foundation/mixin/CustomItemUseEffectsMixin.java b/src/main/java/com/simibubi/create/foundation/mixin/CustomItemUseEffectsMixin.java index 86a899299a..20c6715d4f 100644 --- a/src/main/java/com/simibubi/create/foundation/mixin/CustomItemUseEffectsMixin.java +++ b/src/main/java/com/simibubi/create/foundation/mixin/CustomItemUseEffectsMixin.java @@ -9,6 +9,7 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import com.simibubi.create.foundation.item.CustomUseEffectsItem; +import net.createmod.catnip.data.TriState; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.LivingEntity; @@ -30,9 +31,9 @@ public abstract class CustomItemUseEffectsMixin extends Entity { ItemStack using = getUseItem(); Item item = using.getItem(); if (item instanceof CustomUseEffectsItem handler) { - Boolean result = handler.shouldTriggerUseEffects(using, (LivingEntity) (Object) this); - if (result != null) { - cir.setReturnValue(result); + TriState result = handler.shouldTriggerUseEffects(using, (LivingEntity) (Object) this); + if (result != TriState.DEFAULT) { + cir.setReturnValue(result.getValue()); } } } diff --git a/src/main/java/com/simibubi/create/foundation/mixin/EntityMixin.java b/src/main/java/com/simibubi/create/foundation/mixin/EntityMixin.java index e9383a7062..1657dfa274 100644 --- a/src/main/java/com/simibubi/create/foundation/mixin/EntityMixin.java +++ b/src/main/java/com/simibubi/create/foundation/mixin/EntityMixin.java @@ -1,35 +1,26 @@ package com.simibubi.create.foundation.mixin; -import com.llamalad7.mixinextras.injector.ModifyExpressionValue; - -import com.llamalad7.mixinextras.sugar.Local; -import com.simibubi.create.content.equipment.armor.CardboardArmorHandler; - -import net.minecraft.world.entity.Pose; - import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +import com.llamalad7.mixinextras.injector.ModifyExpressionValue; +import com.llamalad7.mixinextras.injector.ModifyReturnValue; +import com.llamalad7.mixinextras.sugar.Local; +import com.simibubi.create.content.equipment.armor.CardboardArmorHandler; import com.simibubi.create.content.equipment.armor.NetheriteDivingHandler; import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.Pose; -@Mixin(value = Entity.class, priority = 900) +@Mixin(Entity.class) public class EntityMixin { @ModifyExpressionValue(method = "canEnterPose", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/level/Level;noCollision(Lnet/minecraft/world/entity/Entity;Lnet/minecraft/world/phys/AABB;)Z")) public boolean create$playerHidingAsBoxIsCrouchingNotSwimming(boolean original, @Local(argsOnly = true) Pose pose) { return original || (pose == Pose.CROUCHING && CardboardArmorHandler.testForStealth((Entity) (Object) this)); } - @Inject(method = "fireImmune()Z", at = @At("RETURN"), cancellable = true) - public void create$onFireImmune(CallbackInfoReturnable cir) { - if (!cir.getReturnValueZ()) { - Entity self = (Entity) (Object) this; - boolean immune = self.getPersistentData().getBoolean(NetheriteDivingHandler.FIRE_IMMUNE_KEY); - if (immune) - cir.setReturnValue(immune); - } + @ModifyReturnValue(method = "fireImmune()Z", at = @At("RETURN")) + public boolean create$onFireImmune(boolean original) { + return ((Entity) (Object) this).getPersistentData().getBoolean(NetheriteDivingHandler.FIRE_IMMUNE_KEY) || original; } } diff --git a/src/main/java/com/simibubi/create/foundation/mixin/ProjectileUtilMixin.java b/src/main/java/com/simibubi/create/foundation/mixin/ProjectileUtilMixin.java new file mode 100644 index 0000000000..66bf6495f1 --- /dev/null +++ b/src/main/java/com/simibubi/create/foundation/mixin/ProjectileUtilMixin.java @@ -0,0 +1,19 @@ +package com.simibubi.create.foundation.mixin; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; + +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; +import com.simibubi.create.content.contraptions.AbstractContraptionEntity; + +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.projectile.ProjectileUtil; + +@Mixin(ProjectileUtil.class) +public class ProjectileUtilMixin { + @WrapOperation(method = "getEntityHitResult(Lnet/minecraft/world/entity/Entity;Lnet/minecraft/world/phys/Vec3;Lnet/minecraft/world/phys/Vec3;Lnet/minecraft/world/phys/AABB;Ljava/util/function/Predicate;D)Lnet/minecraft/world/phys/EntityHitResult;", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/Entity;canRiderInteract()Z")) + private static boolean create$interactWithEntitiesOnContraptions(Entity instance, Operation original) { + return original.call(instance) || instance.getRootVehicle() instanceof AbstractContraptionEntity; + } +} diff --git a/src/main/java/com/simibubi/create/foundation/mixin/ShulkerBoxBlockMixin.java b/src/main/java/com/simibubi/create/foundation/mixin/ShulkerBoxBlockMixin.java index ed3102bbe2..acc38aae67 100644 --- a/src/main/java/com/simibubi/create/foundation/mixin/ShulkerBoxBlockMixin.java +++ b/src/main/java/com/simibubi/create/foundation/mixin/ShulkerBoxBlockMixin.java @@ -1,18 +1,17 @@ package com.simibubi.create.foundation.mixin; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; + import com.llamalad7.mixinextras.injector.ModifyExpressionValue; import net.minecraft.world.Container; import net.minecraft.world.level.block.ShulkerBoxBlock; - import net.minecraft.world.level.block.entity.BlockEntity; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; - @Mixin(ShulkerBoxBlock.class) public class ShulkerBoxBlockMixin { - @ModifyExpressionValue(method = "getAnalogOutputSignal",at = @At(value = "INVOKE", target = "Lnet/minecraft/world/level/Level;getBlockEntity(Lnet/minecraft/core/BlockPos;)Lnet/minecraft/world/level/block/entity/BlockEntity;")) + @ModifyExpressionValue(method = "getAnalogOutputSignal", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/level/Level;getBlockEntity(Lnet/minecraft/core/BlockPos;)Lnet/minecraft/world/level/block/entity/BlockEntity;")) private BlockEntity create$backportCCESuppressionFix(BlockEntity original) { return original instanceof Container ? original : null; } diff --git a/src/main/java/com/simibubi/create/foundation/mixin/accessor/HumanoidArmorLayerAccessor.java b/src/main/java/com/simibubi/create/foundation/mixin/accessor/HumanoidArmorLayerAccessor.java index 34d7e63ab1..4735df807a 100644 --- a/src/main/java/com/simibubi/create/foundation/mixin/accessor/HumanoidArmorLayerAccessor.java +++ b/src/main/java/com/simibubi/create/foundation/mixin/accessor/HumanoidArmorLayerAccessor.java @@ -26,5 +26,4 @@ public interface HumanoidArmorLayerAccessor { @Invoker("setPartVisibility") void create$callSetPartVisibility(HumanoidModel model, EquipmentSlot slot); - } diff --git a/src/main/java/com/simibubi/create/foundation/mixin/accessor/LevelRendererAccessor.java b/src/main/java/com/simibubi/create/foundation/mixin/accessor/LevelRendererAccessor.java index 57270d6bff..3bf9342d47 100644 --- a/src/main/java/com/simibubi/create/foundation/mixin/accessor/LevelRendererAccessor.java +++ b/src/main/java/com/simibubi/create/foundation/mixin/accessor/LevelRendererAccessor.java @@ -1,12 +1,11 @@ package com.simibubi.create.foundation.mixin.accessor; -import net.minecraft.client.renderer.LevelRenderer; - -import net.minecraft.client.renderer.culling.Frustum; - import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.gen.Accessor; +import net.minecraft.client.renderer.LevelRenderer; +import net.minecraft.client.renderer.culling.Frustum; + @Mixin(LevelRenderer.class) public interface LevelRendererAccessor { @Accessor("cullingFrustum") diff --git a/src/main/java/com/simibubi/create/foundation/mixin/accessor/MouseHandlerAccessor.java b/src/main/java/com/simibubi/create/foundation/mixin/accessor/MouseHandlerAccessor.java index d837c06f00..fbd30e5c66 100644 --- a/src/main/java/com/simibubi/create/foundation/mixin/accessor/MouseHandlerAccessor.java +++ b/src/main/java/com/simibubi/create/foundation/mixin/accessor/MouseHandlerAccessor.java @@ -7,7 +7,6 @@ import net.minecraft.client.MouseHandler; @Mixin(MouseHandler.class) public interface MouseHandlerAccessor { - @Accessor("xpos") void create$setXPos(double xPos); diff --git a/src/main/java/com/simibubi/create/foundation/mixin/client/BlockDestructionProgressMixin.java b/src/main/java/com/simibubi/create/foundation/mixin/client/BlockDestructionProgressMixin.java index 61cefd23e1..1a6d8d3b61 100644 --- a/src/main/java/com/simibubi/create/foundation/mixin/client/BlockDestructionProgressMixin.java +++ b/src/main/java/com/simibubi/create/foundation/mixin/client/BlockDestructionProgressMixin.java @@ -16,12 +16,12 @@ public class BlockDestructionProgressMixin implements BlockDestructionProgressEx private Set create$extraPositions; @Override - public Set getExtraPositions() { + public Set create$getExtraPositions() { return create$extraPositions; } @Override - public void setExtraPositions(Set positions) { + public void create$setExtraPositions(Set positions) { create$extraPositions = positions; } } diff --git a/src/main/java/com/simibubi/create/foundation/mixin/client/CameraMixin.java b/src/main/java/com/simibubi/create/foundation/mixin/client/CameraMixin.java index 2422a2d1c5..7a901f5709 100644 --- a/src/main/java/com/simibubi/create/foundation/mixin/client/CameraMixin.java +++ b/src/main/java/com/simibubi/create/foundation/mixin/client/CameraMixin.java @@ -11,11 +11,11 @@ import net.minecraft.client.Camera; @Mixin(Camera.class) public abstract class CameraMixin { @ModifyArg( - method = "Lnet/minecraft/client/Camera;setup(Lnet/minecraft/world/level/BlockGetter;Lnet/minecraft/world/entity/Entity;ZZF)V", + method = "setup(Lnet/minecraft/world/level/BlockGetter;Lnet/minecraft/world/entity/Entity;ZZF)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/Camera;getMaxZoom(D)D"), index = 0 ) - public double create$modifyCameraOffset(double originalValue) { + private double create$modifyCameraOffset(double originalValue) { return originalValue * CameraDistanceModifier.getMultiplier(); } } diff --git a/src/main/java/com/simibubi/create/foundation/mixin/client/EntityContraptionInteractionMixin.java b/src/main/java/com/simibubi/create/foundation/mixin/client/EntityContraptionInteractionMixin.java index 9797c89cbc..0049eb4453 100644 --- a/src/main/java/com/simibubi/create/foundation/mixin/client/EntityContraptionInteractionMixin.java +++ b/src/main/java/com/simibubi/create/foundation/mixin/client/EntityContraptionInteractionMixin.java @@ -32,6 +32,7 @@ import net.minecraft.world.level.block.RenderShape; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplate; import net.minecraft.world.phys.Vec3; + import net.minecraftforge.common.capabilities.CapabilityProvider; @Mixin(Entity.class) @@ -41,7 +42,7 @@ public abstract class EntityContraptionInteractionMixin extends CapabilityProvid } @Shadow - public Level level; + private Level level; @Shadow private Vec3 position; @@ -65,10 +66,10 @@ public abstract class EntityContraptionInteractionMixin extends CapabilityProvid @Unique private Stream create$getIntersectionContraptionsStream() { return ContraptionHandler.loadedContraptions.get(level) - .values() - .stream() - .map(Reference::get) - .filter(cEntity -> cEntity != null && cEntity.collidingEntities.containsKey((Entity) (Object) this)); + .values() + .stream() + .map(Reference::get) + .filter(cEntity -> cEntity != null && cEntity.collidingEntities.containsKey((Entity) (Object) this)); } @Unique @@ -98,7 +99,8 @@ public abstract class EntityContraptionInteractionMixin extends CapabilityProvid } // involves block step sounds on contraptions - // IFNE line 661 injecting before `!blockstate.isAir(this.world, blockpos)` + // injecting before `!blockstate1.isAir(this.world, blockpos)` + // `if (this.moveDist > this.nextStep && !blockstate1.isAir()) @Inject(method = "move", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/level/block/state/BlockState;isAir()Z", ordinal = 0)) private void create$contraptionStepSounds(MoverType mover, Vec3 movement, CallbackInfo ci) { Vec3 worldPos = position.add(0, -0.2, 0); diff --git a/src/main/java/com/simibubi/create/foundation/mixin/client/HeavyBootsOnPlayerMixin.java b/src/main/java/com/simibubi/create/foundation/mixin/client/HeavyBootsOnPlayerMixin.java index eafc48ead7..d4f3ebb022 100644 --- a/src/main/java/com/simibubi/create/foundation/mixin/client/HeavyBootsOnPlayerMixin.java +++ b/src/main/java/com/simibubi/create/foundation/mixin/client/HeavyBootsOnPlayerMixin.java @@ -2,27 +2,22 @@ package com.simibubi.create.foundation.mixin.client; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +import com.llamalad7.mixinextras.injector.ModifyReturnValue; import com.mojang.authlib.GameProfile; import net.minecraft.client.multiplayer.ClientLevel; import net.minecraft.client.player.AbstractClientPlayer; import net.minecraft.client.player.LocalPlayer; -import net.minecraft.nbt.CompoundTag; @Mixin(LocalPlayer.class) public abstract class HeavyBootsOnPlayerMixin extends AbstractClientPlayer { - private HeavyBootsOnPlayerMixin(ClientLevel level, GameProfile profile) { super(level, profile); } - @Inject(method = "isUnderWater()Z", at = @At("HEAD"), cancellable = true) - public void create$noSwimmingWithHeavyBootsOn(CallbackInfoReturnable cir) { - CompoundTag persistentData = getPersistentData(); - if (persistentData.contains("HeavyBoots")) - cir.setReturnValue(false); + @ModifyReturnValue(method = "isUnderWater()Z", at = @At("RETURN")) + private boolean create$noSwimmingWithHeavyBootsOn(boolean original) { + return getPersistentData().contains("HeavyBoots") || original; } } diff --git a/src/main/java/com/simibubi/create/foundation/mixin/client/HumanoidArmorLayerMixin.java b/src/main/java/com/simibubi/create/foundation/mixin/client/HumanoidArmorLayerMixin.java index e3f8b8d606..6b4fe89aa5 100644 --- a/src/main/java/com/simibubi/create/foundation/mixin/client/HumanoidArmorLayerMixin.java +++ b/src/main/java/com/simibubi/create/foundation/mixin/client/HumanoidArmorLayerMixin.java @@ -4,8 +4,8 @@ import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import org.spongepowered.asm.mixin.injection.callback.LocalCapture; +import com.llamalad7.mixinextras.sugar.Local; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.foundation.item.CustomRenderedArmorItem; @@ -18,8 +18,15 @@ import net.minecraft.world.item.ItemStack; @Mixin(HumanoidArmorLayer.class) public class HumanoidArmorLayerMixin { - @Inject(method = "renderArmorPiece(Lcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/MultiBufferSource;Lnet/minecraft/world/entity/LivingEntity;Lnet/minecraft/world/entity/EquipmentSlot;ILnet/minecraft/client/model/HumanoidModel;)V", at = @At(value = "INVOKE_ASSIGN", target = "Lnet/minecraft/world/entity/LivingEntity;getItemBySlot(Lnet/minecraft/world/entity/EquipmentSlot;)Lnet/minecraft/world/item/ItemStack;"), locals = LocalCapture.CAPTURE_FAILHARD, cancellable = true) - private void create$onRenderArmorPiece(PoseStack poseStack, MultiBufferSource bufferSource, LivingEntity entity, EquipmentSlot slot, int light, HumanoidModel model, CallbackInfo ci, ItemStack stack) { + @Inject( + method = "renderArmorPiece(Lcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/MultiBufferSource;Lnet/minecraft/world/entity/LivingEntity;Lnet/minecraft/world/entity/EquipmentSlot;ILnet/minecraft/client/model/HumanoidModel;)V", + at = @At( + value = "INVOKE", + target = "Lnet/minecraft/world/item/ItemStack;getItem()Lnet/minecraft/world/item/Item;" + ), + cancellable = true + ) + private void create$onRenderArmorPiece(PoseStack poseStack, MultiBufferSource bufferSource, LivingEntity entity, EquipmentSlot slot, int light, HumanoidModel model, CallbackInfo ci, @Local ItemStack stack) { if (stack.getItem() instanceof CustomRenderedArmorItem renderer) { renderer.renderArmorPiece((HumanoidArmorLayer) (Object) this, poseStack, bufferSource, entity, slot, light, model, stack); ci.cancel(); diff --git a/src/main/java/com/simibubi/create/foundation/mixin/client/HumanoidModelMixin.java b/src/main/java/com/simibubi/create/foundation/mixin/client/HumanoidModelMixin.java index 32b2b327a5..ba8319a30a 100644 --- a/src/main/java/com/simibubi/create/foundation/mixin/client/HumanoidModelMixin.java +++ b/src/main/java/com/simibubi/create/foundation/mixin/client/HumanoidModelMixin.java @@ -16,7 +16,6 @@ import net.minecraft.world.entity.LivingEntity; @Mixin(HumanoidModel.class) public class HumanoidModelMixin { - @Shadow @Final public ModelPart body; @@ -36,5 +35,4 @@ public class HumanoidModelMixin { PlayerSkyhookRenderer.beforeSetupAnim(player, (HumanoidModel) (Object) this); } - } diff --git a/src/main/java/com/simibubi/create/foundation/mixin/client/LevelRendererMixin.java b/src/main/java/com/simibubi/create/foundation/mixin/client/LevelRendererMixin.java index f0adb6fec7..79f66daa25 100644 --- a/src/main/java/com/simibubi/create/foundation/mixin/client/LevelRendererMixin.java +++ b/src/main/java/com/simibubi/create/foundation/mixin/client/LevelRendererMixin.java @@ -22,6 +22,7 @@ import net.minecraft.client.renderer.LevelRenderer; import net.minecraft.core.BlockPos; import net.minecraft.server.level.BlockDestructionProgress; import net.minecraft.world.level.block.state.BlockState; + import net.minecraftforge.client.extensions.common.IClientBlockExtensions; @Mixin(LevelRenderer.class) @@ -41,7 +42,7 @@ public class LevelRendererMixin { Set extraPositions = handler.getExtraPositions(level, pos, state, progress); if (extraPositions != null) { extraPositions.remove(pos); - ((BlockDestructionProgressExtension) progressObj).setExtraPositions(extraPositions); + ((BlockDestructionProgressExtension) progressObj).create$setExtraPositions(extraPositions); for (BlockPos extraPos : extraPositions) { destructionProgress.computeIfAbsent(extraPos.asLong(), l -> Sets.newTreeSet()).add(progressObj); } @@ -51,7 +52,7 @@ public class LevelRendererMixin { @Inject(method = "removeProgress(Lnet/minecraft/server/level/BlockDestructionProgress;)V", at = @At("RETURN")) private void create$onRemoveProgress(BlockDestructionProgress progress, CallbackInfo ci) { - Set extraPositions = ((BlockDestructionProgressExtension) progress).getExtraPositions(); + Set extraPositions = ((BlockDestructionProgressExtension) progress).create$getExtraPositions(); if (extraPositions != null) { for (BlockPos extraPos : extraPositions) { long l = extraPos.asLong(); diff --git a/src/main/java/com/simibubi/create/foundation/mixin/client/ModelDataRefreshMixin.java b/src/main/java/com/simibubi/create/foundation/mixin/client/ModelDataRefreshMixin.java deleted file mode 100644 index 560fb1ef5d..0000000000 --- a/src/main/java/com/simibubi/create/foundation/mixin/client/ModelDataRefreshMixin.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.simibubi.create.foundation.mixin.client; - -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -import net.createmod.catnip.levelWrappers.SchematicLevel; -import net.minecraft.client.Minecraft; -import net.minecraft.world.level.Level; -import net.minecraft.world.level.block.entity.BlockEntity; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; -import net.minecraftforge.client.model.data.ModelDataManager; - -@OnlyIn(Dist.CLIENT) -@Mixin(ModelDataManager.class) -public class ModelDataRefreshMixin { - /** - * Normally ModelDataManager will throw an exception if a block entity tries - * to refresh its model data from a world the client isn't currently in, - * but we need that to not happen for block entities in fake schematic - * worlds, so in those cases just do nothing instead. - */ - @Inject(method = "requestModelDataRefresh", at = @At("HEAD"), cancellable = true, remap = false) - private static void create$requestModelDataRefresh(BlockEntity be, CallbackInfo ci) { - if (be != null) { - Level world = be.getLevel(); - if (world != Minecraft.getInstance().level && world instanceof SchematicLevel) - ci.cancel(); - } - } -} diff --git a/src/main/java/com/simibubi/create/foundation/mixin/client/PlayerRendererMixin.java b/src/main/java/com/simibubi/create/foundation/mixin/client/PlayerRendererMixin.java index 47b0519628..91e98d4b7e 100644 --- a/src/main/java/com/simibubi/create/foundation/mixin/client/PlayerRendererMixin.java +++ b/src/main/java/com/simibubi/create/foundation/mixin/client/PlayerRendererMixin.java @@ -4,7 +4,6 @@ import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; -import org.spongepowered.asm.mixin.injection.callback.LocalCapture; import com.simibubi.create.foundation.item.CustomArmPoseItem; @@ -16,8 +15,9 @@ import net.minecraft.world.item.ItemStack; @Mixin(PlayerRenderer.class) public class PlayerRendererMixin { - @Inject(method = "getArmPose(Lnet/minecraft/client/player/AbstractClientPlayer;Lnet/minecraft/world/InteractionHand;)Lnet/minecraft/client/model/HumanoidModel$ArmPose;", at = @At(value = "INVOKE_ASSIGN", target = "Lnet/minecraft/client/player/AbstractClientPlayer;getItemInHand(Lnet/minecraft/world/InteractionHand;)Lnet/minecraft/world/item/ItemStack;"), locals = LocalCapture.CAPTURE_FAILHARD, cancellable = true) - private static void create$onGetArmPose(AbstractClientPlayer player, InteractionHand hand, CallbackInfoReturnable cir, ItemStack stack) { + @Inject(method = "getArmPose(Lnet/minecraft/client/player/AbstractClientPlayer;Lnet/minecraft/world/InteractionHand;)Lnet/minecraft/client/model/HumanoidModel$ArmPose;", at = @At(value = "INVOKE_ASSIGN", target = "Lnet/minecraft/client/player/AbstractClientPlayer;getItemInHand(Lnet/minecraft/world/InteractionHand;)Lnet/minecraft/world/item/ItemStack;"), cancellable = true) + private static void create$onGetArmPose(AbstractClientPlayer player, InteractionHand hand, CallbackInfoReturnable cir) { + ItemStack stack = player.getItemInHand(hand); if (stack.getItem() instanceof CustomArmPoseItem armPoseProvider) { ArmPose pose = armPoseProvider.getArmPose(stack, player, hand); if (pose != null) { @@ -25,6 +25,4 @@ public class PlayerRendererMixin { } } } - - } diff --git a/src/main/java/com/simibubi/create/foundation/mixin/compat/JourneyFullscreenMapMixin.java b/src/main/java/com/simibubi/create/foundation/mixin/compat/JourneyFullscreenMapMixin.java index 0395e5a83e..c4f7c1cc45 100644 --- a/src/main/java/com/simibubi/create/foundation/mixin/compat/JourneyFullscreenMapMixin.java +++ b/src/main/java/com/simibubi/create/foundation/mixin/compat/JourneyFullscreenMapMixin.java @@ -37,5 +37,4 @@ public abstract class JourneyFullscreenMapMixin { double z = gridRenderer.getCenterBlockZ() - (dragging ? mouseDrag.y : 0); JourneyTrainMap.onRender(graphics, (Fullscreen) (Object) this, x, z, mouseX, mouseY, pt); } - } diff --git a/src/main/resources/create.mixins.json b/src/main/resources/create.mixins.json index a4c330b574..b4d8de5d7d 100644 --- a/src/main/resources/create.mixins.json +++ b/src/main/resources/create.mixins.json @@ -15,6 +15,7 @@ "EntityMixin", "LavaSwimmingMixin", "MapItemSavedDataMixin", + "ProjectileUtilMixin", "ShulkerBoxBlockMixin", "SmithingMenuMixin", "TestCommandMixin", From 312f5a2929b6e75ce3b1f673a84cc51f17afddb3 Mon Sep 17 00:00:00 2001 From: IThundxr Date: Fri, 14 Feb 2025 08:17:39 -0500 Subject: [PATCH 11/11] Mixed Mixins II --- .../mixin/ContraptionDriverInteractMixin.java | 33 ------------------- src/main/resources/create.mixins.json | 1 - 2 files changed, 34 deletions(-) delete mode 100644 src/main/java/com/simibubi/create/foundation/mixin/ContraptionDriverInteractMixin.java diff --git a/src/main/java/com/simibubi/create/foundation/mixin/ContraptionDriverInteractMixin.java b/src/main/java/com/simibubi/create/foundation/mixin/ContraptionDriverInteractMixin.java deleted file mode 100644 index e80d631192..0000000000 --- a/src/main/java/com/simibubi/create/foundation/mixin/ContraptionDriverInteractMixin.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.simibubi.create.foundation.mixin; - -import javax.annotation.Nullable; - -import org.spongepowered.asm.mixin.Implements; -import org.spongepowered.asm.mixin.Interface; -import org.spongepowered.asm.mixin.Intrinsic; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; - -import com.simibubi.create.content.contraptions.AbstractContraptionEntity; - -import net.minecraft.world.entity.Entity; - -import net.minecraftforge.common.capabilities.CapabilityProvider; -import net.minecraftforge.common.extensions.IForgeEntity; - -@Mixin(Entity.class) -@Implements(@Interface(iface = IForgeEntity.class, prefix = "iForgeEntity$")) -public abstract class ContraptionDriverInteractMixin extends CapabilityProvider { - private ContraptionDriverInteractMixin(Class baseClass) { - super(baseClass); - } - - @Shadow - public abstract Entity getRootVehicle(); - - @Nullable - @Intrinsic - public boolean iForgeEntity$canRiderInteract() { - return getRootVehicle() instanceof AbstractContraptionEntity; - } -} diff --git a/src/main/resources/create.mixins.json b/src/main/resources/create.mixins.json index b4d8de5d7d..e00095e18c 100644 --- a/src/main/resources/create.mixins.json +++ b/src/main/resources/create.mixins.json @@ -10,7 +10,6 @@ "ArmorTrimMixin", "BlockItemMixin", "ClientboundMapItemDataPacketMixin", - "ContraptionDriverInteractMixin", "CustomItemUseEffectsMixin", "EntityMixin", "LavaSwimmingMixin",