Matter cables
This commit is contained in:
parent
71e83874c0
commit
61add16d1e
@ -25,6 +25,10 @@ public interface IMatterGridCell {
|
|||||||
return connectOrCreateMatterGrid(pos, level, false);
|
return connectOrCreateMatterGrid(pos, level, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
default void onNeighbourMatterCell(BlockPos pos, Level level, Direction direction, IMatterGridCell cell) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
default boolean connectOrCreateMatterGrid(BlockPos pos, Level level, boolean force) {
|
default boolean connectOrCreateMatterGrid(BlockPos pos, Level level, boolean force) {
|
||||||
if (getMatterGrid() != null && !force)
|
if (getMatterGrid() != null && !force)
|
||||||
return true;
|
return true;
|
||||||
@ -54,6 +58,9 @@ public interface IMatterGridCell {
|
|||||||
grid.mergeWith(getMatterGrid());
|
grid.mergeWith(getMatterGrid());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (cell.isValidMatterCell())
|
||||||
|
onNeighbourMatterCell(pos, level, direction, cell);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -15,10 +15,7 @@ import net.minecraftforge.eventbus.api.SubscribeEvent;
|
|||||||
import net.minecraftforge.fml.common.Mod;
|
import net.minecraftforge.fml.common.Mod;
|
||||||
import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent;
|
import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent;
|
||||||
import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent;
|
import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent;
|
||||||
import ru.dbotthepony.mc.otm.block.BlockAndroidStation;
|
import ru.dbotthepony.mc.otm.block.*;
|
||||||
import ru.dbotthepony.mc.otm.block.BlockBatteryBank;
|
|
||||||
import ru.dbotthepony.mc.otm.block.BlockMatterCapacitorBank;
|
|
||||||
import ru.dbotthepony.mc.otm.block.BlockMatterDecomposer;
|
|
||||||
import ru.dbotthepony.mc.otm.block.entity.BlockEntityAndroidStation;
|
import ru.dbotthepony.mc.otm.block.entity.BlockEntityAndroidStation;
|
||||||
import ru.dbotthepony.mc.otm.block.entity.BlockEntityBatteryBank;
|
import ru.dbotthepony.mc.otm.block.entity.BlockEntityBatteryBank;
|
||||||
import ru.dbotthepony.mc.otm.block.entity.BlockEntityMatterCapacitorBank;
|
import ru.dbotthepony.mc.otm.block.entity.BlockEntityMatterCapacitorBank;
|
||||||
@ -45,6 +42,7 @@ public class Registry {
|
|||||||
public static final ResourceLocation BATTERY_BANK = new ResourceLocation(OverdriveThatMatters.MOD_ID, "battery_bank");
|
public static final ResourceLocation BATTERY_BANK = new ResourceLocation(OverdriveThatMatters.MOD_ID, "battery_bank");
|
||||||
public static final ResourceLocation MATTER_DECOMPOSER = new ResourceLocation(OverdriveThatMatters.MOD_ID, "matter_decomposer");
|
public static final ResourceLocation MATTER_DECOMPOSER = new ResourceLocation(OverdriveThatMatters.MOD_ID, "matter_decomposer");
|
||||||
public static final ResourceLocation MATTER_CAPACITOR_BANK = new ResourceLocation(OverdriveThatMatters.MOD_ID, "matter_capacitor_bank");
|
public static final ResourceLocation MATTER_CAPACITOR_BANK = new ResourceLocation(OverdriveThatMatters.MOD_ID, "matter_capacitor_bank");
|
||||||
|
public static final ResourceLocation MATTER_CABLE = new ResourceLocation(OverdriveThatMatters.MOD_ID, "matter_cable");
|
||||||
|
|
||||||
public static final ResourceLocation ANDROID_CAPABILITY = new ResourceLocation(OverdriveThatMatters.MOD_ID, "android_capability");
|
public static final ResourceLocation ANDROID_CAPABILITY = new ResourceLocation(OverdriveThatMatters.MOD_ID, "android_capability");
|
||||||
|
|
||||||
@ -67,12 +65,14 @@ public class Registry {
|
|||||||
public static final Block BATTERY_BANK = new BlockBatteryBank();
|
public static final Block BATTERY_BANK = new BlockBatteryBank();
|
||||||
public static final Block MATTER_DECOMPOSER = new BlockMatterDecomposer();
|
public static final Block MATTER_DECOMPOSER = new BlockMatterDecomposer();
|
||||||
public static final Block MATTER_CAPACITOR_BANK = new BlockMatterCapacitorBank();
|
public static final Block MATTER_CAPACITOR_BANK = new BlockMatterCapacitorBank();
|
||||||
|
public static final Block MATTER_CABLE = new BlockMatterCable();
|
||||||
|
|
||||||
static {
|
static {
|
||||||
ANDROID_STATION.setRegistryName(Names.ANDROID_STATION);
|
ANDROID_STATION.setRegistryName(Names.ANDROID_STATION);
|
||||||
BATTERY_BANK.setRegistryName(Names.BATTERY_BANK);
|
BATTERY_BANK.setRegistryName(Names.BATTERY_BANK);
|
||||||
MATTER_DECOMPOSER.setRegistryName(Names.MATTER_DECOMPOSER);
|
MATTER_DECOMPOSER.setRegistryName(Names.MATTER_DECOMPOSER);
|
||||||
MATTER_CAPACITOR_BANK.setRegistryName(Names.MATTER_CAPACITOR_BANK);
|
MATTER_CAPACITOR_BANK.setRegistryName(Names.MATTER_CAPACITOR_BANK);
|
||||||
|
MATTER_CABLE.setRegistryName(Names.MATTER_CABLE);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void register(final RegistryEvent.Register<Block> event) {
|
public static void register(final RegistryEvent.Register<Block> event) {
|
||||||
@ -80,6 +80,7 @@ public class Registry {
|
|||||||
event.getRegistry().register(BATTERY_BANK);
|
event.getRegistry().register(BATTERY_BANK);
|
||||||
event.getRegistry().register(MATTER_DECOMPOSER);
|
event.getRegistry().register(MATTER_DECOMPOSER);
|
||||||
event.getRegistry().register(MATTER_CAPACITOR_BANK);
|
event.getRegistry().register(MATTER_CAPACITOR_BANK);
|
||||||
|
event.getRegistry().register(MATTER_CABLE);
|
||||||
|
|
||||||
// OverdriveThatMatters.LOGGER.info("Registered blocks");
|
// OverdriveThatMatters.LOGGER.info("Registered blocks");
|
||||||
}
|
}
|
||||||
@ -90,6 +91,7 @@ public class Registry {
|
|||||||
public static final Item BATTERY_BANK = new BlockItem(Blocks.BATTERY_BANK, new Item.Properties().stacksTo(64).tab(CreativeModeTab.TAB_MISC));
|
public static final Item BATTERY_BANK = new BlockItem(Blocks.BATTERY_BANK, new Item.Properties().stacksTo(64).tab(CreativeModeTab.TAB_MISC));
|
||||||
public static final Item MATTER_DECOMPOSER = new BlockItem(Blocks.MATTER_DECOMPOSER, new Item.Properties().stacksTo(64).tab(CreativeModeTab.TAB_MISC));
|
public static final Item MATTER_DECOMPOSER = new BlockItem(Blocks.MATTER_DECOMPOSER, new Item.Properties().stacksTo(64).tab(CreativeModeTab.TAB_MISC));
|
||||||
public static final Item MATTER_CAPACITOR_BANK = new BlockItem(Blocks.MATTER_CAPACITOR_BANK, new Item.Properties().stacksTo(64).tab(CreativeModeTab.TAB_MISC));
|
public static final Item MATTER_CAPACITOR_BANK = new BlockItem(Blocks.MATTER_CAPACITOR_BANK, new Item.Properties().stacksTo(64).tab(CreativeModeTab.TAB_MISC));
|
||||||
|
public static final Item MATTER_CABLE = new BlockItem(Blocks.MATTER_CABLE, new Item.Properties().stacksTo(64).tab(CreativeModeTab.TAB_MISC));
|
||||||
|
|
||||||
public static final ItemPill PILL_ANDROID = new ItemPill(ItemPill.PillType.BECOME_ANDROID);
|
public static final ItemPill PILL_ANDROID = new ItemPill(ItemPill.PillType.BECOME_ANDROID);
|
||||||
public static final ItemPill PILL_HUMANE = new ItemPill(ItemPill.PillType.BECOME_HUMANE);
|
public static final ItemPill PILL_HUMANE = new ItemPill(ItemPill.PillType.BECOME_HUMANE);
|
||||||
@ -109,6 +111,7 @@ public class Registry {
|
|||||||
BATTERY_BANK.setRegistryName(Names.BATTERY_BANK);
|
BATTERY_BANK.setRegistryName(Names.BATTERY_BANK);
|
||||||
MATTER_DECOMPOSER.setRegistryName(Names.MATTER_DECOMPOSER);
|
MATTER_DECOMPOSER.setRegistryName(Names.MATTER_DECOMPOSER);
|
||||||
MATTER_CAPACITOR_BANK.setRegistryName(Names.MATTER_CAPACITOR_BANK);
|
MATTER_CAPACITOR_BANK.setRegistryName(Names.MATTER_CAPACITOR_BANK);
|
||||||
|
MATTER_CABLE.setRegistryName(Names.MATTER_CABLE);
|
||||||
|
|
||||||
PILL_ANDROID.setRegistryName(Names.PILL_ANDROID);
|
PILL_ANDROID.setRegistryName(Names.PILL_ANDROID);
|
||||||
PILL_HUMANE.setRegistryName(Names.PILL_HUMANE);
|
PILL_HUMANE.setRegistryName(Names.PILL_HUMANE);
|
||||||
@ -128,6 +131,7 @@ public class Registry {
|
|||||||
event.getRegistry().register(BATTERY_BANK);
|
event.getRegistry().register(BATTERY_BANK);
|
||||||
event.getRegistry().register(MATTER_DECOMPOSER);
|
event.getRegistry().register(MATTER_DECOMPOSER);
|
||||||
event.getRegistry().register(MATTER_CAPACITOR_BANK);
|
event.getRegistry().register(MATTER_CAPACITOR_BANK);
|
||||||
|
event.getRegistry().register(MATTER_CABLE);
|
||||||
|
|
||||||
event.getRegistry().register(PILL_ANDROID);
|
event.getRegistry().register(PILL_ANDROID);
|
||||||
event.getRegistry().register(PILL_HUMANE);
|
event.getRegistry().register(PILL_HUMANE);
|
||||||
@ -150,12 +154,14 @@ public class Registry {
|
|||||||
public static BlockEntityType<BlockEntityBatteryBank> BATTERY_BANK = BlockEntityType.Builder.of(BlockEntityBatteryBank::new, Blocks.BATTERY_BANK).build(null);
|
public static BlockEntityType<BlockEntityBatteryBank> BATTERY_BANK = BlockEntityType.Builder.of(BlockEntityBatteryBank::new, Blocks.BATTERY_BANK).build(null);
|
||||||
public static BlockEntityType<BlockEntityMatterDecomposer> MATTER_DECOMPOSER = BlockEntityType.Builder.of(BlockEntityMatterDecomposer::new, Blocks.MATTER_DECOMPOSER).build(null);
|
public static BlockEntityType<BlockEntityMatterDecomposer> MATTER_DECOMPOSER = BlockEntityType.Builder.of(BlockEntityMatterDecomposer::new, Blocks.MATTER_DECOMPOSER).build(null);
|
||||||
public static BlockEntityType<BlockEntityMatterCapacitorBank> MATTER_CAPACITOR_BANK = BlockEntityType.Builder.of(BlockEntityMatterCapacitorBank::new, Blocks.MATTER_CAPACITOR_BANK).build(null);
|
public static BlockEntityType<BlockEntityMatterCapacitorBank> MATTER_CAPACITOR_BANK = BlockEntityType.Builder.of(BlockEntityMatterCapacitorBank::new, Blocks.MATTER_CAPACITOR_BANK).build(null);
|
||||||
|
public static BlockEntityType<BlockMatterCable.BlockEntityMatterCable> MATTER_CABLE = BlockEntityType.Builder.of(BlockMatterCable.BlockEntityMatterCable::new, Blocks.MATTER_CABLE).build(null);
|
||||||
|
|
||||||
static {
|
static {
|
||||||
ANDROID_STATION.setRegistryName(Names.ANDROID_STATION);
|
ANDROID_STATION.setRegistryName(Names.ANDROID_STATION);
|
||||||
BATTERY_BANK.setRegistryName(Names.BATTERY_BANK);
|
BATTERY_BANK.setRegistryName(Names.BATTERY_BANK);
|
||||||
MATTER_DECOMPOSER.setRegistryName(Names.MATTER_DECOMPOSER);
|
MATTER_DECOMPOSER.setRegistryName(Names.MATTER_DECOMPOSER);
|
||||||
MATTER_CAPACITOR_BANK.setRegistryName(Names.MATTER_CAPACITOR_BANK);
|
MATTER_CAPACITOR_BANK.setRegistryName(Names.MATTER_CAPACITOR_BANK);
|
||||||
|
MATTER_CABLE.setRegistryName(Names.MATTER_CABLE);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void register(final RegistryEvent.Register<BlockEntityType<?>> event) {
|
public static void register(final RegistryEvent.Register<BlockEntityType<?>> event) {
|
||||||
@ -163,6 +169,7 @@ public class Registry {
|
|||||||
event.getRegistry().register(BATTERY_BANK);
|
event.getRegistry().register(BATTERY_BANK);
|
||||||
event.getRegistry().register(MATTER_DECOMPOSER);
|
event.getRegistry().register(MATTER_DECOMPOSER);
|
||||||
event.getRegistry().register(MATTER_CAPACITOR_BANK);
|
event.getRegistry().register(MATTER_CAPACITOR_BANK);
|
||||||
|
event.getRegistry().register(MATTER_CABLE);
|
||||||
|
|
||||||
// OverdriveThatMatters.LOGGER.info("Registered block entities");
|
// OverdriveThatMatters.LOGGER.info("Registered block entities");
|
||||||
}
|
}
|
||||||
|
294
src/main/java/ru/dbotthepony/mc/otm/block/BlockMatterCable.java
Normal file
294
src/main/java/ru/dbotthepony/mc/otm/block/BlockMatterCable.java
Normal file
@ -0,0 +1,294 @@
|
|||||||
|
package ru.dbotthepony.mc.otm.block;
|
||||||
|
|
||||||
|
import com.google.common.collect.ImmutableMap;
|
||||||
|
import com.mojang.math.Matrix4f;
|
||||||
|
import net.minecraft.core.BlockPos;
|
||||||
|
import net.minecraft.core.Direction;
|
||||||
|
import net.minecraft.world.level.BlockGetter;
|
||||||
|
import net.minecraft.world.level.Level;
|
||||||
|
import net.minecraft.world.level.block.Block;
|
||||||
|
import net.minecraft.world.level.block.EntityBlock;
|
||||||
|
import net.minecraft.world.level.block.entity.BlockEntity;
|
||||||
|
import net.minecraft.world.level.block.state.BlockBehaviour;
|
||||||
|
import net.minecraft.world.level.block.state.BlockState;
|
||||||
|
import net.minecraft.world.level.block.state.StateDefinition;
|
||||||
|
import net.minecraft.world.level.block.state.properties.BooleanProperty;
|
||||||
|
import net.minecraft.world.level.material.Material;
|
||||||
|
import net.minecraft.world.level.material.MaterialColor;
|
||||||
|
import net.minecraft.world.phys.shapes.BooleanOp;
|
||||||
|
import net.minecraft.world.phys.shapes.CollisionContext;
|
||||||
|
import net.minecraft.world.phys.shapes.Shapes;
|
||||||
|
import net.minecraft.world.phys.shapes.VoxelShape;
|
||||||
|
import ru.dbotthepony.mc.otm.IMatterGridCell;
|
||||||
|
import ru.dbotthepony.mc.otm.MatterGrid;
|
||||||
|
import ru.dbotthepony.mc.otm.Registry;
|
||||||
|
import ru.dbotthepony.mc.otm.capability.IMatterHandler;
|
||||||
|
|
||||||
|
import javax.annotation.Nullable;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
|
|
||||||
|
public class BlockMatterCable extends Block implements EntityBlock {
|
||||||
|
@Nullable
|
||||||
|
@Override
|
||||||
|
public BlockEntity newBlockEntity(BlockPos blockPos, BlockState blockState) {
|
||||||
|
return new BlockEntityMatterCable(blockPos, blockState);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class BlockEntityMatterCable extends BlockEntity implements IMatterGridCell {
|
||||||
|
public BlockEntityMatterCable(BlockPos p_155229_, BlockState p_155230_) {
|
||||||
|
super(Registry.BlockEntities.MATTER_CABLE, p_155229_, p_155230_);
|
||||||
|
// OverdriveThatMatters.LOGGER.debug("create cable block entity {} {} {}", this, p_155229_, p_155230_);
|
||||||
|
}
|
||||||
|
|
||||||
|
private MatterGrid grid;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setLevel(Level p_155231_) {
|
||||||
|
super.setLevel(p_155231_);
|
||||||
|
|
||||||
|
if (grid == null)
|
||||||
|
MatterGrid.scheduleDiscoverNeighbours(this, getBlockPos(), p_155231_);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onNeighbourMatterCell(BlockPos pos, Level level, Direction direction, IMatterGridCell cell) {
|
||||||
|
// OverdriveThatMatters.LOGGER.debug("Try to connect cable entity {} {} to {} {} ({})", this, pos, pos.offset(direction.getNormal()), direction, cell);
|
||||||
|
BlockState new_state = getBlockState().setValue(MAPPING_CONNECTION_PROP[direction.ordinal()], true);
|
||||||
|
|
||||||
|
if (new_state != getBlockState())
|
||||||
|
level.setBlock(getBlockPos(), new_state, UPDATE_CLIENTS);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setRemoved() {
|
||||||
|
super.setRemoved();
|
||||||
|
|
||||||
|
if (grid != null)
|
||||||
|
grid.untrack(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
@Override
|
||||||
|
public MatterGrid getMatterGrid() {
|
||||||
|
return grid;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
@Override
|
||||||
|
public IMatterHandler getMatterHandler() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isValidMatterCell() {
|
||||||
|
return !isRemoved();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setMatterGrid(MatterGrid grid) {
|
||||||
|
this.grid = grid;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static final BooleanProperty CONNECTION_SOUTH = BooleanProperty.create("connect_south");
|
||||||
|
public static final BooleanProperty CONNECTION_WEST = BooleanProperty.create("connect_west");
|
||||||
|
public static final BooleanProperty CONNECTION_EAST = BooleanProperty.create("connect_east");
|
||||||
|
public static final BooleanProperty CONNECTION_NORTH = BooleanProperty.create("connect_north");
|
||||||
|
public static final BooleanProperty CONNECTION_UP = BooleanProperty.create("connect_up");
|
||||||
|
public static final BooleanProperty CONNECTION_DOWN = BooleanProperty.create("connect_down");
|
||||||
|
|
||||||
|
public static final BooleanProperty[] MAPPING_CONNECTION_PROP = new BooleanProperty[] {
|
||||||
|
CONNECTION_DOWN,
|
||||||
|
CONNECTION_UP,
|
||||||
|
CONNECTION_NORTH,
|
||||||
|
CONNECTION_SOUTH,
|
||||||
|
CONNECTION_WEST,
|
||||||
|
CONNECTION_EAST
|
||||||
|
};
|
||||||
|
|
||||||
|
protected ImmutableMap<BlockState, VoxelShape> SHAPES;
|
||||||
|
|
||||||
|
public BlockMatterCable() {
|
||||||
|
super(BlockBehaviour.Properties.of(Material.STONE, MaterialColor.METAL).requiresCorrectToolForDrops().strength(1.0F, 6.0F));
|
||||||
|
registerDefaultState(
|
||||||
|
this.defaultBlockState()
|
||||||
|
.setValue(CONNECTION_DOWN, false)
|
||||||
|
.setValue(CONNECTION_UP, false)
|
||||||
|
.setValue(CONNECTION_NORTH, false)
|
||||||
|
.setValue(CONNECTION_SOUTH, false)
|
||||||
|
.setValue(CONNECTION_WEST, false)
|
||||||
|
.setValue(CONNECTION_EAST, false)
|
||||||
|
);
|
||||||
|
|
||||||
|
SHAPES = getShapeForEachState((state) -> {
|
||||||
|
ArrayList<VoxelShape> shapes = new ArrayList<>();
|
||||||
|
|
||||||
|
if (state.getValue(CONNECTION_SOUTH)) {
|
||||||
|
shapes.add(Shapes.box(
|
||||||
|
0.5 - 0.15,
|
||||||
|
0.5 - 0.15,
|
||||||
|
0.65,
|
||||||
|
|
||||||
|
0.5 + 0.15,
|
||||||
|
0.5 + 0.15,
|
||||||
|
1
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (state.getValue(CONNECTION_NORTH)) {
|
||||||
|
shapes.add(Shapes.box(
|
||||||
|
0.5 - 0.15,
|
||||||
|
0.5 - 0.15,
|
||||||
|
0,
|
||||||
|
|
||||||
|
0.5 + 0.15,
|
||||||
|
0.5 + 0.15,
|
||||||
|
0.35
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (state.getValue(CONNECTION_DOWN)) {
|
||||||
|
shapes.add(Shapes.box(
|
||||||
|
0.5 - 0.15,
|
||||||
|
0,
|
||||||
|
0.5 - 0.15,
|
||||||
|
|
||||||
|
0.5 + 0.15,
|
||||||
|
0.5 - 0.15,
|
||||||
|
0.5 + 0.15
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (state.getValue(CONNECTION_UP)) {
|
||||||
|
shapes.add(Shapes.box(
|
||||||
|
0.5 - 0.15,
|
||||||
|
0.5 - 0.15,
|
||||||
|
0.5 - 0.15,
|
||||||
|
|
||||||
|
0.5 + 0.15,
|
||||||
|
1,
|
||||||
|
0.5 + 0.15
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (state.getValue(CONNECTION_EAST)) {
|
||||||
|
shapes.add(Shapes.box(
|
||||||
|
0.65,
|
||||||
|
0.5 - 0.15,
|
||||||
|
0.5 - 0.15,
|
||||||
|
|
||||||
|
1,
|
||||||
|
0.5 + 0.15,
|
||||||
|
0.5 + 0.15
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (state.getValue(CONNECTION_WEST)) {
|
||||||
|
shapes.add(Shapes.box(
|
||||||
|
0,
|
||||||
|
0.5 - 0.15,
|
||||||
|
0.5 - 0.15,
|
||||||
|
|
||||||
|
0.35,
|
||||||
|
0.5 + 0.15,
|
||||||
|
0.5 + 0.15
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
VoxelShape final_shape = CORE_SHAPE;
|
||||||
|
|
||||||
|
for (VoxelShape add_shape : shapes) {
|
||||||
|
final_shape = Shapes.joinUnoptimized(final_shape, add_shape, BooleanOp.OR);
|
||||||
|
}
|
||||||
|
|
||||||
|
return final_shape;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
private final VoxelShape CORE_SHAPE = Shapes.box(
|
||||||
|
0.5 - 0.15,
|
||||||
|
0.5 - 0.15,
|
||||||
|
0.5 - 0.15,
|
||||||
|
|
||||||
|
0.5 + 0.15,
|
||||||
|
0.5 + 0.15,
|
||||||
|
0.5 + 0.15
|
||||||
|
);
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public VoxelShape getShape(BlockState p_60555_, BlockGetter p_60556_, BlockPos p_60557_, CollisionContext p_60558_) {
|
||||||
|
VoxelShape get = SHAPES.get(p_60555_);
|
||||||
|
return get != null ? get : CORE_SHAPE;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean hasDynamicShape() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// doesn't work at all
|
||||||
|
/*
|
||||||
|
@Nullable
|
||||||
|
@Override
|
||||||
|
public BlockState getStateForPlacement(BlockPlaceContext p_49820_) {
|
||||||
|
Level level = p_49820_.getLevel();
|
||||||
|
|
||||||
|
if (level.isClientSide)
|
||||||
|
return this.defaultBlockState();
|
||||||
|
|
||||||
|
BlockState state = this.defaultBlockState();
|
||||||
|
|
||||||
|
for (int i = 0; i < MAPPING_CONNECTION_PROP.length; i++) {
|
||||||
|
OverdriveThatMatters.LOGGER.info("{} {} {}", Direction.values()[i], p_49820_.getClickedPos().offset(Direction.values()[i].getNormal()), level.getBlockEntity(p_49820_.getClickedPos().offset(p_49820_.getClickedFace().getNormal()).offset(Direction.values()[i].getNormal())));
|
||||||
|
|
||||||
|
if (
|
||||||
|
level.getBlockEntity(p_49820_.getClickedPos().offset(Direction.values()[i].getNormal())) instanceof IMatterGridCell cell && cell.isValidMatterCell()// ||
|
||||||
|
//level.getBlockState(p_49820_.getClickedPos().offset(p_49820_.getClickedFace().getNormal()).offset(Direction.values()[i].getNormal())).getBlock() instanceof BlockMatterCable
|
||||||
|
) {
|
||||||
|
state.setValue(MAPPING_CONNECTION_PROP[i], true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return state;
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
// blocks
|
||||||
|
@Override
|
||||||
|
public void neighborChanged(BlockState self, Level level, BlockPos position_self, Block block_notifier, BlockPos position_notifier, boolean unknown_flag) {
|
||||||
|
Direction normal = Direction.fromNormal(position_notifier.subtract(position_self));
|
||||||
|
boolean updated = false;
|
||||||
|
BlockEntity get_entity = level.getBlockEntity(position_notifier);
|
||||||
|
|
||||||
|
if (!self.getValue(MAPPING_CONNECTION_PROP[normal.ordinal()]) && get_entity instanceof IMatterGridCell cell && cell.isValidMatterCell()) {
|
||||||
|
self = self.setValue(MAPPING_CONNECTION_PROP[normal.ordinal()], true);
|
||||||
|
updated = true;
|
||||||
|
} else if (self.getValue(MAPPING_CONNECTION_PROP[normal.ordinal()]) && (get_entity == null || get_entity instanceof IMatterGridCell cell && !cell.isValidMatterCell())) {
|
||||||
|
self = self.setValue(MAPPING_CONNECTION_PROP[normal.ordinal()], false);
|
||||||
|
updated = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (updated) {
|
||||||
|
level.setBlock(position_self, self, UPDATE_CLIENTS);
|
||||||
|
}
|
||||||
|
|
||||||
|
super.neighborChanged(self, level, position_self, block_notifier, position_notifier, unknown_flag);
|
||||||
|
}
|
||||||
|
|
||||||
|
// tiles
|
||||||
|
/*@Override
|
||||||
|
public void onNeighborChange(BlockState state, LevelReader world, BlockPos pos, BlockPos neighbor) {
|
||||||
|
super.onNeighborChange(state, world, pos, neighbor);
|
||||||
|
}*/
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void createBlockStateDefinition(StateDefinition.Builder<Block, BlockState> builder) {
|
||||||
|
builder.add(CONNECTION_SOUTH,
|
||||||
|
CONNECTION_WEST,
|
||||||
|
CONNECTION_EAST,
|
||||||
|
CONNECTION_NORTH,
|
||||||
|
CONNECTION_UP,
|
||||||
|
CONNECTION_DOWN);
|
||||||
|
}
|
||||||
|
}
|
@ -25,7 +25,7 @@ public abstract class BlockMattery extends Block {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public BlockMattery() {
|
public BlockMattery() {
|
||||||
this(BlockBehaviour.Properties.of(Material.STONE, MaterialColor.STONE).requiresCorrectToolForDrops().strength(1.5F, 6.0F));
|
this(BlockBehaviour.Properties.of(Material.STONE, MaterialColor.METAL).requiresCorrectToolForDrops().strength(1.5F, 25.0F));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -0,0 +1,74 @@
|
|||||||
|
{
|
||||||
|
"multipart": [
|
||||||
|
{
|
||||||
|
"apply": {
|
||||||
|
"model": "overdrive_that_matters:block/matter_cable_core"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"when": {
|
||||||
|
"connect_south": true
|
||||||
|
},
|
||||||
|
|
||||||
|
"apply": {
|
||||||
|
"model": "overdrive_that_matters:block/matter_cable_connection"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"when": {
|
||||||
|
"connect_west": true
|
||||||
|
},
|
||||||
|
|
||||||
|
"apply": {
|
||||||
|
"model": "overdrive_that_matters:block/matter_cable_connection",
|
||||||
|
"y": 90
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"when": {
|
||||||
|
"connect_north": true
|
||||||
|
},
|
||||||
|
|
||||||
|
"apply": {
|
||||||
|
"model": "overdrive_that_matters:block/matter_cable_connection",
|
||||||
|
"y": 180
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"when": {
|
||||||
|
"connect_east": true
|
||||||
|
},
|
||||||
|
|
||||||
|
"apply": {
|
||||||
|
"model": "overdrive_that_matters:block/matter_cable_connection",
|
||||||
|
"y": 270
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"when": {
|
||||||
|
"connect_up": true
|
||||||
|
},
|
||||||
|
|
||||||
|
"apply": {
|
||||||
|
"model": "overdrive_that_matters:block/matter_cable_connection",
|
||||||
|
"x": 90
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"when": {
|
||||||
|
"connect_down": true
|
||||||
|
},
|
||||||
|
|
||||||
|
"apply": {
|
||||||
|
"model": "overdrive_that_matters:block/matter_cable_connection",
|
||||||
|
"x": 270
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
@ -0,0 +1,15 @@
|
|||||||
|
{
|
||||||
|
"parent": "block/block",
|
||||||
|
"elements": [
|
||||||
|
{
|
||||||
|
"from": [ 6, 6, 10 ],
|
||||||
|
"to": [ 10, 10, 16 ],
|
||||||
|
"faces": {
|
||||||
|
"down": { "texture": "#connection" },
|
||||||
|
"up": { "texture": "#connection" },
|
||||||
|
"west": { "texture": "#connection" },
|
||||||
|
"east": { "texture": "#connection" }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
@ -0,0 +1,17 @@
|
|||||||
|
{
|
||||||
|
"parent": "block/block",
|
||||||
|
"elements": [
|
||||||
|
{
|
||||||
|
"from": [ 6, 6, 6 ],
|
||||||
|
"to": [ 10, 10, 10 ],
|
||||||
|
"faces": {
|
||||||
|
"down": { "texture": "#core" },
|
||||||
|
"up": { "texture": "#core" },
|
||||||
|
"north": { "texture": "#core" },
|
||||||
|
"south": { "texture": "#core" },
|
||||||
|
"west": { "texture": "#core" },
|
||||||
|
"east": { "texture": "#core" }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"parent": "overdrive_that_matters:block/matter_cable_core"
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user