What happened to that "I"

- Remove I prefix from interfaces
- Add some more context to handler methods and improve the api in some areas
This commit is contained in:
IThundxr 2025-02-11 11:48:45 -05:00
parent 4620d94f7d
commit cb55dbccdf
No known key found for this signature in database
54 changed files with 273 additions and 242 deletions

View file

@ -17,7 +17,6 @@ import static com.simibubi.create.foundation.data.TagGen.tagBlockAndItem;
import com.simibubi.create.AllTags.AllBlockTags; import com.simibubi.create.AllTags.AllBlockTags;
import com.simibubi.create.AllTags.AllItemTags; 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.ContraptionControlsBlock;
import com.simibubi.create.content.contraptions.actors.contraptionControls.ContraptionControlsMovement; import com.simibubi.create.content.contraptions.actors.contraptionControls.ContraptionControlsMovement;
import com.simibubi.create.content.contraptions.actors.contraptionControls.ContraptionControlsMovingInteraction; 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.item.UncontainableBlockItem;
import com.simibubi.create.foundation.utility.ColorHandlers; import com.simibubi.create.foundation.utility.ColorHandlers;
import com.simibubi.create.foundation.utility.DyeHelper; 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.RegistrateRecipeProvider;
import com.tterrag.registrate.providers.loot.RegistrateBlockLootTables; import com.tterrag.registrate.providers.loot.RegistrateBlockLootTables;
import com.tterrag.registrate.util.DataIngredient; import com.tterrag.registrate.util.DataIngredient;
@ -768,7 +768,7 @@ public class AllBlocks {
.loot((lt, block) -> lt.add(block, BlazeBurnerBlock.buildLootTable())) .loot((lt, block) -> lt.add(block, BlazeBurnerBlock.buildLootTable()))
.blockstate((c, p) -> p.simpleBlock(c.getEntry(), AssetLookup.partialBaseModel(c, p))) .blockstate((c, p) -> p.simpleBlock(c.getEntry(), AssetLookup.partialBaseModel(c, p)))
.onRegister(movementBehaviour(new BlazeBurnerMovementBehaviour())) .onRegister(movementBehaviour(new BlazeBurnerMovementBehaviour()))
.onRegister(block -> TrainConductorHandler.registerBlazeBurner()) .onRegister(block -> TrainConductorHandlerImpl.registerBlazeBurner())
.item(BlazeBurnerBlockItem::withBlaze) .item(BlazeBurnerBlockItem::withBlaze)
.model(AssetLookup.customBlockItemModel("blaze_burner", "block_with_blaze")) .model(AssetLookup.customBlockItemModel("blaze_burner", "block_with_blaze"))
.build() .build()

View file

@ -1,37 +1,24 @@
package com.simibubi.create.api.contraption.train; package com.simibubi.create.api.contraption.train;
import com.simibubi.create.AllBlocks; import java.util.function.Consumer;
import com.simibubi.create.AllInteractionBehaviours; import java.util.function.Predicate;
import com.simibubi.create.content.processing.burner.BlazeBurnerBlock;
import com.simibubi.create.AllInteractionBehaviours;
import com.simibubi.create.content.processing.burner.BlockBasedTrainConductorInteractionBehaviour; import com.simibubi.create.content.processing.burner.BlockBasedTrainConductorInteractionBehaviour;
import com.simibubi.create.impl.contraption.train.TrainConductorHandlerImpl;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.level.block.state.BlockState; 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 * All required methods to make your block a train conductor similar to the blaze burner
*/ */
public interface TrainConductorHandler { public interface TrainConductorHandler {
@ApiStatus.Internal
List<TrainConductorHandler> CONDUCTOR_HANDLERS = new ArrayList<>();
boolean isValidConductor(BlockState state); boolean isValidConductor(BlockState state);
private static void registerHandler(TrainConductorHandler handler) { private static void registerHandler(TrainConductorHandler handler) {
CONDUCTOR_HANDLERS.add(handler); TrainConductorHandlerImpl.CONDUCTOR_HANDLERS.add(handler);
} }
static void registerConductor(ResourceLocation blockRl, Predicate<BlockState> isValidConductor, UpdateScheduleCallback updateScheduleCallback) { static void registerConductor(ResourceLocation blockRl, Predicate<BlockState> isValidConductor, UpdateScheduleCallback updateScheduleCallback) {
@ -39,14 +26,7 @@ public interface TrainConductorHandler {
registerHandler(isValidConductor::test); 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 { interface UpdateScheduleCallback {
UpdateScheduleCallback EMPTY = (hasSchedule, blockState, blockStateSetter) -> {}; UpdateScheduleCallback EMPTY = (hasSchedule, blockState, blockStateSetter) -> {};
void update(boolean hasSchedule, BlockState currentBlockState, Consumer<BlockState> blockStateSetter); void update(boolean hasSchedule, BlockState currentBlockState, Consumer<BlockState> blockStateSetter);

View file

@ -1,12 +1,9 @@
package com.simibubi.create.api.contraption.transformable; package com.simibubi.create.api.contraption.transformable;
import com.simibubi.create.content.contraptions.StructureTransform;
import com.simibubi.create.impl.contraption.transformable.ContraptionTransformableRegistryImpl; import com.simibubi.create.impl.contraption.transformable.ContraptionTransformableRegistryImpl;
import net.minecraft.world.level.block.Block; 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.entity.BlockEntityType;
import net.minecraft.world.level.block.state.BlockState;
/** /**
* Registry for registering new contraption transformations * Registry for registering new contraption transformations
@ -34,16 +31,4 @@ public class ContraptionTransformableRegistry {
public static void registerForBlockEntity(BlockEntityType<?> blockEntityType, TransformableBlockEntity transformableBlockEntity) { public static void registerForBlockEntity(BlockEntityType<?> blockEntityType, TransformableBlockEntity transformableBlockEntity) {
ContraptionTransformableRegistryImpl.registerForBlockEntity(blockEntityType, 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);
}
} }

View file

@ -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);
}

View file

@ -4,6 +4,7 @@ import com.simibubi.create.content.contraptions.StructureTransform;
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.BlockState;
public interface ITransformableBlock { @FunctionalInterface
public interface TransformableBlock {
BlockState transform(BlockState state, StructureTransform transform); BlockState transform(BlockState state, StructureTransform transform);
} }

View file

@ -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);
}

View file

@ -2,7 +2,7 @@ package com.simibubi.create.api.schematic.nbt;
import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.CompoundTag;
public interface IPartialSafeNBT { public interface PartialSafeNBT {
/** /**
* This will always be called from the logical server * This will always be called from the logical server
*/ */

View file

@ -20,95 +20,97 @@ public class SchematicRequirementsRegistry {
/** /**
* Register a new special requirement for a specified block * 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, * @param requirement The requirement you would like to add to this block,
* the {@link BlockRequirement#getRequiredItems(Block, BlockState, BlockEntity)} * the {@link ContextProvidingBlockRequirement#getRequiredItems(BlockState, BlockEntity)}
* method will be called on the {@link BlockRequirement} you have provided, * 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 * 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); SchematicRequirementsRegistryImpl.registerForBlock(block, requirement);
} }
/** /**
* Register a new special requirement for a specified block * 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, * @param requirement The requirement you would like to add to this block,
* the {@link BlockRequirement#getRequiredItems(Block, BlockState, BlockEntity)} * the {@link ContextProvidingBlockRequirement#getRequiredItems(BlockState, BlockEntity)}
* method will be called on the {@link BlockRequirement} you have provided, * 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 * 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); SchematicRequirementsRegistryImpl.registerForBlock(block, requirement);
} }
/** /**
* Register a new special requirement for a specified block entity type * 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, * @param requirement The requirement you would like to add to this block entity type,
* the {@link BlockEntityRequirement#getRequiredItems(BlockEntity, BlockState)} * the {@link ContextProvidingBlockEntityRequirement#getRequiredItems(BlockEntity)}
* method will be called on the {@link BlockEntityRequirement} you have provided, * 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 * and you will be able to insert requirements based off the context that is given
*/ */
public static void registerForBlockEntity(BlockEntityType<BlockEntity> blockEntityType, BlockEntityRequirement requirement) { public static void registerForBlockEntity(BlockEntityType<BlockEntity> blockEntityType, ContextProvidingBlockEntityRequirement requirement) {
SchematicRequirementsRegistryImpl.registerForBlockEntity(blockEntityType, requirement); SchematicRequirementsRegistryImpl.registerForBlockEntity(blockEntityType, requirement);
} }
/** /**
* Register a new special requirement for a specified block entity type * 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, * @param requirement The requirement you would like to add to this block entity type,
* the {@link BlockEntityRequirement#getRequiredItems(BlockEntity, BlockState)} * the {@link ContextProvidingBlockEntityRequirement#getRequiredItems(BlockEntity)}
* method will be called on the {@link BlockEntityRequirement} you have provided, * 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 * 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); SchematicRequirementsRegistryImpl.registerForBlockEntity(blockEntityType, requirement);
} }
/** /**
* Register a new special requirement for a specified entity type * 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, * @param requirement The requirement you would like to add to this entity type,
* the {@link EntityRequirement#getRequiredItems(Entity)} * the {@link ContextProvidingEntityRequirement#getRequiredItems(Entity)}
* method will be called on the {@link EntityRequirement} you have provided, * 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 * and you will be able to insert requirements based off the context that is given
*/ */
public static void registerForEntity(EntityType<Entity> entityType, EntityRequirement requirement) { public static void registerForEntity(EntityType<Entity> entityType, ContextProvidingEntityRequirement requirement) {
SchematicRequirementsRegistryImpl.registerForEntity(entityType, requirement); SchematicRequirementsRegistryImpl.registerForEntity(entityType, requirement);
} }
/** /**
* Register a new special requirement for a specified entity type * 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, * @param requirement The requirement you would like to add to this entity type,
* the {@link EntityRequirement#getRequiredItems(Entity)} * the {@link ContextProvidingEntityRequirement#getRequiredItems(Entity)}
* method will be called on the {@link EntityRequirement} you have provided, * 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 * 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); SchematicRequirementsRegistryImpl.registerForEntity(entityType, requirement);
} }
// --- Interfaces that provide the context that would be accessible if you implemented the ISpecial* interfaces --- // --- Interfaces that provide the context that would be accessible if you implemented the ISpecial* interfaces ---
@FunctionalInterface @FunctionalInterface
public interface BlockRequirement { public interface ContextProvidingBlockRequirement {
ItemRequirement getRequiredItems(Block block, BlockState state, @Nullable BlockEntity blockEntity); ItemRequirement getRequiredItems(BlockState state, @Nullable BlockEntity blockEntity);
} }
@FunctionalInterface @FunctionalInterface
public interface BlockEntityRequirement { public interface ContextProvidingBlockEntityRequirement {
ItemRequirement getRequiredItems(BlockEntity blockEntity, BlockState state); ItemRequirement getRequiredItems(BlockEntity blockEntity);
} }
@FunctionalInterface @FunctionalInterface
public interface EntityRequirement { public interface ContextProvidingEntityRequirement {
ItemRequirement getRequiredItems(Entity entity); ItemRequirement getRequiredItems(Entity entity);
} }
} }

View file

@ -4,6 +4,6 @@ import com.simibubi.create.content.schematics.requirement.ItemRequirement;
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.BlockState;
public interface ISpecialBlockEntityItemRequirement { public interface SpecialBlockEntityItemRequirement {
ItemRequirement getRequiredItems(BlockState state); ItemRequirement getRequiredItems(BlockState state);
} }

View file

@ -1,10 +1,12 @@
package com.simibubi.create.api.schematic.requirement; package com.simibubi.create.api.schematic.requirement;
import org.jetbrains.annotations.Nullable;
import com.simibubi.create.content.schematics.requirement.ItemRequirement; import com.simibubi.create.content.schematics.requirement.ItemRequirement;
import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.BlockState;
public interface ISpecialBlockItemRequirement { public interface SpecialBlockItemRequirement {
ItemRequirement getRequiredItems(BlockState state, BlockEntity blockEntity); ItemRequirement getRequiredItems(BlockState state, @Nullable BlockEntity blockEntity);
} }

View file

@ -2,6 +2,6 @@ package com.simibubi.create.api.schematic.requirement;
import com.simibubi.create.content.schematics.requirement.ItemRequirement; import com.simibubi.create.content.schematics.requirement.ItemRequirement;
public interface ISpecialEntityItemRequirement { public interface SpecialEntityItemRequirement {
ItemRequirement getRequiredItems(); ItemRequirement getRequiredItems();
} }

View file

@ -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.FACING;
import static net.minecraft.world.level.block.state.properties.BlockStateProperties.HORIZONTAL_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.TransformableBlock;
import com.simibubi.create.api.contraption.transformable.ITransformableBlock; import com.simibubi.create.api.contraption.transformable.TransformableBlockEntity;
import com.simibubi.create.api.contraption.transformable.ITransformableBlockEntity;
import com.simibubi.create.impl.contraption.transformable.ContraptionTransformableRegistryImpl; import com.simibubi.create.impl.contraption.transformable.ContraptionTransformableRegistryImpl;
import net.createmod.catnip.math.VecHelper; import net.createmod.catnip.math.VecHelper;
@ -133,11 +132,11 @@ public class StructureTransform {
} }
public void apply(BlockEntity be) { public void apply(BlockEntity be) {
ContraptionTransformableRegistry.TransformableBlockEntity transformableBlockEntity = ContraptionTransformableRegistryImpl.get(be.getType()); TransformableBlockEntity transformableBlockEntity = ContraptionTransformableRegistryImpl.get(be.getType());
if (transformableBlockEntity != null) { if (transformableBlockEntity != null) {
transformableBlockEntity.transform(be, this); transformableBlockEntity.transform(be, this);
} else if (be instanceof ITransformableBlockEntity itbe) { } else if (be instanceof TransformableBlockEntity itbe) {
itbe.transform(this); itbe.transform(be, this);
} }
} }
@ -148,10 +147,10 @@ public class StructureTransform {
*/ */
public BlockState apply(BlockState state) { public BlockState apply(BlockState state) {
Block block = state.getBlock(); Block block = state.getBlock();
ContraptionTransformableRegistry.TransformableBlock transformableBlock = ContraptionTransformableRegistryImpl.get(block); TransformableBlock transformableBlock = ContraptionTransformableRegistryImpl.get(block);
if (transformableBlock != null) { if (transformableBlock != null) {
return transformableBlock.transform(block, state, this); return transformableBlock.transform(state, this);
} else if (block instanceof ITransformableBlock transformable) { } else if (block instanceof TransformableBlock transformable) {
return transformable.transform(state, this); return transformable.transform(state, this);
} }

View file

@ -3,7 +3,7 @@ package com.simibubi.create.content.contraptions.chassis;
import com.simibubi.create.AllBlockEntityTypes; import com.simibubi.create.AllBlockEntityTypes;
import com.simibubi.create.AllItems; import com.simibubi.create.AllItems;
import com.simibubi.create.AllSoundEvents; 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.contraptions.StructureTransform;
import com.simibubi.create.content.equipment.wrench.IWrenchable; import com.simibubi.create.content.equipment.wrench.IWrenchable;
import com.simibubi.create.foundation.block.IBE; import com.simibubi.create.foundation.block.IBE;
@ -29,7 +29,7 @@ import net.minecraft.world.phys.Vec3;
import net.minecraftforge.common.Tags; import net.minecraftforge.common.Tags;
public abstract class AbstractChassisBlock extends RotatedPillarBlock implements IWrenchable, IBE<ChassisBlockEntity>, ITransformableBlock { public abstract class AbstractChassisBlock extends RotatedPillarBlock implements IWrenchable, IBE<ChassisBlockEntity>, TransformableBlock {
public AbstractChassisBlock(Properties properties) { public AbstractChassisBlock(Properties properties) {
super(properties); super(properties);

View file

@ -1,16 +1,21 @@
package com.simibubi.create.content.contraptions.elevator; package com.simibubi.create.content.contraptions.elevator;
import java.util.Optional;
import javax.annotation.Nullable;
import com.simibubi.create.AllBlockEntityTypes; import com.simibubi.create.AllBlockEntityTypes;
import com.simibubi.create.AllBlocks; import com.simibubi.create.AllBlocks;
import com.simibubi.create.AllItems; 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.contraptions.elevator.ElevatorColumn.ColumnCoords;
import com.simibubi.create.content.redstone.contact.RedstoneContactBlock; import com.simibubi.create.content.redstone.contact.RedstoneContactBlock;
import com.simibubi.create.content.redstone.diodes.BrassDiodeBlock; 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.content.schematics.requirement.ItemRequirement;
import com.simibubi.create.foundation.block.IBE; import com.simibubi.create.foundation.block.IBE;
import com.simibubi.create.foundation.block.WrenchableDirectionalBlock; import com.simibubi.create.foundation.block.WrenchableDirectionalBlock;
import com.simibubi.create.foundation.utility.BlockHelper; import com.simibubi.create.foundation.utility.BlockHelper;
import net.createmod.catnip.gui.ScreenOpener; import net.createmod.catnip.gui.ScreenOpener;
import net.minecraft.client.player.LocalPlayer; import net.minecraft.client.player.LocalPlayer;
import net.minecraft.core.BlockPos; 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.BlockStateProperties;
import net.minecraft.world.level.block.state.properties.BooleanProperty; import net.minecraft.world.level.block.state.properties.BooleanProperty;
import net.minecraft.world.phys.BlockHitResult; import net.minecraft.world.phys.BlockHitResult;
import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.api.distmarker.OnlyIn;
import net.minecraftforge.fml.DistExecutor; import net.minecraftforge.fml.DistExecutor;
import javax.annotation.Nullable;
import java.util.Optional;
public class ElevatorContactBlock extends WrenchableDirectionalBlock public class ElevatorContactBlock extends WrenchableDirectionalBlock
implements IBE<ElevatorContactBlockEntity>, ISpecialBlockItemRequirement { implements IBE<ElevatorContactBlockEntity>, SpecialBlockItemRequirement {
public static final BooleanProperty POWERED = BlockStateProperties.POWERED; public static final BooleanProperty POWERED = BlockStateProperties.POWERED;
public static final BooleanProperty CALLING = BooleanProperty.create("calling"); public static final BooleanProperty CALLING = BooleanProperty.create("calling");

View file

@ -8,7 +8,7 @@ import com.simibubi.create.AllBlocks;
import com.simibubi.create.AllEntityTypes; import com.simibubi.create.AllEntityTypes;
import com.simibubi.create.AllItems; import com.simibubi.create.AllItems;
import com.simibubi.create.AllSoundEvents; 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.BlockMovementChecks;
import com.simibubi.create.content.contraptions.bearing.BearingBlock; import com.simibubi.create.content.contraptions.bearing.BearingBlock;
import com.simibubi.create.content.contraptions.chassis.AbstractChassisBlock; 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.entity.IEntityAdditionalSpawnData;
import net.minecraftforge.network.NetworkHooks; 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) { public static AABB span(BlockPos startPos, BlockPos endPos) {
return new AABB(startPos, endPos).expandTowards(1, 1, 1); return new AABB(startPos, endPos).expandTowards(1, 1, 1);

View file

@ -1,14 +1,21 @@
package com.simibubi.create.content.contraptions.mounted; 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.AllBlockEntityTypes;
import com.simibubi.create.AllBlocks; import com.simibubi.create.AllBlocks;
import com.simibubi.create.AllShapes; 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.equipment.wrench.IWrenchable;
import com.simibubi.create.content.redstone.rail.ControllerRailBlock; 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;
import com.simibubi.create.content.schematics.requirement.ItemRequirement.ItemUseType; import com.simibubi.create.content.schematics.requirement.ItemRequirement.ItemUseType;
import com.simibubi.create.foundation.block.IBE; import com.simibubi.create.foundation.block.IBE;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction; import net.minecraft.core.Direction;
import net.minecraft.core.Direction.Axis; 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.Shapes;
import net.minecraft.world.phys.shapes.VoxelShape; 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 public class CartAssemblerBlock extends BaseRailBlock
implements IBE<CartAssemblerBlockEntity>, IWrenchable, ISpecialBlockItemRequirement { implements IBE<CartAssemblerBlockEntity>, IWrenchable, SpecialBlockItemRequirement {
public static final BooleanProperty POWERED = BlockStateProperties.POWERED; public static final BooleanProperty POWERED = BlockStateProperties.POWERED;
public static final BooleanProperty BACKWARDS = BooleanProperty.create("backwards"); public static final BooleanProperty BACKWARDS = BooleanProperty.create("backwards");

View file

@ -3,9 +3,9 @@ package com.simibubi.create.content.decoration.copycat;
import java.util.List; import java.util.List;
import com.simibubi.create.AllBlocks; import com.simibubi.create.AllBlocks;
import com.simibubi.create.api.contraption.transformable.ITransformableBlockEntity; import com.simibubi.create.api.contraption.transformable.TransformableBlockEntity;
import com.simibubi.create.api.schematic.nbt.IPartialSafeNBT; import com.simibubi.create.api.schematic.nbt.PartialSafeNBT;
import com.simibubi.create.api.schematic.requirement.ISpecialBlockEntityItemRequirement; import com.simibubi.create.api.schematic.requirement.SpecialBlockEntityItemRequirement;
import com.simibubi.create.content.contraptions.StructureTransform; import com.simibubi.create.content.contraptions.StructureTransform;
import com.simibubi.create.content.redstone.RoseQuartzLampBlock; import com.simibubi.create.content.redstone.RoseQuartzLampBlock;
import com.simibubi.create.content.schematics.requirement.ItemRequirement; 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.nbt.NbtUtils;
import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.block.TrapDoorBlock; 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.entity.BlockEntityType;
import net.minecraft.world.level.block.state.BlockState; 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.BlockStateProperties;
@ -28,7 +29,7 @@ import net.minecraftforge.client.model.data.ModelData;
import net.minecraftforge.items.ItemHandlerHelper; import net.minecraftforge.items.ItemHandlerHelper;
public class CopycatBlockEntity extends SmartBlockEntity public class CopycatBlockEntity extends SmartBlockEntity
implements ISpecialBlockEntityItemRequirement, ITransformableBlockEntity, IPartialSafeNBT { implements SpecialBlockEntityItemRequirement, TransformableBlockEntity, PartialSafeNBT {
private BlockState material; private BlockState material;
private ItemStack consumedItem; private ItemStack consumedItem;
@ -128,7 +129,7 @@ public class CopycatBlockEntity extends SmartBlockEntity
} }
@Override @Override
public void transform(StructureTransform transform) { public void transform(BlockEntity be, StructureTransform transform) {
material = transform.apply(material); material = transform.apply(material);
notifyUpdate(); notifyUpdate();
} }

View file

@ -5,10 +5,10 @@ import static net.minecraft.world.level.block.state.properties.BlockStatePropert
import com.simibubi.create.AllBlockEntityTypes; import com.simibubi.create.AllBlockEntityTypes;
import com.simibubi.create.AllBlocks; import com.simibubi.create.AllBlocks;
import com.simibubi.create.AllShapes; 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.equipment.wrench.IWrenchable;
import com.simibubi.create.content.kinetics.base.HorizontalAxisKineticBlock; import com.simibubi.create.content.kinetics.base.HorizontalAxisKineticBlock;
import com.simibubi.create.content.kinetics.base.KineticBlockEntity; 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.content.schematics.requirement.ItemRequirement;
import com.simibubi.create.foundation.block.IBE; 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; import net.minecraft.world.phys.shapes.VoxelShape;
public class GirderEncasedShaftBlock extends HorizontalAxisKineticBlock public class GirderEncasedShaftBlock extends HorizontalAxisKineticBlock
implements IBE<KineticBlockEntity>, SimpleWaterloggedBlock, IWrenchable, ISpecialBlockItemRequirement { implements IBE<KineticBlockEntity>, SimpleWaterloggedBlock, IWrenchable, SpecialBlockItemRequirement {
public static final BooleanProperty TOP = GirderBlock.TOP; public static final BooleanProperty TOP = GirderBlock.TOP;
public static final BooleanProperty BOTTOM = GirderBlock.BOTTOM; public static final BooleanProperty BOTTOM = GirderBlock.BOTTOM;

View file

@ -6,10 +6,10 @@ import com.simibubi.create.AllBlockEntityTypes;
import com.simibubi.create.AllBlocks; import com.simibubi.create.AllBlocks;
import com.simibubi.create.AllShapes; import com.simibubi.create.AllShapes;
import com.simibubi.create.AllSoundEvents; 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.equipment.wrench.IWrenchable;
import com.simibubi.create.content.logistics.filter.FilterItem; import com.simibubi.create.content.logistics.filter.FilterItem;
import com.simibubi.create.content.logistics.filter.FilterItemStack; 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;
import com.simibubi.create.content.schematics.requirement.ItemRequirement.ItemUseType; import com.simibubi.create.content.schematics.requirement.ItemRequirement.ItemUseType;
import com.simibubi.create.foundation.block.IBE; 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.BlockHitResult;
import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.CollisionContext;
import net.minecraft.world.phys.shapes.VoxelShape; import net.minecraft.world.phys.shapes.VoxelShape;
import net.minecraftforge.items.ItemHandlerHelper; import net.minecraftforge.items.ItemHandlerHelper;
public class PlacardBlock extends FaceAttachedHorizontalDirectionalBlock public class PlacardBlock extends FaceAttachedHorizontalDirectionalBlock
implements ProperWaterloggedBlock, IBE<PlacardBlockEntity>, ISpecialBlockItemRequirement, IWrenchable { implements ProperWaterloggedBlock, IBE<PlacardBlockEntity>, SpecialBlockItemRequirement, IWrenchable {
public static final BooleanProperty POWERED = BlockStateProperties.POWERED; public static final BooleanProperty POWERED = BlockStateProperties.POWERED;

View file

@ -6,8 +6,8 @@ import java.util.Optional;
import com.simibubi.create.AllBlockEntityTypes; import com.simibubi.create.AllBlockEntityTypes;
import com.simibubi.create.AllEnchantments; import com.simibubi.create.AllEnchantments;
import com.simibubi.create.AllShapes; 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.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;
import com.simibubi.create.content.schematics.requirement.ItemRequirement.ItemUseType; import com.simibubi.create.content.schematics.requirement.ItemRequirement.ItemUseType;
import com.simibubi.create.foundation.block.IBE; 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.BlockHitResult;
import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.CollisionContext;
import net.minecraft.world.phys.shapes.VoxelShape; import net.minecraft.world.phys.shapes.VoxelShape;
import net.minecraftforge.common.util.FakePlayer; import net.minecraftforge.common.util.FakePlayer;
public class BacktankBlock extends HorizontalKineticBlock implements IBE<BacktankBlockEntity>, SimpleWaterloggedBlock, ISpecialBlockItemRequirement { public class BacktankBlock extends HorizontalKineticBlock implements IBE<BacktankBlockEntity>, SimpleWaterloggedBlock, SpecialBlockItemRequirement {
public BacktankBlock(Properties properties) { public BacktankBlock(Properties properties) {
super(properties); super(properties);

View file

@ -12,8 +12,8 @@ import org.apache.commons.lang3.Validate;
import com.simibubi.create.AllEntityTypes; import com.simibubi.create.AllEntityTypes;
import com.simibubi.create.AllItems; import com.simibubi.create.AllItems;
import com.simibubi.create.Create; 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.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;
import com.simibubi.create.content.schematics.requirement.ItemRequirement.ItemUseType; import com.simibubi.create.content.schematics.requirement.ItemRequirement.ItemUseType;
import com.simibubi.create.foundation.networking.ISyncPersistentData; 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.AABB;
import net.minecraft.world.phys.HitResult; import net.minecraft.world.phys.HitResult;
import net.minecraft.world.phys.Vec3; import net.minecraft.world.phys.Vec3;
import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.api.distmarker.OnlyIn;
import net.minecraftforge.common.ForgeHooks; import net.minecraftforge.common.ForgeHooks;
@ -72,7 +73,7 @@ import net.minecraftforge.items.wrapper.InvWrapper;
import net.minecraftforge.network.NetworkHooks; import net.minecraftforge.network.NetworkHooks;
public class BlueprintEntity extends HangingEntity public class BlueprintEntity extends HangingEntity
implements IEntityAdditionalSpawnData, ISpecialEntityItemRequirement, ISyncPersistentData, IInteractionChecker { implements IEntityAdditionalSpawnData, SpecialEntityItemRequirement, ISyncPersistentData, IInteractionChecker {
protected int size; protected int size;
protected Direction verticalOrientation; protected Direction verticalOrientation;

View file

@ -12,13 +12,13 @@ import java.util.function.Supplier;
import com.simibubi.create.AllBlockEntityTypes; import com.simibubi.create.AllBlockEntityTypes;
import com.simibubi.create.AllBlocks; 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.contraptions.StructureTransform;
import com.simibubi.create.content.decoration.encasing.EncasedBlock; import com.simibubi.create.content.decoration.encasing.EncasedBlock;
import com.simibubi.create.content.equipment.wrench.IWrenchable; import com.simibubi.create.content.equipment.wrench.IWrenchable;
import com.simibubi.create.content.fluids.FluidPropagator; import com.simibubi.create.content.fluids.FluidPropagator;
import com.simibubi.create.content.fluids.FluidTransportBehaviour; 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.content.schematics.requirement.ItemRequirement;
import com.simibubi.create.foundation.advancement.AdvancementBehaviour; import com.simibubi.create.foundation.advancement.AdvancementBehaviour;
import com.simibubi.create.foundation.block.IBE; import com.simibubi.create.foundation.block.IBE;
@ -51,7 +51,7 @@ import net.minecraft.world.phys.HitResult;
import net.minecraft.world.ticks.TickPriority; import net.minecraft.world.ticks.TickPriority;
public class EncasedPipeBlock extends Block public class EncasedPipeBlock extends Block
implements IWrenchable, ISpecialBlockItemRequirement, IBE<FluidPipeBlockEntity>, EncasedBlock, ITransformableBlock { implements IWrenchable, SpecialBlockItemRequirement, IBE<FluidPipeBlockEntity>, EncasedBlock, TransformableBlock {
public static final Map<Direction, BooleanProperty> FACING_TO_PROPERTY_MAP = PipeBlock.PROPERTY_BY_DIRECTION; public static final Map<Direction, BooleanProperty> FACING_TO_PROPERTY_MAP = PipeBlock.PROPERTY_BY_DIRECTION;
private final Supplier<Block> casing; private final Supplier<Block> casing;

View file

@ -7,7 +7,7 @@ import javax.annotation.Nullable;
import com.simibubi.create.AllBlockEntityTypes; import com.simibubi.create.AllBlockEntityTypes;
import com.simibubi.create.AllBlocks; 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.contraptions.StructureTransform;
import com.simibubi.create.content.decoration.bracket.BracketedBlockEntityBehaviour; import com.simibubi.create.content.decoration.bracket.BracketedBlockEntityBehaviour;
import com.simibubi.create.content.decoration.encasing.EncasableBlock; 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; import net.minecraft.world.ticks.TickPriority;
public class FluidPipeBlock extends PipeBlock implements SimpleWaterloggedBlock, IWrenchableWithBracket, public class FluidPipeBlock extends PipeBlock implements SimpleWaterloggedBlock, IWrenchableWithBracket,
IBE<FluidPipeBlockEntity>, EncasableBlock, ITransformableBlock { IBE<FluidPipeBlockEntity>, EncasableBlock, TransformableBlock {
private static final VoxelShape OCCLUSION_BOX = Block.box(4, 4, 4, 12, 12, 12); private static final VoxelShape OCCLUSION_BOX = Block.box(4, 4, 4, 12, 12, 12);

View file

@ -2,7 +2,7 @@ package com.simibubi.create.content.fluids.pipes;
import java.util.List; 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.contraptions.StructureTransform;
import com.simibubi.create.content.decoration.bracket.BracketedBlockEntityBehaviour; import com.simibubi.create.content.decoration.bracket.BracketedBlockEntityBehaviour;
import com.simibubi.create.content.fluids.FluidPropagator; 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.BlockPos;
import net.minecraft.core.Direction; import net.minecraft.core.Direction;
import net.minecraft.world.level.BlockAndTintGetter; 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.entity.BlockEntityType;
import net.minecraft.world.level.block.state.BlockState; 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) { public FluidPipeBlockEntity(BlockEntityType<?> type, BlockPos pos, BlockState state) {
super(type, pos, state); super(type, pos, state);
@ -30,7 +31,7 @@ public class FluidPipeBlockEntity extends SmartBlockEntity implements ITransform
} }
@Override @Override
public void transform(StructureTransform transform) { public void transform(BlockEntity be, StructureTransform transform) {
BracketedBlockEntityBehaviour bracketBehaviour = getBehaviour(BracketedBlockEntityBehaviour.TYPE); BracketedBlockEntityBehaviour bracketBehaviour = getBehaviour(BracketedBlockEntityBehaviour.TYPE);
if (bracketBehaviour != null) { if (bracketBehaviour != null) {
bracketBehaviour.transformBracket(transform); bracketBehaviour.transformBracket(transform);

View file

@ -4,8 +4,8 @@ import javax.annotation.ParametersAreNonnullByDefault;
import com.simibubi.create.AllBlockEntityTypes; import com.simibubi.create.AllBlockEntityTypes;
import com.simibubi.create.AllBlocks; import com.simibubi.create.AllBlocks;
import com.simibubi.create.api.schematic.requirement.SpecialBlockItemRequirement;
import com.simibubi.create.content.fluids.FluidTransportBehaviour; 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.content.schematics.requirement.ItemRequirement;
import com.simibubi.create.foundation.block.IBE; import com.simibubi.create.foundation.block.IBE;
@ -30,7 +30,7 @@ import net.minecraft.world.level.pathfinder.PathComputationType;
@MethodsReturnNonnullByDefault @MethodsReturnNonnullByDefault
@ParametersAreNonnullByDefault @ParametersAreNonnullByDefault
public class GlassFluidPipeBlock extends AxisPipeBlock implements IBE<StraightPipeBlockEntity>, SimpleWaterloggedBlock, ISpecialBlockItemRequirement { public class GlassFluidPipeBlock extends AxisPipeBlock implements IBE<StraightPipeBlockEntity>, SimpleWaterloggedBlock, SpecialBlockItemRequirement {
public static final BooleanProperty ALT = BooleanProperty.create("alt"); public static final BooleanProperty ALT = BooleanProperty.create("alt");

View file

@ -1,6 +1,6 @@
package com.simibubi.create.content.kinetics.base; 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 com.simibubi.create.content.contraptions.StructureTransform;
import net.createmod.catnip.data.Iterate; 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.StateDefinition.Builder;
import net.minecraft.world.level.block.state.properties.BooleanProperty; 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"); public static final BooleanProperty AXIS_ALONG_FIRST_COORDINATE = BooleanProperty.create("axis_along_first");

View file

@ -12,8 +12,8 @@ import org.apache.commons.lang3.mutable.MutableBoolean;
import com.simibubi.create.AllBlockEntityTypes; import com.simibubi.create.AllBlockEntityTypes;
import com.simibubi.create.AllBlocks; import com.simibubi.create.AllBlocks;
import com.simibubi.create.AllItems; 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.api.schematic.requirement.ISpecialBlockItemRequirement; import com.simibubi.create.api.schematic.requirement.SpecialBlockItemRequirement;
import com.simibubi.create.content.contraptions.StructureTransform; import com.simibubi.create.content.contraptions.StructureTransform;
import com.simibubi.create.content.equipment.armor.DivingBootsItem; import com.simibubi.create.content.equipment.armor.DivingBootsItem;
import com.simibubi.create.content.fluids.transfer.GenericItemEmptying; 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.EntityCollisionContext;
import net.minecraft.world.phys.shapes.Shapes; import net.minecraft.world.phys.shapes.Shapes;
import net.minecraft.world.phys.shapes.VoxelShape; import net.minecraft.world.phys.shapes.VoxelShape;
import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.api.distmarker.OnlyIn;
import net.minecraftforge.client.extensions.common.IClientBlockExtensions; import net.minecraftforge.client.extensions.common.IClientBlockExtensions;
@ -96,7 +97,7 @@ import net.minecraftforge.common.capabilities.ForgeCapabilities;
import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.IItemHandler;
public class BeltBlock extends HorizontalKineticBlock public class BeltBlock extends HorizontalKineticBlock
implements IBE<BeltBlockEntity>, ISpecialBlockItemRequirement, ITransformableBlock, ProperWaterloggedBlock { implements IBE<BeltBlockEntity>, SpecialBlockItemRequirement, TransformableBlock, ProperWaterloggedBlock {
public static final Property<BeltSlope> SLOPE = EnumProperty.create("slope", BeltSlope.class); public static final Property<BeltSlope> SLOPE = EnumProperty.create("slope", BeltSlope.class);
public static final Property<BeltPart> PART = EnumProperty.create("part", BeltPart.class); public static final Property<BeltPart> PART = EnumProperty.create("part", BeltPart.class);

View file

@ -12,7 +12,7 @@ import java.util.function.Consumer;
import javax.annotation.Nullable; 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.contraptions.StructureTransform;
import com.simibubi.create.content.kinetics.base.IRotate; import com.simibubi.create.content.kinetics.base.IRotate;
import com.simibubi.create.content.kinetics.base.KineticBlockEntity; 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 dev.engine_room.flywheel.api.visualization.VisualizationManager;
import net.createmod.catnip.data.Iterate; 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.AngleHelper;
import net.createmod.catnip.math.VecHelper;
import net.createmod.catnip.nbt.NBTHelper;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction.Axis; import net.minecraft.core.Direction.Axis;
import net.minecraft.core.particles.BlockParticleOption; 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.item.Items;
import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.Blocks; 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.entity.BlockEntityType;
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.AABB;
import net.minecraft.world.phys.Vec3; import net.minecraft.world.phys.Vec3;
import net.minecraftforge.items.ItemHandlerHelper; 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) { public record ConnectionStats(float tangentAngle, float chainLength, Vec3 start, Vec3 end) {
} }
@ -782,7 +784,7 @@ public class ChainConveyorBlockEntity extends KineticBlockEntity implements ITra
} }
@Override @Override
public void transform(StructureTransform transform) { public void transform(BlockEntity be, StructureTransform transform) {
if (connections == null || connections.isEmpty()) if (connections == null || connections.isEmpty())
return; return;

View file

@ -1,7 +1,7 @@
package com.simibubi.create.content.kinetics.chainDrive; package com.simibubi.create.content.kinetics.chainDrive;
import com.simibubi.create.AllBlockEntityTypes; 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.contraptions.StructureTransform;
import com.simibubi.create.content.kinetics.base.DirectionalAxisKineticBlock; import com.simibubi.create.content.kinetics.base.DirectionalAxisKineticBlock;
import com.simibubi.create.content.kinetics.base.KineticBlockEntity; 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; import net.minecraft.world.level.material.PushReaction;
public class ChainDriveBlock extends RotatedPillarKineticBlock public class ChainDriveBlock extends RotatedPillarKineticBlock
implements IBE<KineticBlockEntity>, ITransformableBlock { implements IBE<KineticBlockEntity>, TransformableBlock {
public static final Property<Part> PART = EnumProperty.create("part", Part.class); public static final Property<Part> PART = EnumProperty.create("part", Part.class);
public static final BooleanProperty CONNECTED_ALONG_FIRST_COORDINATE = public static final BooleanProperty CONNECTED_ALONG_FIRST_COORDINATE =

View file

@ -6,7 +6,7 @@ import java.util.List;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import com.simibubi.create.Create; 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.contraptions.StructureTransform;
import com.simibubi.create.content.kinetics.base.KineticBlockEntity; import com.simibubi.create.content.kinetics.base.KineticBlockEntity;
import com.simibubi.create.content.kinetics.mechanicalArm.AllArmInteractionPointTypes.JukeboxPoint; 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 com.simibubi.create.infrastructure.config.AllConfigs;
import dev.engine_room.flywheel.lib.visualization.VisualizationHelper; 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.animation.LerpedFloat;
import net.createmod.catnip.lang.Lang; import net.createmod.catnip.lang.Lang;
import net.createmod.catnip.math.AngleHelper; 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.BlockPos;
import net.minecraft.core.Direction; import net.minecraft.core.Direction;
import net.minecraft.core.SectionPos; 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.LevelAccessor;
import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.JukeboxBlock; 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.entity.BlockEntityType;
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.chunk.ChunkSource; import net.minecraft.world.level.chunk.ChunkSource;
import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.AABB;
import net.minecraft.world.phys.Vec3; import net.minecraft.world.phys.Vec3;
import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.fml.DistExecutor; import net.minecraftforge.fml.DistExecutor;
public class ArmBlockEntity extends KineticBlockEntity implements ITransformableBlockEntity { public class ArmBlockEntity extends KineticBlockEntity implements TransformableBlockEntity {
// Server // Server
List<ArmInteractionPoint> inputs; List<ArmInteractionPoint> inputs;
@ -419,7 +421,7 @@ public class ArmBlockEntity extends KineticBlockEntity implements ITransformable
} }
@Override @Override
public void transform(StructureTransform transform) { public void transform(BlockEntity be, StructureTransform transform) {
if (interactionPointTag == null) if (interactionPointTag == null)
return; return;

View file

@ -2,16 +2,17 @@ package com.simibubi.create.content.kinetics.simpleRelays;
import java.util.List; 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.contraptions.StructureTransform;
import com.simibubi.create.content.decoration.bracket.BracketedBlockEntityBehaviour; import com.simibubi.create.content.decoration.bracket.BracketedBlockEntityBehaviour;
import com.simibubi.create.foundation.blockEntity.behaviour.BlockEntityBehaviour; import com.simibubi.create.foundation.blockEntity.behaviour.BlockEntityBehaviour;
import net.minecraft.core.BlockPos; 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.entity.BlockEntityType;
import net.minecraft.world.level.block.state.BlockState; 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) { public BracketedKineticBlockEntity(BlockEntityType<?> type, BlockPos pos, BlockState state) {
super(type, pos, state); super(type, pos, state);
@ -25,7 +26,7 @@ public class BracketedKineticBlockEntity extends SimpleKineticBlockEntity implem
} }
@Override @Override
public void transform(StructureTransform transform) { public void transform(BlockEntity be, StructureTransform transform) {
BracketedBlockEntityBehaviour bracketBehaviour = getBehaviour(BracketedBlockEntityBehaviour.TYPE); BracketedBlockEntityBehaviour bracketBehaviour = getBehaviour(BracketedBlockEntityBehaviour.TYPE);
if (bracketBehaviour != null) { if (bracketBehaviour != null) {
bracketBehaviour.transformBracket(transform); bracketBehaviour.transformBracket(transform);

View file

@ -4,7 +4,8 @@ import java.util.function.Supplier;
import com.simibubi.create.AllBlockEntityTypes; import com.simibubi.create.AllBlockEntityTypes;
import com.simibubi.create.AllBlocks; 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.contraptions.StructureTransform;
import com.simibubi.create.content.decoration.encasing.EncasedBlock; import com.simibubi.create.content.decoration.encasing.EncasedBlock;
import com.simibubi.create.content.equipment.wrench.IWrenchable; 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.CogWheelBlock;
import com.simibubi.create.content.kinetics.simpleRelays.ICogWheel; import com.simibubi.create.content.kinetics.simpleRelays.ICogWheel;
import com.simibubi.create.content.kinetics.simpleRelays.SimpleKineticBlockEntity; 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.content.schematics.requirement.ItemRequirement;
import com.simibubi.create.foundation.block.IBE; import com.simibubi.create.foundation.block.IBE;
@ -45,7 +45,7 @@ import net.minecraft.world.phys.BlockHitResult;
import net.minecraft.world.phys.HitResult; import net.minecraft.world.phys.HitResult;
public class EncasedCogwheelBlock extends RotatedPillarKineticBlock public class EncasedCogwheelBlock extends RotatedPillarKineticBlock
implements ICogWheel, IBE<SimpleKineticBlockEntity>, ISpecialBlockItemRequirement, ITransformableBlock, EncasedBlock { implements ICogWheel, IBE<SimpleKineticBlockEntity>, SpecialBlockItemRequirement, TransformableBlock, EncasedBlock {
public static final BooleanProperty TOP_SHAFT = BooleanProperty.create("top_shaft"); public static final BooleanProperty TOP_SHAFT = BooleanProperty.create("top_shaft");
public static final BooleanProperty BOTTOM_SHAFT = BooleanProperty.create("bottom_shaft"); public static final BooleanProperty BOTTOM_SHAFT = BooleanProperty.create("bottom_shaft");

View file

@ -4,11 +4,11 @@ import java.util.function.Supplier;
import com.simibubi.create.AllBlockEntityTypes; import com.simibubi.create.AllBlockEntityTypes;
import com.simibubi.create.AllBlocks; 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.decoration.encasing.EncasedBlock;
import com.simibubi.create.content.kinetics.base.AbstractEncasedShaftBlock; import com.simibubi.create.content.kinetics.base.AbstractEncasedShaftBlock;
import com.simibubi.create.content.kinetics.base.KineticBlockEntity; import com.simibubi.create.content.kinetics.base.KineticBlockEntity;
import com.simibubi.create.content.kinetics.base.RotatedPillarKineticBlock; 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.content.schematics.requirement.ItemRequirement;
import com.simibubi.create.foundation.block.IBE; import com.simibubi.create.foundation.block.IBE;
@ -28,7 +28,7 @@ import net.minecraft.world.phys.BlockHitResult;
import net.minecraft.world.phys.HitResult; import net.minecraft.world.phys.HitResult;
public class EncasedShaftBlock extends AbstractEncasedShaftBlock public class EncasedShaftBlock extends AbstractEncasedShaftBlock
implements IBE<KineticBlockEntity>, ISpecialBlockItemRequirement, EncasedBlock { implements IBE<KineticBlockEntity>, SpecialBlockItemRequirement, EncasedBlock {
private final Supplier<Block> casing; private final Supplier<Block> casing;

View file

@ -2,7 +2,7 @@ package com.simibubi.create.content.kinetics.transmission.sequencer;
import com.simibubi.create.AllBlockEntityTypes; import com.simibubi.create.AllBlockEntityTypes;
import com.simibubi.create.AllItems; 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.contraptions.StructureTransform;
import com.simibubi.create.content.kinetics.base.HorizontalAxisKineticBlock; import com.simibubi.create.content.kinetics.base.HorizontalAxisKineticBlock;
import com.simibubi.create.content.kinetics.base.KineticBlock; 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.BooleanProperty;
import net.minecraft.world.level.block.state.properties.IntegerProperty; import net.minecraft.world.level.block.state.properties.IntegerProperty;
import net.minecraft.world.phys.BlockHitResult; import net.minecraft.world.phys.BlockHitResult;
import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.api.distmarker.OnlyIn;
import net.minecraftforge.fml.DistExecutor; import net.minecraftforge.fml.DistExecutor;
public class SequencedGearshiftBlock extends HorizontalAxisKineticBlock implements IBE<SequencedGearshiftBlockEntity>, ITransformableBlock { public class SequencedGearshiftBlock extends HorizontalAxisKineticBlock implements IBE<SequencedGearshiftBlockEntity>, TransformableBlock {
public static final BooleanProperty VERTICAL = BooleanProperty.create("vertical"); public static final BooleanProperty VERTICAL = BooleanProperty.create("vertical");
public static final IntegerProperty STATE = IntegerProperty.create("state", 0, 5); public static final IntegerProperty STATE = IntegerProperty.create("state", 0, 5);

View file

@ -6,7 +6,7 @@ import com.simibubi.create.AllBlockEntityTypes;
import com.simibubi.create.AllBlocks; import com.simibubi.create.AllBlocks;
import com.simibubi.create.AllShapes; import com.simibubi.create.AllShapes;
import com.simibubi.create.AllSoundEvents; 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.equipment.wrench.IWrenchable;
import com.simibubi.create.content.logistics.packagerLink.LogisticallyLinkedBlockItem; import com.simibubi.create.content.logistics.packagerLink.LogisticallyLinkedBlockItem;
import com.simibubi.create.content.schematics.requirement.ItemRequirement; 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.EntityCollisionContext;
import net.minecraft.world.phys.shapes.Shapes; import net.minecraft.world.phys.shapes.Shapes;
import net.minecraft.world.phys.shapes.VoxelShape; import net.minecraft.world.phys.shapes.VoxelShape;
import net.minecraftforge.common.ForgeMod; import net.minecraftforge.common.ForgeMod;
import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.event.level.BlockEvent; import net.minecraftforge.event.level.BlockEvent;
public class FactoryPanelBlock extends FaceAttachedHorizontalDirectionalBlock public class FactoryPanelBlock extends FaceAttachedHorizontalDirectionalBlock
implements ProperWaterloggedBlock, IBE<FactoryPanelBlockEntity>, IWrenchable, ISpecialBlockItemRequirement { implements ProperWaterloggedBlock, IBE<FactoryPanelBlockEntity>, IWrenchable, SpecialBlockItemRequirement {
public static final BooleanProperty POWERED = BlockStateProperties.POWERED; public static final BooleanProperty POWERED = BlockStateProperties.POWERED;

View file

@ -2,18 +2,18 @@ package com.simibubi.create.content.logistics.funnel;
import com.simibubi.create.AllBlocks; import com.simibubi.create.AllBlocks;
import com.simibubi.create.AllShapes; 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.BeltBlock;
import com.simibubi.create.content.kinetics.belt.BeltSlope; import com.simibubi.create.content.kinetics.belt.BeltSlope;
import com.simibubi.create.content.kinetics.belt.behaviour.DirectBeltInputBehaviour; 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.content.schematics.requirement.ItemRequirement;
import com.simibubi.create.foundation.advancement.AllAdvancements; import com.simibubi.create.foundation.advancement.AllAdvancements;
import com.simibubi.create.foundation.block.ProperWaterloggedBlock; import com.simibubi.create.foundation.block.ProperWaterloggedBlock;
import com.simibubi.create.foundation.blockEntity.behaviour.BlockEntityBehaviour; import com.simibubi.create.foundation.blockEntity.behaviour.BlockEntityBehaviour;
import com.tterrag.registrate.util.entry.BlockEntry; import com.tterrag.registrate.util.entry.BlockEntry;
import net.createmod.catnip.math.VoxelShaper;
import net.createmod.catnip.lang.Lang; import net.createmod.catnip.lang.Lang;
import net.createmod.catnip.math.VoxelShaper;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction; import net.minecraft.core.Direction;
import net.minecraft.util.StringRepresentable; 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.EntityCollisionContext;
import net.minecraft.world.phys.shapes.VoxelShape; import net.minecraft.world.phys.shapes.VoxelShape;
public class BeltFunnelBlock extends AbstractHorizontalFunnelBlock implements ISpecialBlockItemRequirement { public class BeltFunnelBlock extends AbstractHorizontalFunnelBlock implements SpecialBlockItemRequirement {
private BlockEntry<? extends FunnelBlock> parent; private BlockEntry<? extends FunnelBlock> parent;

View file

@ -2,7 +2,7 @@ package com.simibubi.create.content.redstone;
import javax.annotation.Nullable; 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.contraptions.StructureTransform;
import com.simibubi.create.content.equipment.wrench.IWrenchable; 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.AttachFace;
import net.minecraft.world.level.block.state.properties.EnumProperty; 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<AttachFace> TARGET = EnumProperty.create("target", AttachFace.class); public static final EnumProperty<AttachFace> TARGET = EnumProperty.create("target", AttachFace.class);

View file

@ -5,7 +5,7 @@ import java.util.ArrayList;
import com.simibubi.create.AllBlockEntityTypes; import com.simibubi.create.AllBlockEntityTypes;
import com.simibubi.create.AllItems; import com.simibubi.create.AllItems;
import com.simibubi.create.AllSoundEvents; 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.content.schematics.requirement.ItemRequirement;
import com.simibubi.create.foundation.block.IBE; import com.simibubi.create.foundation.block.IBE;
@ -25,7 +25,7 @@ import net.minecraft.world.phys.BlockHitResult;
import net.minecraft.world.phys.HitResult; import net.minecraft.world.phys.HitResult;
public class LecternControllerBlock extends LecternBlock public class LecternControllerBlock extends LecternBlock
implements IBE<LecternControllerBlockEntity>, ISpecialBlockItemRequirement { implements IBE<LecternControllerBlockEntity>, SpecialBlockItemRequirement {
public LecternControllerBlock(Properties properties) { public LecternControllerBlock(Properties properties) {
super(properties); super(properties);

View file

@ -8,9 +8,9 @@ import java.util.function.BiConsumer;
import com.simibubi.create.AllBlockEntityTypes; import com.simibubi.create.AllBlockEntityTypes;
import com.simibubi.create.AllBlocks; import com.simibubi.create.AllBlocks;
import com.simibubi.create.AllShapes; 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.clipboard.ClipboardEntry;
import com.simibubi.create.content.equipment.wrench.IWrenchable; 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;
import com.simibubi.create.content.schematics.requirement.ItemRequirement.ItemUseType; import com.simibubi.create.content.schematics.requirement.ItemRequirement.ItemUseType;
import com.simibubi.create.foundation.block.IBE; 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; import net.minecraft.world.phys.shapes.VoxelShape;
public class NixieTubeBlock extends DoubleFaceAttachedBlock public class NixieTubeBlock extends DoubleFaceAttachedBlock
implements IBE<NixieTubeBlockEntity>, IWrenchable, SimpleWaterloggedBlock, ISpecialBlockItemRequirement { implements IBE<NixieTubeBlockEntity>, IWrenchable, SimpleWaterloggedBlock, SpecialBlockItemRequirement {
protected final DyeColor color; protected final DyeColor color;

View file

@ -6,13 +6,16 @@ import java.util.List;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import java.util.stream.Stream; import java.util.stream.Stream;
import com.simibubi.create.api.schematic.requirement.ISpecialBlockEntityItemRequirement; import org.jetbrains.annotations.Nullable;
import com.simibubi.create.api.schematic.requirement.ISpecialBlockItemRequirement;
import com.simibubi.create.api.schematic.requirement.ISpecialEntityItemRequirement; import com.simibubi.create.api.schematic.requirement.SchematicRequirementsRegistry.ContextProvidingBlockEntityRequirement;
import com.simibubi.create.api.schematic.requirement.SchematicRequirementsRegistry; 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.compat.framedblocks.FramedBlocksInSchematics;
import com.simibubi.create.foundation.data.recipe.Mods; import com.simibubi.create.foundation.data.recipe.Mods;
import com.simibubi.create.impl.schematic.requirement.SchematicRequirementsRegistryImpl; import com.simibubi.create.impl.schematic.requirement.SchematicRequirementsRegistryImpl;
import net.createmod.catnip.nbt.NBTProcessors; 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.BlockState;
import net.minecraft.world.level.block.state.properties.BlockStateProperties; import net.minecraft.world.level.block.state.properties.BlockStateProperties;
import net.minecraft.world.level.block.state.properties.SlabType; 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 class ItemRequirement {
public static final ItemRequirement NONE = new ItemRequirement(Collections.emptyList()); public static final ItemRequirement NONE = new ItemRequirement(Collections.emptyList());
@ -71,20 +73,20 @@ public class ItemRequirement {
Block block = state.getBlock(); Block block = state.getBlock();
ItemRequirement requirement; ItemRequirement requirement;
SchematicRequirementsRegistry.BlockRequirement blockItemRequirement = SchematicRequirementsRegistryImpl.getRequirementForBlock(block); ContextProvidingBlockRequirement blockItemRequirement = SchematicRequirementsRegistryImpl.getRequirementForBlock(block);
if (blockItemRequirement != null) { if (blockItemRequirement != null) {
requirement = blockItemRequirement.getRequiredItems(block, state, be); requirement = blockItemRequirement.getRequiredItems(state, be);
} else if (block instanceof ISpecialBlockItemRequirement specialBlock) { } else if (block instanceof SpecialBlockItemRequirement specialBlock) {
requirement = specialBlock.getRequiredItems(state, be); requirement = specialBlock.getRequiredItems(state, be);
} else { } else {
requirement = defaultOf(state, be); requirement = defaultOf(state, be);
} }
if (be != null) { if (be != null) {
SchematicRequirementsRegistry.BlockEntityRequirement blockEntityItemRequirement = SchematicRequirementsRegistryImpl.getRequirementForBlockEntityType(be.getType()); ContextProvidingBlockEntityRequirement blockEntityItemRequirement = SchematicRequirementsRegistryImpl.getRequirementForBlockEntityType(be.getType());
if (blockEntityItemRequirement != null) { if (blockEntityItemRequirement != null) {
requirement = requirement.union(blockEntityItemRequirement.getRequiredItems(be, state)); requirement = requirement.union(blockEntityItemRequirement.getRequiredItems(be));
} else if (be instanceof ISpecialBlockEntityItemRequirement specialBE) { } else if (be instanceof SpecialBlockEntityItemRequirement specialBE) {
requirement = requirement.union(specialBE.getRequiredItems(state)); requirement = requirement.union(specialBE.getRequiredItems(state));
} else if (com.simibubi.create.compat.Mods.FRAMEDBLOCKS.contains(block)) { } else if (com.simibubi.create.compat.Mods.FRAMEDBLOCKS.contains(block)) {
requirement = requirement.union(FramedBlocksInSchematics.getRequiredItems(state, be)); requirement = requirement.union(FramedBlocksInSchematics.getRequiredItems(state, be));
@ -134,10 +136,10 @@ public class ItemRequirement {
} }
public static ItemRequirement of(Entity entity) { public static ItemRequirement of(Entity entity) {
SchematicRequirementsRegistry.EntityRequirement entityItemRequirement = SchematicRequirementsRegistryImpl.getRequirementForEntityType(entity.getType()); ContextProvidingEntityRequirement entityItemRequirement = SchematicRequirementsRegistryImpl.getRequirementForEntityType(entity.getType());
if (entityItemRequirement != null) { if (entityItemRequirement != null) {
return entityItemRequirement.getRequiredItems(entity); return entityItemRequirement.getRequiredItems(entity);
} else if (entity instanceof ISpecialEntityItemRequirement specialEntity) { } else if (entity instanceof SpecialEntityItemRequirement specialEntity) {
return specialEntity.getRequiredItems(); return specialEntity.getRequiredItems();
} }

View file

@ -16,8 +16,8 @@ import com.google.common.collect.ImmutableSet;
import com.simibubi.create.AllBlocks; import com.simibubi.create.AllBlocks;
import com.simibubi.create.AllBogeyStyles; import com.simibubi.create.AllBogeyStyles;
import com.simibubi.create.AllItems; 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.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;
import com.simibubi.create.content.trains.entity.Carriage; import com.simibubi.create.content.trains.entity.Carriage;
import com.simibubi.create.content.trains.entity.CarriageBogey; 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.block.ProperWaterloggedBlock;
import com.simibubi.create.foundation.utility.CreateLang; import com.simibubi.create.foundation.utility.CreateLang;
import net.createmod.catnip.platform.CatnipServices;
import net.createmod.catnip.data.Iterate; import net.createmod.catnip.data.Iterate;
import net.createmod.catnip.platform.CatnipServices;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction; import net.minecraft.core.Direction;
import net.minecraft.nbt.CompoundTag; 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.level.material.FluidState;
import net.minecraft.world.phys.BlockHitResult; import net.minecraft.world.phys.BlockHitResult;
import net.minecraft.world.phys.Vec3; import net.minecraft.world.phys.Vec3;
import net.minecraftforge.registries.ForgeRegistries; import net.minecraftforge.registries.ForgeRegistries;
public abstract class AbstractBogeyBlock<T extends AbstractBogeyBlockEntity> extends Block implements IBE<T>, ProperWaterloggedBlock, ISpecialBlockItemRequirement, IWrenchable { public abstract class AbstractBogeyBlock<T extends AbstractBogeyBlockEntity> extends Block implements IBE<T>, ProperWaterloggedBlock, SpecialBlockItemRequirement, IWrenchable {
public static final EnumProperty<Direction.Axis> AXIS = BlockStateProperties.HORIZONTAL_AXIS; public static final EnumProperty<Direction.Axis> AXIS = BlockStateProperties.HORIZONTAL_AXIS;
static final List<ResourceLocation> BOGEYS = new ArrayList<>(); static final List<ResourceLocation> BOGEYS = new ArrayList<>();
public BogeySizes.BogeySize size; public BogeySizes.BogeySize size;

View file

@ -3,7 +3,7 @@ package com.simibubi.create.content.trains.bogey;
import com.simibubi.create.AllBlockEntityTypes; import com.simibubi.create.AllBlockEntityTypes;
import com.simibubi.create.AllBlocks; import com.simibubi.create.AllBlocks;
import com.simibubi.create.AllBogeyStyles; 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.content.trains.track.TrackMaterial;
import com.simibubi.create.foundation.block.IBE; import com.simibubi.create.foundation.block.IBE;
import com.simibubi.create.foundation.block.ProperWaterloggedBlock; import com.simibubi.create.foundation.block.ProperWaterloggedBlock;
@ -18,7 +18,7 @@ import net.minecraft.world.phys.HitResult;
import net.minecraft.world.phys.Vec3; import net.minecraft.world.phys.Vec3;
public class StandardBogeyBlock extends AbstractBogeyBlock<StandardBogeyBlockEntity> public class StandardBogeyBlock extends AbstractBogeyBlock<StandardBogeyBlockEntity>
implements IBE<StandardBogeyBlockEntity>, ProperWaterloggedBlock, ISpecialBlockItemRequirement { implements IBE<StandardBogeyBlockEntity>, ProperWaterloggedBlock, SpecialBlockItemRequirement {
public StandardBogeyBlock(Properties props, BogeySizes.BogeySize size) { public StandardBogeyBlock(Properties props, BogeySizes.BogeySize size) {
super(props, size); super(props, size);

View file

@ -7,11 +7,10 @@ import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Optional; import java.util.Optional;
import com.simibubi.create.api.contraption.train.TrainConductorHandler;
import org.apache.commons.lang3.tuple.Pair; import org.apache.commons.lang3.tuple.Pair;
import com.simibubi.create.AllBlocks; 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.AssemblyException;
import com.simibubi.create.content.contraptions.Contraption; import com.simibubi.create.content.contraptions.Contraption;
import com.simibubi.create.content.contraptions.ContraptionType; 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.contraptions.minecart.TrainCargoManager;
import com.simibubi.create.content.trains.bogey.AbstractBogeyBlock; import com.simibubi.create.content.trains.bogey.AbstractBogeyBlock;
import com.simibubi.create.foundation.utility.CreateLang; 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.Couple;
import net.createmod.catnip.data.Iterate; import net.createmod.catnip.data.Iterate;
import net.createmod.catnip.nbt.NBTHelper;
import net.createmod.catnip.math.VecHelper; import net.createmod.catnip.math.VecHelper;
import net.createmod.catnip.nbt.NBTHelper;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction; import net.minecraft.core.Direction;
import net.minecraft.core.Direction.Axis; import net.minecraft.core.Direction.Axis;
@ -165,8 +165,12 @@ public class CarriageContraption extends Contraption {
captureBE ? world.getBlockEntity(pos) : null); captureBE ? world.getBlockEntity(pos) : null);
} }
if (TrainConductorHandler.CONDUCTOR_HANDLERS.stream().anyMatch(handler -> handler.isValidConductor(blockState))) for (TrainConductorHandler handler : TrainConductorHandlerImpl.CONDUCTOR_HANDLERS) {
assembledBlockConductors.add(toLocalPos(pos)); if (handler.isValidConductor(blockState)) {
assembledBlockConductors.add(toLocalPos(pos));
break;
}
}
if (AllBlocks.TRAIN_CONTROLS.has(blockState)) { if (AllBlocks.TRAIN_CONTROLS.has(blockState)) {
Direction facing = blockState.getValue(ControlsBlock.FACING); Direction facing = blockState.getValue(ControlsBlock.FACING);

View file

@ -5,7 +5,7 @@ import java.util.List;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import com.mojang.blaze3d.vertex.PoseStack; 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.contraptions.StructureTransform;
import com.simibubi.create.content.redstone.displayLink.DisplayLinkBlock; import com.simibubi.create.content.redstone.displayLink.DisplayLinkBlock;
import com.simibubi.create.content.trains.graph.EdgePointType; 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.core.BlockPos;
import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.LevelAccessor; 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.entity.BlockEntityType;
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.AABB;
import net.minecraft.world.phys.Vec3; import net.minecraft.world.phys.Vec3;
public class TrackObserverBlockEntity extends SmartBlockEntity implements ITransformableBlockEntity { public class TrackObserverBlockEntity extends SmartBlockEntity implements TransformableBlockEntity {
public TrackTargetingBehaviour<TrackObserver> edgePoint; public TrackTargetingBehaviour<TrackObserver> edgePoint;
@ -90,8 +91,8 @@ public class TrackObserverBlockEntity extends SmartBlockEntity implements ITrans
} }
@Override @Override
public void transform(StructureTransform transform) { public void transform(BlockEntity be, StructureTransform transform) {
edgePoint.transform(transform); edgePoint.transform(be, transform);
} }
public FilteringBehaviour createFilter() { public FilteringBehaviour createFilter() {

View file

@ -4,7 +4,7 @@ import java.util.List;
import javax.annotation.Nullable; 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.contraptions.StructureTransform;
import com.simibubi.create.content.trains.graph.EdgePointType; import com.simibubi.create.content.trains.graph.EdgePointType;
import com.simibubi.create.content.trains.signal.SignalBlock.SignalType; 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.createmod.catnip.nbt.NBTHelper;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.nbt.CompoundTag; 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.entity.BlockEntityType;
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.AABB;
public class SignalBlockEntity extends SmartBlockEntity implements ITransformableBlockEntity { public class SignalBlockEntity extends SmartBlockEntity implements TransformableBlockEntity {
public static enum OverlayState { public static enum OverlayState {
RENDER, SKIP, DUAL RENDER, SKIP, DUAL
@ -160,8 +161,8 @@ public class SignalBlockEntity extends SmartBlockEntity implements ITransformabl
} }
@Override @Override
public void transform(StructureTransform transform) { public void transform(BlockEntity be, StructureTransform transform) {
edgePoint.transform(transform); edgePoint.transform(be, transform);
} }
} }

View file

@ -21,10 +21,10 @@ import com.simibubi.create.AllItems;
import com.simibubi.create.AllPackets; import com.simibubi.create.AllPackets;
import com.simibubi.create.AllSoundEvents; import com.simibubi.create.AllSoundEvents;
import com.simibubi.create.Create; 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.AbstractComputerBehaviour;
import com.simibubi.create.compat.computercraft.ComputerCraftProxy; import com.simibubi.create.compat.computercraft.ComputerCraftProxy;
import com.simibubi.create.content.contraptions.AssemblyException; 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.contraptions.StructureTransform;
import com.simibubi.create.content.decoration.slidingDoor.DoorControlBehaviour; import com.simibubi.create.content.decoration.slidingDoor.DoorControlBehaviour;
import com.simibubi.create.content.equipment.wrench.IWrenchable; 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.foundation.utility.CreateLang;
import com.simibubi.create.infrastructure.config.AllConfigs; 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;
import net.createmod.catnip.animation.LerpedFloat.Chaser; 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.ChatFormatting;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.core.BlockPos.MutableBlockPos; 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.level.levelgen.structure.BoundingBox;
import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.AABB;
import net.minecraft.world.phys.Vec3; import net.minecraft.world.phys.Vec3;
import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.api.distmarker.OnlyIn;
import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.common.util.LazyOptional; import net.minecraftforge.common.util.LazyOptional;
import net.minecraftforge.network.PacketDistributor; import net.minecraftforge.network.PacketDistributor;
public class StationBlockEntity extends SmartBlockEntity implements ITransformableBlockEntity { public class StationBlockEntity extends SmartBlockEntity implements TransformableBlockEntity {
public TrackTargetingBehaviour<GlobalStation> edgePoint; public TrackTargetingBehaviour<GlobalStation> edgePoint;
public DoorControlBehaviour doorControls; public DoorControlBehaviour doorControls;
@ -970,8 +971,8 @@ public class StationBlockEntity extends SmartBlockEntity implements ITransformab
} }
@Override @Override
public void transform(StructureTransform transform) { public void transform(BlockEntity be, StructureTransform transform) {
edgePoint.transform(transform); edgePoint.transform(be, transform);
} }
// Package port integration // Package port integration

View file

@ -19,7 +19,6 @@ import java.util.Random;
import java.util.Set; import java.util.Set;
import java.util.function.Consumer; import java.util.function.Consumer;
import net.minecraft.network.chat.Component;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import com.google.common.base.Predicates; import com.google.common.base.Predicates;
@ -29,9 +28,9 @@ import com.simibubi.create.AllBlocks;
import com.simibubi.create.AllPartialModels; import com.simibubi.create.AllPartialModels;
import com.simibubi.create.AllShapes; import com.simibubi.create.AllShapes;
import com.simibubi.create.AllTags; 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.decoration.girder.GirderBlock;
import com.simibubi.create.content.equipment.wrench.IWrenchable; 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;
import com.simibubi.create.content.schematics.requirement.ItemRequirement.ItemUseType; import com.simibubi.create.content.schematics.requirement.ItemRequirement.ItemUseType;
import com.simibubi.create.content.trains.CubeParticleData; 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 dev.engine_room.flywheel.lib.transform.TransformStack;
import it.unimi.dsi.fastutil.objects.Object2IntArrayMap; import it.unimi.dsi.fastutil.objects.Object2IntArrayMap;
import it.unimi.dsi.fastutil.objects.Object2IntMap; import it.unimi.dsi.fastutil.objects.Object2IntMap;
import net.createmod.catnip.math.BlockFace;
import net.createmod.catnip.data.Iterate; import net.createmod.catnip.data.Iterate;
import net.createmod.catnip.data.Pair; import net.createmod.catnip.data.Pair;
import net.createmod.catnip.math.VecHelper;
import net.createmod.catnip.math.AngleHelper; 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.ChatFormatting;
import net.minecraft.client.multiplayer.ClientLevel; import net.minecraft.client.multiplayer.ClientLevel;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction; import net.minecraft.core.Direction;
import net.minecraft.core.Direction.Axis; import net.minecraft.core.Direction.Axis;
import net.minecraft.core.Direction.AxisDirection; import net.minecraft.core.Direction.AxisDirection;
import net.minecraft.network.chat.Component;
import net.minecraft.network.chat.MutableComponent; import net.minecraft.network.chat.MutableComponent;
import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceKey;
import net.minecraft.server.level.ServerLevel; 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.Shapes;
import net.minecraft.world.phys.shapes.VoxelShape; import net.minecraft.world.phys.shapes.VoxelShape;
import net.minecraft.world.ticks.LevelTickAccess; import net.minecraft.world.ticks.LevelTickAccess;
import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.api.distmarker.OnlyIn;
import net.minecraftforge.client.extensions.common.IClientBlockExtensions; import net.minecraftforge.client.extensions.common.IClientBlockExtensions;
public class TrackBlock extends Block public class TrackBlock extends Block
implements IBE<TrackBlockEntity>, IWrenchable, ITrackBlock, ISpecialBlockItemRequirement, ProperWaterloggedBlock, IHaveBigOutline { implements IBE<TrackBlockEntity>, IWrenchable, ITrackBlock, SpecialBlockItemRequirement, ProperWaterloggedBlock, IHaveBigOutline {
public static final EnumProperty<TrackShape> SHAPE = EnumProperty.create("shape", TrackShape.class); public static final EnumProperty<TrackShape> SHAPE = EnumProperty.create("shape", TrackShape.class);
public static final BooleanProperty HAS_BE = BooleanProperty.create("turn"); public static final BooleanProperty HAS_BE = BooleanProperty.create("turn");

View file

@ -11,7 +11,7 @@ import java.util.Set;
import com.simibubi.create.AllBlocks; import com.simibubi.create.AllBlocks;
import com.simibubi.create.AllPackets; import com.simibubi.create.AllPackets;
import com.simibubi.create.AllTags; 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.contraptions.StructureTransform;
import com.simibubi.create.content.trains.graph.TrackNodeLocation; import com.simibubi.create.content.trains.graph.TrackNodeLocation;
import com.simibubi.create.foundation.block.ProperWaterloggedBlock; 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.level.material.Fluids;
import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.AABB;
import net.minecraft.world.phys.Vec3; import net.minecraft.world.phys.Vec3;
import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.api.distmarker.OnlyIn;
import net.minecraftforge.client.model.data.ModelData; import net.minecraftforge.client.model.data.ModelData;
import net.minecraftforge.fml.DistExecutor; import net.minecraftforge.fml.DistExecutor;
public class TrackBlockEntity extends SmartBlockEntity implements ITransformableBlockEntity, IMergeableBE { public class TrackBlockEntity extends SmartBlockEntity implements TransformableBlockEntity, IMergeableBE {
Map<BlockPos, BezierConnection> connections; Map<BlockPos, BezierConnection> connections;
boolean cancelDrops; boolean cancelDrops;
@ -262,7 +263,7 @@ public class TrackBlockEntity extends SmartBlockEntity implements ITransformable
} }
@Override @Override
public void transform(StructureTransform transform) { public void transform(BlockEntity be, StructureTransform transform) {
Map<BlockPos, BezierConnection> restoredConnections = new HashMap<>(); Map<BlockPos, BezierConnection> restoredConnections = new HashMap<>();
for (Entry<BlockPos, BezierConnection> entry : connections.entrySet()) for (Entry<BlockPos, BezierConnection> entry : connections.entrySet())
restoredConnections.put(entry.getKey(), restoredConnections.put(entry.getKey(),

View file

@ -23,10 +23,10 @@ import com.simibubi.create.foundation.blockEntity.behaviour.BehaviourType;
import com.simibubi.create.foundation.blockEntity.behaviour.BlockEntityBehaviour; import com.simibubi.create.foundation.blockEntity.behaviour.BlockEntityBehaviour;
import dev.engine_room.flywheel.lib.model.baked.PartialModel; 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.data.Iterate;
import net.createmod.catnip.math.VecHelper;
import net.createmod.catnip.levelWrappers.SchematicLevel; 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.createmod.ponder.api.level.PonderLevel;
import net.minecraft.client.renderer.LevelRenderer; import net.minecraft.client.renderer.LevelRenderer;
import net.minecraft.client.renderer.MultiBufferSource; 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.Level;
import net.minecraft.world.level.LevelAccessor; import net.minecraft.world.level.LevelAccessor;
import net.minecraft.world.level.block.Block; 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.level.block.state.BlockState;
import net.minecraft.world.phys.Vec3; import net.minecraft.world.phys.Vec3;
import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.api.distmarker.OnlyIn;
@ -332,7 +334,7 @@ public class TrackTargetingBehaviour<T extends TrackEdgePoint> extends BlockEnti
ms.popPose(); ms.popPose();
} }
public void transform(StructureTransform transform) { public void transform(BlockEntity be, StructureTransform transform) {
id = UUID.randomUUID(); id = UUID.randomUUID();
targetTrack = transform.applyWithoutOffset(targetTrack); targetTrack = transform.applyWithoutOffset(targetTrack);
if (prevDirection != null) if (prevDirection != null)

View file

@ -7,14 +7,14 @@ import java.util.Map;
import java.util.function.Consumer; import java.util.function.Consumer;
import com.simibubi.create.api.event.BlockEntityBehaviourEvent; 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.content.schematics.requirement.ItemRequirement;
import com.simibubi.create.foundation.advancement.AdvancementBehaviour; import com.simibubi.create.foundation.advancement.AdvancementBehaviour;
import com.simibubi.create.foundation.advancement.CreateAdvancement; import com.simibubi.create.foundation.advancement.CreateAdvancement;
import com.simibubi.create.foundation.blockEntity.behaviour.BehaviourType; import com.simibubi.create.foundation.blockEntity.behaviour.BehaviourType;
import com.simibubi.create.foundation.blockEntity.behaviour.BlockEntityBehaviour; import com.simibubi.create.foundation.blockEntity.behaviour.BlockEntityBehaviour;
import com.simibubi.create.foundation.utility.IInteractionChecker; import com.simibubi.create.foundation.utility.IInteractionChecker;
import com.simibubi.create.api.schematic.nbt.IPartialSafeNBT;
import it.unimi.dsi.fastutil.objects.Reference2ObjectArrayMap; import it.unimi.dsi.fastutil.objects.Reference2ObjectArrayMap;
import net.createmod.ponder.api.VirtualBlockEntity; 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.entity.player.Player;
import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.entity.BlockEntityType;
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.BlockState;
import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.common.capabilities.ForgeCapabilities; import net.minecraftforge.common.capabilities.ForgeCapabilities;
public abstract class SmartBlockEntity extends CachedRenderBBBlockEntity public abstract class SmartBlockEntity extends CachedRenderBBBlockEntity
implements IPartialSafeNBT, IInteractionChecker, ISpecialBlockEntityItemRequirement, VirtualBlockEntity { implements PartialSafeNBT, IInteractionChecker, SpecialBlockEntityItemRequirement, VirtualBlockEntity {
private final Map<BehaviourType<?>, BlockEntityBehaviour> behaviours = new Reference2ObjectArrayMap<>(); private final Map<BehaviourType<?>, BlockEntityBehaviour> behaviours = new Reference2ObjectArrayMap<>();
private boolean initialized = false; private boolean initialized = false;

View file

@ -7,7 +7,7 @@ import javax.annotation.Nullable;
import com.simibubi.create.AllBlocks; import com.simibubi.create.AllBlocks;
import com.simibubi.create.AllTags.AllBlockTags; 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.api.schematic.nbt.SchematicSafeNBTRegistry;
import com.simibubi.create.compat.Mods; import com.simibubi.create.compat.Mods;
import com.simibubi.create.compat.framedblocks.FramedBlocksInSchematics; 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.LevelChunk;
import net.minecraft.world.level.chunk.LevelChunkSection; import net.minecraft.world.level.chunk.LevelChunkSection;
import net.minecraft.world.level.material.FluidState; import net.minecraft.world.level.material.FluidState;
import net.minecraftforge.common.IPlantable; import net.minecraftforge.common.IPlantable;
import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.event.level.BlockEvent; import net.minecraftforge.event.level.BlockEvent;
@ -285,7 +286,7 @@ public class BlockHelper {
} else if (safeNBT != null) { } else if (safeNBT != null) {
data = new CompoundTag(); data = new CompoundTag();
safeNBT.writeSafe(blockEntity, data); safeNBT.writeSafe(blockEntity, data);
} else if (blockEntity instanceof IPartialSafeNBT safeNbtBE) { } else if (blockEntity instanceof PartialSafeNBT safeNbtBE) {
data = new CompoundTag(); data = new CompoundTag();
safeNbtBE.writeSafe(data); safeNbtBE.writeSafe(data);
} else if (Mods.FRAMEDBLOCKS.contains(blockState.getBlock())) { } else if (Mods.FRAMEDBLOCKS.contains(blockState.getBlock())) {

View file

@ -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<TrainConductorHandler> 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);
}
}

View file

@ -2,12 +2,13 @@ package com.simibubi.create.impl.contraption.transformable;
import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.ApiStatus;
import com.simibubi.create.api.contraption.transformable.ContraptionTransformableRegistry.TransformableBlock; import com.simibubi.create.api.contraption.transformable.TransformableBlock;
import com.simibubi.create.api.contraption.transformable.ContraptionTransformableRegistry.TransformableBlockEntity; import com.simibubi.create.api.contraption.transformable.TransformableBlockEntity;
import com.simibubi.create.foundation.utility.AttachedRegistry; import com.simibubi.create.foundation.utility.AttachedRegistry;
import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.entity.BlockEntityType;
import net.minecraftforge.registries.ForgeRegistries; import net.minecraftforge.registries.ForgeRegistries;
@ApiStatus.Internal @ApiStatus.Internal

View file

@ -2,7 +2,9 @@ package com.simibubi.create.impl.schematic.requirement;
import org.jetbrains.annotations.ApiStatus; 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 com.simibubi.create.foundation.utility.AttachedRegistry;
import net.minecraft.resources.ResourceLocation; 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.Block;
import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.entity.BlockEntityType;
import net.minecraftforge.registries.ForgeRegistries; import net.minecraftforge.registries.ForgeRegistries;
@ApiStatus.Internal @ApiStatus.Internal
public class SchematicRequirementsRegistryImpl { public class SchematicRequirementsRegistryImpl {
private static final AttachedRegistry<Block, SchematicRequirementsRegistry.BlockRequirement> BLOCK_REQUIREMENTS = new AttachedRegistry<>(ForgeRegistries.BLOCKS); private static final AttachedRegistry<Block, ContextProvidingBlockRequirement> BLOCK_REQUIREMENTS = new AttachedRegistry<>(ForgeRegistries.BLOCKS);
private static final AttachedRegistry<BlockEntityType<?>, SchematicRequirementsRegistry.BlockEntityRequirement> BLOCK_ENTITY_REQUIREMENTS = new AttachedRegistry<>(ForgeRegistries.BLOCK_ENTITY_TYPES); private static final AttachedRegistry<BlockEntityType<?>, ContextProvidingBlockEntityRequirement> BLOCK_ENTITY_REQUIREMENTS = new AttachedRegistry<>(ForgeRegistries.BLOCK_ENTITY_TYPES);
private static final AttachedRegistry<EntityType<?>, SchematicRequirementsRegistry.EntityRequirement> ENTITY_REQUIREMENTS = new AttachedRegistry<>(ForgeRegistries.ENTITY_TYPES); private static final AttachedRegistry<EntityType<?>, 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); 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); BLOCK_REQUIREMENTS.register(block, requirement);
} }
public static void registerForBlockEntity(BlockEntityType<BlockEntity> blockEntityType, SchematicRequirementsRegistry.BlockEntityRequirement requirement) { public static void registerForBlockEntity(BlockEntityType<BlockEntity> blockEntityType, ContextProvidingBlockEntityRequirement requirement) {
BLOCK_ENTITY_REQUIREMENTS.register(blockEntityType, 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); BLOCK_ENTITY_REQUIREMENTS.register(blockEntityType, requirement);
} }
public static void registerForEntity(EntityType<Entity> entityType, SchematicRequirementsRegistry.EntityRequirement requirement) { public static void registerForEntity(EntityType<Entity> entityType, ContextProvidingEntityRequirement requirement) {
ENTITY_REQUIREMENTS.register(entityType, 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); ENTITY_REQUIREMENTS.register(entityType, requirement);
} }
public static SchematicRequirementsRegistry.BlockRequirement getRequirementForBlock(Block block) { public static ContextProvidingBlockRequirement getRequirementForBlock(Block block) {
return BLOCK_REQUIREMENTS.get(block); return BLOCK_REQUIREMENTS.get(block);
} }
public static SchematicRequirementsRegistry.BlockEntityRequirement getRequirementForBlockEntityType(BlockEntityType<? extends BlockEntity> blockEntityType) { public static ContextProvidingBlockEntityRequirement getRequirementForBlockEntityType(BlockEntityType<? extends BlockEntity> blockEntityType) {
return BLOCK_ENTITY_REQUIREMENTS.get(blockEntityType); return BLOCK_ENTITY_REQUIREMENTS.get(blockEntityType);
} }
public static SchematicRequirementsRegistry.EntityRequirement getRequirementForEntityType(EntityType<? extends Entity> entityType) { public static ContextProvidingEntityRequirement getRequirementForEntityType(EntityType<? extends Entity> entityType) {
return ENTITY_REQUIREMENTS.get(entityType); return ENTITY_REQUIREMENTS.get(entityType);
} }
} }