From cb55dbccdf831bc4a3e3c0895f50e3c76d196626 Mon Sep 17 00:00:00 2001 From: IThundxr Date: Tue, 11 Feb 2025 11:48:45 -0500 Subject: [PATCH] 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); } }