From fe77abaf6e1d8d607d6cb60fd5a3825eaf33953c Mon Sep 17 00:00:00 2001 From: TropheusJ Date: Sun, 9 Feb 2025 20:57:56 -0500 Subject: [PATCH 1/7] use BlockEntity updateTags for client sync this makes hitting packet limits WAY harder --- .../content/contraptions/Contraption.java | 49 ++++++++++++++++--- 1 file changed, 42 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/simibubi/create/content/contraptions/Contraption.java b/src/main/java/com/simibubi/create/content/contraptions/Contraption.java index 9879b73980..55a0f9600e 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/Contraption.java +++ b/src/main/java/com/simibubi/create/content/contraptions/Contraption.java @@ -91,6 +91,7 @@ import net.minecraft.nbt.ListTag; import net.minecraft.nbt.NbtUtils; import net.minecraft.nbt.Tag; import net.minecraft.network.protocol.game.DebugPackets; +import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerLevel; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.ai.village.poi.PoiTypes; @@ -106,6 +107,7 @@ import net.minecraft.world.level.block.PressurePlateBlock; import net.minecraft.world.level.block.Rotation; import net.minecraft.world.level.block.SimpleWaterloggedBlock; import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.properties.BlockStateProperties; import net.minecraft.world.level.block.state.properties.ChestType; @@ -138,6 +140,7 @@ public abstract class Contraption { public boolean disassembled; protected Map blocks; + protected Map updateTags; protected List> actors; protected Map interactors; protected List disabledActors; @@ -165,6 +168,7 @@ public abstract class Contraption { public Contraption() { blocks = new HashMap<>(); + updateTags = new HashMap<>(); seats = new ArrayList<>(); actors = new ArrayList<>(); disabledActors = new ArrayList<>(); @@ -645,6 +649,15 @@ public abstract class Contraption { bounds = bounds.minmax(new AABB(localPos)); BlockEntity be = pair.getValue(); + + if (be != null) { + CompoundTag updateTag = be.getUpdateTag(); + // the ID needs to be in the tag so the client can properly add the BlockEntity + ResourceLocation id = Objects.requireNonNull(BlockEntityType.getKey(be.getType())); + updateTag.putString("id", id.toString()); + updateTags.put(localPos, updateTag); + } + storage.addBlock(level, state, pos, localPos, be); captureMultiblock(localPos, structureBlockInfo, be); @@ -787,7 +800,7 @@ public abstract class Contraption { CompoundTag nbt = new CompoundTag(); nbt.putString("Type", getType().id); - CompoundTag blocksNBT = writeBlocksCompound(); + CompoundTag blocksNBT = writeBlocksCompound(spawnPacket); ListTag multiblocksNBT = new ListTag(); capturedMultiblocks.keySet().forEach(controllerPos -> { @@ -824,7 +837,7 @@ public abstract class Contraption { superglueNBT.add(c); } } - + writeStorage(nbt, spawnPacket); ListTag interactorNBT = new ListTag(); @@ -867,12 +880,12 @@ public abstract class Contraption { return nbt; } - + public void writeStorage(CompoundTag nbt, boolean spawnPacket) { storage.write(nbt, spawnPacket); } - private CompoundTag writeBlocksCompound() { + private CompoundTag writeBlocksCompound(boolean spawnPacket) { CompoundTag compound = new CompoundTag(); HashMapPalette palette = new HashMapPalette<>(GameData.getBlockStateIDMap(), 16, (i, s) -> { throw new IllegalStateException("Palette Map index exceeded maximum"); @@ -881,11 +894,26 @@ public abstract class Contraption { for (StructureBlockInfo block : this.blocks.values()) { int id = palette.idFor(block.state()); + BlockPos pos = block.pos(); CompoundTag c = new CompoundTag(); - c.putLong("Pos", block.pos().asLong()); + c.putLong("Pos", pos.asLong()); c.putInt("State", id); - if (block.nbt() != null) - c.put("Data", block.nbt()); + + CompoundTag updateTag = updateTags.get(pos); + if (spawnPacket) { + // for client sync, treat the updateTag as the data + if (updateTag != null) { + c.put("Data", updateTag); + } + } else { + // otherwise, write actual data as the data, save updateTag on its own + if (block.nbt() != null) { + c.put("Data", block.nbt()); + } + if (updateTag != null) { + c.put("UpdateTag", updateTag); + } + } blockList.add(c); } @@ -928,6 +956,13 @@ public abstract class Contraption { this.blocks.put(info.pos(), info); + if (c.contains("UpdateTag", Tag.TAG_COMPOUND)) { + CompoundTag updateTag = c.getCompound("UpdateTag"); + if (!updateTag.isEmpty()) { + this.updateTags.put(info.pos(), updateTag); + } + } + if (!world.isClientSide) return; From 98698ddabdc10189f582a66235961b03c554ed7d Mon Sep 17 00:00:00 2001 From: TropheusJ Date: Sun, 9 Feb 2025 23:37:02 -0500 Subject: [PATCH 2/7] rework ContraptionData --- .../AbstractContraptionEntity.java | 9 +- .../content/contraptions/ContraptionData.java | 85 ------------------- .../data/ContraptionPickupLimiting.java | 55 ++++++++++++ .../data/ContraptionSyncLimiting.java | 52 ++++++++++++ .../content/contraptions/data/README.md | 37 ++++++++ .../mounted/MinecartContraptionItem.java | 4 +- .../infrastructure/config/CKinetics.java | 6 -- 7 files changed, 149 insertions(+), 99 deletions(-) delete mode 100644 src/main/java/com/simibubi/create/content/contraptions/ContraptionData.java create mode 100644 src/main/java/com/simibubi/create/content/contraptions/data/ContraptionPickupLimiting.java create mode 100644 src/main/java/com/simibubi/create/content/contraptions/data/ContraptionSyncLimiting.java create mode 100644 src/main/java/com/simibubi/create/content/contraptions/data/README.md diff --git a/src/main/java/com/simibubi/create/content/contraptions/AbstractContraptionEntity.java b/src/main/java/com/simibubi/create/content/contraptions/AbstractContraptionEntity.java index aed5425cd6..d29961056b 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/AbstractContraptionEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/AbstractContraptionEntity.java @@ -18,13 +18,13 @@ import com.simibubi.create.AllItems; import com.simibubi.create.AllMovementBehaviours; import com.simibubi.create.AllPackets; import com.simibubi.create.AllSoundEvents; -import com.simibubi.create.Create; import com.simibubi.create.content.contraptions.actors.psi.PortableStorageInterfaceMovement; import com.simibubi.create.content.contraptions.actors.seat.SeatBlock; import com.simibubi.create.content.contraptions.actors.seat.SeatEntity; import com.simibubi.create.content.contraptions.actors.trainControls.ControlsStopControllingPacket; import com.simibubi.create.content.contraptions.behaviour.MovementBehaviour; import com.simibubi.create.content.contraptions.behaviour.MovementContext; +import com.simibubi.create.content.contraptions.data.ContraptionSyncLimiting; import com.simibubi.create.content.contraptions.elevator.ElevatorContraption; import com.simibubi.create.content.contraptions.glue.SuperGlueEntity; import com.simibubi.create.content.contraptions.mounted.MountedContraption; @@ -615,11 +615,8 @@ public abstract class AbstractContraptionEntity extends Entity implements IEntit CompoundTag compound = new CompoundTag(); writeAdditional(compound, true); - if (ContraptionData.isTooLargeForSync(compound)) { - String info = getContraption().getType().id + " @" + position() + " (" + getStringUUID() + ")"; - Create.LOGGER.warn("Could not send Contraption Spawn Data (Packet too big): " + info); - compound = null; - } + if (ContraptionSyncLimiting.isTooLargeForSync(compound)) + compound = null; // don't sync contraption data buffer.writeNbt(compound); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/ContraptionData.java b/src/main/java/com/simibubi/create/content/contraptions/ContraptionData.java deleted file mode 100644 index 158d306a76..0000000000 --- a/src/main/java/com/simibubi/create/content/contraptions/ContraptionData.java +++ /dev/null @@ -1,85 +0,0 @@ -package com.simibubi.create.content.contraptions; - -import com.simibubi.create.compat.Mods; -import com.simibubi.create.foundation.mixin.accessor.NbtAccounterAccessor; -import com.simibubi.create.infrastructure.config.AllConfigs; - -import io.netty.buffer.Unpooled; -import net.minecraft.nbt.CompoundTag; -import net.minecraft.nbt.NbtAccounter; -import net.minecraft.network.FriendlyByteBuf; -import net.minecraft.network.protocol.game.ClientboundContainerSetSlotPacket; - -public class ContraptionData { - /** - * A sane, default maximum for contraption data size. - */ - public static final int DEFAULT_LIMIT = 2_000_000; - /** - * Connectivity expands the NBT packet limit to 2 GB. - */ - public static final int CONNECTIVITY_LIMIT = Integer.MAX_VALUE; - /** - * Packet Fixer expands the NBT packet limit to 200 MB. - */ - public static final int PACKET_FIXER_LIMIT = 209_715_200; - /** - * XL Packets expands the NBT packet limit to 2 GB. - */ - public static final int XL_PACKETS_LIMIT = 2_000_000_000; - /** - * Minecart item sizes are limited by the vanilla slot change packet ({@link ClientboundContainerSetSlotPacket}). - * {@link #DEFAULT_LIMIT} is used as the default. - * Connectivity, PacketFixer, and XL Packets expand the size limit. - * If one of these mods is loaded, we take advantage of it and use the higher limit. - */ - public static final int PICKUP_LIMIT; - - static { - int limit = DEFAULT_LIMIT; - - // Check from largest to smallest to use the smallest limit if multiple mods are loaded. - // It is necessary to use the smallest limit because even if multiple mods are loaded, - // not all of their mixins may be applied. Therefore, it is safest to only assume that - // the mod with the smallest limit is actually active. - if (Mods.CONNECTIVITY.isLoaded()) { - limit = CONNECTIVITY_LIMIT; - } - if (Mods.XLPACKETS.isLoaded()) { - limit = XL_PACKETS_LIMIT; - } - if (Mods.PACKETFIXER.isLoaded()) { - limit = PACKET_FIXER_LIMIT; - } - - PICKUP_LIMIT = limit; - } - - /** - * @return true if the given NBT is too large for a contraption to be synced to clients. - */ - public static boolean isTooLargeForSync(CompoundTag data) { - int max = AllConfigs.server().kinetics.maxDataSize.get(); - return max != 0 && packetSize(data) > max; - } - - /** - * @return true if the given NBT is too large for a contraption to be picked up with a wrench. - */ - public static boolean isTooLargeForPickup(CompoundTag data) { - return packetSize(data) > PICKUP_LIMIT; - } - - /** - * @return the size of the given NBT when put through a packet, in bytes. - */ - public static long packetSize(CompoundTag data) { - FriendlyByteBuf test = new FriendlyByteBuf(Unpooled.buffer()); - test.writeNbt(data); - NbtAccounter sizeTracker = new NbtAccounter(Long.MAX_VALUE); - test.readNbt(sizeTracker); - long size = ((NbtAccounterAccessor) sizeTracker).create$getUsage(); - test.release(); - return size; - } -} diff --git a/src/main/java/com/simibubi/create/content/contraptions/data/ContraptionPickupLimiting.java b/src/main/java/com/simibubi/create/content/contraptions/data/ContraptionPickupLimiting.java new file mode 100644 index 0000000000..a862e443d4 --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/data/ContraptionPickupLimiting.java @@ -0,0 +1,55 @@ +package com.simibubi.create.content.contraptions.data; + +import com.simibubi.create.compat.Mods; +import com.simibubi.create.foundation.mixin.accessor.NbtAccounterAccessor; + +import io.netty.buffer.Unpooled; +import net.minecraft.Util; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.nbt.NbtAccounter; +import net.minecraft.network.FriendlyByteBuf; + +public class ContraptionPickupLimiting { + /// The default NBT limit, defined by {@link FriendlyByteBuf#readNbt()}. + public static final int NBT_LIMIT = 2_097_152; + + // increased nbt limits provided by other mods. + public static final int PACKET_FIXER_LIMIT = NBT_LIMIT * 100; + public static final int XL_PACKETS_LIMIT = Integer.MAX_VALUE; + + // leave some space for the rest of the packet. + public static final int BUFFER = 20_000; + + // the actual limit to be used + public static final int LIMIT = Util.make(() -> { + // the smallest limit needs to be used, as we can't guarantee that all mixins are applied if multiple are present. + if (Mods.PACKETFIXER.isLoaded()) { + return PACKET_FIXER_LIMIT; + } else if (Mods.XLPACKETS.isLoaded()) { + return XL_PACKETS_LIMIT; + } + + // none are present, use vanilla default + return NBT_LIMIT; + }) - BUFFER; + + /** + * @return true if the given NBT is too large for a contraption to be picked up with a wrench. + */ + public static boolean isTooLargeForPickup(CompoundTag data) { + return nbtSize(data) > LIMIT; + } + + /** + * @return the size of the given NBT when read by the client according to {@link NbtAccounter} + */ + private static long nbtSize(CompoundTag data) { + FriendlyByteBuf test = new FriendlyByteBuf(Unpooled.buffer()); + test.writeNbt(data); + NbtAccounter sizeTracker = new NbtAccounter(Long.MAX_VALUE); + test.readNbt(sizeTracker); + long size = ((NbtAccounterAccessor) sizeTracker).create$getUsage(); + test.release(); + return size; + } +} diff --git a/src/main/java/com/simibubi/create/content/contraptions/data/ContraptionSyncLimiting.java b/src/main/java/com/simibubi/create/content/contraptions/data/ContraptionSyncLimiting.java new file mode 100644 index 0000000000..372a30a529 --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/data/ContraptionSyncLimiting.java @@ -0,0 +1,52 @@ +package com.simibubi.create.content.contraptions.data; + +import com.simibubi.create.compat.Mods; + +import io.netty.buffer.Unpooled; +import net.minecraft.Util; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.FriendlyByteBuf; + +public class ContraptionSyncLimiting { + /** + * Contraption entity sync is limited by the clientbound custom payload limit, since that's what Forge's + * extended spawn packet uses. The NBT limit is irrelevant since it's bypassed on deserialization. + */ + public static final int SIZE_LIMIT = 1_048_576; + + // increased packet limits provided by other mods. + public static final int PACKET_FIXER_LIMIT = SIZE_LIMIT * 100; + public static final int XL_PACKETS_LIMIT = Integer.MAX_VALUE; + + // leave some room for the rest of the packet. + public static final int BUFFER = 20_000; + + // the actual limit to be used + public static final int LIMIT = Util.make(() -> { + // the smallest limit needs to be used, as we can't guarantee that all mixins are applied if multiple are present. + if (Mods.PACKETFIXER.isLoaded()) { + return PACKET_FIXER_LIMIT; + } else if (Mods.XLPACKETS.isLoaded()) { + return XL_PACKETS_LIMIT; + } + + // none are present, use vanilla default + return SIZE_LIMIT; + }) - BUFFER; + + /** + * @return true if the given NBT is too large for a contraption to be synced to clients. + */ + public static boolean isTooLargeForSync(CompoundTag data) { + return byteSize(data) > LIMIT; + } + + /** + * @return the size of the given NBT when encoded, in bytes + */ + private static long byteSize(CompoundTag data) { + FriendlyByteBuf test = new FriendlyByteBuf(Unpooled.buffer()); + test.writeNbt(data); + return test.writerIndex(); + } +} diff --git a/src/main/java/com/simibubi/create/content/contraptions/data/README.md b/src/main/java/com/simibubi/create/content/contraptions/data/README.md new file mode 100644 index 0000000000..7bae5dbf77 --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/data/README.md @@ -0,0 +1,37 @@ +# Data Limiting +This pair of classes prevents clients from getting chunkbanned when contraptions are too large. + +This information is up-to-date as of 1.20.1. + +There's a few different packet limits in play: +- the NBT limit: `2_097_152`, enforced by `FriendlyByteBuf.readNbt()` +- the clientbound custom payload limit: `1_048_576` bytes, applies to `ClientboundCustomPayloadPacket` +- the serverbound custom payload limit: `32767` bytes, applies to `ServerboundCustomPayloadPacket` +- the packet limit: `8_388_608` bytes, applies to all packets + +# NBT Size vs Bytes +There's two units in play as well - NBT Size and Bytes. The NBT limit uses NBT size, while the other +three use bytes. I'm (TropheusJ) not sure what exactly an NBT Size unit is - it's not bits, but it's +close. + +Because of this discrepancy, the NBT limit is actually much lower than it seems. It will usually be +the first limit hit. + +Bytes are found by writing a tag to a buffer and getting its `writerIndex`. NBT Size is found using +an `NbtAccounter`. + +# Sync +Sync is pretty straightforward. + +The only limit relevant here is the clientbound custom payload limit. The NBT limit would be relevant, but +client-side deserialization bypasses it. + +Sync is much less of an issue compared to pickup, since a lot of data can be skipped when syncing. + +# Pickup +Two limits are relevant for pickup: the NBT limit and the packet limit. + +The NBT limit is hit way sooner, and is usually the limiting factor. Other mods may increase it, in +which case the packet limit may become relevant. + +The custom payload limit is not relevant since item sync goes through the vanilla `ClientboundContainerSetSlotPacket`. diff --git a/src/main/java/com/simibubi/create/content/contraptions/mounted/MinecartContraptionItem.java b/src/main/java/com/simibubi/create/content/contraptions/mounted/MinecartContraptionItem.java index dd146961cd..94839ce8e1 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/mounted/MinecartContraptionItem.java +++ b/src/main/java/com/simibubi/create/content/contraptions/mounted/MinecartContraptionItem.java @@ -10,11 +10,11 @@ import com.simibubi.create.AllItems; import com.simibubi.create.AllMovementBehaviours; import com.simibubi.create.content.contraptions.AbstractContraptionEntity; import com.simibubi.create.content.contraptions.Contraption; -import com.simibubi.create.content.contraptions.ContraptionData; import com.simibubi.create.content.contraptions.ContraptionMovementSetting; import com.simibubi.create.content.contraptions.OrientedContraptionEntity; import com.simibubi.create.content.contraptions.actors.psi.PortableStorageInterfaceMovement; import com.simibubi.create.content.contraptions.behaviour.MovementContext; +import com.simibubi.create.content.contraptions.data.ContraptionPickupLimiting; import com.simibubi.create.content.kinetics.deployer.DeployerFakePlayer; import com.simibubi.create.foundation.advancement.AllAdvancements; import com.simibubi.create.foundation.utility.CreateLang; @@ -249,7 +249,7 @@ public class MinecartContraptionItem extends Item { ItemStack generatedStack = create(type, oce).setHoverName(entity.getCustomName()); - if (ContraptionData.isTooLargeForPickup(generatedStack.serializeNBT())) { + if (ContraptionPickupLimiting.isTooLargeForPickup(generatedStack.serializeNBT())) { MutableComponent message = CreateLang.translateDirect("contraption.minecart_contraption_too_big") .withStyle(ChatFormatting.RED); player.displayClientMessage(message, true); diff --git a/src/main/java/com/simibubi/create/infrastructure/config/CKinetics.java b/src/main/java/com/simibubi/create/infrastructure/config/CKinetics.java index 707e12238f..a06e24abe4 100644 --- a/src/main/java/com/simibubi/create/infrastructure/config/CKinetics.java +++ b/src/main/java/com/simibubi/create/infrastructure/config/CKinetics.java @@ -1,6 +1,5 @@ package com.simibubi.create.infrastructure.config; -import com.simibubi.create.content.contraptions.ContraptionData; import com.simibubi.create.content.contraptions.ContraptionMovementSetting; import net.createmod.catnip.config.ConfigBase; @@ -32,8 +31,6 @@ public class CKinetics extends ConfigBase { public final ConfigGroup contraptions = group(1, "contraptions", "Moving Contraptions"); public final ConfigInt maxBlocksMoved = i(2048, 1, "maxBlocksMoved", Comments.maxBlocksMoved); - public final ConfigInt maxDataSize = - i(ContraptionData.DEFAULT_LIMIT, 0, "maxDataSize", Comments.bytes, Comments.maxDataDisable, Comments.maxDataSize, Comments.maxDataSize2); public final ConfigInt maxChassisRange = i(16, 1, "maxChassisRange", Comments.maxChassisRange); public final ConfigInt maxPistonPoles = i(64, 1, "maxPistonPoles", Comments.maxPistonPoles); public final ConfigInt maxRopeLength = i(384, 1, "maxRopeLength", Comments.maxRopeLength); @@ -86,9 +83,6 @@ public class CKinetics extends ConfigBase { "multiplier used for calculating exhaustion from speed when a crank is turned."; static String maxBlocksMoved = "Maximum amount of blocks in a structure movable by Pistons, Bearings or other means."; - static String maxDataSize = "Maximum amount of data a contraption can have before it can't be synced with players."; - static String maxDataSize2 = "Un-synced contraptions will not be visible and will not have collision."; - static String maxDataDisable = "[0 to disable this limit]"; static String maxChassisRange = "Maximum value of a chassis attachment range."; static String maxPistonPoles = "Maximum amount of extension poles behind a Mechanical Piston."; static String maxRopeLength = "Max length of rope available off a Rope Pulley."; From a268ced35a7216b2c63e6bf0aede9e20f9bdf820 Mon Sep 17 00:00:00 2001 From: TropheusJ Date: Sun, 9 Feb 2025 23:41:23 -0500 Subject: [PATCH 3/7] remove Connectivity Mods entry --- src/main/java/com/simibubi/create/compat/Mods.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/com/simibubi/create/compat/Mods.java b/src/main/java/com/simibubi/create/compat/Mods.java index a34ab7b913..37418fe6a7 100644 --- a/src/main/java/com/simibubi/create/compat/Mods.java +++ b/src/main/java/com/simibubi/create/compat/Mods.java @@ -20,7 +20,6 @@ public enum Mods { AETHER, BETTEREND, COMPUTERCRAFT, - CONNECTIVITY, CURIOS, DYNAMICTREES, FUNCTIONALSTORAGE, From 0c21da98991a379742027c722af3755ca546c2a0 Mon Sep 17 00:00:00 2001 From: simibubi <31564874+simibubi@users.noreply.github.com> Date: Tue, 11 Feb 2025 13:08:39 +0100 Subject: [PATCH 4/7] Reflecting on my choices - Fixed wrench radial menu duping and gui depth - Fixed contraptions with legacy data not sending update tags --- .../simibubi/create/compat/trainmap/FTBChunksTrainMap.java | 3 ++- .../simibubi/create/content/contraptions/Contraption.java | 4 ++++ .../content/contraptions/wrench/RadialWrenchMenu.java | 7 ++++--- .../contraptions/wrench/RadialWrenchMenuSubmitPacket.java | 3 +++ 4 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/simibubi/create/compat/trainmap/FTBChunksTrainMap.java b/src/main/java/com/simibubi/create/compat/trainmap/FTBChunksTrainMap.java index a1285a3d9f..1234313176 100644 --- a/src/main/java/com/simibubi/create/compat/trainmap/FTBChunksTrainMap.java +++ b/src/main/java/com/simibubi/create/compat/trainmap/FTBChunksTrainMap.java @@ -9,6 +9,7 @@ import com.simibubi.create.infrastructure.config.AllConfigs; import dev.ftb.mods.ftbchunks.client.gui.LargeMapScreen; import dev.ftb.mods.ftbchunks.client.gui.RegionMapPanel; +import dev.ftb.mods.ftblibrary.ui.BaseScreen; import dev.ftb.mods.ftblibrary.ui.ScreenWrapper; import dev.ftb.mods.ftblibrary.ui.Widget; import net.minecraft.client.Minecraft; @@ -152,7 +153,7 @@ public class FTBChunksTrainMap { private static LargeMapScreen getAsLargeMapScreen(Screen screen) { if (!(screen instanceof ScreenWrapper screenWrapper)) return null; - Object wrapped = ObfuscationReflectionHelper.getPrivateValue(ScreenWrapper.class, screenWrapper, "wrappedGui"); + BaseScreen wrapped = screenWrapper.getGui(); if (!(wrapped instanceof LargeMapScreen largeMapScreen)) return null; return largeMapScreen; diff --git a/src/main/java/com/simibubi/create/content/contraptions/Contraption.java b/src/main/java/com/simibubi/create/content/contraptions/Contraption.java index 55a0f9600e..60b0735b08 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/Contraption.java +++ b/src/main/java/com/simibubi/create/content/contraptions/Contraption.java @@ -905,6 +905,10 @@ public abstract class Contraption { if (updateTag != null) { c.put("Data", updateTag); } + // legacy: use full data if update tag is not available + if (updateTag == null && block.nbt() != null) { + c.put("Data", block.nbt()); + } } else { // otherwise, write actual data as the data, save updateTag on its own if (block.nbt() != null) { diff --git a/src/main/java/com/simibubi/create/content/contraptions/wrench/RadialWrenchMenu.java b/src/main/java/com/simibubi/create/content/contraptions/wrench/RadialWrenchMenu.java index e4da0aa611..dc776d2266 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/wrench/RadialWrenchMenu.java +++ b/src/main/java/com/simibubi/create/content/contraptions/wrench/RadialWrenchMenu.java @@ -173,7 +173,8 @@ public class RadialWrenchMenu extends AbstractSimiScreen { @Override public void tick() { ticksOpen++; - + if (!level.getBlockState(pos).is(state.getBlock())) + Minecraft.getInstance().setScreen(null); super.tick(); } @@ -184,8 +185,6 @@ public class RadialWrenchMenu extends AbstractSimiScreen { PoseStack ms = graphics.pose(); - LocalPlayer player = Minecraft.getInstance().player; - ms.pushPose(); ms.translate(x, y, 0); @@ -271,6 +270,8 @@ public class RadialWrenchMenu extends AbstractSimiScreen { .translateY(-(sectorWidth / 2f + innerRadius)) .rotateZDegrees(-i * sectorAngle); + poseStack.translate(0, 0, 100); + try { GuiGameElement.of(blockState, blockEntity) .rotateBlock(player.getXRot(), player.getYRot() + 180, 0f) diff --git a/src/main/java/com/simibubi/create/content/contraptions/wrench/RadialWrenchMenuSubmitPacket.java b/src/main/java/com/simibubi/create/content/contraptions/wrench/RadialWrenchMenuSubmitPacket.java index a8c98a9cc0..3655256d4a 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/wrench/RadialWrenchMenuSubmitPacket.java +++ b/src/main/java/com/simibubi/create/content/contraptions/wrench/RadialWrenchMenuSubmitPacket.java @@ -40,6 +40,9 @@ public class RadialWrenchMenuSubmitPacket extends SimplePacketBase { ServerPlayer player = context.getSender(); Level level = player.level(); + if (!level.getBlockState(blockPos).is(newState.getBlock())) + return; + BlockState updatedState = Block.updateFromNeighbourShapes(newState, level, blockPos); KineticBlockEntity.switchToBlockState(level, blockPos, updatedState); From e67d8da904c650255eaeb8c86d39ad2885d4afe3 Mon Sep 17 00:00:00 2001 From: simibubi <31564874+simibubi@users.noreply.github.com> Date: Tue, 11 Feb 2025 14:28:11 +0100 Subject: [PATCH 5/7] Redrawals - Fixed schematic rendering offset by a tick - Fixed item vaults not marking themselves as needed to be saved - Fixed steam engines not rotating with their shaft when not animating --- .../steamEngine/SteamEngineVisual.java | 15 +++++++++------ .../logistics/vault/ItemVaultBlockEntity.java | 1 + .../schematics/client/SchematicHandler.java | 2 -- .../schematics/client/SchematicRenderer.java | 19 ++++++++----------- 4 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/main/java/com/simibubi/create/content/kinetics/steamEngine/SteamEngineVisual.java b/src/main/java/com/simibubi/create/content/kinetics/steamEngine/SteamEngineVisual.java index a6618ceaf9..8598932c4f 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/steamEngine/SteamEngineVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/steamEngine/SteamEngineVisual.java @@ -26,6 +26,7 @@ public class SteamEngineVisual extends AbstractBlockEntityVisual { buffer.renderInto(ms, buffers.getBuffer(layer)); }); From 4620d94f7d40ed293d0a3ed0083fb3176a0520e1 Mon Sep 17 00:00:00 2001 From: Kryppers <65094918+Kryppers@users.noreply.github.com> Date: Tue, 11 Feb 2025 13:36:04 +0000 Subject: [PATCH 6/7] goddamn indexing again fixed deep friend textures from accidental indexing --- .../textures/block/vault/vault_side_large.png | Bin 878 -> 870 bytes .../block/vault/vault_side_medium.png | Bin 1316 -> 1316 bytes .../textures/block/vault/vault_top_large.png | Bin 400 -> 768 bytes .../textures/block/vault/vault_top_medium.png | Bin 424 -> 1032 bytes 4 files changed, 0 insertions(+), 0 deletions(-) diff --git a/src/main/resources/assets/create/textures/block/vault/vault_side_large.png b/src/main/resources/assets/create/textures/block/vault/vault_side_large.png index f58fbe7e009e7766448e0d6f77241fa378908e01..48d0e4d7190abeff4d1423b04d6a2491b468b9d2 100644 GIT binary patch delta 800 zcmV+*1K<4a2IdBkQ-2E$9tHfZY={5=0`o~kK~#9!?OMxj(?AqGb?n##lPD3X6qzC_ z7IfL}0JRImhCNGuh&A8A7Jh;sV26Z2T~q=!RFNNJmqjwpcszO36WeipuM~C0cAVZb zbI;s4a}S_tr>|e$4*M>eXn&_SFm+$@{Ahy1(GcEb3;^&ZPk#Uazb}7f`bABC5AQGU zUoGyBGyQGs`;VVE&;{V){N1f-Il1c{yO*}(V3z6276-FC|1OLC`Ck_1@3Cm*J=wHp zfN44C*gY6sd+EI6AohK9oH;OtZ>Q~y73~~U+!3?%LQUW*! z=%EBmm;s5gP=6nQ+{il)4DPt#w4nfC(=#FM@qc>u z4DMrlEeNH~fFsYVH3YoL7^A_XaucC-#P#vh=dH59vf}^C*Kc4ff@xaS0{{S4e~@l< zTS)xOKNF6u`5MLR)zQukzY^3-dgA4V3t#WRQbc+DMD520sMD(f0Z7v z9GrWg2dGBBReC^~96-w;ErS#S`>zM+Y>7z^AU%NefadD~suN+-185nfOps>4Ug!aw z;pOcxu)7i&PJ-fUB9_I7ZC1Ov|aPL`L54Q;7_f$kbdSBi9L* zC5dq|l#`;`OJs5*S&}5i`)~EBp!m05>EA+F=rCWhzeMWIJ?joy2LoI7yr4S*mI$u2X+` z@ALELcL2?DdiLUa*mu#y@^^X#Q+JT3M-v>5hVUk10Dw1n1b+bdef}%aE?Uy#i1zaS z#qIrZqPfNV^KTwx@9{AAo?Nso zz_c86>>iA+y_~$`AYu$1XAX?P>_t5>X+@ui%_kKHeqzix@RiT+*gcpE@B}!(eF>Bx z0TAbbJ^-0NgUz_ygfT$pxmD>s>(V zlP+ScJXhf%n}4?H0*Br`BEeRZpzV$pJ}PrS%-F)G<+@x{ed1f67X&GjVjc2A;671q!+k}h$p7S6AXI7r zN1nG;^Y$iVj0O*?4TM$^*T+wvH;MwQD5lxPm#^Qzc?i?A>IVP-to{HN2DyPy9U#y$ zNXsBaf`8-!wJ1VqRY>d*#q~Jot$e$YKg%dUs`z2&6rsBH0P!5r&eH>yFK5s60F@<> z9ze?=ErVnMd#wlPY>7z^AU%NefadD~suST>=>a-CKyg5uEui%-P>UWQ7(Trn2Fgp3 z5hN(DCURPgTo<_tVpq7z3QE}y`&WNpT25^#GJom)KBdS|ip-AX2^NvWV#e0y3Ch>x zWpV2%GMP77P!iiT7Er|mI-9N1^8^KX-9;5n6X+%r6VGM;r-jX*NU#hNYCs_bH{RW`` delta 19 bcmZ3&wS;RzFbBJUp=Oig_PHCQPqF|2Jk00N~Jd@$7j?y9yEY^S0;zocmB4s!C2zE~c`6-LRz3Z<=3A zbvg=Pr2T&0SDNrg07`7u_jjc+oy>_l{3WEdy0kGae^#G~|P(6T1 zkN_Y6s2)J|0ICO2J%H)~R1csqNB|H3ln5;?S?l}HdPGKlw4DkfstW0d44o64ofG6` zusW2)xSfTb6HFhF6dg~V`6MMVadAddfJjhLz90XXemiW}^0@rdv#*{BI@`_KW`WLj zlkN);392g0+8PscaUKrET%gE2AiWOw$bErA0La=JTNK0jB4!nNK%VWi94_W@aX}G?mYvJ$cWzb*3h^mKIL7 zHXe?S0WKag<;u^238h8EzHktD}fYaNswPKgTu2MX&_FLx4R2N2dk_H zki%Kv5n0T@z%2~Ij105pNB{-dOFZj+UD;nUu?uKvAFY(t28vzwba4!cIQ({cB0sYr zPn)dz%xSy-{*T|SwQt7BGkSWDdi9roRoSviecsF?YFDpMnk`^?VEz4a-^E&GiB5bK z8+f?wG$NXxOE-imDlBsKF1q$};*t2ed1pNGj%YFLVcpwbd|c2iXimYrb9t-|-^Gqq z$}4S|%NQfr%G$w@{EA^yIHOzU3PuO*V0MpCc8$z+cMqLv);l2oig8WVhF1qyu@^J! zn*W_MYR)^e{F=~rc1Jd^y=#B8V4tN8rzJ$ b=k!13?VR+f^x!n0{}?=7{an^LB{Ts5@{N%3 diff --git a/src/main/resources/assets/create/textures/block/vault/vault_top_medium.png b/src/main/resources/assets/create/textures/block/vault/vault_top_medium.png index c28936a15c3e136b931d9b787b172cc4cbf531a1..2ec555bab1f26a27ff67cfc789a44aafaddd7b98 100644 GIT binary patch delta 993 zcmV<710MXS1BeKa85#xv0063Kaozv`00v@9M??Ss00000`9r&Zk$ND13k@L<$*!Vb z000A(NklI4!}rw(luF(j5tB7u`A^nx3w137bcY=_thH06DZ&py9*?_PZG?!J4; zJYHYxt`rN%FU-RzEaEzUFs&M@r)MaYEdao<@*>`U_?$rseERsdJFJXozr0c`;K`#0 zFbc~k8V1UyiK1bI3i7(LX~MKB-gB|@MqwEMy!Uu{Tv%Iu8d)c{&&#G&@%>Pl&CQox z0LZG-Lp9uKpM(8wK$fSxXR@O8y*Ehj{@!k?FW~u$*WE#O2Jy##VS>%M`Ab8!OXDR? z!%R*`t7&5{3`_DwNzj+>17(Db>@_Va%t?Weig9UM!CaYJSOgA8b$6 zmOPueZJpk|d(noR)&OZr^>tXh&g68oaOFtkMn42R-5f$2yzLh3D|-V!fb2BSdfw=L zs*O6@)e`{luEFwub%(%tZwLfsM~TzY_t^UL@^SnSSjcA*2f?r3exwe9`+K{o9PsYV ztD%FSI1^A1OdAA)vSJVl>KO+XRvt#yiFS(tQVfbRkK#N+x{RR(+q-f>{)`LqDB9<7 z#(Y62sAtr(0PkGXED&b5XupIz4srlFfE*AF$F||vc4Fm!?dpjyDBd(Wj163bNpZr@ zR`b}|-b&O7r%}hodJ#L@TdACw6pn3UXL}19>qR(?da^ITv}!mwI!tUtTKTj%I68!B z)nea?+ze$k4JDJIWLCX}&M;7B=kW8mj*?l0qU$%_c}3Up<){kxq77wsZg>Z9C451V zbgSy#VhqTCY8n(>kF|kj0dfF2;BG^1*}tIOn?+WgzS`aKc~hJ}19NGR50DiNPO~=$ zHv@b?jGnXzUFZmHbZVA=ebDrC0&*^YpZEac11JcR1IPj70OA9P4k1;Fa<#&2+BO=-Lz^# zWhG{dTj@)e=P(M3p*rI9jbh6?cw1iS+op5-X(dSi7oc?jrOMLL81VsP!bG17q{V-6 zE|3;H6MZg_7L#%=FxD?X%`YW7R2dbrn%4KXIwD1h6eUuW_yFPq1pEI201eKn%P`=8 P00000NkvXXu0mjf8W768 delta 409 zcmeC+Siw9&vYwfNfno0U#y3F9IKU^w6-XOcSpg<;u^K=ofQUhW1`j3q&S!3+-1Zlr-YN#5=*3>~bp9zYIf zfk$L90|U1(2s1Lwnj--eWH0gbb!D%A$;2*TsPgB-X$7FzJ5LwKkch)?r!(?3EAY5Z z>@pF#^EZFD*i2!cGXk4++u9^_=1&he!#-8YWX(eMse6lUx=yeymUAJ zZ_8k&AS*AW#7#Rmv*#9vJ({Y?n7_0)$@NL?jKgPiEBssLOqjxd$w`B8Qg^bB*iXLt z32OS1eL@O5UH3ZNn*O2QbnwI!PC{xWt~$(695-r Bo@M|5 From cb55dbccdf831bc4a3e3c0895f50e3c76d196626 Mon Sep 17 00:00:00 2001 From: IThundxr Date: Tue, 11 Feb 2025 11:48:45 -0500 Subject: [PATCH 7/7] What happened to that "I" - Remove I prefix from interfaces - Add some more context to handler methods and improve the api in some areas --- .../java/com/simibubi/create/AllBlocks.java | 4 +- .../train/TrainConductorHandler.java | 30 ++-------- .../ContraptionTransformableRegistry.java | 15 ----- .../ITransformableBlockEntity.java | 7 --- ...ableBlock.java => TransformableBlock.java} | 3 +- .../TransformableBlockEntity.java | 9 +++ ...artialSafeNBT.java => PartialSafeNBT.java} | 2 +- .../SchematicRequirementsRegistry.java | 60 ++++++++++--------- ...=> SpecialBlockEntityItemRequirement.java} | 2 +- ....java => SpecialBlockItemRequirement.java} | 6 +- ...java => SpecialEntityItemRequirement.java} | 2 +- .../contraptions/StructureTransform.java | 17 +++--- .../chassis/AbstractChassisBlock.java | 4 +- .../elevator/ElevatorContactBlock.java | 13 ++-- .../contraptions/glue/SuperGlueEntity.java | 4 +- .../mounted/CartAssemblerBlock.java | 16 ++--- .../copycat/CopycatBlockEntity.java | 11 ++-- .../girder/GirderEncasedShaftBlock.java | 4 +- .../decoration/placard/PlacardBlock.java | 5 +- .../equipment/armor/BacktankBlock.java | 5 +- .../equipment/blueprint/BlueprintEntity.java | 5 +- .../fluids/pipes/EncasedPipeBlock.java | 6 +- .../content/fluids/pipes/FluidPipeBlock.java | 4 +- .../fluids/pipes/FluidPipeBlockEntity.java | 7 ++- .../fluids/pipes/GlassFluidPipeBlock.java | 4 +- .../base/DirectionalAxisKineticBlock.java | 4 +- .../content/kinetics/belt/BeltBlock.java | 7 ++- .../ChainConveyorBlockEntity.java | 12 ++-- .../kinetics/chainDrive/ChainDriveBlock.java | 4 +- .../mechanicalArm/ArmBlockEntity.java | 12 ++-- .../BracketedKineticBlockEntity.java | 7 ++- .../encased/EncasedCogwheelBlock.java | 6 +- .../encased/EncasedShaftBlock.java | 4 +- .../sequencer/SequencedGearshiftBlock.java | 5 +- .../factoryBoard/FactoryPanelBlock.java | 5 +- .../logistics/funnel/BeltFunnelBlock.java | 6 +- .../redstone/DirectedDirectionalBlock.java | 4 +- .../controller/LecternControllerBlock.java | 4 +- .../redstone/nixieTube/NixieTubeBlock.java | 4 +- .../requirement/ItemRequirement.java | 32 +++++----- .../trains/bogey/AbstractBogeyBlock.java | 7 ++- .../trains/bogey/StandardBogeyBlock.java | 4 +- .../trains/entity/CarriageContraption.java | 14 +++-- .../observer/TrackObserverBlockEntity.java | 9 +-- .../trains/signal/SignalBlockEntity.java | 9 +-- .../trains/station/StationBlockEntity.java | 17 +++--- .../content/trains/track/TrackBlock.java | 11 ++-- .../trains/track/TrackBlockEntity.java | 7 ++- .../trains/track/TrackTargetingBehaviour.java | 8 ++- .../blockEntity/SmartBlockEntity.java | 7 ++- .../foundation/utility/BlockHelper.java | 5 +- .../train/TrainConductorHandlerImpl.java | 22 +++++++ .../ContraptionTransformableRegistryImpl.java | 5 +- .../SchematicRequirementsRegistryImpl.java | 29 +++++---- 54 files changed, 273 insertions(+), 242 deletions(-) delete mode 100644 src/main/java/com/simibubi/create/api/contraption/transformable/ITransformableBlockEntity.java rename src/main/java/com/simibubi/create/api/contraption/transformable/{ITransformableBlock.java => TransformableBlock.java} (81%) create mode 100644 src/main/java/com/simibubi/create/api/contraption/transformable/TransformableBlockEntity.java rename src/main/java/com/simibubi/create/api/schematic/nbt/{IPartialSafeNBT.java => PartialSafeNBT.java} (84%) rename src/main/java/com/simibubi/create/api/schematic/requirement/{ISpecialBlockEntityItemRequirement.java => SpecialBlockEntityItemRequirement.java} (81%) rename src/main/java/com/simibubi/create/api/schematic/requirement/{ISpecialBlockItemRequirement.java => SpecialBlockItemRequirement.java} (58%) rename src/main/java/com/simibubi/create/api/schematic/requirement/{ISpecialEntityItemRequirement.java => SpecialEntityItemRequirement.java} (77%) create mode 100644 src/main/java/com/simibubi/create/impl/contraption/train/TrainConductorHandlerImpl.java diff --git a/src/main/java/com/simibubi/create/AllBlocks.java b/src/main/java/com/simibubi/create/AllBlocks.java index 1a7373f0ca..93f94e6189 100644 --- a/src/main/java/com/simibubi/create/AllBlocks.java +++ b/src/main/java/com/simibubi/create/AllBlocks.java @@ -17,7 +17,6 @@ import static com.simibubi.create.foundation.data.TagGen.tagBlockAndItem; import com.simibubi.create.AllTags.AllBlockTags; import com.simibubi.create.AllTags.AllItemTags; -import com.simibubi.create.api.contraption.train.TrainConductorHandler; import com.simibubi.create.content.contraptions.actors.contraptionControls.ContraptionControlsBlock; import com.simibubi.create.content.contraptions.actors.contraptionControls.ContraptionControlsMovement; import com.simibubi.create.content.contraptions.actors.contraptionControls.ContraptionControlsMovingInteraction; @@ -289,6 +288,7 @@ import com.simibubi.create.foundation.item.ItemDescription; import com.simibubi.create.foundation.item.UncontainableBlockItem; import com.simibubi.create.foundation.utility.ColorHandlers; import com.simibubi.create.foundation.utility.DyeHelper; +import com.simibubi.create.impl.contraption.train.TrainConductorHandlerImpl; import com.tterrag.registrate.providers.RegistrateRecipeProvider; import com.tterrag.registrate.providers.loot.RegistrateBlockLootTables; import com.tterrag.registrate.util.DataIngredient; @@ -768,7 +768,7 @@ public class AllBlocks { .loot((lt, block) -> lt.add(block, BlazeBurnerBlock.buildLootTable())) .blockstate((c, p) -> p.simpleBlock(c.getEntry(), AssetLookup.partialBaseModel(c, p))) .onRegister(movementBehaviour(new BlazeBurnerMovementBehaviour())) - .onRegister(block -> TrainConductorHandler.registerBlazeBurner()) + .onRegister(block -> TrainConductorHandlerImpl.registerBlazeBurner()) .item(BlazeBurnerBlockItem::withBlaze) .model(AssetLookup.customBlockItemModel("blaze_burner", "block_with_blaze")) .build() diff --git a/src/main/java/com/simibubi/create/api/contraption/train/TrainConductorHandler.java b/src/main/java/com/simibubi/create/api/contraption/train/TrainConductorHandler.java index 05cd1e09e3..5acadf6c4c 100644 --- a/src/main/java/com/simibubi/create/api/contraption/train/TrainConductorHandler.java +++ b/src/main/java/com/simibubi/create/api/contraption/train/TrainConductorHandler.java @@ -1,37 +1,24 @@ package com.simibubi.create.api.contraption.train; -import com.simibubi.create.AllBlocks; -import com.simibubi.create.AllInteractionBehaviours; -import com.simibubi.create.content.processing.burner.BlazeBurnerBlock; +import java.util.function.Consumer; +import java.util.function.Predicate; +import com.simibubi.create.AllInteractionBehaviours; import com.simibubi.create.content.processing.burner.BlockBasedTrainConductorInteractionBehaviour; +import com.simibubi.create.impl.contraption.train.TrainConductorHandlerImpl; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.block.state.BlockState; -import org.jetbrains.annotations.ApiStatus; - -import java.util.ArrayList; -import java.util.List; -import java.util.function.Consumer; -import java.util.function.Predicate; - - /** * All required methods to make your block a train conductor similar to the blaze burner */ public interface TrainConductorHandler { - - @ApiStatus.Internal - List CONDUCTOR_HANDLERS = new ArrayList<>(); - - - boolean isValidConductor(BlockState state); private static void registerHandler(TrainConductorHandler handler) { - CONDUCTOR_HANDLERS.add(handler); + TrainConductorHandlerImpl.CONDUCTOR_HANDLERS.add(handler); } static void registerConductor(ResourceLocation blockRl, Predicate isValidConductor, UpdateScheduleCallback updateScheduleCallback) { @@ -39,14 +26,7 @@ public interface TrainConductorHandler { registerHandler(isValidConductor::test); } - @ApiStatus.Internal - static void registerBlazeBurner() { - registerConductor(AllBlocks.BLAZE_BURNER.getId(), blockState -> AllBlocks.BLAZE_BURNER.has(blockState) - && blockState.getValue(BlazeBurnerBlock.HEAT_LEVEL) != BlazeBurnerBlock.HeatLevel.NONE, UpdateScheduleCallback.EMPTY); - } - interface UpdateScheduleCallback { - UpdateScheduleCallback EMPTY = (hasSchedule, blockState, blockStateSetter) -> {}; void update(boolean hasSchedule, BlockState currentBlockState, Consumer blockStateSetter); diff --git a/src/main/java/com/simibubi/create/api/contraption/transformable/ContraptionTransformableRegistry.java b/src/main/java/com/simibubi/create/api/contraption/transformable/ContraptionTransformableRegistry.java index 15456daa18..33588d9aee 100644 --- a/src/main/java/com/simibubi/create/api/contraption/transformable/ContraptionTransformableRegistry.java +++ b/src/main/java/com/simibubi/create/api/contraption/transformable/ContraptionTransformableRegistry.java @@ -1,12 +1,9 @@ package com.simibubi.create.api.contraption.transformable; -import com.simibubi.create.content.contraptions.StructureTransform; import com.simibubi.create.impl.contraption.transformable.ContraptionTransformableRegistryImpl; import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntityType; -import net.minecraft.world.level.block.state.BlockState; /** * Registry for registering new contraption transformations @@ -34,16 +31,4 @@ public class ContraptionTransformableRegistry { public static void registerForBlockEntity(BlockEntityType blockEntityType, TransformableBlockEntity transformableBlockEntity) { ContraptionTransformableRegistryImpl.registerForBlockEntity(blockEntityType, transformableBlockEntity); } - - // --- Interfaces that provide the context that would be accessible if you implemented the ITransformable* interfaces --- - - @FunctionalInterface - public interface TransformableBlock { - BlockState transform(Block block, BlockState state, StructureTransform transform); - } - - @FunctionalInterface - public interface TransformableBlockEntity { - void transform(BlockEntity blockEntity, StructureTransform transform); - } } diff --git a/src/main/java/com/simibubi/create/api/contraption/transformable/ITransformableBlockEntity.java b/src/main/java/com/simibubi/create/api/contraption/transformable/ITransformableBlockEntity.java deleted file mode 100644 index 59ca6fadc8..0000000000 --- a/src/main/java/com/simibubi/create/api/contraption/transformable/ITransformableBlockEntity.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.simibubi.create.api.contraption.transformable; - -import com.simibubi.create.content.contraptions.StructureTransform; - -public interface ITransformableBlockEntity { - void transform(StructureTransform transform); -} diff --git a/src/main/java/com/simibubi/create/api/contraption/transformable/ITransformableBlock.java b/src/main/java/com/simibubi/create/api/contraption/transformable/TransformableBlock.java similarity index 81% rename from src/main/java/com/simibubi/create/api/contraption/transformable/ITransformableBlock.java rename to src/main/java/com/simibubi/create/api/contraption/transformable/TransformableBlock.java index 5bdcdf1b0a..15d7d5fa26 100644 --- a/src/main/java/com/simibubi/create/api/contraption/transformable/ITransformableBlock.java +++ b/src/main/java/com/simibubi/create/api/contraption/transformable/TransformableBlock.java @@ -4,6 +4,7 @@ import com.simibubi.create.content.contraptions.StructureTransform; import net.minecraft.world.level.block.state.BlockState; -public interface ITransformableBlock { +@FunctionalInterface +public interface TransformableBlock { BlockState transform(BlockState state, StructureTransform transform); } diff --git a/src/main/java/com/simibubi/create/api/contraption/transformable/TransformableBlockEntity.java b/src/main/java/com/simibubi/create/api/contraption/transformable/TransformableBlockEntity.java new file mode 100644 index 0000000000..d7182381b4 --- /dev/null +++ b/src/main/java/com/simibubi/create/api/contraption/transformable/TransformableBlockEntity.java @@ -0,0 +1,9 @@ +package com.simibubi.create.api.contraption.transformable; + +import com.simibubi.create.content.contraptions.StructureTransform; + +import net.minecraft.world.level.block.entity.BlockEntity; + +public interface TransformableBlockEntity { + void transform(BlockEntity blockEntity, StructureTransform transform); +} diff --git a/src/main/java/com/simibubi/create/api/schematic/nbt/IPartialSafeNBT.java b/src/main/java/com/simibubi/create/api/schematic/nbt/PartialSafeNBT.java similarity index 84% rename from src/main/java/com/simibubi/create/api/schematic/nbt/IPartialSafeNBT.java rename to src/main/java/com/simibubi/create/api/schematic/nbt/PartialSafeNBT.java index 2cd7948168..95d2c928e8 100644 --- a/src/main/java/com/simibubi/create/api/schematic/nbt/IPartialSafeNBT.java +++ b/src/main/java/com/simibubi/create/api/schematic/nbt/PartialSafeNBT.java @@ -2,7 +2,7 @@ package com.simibubi.create.api.schematic.nbt; import net.minecraft.nbt.CompoundTag; -public interface IPartialSafeNBT { +public interface PartialSafeNBT { /** * This will always be called from the logical server */ diff --git a/src/main/java/com/simibubi/create/api/schematic/requirement/SchematicRequirementsRegistry.java b/src/main/java/com/simibubi/create/api/schematic/requirement/SchematicRequirementsRegistry.java index 3df156e6bd..19a8ce9387 100644 --- a/src/main/java/com/simibubi/create/api/schematic/requirement/SchematicRequirementsRegistry.java +++ b/src/main/java/com/simibubi/create/api/schematic/requirement/SchematicRequirementsRegistry.java @@ -20,95 +20,97 @@ public class SchematicRequirementsRegistry { /** * Register a new special requirement for a specified block * - * @param block The block you want to register a {@link BlockRequirement} for + * @param block The block you want to register a {@link ContextProvidingBlockRequirement} for * @param requirement The requirement you would like to add to this block, - * the {@link BlockRequirement#getRequiredItems(Block, BlockState, BlockEntity)} - * method will be called on the {@link BlockRequirement} you have provided, + * the {@link ContextProvidingBlockRequirement#getRequiredItems(BlockState, BlockEntity)} + * method will be called on the {@link ContextProvidingBlockRequirement} you have provided, * and you will be able to insert requirements based off the context that is given */ - public static void registerForBlock(Block block, BlockRequirement requirement) { + public static void registerForBlock(Block block, ContextProvidingBlockRequirement requirement) { SchematicRequirementsRegistryImpl.registerForBlock(block, requirement); } /** * Register a new special requirement for a specified block * - * @param block The id of the block you want to register a {@link BlockRequirement} for + * @param block The id of the block you want to register a {@link ContextProvidingBlockRequirement} for * @param requirement The requirement you would like to add to this block, - * the {@link BlockRequirement#getRequiredItems(Block, BlockState, BlockEntity)} - * method will be called on the {@link BlockRequirement} you have provided, + * the {@link ContextProvidingBlockRequirement#getRequiredItems(BlockState, BlockEntity)} + * method will be called on the {@link ContextProvidingBlockRequirement} you have provided, * and you will be able to insert requirements based off the context that is given */ - public static void registerForBlock(ResourceLocation block, BlockRequirement requirement) { + public static void registerForBlock(ResourceLocation block, ContextProvidingBlockRequirement requirement) { SchematicRequirementsRegistryImpl.registerForBlock(block, requirement); } /** * Register a new special requirement for a specified block entity type * - * @param blockEntityType The blockEntityType you want to register a {@link BlockEntityRequirement} for + * @param blockEntityType The blockEntityType you want to register a {@link ContextProvidingBlockEntityRequirement} for * @param requirement The requirement you would like to add to this block entity type, - * the {@link BlockEntityRequirement#getRequiredItems(BlockEntity, BlockState)} - * method will be called on the {@link BlockEntityRequirement} you have provided, + * the {@link ContextProvidingBlockEntityRequirement#getRequiredItems(BlockEntity)} + * method will be called on the + * {@link ContextProvidingBlockEntityRequirement} you have provided, * and you will be able to insert requirements based off the context that is given */ - public static void registerForBlockEntity(BlockEntityType blockEntityType, BlockEntityRequirement requirement) { + public static void registerForBlockEntity(BlockEntityType blockEntityType, ContextProvidingBlockEntityRequirement requirement) { SchematicRequirementsRegistryImpl.registerForBlockEntity(blockEntityType, requirement); } /** * Register a new special requirement for a specified block entity type * - * @param blockEntityType The id of the blockEntityType you want to register a {@link BlockEntityRequirement} for + * @param blockEntityType The id of the blockEntityType you want to register a {@link ContextProvidingBlockEntityRequirement} for * @param requirement The requirement you would like to add to this block entity type, - * the {@link BlockEntityRequirement#getRequiredItems(BlockEntity, BlockState)} - * method will be called on the {@link BlockEntityRequirement} you have provided, + * the {@link ContextProvidingBlockEntityRequirement#getRequiredItems(BlockEntity)} + * method will be called on the + * {@link ContextProvidingBlockEntityRequirement} you have provided, * and you will be able to insert requirements based off the context that is given */ - public static void registerForBlockEntity(ResourceLocation blockEntityType, BlockEntityRequirement requirement) { + public static void registerForBlockEntity(ResourceLocation blockEntityType, ContextProvidingBlockEntityRequirement requirement) { SchematicRequirementsRegistryImpl.registerForBlockEntity(blockEntityType, requirement); } /** * Register a new special requirement for a specified entity type * - * @param entityType The entityType you want to register a {@link EntityRequirement} for + * @param entityType The entityType you want to register a {@link ContextProvidingEntityRequirement} for * @param requirement The requirement you would like to add to this entity type, - * the {@link EntityRequirement#getRequiredItems(Entity)} - * method will be called on the {@link EntityRequirement} you have provided, + * the {@link ContextProvidingEntityRequirement#getRequiredItems(Entity)} + * method will be called on the {@link ContextProvidingEntityRequirement} you have provided, * and you will be able to insert requirements based off the context that is given */ - public static void registerForEntity(EntityType entityType, EntityRequirement requirement) { + public static void registerForEntity(EntityType entityType, ContextProvidingEntityRequirement requirement) { SchematicRequirementsRegistryImpl.registerForEntity(entityType, requirement); } /** * Register a new special requirement for a specified entity type * - * @param entityType The id of the entityType you want to register a {@link EntityRequirement} for + * @param entityType The id of the entityType you want to register a {@link ContextProvidingEntityRequirement} for * @param requirement The requirement you would like to add to this entity type, - * the {@link EntityRequirement#getRequiredItems(Entity)} - * method will be called on the {@link EntityRequirement} you have provided, + * the {@link ContextProvidingEntityRequirement#getRequiredItems(Entity)} + * method will be called on the {@link ContextProvidingEntityRequirement} you have provided, * and you will be able to insert requirements based off the context that is given */ - public static void registerForEntity(ResourceLocation entityType, EntityRequirement requirement) { + public static void registerForEntity(ResourceLocation entityType, ContextProvidingEntityRequirement requirement) { SchematicRequirementsRegistryImpl.registerForEntity(entityType, requirement); } // --- Interfaces that provide the context that would be accessible if you implemented the ISpecial* interfaces --- @FunctionalInterface - public interface BlockRequirement { - ItemRequirement getRequiredItems(Block block, BlockState state, @Nullable BlockEntity blockEntity); + public interface ContextProvidingBlockRequirement { + ItemRequirement getRequiredItems(BlockState state, @Nullable BlockEntity blockEntity); } @FunctionalInterface - public interface BlockEntityRequirement { - ItemRequirement getRequiredItems(BlockEntity blockEntity, BlockState state); + public interface ContextProvidingBlockEntityRequirement { + ItemRequirement getRequiredItems(BlockEntity blockEntity); } @FunctionalInterface - public interface EntityRequirement { + public interface ContextProvidingEntityRequirement { ItemRequirement getRequiredItems(Entity entity); } } diff --git a/src/main/java/com/simibubi/create/api/schematic/requirement/ISpecialBlockEntityItemRequirement.java b/src/main/java/com/simibubi/create/api/schematic/requirement/SpecialBlockEntityItemRequirement.java similarity index 81% rename from src/main/java/com/simibubi/create/api/schematic/requirement/ISpecialBlockEntityItemRequirement.java rename to src/main/java/com/simibubi/create/api/schematic/requirement/SpecialBlockEntityItemRequirement.java index de6e29561b..9d8764d012 100644 --- a/src/main/java/com/simibubi/create/api/schematic/requirement/ISpecialBlockEntityItemRequirement.java +++ b/src/main/java/com/simibubi/create/api/schematic/requirement/SpecialBlockEntityItemRequirement.java @@ -4,6 +4,6 @@ import com.simibubi.create.content.schematics.requirement.ItemRequirement; import net.minecraft.world.level.block.state.BlockState; -public interface ISpecialBlockEntityItemRequirement { +public interface SpecialBlockEntityItemRequirement { ItemRequirement getRequiredItems(BlockState state); } diff --git a/src/main/java/com/simibubi/create/api/schematic/requirement/ISpecialBlockItemRequirement.java b/src/main/java/com/simibubi/create/api/schematic/requirement/SpecialBlockItemRequirement.java similarity index 58% rename from src/main/java/com/simibubi/create/api/schematic/requirement/ISpecialBlockItemRequirement.java rename to src/main/java/com/simibubi/create/api/schematic/requirement/SpecialBlockItemRequirement.java index dc89bd0f49..39ca485dfb 100644 --- a/src/main/java/com/simibubi/create/api/schematic/requirement/ISpecialBlockItemRequirement.java +++ b/src/main/java/com/simibubi/create/api/schematic/requirement/SpecialBlockItemRequirement.java @@ -1,10 +1,12 @@ package com.simibubi.create.api.schematic.requirement; +import org.jetbrains.annotations.Nullable; + import com.simibubi.create.content.schematics.requirement.ItemRequirement; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.state.BlockState; -public interface ISpecialBlockItemRequirement { - ItemRequirement getRequiredItems(BlockState state, BlockEntity blockEntity); +public interface SpecialBlockItemRequirement { + ItemRequirement getRequiredItems(BlockState state, @Nullable BlockEntity blockEntity); } diff --git a/src/main/java/com/simibubi/create/api/schematic/requirement/ISpecialEntityItemRequirement.java b/src/main/java/com/simibubi/create/api/schematic/requirement/SpecialEntityItemRequirement.java similarity index 77% rename from src/main/java/com/simibubi/create/api/schematic/requirement/ISpecialEntityItemRequirement.java rename to src/main/java/com/simibubi/create/api/schematic/requirement/SpecialEntityItemRequirement.java index 38bb16f779..9623dd4147 100644 --- a/src/main/java/com/simibubi/create/api/schematic/requirement/ISpecialEntityItemRequirement.java +++ b/src/main/java/com/simibubi/create/api/schematic/requirement/SpecialEntityItemRequirement.java @@ -2,6 +2,6 @@ package com.simibubi.create.api.schematic.requirement; import com.simibubi.create.content.schematics.requirement.ItemRequirement; -public interface ISpecialEntityItemRequirement { +public interface SpecialEntityItemRequirement { ItemRequirement getRequiredItems(); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/StructureTransform.java b/src/main/java/com/simibubi/create/content/contraptions/StructureTransform.java index f4b0bf3422..9896463d5c 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/StructureTransform.java +++ b/src/main/java/com/simibubi/create/content/contraptions/StructureTransform.java @@ -4,9 +4,8 @@ import static net.minecraft.world.level.block.state.properties.BlockStatePropert import static net.minecraft.world.level.block.state.properties.BlockStateProperties.FACING; import static net.minecraft.world.level.block.state.properties.BlockStateProperties.HORIZONTAL_FACING; -import com.simibubi.create.api.contraption.transformable.ContraptionTransformableRegistry; -import com.simibubi.create.api.contraption.transformable.ITransformableBlock; -import com.simibubi.create.api.contraption.transformable.ITransformableBlockEntity; +import com.simibubi.create.api.contraption.transformable.TransformableBlock; +import com.simibubi.create.api.contraption.transformable.TransformableBlockEntity; import com.simibubi.create.impl.contraption.transformable.ContraptionTransformableRegistryImpl; import net.createmod.catnip.math.VecHelper; @@ -133,11 +132,11 @@ public class StructureTransform { } public void apply(BlockEntity be) { - ContraptionTransformableRegistry.TransformableBlockEntity transformableBlockEntity = ContraptionTransformableRegistryImpl.get(be.getType()); + TransformableBlockEntity transformableBlockEntity = ContraptionTransformableRegistryImpl.get(be.getType()); if (transformableBlockEntity != null) { transformableBlockEntity.transform(be, this); - } else if (be instanceof ITransformableBlockEntity itbe) { - itbe.transform(this); + } else if (be instanceof TransformableBlockEntity itbe) { + itbe.transform(be, this); } } @@ -148,10 +147,10 @@ public class StructureTransform { */ public BlockState apply(BlockState state) { Block block = state.getBlock(); - ContraptionTransformableRegistry.TransformableBlock transformableBlock = ContraptionTransformableRegistryImpl.get(block); + TransformableBlock transformableBlock = ContraptionTransformableRegistryImpl.get(block); if (transformableBlock != null) { - return transformableBlock.transform(block, state, this); - } else if (block instanceof ITransformableBlock transformable) { + return transformableBlock.transform(state, this); + } else if (block instanceof TransformableBlock transformable) { return transformable.transform(state, this); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/chassis/AbstractChassisBlock.java b/src/main/java/com/simibubi/create/content/contraptions/chassis/AbstractChassisBlock.java index eee7c7cd2a..98233bebec 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/chassis/AbstractChassisBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/chassis/AbstractChassisBlock.java @@ -3,7 +3,7 @@ package com.simibubi.create.content.contraptions.chassis; import com.simibubi.create.AllBlockEntityTypes; import com.simibubi.create.AllItems; import com.simibubi.create.AllSoundEvents; -import com.simibubi.create.api.contraption.transformable.ITransformableBlock; +import com.simibubi.create.api.contraption.transformable.TransformableBlock; import com.simibubi.create.content.contraptions.StructureTransform; import com.simibubi.create.content.equipment.wrench.IWrenchable; import com.simibubi.create.foundation.block.IBE; @@ -29,7 +29,7 @@ import net.minecraft.world.phys.Vec3; import net.minecraftforge.common.Tags; -public abstract class AbstractChassisBlock extends RotatedPillarBlock implements IWrenchable, IBE, ITransformableBlock { +public abstract class AbstractChassisBlock extends RotatedPillarBlock implements IWrenchable, IBE, TransformableBlock { public AbstractChassisBlock(Properties properties) { super(properties); diff --git a/src/main/java/com/simibubi/create/content/contraptions/elevator/ElevatorContactBlock.java b/src/main/java/com/simibubi/create/content/contraptions/elevator/ElevatorContactBlock.java index cc9696235e..fefdfe9b2d 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/elevator/ElevatorContactBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/elevator/ElevatorContactBlock.java @@ -1,16 +1,21 @@ package com.simibubi.create.content.contraptions.elevator; +import java.util.Optional; + +import javax.annotation.Nullable; + import com.simibubi.create.AllBlockEntityTypes; import com.simibubi.create.AllBlocks; import com.simibubi.create.AllItems; +import com.simibubi.create.api.schematic.requirement.SpecialBlockItemRequirement; import com.simibubi.create.content.contraptions.elevator.ElevatorColumn.ColumnCoords; import com.simibubi.create.content.redstone.contact.RedstoneContactBlock; import com.simibubi.create.content.redstone.diodes.BrassDiodeBlock; -import com.simibubi.create.api.schematic.requirement.ISpecialBlockItemRequirement; import com.simibubi.create.content.schematics.requirement.ItemRequirement; import com.simibubi.create.foundation.block.IBE; import com.simibubi.create.foundation.block.WrenchableDirectionalBlock; import com.simibubi.create.foundation.utility.BlockHelper; + import net.createmod.catnip.gui.ScreenOpener; import net.minecraft.client.player.LocalPlayer; import net.minecraft.core.BlockPos; @@ -35,15 +40,13 @@ import net.minecraft.world.level.block.state.StateDefinition.Builder; 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.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.fml.DistExecutor; -import javax.annotation.Nullable; -import java.util.Optional; - public class ElevatorContactBlock extends WrenchableDirectionalBlock - implements IBE, ISpecialBlockItemRequirement { + implements IBE, SpecialBlockItemRequirement { public static final BooleanProperty POWERED = BlockStateProperties.POWERED; public static final BooleanProperty CALLING = BooleanProperty.create("calling"); diff --git a/src/main/java/com/simibubi/create/content/contraptions/glue/SuperGlueEntity.java b/src/main/java/com/simibubi/create/content/contraptions/glue/SuperGlueEntity.java index cb6f965462..398d80f501 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/glue/SuperGlueEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/glue/SuperGlueEntity.java @@ -8,7 +8,7 @@ import com.simibubi.create.AllBlocks; import com.simibubi.create.AllEntityTypes; import com.simibubi.create.AllItems; import com.simibubi.create.AllSoundEvents; -import com.simibubi.create.api.schematic.requirement.ISpecialEntityItemRequirement; +import com.simibubi.create.api.schematic.requirement.SpecialEntityItemRequirement; import com.simibubi.create.content.contraptions.BlockMovementChecks; import com.simibubi.create.content.contraptions.bearing.BearingBlock; import com.simibubi.create.content.contraptions.chassis.AbstractChassisBlock; @@ -56,7 +56,7 @@ import net.minecraft.world.phys.Vec3; import net.minecraftforge.entity.IEntityAdditionalSpawnData; import net.minecraftforge.network.NetworkHooks; -public class SuperGlueEntity extends Entity implements IEntityAdditionalSpawnData, ISpecialEntityItemRequirement { +public class SuperGlueEntity extends Entity implements IEntityAdditionalSpawnData, SpecialEntityItemRequirement { public static AABB span(BlockPos startPos, BlockPos endPos) { return new AABB(startPos, endPos).expandTowards(1, 1, 1); diff --git a/src/main/java/com/simibubi/create/content/contraptions/mounted/CartAssemblerBlock.java b/src/main/java/com/simibubi/create/content/contraptions/mounted/CartAssemblerBlock.java index 4d03db03a3..4da7853779 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/mounted/CartAssemblerBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/mounted/CartAssemblerBlock.java @@ -1,14 +1,21 @@ package com.simibubi.create.content.contraptions.mounted; +import java.util.ArrayList; +import java.util.List; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; + import com.simibubi.create.AllBlockEntityTypes; import com.simibubi.create.AllBlocks; import com.simibubi.create.AllShapes; +import com.simibubi.create.api.schematic.requirement.SpecialBlockItemRequirement; import com.simibubi.create.content.equipment.wrench.IWrenchable; import com.simibubi.create.content.redstone.rail.ControllerRailBlock; -import com.simibubi.create.api.schematic.requirement.ISpecialBlockItemRequirement; import com.simibubi.create.content.schematics.requirement.ItemRequirement; import com.simibubi.create.content.schematics.requirement.ItemRequirement.ItemUseType; import com.simibubi.create.foundation.block.IBE; + import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.core.Direction.Axis; @@ -52,13 +59,8 @@ import net.minecraft.world.phys.shapes.EntityCollisionContext; import net.minecraft.world.phys.shapes.Shapes; import net.minecraft.world.phys.shapes.VoxelShape; -import javax.annotation.Nonnull; -import javax.annotation.Nullable; -import java.util.ArrayList; -import java.util.List; - public class CartAssemblerBlock extends BaseRailBlock - implements IBE, IWrenchable, ISpecialBlockItemRequirement { + implements IBE, IWrenchable, SpecialBlockItemRequirement { public static final BooleanProperty POWERED = BlockStateProperties.POWERED; public static final BooleanProperty BACKWARDS = BooleanProperty.create("backwards"); diff --git a/src/main/java/com/simibubi/create/content/decoration/copycat/CopycatBlockEntity.java b/src/main/java/com/simibubi/create/content/decoration/copycat/CopycatBlockEntity.java index 8ce129e90c..36136044d3 100644 --- a/src/main/java/com/simibubi/create/content/decoration/copycat/CopycatBlockEntity.java +++ b/src/main/java/com/simibubi/create/content/decoration/copycat/CopycatBlockEntity.java @@ -3,9 +3,9 @@ package com.simibubi.create.content.decoration.copycat; import java.util.List; import com.simibubi.create.AllBlocks; -import com.simibubi.create.api.contraption.transformable.ITransformableBlockEntity; -import com.simibubi.create.api.schematic.nbt.IPartialSafeNBT; -import com.simibubi.create.api.schematic.requirement.ISpecialBlockEntityItemRequirement; +import com.simibubi.create.api.contraption.transformable.TransformableBlockEntity; +import com.simibubi.create.api.schematic.nbt.PartialSafeNBT; +import com.simibubi.create.api.schematic.requirement.SpecialBlockEntityItemRequirement; import com.simibubi.create.content.contraptions.StructureTransform; import com.simibubi.create.content.redstone.RoseQuartzLampBlock; import com.simibubi.create.content.schematics.requirement.ItemRequirement; @@ -20,6 +20,7 @@ import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.NbtUtils; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.block.TrapDoorBlock; +import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.properties.BlockStateProperties; @@ -28,7 +29,7 @@ import net.minecraftforge.client.model.data.ModelData; import net.minecraftforge.items.ItemHandlerHelper; public class CopycatBlockEntity extends SmartBlockEntity - implements ISpecialBlockEntityItemRequirement, ITransformableBlockEntity, IPartialSafeNBT { + implements SpecialBlockEntityItemRequirement, TransformableBlockEntity, PartialSafeNBT { private BlockState material; private ItemStack consumedItem; @@ -128,7 +129,7 @@ public class CopycatBlockEntity extends SmartBlockEntity } @Override - public void transform(StructureTransform transform) { + public void transform(BlockEntity be, StructureTransform transform) { material = transform.apply(material); notifyUpdate(); } diff --git a/src/main/java/com/simibubi/create/content/decoration/girder/GirderEncasedShaftBlock.java b/src/main/java/com/simibubi/create/content/decoration/girder/GirderEncasedShaftBlock.java index 6b04d80e81..6f9bd783ae 100644 --- a/src/main/java/com/simibubi/create/content/decoration/girder/GirderEncasedShaftBlock.java +++ b/src/main/java/com/simibubi/create/content/decoration/girder/GirderEncasedShaftBlock.java @@ -5,10 +5,10 @@ import static net.minecraft.world.level.block.state.properties.BlockStatePropert import com.simibubi.create.AllBlockEntityTypes; import com.simibubi.create.AllBlocks; import com.simibubi.create.AllShapes; +import com.simibubi.create.api.schematic.requirement.SpecialBlockItemRequirement; import com.simibubi.create.content.equipment.wrench.IWrenchable; import com.simibubi.create.content.kinetics.base.HorizontalAxisKineticBlock; import com.simibubi.create.content.kinetics.base.KineticBlockEntity; -import com.simibubi.create.api.schematic.requirement.ISpecialBlockItemRequirement; import com.simibubi.create.content.schematics.requirement.ItemRequirement; import com.simibubi.create.foundation.block.IBE; @@ -37,7 +37,7 @@ import net.minecraft.world.phys.shapes.Shapes; import net.minecraft.world.phys.shapes.VoxelShape; public class GirderEncasedShaftBlock extends HorizontalAxisKineticBlock - implements IBE, SimpleWaterloggedBlock, IWrenchable, ISpecialBlockItemRequirement { + implements IBE, SimpleWaterloggedBlock, IWrenchable, SpecialBlockItemRequirement { public static final BooleanProperty TOP = GirderBlock.TOP; public static final BooleanProperty BOTTOM = GirderBlock.BOTTOM; diff --git a/src/main/java/com/simibubi/create/content/decoration/placard/PlacardBlock.java b/src/main/java/com/simibubi/create/content/decoration/placard/PlacardBlock.java index d19809b56b..161fc06940 100644 --- a/src/main/java/com/simibubi/create/content/decoration/placard/PlacardBlock.java +++ b/src/main/java/com/simibubi/create/content/decoration/placard/PlacardBlock.java @@ -6,10 +6,10 @@ import com.simibubi.create.AllBlockEntityTypes; import com.simibubi.create.AllBlocks; import com.simibubi.create.AllShapes; import com.simibubi.create.AllSoundEvents; +import com.simibubi.create.api.schematic.requirement.SpecialBlockItemRequirement; import com.simibubi.create.content.equipment.wrench.IWrenchable; import com.simibubi.create.content.logistics.filter.FilterItem; import com.simibubi.create.content.logistics.filter.FilterItemStack; -import com.simibubi.create.api.schematic.requirement.ISpecialBlockItemRequirement; import com.simibubi.create.content.schematics.requirement.ItemRequirement; import com.simibubi.create.content.schematics.requirement.ItemRequirement.ItemUseType; import com.simibubi.create.foundation.block.IBE; @@ -41,10 +41,11 @@ import net.minecraft.world.level.material.FluidState; import net.minecraft.world.phys.BlockHitResult; import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.VoxelShape; + import net.minecraftforge.items.ItemHandlerHelper; public class PlacardBlock extends FaceAttachedHorizontalDirectionalBlock - implements ProperWaterloggedBlock, IBE, ISpecialBlockItemRequirement, IWrenchable { + implements ProperWaterloggedBlock, IBE, SpecialBlockItemRequirement, IWrenchable { public static final BooleanProperty POWERED = BlockStateProperties.POWERED; diff --git a/src/main/java/com/simibubi/create/content/equipment/armor/BacktankBlock.java b/src/main/java/com/simibubi/create/content/equipment/armor/BacktankBlock.java index f50551dc9f..1ecd71e649 100644 --- a/src/main/java/com/simibubi/create/content/equipment/armor/BacktankBlock.java +++ b/src/main/java/com/simibubi/create/content/equipment/armor/BacktankBlock.java @@ -6,8 +6,8 @@ import java.util.Optional; import com.simibubi.create.AllBlockEntityTypes; import com.simibubi.create.AllEnchantments; import com.simibubi.create.AllShapes; +import com.simibubi.create.api.schematic.requirement.SpecialBlockItemRequirement; import com.simibubi.create.content.kinetics.base.HorizontalKineticBlock; -import com.simibubi.create.api.schematic.requirement.ISpecialBlockItemRequirement; import com.simibubi.create.content.schematics.requirement.ItemRequirement; import com.simibubi.create.content.schematics.requirement.ItemRequirement.ItemUseType; import com.simibubi.create.foundation.block.IBE; @@ -46,9 +46,10 @@ import net.minecraft.world.level.storage.loot.parameters.LootContextParams; import net.minecraft.world.phys.BlockHitResult; import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.VoxelShape; + import net.minecraftforge.common.util.FakePlayer; -public class BacktankBlock extends HorizontalKineticBlock implements IBE, SimpleWaterloggedBlock, ISpecialBlockItemRequirement { +public class BacktankBlock extends HorizontalKineticBlock implements IBE, SimpleWaterloggedBlock, SpecialBlockItemRequirement { public BacktankBlock(Properties properties) { super(properties); diff --git a/src/main/java/com/simibubi/create/content/equipment/blueprint/BlueprintEntity.java b/src/main/java/com/simibubi/create/content/equipment/blueprint/BlueprintEntity.java index f54ec39320..25ea995073 100644 --- a/src/main/java/com/simibubi/create/content/equipment/blueprint/BlueprintEntity.java +++ b/src/main/java/com/simibubi/create/content/equipment/blueprint/BlueprintEntity.java @@ -12,8 +12,8 @@ import org.apache.commons.lang3.Validate; import com.simibubi.create.AllEntityTypes; import com.simibubi.create.AllItems; import com.simibubi.create.Create; +import com.simibubi.create.api.schematic.requirement.SpecialEntityItemRequirement; import com.simibubi.create.content.logistics.filter.FilterItemStack; -import com.simibubi.create.api.schematic.requirement.ISpecialEntityItemRequirement; import com.simibubi.create.content.schematics.requirement.ItemRequirement; import com.simibubi.create.content.schematics.requirement.ItemRequirement.ItemUseType; import com.simibubi.create.foundation.networking.ISyncPersistentData; @@ -59,6 +59,7 @@ import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.HitResult; import net.minecraft.world.phys.Vec3; + import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.common.ForgeHooks; @@ -72,7 +73,7 @@ import net.minecraftforge.items.wrapper.InvWrapper; import net.minecraftforge.network.NetworkHooks; public class BlueprintEntity extends HangingEntity - implements IEntityAdditionalSpawnData, ISpecialEntityItemRequirement, ISyncPersistentData, IInteractionChecker { + implements IEntityAdditionalSpawnData, SpecialEntityItemRequirement, ISyncPersistentData, IInteractionChecker { protected int size; protected Direction verticalOrientation; diff --git a/src/main/java/com/simibubi/create/content/fluids/pipes/EncasedPipeBlock.java b/src/main/java/com/simibubi/create/content/fluids/pipes/EncasedPipeBlock.java index b3ed1bc109..8c577ad4b1 100644 --- a/src/main/java/com/simibubi/create/content/fluids/pipes/EncasedPipeBlock.java +++ b/src/main/java/com/simibubi/create/content/fluids/pipes/EncasedPipeBlock.java @@ -12,13 +12,13 @@ import java.util.function.Supplier; import com.simibubi.create.AllBlockEntityTypes; import com.simibubi.create.AllBlocks; -import com.simibubi.create.api.contraption.transformable.ITransformableBlock; +import com.simibubi.create.api.contraption.transformable.TransformableBlock; +import com.simibubi.create.api.schematic.requirement.SpecialBlockItemRequirement; import com.simibubi.create.content.contraptions.StructureTransform; import com.simibubi.create.content.decoration.encasing.EncasedBlock; import com.simibubi.create.content.equipment.wrench.IWrenchable; import com.simibubi.create.content.fluids.FluidPropagator; import com.simibubi.create.content.fluids.FluidTransportBehaviour; -import com.simibubi.create.api.schematic.requirement.ISpecialBlockItemRequirement; import com.simibubi.create.content.schematics.requirement.ItemRequirement; import com.simibubi.create.foundation.advancement.AdvancementBehaviour; import com.simibubi.create.foundation.block.IBE; @@ -51,7 +51,7 @@ import net.minecraft.world.phys.HitResult; import net.minecraft.world.ticks.TickPriority; public class EncasedPipeBlock extends Block - implements IWrenchable, ISpecialBlockItemRequirement, IBE, EncasedBlock, ITransformableBlock { + implements IWrenchable, SpecialBlockItemRequirement, IBE, EncasedBlock, TransformableBlock { public static final Map FACING_TO_PROPERTY_MAP = PipeBlock.PROPERTY_BY_DIRECTION; private final Supplier casing; diff --git a/src/main/java/com/simibubi/create/content/fluids/pipes/FluidPipeBlock.java b/src/main/java/com/simibubi/create/content/fluids/pipes/FluidPipeBlock.java index 8c3cf43958..d7997a42f4 100644 --- a/src/main/java/com/simibubi/create/content/fluids/pipes/FluidPipeBlock.java +++ b/src/main/java/com/simibubi/create/content/fluids/pipes/FluidPipeBlock.java @@ -7,7 +7,7 @@ import javax.annotation.Nullable; import com.simibubi.create.AllBlockEntityTypes; import com.simibubi.create.AllBlocks; -import com.simibubi.create.api.contraption.transformable.ITransformableBlock; +import com.simibubi.create.api.contraption.transformable.TransformableBlock; import com.simibubi.create.content.contraptions.StructureTransform; import com.simibubi.create.content.decoration.bracket.BracketedBlockEntityBehaviour; import com.simibubi.create.content.decoration.encasing.EncasableBlock; @@ -55,7 +55,7 @@ import net.minecraft.world.phys.shapes.VoxelShape; import net.minecraft.world.ticks.TickPriority; public class FluidPipeBlock extends PipeBlock implements SimpleWaterloggedBlock, IWrenchableWithBracket, - IBE, EncasableBlock, ITransformableBlock { + IBE, EncasableBlock, TransformableBlock { private static final VoxelShape OCCLUSION_BOX = Block.box(4, 4, 4, 12, 12, 12); diff --git a/src/main/java/com/simibubi/create/content/fluids/pipes/FluidPipeBlockEntity.java b/src/main/java/com/simibubi/create/content/fluids/pipes/FluidPipeBlockEntity.java index f101643750..31d65dcef4 100644 --- a/src/main/java/com/simibubi/create/content/fluids/pipes/FluidPipeBlockEntity.java +++ b/src/main/java/com/simibubi/create/content/fluids/pipes/FluidPipeBlockEntity.java @@ -2,7 +2,7 @@ package com.simibubi.create.content.fluids.pipes; import java.util.List; -import com.simibubi.create.api.contraption.transformable.ITransformableBlockEntity; +import com.simibubi.create.api.contraption.transformable.TransformableBlockEntity; import com.simibubi.create.content.contraptions.StructureTransform; import com.simibubi.create.content.decoration.bracket.BracketedBlockEntityBehaviour; import com.simibubi.create.content.fluids.FluidPropagator; @@ -13,10 +13,11 @@ import com.simibubi.create.foundation.blockEntity.behaviour.BlockEntityBehaviour import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.world.level.BlockAndTintGetter; +import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; -public class FluidPipeBlockEntity extends SmartBlockEntity implements ITransformableBlockEntity { +public class FluidPipeBlockEntity extends SmartBlockEntity implements TransformableBlockEntity { public FluidPipeBlockEntity(BlockEntityType type, BlockPos pos, BlockState state) { super(type, pos, state); @@ -30,7 +31,7 @@ public class FluidPipeBlockEntity extends SmartBlockEntity implements ITransform } @Override - public void transform(StructureTransform transform) { + public void transform(BlockEntity be, StructureTransform transform) { BracketedBlockEntityBehaviour bracketBehaviour = getBehaviour(BracketedBlockEntityBehaviour.TYPE); if (bracketBehaviour != null) { bracketBehaviour.transformBracket(transform); diff --git a/src/main/java/com/simibubi/create/content/fluids/pipes/GlassFluidPipeBlock.java b/src/main/java/com/simibubi/create/content/fluids/pipes/GlassFluidPipeBlock.java index 8250c9cb4d..6bae8eff31 100644 --- a/src/main/java/com/simibubi/create/content/fluids/pipes/GlassFluidPipeBlock.java +++ b/src/main/java/com/simibubi/create/content/fluids/pipes/GlassFluidPipeBlock.java @@ -4,8 +4,8 @@ import javax.annotation.ParametersAreNonnullByDefault; import com.simibubi.create.AllBlockEntityTypes; import com.simibubi.create.AllBlocks; +import com.simibubi.create.api.schematic.requirement.SpecialBlockItemRequirement; import com.simibubi.create.content.fluids.FluidTransportBehaviour; -import com.simibubi.create.api.schematic.requirement.ISpecialBlockItemRequirement; import com.simibubi.create.content.schematics.requirement.ItemRequirement; import com.simibubi.create.foundation.block.IBE; @@ -30,7 +30,7 @@ import net.minecraft.world.level.pathfinder.PathComputationType; @MethodsReturnNonnullByDefault @ParametersAreNonnullByDefault -public class GlassFluidPipeBlock extends AxisPipeBlock implements IBE, SimpleWaterloggedBlock, ISpecialBlockItemRequirement { +public class GlassFluidPipeBlock extends AxisPipeBlock implements IBE, SimpleWaterloggedBlock, SpecialBlockItemRequirement { public static final BooleanProperty ALT = BooleanProperty.create("alt"); diff --git a/src/main/java/com/simibubi/create/content/kinetics/base/DirectionalAxisKineticBlock.java b/src/main/java/com/simibubi/create/content/kinetics/base/DirectionalAxisKineticBlock.java index ad41239c71..92c8a065e4 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/base/DirectionalAxisKineticBlock.java +++ b/src/main/java/com/simibubi/create/content/kinetics/base/DirectionalAxisKineticBlock.java @@ -1,6 +1,6 @@ package com.simibubi.create.content.kinetics.base; -import com.simibubi.create.api.contraption.transformable.ITransformableBlock; +import com.simibubi.create.api.contraption.transformable.TransformableBlock; import com.simibubi.create.content.contraptions.StructureTransform; import net.createmod.catnip.data.Iterate; @@ -16,7 +16,7 @@ import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.StateDefinition.Builder; import net.minecraft.world.level.block.state.properties.BooleanProperty; -public abstract class DirectionalAxisKineticBlock extends DirectionalKineticBlock implements ITransformableBlock { +public abstract class DirectionalAxisKineticBlock extends DirectionalKineticBlock implements TransformableBlock { public static final BooleanProperty AXIS_ALONG_FIRST_COORDINATE = BooleanProperty.create("axis_along_first"); diff --git a/src/main/java/com/simibubi/create/content/kinetics/belt/BeltBlock.java b/src/main/java/com/simibubi/create/content/kinetics/belt/BeltBlock.java index 2914a1f2bc..eb1f8ad539 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/belt/BeltBlock.java +++ b/src/main/java/com/simibubi/create/content/kinetics/belt/BeltBlock.java @@ -12,8 +12,8 @@ import org.apache.commons.lang3.mutable.MutableBoolean; import com.simibubi.create.AllBlockEntityTypes; import com.simibubi.create.AllBlocks; import com.simibubi.create.AllItems; -import com.simibubi.create.api.contraption.transformable.ITransformableBlock; -import com.simibubi.create.api.schematic.requirement.ISpecialBlockItemRequirement; +import com.simibubi.create.api.contraption.transformable.TransformableBlock; +import com.simibubi.create.api.schematic.requirement.SpecialBlockItemRequirement; import com.simibubi.create.content.contraptions.StructureTransform; import com.simibubi.create.content.equipment.armor.DivingBootsItem; import com.simibubi.create.content.fluids.transfer.GenericItemEmptying; @@ -88,6 +88,7 @@ import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.EntityCollisionContext; import net.minecraft.world.phys.shapes.Shapes; import net.minecraft.world.phys.shapes.VoxelShape; + import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.client.extensions.common.IClientBlockExtensions; @@ -96,7 +97,7 @@ import net.minecraftforge.common.capabilities.ForgeCapabilities; import net.minecraftforge.items.IItemHandler; public class BeltBlock extends HorizontalKineticBlock - implements IBE, ISpecialBlockItemRequirement, ITransformableBlock, ProperWaterloggedBlock { + implements IBE, SpecialBlockItemRequirement, TransformableBlock, ProperWaterloggedBlock { public static final Property SLOPE = EnumProperty.create("slope", BeltSlope.class); public static final Property PART = EnumProperty.create("part", BeltPart.class); diff --git a/src/main/java/com/simibubi/create/content/kinetics/chainConveyor/ChainConveyorBlockEntity.java b/src/main/java/com/simibubi/create/content/kinetics/chainConveyor/ChainConveyorBlockEntity.java index e5d0466b98..39841b9a0e 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/chainConveyor/ChainConveyorBlockEntity.java +++ b/src/main/java/com/simibubi/create/content/kinetics/chainConveyor/ChainConveyorBlockEntity.java @@ -12,7 +12,7 @@ import java.util.function.Consumer; import javax.annotation.Nullable; -import com.simibubi.create.api.contraption.transformable.ITransformableBlockEntity; +import com.simibubi.create.api.contraption.transformable.TransformableBlockEntity; import com.simibubi.create.content.contraptions.StructureTransform; import com.simibubi.create.content.kinetics.base.IRotate; import com.simibubi.create.content.kinetics.base.KineticBlockEntity; @@ -28,9 +28,9 @@ import com.simibubi.create.infrastructure.config.AllConfigs; import dev.engine_room.flywheel.api.visualization.VisualizationManager; import net.createmod.catnip.data.Iterate; -import net.createmod.catnip.nbt.NBTHelper; -import net.createmod.catnip.math.VecHelper; import net.createmod.catnip.math.AngleHelper; +import net.createmod.catnip.math.VecHelper; +import net.createmod.catnip.nbt.NBTHelper; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction.Axis; import net.minecraft.core.particles.BlockParticleOption; @@ -48,13 +48,15 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.Vec3; + import net.minecraftforge.items.ItemHandlerHelper; -public class ChainConveyorBlockEntity extends KineticBlockEntity implements ITransformableBlockEntity { +public class ChainConveyorBlockEntity extends KineticBlockEntity implements TransformableBlockEntity { public record ConnectionStats(float tangentAngle, float chainLength, Vec3 start, Vec3 end) { } @@ -782,7 +784,7 @@ public class ChainConveyorBlockEntity extends KineticBlockEntity implements ITra } @Override - public void transform(StructureTransform transform) { + public void transform(BlockEntity be, StructureTransform transform) { if (connections == null || connections.isEmpty()) return; diff --git a/src/main/java/com/simibubi/create/content/kinetics/chainDrive/ChainDriveBlock.java b/src/main/java/com/simibubi/create/content/kinetics/chainDrive/ChainDriveBlock.java index 6f2e9272ec..33900b8d34 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/chainDrive/ChainDriveBlock.java +++ b/src/main/java/com/simibubi/create/content/kinetics/chainDrive/ChainDriveBlock.java @@ -1,7 +1,7 @@ package com.simibubi.create.content.kinetics.chainDrive; import com.simibubi.create.AllBlockEntityTypes; -import com.simibubi.create.api.contraption.transformable.ITransformableBlock; +import com.simibubi.create.api.contraption.transformable.TransformableBlock; import com.simibubi.create.content.contraptions.StructureTransform; import com.simibubi.create.content.kinetics.base.DirectionalAxisKineticBlock; import com.simibubi.create.content.kinetics.base.KineticBlockEntity; @@ -33,7 +33,7 @@ import net.minecraft.world.level.block.state.properties.Property; import net.minecraft.world.level.material.PushReaction; public class ChainDriveBlock extends RotatedPillarKineticBlock - implements IBE, ITransformableBlock { + implements IBE, TransformableBlock { public static final Property PART = EnumProperty.create("part", Part.class); public static final BooleanProperty CONNECTED_ALONG_FIRST_COORDINATE = diff --git a/src/main/java/com/simibubi/create/content/kinetics/mechanicalArm/ArmBlockEntity.java b/src/main/java/com/simibubi/create/content/kinetics/mechanicalArm/ArmBlockEntity.java index b29fc120ad..162ae7062d 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/mechanicalArm/ArmBlockEntity.java +++ b/src/main/java/com/simibubi/create/content/kinetics/mechanicalArm/ArmBlockEntity.java @@ -6,7 +6,7 @@ import java.util.List; import javax.annotation.Nullable; import com.simibubi.create.Create; -import com.simibubi.create.api.contraption.transformable.ITransformableBlockEntity; +import com.simibubi.create.api.contraption.transformable.TransformableBlockEntity; import com.simibubi.create.content.contraptions.StructureTransform; import com.simibubi.create.content.kinetics.base.KineticBlockEntity; import com.simibubi.create.content.kinetics.mechanicalArm.AllArmInteractionPointTypes.JukeboxPoint; @@ -22,11 +22,11 @@ import com.simibubi.create.foundation.utility.CreateLang; import com.simibubi.create.infrastructure.config.AllConfigs; import dev.engine_room.flywheel.lib.visualization.VisualizationHelper; -import net.createmod.catnip.nbt.NBTHelper; -import net.createmod.catnip.math.VecHelper; import net.createmod.catnip.animation.LerpedFloat; import net.createmod.catnip.lang.Lang; import net.createmod.catnip.math.AngleHelper; +import net.createmod.catnip.math.VecHelper; +import net.createmod.catnip.nbt.NBTHelper; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.core.SectionPos; @@ -42,15 +42,17 @@ import net.minecraft.world.level.Level; import net.minecraft.world.level.LevelAccessor; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.JukeboxBlock; +import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.chunk.ChunkSource; import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.Vec3; + import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.fml.DistExecutor; -public class ArmBlockEntity extends KineticBlockEntity implements ITransformableBlockEntity { +public class ArmBlockEntity extends KineticBlockEntity implements TransformableBlockEntity { // Server List inputs; @@ -419,7 +421,7 @@ public class ArmBlockEntity extends KineticBlockEntity implements ITransformable } @Override - public void transform(StructureTransform transform) { + public void transform(BlockEntity be, StructureTransform transform) { if (interactionPointTag == null) return; diff --git a/src/main/java/com/simibubi/create/content/kinetics/simpleRelays/BracketedKineticBlockEntity.java b/src/main/java/com/simibubi/create/content/kinetics/simpleRelays/BracketedKineticBlockEntity.java index 1b452758bc..9490c98105 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/simpleRelays/BracketedKineticBlockEntity.java +++ b/src/main/java/com/simibubi/create/content/kinetics/simpleRelays/BracketedKineticBlockEntity.java @@ -2,16 +2,17 @@ package com.simibubi.create.content.kinetics.simpleRelays; import java.util.List; -import com.simibubi.create.api.contraption.transformable.ITransformableBlockEntity; +import com.simibubi.create.api.contraption.transformable.TransformableBlockEntity; import com.simibubi.create.content.contraptions.StructureTransform; import com.simibubi.create.content.decoration.bracket.BracketedBlockEntityBehaviour; import com.simibubi.create.foundation.blockEntity.behaviour.BlockEntityBehaviour; import net.minecraft.core.BlockPos; +import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; -public class BracketedKineticBlockEntity extends SimpleKineticBlockEntity implements ITransformableBlockEntity { +public class BracketedKineticBlockEntity extends SimpleKineticBlockEntity implements TransformableBlockEntity { public BracketedKineticBlockEntity(BlockEntityType type, BlockPos pos, BlockState state) { super(type, pos, state); @@ -25,7 +26,7 @@ public class BracketedKineticBlockEntity extends SimpleKineticBlockEntity implem } @Override - public void transform(StructureTransform transform) { + public void transform(BlockEntity be, StructureTransform transform) { BracketedBlockEntityBehaviour bracketBehaviour = getBehaviour(BracketedBlockEntityBehaviour.TYPE); if (bracketBehaviour != null) { bracketBehaviour.transformBracket(transform); diff --git a/src/main/java/com/simibubi/create/content/kinetics/simpleRelays/encased/EncasedCogwheelBlock.java b/src/main/java/com/simibubi/create/content/kinetics/simpleRelays/encased/EncasedCogwheelBlock.java index 444ad42130..f9de060b73 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/simpleRelays/encased/EncasedCogwheelBlock.java +++ b/src/main/java/com/simibubi/create/content/kinetics/simpleRelays/encased/EncasedCogwheelBlock.java @@ -4,7 +4,8 @@ import java.util.function.Supplier; import com.simibubi.create.AllBlockEntityTypes; import com.simibubi.create.AllBlocks; -import com.simibubi.create.api.contraption.transformable.ITransformableBlock; +import com.simibubi.create.api.contraption.transformable.TransformableBlock; +import com.simibubi.create.api.schematic.requirement.SpecialBlockItemRequirement; import com.simibubi.create.content.contraptions.StructureTransform; import com.simibubi.create.content.decoration.encasing.EncasedBlock; import com.simibubi.create.content.equipment.wrench.IWrenchable; @@ -14,7 +15,6 @@ import com.simibubi.create.content.kinetics.base.RotatedPillarKineticBlock; import com.simibubi.create.content.kinetics.simpleRelays.CogWheelBlock; import com.simibubi.create.content.kinetics.simpleRelays.ICogWheel; import com.simibubi.create.content.kinetics.simpleRelays.SimpleKineticBlockEntity; -import com.simibubi.create.api.schematic.requirement.ISpecialBlockItemRequirement; import com.simibubi.create.content.schematics.requirement.ItemRequirement; import com.simibubi.create.foundation.block.IBE; @@ -45,7 +45,7 @@ import net.minecraft.world.phys.BlockHitResult; import net.minecraft.world.phys.HitResult; public class EncasedCogwheelBlock extends RotatedPillarKineticBlock - implements ICogWheel, IBE, ISpecialBlockItemRequirement, ITransformableBlock, EncasedBlock { + implements ICogWheel, IBE, SpecialBlockItemRequirement, TransformableBlock, EncasedBlock { public static final BooleanProperty TOP_SHAFT = BooleanProperty.create("top_shaft"); public static final BooleanProperty BOTTOM_SHAFT = BooleanProperty.create("bottom_shaft"); diff --git a/src/main/java/com/simibubi/create/content/kinetics/simpleRelays/encased/EncasedShaftBlock.java b/src/main/java/com/simibubi/create/content/kinetics/simpleRelays/encased/EncasedShaftBlock.java index 752d562f59..8d5d8a7972 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/simpleRelays/encased/EncasedShaftBlock.java +++ b/src/main/java/com/simibubi/create/content/kinetics/simpleRelays/encased/EncasedShaftBlock.java @@ -4,11 +4,11 @@ import java.util.function.Supplier; import com.simibubi.create.AllBlockEntityTypes; import com.simibubi.create.AllBlocks; +import com.simibubi.create.api.schematic.requirement.SpecialBlockItemRequirement; import com.simibubi.create.content.decoration.encasing.EncasedBlock; import com.simibubi.create.content.kinetics.base.AbstractEncasedShaftBlock; import com.simibubi.create.content.kinetics.base.KineticBlockEntity; import com.simibubi.create.content.kinetics.base.RotatedPillarKineticBlock; -import com.simibubi.create.api.schematic.requirement.ISpecialBlockItemRequirement; import com.simibubi.create.content.schematics.requirement.ItemRequirement; import com.simibubi.create.foundation.block.IBE; @@ -28,7 +28,7 @@ import net.minecraft.world.phys.BlockHitResult; import net.minecraft.world.phys.HitResult; public class EncasedShaftBlock extends AbstractEncasedShaftBlock - implements IBE, ISpecialBlockItemRequirement, EncasedBlock { + implements IBE, SpecialBlockItemRequirement, EncasedBlock { private final Supplier casing; diff --git a/src/main/java/com/simibubi/create/content/kinetics/transmission/sequencer/SequencedGearshiftBlock.java b/src/main/java/com/simibubi/create/content/kinetics/transmission/sequencer/SequencedGearshiftBlock.java index 7f037975fe..1d7637d869 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/transmission/sequencer/SequencedGearshiftBlock.java +++ b/src/main/java/com/simibubi/create/content/kinetics/transmission/sequencer/SequencedGearshiftBlock.java @@ -2,7 +2,7 @@ package com.simibubi.create.content.kinetics.transmission.sequencer; import com.simibubi.create.AllBlockEntityTypes; import com.simibubi.create.AllItems; -import com.simibubi.create.api.contraption.transformable.ITransformableBlock; +import com.simibubi.create.api.contraption.transformable.TransformableBlock; import com.simibubi.create.content.contraptions.StructureTransform; import com.simibubi.create.content.kinetics.base.HorizontalAxisKineticBlock; import com.simibubi.create.content.kinetics.base.KineticBlock; @@ -33,11 +33,12 @@ import net.minecraft.world.level.block.state.StateDefinition.Builder; import net.minecraft.world.level.block.state.properties.BooleanProperty; import net.minecraft.world.level.block.state.properties.IntegerProperty; import net.minecraft.world.phys.BlockHitResult; + import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.fml.DistExecutor; -public class SequencedGearshiftBlock extends HorizontalAxisKineticBlock implements IBE, ITransformableBlock { +public class SequencedGearshiftBlock extends HorizontalAxisKineticBlock implements IBE, TransformableBlock { public static final BooleanProperty VERTICAL = BooleanProperty.create("vertical"); public static final IntegerProperty STATE = IntegerProperty.create("state", 0, 5); diff --git a/src/main/java/com/simibubi/create/content/logistics/factoryBoard/FactoryPanelBlock.java b/src/main/java/com/simibubi/create/content/logistics/factoryBoard/FactoryPanelBlock.java index d5f00a894d..dbcd2f78d7 100644 --- a/src/main/java/com/simibubi/create/content/logistics/factoryBoard/FactoryPanelBlock.java +++ b/src/main/java/com/simibubi/create/content/logistics/factoryBoard/FactoryPanelBlock.java @@ -6,7 +6,7 @@ import com.simibubi.create.AllBlockEntityTypes; import com.simibubi.create.AllBlocks; import com.simibubi.create.AllShapes; import com.simibubi.create.AllSoundEvents; -import com.simibubi.create.api.schematic.requirement.ISpecialBlockItemRequirement; +import com.simibubi.create.api.schematic.requirement.SpecialBlockItemRequirement; import com.simibubi.create.content.equipment.wrench.IWrenchable; import com.simibubi.create.content.logistics.packagerLink.LogisticallyLinkedBlockItem; import com.simibubi.create.content.schematics.requirement.ItemRequirement; @@ -51,12 +51,13 @@ import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.EntityCollisionContext; import net.minecraft.world.phys.shapes.Shapes; import net.minecraft.world.phys.shapes.VoxelShape; + import net.minecraftforge.common.ForgeMod; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.event.level.BlockEvent; public class FactoryPanelBlock extends FaceAttachedHorizontalDirectionalBlock - implements ProperWaterloggedBlock, IBE, IWrenchable, ISpecialBlockItemRequirement { + implements ProperWaterloggedBlock, IBE, IWrenchable, SpecialBlockItemRequirement { public static final BooleanProperty POWERED = BlockStateProperties.POWERED; diff --git a/src/main/java/com/simibubi/create/content/logistics/funnel/BeltFunnelBlock.java b/src/main/java/com/simibubi/create/content/logistics/funnel/BeltFunnelBlock.java index 5da9c71a1b..201152e2fd 100644 --- a/src/main/java/com/simibubi/create/content/logistics/funnel/BeltFunnelBlock.java +++ b/src/main/java/com/simibubi/create/content/logistics/funnel/BeltFunnelBlock.java @@ -2,18 +2,18 @@ package com.simibubi.create.content.logistics.funnel; import com.simibubi.create.AllBlocks; import com.simibubi.create.AllShapes; +import com.simibubi.create.api.schematic.requirement.SpecialBlockItemRequirement; import com.simibubi.create.content.kinetics.belt.BeltBlock; import com.simibubi.create.content.kinetics.belt.BeltSlope; import com.simibubi.create.content.kinetics.belt.behaviour.DirectBeltInputBehaviour; -import com.simibubi.create.api.schematic.requirement.ISpecialBlockItemRequirement; import com.simibubi.create.content.schematics.requirement.ItemRequirement; import com.simibubi.create.foundation.advancement.AllAdvancements; import com.simibubi.create.foundation.block.ProperWaterloggedBlock; import com.simibubi.create.foundation.blockEntity.behaviour.BlockEntityBehaviour; import com.tterrag.registrate.util.entry.BlockEntry; -import net.createmod.catnip.math.VoxelShaper; import net.createmod.catnip.lang.Lang; +import net.createmod.catnip.math.VoxelShaper; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.util.StringRepresentable; @@ -37,7 +37,7 @@ import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.EntityCollisionContext; import net.minecraft.world.phys.shapes.VoxelShape; -public class BeltFunnelBlock extends AbstractHorizontalFunnelBlock implements ISpecialBlockItemRequirement { +public class BeltFunnelBlock extends AbstractHorizontalFunnelBlock implements SpecialBlockItemRequirement { private BlockEntry parent; diff --git a/src/main/java/com/simibubi/create/content/redstone/DirectedDirectionalBlock.java b/src/main/java/com/simibubi/create/content/redstone/DirectedDirectionalBlock.java index aa7a6ddf97..ceb784aea7 100644 --- a/src/main/java/com/simibubi/create/content/redstone/DirectedDirectionalBlock.java +++ b/src/main/java/com/simibubi/create/content/redstone/DirectedDirectionalBlock.java @@ -2,7 +2,7 @@ package com.simibubi.create.content.redstone; import javax.annotation.Nullable; -import com.simibubi.create.api.contraption.transformable.ITransformableBlock; +import com.simibubi.create.api.contraption.transformable.TransformableBlock; import com.simibubi.create.content.contraptions.StructureTransform; import com.simibubi.create.content.equipment.wrench.IWrenchable; @@ -17,7 +17,7 @@ import net.minecraft.world.level.block.state.StateDefinition.Builder; import net.minecraft.world.level.block.state.properties.AttachFace; import net.minecraft.world.level.block.state.properties.EnumProperty; -public class DirectedDirectionalBlock extends HorizontalDirectionalBlock implements IWrenchable, ITransformableBlock { +public class DirectedDirectionalBlock extends HorizontalDirectionalBlock implements IWrenchable, TransformableBlock { public static final EnumProperty TARGET = EnumProperty.create("target", AttachFace.class); diff --git a/src/main/java/com/simibubi/create/content/redstone/link/controller/LecternControllerBlock.java b/src/main/java/com/simibubi/create/content/redstone/link/controller/LecternControllerBlock.java index c0d214391f..52102c3ca7 100644 --- a/src/main/java/com/simibubi/create/content/redstone/link/controller/LecternControllerBlock.java +++ b/src/main/java/com/simibubi/create/content/redstone/link/controller/LecternControllerBlock.java @@ -5,7 +5,7 @@ import java.util.ArrayList; import com.simibubi.create.AllBlockEntityTypes; import com.simibubi.create.AllItems; import com.simibubi.create.AllSoundEvents; -import com.simibubi.create.api.schematic.requirement.ISpecialBlockItemRequirement; +import com.simibubi.create.api.schematic.requirement.SpecialBlockItemRequirement; import com.simibubi.create.content.schematics.requirement.ItemRequirement; import com.simibubi.create.foundation.block.IBE; @@ -25,7 +25,7 @@ import net.minecraft.world.phys.BlockHitResult; import net.minecraft.world.phys.HitResult; public class LecternControllerBlock extends LecternBlock - implements IBE, ISpecialBlockItemRequirement { + implements IBE, SpecialBlockItemRequirement { public LecternControllerBlock(Properties properties) { super(properties); diff --git a/src/main/java/com/simibubi/create/content/redstone/nixieTube/NixieTubeBlock.java b/src/main/java/com/simibubi/create/content/redstone/nixieTube/NixieTubeBlock.java index f2f0694282..a2a4a4f88e 100644 --- a/src/main/java/com/simibubi/create/content/redstone/nixieTube/NixieTubeBlock.java +++ b/src/main/java/com/simibubi/create/content/redstone/nixieTube/NixieTubeBlock.java @@ -8,9 +8,9 @@ import java.util.function.BiConsumer; import com.simibubi.create.AllBlockEntityTypes; import com.simibubi.create.AllBlocks; import com.simibubi.create.AllShapes; +import com.simibubi.create.api.schematic.requirement.SpecialBlockItemRequirement; import com.simibubi.create.content.equipment.clipboard.ClipboardEntry; import com.simibubi.create.content.equipment.wrench.IWrenchable; -import com.simibubi.create.api.schematic.requirement.ISpecialBlockItemRequirement; import com.simibubi.create.content.schematics.requirement.ItemRequirement; import com.simibubi.create.content.schematics.requirement.ItemRequirement.ItemUseType; import com.simibubi.create.foundation.block.IBE; @@ -48,7 +48,7 @@ import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.VoxelShape; public class NixieTubeBlock extends DoubleFaceAttachedBlock - implements IBE, IWrenchable, SimpleWaterloggedBlock, ISpecialBlockItemRequirement { + implements IBE, IWrenchable, SimpleWaterloggedBlock, SpecialBlockItemRequirement { protected final DyeColor color; diff --git a/src/main/java/com/simibubi/create/content/schematics/requirement/ItemRequirement.java b/src/main/java/com/simibubi/create/content/schematics/requirement/ItemRequirement.java index 1e90c3a54c..41fea88fda 100644 --- a/src/main/java/com/simibubi/create/content/schematics/requirement/ItemRequirement.java +++ b/src/main/java/com/simibubi/create/content/schematics/requirement/ItemRequirement.java @@ -6,13 +6,16 @@ import java.util.List; import java.util.stream.Collectors; import java.util.stream.Stream; -import com.simibubi.create.api.schematic.requirement.ISpecialBlockEntityItemRequirement; -import com.simibubi.create.api.schematic.requirement.ISpecialBlockItemRequirement; -import com.simibubi.create.api.schematic.requirement.ISpecialEntityItemRequirement; -import com.simibubi.create.api.schematic.requirement.SchematicRequirementsRegistry; +import org.jetbrains.annotations.Nullable; + +import com.simibubi.create.api.schematic.requirement.SchematicRequirementsRegistry.ContextProvidingBlockEntityRequirement; +import com.simibubi.create.api.schematic.requirement.SchematicRequirementsRegistry.ContextProvidingBlockRequirement; +import com.simibubi.create.api.schematic.requirement.SchematicRequirementsRegistry.ContextProvidingEntityRequirement; +import com.simibubi.create.api.schematic.requirement.SpecialBlockEntityItemRequirement; +import com.simibubi.create.api.schematic.requirement.SpecialBlockItemRequirement; +import com.simibubi.create.api.schematic.requirement.SpecialEntityItemRequirement; import com.simibubi.create.compat.framedblocks.FramedBlocksInSchematics; import com.simibubi.create.foundation.data.recipe.Mods; - import com.simibubi.create.impl.schematic.requirement.SchematicRequirementsRegistryImpl; import net.createmod.catnip.nbt.NBTProcessors; @@ -35,9 +38,8 @@ import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.properties.BlockStateProperties; import net.minecraft.world.level.block.state.properties.SlabType; -import net.minecraftforge.registries.ForgeRegistries; -import org.jetbrains.annotations.Nullable; +import net.minecraftforge.registries.ForgeRegistries; public class ItemRequirement { public static final ItemRequirement NONE = new ItemRequirement(Collections.emptyList()); @@ -71,20 +73,20 @@ public class ItemRequirement { Block block = state.getBlock(); ItemRequirement requirement; - SchematicRequirementsRegistry.BlockRequirement blockItemRequirement = SchematicRequirementsRegistryImpl.getRequirementForBlock(block); + ContextProvidingBlockRequirement blockItemRequirement = SchematicRequirementsRegistryImpl.getRequirementForBlock(block); if (blockItemRequirement != null) { - requirement = blockItemRequirement.getRequiredItems(block, state, be); - } else if (block instanceof ISpecialBlockItemRequirement specialBlock) { + requirement = blockItemRequirement.getRequiredItems(state, be); + } else if (block instanceof SpecialBlockItemRequirement specialBlock) { requirement = specialBlock.getRequiredItems(state, be); } else { requirement = defaultOf(state, be); } if (be != null) { - SchematicRequirementsRegistry.BlockEntityRequirement blockEntityItemRequirement = SchematicRequirementsRegistryImpl.getRequirementForBlockEntityType(be.getType()); + ContextProvidingBlockEntityRequirement blockEntityItemRequirement = SchematicRequirementsRegistryImpl.getRequirementForBlockEntityType(be.getType()); if (blockEntityItemRequirement != null) { - requirement = requirement.union(blockEntityItemRequirement.getRequiredItems(be, state)); - } else if (be instanceof ISpecialBlockEntityItemRequirement specialBE) { + requirement = requirement.union(blockEntityItemRequirement.getRequiredItems(be)); + } else if (be instanceof SpecialBlockEntityItemRequirement specialBE) { requirement = requirement.union(specialBE.getRequiredItems(state)); } else if (com.simibubi.create.compat.Mods.FRAMEDBLOCKS.contains(block)) { requirement = requirement.union(FramedBlocksInSchematics.getRequiredItems(state, be)); @@ -134,10 +136,10 @@ public class ItemRequirement { } public static ItemRequirement of(Entity entity) { - SchematicRequirementsRegistry.EntityRequirement entityItemRequirement = SchematicRequirementsRegistryImpl.getRequirementForEntityType(entity.getType()); + ContextProvidingEntityRequirement entityItemRequirement = SchematicRequirementsRegistryImpl.getRequirementForEntityType(entity.getType()); if (entityItemRequirement != null) { return entityItemRequirement.getRequiredItems(entity); - } else if (entity instanceof ISpecialEntityItemRequirement specialEntity) { + } else if (entity instanceof SpecialEntityItemRequirement specialEntity) { return specialEntity.getRequiredItems(); } diff --git a/src/main/java/com/simibubi/create/content/trains/bogey/AbstractBogeyBlock.java b/src/main/java/com/simibubi/create/content/trains/bogey/AbstractBogeyBlock.java index 7c43084755..25cdfafd5e 100644 --- a/src/main/java/com/simibubi/create/content/trains/bogey/AbstractBogeyBlock.java +++ b/src/main/java/com/simibubi/create/content/trains/bogey/AbstractBogeyBlock.java @@ -16,8 +16,8 @@ import com.google.common.collect.ImmutableSet; import com.simibubi.create.AllBlocks; import com.simibubi.create.AllBogeyStyles; import com.simibubi.create.AllItems; +import com.simibubi.create.api.schematic.requirement.SpecialBlockItemRequirement; import com.simibubi.create.content.equipment.wrench.IWrenchable; -import com.simibubi.create.api.schematic.requirement.ISpecialBlockItemRequirement; import com.simibubi.create.content.schematics.requirement.ItemRequirement; import com.simibubi.create.content.trains.entity.Carriage; import com.simibubi.create.content.trains.entity.CarriageBogey; @@ -28,8 +28,8 @@ import com.simibubi.create.foundation.block.IBE; import com.simibubi.create.foundation.block.ProperWaterloggedBlock; import com.simibubi.create.foundation.utility.CreateLang; -import net.createmod.catnip.platform.CatnipServices; import net.createmod.catnip.data.Iterate; +import net.createmod.catnip.platform.CatnipServices; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.nbt.CompoundTag; @@ -52,9 +52,10 @@ import net.minecraft.world.level.block.state.properties.Property; import net.minecraft.world.level.material.FluidState; import net.minecraft.world.phys.BlockHitResult; import net.minecraft.world.phys.Vec3; + import net.minecraftforge.registries.ForgeRegistries; -public abstract class AbstractBogeyBlock extends Block implements IBE, ProperWaterloggedBlock, ISpecialBlockItemRequirement, IWrenchable { +public abstract class AbstractBogeyBlock extends Block implements IBE, ProperWaterloggedBlock, SpecialBlockItemRequirement, IWrenchable { public static final EnumProperty AXIS = BlockStateProperties.HORIZONTAL_AXIS; static final List BOGEYS = new ArrayList<>(); public BogeySizes.BogeySize size; diff --git a/src/main/java/com/simibubi/create/content/trains/bogey/StandardBogeyBlock.java b/src/main/java/com/simibubi/create/content/trains/bogey/StandardBogeyBlock.java index 91e5c7548a..e8dad70394 100644 --- a/src/main/java/com/simibubi/create/content/trains/bogey/StandardBogeyBlock.java +++ b/src/main/java/com/simibubi/create/content/trains/bogey/StandardBogeyBlock.java @@ -3,7 +3,7 @@ package com.simibubi.create.content.trains.bogey; import com.simibubi.create.AllBlockEntityTypes; import com.simibubi.create.AllBlocks; import com.simibubi.create.AllBogeyStyles; -import com.simibubi.create.api.schematic.requirement.ISpecialBlockItemRequirement; +import com.simibubi.create.api.schematic.requirement.SpecialBlockItemRequirement; import com.simibubi.create.content.trains.track.TrackMaterial; import com.simibubi.create.foundation.block.IBE; import com.simibubi.create.foundation.block.ProperWaterloggedBlock; @@ -18,7 +18,7 @@ import net.minecraft.world.phys.HitResult; import net.minecraft.world.phys.Vec3; public class StandardBogeyBlock extends AbstractBogeyBlock - implements IBE, ProperWaterloggedBlock, ISpecialBlockItemRequirement { + implements IBE, ProperWaterloggedBlock, SpecialBlockItemRequirement { public StandardBogeyBlock(Properties props, BogeySizes.BogeySize size) { super(props, size); diff --git a/src/main/java/com/simibubi/create/content/trains/entity/CarriageContraption.java b/src/main/java/com/simibubi/create/content/trains/entity/CarriageContraption.java index c35af91519..7a7e30c684 100644 --- a/src/main/java/com/simibubi/create/content/trains/entity/CarriageContraption.java +++ b/src/main/java/com/simibubi/create/content/trains/entity/CarriageContraption.java @@ -7,11 +7,10 @@ import java.util.List; import java.util.Map; import java.util.Optional; -import com.simibubi.create.api.contraption.train.TrainConductorHandler; - import org.apache.commons.lang3.tuple.Pair; import com.simibubi.create.AllBlocks; +import com.simibubi.create.api.contraption.train.TrainConductorHandler; import com.simibubi.create.content.contraptions.AssemblyException; import com.simibubi.create.content.contraptions.Contraption; import com.simibubi.create.content.contraptions.ContraptionType; @@ -20,11 +19,12 @@ import com.simibubi.create.content.contraptions.actors.trainControls.ControlsBlo import com.simibubi.create.content.contraptions.minecart.TrainCargoManager; import com.simibubi.create.content.trains.bogey.AbstractBogeyBlock; import com.simibubi.create.foundation.utility.CreateLang; +import com.simibubi.create.impl.contraption.train.TrainConductorHandlerImpl; import net.createmod.catnip.data.Couple; import net.createmod.catnip.data.Iterate; -import net.createmod.catnip.nbt.NBTHelper; import net.createmod.catnip.math.VecHelper; +import net.createmod.catnip.nbt.NBTHelper; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.core.Direction.Axis; @@ -165,8 +165,12 @@ public class CarriageContraption extends Contraption { captureBE ? world.getBlockEntity(pos) : null); } - if (TrainConductorHandler.CONDUCTOR_HANDLERS.stream().anyMatch(handler -> handler.isValidConductor(blockState))) - assembledBlockConductors.add(toLocalPos(pos)); + for (TrainConductorHandler handler : TrainConductorHandlerImpl.CONDUCTOR_HANDLERS) { + if (handler.isValidConductor(blockState)) { + assembledBlockConductors.add(toLocalPos(pos)); + break; + } + } if (AllBlocks.TRAIN_CONTROLS.has(blockState)) { Direction facing = blockState.getValue(ControlsBlock.FACING); diff --git a/src/main/java/com/simibubi/create/content/trains/observer/TrackObserverBlockEntity.java b/src/main/java/com/simibubi/create/content/trains/observer/TrackObserverBlockEntity.java index 9fd1ff282d..c2869670e2 100644 --- a/src/main/java/com/simibubi/create/content/trains/observer/TrackObserverBlockEntity.java +++ b/src/main/java/com/simibubi/create/content/trains/observer/TrackObserverBlockEntity.java @@ -5,7 +5,7 @@ import java.util.List; import javax.annotation.Nullable; import com.mojang.blaze3d.vertex.PoseStack; -import com.simibubi.create.api.contraption.transformable.ITransformableBlockEntity; +import com.simibubi.create.api.contraption.transformable.TransformableBlockEntity; import com.simibubi.create.content.contraptions.StructureTransform; import com.simibubi.create.content.redstone.displayLink.DisplayLinkBlock; import com.simibubi.create.content.trains.graph.EdgePointType; @@ -20,12 +20,13 @@ import dev.engine_room.flywheel.lib.transform.TransformStack; import net.minecraft.core.BlockPos; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.LevelAccessor; +import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.Vec3; -public class TrackObserverBlockEntity extends SmartBlockEntity implements ITransformableBlockEntity { +public class TrackObserverBlockEntity extends SmartBlockEntity implements TransformableBlockEntity { public TrackTargetingBehaviour edgePoint; @@ -90,8 +91,8 @@ public class TrackObserverBlockEntity extends SmartBlockEntity implements ITrans } @Override - public void transform(StructureTransform transform) { - edgePoint.transform(transform); + public void transform(BlockEntity be, StructureTransform transform) { + edgePoint.transform(be, transform); } public FilteringBehaviour createFilter() { diff --git a/src/main/java/com/simibubi/create/content/trains/signal/SignalBlockEntity.java b/src/main/java/com/simibubi/create/content/trains/signal/SignalBlockEntity.java index d6629af78f..79b23434c3 100644 --- a/src/main/java/com/simibubi/create/content/trains/signal/SignalBlockEntity.java +++ b/src/main/java/com/simibubi/create/content/trains/signal/SignalBlockEntity.java @@ -4,7 +4,7 @@ import java.util.List; import javax.annotation.Nullable; -import com.simibubi.create.api.contraption.transformable.ITransformableBlockEntity; +import com.simibubi.create.api.contraption.transformable.TransformableBlockEntity; import com.simibubi.create.content.contraptions.StructureTransform; import com.simibubi.create.content.trains.graph.EdgePointType; import com.simibubi.create.content.trains.signal.SignalBlock.SignalType; @@ -15,11 +15,12 @@ import com.simibubi.create.foundation.blockEntity.behaviour.BlockEntityBehaviour import net.createmod.catnip.nbt.NBTHelper; import net.minecraft.core.BlockPos; import net.minecraft.nbt.CompoundTag; +import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.phys.AABB; -public class SignalBlockEntity extends SmartBlockEntity implements ITransformableBlockEntity { +public class SignalBlockEntity extends SmartBlockEntity implements TransformableBlockEntity { public static enum OverlayState { RENDER, SKIP, DUAL @@ -160,8 +161,8 @@ public class SignalBlockEntity extends SmartBlockEntity implements ITransformabl } @Override - public void transform(StructureTransform transform) { - edgePoint.transform(transform); + public void transform(BlockEntity be, StructureTransform transform) { + edgePoint.transform(be, transform); } } diff --git a/src/main/java/com/simibubi/create/content/trains/station/StationBlockEntity.java b/src/main/java/com/simibubi/create/content/trains/station/StationBlockEntity.java index 4c2bb4bd04..8d9345fa71 100644 --- a/src/main/java/com/simibubi/create/content/trains/station/StationBlockEntity.java +++ b/src/main/java/com/simibubi/create/content/trains/station/StationBlockEntity.java @@ -21,10 +21,10 @@ import com.simibubi.create.AllItems; import com.simibubi.create.AllPackets; import com.simibubi.create.AllSoundEvents; import com.simibubi.create.Create; +import com.simibubi.create.api.contraption.transformable.TransformableBlockEntity; import com.simibubi.create.compat.computercraft.AbstractComputerBehaviour; import com.simibubi.create.compat.computercraft.ComputerCraftProxy; import com.simibubi.create.content.contraptions.AssemblyException; -import com.simibubi.create.api.contraption.transformable.ITransformableBlockEntity; import com.simibubi.create.content.contraptions.StructureTransform; import com.simibubi.create.content.decoration.slidingDoor.DoorControlBehaviour; import com.simibubi.create.content.equipment.wrench.IWrenchable; @@ -60,12 +60,12 @@ import com.simibubi.create.foundation.blockEntity.behaviour.BlockEntityBehaviour import com.simibubi.create.foundation.utility.CreateLang; import com.simibubi.create.infrastructure.config.AllConfigs; -import net.createmod.catnip.data.Iterate; -import net.createmod.catnip.nbt.NBTHelper; -import net.createmod.catnip.math.VecHelper; -import net.createmod.catnip.data.WorldAttached; import net.createmod.catnip.animation.LerpedFloat; import net.createmod.catnip.animation.LerpedFloat.Chaser; +import net.createmod.catnip.data.Iterate; +import net.createmod.catnip.data.WorldAttached; +import net.createmod.catnip.math.VecHelper; +import net.createmod.catnip.nbt.NBTHelper; import net.minecraft.ChatFormatting; import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos.MutableBlockPos; @@ -90,13 +90,14 @@ import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.levelgen.structure.BoundingBox; import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.Vec3; + import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.common.util.LazyOptional; import net.minecraftforge.network.PacketDistributor; -public class StationBlockEntity extends SmartBlockEntity implements ITransformableBlockEntity { +public class StationBlockEntity extends SmartBlockEntity implements TransformableBlockEntity { public TrackTargetingBehaviour edgePoint; public DoorControlBehaviour doorControls; @@ -970,8 +971,8 @@ public class StationBlockEntity extends SmartBlockEntity implements ITransformab } @Override - public void transform(StructureTransform transform) { - edgePoint.transform(transform); + public void transform(BlockEntity be, StructureTransform transform) { + edgePoint.transform(be, transform); } // Package port integration diff --git a/src/main/java/com/simibubi/create/content/trains/track/TrackBlock.java b/src/main/java/com/simibubi/create/content/trains/track/TrackBlock.java index 01edd65f71..6003bd5875 100644 --- a/src/main/java/com/simibubi/create/content/trains/track/TrackBlock.java +++ b/src/main/java/com/simibubi/create/content/trains/track/TrackBlock.java @@ -19,7 +19,6 @@ import java.util.Random; import java.util.Set; import java.util.function.Consumer; -import net.minecraft.network.chat.Component; import org.jetbrains.annotations.Nullable; import com.google.common.base.Predicates; @@ -29,9 +28,9 @@ import com.simibubi.create.AllBlocks; import com.simibubi.create.AllPartialModels; import com.simibubi.create.AllShapes; import com.simibubi.create.AllTags; +import com.simibubi.create.api.schematic.requirement.SpecialBlockItemRequirement; import com.simibubi.create.content.decoration.girder.GirderBlock; import com.simibubi.create.content.equipment.wrench.IWrenchable; -import com.simibubi.create.api.schematic.requirement.ISpecialBlockItemRequirement; import com.simibubi.create.content.schematics.requirement.ItemRequirement; import com.simibubi.create.content.schematics.requirement.ItemRequirement.ItemUseType; import com.simibubi.create.content.trains.CubeParticleData; @@ -50,17 +49,18 @@ import dev.engine_room.flywheel.lib.model.baked.PartialModel; import dev.engine_room.flywheel.lib.transform.TransformStack; import it.unimi.dsi.fastutil.objects.Object2IntArrayMap; import it.unimi.dsi.fastutil.objects.Object2IntMap; -import net.createmod.catnip.math.BlockFace; import net.createmod.catnip.data.Iterate; import net.createmod.catnip.data.Pair; -import net.createmod.catnip.math.VecHelper; import net.createmod.catnip.math.AngleHelper; +import net.createmod.catnip.math.BlockFace; +import net.createmod.catnip.math.VecHelper; import net.minecraft.ChatFormatting; import net.minecraft.client.multiplayer.ClientLevel; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.core.Direction.Axis; import net.minecraft.core.Direction.AxisDirection; +import net.minecraft.network.chat.Component; import net.minecraft.network.chat.MutableComponent; import net.minecraft.resources.ResourceKey; import net.minecraft.server.level.ServerLevel; @@ -99,12 +99,13 @@ import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.Shapes; import net.minecraft.world.phys.shapes.VoxelShape; import net.minecraft.world.ticks.LevelTickAccess; + import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.client.extensions.common.IClientBlockExtensions; public class TrackBlock extends Block - implements IBE, IWrenchable, ITrackBlock, ISpecialBlockItemRequirement, ProperWaterloggedBlock, IHaveBigOutline { + implements IBE, IWrenchable, ITrackBlock, SpecialBlockItemRequirement, ProperWaterloggedBlock, IHaveBigOutline { public static final EnumProperty SHAPE = EnumProperty.create("shape", TrackShape.class); public static final BooleanProperty HAS_BE = BooleanProperty.create("turn"); diff --git a/src/main/java/com/simibubi/create/content/trains/track/TrackBlockEntity.java b/src/main/java/com/simibubi/create/content/trains/track/TrackBlockEntity.java index f9d56b37f4..48ede28c05 100644 --- a/src/main/java/com/simibubi/create/content/trains/track/TrackBlockEntity.java +++ b/src/main/java/com/simibubi/create/content/trains/track/TrackBlockEntity.java @@ -11,7 +11,7 @@ import java.util.Set; import com.simibubi.create.AllBlocks; import com.simibubi.create.AllPackets; import com.simibubi.create.AllTags; -import com.simibubi.create.api.contraption.transformable.ITransformableBlockEntity; +import com.simibubi.create.api.contraption.transformable.TransformableBlockEntity; import com.simibubi.create.content.contraptions.StructureTransform; import com.simibubi.create.content.trains.graph.TrackNodeLocation; import com.simibubi.create.foundation.block.ProperWaterloggedBlock; @@ -41,12 +41,13 @@ import net.minecraft.world.level.material.FluidState; import net.minecraft.world.level.material.Fluids; import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.Vec3; + import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.client.model.data.ModelData; import net.minecraftforge.fml.DistExecutor; -public class TrackBlockEntity extends SmartBlockEntity implements ITransformableBlockEntity, IMergeableBE { +public class TrackBlockEntity extends SmartBlockEntity implements TransformableBlockEntity, IMergeableBE { Map connections; boolean cancelDrops; @@ -262,7 +263,7 @@ public class TrackBlockEntity extends SmartBlockEntity implements ITransformable } @Override - public void transform(StructureTransform transform) { + public void transform(BlockEntity be, StructureTransform transform) { Map restoredConnections = new HashMap<>(); for (Entry entry : connections.entrySet()) restoredConnections.put(entry.getKey(), diff --git a/src/main/java/com/simibubi/create/content/trains/track/TrackTargetingBehaviour.java b/src/main/java/com/simibubi/create/content/trains/track/TrackTargetingBehaviour.java index 6b2ee80c0f..5bd2fa4f23 100644 --- a/src/main/java/com/simibubi/create/content/trains/track/TrackTargetingBehaviour.java +++ b/src/main/java/com/simibubi/create/content/trains/track/TrackTargetingBehaviour.java @@ -23,10 +23,10 @@ import com.simibubi.create.foundation.blockEntity.behaviour.BehaviourType; import com.simibubi.create.foundation.blockEntity.behaviour.BlockEntityBehaviour; import dev.engine_room.flywheel.lib.model.baked.PartialModel; -import net.createmod.catnip.render.CachedBuffers; import net.createmod.catnip.data.Iterate; -import net.createmod.catnip.math.VecHelper; import net.createmod.catnip.levelWrappers.SchematicLevel; +import net.createmod.catnip.math.VecHelper; +import net.createmod.catnip.render.CachedBuffers; import net.createmod.ponder.api.level.PonderLevel; import net.minecraft.client.renderer.LevelRenderer; import net.minecraft.client.renderer.MultiBufferSource; @@ -41,8 +41,10 @@ import net.minecraft.util.Mth; import net.minecraft.world.level.Level; import net.minecraft.world.level.LevelAccessor; import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.phys.Vec3; + import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; @@ -332,7 +334,7 @@ public class TrackTargetingBehaviour extends BlockEnti ms.popPose(); } - public void transform(StructureTransform transform) { + public void transform(BlockEntity be, StructureTransform transform) { id = UUID.randomUUID(); targetTrack = transform.applyWithoutOffset(targetTrack); if (prevDirection != null) diff --git a/src/main/java/com/simibubi/create/foundation/blockEntity/SmartBlockEntity.java b/src/main/java/com/simibubi/create/foundation/blockEntity/SmartBlockEntity.java index 44474d6a70..b81fd26a9e 100644 --- a/src/main/java/com/simibubi/create/foundation/blockEntity/SmartBlockEntity.java +++ b/src/main/java/com/simibubi/create/foundation/blockEntity/SmartBlockEntity.java @@ -7,14 +7,14 @@ import java.util.Map; import java.util.function.Consumer; import com.simibubi.create.api.event.BlockEntityBehaviourEvent; -import com.simibubi.create.api.schematic.requirement.ISpecialBlockEntityItemRequirement; +import com.simibubi.create.api.schematic.nbt.PartialSafeNBT; +import com.simibubi.create.api.schematic.requirement.SpecialBlockEntityItemRequirement; import com.simibubi.create.content.schematics.requirement.ItemRequirement; import com.simibubi.create.foundation.advancement.AdvancementBehaviour; import com.simibubi.create.foundation.advancement.CreateAdvancement; import com.simibubi.create.foundation.blockEntity.behaviour.BehaviourType; import com.simibubi.create.foundation.blockEntity.behaviour.BlockEntityBehaviour; import com.simibubi.create.foundation.utility.IInteractionChecker; -import com.simibubi.create.api.schematic.nbt.IPartialSafeNBT; import it.unimi.dsi.fastutil.objects.Reference2ObjectArrayMap; import net.createmod.ponder.api.VirtualBlockEntity; @@ -24,12 +24,13 @@ import net.minecraft.network.FriendlyByteBuf; import net.minecraft.world.entity.player.Player; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; + import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.common.capabilities.ForgeCapabilities; public abstract class SmartBlockEntity extends CachedRenderBBBlockEntity - implements IPartialSafeNBT, IInteractionChecker, ISpecialBlockEntityItemRequirement, VirtualBlockEntity { + implements PartialSafeNBT, IInteractionChecker, SpecialBlockEntityItemRequirement, VirtualBlockEntity { private final Map, BlockEntityBehaviour> behaviours = new Reference2ObjectArrayMap<>(); private boolean initialized = false; diff --git a/src/main/java/com/simibubi/create/foundation/utility/BlockHelper.java b/src/main/java/com/simibubi/create/foundation/utility/BlockHelper.java index 0a576c6571..8e0c20d7ec 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/BlockHelper.java +++ b/src/main/java/com/simibubi/create/foundation/utility/BlockHelper.java @@ -7,7 +7,7 @@ import javax.annotation.Nullable; import com.simibubi.create.AllBlocks; import com.simibubi.create.AllTags.AllBlockTags; -import com.simibubi.create.api.schematic.nbt.IPartialSafeNBT; +import com.simibubi.create.api.schematic.nbt.PartialSafeNBT; import com.simibubi.create.api.schematic.nbt.SchematicSafeNBTRegistry; import com.simibubi.create.compat.Mods; import com.simibubi.create.compat.framedblocks.FramedBlocksInSchematics; @@ -57,6 +57,7 @@ import net.minecraft.world.level.block.state.properties.SlabType; import net.minecraft.world.level.chunk.LevelChunk; import net.minecraft.world.level.chunk.LevelChunkSection; import net.minecraft.world.level.material.FluidState; + import net.minecraftforge.common.IPlantable; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.event.level.BlockEvent; @@ -285,7 +286,7 @@ public class BlockHelper { } else if (safeNBT != null) { data = new CompoundTag(); safeNBT.writeSafe(blockEntity, data); - } else if (blockEntity instanceof IPartialSafeNBT safeNbtBE) { + } else if (blockEntity instanceof PartialSafeNBT safeNbtBE) { data = new CompoundTag(); safeNbtBE.writeSafe(data); } else if (Mods.FRAMEDBLOCKS.contains(blockState.getBlock())) { diff --git a/src/main/java/com/simibubi/create/impl/contraption/train/TrainConductorHandlerImpl.java b/src/main/java/com/simibubi/create/impl/contraption/train/TrainConductorHandlerImpl.java new file mode 100644 index 0000000000..0a767a4cf9 --- /dev/null +++ b/src/main/java/com/simibubi/create/impl/contraption/train/TrainConductorHandlerImpl.java @@ -0,0 +1,22 @@ +package com.simibubi.create.impl.contraption.train; + +import java.util.ArrayList; +import java.util.List; + +import org.jetbrains.annotations.ApiStatus; + +import com.simibubi.create.AllBlocks; +import com.simibubi.create.api.contraption.train.TrainConductorHandler; +import com.simibubi.create.api.contraption.train.TrainConductorHandler.UpdateScheduleCallback; +import com.simibubi.create.content.processing.burner.BlazeBurnerBlock; + +@ApiStatus.Internal +public class TrainConductorHandlerImpl { + public static final List CONDUCTOR_HANDLERS = new ArrayList<>(); + + @ApiStatus.Internal + public static void registerBlazeBurner() { + TrainConductorHandler.registerConductor(AllBlocks.BLAZE_BURNER.getId(), blockState -> AllBlocks.BLAZE_BURNER.has(blockState) + && blockState.getValue(BlazeBurnerBlock.HEAT_LEVEL) != BlazeBurnerBlock.HeatLevel.NONE, UpdateScheduleCallback.EMPTY); + } +} diff --git a/src/main/java/com/simibubi/create/impl/contraption/transformable/ContraptionTransformableRegistryImpl.java b/src/main/java/com/simibubi/create/impl/contraption/transformable/ContraptionTransformableRegistryImpl.java index f8878919d2..b51c30a189 100644 --- a/src/main/java/com/simibubi/create/impl/contraption/transformable/ContraptionTransformableRegistryImpl.java +++ b/src/main/java/com/simibubi/create/impl/contraption/transformable/ContraptionTransformableRegistryImpl.java @@ -2,12 +2,13 @@ package com.simibubi.create.impl.contraption.transformable; import org.jetbrains.annotations.ApiStatus; -import com.simibubi.create.api.contraption.transformable.ContraptionTransformableRegistry.TransformableBlock; -import com.simibubi.create.api.contraption.transformable.ContraptionTransformableRegistry.TransformableBlockEntity; +import com.simibubi.create.api.contraption.transformable.TransformableBlock; +import com.simibubi.create.api.contraption.transformable.TransformableBlockEntity; import com.simibubi.create.foundation.utility.AttachedRegistry; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.entity.BlockEntityType; + import net.minecraftforge.registries.ForgeRegistries; @ApiStatus.Internal diff --git a/src/main/java/com/simibubi/create/impl/schematic/requirement/SchematicRequirementsRegistryImpl.java b/src/main/java/com/simibubi/create/impl/schematic/requirement/SchematicRequirementsRegistryImpl.java index c5044f254b..fe5fbc3872 100644 --- a/src/main/java/com/simibubi/create/impl/schematic/requirement/SchematicRequirementsRegistryImpl.java +++ b/src/main/java/com/simibubi/create/impl/schematic/requirement/SchematicRequirementsRegistryImpl.java @@ -2,7 +2,9 @@ package com.simibubi.create.impl.schematic.requirement; import org.jetbrains.annotations.ApiStatus; -import com.simibubi.create.api.schematic.requirement.SchematicRequirementsRegistry; +import com.simibubi.create.api.schematic.requirement.SchematicRequirementsRegistry.ContextProvidingBlockEntityRequirement; +import com.simibubi.create.api.schematic.requirement.SchematicRequirementsRegistry.ContextProvidingBlockRequirement; +import com.simibubi.create.api.schematic.requirement.SchematicRequirementsRegistry.ContextProvidingEntityRequirement; import com.simibubi.create.foundation.utility.AttachedRegistry; import net.minecraft.resources.ResourceLocation; @@ -11,49 +13,50 @@ import net.minecraft.world.entity.EntityType; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntityType; + import net.minecraftforge.registries.ForgeRegistries; @ApiStatus.Internal public class SchematicRequirementsRegistryImpl { - private static final AttachedRegistry BLOCK_REQUIREMENTS = new AttachedRegistry<>(ForgeRegistries.BLOCKS); - private static final AttachedRegistry, SchematicRequirementsRegistry.BlockEntityRequirement> BLOCK_ENTITY_REQUIREMENTS = new AttachedRegistry<>(ForgeRegistries.BLOCK_ENTITY_TYPES); - private static final AttachedRegistry, SchematicRequirementsRegistry.EntityRequirement> ENTITY_REQUIREMENTS = new AttachedRegistry<>(ForgeRegistries.ENTITY_TYPES); + private static final AttachedRegistry BLOCK_REQUIREMENTS = new AttachedRegistry<>(ForgeRegistries.BLOCKS); + private static final AttachedRegistry, ContextProvidingBlockEntityRequirement> BLOCK_ENTITY_REQUIREMENTS = new AttachedRegistry<>(ForgeRegistries.BLOCK_ENTITY_TYPES); + private static final AttachedRegistry, ContextProvidingEntityRequirement> ENTITY_REQUIREMENTS = new AttachedRegistry<>(ForgeRegistries.ENTITY_TYPES); - public static void registerForBlock(Block block, SchematicRequirementsRegistry.BlockRequirement requirement) { + public static void registerForBlock(Block block, ContextProvidingBlockRequirement requirement) { BLOCK_REQUIREMENTS.register(block, requirement); } - public static void registerForBlock(ResourceLocation block, SchematicRequirementsRegistry.BlockRequirement requirement) { + public static void registerForBlock(ResourceLocation block, ContextProvidingBlockRequirement requirement) { BLOCK_REQUIREMENTS.register(block, requirement); } - public static void registerForBlockEntity(BlockEntityType blockEntityType, SchematicRequirementsRegistry.BlockEntityRequirement requirement) { + public static void registerForBlockEntity(BlockEntityType blockEntityType, ContextProvidingBlockEntityRequirement requirement) { BLOCK_ENTITY_REQUIREMENTS.register(blockEntityType, requirement); } - public static void registerForBlockEntity(ResourceLocation blockEntityType, SchematicRequirementsRegistry.BlockEntityRequirement requirement) { + public static void registerForBlockEntity(ResourceLocation blockEntityType, ContextProvidingBlockEntityRequirement requirement) { BLOCK_ENTITY_REQUIREMENTS.register(blockEntityType, requirement); } - public static void registerForEntity(EntityType entityType, SchematicRequirementsRegistry.EntityRequirement requirement) { + public static void registerForEntity(EntityType entityType, ContextProvidingEntityRequirement requirement) { ENTITY_REQUIREMENTS.register(entityType, requirement); } // --- - public static void registerForEntity(ResourceLocation entityType, SchematicRequirementsRegistry.EntityRequirement requirement) { + public static void registerForEntity(ResourceLocation entityType, ContextProvidingEntityRequirement requirement) { ENTITY_REQUIREMENTS.register(entityType, requirement); } - public static SchematicRequirementsRegistry.BlockRequirement getRequirementForBlock(Block block) { + public static ContextProvidingBlockRequirement getRequirementForBlock(Block block) { return BLOCK_REQUIREMENTS.get(block); } - public static SchematicRequirementsRegistry.BlockEntityRequirement getRequirementForBlockEntityType(BlockEntityType blockEntityType) { + public static ContextProvidingBlockEntityRequirement getRequirementForBlockEntityType(BlockEntityType blockEntityType) { return BLOCK_ENTITY_REQUIREMENTS.get(blockEntityType); } - public static SchematicRequirementsRegistry.EntityRequirement getRequirementForEntityType(EntityType entityType) { + public static ContextProvidingEntityRequirement getRequirementForEntityType(EntityType entityType) { return ENTITY_REQUIREMENTS.get(entityType); } }