mirror of
https://github.com/Jozufozu/Flywheel.git
synced 2024-11-14 06:24:12 +01:00
movement behaviour hash map
This commit is contained in:
parent
e15c19222f
commit
9bf81f4d7f
@ -12,10 +12,16 @@ import com.simibubi.create.AllTags.AllBlockTags;
|
|||||||
import com.simibubi.create.content.AllSections;
|
import com.simibubi.create.content.AllSections;
|
||||||
import com.simibubi.create.content.contraptions.base.CasingBlock;
|
import com.simibubi.create.content.contraptions.base.CasingBlock;
|
||||||
import com.simibubi.create.content.contraptions.components.actors.DrillBlock;
|
import com.simibubi.create.content.contraptions.components.actors.DrillBlock;
|
||||||
|
import com.simibubi.create.content.contraptions.components.actors.DrillMovementBehaviour;
|
||||||
import com.simibubi.create.content.contraptions.components.actors.HarvesterBlock;
|
import com.simibubi.create.content.contraptions.components.actors.HarvesterBlock;
|
||||||
|
import com.simibubi.create.content.contraptions.components.actors.HarvesterMovementBehaviour;
|
||||||
import com.simibubi.create.content.contraptions.components.actors.PloughBlock;
|
import com.simibubi.create.content.contraptions.components.actors.PloughBlock;
|
||||||
|
import com.simibubi.create.content.contraptions.components.actors.PloughMovementBehaviour;
|
||||||
import com.simibubi.create.content.contraptions.components.actors.PortableStorageInterfaceBlock;
|
import com.simibubi.create.content.contraptions.components.actors.PortableStorageInterfaceBlock;
|
||||||
|
import com.simibubi.create.content.contraptions.components.actors.SawMovementBehaviour;
|
||||||
import com.simibubi.create.content.contraptions.components.actors.SeatBlock;
|
import com.simibubi.create.content.contraptions.components.actors.SeatBlock;
|
||||||
|
import com.simibubi.create.content.contraptions.components.actors.SeatMovementBehaviour;
|
||||||
|
import com.simibubi.create.content.contraptions.components.actors.StorageInterfaceMovement;
|
||||||
import com.simibubi.create.content.contraptions.components.clock.CuckooClockBlock;
|
import com.simibubi.create.content.contraptions.components.clock.CuckooClockBlock;
|
||||||
import com.simibubi.create.content.contraptions.components.crafter.CrafterCTBehaviour;
|
import com.simibubi.create.content.contraptions.components.crafter.CrafterCTBehaviour;
|
||||||
import com.simibubi.create.content.contraptions.components.crafter.MechanicalCrafterBlock;
|
import com.simibubi.create.content.contraptions.components.crafter.MechanicalCrafterBlock;
|
||||||
@ -23,6 +29,7 @@ import com.simibubi.create.content.contraptions.components.crank.HandCrankBlock;
|
|||||||
import com.simibubi.create.content.contraptions.components.crusher.CrushingWheelBlock;
|
import com.simibubi.create.content.contraptions.components.crusher.CrushingWheelBlock;
|
||||||
import com.simibubi.create.content.contraptions.components.crusher.CrushingWheelControllerBlock;
|
import com.simibubi.create.content.contraptions.components.crusher.CrushingWheelControllerBlock;
|
||||||
import com.simibubi.create.content.contraptions.components.deployer.DeployerBlock;
|
import com.simibubi.create.content.contraptions.components.deployer.DeployerBlock;
|
||||||
|
import com.simibubi.create.content.contraptions.components.deployer.DeployerMovementBehaviour;
|
||||||
import com.simibubi.create.content.contraptions.components.fan.EncasedFanBlock;
|
import com.simibubi.create.content.contraptions.components.fan.EncasedFanBlock;
|
||||||
import com.simibubi.create.content.contraptions.components.fan.NozzleBlock;
|
import com.simibubi.create.content.contraptions.components.fan.NozzleBlock;
|
||||||
import com.simibubi.create.content.contraptions.components.flywheel.FlywheelBlock;
|
import com.simibubi.create.content.contraptions.components.flywheel.FlywheelBlock;
|
||||||
@ -98,6 +105,7 @@ import com.simibubi.create.content.logistics.block.diodes.PulseRepeaterGenerator
|
|||||||
import com.simibubi.create.content.logistics.block.diodes.ToggleLatchBlock;
|
import com.simibubi.create.content.logistics.block.diodes.ToggleLatchBlock;
|
||||||
import com.simibubi.create.content.logistics.block.diodes.ToggleLatchGenerator;
|
import com.simibubi.create.content.logistics.block.diodes.ToggleLatchGenerator;
|
||||||
import com.simibubi.create.content.logistics.block.extractor.ExtractorBlock;
|
import com.simibubi.create.content.logistics.block.extractor.ExtractorBlock;
|
||||||
|
import com.simibubi.create.content.logistics.block.extractor.ExtractorMovementBehaviour;
|
||||||
import com.simibubi.create.content.logistics.block.extractor.LinkedExtractorBlock;
|
import com.simibubi.create.content.logistics.block.extractor.LinkedExtractorBlock;
|
||||||
import com.simibubi.create.content.logistics.block.extractor.VerticalExtractorGenerator;
|
import com.simibubi.create.content.logistics.block.extractor.VerticalExtractorGenerator;
|
||||||
import com.simibubi.create.content.logistics.block.funnel.AndesiteBeltFunnelBlock;
|
import com.simibubi.create.content.logistics.block.funnel.AndesiteBeltFunnelBlock;
|
||||||
@ -114,6 +122,7 @@ import com.simibubi.create.content.logistics.block.mechanicalArm.ArmBlock;
|
|||||||
import com.simibubi.create.content.logistics.block.mechanicalArm.ArmItem;
|
import com.simibubi.create.content.logistics.block.mechanicalArm.ArmItem;
|
||||||
import com.simibubi.create.content.logistics.block.packager.PackagerBlock;
|
import com.simibubi.create.content.logistics.block.packager.PackagerBlock;
|
||||||
import com.simibubi.create.content.logistics.block.redstone.AnalogLeverBlock;
|
import com.simibubi.create.content.logistics.block.redstone.AnalogLeverBlock;
|
||||||
|
import com.simibubi.create.content.logistics.block.redstone.ContactMovementBehaviour;
|
||||||
import com.simibubi.create.content.logistics.block.redstone.NixieTubeBlock;
|
import com.simibubi.create.content.logistics.block.redstone.NixieTubeBlock;
|
||||||
import com.simibubi.create.content.logistics.block.redstone.NixieTubeGenerator;
|
import com.simibubi.create.content.logistics.block.redstone.NixieTubeGenerator;
|
||||||
import com.simibubi.create.content.logistics.block.redstone.RedstoneContactBlock;
|
import com.simibubi.create.content.logistics.block.redstone.RedstoneContactBlock;
|
||||||
@ -605,6 +614,7 @@ public class AllBlocks {
|
|||||||
.initialProperties(SharedProperties::stone)
|
.initialProperties(SharedProperties::stone)
|
||||||
.blockstate(BlockStateGen.directionalBlockProvider(true))
|
.blockstate(BlockStateGen.directionalBlockProvider(true))
|
||||||
.transform(StressConfigDefaults.setImpact(4.0))
|
.transform(StressConfigDefaults.setImpact(4.0))
|
||||||
|
.onRegister(AllMovementBehaviours.addMovementBehaviour(new DrillMovementBehaviour()))
|
||||||
.item()
|
.item()
|
||||||
.transform(customItemModel())
|
.transform(customItemModel())
|
||||||
.register();
|
.register();
|
||||||
@ -613,6 +623,7 @@ public class AllBlocks {
|
|||||||
.initialProperties(SharedProperties::stone)
|
.initialProperties(SharedProperties::stone)
|
||||||
.blockstate(new SawGenerator()::generate)
|
.blockstate(new SawGenerator()::generate)
|
||||||
.transform(StressConfigDefaults.setImpact(4.0))
|
.transform(StressConfigDefaults.setImpact(4.0))
|
||||||
|
.onRegister(AllMovementBehaviours.addMovementBehaviour(new SawMovementBehaviour()))
|
||||||
.addLayer(() -> RenderType::getCutoutMipped)
|
.addLayer(() -> RenderType::getCutoutMipped)
|
||||||
.item()
|
.item()
|
||||||
.model((c, p) -> p.blockItem(() -> c.getEntry()
|
.model((c, p) -> p.blockItem(() -> c.getEntry()
|
||||||
@ -624,6 +635,7 @@ public class AllBlocks {
|
|||||||
.initialProperties(SharedProperties::stone)
|
.initialProperties(SharedProperties::stone)
|
||||||
.blockstate(BlockStateGen.directionalAxisBlockProvider())
|
.blockstate(BlockStateGen.directionalAxisBlockProvider())
|
||||||
.transform(StressConfigDefaults.setImpact(4.0))
|
.transform(StressConfigDefaults.setImpact(4.0))
|
||||||
|
.onRegister(AllMovementBehaviours.addMovementBehaviour(new DeployerMovementBehaviour()))
|
||||||
.item()
|
.item()
|
||||||
.transform(customItemModel())
|
.transform(customItemModel())
|
||||||
.register();
|
.register();
|
||||||
@ -631,6 +643,7 @@ public class AllBlocks {
|
|||||||
public static final BlockEntry<PortableStorageInterfaceBlock> PORTABLE_STORAGE_INTERFACE =
|
public static final BlockEntry<PortableStorageInterfaceBlock> PORTABLE_STORAGE_INTERFACE =
|
||||||
REGISTRATE.block("portable_storage_interface", PortableStorageInterfaceBlock::new)
|
REGISTRATE.block("portable_storage_interface", PortableStorageInterfaceBlock::new)
|
||||||
.initialProperties(SharedProperties::stone)
|
.initialProperties(SharedProperties::stone)
|
||||||
|
.onRegister(AllMovementBehaviours.addMovementBehaviour(new StorageInterfaceMovement()))
|
||||||
.blockstate(BlockStateGen.directionalBlockProvider(false))
|
.blockstate(BlockStateGen.directionalBlockProvider(false))
|
||||||
.simpleItem()
|
.simpleItem()
|
||||||
.register();
|
.register();
|
||||||
@ -638,6 +651,7 @@ public class AllBlocks {
|
|||||||
public static final BlockEntry<HarvesterBlock> MECHANICAL_HARVESTER =
|
public static final BlockEntry<HarvesterBlock> MECHANICAL_HARVESTER =
|
||||||
REGISTRATE.block("mechanical_harvester", HarvesterBlock::new)
|
REGISTRATE.block("mechanical_harvester", HarvesterBlock::new)
|
||||||
.initialProperties(SharedProperties::stone)
|
.initialProperties(SharedProperties::stone)
|
||||||
|
.onRegister(AllMovementBehaviours.addMovementBehaviour(new HarvesterMovementBehaviour()))
|
||||||
.blockstate(BlockStateGen.horizontalBlockProvider(true))
|
.blockstate(BlockStateGen.horizontalBlockProvider(true))
|
||||||
.addLayer(() -> RenderType::getCutoutMipped)
|
.addLayer(() -> RenderType::getCutoutMipped)
|
||||||
.item()
|
.item()
|
||||||
@ -647,6 +661,7 @@ public class AllBlocks {
|
|||||||
public static final BlockEntry<PloughBlock> MECHANICAL_PLOUGH =
|
public static final BlockEntry<PloughBlock> MECHANICAL_PLOUGH =
|
||||||
REGISTRATE.block("mechanical_plough", PloughBlock::new)
|
REGISTRATE.block("mechanical_plough", PloughBlock::new)
|
||||||
.initialProperties(SharedProperties::stone)
|
.initialProperties(SharedProperties::stone)
|
||||||
|
.onRegister(AllMovementBehaviours.addMovementBehaviour(new PloughMovementBehaviour()))
|
||||||
.blockstate(BlockStateGen.horizontalBlockProvider(false))
|
.blockstate(BlockStateGen.horizontalBlockProvider(false))
|
||||||
.simpleItem()
|
.simpleItem()
|
||||||
.register();
|
.register();
|
||||||
@ -656,6 +671,7 @@ public class AllBlocks {
|
|||||||
String colourName = colour.getName();
|
String colourName = colour.getName();
|
||||||
REGISTRATE.block(colourName + "_seat", p -> new SeatBlock(p, colour == DyeColor.RED))
|
REGISTRATE.block(colourName + "_seat", p -> new SeatBlock(p, colour == DyeColor.RED))
|
||||||
.initialProperties(SharedProperties::wooden)
|
.initialProperties(SharedProperties::wooden)
|
||||||
|
.onRegister(AllMovementBehaviours.addMovementBehaviour(new SeatMovementBehaviour()))
|
||||||
.blockstate((c, p) -> {
|
.blockstate((c, p) -> {
|
||||||
p.simpleBlock(c.get(), p.models()
|
p.simpleBlock(c.get(), p.models()
|
||||||
.withExistingParent(colourName + "_seat", p.modLoc("block/seat"))
|
.withExistingParent(colourName + "_seat", p.modLoc("block/seat"))
|
||||||
@ -812,6 +828,7 @@ public class AllBlocks {
|
|||||||
public static final BlockEntry<RedstoneContactBlock> REDSTONE_CONTACT =
|
public static final BlockEntry<RedstoneContactBlock> REDSTONE_CONTACT =
|
||||||
REGISTRATE.block("redstone_contact", RedstoneContactBlock::new)
|
REGISTRATE.block("redstone_contact", RedstoneContactBlock::new)
|
||||||
.initialProperties(SharedProperties::stone)
|
.initialProperties(SharedProperties::stone)
|
||||||
|
.onRegister(AllMovementBehaviours.addMovementBehaviour(new ContactMovementBehaviour()))
|
||||||
.blockstate((c, p) -> p.directionalBlock(c.get(), AssetLookup.forPowered(c, p)))
|
.blockstate((c, p) -> p.directionalBlock(c.get(), AssetLookup.forPowered(c, p)))
|
||||||
.item()
|
.item()
|
||||||
.transform(customItemModel("_", "block"))
|
.transform(customItemModel("_", "block"))
|
||||||
@ -878,6 +895,7 @@ public class AllBlocks {
|
|||||||
public static final BlockEntry<ExtractorBlock> EXTRACTOR = REGISTRATE.block("extractor", ExtractorBlock::new)
|
public static final BlockEntry<ExtractorBlock> EXTRACTOR = REGISTRATE.block("extractor", ExtractorBlock::new)
|
||||||
.initialProperties(SharedProperties::softMetal)
|
.initialProperties(SharedProperties::softMetal)
|
||||||
.tag(AllBlockTags.BRITTLE.tag)
|
.tag(AllBlockTags.BRITTLE.tag)
|
||||||
|
.onRegister(AllMovementBehaviours.addMovementBehaviour(new ExtractorMovementBehaviour()))
|
||||||
.blockstate((c, p) -> p.horizontalBlock(c.get(), AssetLookup.forPowered(c, p, c.getName() + "/horizontal")))
|
.blockstate((c, p) -> p.horizontalBlock(c.get(), AssetLookup.forPowered(c, p, c.getName() + "/horizontal")))
|
||||||
.item()
|
.item()
|
||||||
.transform(customItemModel("_", "horizontal"))
|
.transform(customItemModel("_", "horizontal"))
|
||||||
|
38
src/main/java/com/simibubi/create/AllMovementBehaviours.java
Normal file
38
src/main/java/com/simibubi/create/AllMovementBehaviours.java
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
package com.simibubi.create;
|
||||||
|
|
||||||
|
import com.simibubi.create.content.contraptions.components.structureMovement.MovementBehaviour;
|
||||||
|
import com.tterrag.registrate.util.nullness.NonNullConsumer;
|
||||||
|
import net.minecraft.block.Block;
|
||||||
|
import net.minecraft.util.ResourceLocation;
|
||||||
|
|
||||||
|
import javax.annotation.Nullable;
|
||||||
|
import java.util.HashMap;
|
||||||
|
|
||||||
|
public class AllMovementBehaviours {
|
||||||
|
private static final HashMap<ResourceLocation, MovementBehaviour> movementBehaviours = new HashMap<>();
|
||||||
|
|
||||||
|
public static void addMovementBehaviour(ResourceLocation resourceLocation, MovementBehaviour movementBehaviour) {
|
||||||
|
movementBehaviours.put(resourceLocation, movementBehaviour);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
public static MovementBehaviour getMovementBehaviour(ResourceLocation resourceLocation) {
|
||||||
|
return movementBehaviours.getOrDefault(resourceLocation, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
public static MovementBehaviour getMovementBehaviour(Block block) {
|
||||||
|
return getMovementBehaviour(block.getRegistryName());
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean hasMovementBehaviour(Block block) {
|
||||||
|
return movementBehaviours.containsKey(block.getRegistryName());
|
||||||
|
}
|
||||||
|
|
||||||
|
public static <B extends Block> NonNullConsumer<? super B> addMovementBehaviour(
|
||||||
|
MovementBehaviour movementBehaviour) {
|
||||||
|
return b -> addMovementBehaviour(b.getRegistryName(), movementBehaviour);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void register() {}
|
||||||
|
}
|
@ -63,6 +63,7 @@ public class Create {
|
|||||||
AllPaletteBlocks.register();
|
AllPaletteBlocks.register();
|
||||||
AllEntityTypes.register();
|
AllEntityTypes.register();
|
||||||
AllTileEntities.register();
|
AllTileEntities.register();
|
||||||
|
AllMovementBehaviours.register();
|
||||||
|
|
||||||
modEventBus.addListener(Create::init);
|
modEventBus.addListener(Create::init);
|
||||||
modEventBus.addGenericListener(IRecipeSerializer.class, AllRecipeTypes::register);
|
modEventBus.addGenericListener(IRecipeSerializer.class, AllRecipeTypes::register);
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
package com.simibubi.create.content.contraptions.components.actors;
|
package com.simibubi.create.content.contraptions.components.actors;
|
||||||
|
|
||||||
import com.simibubi.create.AllShapes;
|
import com.simibubi.create.AllShapes;
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.IPortableBlock;
|
|
||||||
import com.simibubi.create.content.contraptions.wrench.IWrenchable;
|
import com.simibubi.create.content.contraptions.wrench.IWrenchable;
|
||||||
|
|
||||||
|
import mcp.MethodsReturnNonnullByDefault;
|
||||||
import net.minecraft.block.Block;
|
import net.minecraft.block.Block;
|
||||||
import net.minecraft.block.BlockState;
|
import net.minecraft.block.BlockState;
|
||||||
import net.minecraft.block.HorizontalBlock;
|
import net.minecraft.block.HorizontalBlock;
|
||||||
@ -18,7 +18,11 @@ import net.minecraft.util.math.shapes.VoxelShape;
|
|||||||
import net.minecraft.world.IBlockReader;
|
import net.minecraft.world.IBlockReader;
|
||||||
import net.minecraft.world.IWorldReader;
|
import net.minecraft.world.IWorldReader;
|
||||||
|
|
||||||
public abstract class AttachedActorBlock extends HorizontalBlock implements IPortableBlock, IWrenchable {
|
import javax.annotation.ParametersAreNonnullByDefault;
|
||||||
|
|
||||||
|
@ParametersAreNonnullByDefault
|
||||||
|
@MethodsReturnNonnullByDefault
|
||||||
|
public abstract class AttachedActorBlock extends HorizontalBlock implements IWrenchable {
|
||||||
|
|
||||||
protected AttachedActorBlock(Properties p_i48377_1_) {
|
protected AttachedActorBlock(Properties p_i48377_1_) {
|
||||||
super(p_i48377_1_);
|
super(p_i48377_1_);
|
||||||
|
@ -3,8 +3,6 @@ package com.simibubi.create.content.contraptions.components.actors;
|
|||||||
import com.simibubi.create.AllShapes;
|
import com.simibubi.create.AllShapes;
|
||||||
import com.simibubi.create.AllTileEntities;
|
import com.simibubi.create.AllTileEntities;
|
||||||
import com.simibubi.create.content.contraptions.base.DirectionalKineticBlock;
|
import com.simibubi.create.content.contraptions.base.DirectionalKineticBlock;
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.IPortableBlock;
|
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.MovementBehaviour;
|
|
||||||
import com.simibubi.create.foundation.block.ITE;
|
import com.simibubi.create.foundation.block.ITE;
|
||||||
|
|
||||||
import net.minecraft.block.Block;
|
import net.minecraft.block.Block;
|
||||||
@ -25,9 +23,12 @@ import net.minecraft.world.IBlockReader;
|
|||||||
import net.minecraft.world.IWorldReader;
|
import net.minecraft.world.IWorldReader;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
|
|
||||||
public class DrillBlock extends DirectionalKineticBlock implements IPortableBlock, ITE<DrillTileEntity> {
|
import javax.annotation.ParametersAreNonnullByDefault;
|
||||||
|
import mcp.MethodsReturnNonnullByDefault;
|
||||||
|
|
||||||
public static MovementBehaviour MOVEMENT = new DrillMovementBehaviour();
|
@ParametersAreNonnullByDefault
|
||||||
|
@MethodsReturnNonnullByDefault
|
||||||
|
public class DrillBlock extends DirectionalKineticBlock implements ITE<DrillTileEntity> {
|
||||||
public static DamageSource damageSourceDrill = new DamageSource("create.drill").setDamageBypassesArmor();
|
public static DamageSource damageSourceDrill = new DamageSource("create.drill").setDamageBypassesArmor();
|
||||||
|
|
||||||
public DrillBlock(Properties properties) {
|
public DrillBlock(Properties properties) {
|
||||||
@ -83,11 +84,6 @@ public class DrillBlock extends DirectionalKineticBlock implements IPortableBloc
|
|||||||
return PushReaction.NORMAL;
|
return PushReaction.NORMAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public MovementBehaviour getMovementBehaviour() {
|
|
||||||
return MOVEMENT;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Class<DrillTileEntity> getTileEntityClass() {
|
public Class<DrillTileEntity> getTileEntityClass() {
|
||||||
return DrillTileEntity.class;
|
return DrillTileEntity.class;
|
||||||
|
@ -1,16 +1,12 @@
|
|||||||
package com.simibubi.create.content.contraptions.components.actors;
|
package com.simibubi.create.content.contraptions.components.actors;
|
||||||
|
|
||||||
import com.simibubi.create.AllTileEntities;
|
import com.simibubi.create.AllTileEntities;
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.IPortableBlock;
|
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.MovementBehaviour;
|
|
||||||
|
|
||||||
import net.minecraft.block.BlockState;
|
import net.minecraft.block.BlockState;
|
||||||
import net.minecraft.tileentity.TileEntity;
|
import net.minecraft.tileentity.TileEntity;
|
||||||
import net.minecraft.world.IBlockReader;
|
import net.minecraft.world.IBlockReader;
|
||||||
|
|
||||||
public class HarvesterBlock extends AttachedActorBlock implements IPortableBlock {
|
public class HarvesterBlock extends AttachedActorBlock {
|
||||||
|
|
||||||
public static MovementBehaviour MOVEMENT = new HarvesterMovementBehaviour();
|
|
||||||
|
|
||||||
public HarvesterBlock(Properties p_i48377_1_) {
|
public HarvesterBlock(Properties p_i48377_1_) {
|
||||||
super(p_i48377_1_);
|
super(p_i48377_1_);
|
||||||
@ -25,10 +21,4 @@ public class HarvesterBlock extends AttachedActorBlock implements IPortableBlock
|
|||||||
public TileEntity createTileEntity(BlockState state, IBlockReader world) {
|
public TileEntity createTileEntity(BlockState state, IBlockReader world) {
|
||||||
return new HarvesterTileEntity(AllTileEntities.HARVESTER.get());
|
return new HarvesterTileEntity(AllTileEntities.HARVESTER.get());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public MovementBehaviour getMovementBehaviour() {
|
|
||||||
return MOVEMENT;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -10,17 +10,10 @@ import net.minecraftforge.common.util.FakePlayer;
|
|||||||
|
|
||||||
public class PloughBlock extends AttachedActorBlock {
|
public class PloughBlock extends AttachedActorBlock {
|
||||||
|
|
||||||
public static MovementBehaviour MOVEMENT = new PloughMovementBehaviour();
|
|
||||||
|
|
||||||
public PloughBlock(Properties p_i48377_1_) {
|
public PloughBlock(Properties p_i48377_1_) {
|
||||||
super(p_i48377_1_);
|
super(p_i48377_1_);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public MovementBehaviour getMovementBehaviour() {
|
|
||||||
return MOVEMENT;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The OnHoeUse event takes a player, so we better not pass null
|
* The OnHoeUse event takes a player, so we better not pass null
|
||||||
*/
|
*/
|
||||||
|
@ -1,8 +1,6 @@
|
|||||||
package com.simibubi.create.content.contraptions.components.actors;
|
package com.simibubi.create.content.contraptions.components.actors;
|
||||||
|
|
||||||
import com.simibubi.create.AllShapes;
|
import com.simibubi.create.AllShapes;
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.IPortableBlock;
|
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.MovementBehaviour;
|
|
||||||
import com.simibubi.create.foundation.block.ProperDirectionalBlock;
|
import com.simibubi.create.foundation.block.ProperDirectionalBlock;
|
||||||
|
|
||||||
import net.minecraft.block.BlockState;
|
import net.minecraft.block.BlockState;
|
||||||
@ -12,9 +10,13 @@ import net.minecraft.util.math.shapes.ISelectionContext;
|
|||||||
import net.minecraft.util.math.shapes.VoxelShape;
|
import net.minecraft.util.math.shapes.VoxelShape;
|
||||||
import net.minecraft.world.IBlockReader;
|
import net.minecraft.world.IBlockReader;
|
||||||
|
|
||||||
public class PortableStorageInterfaceBlock extends ProperDirectionalBlock implements IPortableBlock {
|
|
||||||
|
|
||||||
public static MovementBehaviour MOVEMENT = new StorageInterfaceMovement();
|
import javax.annotation.ParametersAreNonnullByDefault;
|
||||||
|
import mcp.MethodsReturnNonnullByDefault;
|
||||||
|
|
||||||
|
@ParametersAreNonnullByDefault
|
||||||
|
@MethodsReturnNonnullByDefault
|
||||||
|
public class PortableStorageInterfaceBlock extends ProperDirectionalBlock {
|
||||||
|
|
||||||
public PortableStorageInterfaceBlock(Properties p_i48415_1_) {
|
public PortableStorageInterfaceBlock(Properties p_i48415_1_) {
|
||||||
super(p_i48415_1_);
|
super(p_i48415_1_);
|
||||||
@ -31,9 +33,4 @@ public class PortableStorageInterfaceBlock extends ProperDirectionalBlock implem
|
|||||||
return AllShapes.PORTABLE_STORAGE_INTERFACE.get(state.get(FACING));
|
return AllShapes.PORTABLE_STORAGE_INTERFACE.get(state.get(FACING));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public MovementBehaviour getMovementBehaviour() {
|
|
||||||
return MOVEMENT;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -3,8 +3,6 @@ package com.simibubi.create.content.contraptions.components.actors;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import com.simibubi.create.AllShapes;
|
import com.simibubi.create.AllShapes;
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.IPortableBlock;
|
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.MovementBehaviour;
|
|
||||||
|
|
||||||
import net.minecraft.block.Block;
|
import net.minecraft.block.Block;
|
||||||
import net.minecraft.block.BlockState;
|
import net.minecraft.block.BlockState;
|
||||||
@ -27,10 +25,16 @@ import net.minecraft.util.math.shapes.VoxelShape;
|
|||||||
import net.minecraft.world.IBlockReader;
|
import net.minecraft.world.IBlockReader;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
|
|
||||||
public class SeatBlock extends Block implements IPortableBlock {
|
|
||||||
|
|
||||||
public static MovementBehaviour MOVEMENT = new SeatMovementBehaviour();
|
import javax.annotation.Nullable;
|
||||||
private boolean inCreativeTab;
|
import javax.annotation.ParametersAreNonnullByDefault;
|
||||||
|
import mcp.MethodsReturnNonnullByDefault;
|
||||||
|
|
||||||
|
@ParametersAreNonnullByDefault
|
||||||
|
@MethodsReturnNonnullByDefault
|
||||||
|
public class SeatBlock extends Block {
|
||||||
|
|
||||||
|
private final boolean inCreativeTab;
|
||||||
|
|
||||||
public SeatBlock(Properties p_i48440_1_, boolean inCreativeTab) {
|
public SeatBlock(Properties p_i48440_1_, boolean inCreativeTab) {
|
||||||
super(p_i48440_1_);
|
super(p_i48440_1_);
|
||||||
@ -63,7 +67,7 @@ public class SeatBlock extends Block implements IPortableBlock {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public PathNodeType getAiPathNodeType(BlockState state, IBlockReader world, BlockPos pos, MobEntity entity) {
|
public PathNodeType getAiPathNodeType(BlockState state, IBlockReader world, BlockPos pos, @Nullable MobEntity entity) {
|
||||||
return PathNodeType.RAIL;
|
return PathNodeType.RAIL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -118,8 +122,4 @@ public class SeatBlock extends Block implements IPortableBlock {
|
|||||||
entity.startRiding(seat, true);
|
entity.startRiding(seat, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public MovementBehaviour getMovementBehaviour() {
|
|
||||||
return MOVEMENT;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -4,8 +4,6 @@ import com.simibubi.create.AllItems;
|
|||||||
import com.simibubi.create.AllShapes;
|
import com.simibubi.create.AllShapes;
|
||||||
import com.simibubi.create.AllTileEntities;
|
import com.simibubi.create.AllTileEntities;
|
||||||
import com.simibubi.create.content.contraptions.base.DirectionalAxisKineticBlock;
|
import com.simibubi.create.content.contraptions.base.DirectionalAxisKineticBlock;
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.IPortableBlock;
|
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.MovementBehaviour;
|
|
||||||
import com.simibubi.create.foundation.block.ITE;
|
import com.simibubi.create.foundation.block.ITE;
|
||||||
import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour;
|
import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour;
|
||||||
import com.simibubi.create.foundation.tileEntity.behaviour.filtering.FilteringBehaviour;
|
import com.simibubi.create.foundation.tileEntity.behaviour.filtering.FilteringBehaviour;
|
||||||
@ -25,9 +23,12 @@ import net.minecraft.util.math.shapes.VoxelShape;
|
|||||||
import net.minecraft.world.IBlockReader;
|
import net.minecraft.world.IBlockReader;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
|
|
||||||
public class DeployerBlock extends DirectionalAxisKineticBlock implements ITE<DeployerTileEntity>, IPortableBlock {
|
import javax.annotation.ParametersAreNonnullByDefault;
|
||||||
|
import mcp.MethodsReturnNonnullByDefault;
|
||||||
|
|
||||||
public static MovementBehaviour MOVEMENT = new DeployerMovementBehaviour();
|
@ParametersAreNonnullByDefault
|
||||||
|
@MethodsReturnNonnullByDefault
|
||||||
|
public class DeployerBlock extends DirectionalAxisKineticBlock implements ITE<DeployerTileEntity> {
|
||||||
|
|
||||||
public DeployerBlock(Properties properties) {
|
public DeployerBlock(Properties properties) {
|
||||||
super(properties);
|
super(properties);
|
||||||
@ -102,11 +103,6 @@ public class DeployerBlock extends DirectionalAxisKineticBlock implements ITE<De
|
|||||||
return ActionResultType.SUCCESS;
|
return ActionResultType.SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public MovementBehaviour getMovementBehaviour() {
|
|
||||||
return MOVEMENT;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Class<DeployerTileEntity> getTileEntityClass() {
|
public Class<DeployerTileEntity> getTileEntityClass() {
|
||||||
return DeployerTileEntity.class;
|
return DeployerTileEntity.class;
|
||||||
|
@ -3,9 +3,6 @@ package com.simibubi.create.content.contraptions.components.saw;
|
|||||||
import com.simibubi.create.AllShapes;
|
import com.simibubi.create.AllShapes;
|
||||||
import com.simibubi.create.AllTileEntities;
|
import com.simibubi.create.AllTileEntities;
|
||||||
import com.simibubi.create.content.contraptions.base.DirectionalAxisKineticBlock;
|
import com.simibubi.create.content.contraptions.base.DirectionalAxisKineticBlock;
|
||||||
import com.simibubi.create.content.contraptions.components.actors.SawMovementBehaviour;
|
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.IPortableBlock;
|
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.MovementBehaviour;
|
|
||||||
import com.simibubi.create.foundation.block.ITE;
|
import com.simibubi.create.foundation.block.ITE;
|
||||||
import com.simibubi.create.foundation.item.ItemHelper;
|
import com.simibubi.create.foundation.item.ItemHelper;
|
||||||
import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour;
|
import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour;
|
||||||
@ -32,11 +29,15 @@ import net.minecraft.world.IBlockReader;
|
|||||||
import net.minecraft.world.IWorldReader;
|
import net.minecraft.world.IWorldReader;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
|
|
||||||
public class SawBlock extends DirectionalAxisKineticBlock implements ITE<SawTileEntity>, IPortableBlock {
|
import javax.annotation.ParametersAreNonnullByDefault;
|
||||||
|
import mcp.MethodsReturnNonnullByDefault;
|
||||||
|
|
||||||
|
@ParametersAreNonnullByDefault
|
||||||
|
@MethodsReturnNonnullByDefault
|
||||||
|
public class SawBlock extends DirectionalAxisKineticBlock implements ITE<SawTileEntity> {
|
||||||
|
|
||||||
public static final BooleanProperty RUNNING = BooleanProperty.create("running");
|
public static final BooleanProperty RUNNING = BooleanProperty.create("running");
|
||||||
public static DamageSource damageSourceSaw = new DamageSource("create.saw").setDamageBypassesArmor();
|
public static DamageSource damageSourceSaw = new DamageSource("create.saw").setDamageBypassesArmor();
|
||||||
public static MovementBehaviour MOVEMENT = new SawMovementBehaviour();
|
|
||||||
|
|
||||||
public SawBlock(Properties properties) {
|
public SawBlock(Properties properties) {
|
||||||
super(properties);
|
super(properties);
|
||||||
@ -127,11 +128,6 @@ public class SawBlock extends DirectionalAxisKineticBlock implements ITE<SawTile
|
|||||||
worldIn.removeTileEntity(pos);
|
worldIn.removeTileEntity(pos);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public MovementBehaviour getMovementBehaviour() {
|
|
||||||
return MOVEMENT;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Class<SawTileEntity> getTileEntityClass() {
|
public Class<SawTileEntity> getTileEntityClass() {
|
||||||
return SawTileEntity.class;
|
return SawTileEntity.class;
|
||||||
|
@ -17,6 +17,7 @@ import java.util.stream.Collectors;
|
|||||||
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
|
|
||||||
|
import com.simibubi.create.AllMovementBehaviours;
|
||||||
import org.apache.commons.lang3.tuple.MutablePair;
|
import org.apache.commons.lang3.tuple.MutablePair;
|
||||||
import org.apache.commons.lang3.tuple.Pair;
|
import org.apache.commons.lang3.tuple.Pair;
|
||||||
|
|
||||||
@ -146,9 +147,9 @@ public abstract class Contraption {
|
|||||||
|
|
||||||
protected static MovementBehaviour getMovement(BlockState state) {
|
protected static MovementBehaviour getMovement(BlockState state) {
|
||||||
Block block = state.getBlock();
|
Block block = state.getBlock();
|
||||||
if (!(block instanceof IPortableBlock))
|
if (!AllMovementBehaviours.hasMovementBehaviour(block))
|
||||||
return null;
|
return null;
|
||||||
return ((IPortableBlock) block).getMovementBehaviour();
|
return AllMovementBehaviours.getMovementBehaviour(block);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Set<BlockPos> getColliders(World world, Direction movementDirection) {
|
public Set<BlockPos> getColliders(World world, Direction movementDirection) {
|
||||||
@ -439,7 +440,7 @@ public abstract class Contraption {
|
|||||||
TileEntity te = pair.getValue();
|
TileEntity te = pair.getValue();
|
||||||
if (te != null && MountedStorage.canUseAsStorage(te))
|
if (te != null && MountedStorage.canUseAsStorage(te))
|
||||||
storage.put(localPos, new MountedStorage(te));
|
storage.put(localPos, new MountedStorage(te));
|
||||||
if (captured.state.getBlock() instanceof IPortableBlock)
|
if (AllMovementBehaviours.hasMovementBehaviour(captured.state.getBlock()))
|
||||||
actors.add(MutablePair.of(blockInfo, null));
|
actors.add(MutablePair.of(blockInfo, null));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -463,7 +464,7 @@ public abstract class Contraption {
|
|||||||
else
|
else
|
||||||
renderOrder.add(0, info.pos);
|
renderOrder.add(0, info.pos);
|
||||||
CompoundNBT tag = info.nbt;
|
CompoundNBT tag = info.nbt;
|
||||||
if (tag == null || block instanceof IPortableBlock)
|
if (tag == null || AllMovementBehaviours.hasMovementBehaviour(block))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
tag.putInt("x", info.pos.getX());
|
tag.putInt("x", info.pos.getX());
|
||||||
|
@ -9,6 +9,7 @@ import java.util.Iterator;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.stream.Stream;
|
import java.util.stream.Stream;
|
||||||
|
|
||||||
|
import com.simibubi.create.AllMovementBehaviours;
|
||||||
import org.apache.commons.lang3.mutable.MutableBoolean;
|
import org.apache.commons.lang3.mutable.MutableBoolean;
|
||||||
import org.apache.commons.lang3.mutable.MutableObject;
|
import org.apache.commons.lang3.mutable.MutableObject;
|
||||||
|
|
||||||
@ -393,11 +394,11 @@ public class ContraptionCollider {
|
|||||||
BlockState collidedState = world.getBlockState(colliderPos);
|
BlockState collidedState = world.getBlockState(colliderPos);
|
||||||
BlockInfo blockInfo = contraption.blocks.get(pos);
|
BlockInfo blockInfo = contraption.blocks.get(pos);
|
||||||
|
|
||||||
if (blockInfo.state.getBlock() instanceof IPortableBlock) {
|
if (AllMovementBehaviours.hasMovementBehaviour(blockInfo.state.getBlock())) {
|
||||||
IPortableBlock block = (IPortableBlock) blockInfo.state.getBlock();
|
MovementBehaviour movementBehaviour = AllMovementBehaviours.getMovementBehaviour(blockInfo.state.getBlock());
|
||||||
if (block.getMovementBehaviour() instanceof BlockBreakingMovementBehaviour) {
|
if (movementBehaviour instanceof BlockBreakingMovementBehaviour) {
|
||||||
BlockBreakingMovementBehaviour behaviour =
|
BlockBreakingMovementBehaviour behaviour =
|
||||||
(BlockBreakingMovementBehaviour) block.getMovementBehaviour();
|
(BlockBreakingMovementBehaviour) movementBehaviour;
|
||||||
if (!behaviour.canBreak(world, colliderPos, collidedState)
|
if (!behaviour.canBreak(world, colliderPos, collidedState)
|
||||||
&& !collidedState.getCollisionShape(world, pos)
|
&& !collidedState.getCollisionShape(world, pos)
|
||||||
.isEmpty()) {
|
.isEmpty()) {
|
||||||
|
@ -1,7 +0,0 @@
|
|||||||
package com.simibubi.create.content.contraptions.components.structureMovement;
|
|
||||||
|
|
||||||
public interface IPortableBlock {
|
|
||||||
|
|
||||||
public MovementBehaviour getMovementBehaviour();
|
|
||||||
|
|
||||||
}
|
|
@ -3,8 +3,6 @@ package com.simibubi.create.content.logistics.block.extractor;
|
|||||||
import com.simibubi.create.AllBlocks;
|
import com.simibubi.create.AllBlocks;
|
||||||
import com.simibubi.create.AllShapes;
|
import com.simibubi.create.AllShapes;
|
||||||
import com.simibubi.create.AllTileEntities;
|
import com.simibubi.create.AllTileEntities;
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.IPortableBlock;
|
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.MovementBehaviour;
|
|
||||||
import com.simibubi.create.content.logistics.block.AttachedLogisticalBlock;
|
import com.simibubi.create.content.logistics.block.AttachedLogisticalBlock;
|
||||||
import com.simibubi.create.content.logistics.block.belts.BeltAttachableLogisticalBlock;
|
import com.simibubi.create.content.logistics.block.belts.BeltAttachableLogisticalBlock;
|
||||||
import com.simibubi.create.foundation.utility.AngleHelper;
|
import com.simibubi.create.foundation.utility.AngleHelper;
|
||||||
@ -25,10 +23,9 @@ import net.minecraft.util.math.shapes.VoxelShape;
|
|||||||
import net.minecraft.world.IBlockReader;
|
import net.minecraft.world.IBlockReader;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
|
|
||||||
public class ExtractorBlock extends BeltAttachableLogisticalBlock implements IPortableBlock {
|
public class ExtractorBlock extends BeltAttachableLogisticalBlock {
|
||||||
|
|
||||||
public static BooleanProperty POWERED = BlockStateProperties.POWERED;
|
public static BooleanProperty POWERED = BlockStateProperties.POWERED;
|
||||||
private static final MovementBehaviour MOVEMENT = new ExtractorMovementBehaviour();
|
|
||||||
|
|
||||||
public ExtractorBlock(Properties properties) {
|
public ExtractorBlock(Properties properties) {
|
||||||
super(properties);
|
super(properties);
|
||||||
@ -127,9 +124,4 @@ public class ExtractorBlock extends BeltAttachableLogisticalBlock implements IPo
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public MovementBehaviour getMovementBehaviour() {
|
|
||||||
return MOVEMENT;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
@ -3,8 +3,6 @@ package com.simibubi.create.content.logistics.block.redstone;
|
|||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
|
|
||||||
import com.simibubi.create.AllBlocks;
|
import com.simibubi.create.AllBlocks;
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.IPortableBlock;
|
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.MovementBehaviour;
|
|
||||||
import com.simibubi.create.content.contraptions.wrench.IWrenchable;
|
import com.simibubi.create.content.contraptions.wrench.IWrenchable;
|
||||||
import com.simibubi.create.foundation.block.ProperDirectionalBlock;
|
import com.simibubi.create.foundation.block.ProperDirectionalBlock;
|
||||||
|
|
||||||
@ -21,10 +19,15 @@ import net.minecraft.world.IWorld;
|
|||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
import net.minecraft.world.server.ServerWorld;
|
import net.minecraft.world.server.ServerWorld;
|
||||||
|
|
||||||
public class RedstoneContactBlock extends ProperDirectionalBlock implements IPortableBlock, IWrenchable {
|
import javax.annotation.Nullable;
|
||||||
|
import javax.annotation.ParametersAreNonnullByDefault;
|
||||||
|
import mcp.MethodsReturnNonnullByDefault;
|
||||||
|
|
||||||
|
@ParametersAreNonnullByDefault
|
||||||
|
@MethodsReturnNonnullByDefault
|
||||||
|
public class RedstoneContactBlock extends ProperDirectionalBlock implements IWrenchable {
|
||||||
|
|
||||||
public static final BooleanProperty POWERED = BlockStateProperties.POWERED;
|
public static final BooleanProperty POWERED = BlockStateProperties.POWERED;
|
||||||
public static MovementBehaviour MOVEMENT = new ContactMovementBehaviour();
|
|
||||||
|
|
||||||
public RedstoneContactBlock(Properties properties) {
|
public RedstoneContactBlock(Properties properties) {
|
||||||
super(properties);
|
super(properties);
|
||||||
@ -94,7 +97,7 @@ public class RedstoneContactBlock extends ProperDirectionalBlock implements IPor
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean canConnectRedstone(BlockState state, IBlockReader world, BlockPos pos, Direction side) {
|
public boolean canConnectRedstone(BlockState state, IBlockReader world, BlockPos pos, @Nullable Direction side) {
|
||||||
if (side == null)
|
if (side == null)
|
||||||
return true;
|
return true;
|
||||||
return state.get(FACING) != side.getOpposite();
|
return state.get(FACING) != side.getOpposite();
|
||||||
@ -105,9 +108,4 @@ public class RedstoneContactBlock extends ProperDirectionalBlock implements IPor
|
|||||||
return state.get(POWERED) ? 15 : 0;
|
return state.get(POWERED) ? 15 : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public MovementBehaviour getMovementBehaviour() {
|
|
||||||
return MOVEMENT;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user