Merge branch 'mc1.20.1/feature-dev' into mc1.21.1/dev

This commit is contained in:
IThundxr 2025-02-11 15:32:47 -05:00
commit 86ca403ec3
Failed to generate hash of commit
54 changed files with 245 additions and 222 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.AllItemTags;
import com.simibubi.create.api.contraption.train.TrainConductorHandler;
import com.simibubi.create.content.contraptions.actors.contraptionControls.ContraptionControlsBlock;
import com.simibubi.create.content.contraptions.actors.contraptionControls.ContraptionControlsMovement;
import com.simibubi.create.content.contraptions.actors.contraptionControls.ContraptionControlsMovingInteraction;
@ -291,6 +290,7 @@ import com.simibubi.create.foundation.item.UncontainableBlockItem;
import com.simibubi.create.foundation.mixin.accessor.BlockLootSubProviderAccessor;
import com.simibubi.create.foundation.utility.ColorHandlers;
import com.simibubi.create.foundation.utility.DyeHelper;
import com.simibubi.create.impl.contraption.train.TrainConductorHandlerImpl;
import com.tterrag.registrate.providers.RegistrateRecipeProvider;
import com.tterrag.registrate.util.DataIngredient;
import com.tterrag.registrate.util.entry.BlockEntry;
@ -772,7 +772,7 @@ public class AllBlocks {
.loot((lt, block) -> lt.add(block, BlazeBurnerBlock.buildLootTable()))
.blockstate((c, p) -> p.simpleBlock(c.getEntry(), AssetLookup.partialBaseModel(c, p)))
.onRegister(movementBehaviour(new BlazeBurnerMovementBehaviour()))
.onRegister(block -> TrainConductorHandler.registerBlazeBurner())
.onRegister(block -> TrainConductorHandlerImpl.registerBlazeBurner())
.item(BlazeBurnerBlockItem::withBlaze)
.model(AssetLookup.customBlockItemModel("blaze_burner", "block_with_blaze"))
.build()

View file

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

View file

@ -1,12 +1,9 @@
package com.simibubi.create.api.contraption.transformable;
import com.simibubi.create.content.contraptions.StructureTransform;
import com.simibubi.create.impl.contraption.transformable.ContraptionTransformableRegistryImpl;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.level.block.entity.BlockEntityType;
import net.minecraft.world.level.block.state.BlockState;
/**
* Registry for registering new contraption transformations
@ -34,16 +31,4 @@ public class ContraptionTransformableRegistry {
public static void registerForBlockEntity(BlockEntityType<?> blockEntityType, TransformableBlockEntity transformableBlockEntity) {
ContraptionTransformableRegistryImpl.registerForBlockEntity(blockEntityType, transformableBlockEntity);
}
// --- Interfaces that provide the context that would be accessible if you implemented the ITransformable* interfaces ---
@FunctionalInterface
public interface TransformableBlock {
BlockState transform(Block block, BlockState state, StructureTransform transform);
}
@FunctionalInterface
public interface TransformableBlockEntity {
void transform(BlockEntity blockEntity, StructureTransform transform);
}
}

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;
public interface ITransformableBlock {
@FunctionalInterface
public interface TransformableBlock {
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

@ -3,7 +3,7 @@ package com.simibubi.create.api.schematic.nbt;
import net.minecraft.core.HolderLookup;
import net.minecraft.nbt.CompoundTag;
public interface IPartialSafeNBT {
public interface PartialSafeNBT {
/**
* 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
*
* @param block The block you want to register a {@link BlockRequirement} for
* @param block The block you want to register a {@link ContextProvidingBlockRequirement} for
* @param requirement The requirement you would like to add to this block,
* the {@link BlockRequirement#getRequiredItems(Block, BlockState, BlockEntity)}
* method will be called on the {@link BlockRequirement} you have provided,
* the {@link ContextProvidingBlockRequirement#getRequiredItems(BlockState, BlockEntity)}
* method will be called on the {@link ContextProvidingBlockRequirement} you have provided,
* and you will be able to insert requirements based off the context that is given
*/
public static void registerForBlock(Block block, BlockRequirement requirement) {
public static void registerForBlock(Block block, ContextProvidingBlockRequirement requirement) {
SchematicRequirementsRegistryImpl.registerForBlock(block, requirement);
}
/**
* Register a new special requirement for a specified block
*
* @param block The id of the block you want to register a {@link BlockRequirement} for
* @param block The id of the block you want to register a {@link ContextProvidingBlockRequirement} for
* @param requirement The requirement you would like to add to this block,
* the {@link BlockRequirement#getRequiredItems(Block, BlockState, BlockEntity)}
* method will be called on the {@link BlockRequirement} you have provided,
* the {@link ContextProvidingBlockRequirement#getRequiredItems(BlockState, BlockEntity)}
* method will be called on the {@link ContextProvidingBlockRequirement} you have provided,
* and you will be able to insert requirements based off the context that is given
*/
public static void registerForBlock(ResourceLocation block, BlockRequirement requirement) {
public static void registerForBlock(ResourceLocation block, ContextProvidingBlockRequirement requirement) {
SchematicRequirementsRegistryImpl.registerForBlock(block, requirement);
}
/**
* Register a new special requirement for a specified block entity type
*
* @param blockEntityType The blockEntityType you want to register a {@link BlockEntityRequirement} for
* @param blockEntityType The blockEntityType you want to register a {@link ContextProvidingBlockEntityRequirement} for
* @param requirement The requirement you would like to add to this block entity type,
* the {@link BlockEntityRequirement#getRequiredItems(BlockEntity, BlockState)}
* method will be called on the {@link BlockEntityRequirement} you have provided,
* the {@link ContextProvidingBlockEntityRequirement#getRequiredItems(BlockEntity)}
* method will be called on the
* {@link ContextProvidingBlockEntityRequirement} you have provided,
* and you will be able to insert requirements based off the context that is given
*/
public static void registerForBlockEntity(BlockEntityType<BlockEntity> blockEntityType, BlockEntityRequirement requirement) {
public static void registerForBlockEntity(BlockEntityType<BlockEntity> blockEntityType, ContextProvidingBlockEntityRequirement requirement) {
SchematicRequirementsRegistryImpl.registerForBlockEntity(blockEntityType, requirement);
}
/**
* Register a new special requirement for a specified block entity type
*
* @param blockEntityType The id of the blockEntityType you want to register a {@link BlockEntityRequirement} for
* @param blockEntityType The id of the blockEntityType you want to register a {@link ContextProvidingBlockEntityRequirement} for
* @param requirement The requirement you would like to add to this block entity type,
* the {@link BlockEntityRequirement#getRequiredItems(BlockEntity, BlockState)}
* method will be called on the {@link BlockEntityRequirement} you have provided,
* the {@link ContextProvidingBlockEntityRequirement#getRequiredItems(BlockEntity)}
* method will be called on the
* {@link ContextProvidingBlockEntityRequirement} you have provided,
* and you will be able to insert requirements based off the context that is given
*/
public static void registerForBlockEntity(ResourceLocation blockEntityType, BlockEntityRequirement requirement) {
public static void registerForBlockEntity(ResourceLocation blockEntityType, ContextProvidingBlockEntityRequirement requirement) {
SchematicRequirementsRegistryImpl.registerForBlockEntity(blockEntityType, requirement);
}
/**
* Register a new special requirement for a specified entity type
*
* @param entityType The entityType you want to register a {@link EntityRequirement} for
* @param entityType The entityType you want to register a {@link ContextProvidingEntityRequirement} for
* @param requirement The requirement you would like to add to this entity type,
* the {@link EntityRequirement#getRequiredItems(Entity)}
* method will be called on the {@link EntityRequirement} you have provided,
* the {@link ContextProvidingEntityRequirement#getRequiredItems(Entity)}
* method will be called on the {@link ContextProvidingEntityRequirement} you have provided,
* and you will be able to insert requirements based off the context that is given
*/
public static void registerForEntity(EntityType<Entity> entityType, EntityRequirement requirement) {
public static void registerForEntity(EntityType<Entity> entityType, ContextProvidingEntityRequirement requirement) {
SchematicRequirementsRegistryImpl.registerForEntity(entityType, requirement);
}
/**
* Register a new special requirement for a specified entity type
*
* @param entityType The id of the entityType you want to register a {@link EntityRequirement} for
* @param entityType The id of the entityType you want to register a {@link ContextProvidingEntityRequirement} for
* @param requirement The requirement you would like to add to this entity type,
* the {@link EntityRequirement#getRequiredItems(Entity)}
* method will be called on the {@link EntityRequirement} you have provided,
* the {@link ContextProvidingEntityRequirement#getRequiredItems(Entity)}
* method will be called on the {@link ContextProvidingEntityRequirement} you have provided,
* and you will be able to insert requirements based off the context that is given
*/
public static void registerForEntity(ResourceLocation entityType, EntityRequirement requirement) {
public static void registerForEntity(ResourceLocation entityType, ContextProvidingEntityRequirement requirement) {
SchematicRequirementsRegistryImpl.registerForEntity(entityType, requirement);
}
// --- Interfaces that provide the context that would be accessible if you implemented the ISpecial* interfaces ---
@FunctionalInterface
public interface BlockRequirement {
ItemRequirement getRequiredItems(Block block, BlockState state, @Nullable BlockEntity blockEntity);
public interface ContextProvidingBlockRequirement {
ItemRequirement getRequiredItems(BlockState state, @Nullable BlockEntity blockEntity);
}
@FunctionalInterface
public interface BlockEntityRequirement {
ItemRequirement getRequiredItems(BlockEntity blockEntity, BlockState state);
public interface ContextProvidingBlockEntityRequirement {
ItemRequirement getRequiredItems(BlockEntity blockEntity);
}
@FunctionalInterface
public interface EntityRequirement {
public interface ContextProvidingEntityRequirement {
ItemRequirement getRequiredItems(Entity entity);
}
}

View file

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

View file

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

View file

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

View file

@ -6,9 +6,8 @@ import static net.minecraft.world.level.block.state.properties.BlockStatePropert
import org.jetbrains.annotations.Nullable;
import com.simibubi.create.api.contraption.transformable.ContraptionTransformableRegistry;
import com.simibubi.create.api.contraption.transformable.ITransformableBlock;
import com.simibubi.create.api.contraption.transformable.ITransformableBlockEntity;
import com.simibubi.create.api.contraption.transformable.TransformableBlock;
import com.simibubi.create.api.contraption.transformable.TransformableBlockEntity;
import com.simibubi.create.impl.contraption.transformable.ContraptionTransformableRegistryImpl;
import io.netty.buffer.ByteBuf;
@ -150,11 +149,11 @@ public class StructureTransform {
}
public void apply(BlockEntity be) {
ContraptionTransformableRegistry.TransformableBlockEntity transformableBlockEntity = ContraptionTransformableRegistryImpl.get(be.getType());
TransformableBlockEntity transformableBlockEntity = ContraptionTransformableRegistryImpl.get(be.getType());
if (transformableBlockEntity != null) {
transformableBlockEntity.transform(be, this);
} else if (be instanceof ITransformableBlockEntity itbe) {
itbe.transform(this);
} else if (be instanceof TransformableBlockEntity itbe) {
itbe.transform(be, this);
}
}
@ -165,10 +164,10 @@ public class StructureTransform {
*/
public BlockState apply(BlockState state) {
Block block = state.getBlock();
ContraptionTransformableRegistry.TransformableBlock transformableBlock = ContraptionTransformableRegistryImpl.get(block);
TransformableBlock transformableBlock = ContraptionTransformableRegistryImpl.get(block);
if (transformableBlock != null) {
return transformableBlock.transform(block, state, this);
} else if (block instanceof ITransformableBlock transformable) {
return transformableBlock.transform(state, this);
} else if (block instanceof TransformableBlock transformable) {
return transformable.transform(state, this);
}

View file

@ -3,7 +3,7 @@ package com.simibubi.create.content.contraptions.chassis;
import com.simibubi.create.AllBlockEntityTypes;
import com.simibubi.create.AllItems;
import com.simibubi.create.AllSoundEvents;
import com.simibubi.create.api.contraption.transformable.ITransformableBlock;
import com.simibubi.create.api.contraption.transformable.TransformableBlock;
import com.simibubi.create.content.contraptions.StructureTransform;
import com.simibubi.create.content.equipment.wrench.IWrenchable;
import com.simibubi.create.foundation.block.IBE;
@ -29,7 +29,7 @@ import net.minecraft.world.phys.Vec3;
import net.neoforged.neoforge.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) {
super(properties);

View file

@ -10,7 +10,7 @@ import com.mojang.serialization.MapCodec;
import com.simibubi.create.AllBlockEntityTypes;
import com.simibubi.create.AllBlocks;
import com.simibubi.create.AllItems;
import com.simibubi.create.api.schematic.requirement.ISpecialBlockItemRequirement;
import com.simibubi.create.api.schematic.requirement.SpecialBlockItemRequirement;
import com.simibubi.create.content.contraptions.elevator.ElevatorColumn.ColumnCoords;
import com.simibubi.create.content.redstone.contact.RedstoneContactBlock;
import com.simibubi.create.content.redstone.diodes.BrassDiodeBlock;
@ -52,7 +52,7 @@ import net.neoforged.api.distmarker.Dist;
import net.neoforged.api.distmarker.OnlyIn;
public class ElevatorContactBlock extends WrenchableDirectionalBlock
implements IBE<ElevatorContactBlockEntity>, ISpecialBlockItemRequirement {
implements IBE<ElevatorContactBlockEntity>, SpecialBlockItemRequirement {
public static final BooleanProperty POWERED = BlockStateProperties.POWERED;
public static final BooleanProperty CALLING = BooleanProperty.create("calling");

View file

@ -12,7 +12,7 @@ import com.simibubi.create.AllBlocks;
import com.simibubi.create.AllEntityTypes;
import com.simibubi.create.AllItems;
import com.simibubi.create.AllSoundEvents;
import com.simibubi.create.api.schematic.requirement.ISpecialEntityItemRequirement;
import com.simibubi.create.api.schematic.requirement.SpecialEntityItemRequirement;
import com.simibubi.create.content.contraptions.BlockMovementChecks;
import com.simibubi.create.content.contraptions.bearing.BearingBlock;
import com.simibubi.create.content.contraptions.chassis.AbstractChassisBlock;
@ -55,7 +55,7 @@ import net.minecraft.world.level.material.PushReaction;
import net.minecraft.world.phys.AABB;
import net.minecraft.world.phys.Vec3;
public class SuperGlueEntity extends Entity implements IEntityWithComplexSpawn, ISpecialEntityItemRequirement {
public class SuperGlueEntity extends Entity implements IEntityWithComplexSpawn, SpecialEntityItemRequirement {
public static AABB span(BlockPos startPos, BlockPos endPos) {
return new AABB(Vec3.atLowerCornerOf(startPos), Vec3.atLowerCornerOf(endPos)).expandTowards(1, 1, 1);

View file

@ -12,9 +12,9 @@ import com.mojang.serialization.MapCodec;
import com.simibubi.create.AllBlockEntityTypes;
import com.simibubi.create.AllBlocks;
import com.simibubi.create.AllShapes;
import com.simibubi.create.api.schematic.requirement.SpecialBlockItemRequirement;
import com.simibubi.create.content.equipment.wrench.IWrenchable;
import com.simibubi.create.content.redstone.rail.ControllerRailBlock;
import com.simibubi.create.api.schematic.requirement.ISpecialBlockItemRequirement;
import com.simibubi.create.content.schematics.requirement.ItemRequirement;
import com.simibubi.create.content.schematics.requirement.ItemRequirement.ItemUseType;
import com.simibubi.create.foundation.block.IBE;
@ -64,7 +64,7 @@ import net.minecraft.world.phys.shapes.Shapes;
import net.minecraft.world.phys.shapes.VoxelShape;
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 BACKWARDS = BooleanProperty.create("backwards");

View file

@ -3,9 +3,9 @@ package com.simibubi.create.content.decoration.copycat;
import java.util.List;
import com.simibubi.create.AllBlocks;
import com.simibubi.create.api.contraption.transformable.ITransformableBlockEntity;
import com.simibubi.create.api.schematic.nbt.IPartialSafeNBT;
import com.simibubi.create.api.schematic.requirement.ISpecialBlockEntityItemRequirement;
import com.simibubi.create.api.contraption.transformable.TransformableBlockEntity;
import com.simibubi.create.api.schematic.nbt.PartialSafeNBT;
import com.simibubi.create.api.schematic.requirement.SpecialBlockEntityItemRequirement;
import com.simibubi.create.content.contraptions.StructureTransform;
import com.simibubi.create.content.redstone.RoseQuartzLampBlock;
import com.simibubi.create.content.schematics.requirement.ItemRequirement;
@ -22,6 +22,7 @@ import net.minecraft.nbt.CompoundTag;
import net.minecraft.nbt.NbtUtils;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.block.TrapDoorBlock;
import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.level.block.entity.BlockEntityType;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.block.state.properties.BlockStateProperties;
@ -29,7 +30,7 @@ import net.minecraft.world.level.block.state.properties.BlockStateProperties;
import net.neoforged.neoforge.client.model.data.ModelData;
public class CopycatBlockEntity extends SmartBlockEntity
implements ISpecialBlockEntityItemRequirement, ITransformableBlockEntity, IPartialSafeNBT {
implements SpecialBlockEntityItemRequirement, TransformableBlockEntity, PartialSafeNBT {
private BlockState material;
private ItemStack consumedItem;
@ -129,7 +130,7 @@ public class CopycatBlockEntity extends SmartBlockEntity
}
@Override
public void transform(StructureTransform transform) {
public void transform(BlockEntity be, StructureTransform transform) {
material = transform.apply(material);
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.AllBlocks;
import com.simibubi.create.AllShapes;
import com.simibubi.create.api.schematic.requirement.SpecialBlockItemRequirement;
import com.simibubi.create.content.equipment.wrench.IWrenchable;
import com.simibubi.create.content.kinetics.base.HorizontalAxisKineticBlock;
import com.simibubi.create.content.kinetics.base.KineticBlockEntity;
import com.simibubi.create.api.schematic.requirement.ISpecialBlockItemRequirement;
import com.simibubi.create.content.schematics.requirement.ItemRequirement;
import com.simibubi.create.foundation.block.IBE;
@ -37,7 +37,7 @@ import net.minecraft.world.phys.shapes.Shapes;
import net.minecraft.world.phys.shapes.VoxelShape;
public class GirderEncasedShaftBlock extends HorizontalAxisKineticBlock
implements IBE<KineticBlockEntity>, SimpleWaterloggedBlock, IWrenchable, ISpecialBlockItemRequirement {
implements IBE<KineticBlockEntity>, SimpleWaterloggedBlock, IWrenchable, SpecialBlockItemRequirement {
public static final BooleanProperty TOP = GirderBlock.TOP;
public static final BooleanProperty BOTTOM = GirderBlock.BOTTOM;

View file

@ -7,10 +7,10 @@ import com.simibubi.create.AllBlockEntityTypes;
import com.simibubi.create.AllBlocks;
import com.simibubi.create.AllShapes;
import com.simibubi.create.AllSoundEvents;
import com.simibubi.create.api.schematic.requirement.SpecialBlockItemRequirement;
import com.simibubi.create.content.equipment.wrench.IWrenchable;
import com.simibubi.create.content.logistics.filter.FilterItem;
import com.simibubi.create.content.logistics.filter.FilterItemStack;
import com.simibubi.create.api.schematic.requirement.ISpecialBlockItemRequirement;
import com.simibubi.create.content.schematics.requirement.ItemRequirement;
import com.simibubi.create.content.schematics.requirement.ItemRequirement.ItemUseType;
import com.simibubi.create.foundation.block.IBE;
@ -43,12 +43,13 @@ import net.minecraft.world.level.material.FluidState;
import net.minecraft.world.phys.BlockHitResult;
import net.minecraft.world.phys.shapes.CollisionContext;
import net.minecraft.world.phys.shapes.VoxelShape;
import net.neoforged.neoforge.items.ItemHandlerHelper;
import org.jetbrains.annotations.NotNull;
public class PlacardBlock extends FaceAttachedHorizontalDirectionalBlock
implements ProperWaterloggedBlock, IBE<PlacardBlockEntity>, ISpecialBlockItemRequirement, IWrenchable {
implements ProperWaterloggedBlock, IBE<PlacardBlockEntity>, SpecialBlockItemRequirement, IWrenchable {
public static final BooleanProperty POWERED = BlockStateProperties.POWERED;

View file

@ -7,7 +7,7 @@ import com.simibubi.create.AllBlockEntityTypes;
import com.simibubi.create.AllDataComponents;
import com.simibubi.create.AllEnchantments;
import com.simibubi.create.AllShapes;
import com.simibubi.create.api.schematic.requirement.ISpecialBlockItemRequirement;
import com.simibubi.create.api.schematic.requirement.SpecialBlockItemRequirement;
import com.simibubi.create.content.kinetics.base.HorizontalKineticBlock;
import com.simibubi.create.content.schematics.requirement.ItemRequirement;
import com.simibubi.create.content.schematics.requirement.ItemRequirement.ItemUseType;
@ -51,7 +51,7 @@ import net.minecraft.world.phys.shapes.VoxelShape;
import net.neoforged.neoforge.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) {
super(properties);

View file

@ -10,8 +10,8 @@ import javax.annotation.Nullable;
import com.simibubi.create.AllEntityTypes;
import com.simibubi.create.AllItems;
import com.simibubi.create.api.schematic.requirement.SpecialEntityItemRequirement;
import com.simibubi.create.content.logistics.filter.FilterItemStack;
import com.simibubi.create.api.schematic.requirement.ISpecialEntityItemRequirement;
import com.simibubi.create.content.schematics.requirement.ItemRequirement;
import com.simibubi.create.content.schematics.requirement.ItemRequirement.ItemUseType;
import com.simibubi.create.foundation.networking.ISyncPersistentData;
@ -58,6 +58,7 @@ import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.phys.AABB;
import net.minecraft.world.phys.HitResult;
import net.minecraft.world.phys.Vec3;
import net.neoforged.api.distmarker.Dist;
import net.neoforged.api.distmarker.OnlyIn;
import net.neoforged.neoforge.common.CommonHooks;
@ -69,7 +70,7 @@ import net.neoforged.neoforge.items.ItemStackHandler;
import net.neoforged.neoforge.items.wrapper.InvWrapper;
public class BlueprintEntity extends HangingEntity
implements IEntityWithComplexSpawn, ISpecialEntityItemRequirement, ISyncPersistentData, IInteractionChecker {
implements IEntityWithComplexSpawn, SpecialEntityItemRequirement, ISyncPersistentData, IInteractionChecker {
protected int size;
protected Direction verticalOrientation;

View file

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

View file

@ -12,7 +12,7 @@ import org.jetbrains.annotations.NotNull;
import com.mojang.serialization.MapCodec;
import com.simibubi.create.AllBlockEntityTypes;
import com.simibubi.create.AllBlocks;
import com.simibubi.create.api.contraption.transformable.ITransformableBlock;
import com.simibubi.create.api.contraption.transformable.TransformableBlock;
import com.simibubi.create.content.contraptions.StructureTransform;
import com.simibubi.create.content.decoration.bracket.BracketedBlockEntityBehaviour;
import com.simibubi.create.content.decoration.encasing.EncasableBlock;
@ -60,7 +60,7 @@ import net.minecraft.world.phys.shapes.VoxelShape;
import net.minecraft.world.ticks.TickPriority;
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);

View file

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

View file

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

View file

@ -1,6 +1,6 @@
package com.simibubi.create.content.kinetics.base;
import com.simibubi.create.api.contraption.transformable.ITransformableBlock;
import com.simibubi.create.api.contraption.transformable.TransformableBlock;
import com.simibubi.create.content.contraptions.StructureTransform;
import net.createmod.catnip.data.Iterate;
@ -16,7 +16,7 @@ import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.block.state.StateDefinition.Builder;
import net.minecraft.world.level.block.state.properties.BooleanProperty;
public abstract class DirectionalAxisKineticBlock extends DirectionalKineticBlock implements ITransformableBlock {
public abstract class DirectionalAxisKineticBlock extends DirectionalKineticBlock implements TransformableBlock {
public static final BooleanProperty AXIS_ALONG_FIRST_COORDINATE = BooleanProperty.create("axis_along_first");

View file

@ -11,8 +11,8 @@ import org.apache.commons.lang3.mutable.MutableBoolean;
import com.simibubi.create.AllBlockEntityTypes;
import com.simibubi.create.AllBlocks;
import com.simibubi.create.AllItems;
import com.simibubi.create.api.contraption.transformable.ITransformableBlock;
import com.simibubi.create.api.schematic.requirement.ISpecialBlockItemRequirement;
import com.simibubi.create.api.contraption.transformable.TransformableBlock;
import com.simibubi.create.api.schematic.requirement.SpecialBlockItemRequirement;
import com.simibubi.create.content.contraptions.StructureTransform;
import com.simibubi.create.content.equipment.armor.DivingBootsItem;
import com.simibubi.create.content.fluids.transfer.GenericItemEmptying;
@ -89,12 +89,13 @@ import net.minecraft.world.phys.shapes.EntityCollisionContext;
import net.minecraft.world.phys.shapes.Shapes;
import net.minecraft.world.phys.shapes.VoxelShape;
import net.neoforged.neoforge.capabilities.Capabilities;
import net.neoforged.neoforge.common.Tags;
import net.neoforged.neoforge.items.IItemHandler;
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<BeltPart> PART = EnumProperty.create("part", BeltPart.class);

View file

@ -13,7 +13,7 @@ import java.util.function.Consumer;
import javax.annotation.Nullable;
import com.simibubi.create.AllDataComponents;
import com.simibubi.create.api.contraption.transformable.ITransformableBlockEntity;
import com.simibubi.create.api.contraption.transformable.TransformableBlockEntity;
import com.simibubi.create.content.contraptions.StructureTransform;
import com.simibubi.create.content.kinetics.base.IRotate;
import com.simibubi.create.content.kinetics.base.KineticBlockEntity;
@ -52,12 +52,13 @@ import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.Items;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.Blocks;
import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.level.block.entity.BlockEntityType;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.phys.AABB;
import net.minecraft.world.phys.Vec3;
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) {
}
@ -784,7 +785,7 @@ public class ChainConveyorBlockEntity extends KineticBlockEntity implements ITra
}
@Override
public void transform(StructureTransform transform) {
public void transform(BlockEntity be, StructureTransform transform) {
if (connections == null || connections.isEmpty())
return;

View file

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

View file

@ -6,7 +6,7 @@ import java.util.List;
import javax.annotation.Nullable;
import com.simibubi.create.Create;
import com.simibubi.create.api.contraption.transformable.ITransformableBlockEntity;
import com.simibubi.create.api.contraption.transformable.TransformableBlockEntity;
import com.simibubi.create.content.contraptions.StructureTransform;
import com.simibubi.create.content.kinetics.base.KineticBlockEntity;
import com.simibubi.create.content.kinetics.mechanicalArm.AllArmInteractionPointTypes.JukeboxPoint;
@ -51,7 +51,7 @@ import net.minecraft.world.level.chunk.ChunkSource;
import net.minecraft.world.phys.AABB;
import net.minecraft.world.phys.Vec3;
public class ArmBlockEntity extends KineticBlockEntity implements ITransformableBlockEntity {
public class ArmBlockEntity extends KineticBlockEntity implements TransformableBlockEntity {
// Server
List<ArmInteractionPoint> inputs;
@ -420,7 +420,7 @@ public class ArmBlockEntity extends KineticBlockEntity implements ITransformable
}
@Override
public void transform(StructureTransform transform) {
public void transform(BlockEntity be, StructureTransform transform) {
if (interactionPointTag == null)
return;

View file

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

View file

@ -4,7 +4,8 @@ import java.util.function.Supplier;
import com.simibubi.create.AllBlockEntityTypes;
import com.simibubi.create.AllBlocks;
import com.simibubi.create.api.contraption.transformable.ITransformableBlock;
import com.simibubi.create.api.contraption.transformable.TransformableBlock;
import com.simibubi.create.api.schematic.requirement.SpecialBlockItemRequirement;
import com.simibubi.create.content.contraptions.StructureTransform;
import com.simibubi.create.content.decoration.encasing.EncasedBlock;
import com.simibubi.create.content.equipment.wrench.IWrenchable;
@ -14,7 +15,6 @@ import com.simibubi.create.content.kinetics.base.RotatedPillarKineticBlock;
import com.simibubi.create.content.kinetics.simpleRelays.CogWheelBlock;
import com.simibubi.create.content.kinetics.simpleRelays.ICogWheel;
import com.simibubi.create.content.kinetics.simpleRelays.SimpleKineticBlockEntity;
import com.simibubi.create.api.schematic.requirement.ISpecialBlockItemRequirement;
import com.simibubi.create.content.schematics.requirement.ItemRequirement;
import com.simibubi.create.foundation.block.IBE;
@ -45,7 +45,7 @@ import net.minecraft.world.phys.BlockHitResult;
import net.minecraft.world.phys.HitResult;
public class EncasedCogwheelBlock extends RotatedPillarKineticBlock
implements ICogWheel, IBE<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 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.AllBlocks;
import com.simibubi.create.api.schematic.requirement.SpecialBlockItemRequirement;
import com.simibubi.create.content.decoration.encasing.EncasedBlock;
import com.simibubi.create.content.kinetics.base.AbstractEncasedShaftBlock;
import com.simibubi.create.content.kinetics.base.KineticBlockEntity;
import com.simibubi.create.content.kinetics.base.RotatedPillarKineticBlock;
import com.simibubi.create.api.schematic.requirement.ISpecialBlockItemRequirement;
import com.simibubi.create.content.schematics.requirement.ItemRequirement;
import com.simibubi.create.foundation.block.IBE;
@ -30,7 +30,7 @@ import net.minecraft.world.phys.BlockHitResult;
import net.minecraft.world.phys.HitResult;
public class EncasedShaftBlock extends AbstractEncasedShaftBlock
implements IBE<KineticBlockEntity>, ISpecialBlockItemRequirement, EncasedBlock {
implements IBE<KineticBlockEntity>, SpecialBlockItemRequirement, EncasedBlock {
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.AllItems;
import com.simibubi.create.api.contraption.transformable.ITransformableBlock;
import com.simibubi.create.api.contraption.transformable.TransformableBlock;
import com.simibubi.create.content.contraptions.StructureTransform;
import com.simibubi.create.content.kinetics.base.HorizontalAxisKineticBlock;
import com.simibubi.create.content.kinetics.base.KineticBlock;
@ -35,10 +35,11 @@ import net.minecraft.world.level.block.state.StateDefinition.Builder;
import net.minecraft.world.level.block.state.properties.BooleanProperty;
import net.minecraft.world.level.block.state.properties.IntegerProperty;
import net.minecraft.world.phys.BlockHitResult;
import net.neoforged.api.distmarker.Dist;
import net.neoforged.api.distmarker.OnlyIn;
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 IntegerProperty STATE = IntegerProperty.create("state", 0, 5);

View file

@ -10,7 +10,7 @@ import com.simibubi.create.AllBlockEntityTypes;
import com.simibubi.create.AllBlocks;
import com.simibubi.create.AllShapes;
import com.simibubi.create.AllSoundEvents;
import com.simibubi.create.api.schematic.requirement.ISpecialBlockItemRequirement;
import com.simibubi.create.api.schematic.requirement.SpecialBlockItemRequirement;
import com.simibubi.create.content.equipment.wrench.IWrenchable;
import com.simibubi.create.content.logistics.packagerLink.LogisticallyLinkedBlockItem;
import com.simibubi.create.content.schematics.requirement.ItemRequirement;
@ -63,11 +63,12 @@ import net.minecraft.world.phys.shapes.EntityCollisionContext;
import net.minecraft.world.phys.shapes.Shapes;
import net.minecraft.world.phys.shapes.VoxelShape;
import net.neoforged.neoforge.common.NeoForge;
import net.neoforged.neoforge.event.level.BlockEvent;
public class FactoryPanelBlock extends FaceAttachedHorizontalDirectionalBlock
implements ProperWaterloggedBlock, IBE<FactoryPanelBlockEntity>, IWrenchable, ISpecialBlockItemRequirement {
implements ProperWaterloggedBlock, IBE<FactoryPanelBlockEntity>, IWrenchable, SpecialBlockItemRequirement {
public static final MapCodec<FactoryPanelBlock> CODEC = simpleCodec(FactoryPanelBlock::new);
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.AllShapes;
import com.simibubi.create.api.schematic.requirement.SpecialBlockItemRequirement;
import com.simibubi.create.content.kinetics.belt.BeltBlock;
import com.simibubi.create.content.kinetics.belt.BeltSlope;
import com.simibubi.create.content.kinetics.belt.behaviour.DirectBeltInputBehaviour;
import com.simibubi.create.api.schematic.requirement.ISpecialBlockItemRequirement;
import com.simibubi.create.content.schematics.requirement.ItemRequirement;
import com.simibubi.create.foundation.advancement.AllAdvancements;
import com.simibubi.create.foundation.block.ProperWaterloggedBlock;
import com.simibubi.create.foundation.blockEntity.behaviour.BlockEntityBehaviour;
import com.tterrag.registrate.util.entry.BlockEntry;
import net.createmod.catnip.math.VoxelShaper;
import net.createmod.catnip.lang.Lang;
import net.createmod.catnip.math.VoxelShaper;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.util.StringRepresentable;
@ -37,7 +37,7 @@ import net.minecraft.world.phys.shapes.CollisionContext;
import net.minecraft.world.phys.shapes.EntityCollisionContext;
import net.minecraft.world.phys.shapes.VoxelShape;
public class BeltFunnelBlock extends AbstractHorizontalFunnelBlock implements ISpecialBlockItemRequirement {
public class BeltFunnelBlock extends AbstractHorizontalFunnelBlock implements SpecialBlockItemRequirement {
private BlockEntry<? extends FunnelBlock> parent;

View file

@ -3,7 +3,7 @@ package com.simibubi.create.content.redstone;
import javax.annotation.Nullable;
import com.mojang.serialization.MapCodec;
import com.simibubi.create.api.contraption.transformable.ITransformableBlock;
import com.simibubi.create.api.contraption.transformable.TransformableBlock;
import com.simibubi.create.content.contraptions.StructureTransform;
import com.simibubi.create.content.equipment.wrench.IWrenchable;
@ -20,7 +20,7 @@ import net.minecraft.world.level.block.state.properties.EnumProperty;
import org.jetbrains.annotations.NotNull;
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);

View file

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

View file

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

View file

@ -8,10 +8,12 @@ import java.util.stream.Stream;
import org.jetbrains.annotations.Nullable;
import com.simibubi.create.api.schematic.requirement.ISpecialBlockEntityItemRequirement;
import com.simibubi.create.api.schematic.requirement.ISpecialBlockItemRequirement;
import com.simibubi.create.api.schematic.requirement.ISpecialEntityItemRequirement;
import com.simibubi.create.api.schematic.requirement.SchematicRequirementsRegistry;
import com.simibubi.create.api.schematic.requirement.SchematicRequirementsRegistry.ContextProvidingBlockEntityRequirement;
import com.simibubi.create.api.schematic.requirement.SchematicRequirementsRegistry.ContextProvidingBlockRequirement;
import com.simibubi.create.api.schematic.requirement.SchematicRequirementsRegistry.ContextProvidingEntityRequirement;
import com.simibubi.create.api.schematic.requirement.SpecialBlockEntityItemRequirement;
import com.simibubi.create.api.schematic.requirement.SpecialBlockItemRequirement;
import com.simibubi.create.api.schematic.requirement.SpecialEntityItemRequirement;
import com.simibubi.create.compat.framedblocks.FramedBlocksInSchematics;
import com.simibubi.create.foundation.data.recipe.Mods;
import com.simibubi.create.impl.schematic.requirement.SchematicRequirementsRegistryImpl;
@ -70,20 +72,20 @@ public class ItemRequirement {
Block block = state.getBlock();
ItemRequirement requirement;
SchematicRequirementsRegistry.BlockRequirement blockItemRequirement = SchematicRequirementsRegistryImpl.getRequirementForBlock(block);
ContextProvidingBlockRequirement blockItemRequirement = SchematicRequirementsRegistryImpl.getRequirementForBlock(block);
if (blockItemRequirement != null) {
requirement = blockItemRequirement.getRequiredItems(block, state, be);
} else if (block instanceof ISpecialBlockItemRequirement specialBlock) {
requirement = blockItemRequirement.getRequiredItems(state, be);
} else if (block instanceof SpecialBlockItemRequirement specialBlock) {
requirement = specialBlock.getRequiredItems(state, be);
} else {
requirement = defaultOf(state, be);
}
if (be != null) {
SchematicRequirementsRegistry.BlockEntityRequirement blockEntityItemRequirement = SchematicRequirementsRegistryImpl.getRequirementForBlockEntityType(be.getType());
ContextProvidingBlockEntityRequirement blockEntityItemRequirement = SchematicRequirementsRegistryImpl.getRequirementForBlockEntityType(be.getType());
if (blockEntityItemRequirement != null) {
requirement = requirement.union(blockEntityItemRequirement.getRequiredItems(be, state));
} else if (be instanceof ISpecialBlockEntityItemRequirement specialBE) {
requirement = requirement.union(blockEntityItemRequirement.getRequiredItems(be));
} else if (be instanceof SpecialBlockEntityItemRequirement specialBE) {
requirement = requirement.union(specialBE.getRequiredItems(state));
} else if (com.simibubi.create.compat.Mods.FRAMEDBLOCKS.contains(block)) {
requirement = requirement.union(FramedBlocksInSchematics.getRequiredItems(state, be));
@ -133,10 +135,10 @@ public class ItemRequirement {
}
public static ItemRequirement of(Entity entity) {
SchematicRequirementsRegistry.EntityRequirement entityItemRequirement = SchematicRequirementsRegistryImpl.getRequirementForEntityType(entity.getType());
ContextProvidingEntityRequirement entityItemRequirement = SchematicRequirementsRegistryImpl.getRequirementForEntityType(entity.getType());
if (entityItemRequirement != null) {
return entityItemRequirement.getRequiredItems(entity);
} else if (entity instanceof ISpecialEntityItemRequirement specialEntity) {
} else if (entity instanceof SpecialEntityItemRequirement specialEntity) {
return specialEntity.getRequiredItems();
}

View file

@ -9,6 +9,10 @@ import java.util.function.Function;
import javax.annotation.Nullable;
import com.simibubi.create.api.schematic.requirement.SpecialBlockItemRequirement;
import net.createmod.catnip.registry.RegisteredObjectsHelper;
import org.jetbrains.annotations.ApiStatus;
import org.jetbrains.annotations.NotNull;
@ -17,7 +21,6 @@ import com.google.common.collect.ImmutableSet;
import com.simibubi.create.AllBlocks;
import com.simibubi.create.AllBogeyStyles;
import com.simibubi.create.AllItems;
import com.simibubi.create.api.schematic.requirement.ISpecialBlockItemRequirement;
import com.simibubi.create.content.equipment.wrench.IWrenchable;
import com.simibubi.create.content.schematics.requirement.ItemRequirement;
import com.simibubi.create.content.trains.entity.Carriage;
@ -30,7 +33,6 @@ import com.simibubi.create.foundation.block.ProperWaterloggedBlock;
import com.simibubi.create.foundation.utility.CreateLang;
import net.createmod.catnip.data.Iterate;
import net.createmod.catnip.registry.RegisteredObjectsHelper;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.core.registries.BuiltInRegistries;
@ -59,11 +61,10 @@ import net.minecraft.world.level.material.FluidState;
import net.minecraft.world.phys.BlockHitResult;
import net.minecraft.world.phys.Vec3;
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 StreamCodec<RegistryFriendlyByteBuf, AbstractBogeyBlock<?>> STREAM_CODEC = ByteBufCodecs.registry(Registries.BLOCK).map(
block -> (AbstractBogeyBlock<?>) block, Function.identity()
);
public static final EnumProperty<Direction.Axis> AXIS = BlockStateProperties.HORIZONTAL_AXIS;
static final List<ResourceLocation> BOGEYS = new ArrayList<>();
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.AllBlocks;
import com.simibubi.create.AllBogeyStyles;
import com.simibubi.create.api.schematic.requirement.ISpecialBlockItemRequirement;
import com.simibubi.create.api.schematic.requirement.SpecialBlockItemRequirement;
import com.simibubi.create.content.trains.track.TrackMaterial;
import com.simibubi.create.foundation.block.IBE;
import com.simibubi.create.foundation.block.ProperWaterloggedBlock;
@ -18,7 +18,7 @@ import net.minecraft.world.phys.HitResult;
import net.minecraft.world.phys.Vec3;
public class StandardBogeyBlock extends AbstractBogeyBlock<StandardBogeyBlockEntity>
implements IBE<StandardBogeyBlockEntity>, ProperWaterloggedBlock, ISpecialBlockItemRequirement {
implements IBE<StandardBogeyBlockEntity>, ProperWaterloggedBlock, SpecialBlockItemRequirement {
public StandardBogeyBlock(Properties props, BogeySizes.BogeySize size) {
super(props, size);

View file

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

View file

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

View file

@ -4,7 +4,7 @@ import java.util.List;
import javax.annotation.Nullable;
import com.simibubi.create.api.contraption.transformable.ITransformableBlockEntity;
import com.simibubi.create.api.contraption.transformable.TransformableBlockEntity;
import com.simibubi.create.content.contraptions.StructureTransform;
import com.simibubi.create.content.trains.graph.EdgePointType;
import com.simibubi.create.content.trains.signal.SignalBlock.SignalType;
@ -16,12 +16,13 @@ import net.createmod.catnip.nbt.NBTHelper;
import net.minecraft.core.BlockPos;
import net.minecraft.core.HolderLookup;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.level.block.entity.BlockEntityType;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.phys.AABB;
import net.minecraft.world.phys.Vec3;
public class SignalBlockEntity extends SmartBlockEntity implements ITransformableBlockEntity {
public class SignalBlockEntity extends SmartBlockEntity implements TransformableBlockEntity {
public static enum OverlayState {
RENDER, SKIP, DUAL
@ -162,8 +163,8 @@ public class SignalBlockEntity extends SmartBlockEntity implements ITransformabl
}
@Override
public void transform(StructureTransform transform) {
edgePoint.transform(transform);
public void transform(BlockEntity be, StructureTransform transform) {
edgePoint.transform(be, transform);
}
}

View file

@ -20,10 +20,10 @@ import com.simibubi.create.AllItems;
import com.simibubi.create.AllSoundEvents;
import com.simibubi.create.Create;
import com.simibubi.create.compat.Mods;
import com.simibubi.create.api.contraption.transformable.TransformableBlockEntity;
import com.simibubi.create.compat.computercraft.AbstractComputerBehaviour;
import com.simibubi.create.compat.computercraft.ComputerCraftProxy;
import com.simibubi.create.content.contraptions.AssemblyException;
import com.simibubi.create.api.contraption.transformable.ITransformableBlockEntity;
import com.simibubi.create.content.contraptions.StructureTransform;
import com.simibubi.create.content.decoration.slidingDoor.DoorControlBehaviour;
import com.simibubi.create.content.equipment.wrench.IWrenchable;
@ -56,6 +56,8 @@ import com.simibubi.create.foundation.advancement.AllAdvancements;
import com.simibubi.create.foundation.block.ProperWaterloggedBlock;
import com.simibubi.create.foundation.blockEntity.SmartBlockEntity;
import com.simibubi.create.foundation.blockEntity.behaviour.BlockEntityBehaviour;
import dan200.computercraft.api.peripheral.PeripheralCapability;
import net.createmod.catnip.platform.CatnipServices;
import com.simibubi.create.foundation.utility.CreateLang;
import com.simibubi.create.infrastructure.config.AllConfigs;
@ -92,12 +94,13 @@ import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.levelgen.structure.BoundingBox;
import net.minecraft.world.phys.AABB;
import net.minecraft.world.phys.Vec3;
import net.neoforged.api.distmarker.Dist;
import net.neoforged.api.distmarker.OnlyIn;
import net.neoforged.neoforge.capabilities.Capabilities;
import net.neoforged.neoforge.capabilities.RegisterCapabilitiesEvent;
public class StationBlockEntity extends SmartBlockEntity implements ITransformableBlockEntity {
public class StationBlockEntity extends SmartBlockEntity implements TransformableBlockEntity {
public TrackTargetingBehaviour<GlobalStation> edgePoint;
public DoorControlBehaviour doorControls;
@ -977,8 +980,8 @@ public class StationBlockEntity extends SmartBlockEntity implements ITransformab
}
@Override
public void transform(StructureTransform transform) {
edgePoint.transform(transform);
public void transform(BlockEntity be, StructureTransform transform) {
edgePoint.transform(be, transform);
}
// Package port integration

View file

@ -18,7 +18,6 @@ import java.util.Map.Entry;
import java.util.Random;
import java.util.Set;
import net.minecraft.network.chat.Component;
import org.jetbrains.annotations.Nullable;
import com.google.common.base.Predicates;
@ -28,7 +27,7 @@ import com.simibubi.create.AllBlocks;
import com.simibubi.create.AllPartialModels;
import com.simibubi.create.AllShapes;
import com.simibubi.create.AllTags;
import com.simibubi.create.api.schematic.requirement.ISpecialBlockItemRequirement;
import com.simibubi.create.api.schematic.requirement.SpecialBlockItemRequirement;
import com.simibubi.create.content.decoration.girder.GirderBlock;
import com.simibubi.create.content.equipment.wrench.IWrenchable;
import com.simibubi.create.content.schematics.requirement.ItemRequirement;
@ -51,15 +50,16 @@ import it.unimi.dsi.fastutil.objects.Object2IntArrayMap;
import it.unimi.dsi.fastutil.objects.Object2IntMap;
import net.createmod.catnip.data.Iterate;
import net.createmod.catnip.data.Pair;
import net.createmod.catnip.math.VecHelper;
import net.createmod.catnip.math.AngleHelper;
import net.createmod.catnip.math.BlockFace;
import net.createmod.catnip.math.VecHelper;
import net.minecraft.ChatFormatting;
import net.minecraft.client.multiplayer.ClientLevel;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.core.Direction.Axis;
import net.minecraft.core.Direction.AxisDirection;
import net.minecraft.network.chat.Component;
import net.minecraft.network.chat.MutableComponent;
import net.minecraft.resources.ResourceKey;
import net.minecraft.server.level.ServerLevel;
@ -104,7 +104,7 @@ import net.neoforged.api.distmarker.Dist;
import net.neoforged.api.distmarker.OnlyIn;
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 BooleanProperty HAS_BE = BooleanProperty.create("turn");

View file

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

View file

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

View file

@ -9,14 +9,14 @@ import java.util.function.Consumer;
import org.jetbrains.annotations.NotNull;
import com.simibubi.create.api.event.BlockEntityBehaviourEvent;
import com.simibubi.create.api.schematic.requirement.ISpecialBlockEntityItemRequirement;
import com.simibubi.create.api.schematic.nbt.PartialSafeNBT;
import com.simibubi.create.api.schematic.requirement.SpecialBlockEntityItemRequirement;
import com.simibubi.create.content.schematics.requirement.ItemRequirement;
import com.simibubi.create.foundation.advancement.AdvancementBehaviour;
import com.simibubi.create.foundation.advancement.CreateAdvancement;
import com.simibubi.create.foundation.blockEntity.behaviour.BehaviourType;
import com.simibubi.create.foundation.blockEntity.behaviour.BlockEntityBehaviour;
import com.simibubi.create.foundation.utility.IInteractionChecker;
import com.simibubi.create.api.schematic.nbt.IPartialSafeNBT;
import it.unimi.dsi.fastutil.objects.Reference2ObjectArrayMap;
import net.createmod.ponder.api.VirtualBlockEntity;
@ -27,10 +27,11 @@ import net.minecraft.network.RegistryFriendlyByteBuf;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.level.block.entity.BlockEntityType;
import net.minecraft.world.level.block.state.BlockState;
import net.neoforged.neoforge.common.NeoForge;
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 boolean initialized = false;

View file

@ -7,7 +7,7 @@ import javax.annotation.Nullable;
import com.simibubi.create.AllBlocks;
import com.simibubi.create.AllTags.AllBlockTags;
import com.simibubi.create.api.schematic.nbt.IPartialSafeNBT;
import com.simibubi.create.api.schematic.nbt.PartialSafeNBT;
import com.simibubi.create.api.schematic.nbt.SchematicSafeNBTRegistry;
import com.simibubi.create.compat.Mods;
import com.simibubi.create.compat.framedblocks.FramedBlocksInSchematics;
@ -63,6 +63,7 @@ import net.minecraft.world.level.block.state.properties.SlabType;
import net.minecraft.world.level.chunk.LevelChunk;
import net.minecraft.world.level.chunk.LevelChunkSection;
import net.minecraft.world.level.material.FluidState;
import net.minecraft.world.phys.BlockHitResult;
import net.neoforged.neoforge.common.NeoForge;
import net.neoforged.neoforge.common.SpecialPlantable;
@ -299,7 +300,7 @@ public class BlockHelper {
} else if (safeNBT != null) {
data = new CompoundTag();
safeNBT.writeSafe(blockEntity, data, access);
} else if (blockEntity instanceof IPartialSafeNBT safeNbtBE) {
} else if (blockEntity instanceof PartialSafeNBT safeNbtBE) {
data = new CompoundTag();
safeNbtBE.writeSafe(data, access);
} 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,8 +2,8 @@ package com.simibubi.create.impl.contraption.transformable;
import org.jetbrains.annotations.ApiStatus;
import com.simibubi.create.api.contraption.transformable.ContraptionTransformableRegistry.TransformableBlock;
import com.simibubi.create.api.contraption.transformable.ContraptionTransformableRegistry.TransformableBlockEntity;
import com.simibubi.create.api.contraption.transformable.TransformableBlock;
import com.simibubi.create.api.contraption.transformable.TransformableBlockEntity;
import com.simibubi.create.foundation.utility.AttachedRegistry;
import net.minecraft.core.registries.BuiltInRegistries;

View file

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