From a757dce8540e573a4e2c14808aa476c948b04397 Mon Sep 17 00:00:00 2001 From: Jottyfan Date: Tue, 11 Jun 2024 22:56:21 +0200 Subject: [PATCH] drill added --- .../blockentity/BlockEntityTypes.java | 10 +++ .../blockentity/DrillBlockDownEntity.java | 62 ++++++++++++++ .../blockentity/DrillBlockEastEntity.java | 36 ++++++++ .../blockentity/DrillBlockEntity.java | 73 ++++++++++++++++ .../blockentity/DrillBlockNorthEntity.java | 36 ++++++++ .../blockentity/DrillBlockSouthEntity.java | 35 ++++++++ .../blockentity/DrillBlockWestEntity.java | 36 ++++++++ .../quickiemod/blocks/BlockDrillDown.java | 61 ++++++++++++++ .../quickiemod/blocks/BlockDrillEast.java | 61 ++++++++++++++ .../quickiemod/blocks/BlockDrillNorth.java | 61 ++++++++++++++ .../quickiemod/blocks/BlockDrillSouth.java | 61 ++++++++++++++ .../quickiemod/blocks/BlockDrillWest.java | 61 ++++++++++++++ .../quickiemod/blocks/BlockDrillstop.java | 30 +++++++ .../quickiemod/blocks/QuickieBlocks.java | 6 ++ .../quickiemod/blocks/help/DrillBlock.java | 78 ++++++++++++++++++ .../assets/quickiemod/blockstates/drill.json | 7 ++ .../quickiemod/blockstates/drilleast.json | 7 ++ .../quickiemod/blockstates/drillnorth.json | 7 ++ .../quickiemod/blockstates/drillsouth.json | 7 ++ .../quickiemod/blockstates/drillstop.json | 7 ++ .../quickiemod/blockstates/drillwest.json | 7 ++ .../assets/quickiemod/models/block/drill.json | 6 ++ .../quickiemod/models/block/drilleast.json | 45 ++++++++++ .../quickiemod/models/block/drillnorth.json | 45 ++++++++++ .../quickiemod/models/block/drillsouth.json | 45 ++++++++++ .../quickiemod/models/block/drillstop.json | 6 ++ .../quickiemod/models/block/drillwest.json | 45 ++++++++++ .../assets/quickiemod/models/item/drill.json | 10 +++ .../quickiemod/models/item/drilleast.json | 10 +++ .../quickiemod/models/item/drillnorth.json | 10 +++ .../quickiemod/models/item/drillsouth.json | 10 +++ .../quickiemod/models/item/drillstop.json | 10 +++ .../quickiemod/models/item/drillwest.json | 10 +++ .../quickiemod/textures/block/drill.png | Bin 0 -> 6128 bytes .../quickiemod/textures/block/drilleast.png | Bin 0 -> 6130 bytes .../quickiemod/textures/block/drillnorth.png | Bin 0 -> 6114 bytes .../quickiemod/textures/block/drillsouth.png | Bin 0 -> 6075 bytes .../quickiemod/textures/block/drillstop.png | Bin 0 -> 2020 bytes .../quickiemod/textures/block/drillwest.png | Bin 0 -> 6118 bytes .../data/quickiemod/recipes/shaped_drill.json | 20 +++++ .../quickiemod/recipes/shaped_drillstop.json | 20 +++++ .../shapeless_drill_fromdrillnorth.json | 12 +++ .../shapeless_drilleast_fromdrill.json | 12 +++ .../shapeless_drillnorth_fromdrillwest.json | 12 +++ .../shapeless_drillsouth_fromdrilleast.json | 12 +++ .../shapeless_drillwest_fromdrillsouth.json | 12 +++ 46 files changed, 1101 insertions(+) create mode 100644 src/main/java/de/jottyfan/quickiemod/blockentity/DrillBlockDownEntity.java create mode 100644 src/main/java/de/jottyfan/quickiemod/blockentity/DrillBlockEastEntity.java create mode 100644 src/main/java/de/jottyfan/quickiemod/blockentity/DrillBlockEntity.java create mode 100644 src/main/java/de/jottyfan/quickiemod/blockentity/DrillBlockNorthEntity.java create mode 100644 src/main/java/de/jottyfan/quickiemod/blockentity/DrillBlockSouthEntity.java create mode 100644 src/main/java/de/jottyfan/quickiemod/blockentity/DrillBlockWestEntity.java create mode 100644 src/main/java/de/jottyfan/quickiemod/blocks/BlockDrillDown.java create mode 100644 src/main/java/de/jottyfan/quickiemod/blocks/BlockDrillEast.java create mode 100644 src/main/java/de/jottyfan/quickiemod/blocks/BlockDrillNorth.java create mode 100644 src/main/java/de/jottyfan/quickiemod/blocks/BlockDrillSouth.java create mode 100644 src/main/java/de/jottyfan/quickiemod/blocks/BlockDrillWest.java create mode 100644 src/main/java/de/jottyfan/quickiemod/blocks/BlockDrillstop.java create mode 100644 src/main/java/de/jottyfan/quickiemod/blocks/help/DrillBlock.java create mode 100644 src/main/resources/assets/quickiemod/blockstates/drill.json create mode 100644 src/main/resources/assets/quickiemod/blockstates/drilleast.json create mode 100644 src/main/resources/assets/quickiemod/blockstates/drillnorth.json create mode 100644 src/main/resources/assets/quickiemod/blockstates/drillsouth.json create mode 100644 src/main/resources/assets/quickiemod/blockstates/drillstop.json create mode 100644 src/main/resources/assets/quickiemod/blockstates/drillwest.json create mode 100644 src/main/resources/assets/quickiemod/models/block/drill.json create mode 100644 src/main/resources/assets/quickiemod/models/block/drilleast.json create mode 100644 src/main/resources/assets/quickiemod/models/block/drillnorth.json create mode 100644 src/main/resources/assets/quickiemod/models/block/drillsouth.json create mode 100644 src/main/resources/assets/quickiemod/models/block/drillstop.json create mode 100644 src/main/resources/assets/quickiemod/models/block/drillwest.json create mode 100644 src/main/resources/assets/quickiemod/models/item/drill.json create mode 100644 src/main/resources/assets/quickiemod/models/item/drilleast.json create mode 100644 src/main/resources/assets/quickiemod/models/item/drillnorth.json create mode 100644 src/main/resources/assets/quickiemod/models/item/drillsouth.json create mode 100644 src/main/resources/assets/quickiemod/models/item/drillstop.json create mode 100644 src/main/resources/assets/quickiemod/models/item/drillwest.json create mode 100644 src/main/resources/assets/quickiemod/textures/block/drill.png create mode 100644 src/main/resources/assets/quickiemod/textures/block/drilleast.png create mode 100644 src/main/resources/assets/quickiemod/textures/block/drillnorth.png create mode 100644 src/main/resources/assets/quickiemod/textures/block/drillsouth.png create mode 100644 src/main/resources/assets/quickiemod/textures/block/drillstop.png create mode 100644 src/main/resources/assets/quickiemod/textures/block/drillwest.png create mode 100644 src/main/resources/data/quickiemod/recipes/shaped_drill.json create mode 100644 src/main/resources/data/quickiemod/recipes/shaped_drillstop.json create mode 100644 src/main/resources/data/quickiemod/recipes/shapeless_drill_fromdrillnorth.json create mode 100644 src/main/resources/data/quickiemod/recipes/shapeless_drilleast_fromdrill.json create mode 100644 src/main/resources/data/quickiemod/recipes/shapeless_drillnorth_fromdrillwest.json create mode 100644 src/main/resources/data/quickiemod/recipes/shapeless_drillsouth_fromdrilleast.json create mode 100644 src/main/resources/data/quickiemod/recipes/shapeless_drillwest_fromdrillsouth.json diff --git a/src/main/java/de/jottyfan/quickiemod/blockentity/BlockEntityTypes.java b/src/main/java/de/jottyfan/quickiemod/blockentity/BlockEntityTypes.java index f6339bc..9f9532f 100644 --- a/src/main/java/de/jottyfan/quickiemod/blockentity/BlockEntityTypes.java +++ b/src/main/java/de/jottyfan/quickiemod/blockentity/BlockEntityTypes.java @@ -19,4 +19,14 @@ public class BlockEntityTypes { BlockEntityType.Builder.create(ItemHoarderBlockEntity::new, QuickieBlocks.ITEMHOARDER.getBlock()).build(null)); public static final BlockEntityType MONSTERHOARDER = Registry.register(Registries.BLOCK_ENTITY_TYPE, BlockEntityIdentity.MONSTERHOARDER, BlockEntityType.Builder.create(MonsterHoarderBlockEntity::new, QuickieBlocks.MONSTERHOARDER.getBlock()).build(null)); + public static final BlockEntityType DRILL_DOWN = Registry.register(Registries.BLOCK_ENTITY_TYPE, BlockEntityIdentity.DRILL_DOWN, + BlockEntityType.Builder.create(DrillBlockDownEntity::new, QuickieBlocks.DRILL_DOWN.getBlock()).build(null)); + public static final BlockEntityType DRILL_EAST = Registry.register(Registries.BLOCK_ENTITY_TYPE, BlockEntityIdentity.DRILL_EAST, + BlockEntityType.Builder.create(DrillBlockEastEntity::new, QuickieBlocks.DRILL_EAST.getBlock()).build(null)); + public static final BlockEntityType DRILL_SOUTH = Registry.register(Registries.BLOCK_ENTITY_TYPE, BlockEntityIdentity.DRILL_SOUTH, + BlockEntityType.Builder.create(DrillBlockSouthEntity::new, QuickieBlocks.DRILL_SOUTH.getBlock()).build(null)); + public static final BlockEntityType DRILL_WEST = Registry.register(Registries.BLOCK_ENTITY_TYPE, BlockEntityIdentity.DRILL_WEST, + BlockEntityType.Builder.create(DrillBlockWestEntity::new, QuickieBlocks.DRILL_WEST.getBlock()).build(null)); + public static final BlockEntityType DRILL_NORTH = Registry.register(Registries.BLOCK_ENTITY_TYPE, BlockEntityIdentity.DRILL_NORTH, + BlockEntityType.Builder.create(DrillBlockNorthEntity::new, QuickieBlocks.DRILL_NORTH.getBlock()).build(null)); } diff --git a/src/main/java/de/jottyfan/quickiemod/blockentity/DrillBlockDownEntity.java b/src/main/java/de/jottyfan/quickiemod/blockentity/DrillBlockDownEntity.java new file mode 100644 index 0000000..0af0101 --- /dev/null +++ b/src/main/java/de/jottyfan/quickiemod/blockentity/DrillBlockDownEntity.java @@ -0,0 +1,62 @@ +package de.jottyfan.quickiemod.blockentity; + +import java.util.ArrayList; +import java.util.List; + +import net.minecraft.block.BlockState; +import net.minecraft.block.entity.BlockEntity; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +/** + * + * @author jotty + * + */ +public class DrillBlockDownEntity extends DrillBlockEntity { + + private static final Integer MAXDRILLSTEP = 20; + + public DrillBlockDownEntity(BlockPos pos, BlockState state) { + super(BlockEntityTypes.DRILL_DOWN, pos, state, MAXDRILLSTEP); + } + + public static void tick(World world, BlockPos pos, BlockState state, BlockEntity be) { + if (be instanceof DrillBlockDownEntity) { + DrillBlockDownEntity dbe = (DrillBlockDownEntity) be; + DrillBlockEntity.tick(world, pos, state, dbe, MAXDRILLSTEP, generateBlockPos(pos)); + } + } + + public static final List generateBlockPos(BlockPos pos) { + List list = new ArrayList<>(); + Integer tracesMod = pos.getY() % 8; + tracesMod = tracesMod < 0 ? tracesMod * -1 : tracesMod; // lower that 0 makes it negative + if (tracesMod != 0) { + list.add(pos.north()); + } + if (tracesMod != 1) { + list.add(pos.north().west()); + } + if (tracesMod != 2) { + list.add(pos.west()); + } + if (tracesMod != 3) { + list.add(pos.south().west()); + } + if (tracesMod != 4) { + list.add(pos.south()); + } + if (tracesMod != 5) { + list.add(pos.south().east()); + } + if (tracesMod != 6) { + list.add(pos.east()); + } + if (tracesMod != 7) { + list.add(pos.north().east()); + } + list.add(pos.down()); // must be last position + return list; + } +} diff --git a/src/main/java/de/jottyfan/quickiemod/blockentity/DrillBlockEastEntity.java b/src/main/java/de/jottyfan/quickiemod/blockentity/DrillBlockEastEntity.java new file mode 100644 index 0000000..2d1fa31 --- /dev/null +++ b/src/main/java/de/jottyfan/quickiemod/blockentity/DrillBlockEastEntity.java @@ -0,0 +1,36 @@ +package de.jottyfan.quickiemod.blockentity; + +import java.util.ArrayList; +import java.util.List; + +import net.minecraft.block.BlockState; +import net.minecraft.block.entity.BlockEntity; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +/** + * + * @author jotty + * + */ +public class DrillBlockEastEntity extends DrillBlockEntity { + + private static final Integer MAXDRILLSTEP = 24; + + public DrillBlockEastEntity(BlockPos pos, BlockState state) { + super(BlockEntityTypes.DRILL_EAST, pos, state, MAXDRILLSTEP); + } + + public static void tick(World world, BlockPos pos, BlockState state, BlockEntity be) { + if (be instanceof DrillBlockEastEntity) { + DrillBlockEastEntity dbe = (DrillBlockEastEntity) be; + List list = new ArrayList<>(); + list.add(pos.east()); + list.add(pos.east().up()); + list.add(pos.east().up().up()); + list.add(pos.east().up().up().up()); + list.add(pos.east().down()); // must be last position + DrillBlockEntity.tick(world, pos, state, dbe, MAXDRILLSTEP, list); + } + } +} diff --git a/src/main/java/de/jottyfan/quickiemod/blockentity/DrillBlockEntity.java b/src/main/java/de/jottyfan/quickiemod/blockentity/DrillBlockEntity.java new file mode 100644 index 0000000..df6d2fb --- /dev/null +++ b/src/main/java/de/jottyfan/quickiemod/blockentity/DrillBlockEntity.java @@ -0,0 +1,73 @@ +package de.jottyfan.quickiemod.blockentity; + +import java.util.List; + +import de.jottyfan.quickiemod.blocks.QuickieBlocks; +import de.jottyfan.quickiemod.blocks.help.DrillBlock; +import net.minecraft.block.BlockState; +import net.minecraft.block.Blocks; +import net.minecraft.block.entity.BlockEntity; +import net.minecraft.block.entity.BlockEntityType; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public abstract class DrillBlockEntity extends BlockEntity { + private Integer drillstep; + private final Integer maxDrillStep; + + public DrillBlockEntity(BlockEntityType type, BlockPos pos, BlockState state, Integer maxDrillStep) { + super(type, pos, state); + this.maxDrillStep = maxDrillStep; + } + + protected static final void moveBlockWithEntity(BlockPos from, BlockPos to, World world) { + BlockEntity be = world.getBlockEntity(from); + BlockState bs = world.getBlockState(from); + if (be != null) { + world.setBlockState(from, Blocks.AIR.getDefaultState()); + Integer newFuel = bs.get(DrillBlock.FUEL) - 1; + world.setBlockState(to, bs.with(DrillBlock.FUEL, newFuel)); + world.addBlockEntity(be); + world.removeBlockEntity(from); + } + } + + protected static final Boolean drill(BlockPos pos, List toList, World world) { + Boolean lastSuccess = false; + for (BlockPos to : toList) { + if (!world.getBlockState(to).isOf(Blocks.BEDROCK) && !world.getBlockState(to).isOf(QuickieBlocks.DRILLSTOP.getBlock())) { + world.breakBlock(to, true); + lastSuccess = pos.down() != to; // no need for the falling one + } else { + lastSuccess = false; // in case that the last one is a bedrock or a drillstop + } + } + return lastSuccess; + } + + public static void tick(World world, BlockPos pos, BlockState state, DrillBlockEntity be, Integer maxDrillStep, + List drillPosition) { + if (state.get(DrillBlock.FUEL) > 0) { + if (be.getDrillstep() < 1) { + be.setDrillstep(maxDrillStep); + if (drill(pos, drillPosition, world)) { + moveBlockWithEntity(pos, drillPosition.get(drillPosition.size() - 1), world); + } + } else { + be.doDrillstep(); + } + } + } + + public void doDrillstep() { + setDrillstep(getDrillstep() - 1); + } + + public Integer getDrillstep() { + return drillstep == null ? maxDrillStep : drillstep; + } + + public void setDrillstep(Integer drillstep) { + this.drillstep = drillstep; + } +} diff --git a/src/main/java/de/jottyfan/quickiemod/blockentity/DrillBlockNorthEntity.java b/src/main/java/de/jottyfan/quickiemod/blockentity/DrillBlockNorthEntity.java new file mode 100644 index 0000000..fa11e24 --- /dev/null +++ b/src/main/java/de/jottyfan/quickiemod/blockentity/DrillBlockNorthEntity.java @@ -0,0 +1,36 @@ +package de.jottyfan.quickiemod.blockentity; + +import java.util.ArrayList; +import java.util.List; + +import net.minecraft.block.BlockState; +import net.minecraft.block.entity.BlockEntity; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +/** + * + * @author jotty + * + */ +public class DrillBlockNorthEntity extends DrillBlockEntity { + + private static final Integer MAXDRILLSTEP = 24; + + public DrillBlockNorthEntity(BlockPos pos, BlockState state) { + super(BlockEntityTypes.DRILL_NORTH, pos, state, MAXDRILLSTEP); + } + + public static void tick(World world, BlockPos pos, BlockState state, BlockEntity be) { + if (be instanceof DrillBlockNorthEntity) { + DrillBlockNorthEntity dbe = (DrillBlockNorthEntity) be; + List list = new ArrayList<>(); + list.add(pos.north()); + list.add(pos.north().up()); + list.add(pos.north().up().up()); + list.add(pos.north().up().up().up()); + list.add(pos.north().down()); // must be last position + DrillBlockEntity.tick(world, pos, state, dbe, MAXDRILLSTEP, list); + } + } +} diff --git a/src/main/java/de/jottyfan/quickiemod/blockentity/DrillBlockSouthEntity.java b/src/main/java/de/jottyfan/quickiemod/blockentity/DrillBlockSouthEntity.java new file mode 100644 index 0000000..1be1bb9 --- /dev/null +++ b/src/main/java/de/jottyfan/quickiemod/blockentity/DrillBlockSouthEntity.java @@ -0,0 +1,35 @@ +package de.jottyfan.quickiemod.blockentity; + +import java.util.ArrayList; +import java.util.List; + +import net.minecraft.block.BlockState; +import net.minecraft.block.entity.BlockEntity; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +/** + * + * @author jotty + * + */ +public class DrillBlockSouthEntity extends DrillBlockEntity { + private static final Integer MAXDRILLSTEP = 24; + + public DrillBlockSouthEntity(BlockPos pos, BlockState state) { + super(BlockEntityTypes.DRILL_SOUTH, pos, state, MAXDRILLSTEP); + } + + public static void tick(World world, BlockPos pos, BlockState state, BlockEntity be) { + if (be instanceof DrillBlockSouthEntity) { + DrillBlockSouthEntity dbe = (DrillBlockSouthEntity) be; + List list = new ArrayList<>(); + list.add(pos.south()); + list.add(pos.south().up()); + list.add(pos.south().up().up()); + list.add(pos.south().up().up().up()); + list.add(pos.south().down()); // must be last position + DrillBlockEntity.tick(world, pos, state, dbe, MAXDRILLSTEP, list); + } + } +} diff --git a/src/main/java/de/jottyfan/quickiemod/blockentity/DrillBlockWestEntity.java b/src/main/java/de/jottyfan/quickiemod/blockentity/DrillBlockWestEntity.java new file mode 100644 index 0000000..c894240 --- /dev/null +++ b/src/main/java/de/jottyfan/quickiemod/blockentity/DrillBlockWestEntity.java @@ -0,0 +1,36 @@ +package de.jottyfan.quickiemod.blockentity; + +import java.util.ArrayList; +import java.util.List; + +import net.minecraft.block.BlockState; +import net.minecraft.block.entity.BlockEntity; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +/** + * + * @author jotty + * + */ +public class DrillBlockWestEntity extends DrillBlockEntity { + + private static final Integer MAXDRILLSTEP = 24; + + public DrillBlockWestEntity(BlockPos pos, BlockState state) { + super(BlockEntityTypes.DRILL_WEST, pos, state, MAXDRILLSTEP); + } + + public static void tick(World world, BlockPos pos, BlockState state, BlockEntity be) { + if (be instanceof DrillBlockWestEntity) { + DrillBlockWestEntity dbe = (DrillBlockWestEntity) be; + List list = new ArrayList<>(); + list.add(pos.west()); + list.add(pos.west().up()); + list.add(pos.west().up().up()); + list.add(pos.west().up().up().up()); + list.add(pos.west().down()); // must be last position + DrillBlockEntity.tick(world, pos, state, dbe, MAXDRILLSTEP, list); + } + } +} diff --git a/src/main/java/de/jottyfan/quickiemod/blocks/BlockDrillDown.java b/src/main/java/de/jottyfan/quickiemod/blocks/BlockDrillDown.java new file mode 100644 index 0000000..765f6be --- /dev/null +++ b/src/main/java/de/jottyfan/quickiemod/blocks/BlockDrillDown.java @@ -0,0 +1,61 @@ +package de.jottyfan.quickiemod.blocks; + +import java.util.ArrayList; +import java.util.List; + +import com.mojang.serialization.MapCodec; + +import de.jottyfan.quickiemod.blockentity.DrillBlockDownEntity; +import de.jottyfan.quickiemod.blocks.help.DrillBlock; +import net.minecraft.block.AbstractBlock; +import net.minecraft.block.BlockEntityProvider; +import net.minecraft.block.BlockRenderType; +import net.minecraft.block.BlockState; +import net.minecraft.block.FallingBlock; +import net.minecraft.block.entity.BlockEntity; +import net.minecraft.block.entity.BlockEntityTicker; +import net.minecraft.block.entity.BlockEntityType; +import net.minecraft.item.ItemStack; +import net.minecraft.loot.context.LootContextParameterSet.Builder; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +/** + * + * @author jotty + * + */ +public class BlockDrillDown extends DrillBlock implements BlockEntityProvider { + + public BlockDrillDown() { + super(AbstractBlock.Settings.create().hardness(2.5f)); + } + + @Override + public BlockEntity createBlockEntity(BlockPos pos, BlockState blockState) { + return new DrillBlockDownEntity(pos, blockState); + } + + @Override + public List getDroppedStacks(BlockState state, Builder builder) { + List list = new ArrayList<>(); + list.add(new ItemStack(QuickieBlocks.DRILL_DOWN.getBlock())); + return list; + } + + @Override + public BlockRenderType getRenderType(BlockState state) { + return BlockRenderType.MODEL; + } + + @Override + public BlockEntityTicker getTicker(World world, BlockState state, + BlockEntityType type) { + return (world1, pos, state1, be) -> DrillBlockDownEntity.tick(world1, pos, state1, be); + } + + @Override + protected MapCodec getCodec() { + return null; // TODO: what to return here? + } +} diff --git a/src/main/java/de/jottyfan/quickiemod/blocks/BlockDrillEast.java b/src/main/java/de/jottyfan/quickiemod/blocks/BlockDrillEast.java new file mode 100644 index 0000000..faafa38 --- /dev/null +++ b/src/main/java/de/jottyfan/quickiemod/blocks/BlockDrillEast.java @@ -0,0 +1,61 @@ +package de.jottyfan.quickiemod.blocks; + +import java.util.ArrayList; +import java.util.List; + +import com.mojang.serialization.MapCodec; + +import de.jottyfan.quickiemod.blockentity.DrillBlockEastEntity; +import de.jottyfan.quickiemod.blocks.help.DrillBlock; +import net.minecraft.block.AbstractBlock; +import net.minecraft.block.BlockEntityProvider; +import net.minecraft.block.BlockRenderType; +import net.minecraft.block.BlockState; +import net.minecraft.block.FallingBlock; +import net.minecraft.block.entity.BlockEntity; +import net.minecraft.block.entity.BlockEntityTicker; +import net.minecraft.block.entity.BlockEntityType; +import net.minecraft.item.ItemStack; +import net.minecraft.loot.context.LootContextParameterSet.Builder; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +/** + * + * @author jotty + * + */ +public class BlockDrillEast extends DrillBlock implements BlockEntityProvider { + + public BlockDrillEast() { + super(AbstractBlock.Settings.create().hardness(2.5f)); + } + + @Override + public BlockEntity createBlockEntity(BlockPos pos, BlockState blockState) { + return new DrillBlockEastEntity(pos, blockState); + } + + @Override + public List getDroppedStacks(BlockState state, Builder builder) { + List list = new ArrayList<>(); + list.add(new ItemStack(QuickieBlocks.DRILL_EAST.getBlock())); + return list; + } + + @Override + public BlockRenderType getRenderType(BlockState state) { + return BlockRenderType.MODEL; + } + + @Override + public BlockEntityTicker getTicker(World world, BlockState state, BlockEntityType type){ + return (world1, pos, state1, be) -> DrillBlockEastEntity.tick(world1, pos, state1, be); + } + + @Override + protected MapCodec getCodec() { + // TODO Auto-generated method stub + return null; + } +} diff --git a/src/main/java/de/jottyfan/quickiemod/blocks/BlockDrillNorth.java b/src/main/java/de/jottyfan/quickiemod/blocks/BlockDrillNorth.java new file mode 100644 index 0000000..b226876 --- /dev/null +++ b/src/main/java/de/jottyfan/quickiemod/blocks/BlockDrillNorth.java @@ -0,0 +1,61 @@ +package de.jottyfan.quickiemod.blocks; + +import java.util.ArrayList; +import java.util.List; + +import com.mojang.serialization.MapCodec; + +import de.jottyfan.quickiemod.blockentity.DrillBlockNorthEntity; +import de.jottyfan.quickiemod.blocks.help.DrillBlock; +import net.minecraft.block.AbstractBlock; +import net.minecraft.block.BlockEntityProvider; +import net.minecraft.block.BlockRenderType; +import net.minecraft.block.BlockState; +import net.minecraft.block.FallingBlock; +import net.minecraft.block.entity.BlockEntity; +import net.minecraft.block.entity.BlockEntityTicker; +import net.minecraft.block.entity.BlockEntityType; +import net.minecraft.item.ItemStack; +import net.minecraft.loot.context.LootContextParameterSet.Builder; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +/** + * + * @author jotty + * + */ +public class BlockDrillNorth extends DrillBlock implements BlockEntityProvider { + + public BlockDrillNorth() { + super(AbstractBlock.Settings.create().hardness(2.5f)); + } + + @Override + public BlockEntity createBlockEntity(BlockPos pos, BlockState blockState) { + return new DrillBlockNorthEntity(pos, blockState); + } + + @Override + public List getDroppedStacks(BlockState state, Builder builder) { + List list = new ArrayList<>(); + list.add(new ItemStack(QuickieBlocks.DRILL_NORTH.getBlock())); + return list; + } + + @Override + public BlockRenderType getRenderType(BlockState state) { + return BlockRenderType.MODEL; + } + + @Override + public BlockEntityTicker getTicker(World world, BlockState state, BlockEntityType type){ + return (world1, pos, state1, be) -> DrillBlockNorthEntity.tick(world1, pos, state1, be); + } + + @Override + protected MapCodec getCodec() { + // TODO Auto-generated method stub + return null; + } +} diff --git a/src/main/java/de/jottyfan/quickiemod/blocks/BlockDrillSouth.java b/src/main/java/de/jottyfan/quickiemod/blocks/BlockDrillSouth.java new file mode 100644 index 0000000..92b73bb --- /dev/null +++ b/src/main/java/de/jottyfan/quickiemod/blocks/BlockDrillSouth.java @@ -0,0 +1,61 @@ +package de.jottyfan.quickiemod.blocks; + +import java.util.ArrayList; +import java.util.List; + +import com.mojang.serialization.MapCodec; + +import de.jottyfan.quickiemod.blockentity.DrillBlockSouthEntity; +import de.jottyfan.quickiemod.blocks.help.DrillBlock; +import net.minecraft.block.AbstractBlock; +import net.minecraft.block.BlockEntityProvider; +import net.minecraft.block.BlockRenderType; +import net.minecraft.block.BlockState; +import net.minecraft.block.FallingBlock; +import net.minecraft.block.entity.BlockEntity; +import net.minecraft.block.entity.BlockEntityTicker; +import net.minecraft.block.entity.BlockEntityType; +import net.minecraft.item.ItemStack; +import net.minecraft.loot.context.LootContextParameterSet.Builder; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +/** + * + * @author jotty + * + */ +public class BlockDrillSouth extends DrillBlock implements BlockEntityProvider { + + public BlockDrillSouth() { + super(AbstractBlock.Settings.create().hardness(2.5f)); + } + + @Override + public BlockEntity createBlockEntity(BlockPos pos, BlockState blockState) { + return new DrillBlockSouthEntity(pos, blockState); + } + + @Override + public List getDroppedStacks(BlockState state, Builder builder) { + List list = new ArrayList<>(); + list.add(new ItemStack(QuickieBlocks.DRILL_SOUTH.getBlock())); + return list; + } + + @Override + public BlockRenderType getRenderType(BlockState state) { + return BlockRenderType.MODEL; + } + + @Override + public BlockEntityTicker getTicker(World world, BlockState state, BlockEntityType type){ + return (world1, pos, state1, be) -> DrillBlockSouthEntity.tick(world1, pos, state1, be); + } + + @Override + protected MapCodec getCodec() { + // TODO Auto-generated method stub + return null; + } +} diff --git a/src/main/java/de/jottyfan/quickiemod/blocks/BlockDrillWest.java b/src/main/java/de/jottyfan/quickiemod/blocks/BlockDrillWest.java new file mode 100644 index 0000000..d602e9a --- /dev/null +++ b/src/main/java/de/jottyfan/quickiemod/blocks/BlockDrillWest.java @@ -0,0 +1,61 @@ +package de.jottyfan.quickiemod.blocks; + +import java.util.ArrayList; +import java.util.List; + +import com.mojang.serialization.MapCodec; + +import de.jottyfan.quickiemod.blockentity.DrillBlockWestEntity; +import de.jottyfan.quickiemod.blocks.help.DrillBlock; +import net.minecraft.block.AbstractBlock; +import net.minecraft.block.BlockEntityProvider; +import net.minecraft.block.BlockRenderType; +import net.minecraft.block.BlockState; +import net.minecraft.block.FallingBlock; +import net.minecraft.block.entity.BlockEntity; +import net.minecraft.block.entity.BlockEntityTicker; +import net.minecraft.block.entity.BlockEntityType; +import net.minecraft.item.ItemStack; +import net.minecraft.loot.context.LootContextParameterSet.Builder; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +/** + * + * @author jotty + * + */ +public class BlockDrillWest extends DrillBlock implements BlockEntityProvider { + + public BlockDrillWest() { + super(AbstractBlock.Settings.create().hardness(2.5f)); + } + + @Override + public BlockEntity createBlockEntity(BlockPos pos, BlockState blockState) { + return new DrillBlockWestEntity(pos, blockState); + } + + @Override + public List getDroppedStacks(BlockState state, Builder builder) { + List list = new ArrayList<>(); + list.add(new ItemStack(QuickieBlocks.DRILL_WEST.getBlock())); + return list; + } + + @Override + public BlockRenderType getRenderType(BlockState state) { + return BlockRenderType.MODEL; + } + + @Override + public BlockEntityTicker getTicker(World world, BlockState state, BlockEntityType type){ + return (world1, pos, state1, be) -> DrillBlockWestEntity.tick(world1, pos, state1, be); + } + + @Override + protected MapCodec getCodec() { + // TODO Auto-generated method stub + return null; + } +} diff --git a/src/main/java/de/jottyfan/quickiemod/blocks/BlockDrillstop.java b/src/main/java/de/jottyfan/quickiemod/blocks/BlockDrillstop.java new file mode 100644 index 0000000..f5fc456 --- /dev/null +++ b/src/main/java/de/jottyfan/quickiemod/blocks/BlockDrillstop.java @@ -0,0 +1,30 @@ +package de.jottyfan.quickiemod.blocks; + +import java.util.ArrayList; +import java.util.List; + +import net.minecraft.block.AbstractBlock; +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.item.ItemStack; +import net.minecraft.loot.context.LootContextParameterSet.Builder; + + +/** + * + * @author jotty + * + */ +public class BlockDrillstop extends Block { + + public BlockDrillstop() { + super(AbstractBlock.Settings.create().hardness(2.5f)); + } + + @Override + public List getDroppedStacks(BlockState state, Builder builder) { + List list = new ArrayList<>(); + list.add(new ItemStack(QuickieBlocks.DRILLSTOP.getBlock())); + return list; + } +} diff --git a/src/main/java/de/jottyfan/quickiemod/blocks/QuickieBlocks.java b/src/main/java/de/jottyfan/quickiemod/blocks/QuickieBlocks.java index 746e2bd..8d83df5 100644 --- a/src/main/java/de/jottyfan/quickiemod/blocks/QuickieBlocks.java +++ b/src/main/java/de/jottyfan/quickiemod/blocks/QuickieBlocks.java @@ -9,6 +9,12 @@ import net.minecraft.block.Block; */ public enum QuickieBlocks { // @formatter:off + DRILL_DOWN(new BlockDrillDown(), "drill"), + DRILL_EAST(new BlockDrillEast(), "drilleast"), + DRILL_SOUTH(new BlockDrillSouth(), "drillsouth"), + DRILL_WEST(new BlockDrillWest(), "drillwest"), + DRILL_NORTH(new BlockDrillNorth(), "drillnorth"), + DRILLSTOP(new BlockDrillstop(), "drillstop"), MONSTERHOARDER(new BlockMonsterhoarder(), "monsterhoarder"), ITEMHOARDER(new BlockItemhoarder(), "itemhoarder"), LAVAHOARDER(new BlockLavahoarder(), "lavahoarder", false), diff --git a/src/main/java/de/jottyfan/quickiemod/blocks/help/DrillBlock.java b/src/main/java/de/jottyfan/quickiemod/blocks/help/DrillBlock.java new file mode 100644 index 0000000..9b5123d --- /dev/null +++ b/src/main/java/de/jottyfan/quickiemod/blocks/help/DrillBlock.java @@ -0,0 +1,78 @@ +package de.jottyfan.quickiemod.blocks.help; + +import java.util.HashMap; +import java.util.Map; + +import de.jottyfan.quickiemod.items.QuickieItems; +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.block.FallingBlock; +import net.minecraft.entity.ItemEntity; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.item.Items; +import net.minecraft.state.property.IntProperty; +import net.minecraft.text.Text; +import net.minecraft.util.ActionResult; +import net.minecraft.util.hit.BlockHitResult; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +/** + * + * @author jotty + * + */ +public abstract class DrillBlock extends FallingBlock { + private static final Integer MAX_FUEL = 255; + public static final IntProperty FUEL = IntProperty.of("fuel", 0, MAX_FUEL); + + public DrillBlock(Settings settings) { + super(settings); + setDefaultState(getDefaultState().with(FUEL, 0)); + } + + @Override + public BlockState onBreak(World world, BlockPos pos, BlockState state, PlayerEntity player) { + Integer fuelLeft = state.get(FUEL); + world.spawnEntity(new ItemEntity(world, pos.getX(), pos.getY(), pos.getZ(), new ItemStack(QuickieItems.CANOLABOTTLE.getItem(), fuelLeft))); + return super.onBreak(world, pos, state, player); + } + + @Override + protected void appendProperties(net.minecraft.state.StateManager.Builder builder) { + builder.add(FUEL); + } + + @Override + protected ActionResult onUse(BlockState state, World world, BlockPos pos, PlayerEntity player, BlockHitResult hit) { + Map loadings = new HashMap<>(); + loadings.put(QuickieItems.CANOLABOTTLE.getItem(), 8); + loadings.put(QuickieItems.CANOLABOTTLESTACK.getItem(), 72); + ItemStack stack = player.getStackInHand(player.getActiveHand()); + Item item = stack.getItem(); + if (stack.isEmpty() || !loadings.containsKey(item) ) { + if (world.isClient()) { + player.sendMessage(Text.translatable("msg.drill.fuelinfo", state.get(FUEL))); + } + } else { + Integer fuelWeight = loadings.get(item); + if (fuelWeight != null) { + Integer load = MAX_FUEL - state.get(FUEL); + if (load < fuelWeight) { +// Integer numberOfTooMuchLoad = fuelWeight - load; + fuelWeight = load; + } + world.setBlockState(pos, state.with(FUEL, state.get(FUEL) + fuelWeight)); + if (item.equals(QuickieItems.CANOLABOTTLE.getItem())) { + world.spawnEntity(new ItemEntity(world, pos.getX(), pos.getY(), pos.getZ(), new ItemStack(Items.GLASS_BOTTLE, 1))); + } else if (item.equals(QuickieItems.CANOLABOTTLESTACK.getItem())) { + world.spawnEntity(new ItemEntity(world, pos.getX(), pos.getY(), pos.getZ(), new ItemStack(Items.GLASS_BOTTLE, 9))); + } + stack.decrement(1); + } + } + return ActionResult.PASS; + } +} diff --git a/src/main/resources/assets/quickiemod/blockstates/drill.json b/src/main/resources/assets/quickiemod/blockstates/drill.json new file mode 100644 index 0000000..c2d1382 --- /dev/null +++ b/src/main/resources/assets/quickiemod/blockstates/drill.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "quickiemod:block/drill" + } + } +} diff --git a/src/main/resources/assets/quickiemod/blockstates/drilleast.json b/src/main/resources/assets/quickiemod/blockstates/drilleast.json new file mode 100644 index 0000000..28f23b3 --- /dev/null +++ b/src/main/resources/assets/quickiemod/blockstates/drilleast.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "quickiemod:block/drilleast" + } + } +} diff --git a/src/main/resources/assets/quickiemod/blockstates/drillnorth.json b/src/main/resources/assets/quickiemod/blockstates/drillnorth.json new file mode 100644 index 0000000..011e136 --- /dev/null +++ b/src/main/resources/assets/quickiemod/blockstates/drillnorth.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "quickiemod:block/drillnorth" + } + } +} diff --git a/src/main/resources/assets/quickiemod/blockstates/drillsouth.json b/src/main/resources/assets/quickiemod/blockstates/drillsouth.json new file mode 100644 index 0000000..f8da583 --- /dev/null +++ b/src/main/resources/assets/quickiemod/blockstates/drillsouth.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "quickiemod:block/drillsouth" + } + } +} diff --git a/src/main/resources/assets/quickiemod/blockstates/drillstop.json b/src/main/resources/assets/quickiemod/blockstates/drillstop.json new file mode 100644 index 0000000..52645fe --- /dev/null +++ b/src/main/resources/assets/quickiemod/blockstates/drillstop.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "quickiemod:block/drillstop" + } + } +} diff --git a/src/main/resources/assets/quickiemod/blockstates/drillwest.json b/src/main/resources/assets/quickiemod/blockstates/drillwest.json new file mode 100644 index 0000000..eb13963 --- /dev/null +++ b/src/main/resources/assets/quickiemod/blockstates/drillwest.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "quickiemod:block/drillwest" + } + } +} diff --git a/src/main/resources/assets/quickiemod/models/block/drill.json b/src/main/resources/assets/quickiemod/models/block/drill.json new file mode 100644 index 0000000..06483a4 --- /dev/null +++ b/src/main/resources/assets/quickiemod/models/block/drill.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "quickiemod:block/drill" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/quickiemod/models/block/drilleast.json b/src/main/resources/assets/quickiemod/models/block/drilleast.json new file mode 100644 index 0000000..a15e036 --- /dev/null +++ b/src/main/resources/assets/quickiemod/models/block/drilleast.json @@ -0,0 +1,45 @@ +{ + "parent": "block/cube", + "textures": { + "bottom": "quickiemod:block/drilleast", + "all": "quickiemod:block/drill" + }, + "elements": [ + { + "from": [0, 0, 0], + "to": [16, 16, 16], + "faces": { + "down": { + "uv": [0, 0, 16, 16], + "texture": "#bottom", + "cullface": "down" + }, + "up": { + "uv": [0, 0, 16, 16], + "texture": "#bottom", + "cullface": "up" + }, + "north": { + "uv": [0, 0, 16, 16], + "texture": "#all", + "cullface": "north" + }, + "south": { + "uv": [0, 0, 16, 16], + "texture": "#all", + "cullface": "south" + }, + "east": { + "uv": [0, 0, 16, 16], + "texture": "#all", + "cullface": "east" + }, + "west": { + "uv": [0, 0, 16, 16], + "texture": "#all", + "cullface": "west" + } + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/quickiemod/models/block/drillnorth.json b/src/main/resources/assets/quickiemod/models/block/drillnorth.json new file mode 100644 index 0000000..7d55a46 --- /dev/null +++ b/src/main/resources/assets/quickiemod/models/block/drillnorth.json @@ -0,0 +1,45 @@ +{ + "parent": "block/cube", + "textures": { + "bottom": "quickiemod:block/drillnorth", + "all": "quickiemod:block/drill" + }, + "elements": [ + { + "from": [0, 0, 0], + "to": [16, 16, 16], + "faces": { + "down": { + "uv": [0, 0, 16, 16], + "texture": "#bottom", + "cullface": "down" + }, + "up": { + "uv": [0, 0, 16, 16], + "texture": "#bottom", + "cullface": "up" + }, + "north": { + "uv": [0, 0, 16, 16], + "texture": "#all", + "cullface": "north" + }, + "south": { + "uv": [0, 0, 16, 16], + "texture": "#all", + "cullface": "south" + }, + "east": { + "uv": [0, 0, 16, 16], + "texture": "#all", + "cullface": "east" + }, + "west": { + "uv": [0, 0, 16, 16], + "texture": "#all", + "cullface": "west" + } + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/quickiemod/models/block/drillsouth.json b/src/main/resources/assets/quickiemod/models/block/drillsouth.json new file mode 100644 index 0000000..b91de31 --- /dev/null +++ b/src/main/resources/assets/quickiemod/models/block/drillsouth.json @@ -0,0 +1,45 @@ +{ + "parent": "block/cube", + "textures": { + "bottom": "quickiemod:block/drillsouth", + "all": "quickiemod:block/drill" + }, + "elements": [ + { + "from": [0, 0, 0], + "to": [16, 16, 16], + "faces": { + "down": { + "uv": [0, 0, 16, 16], + "texture": "#bottom", + "cullface": "down" + }, + "up": { + "uv": [0, 0, 16, 16], + "texture": "#bottom", + "cullface": "up" + }, + "north": { + "uv": [0, 0, 16, 16], + "texture": "#all", + "cullface": "north" + }, + "south": { + "uv": [0, 0, 16, 16], + "texture": "#all", + "cullface": "south" + }, + "east": { + "uv": [0, 0, 16, 16], + "texture": "#all", + "cullface": "east" + }, + "west": { + "uv": [0, 0, 16, 16], + "texture": "#all", + "cullface": "west" + } + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/quickiemod/models/block/drillstop.json b/src/main/resources/assets/quickiemod/models/block/drillstop.json new file mode 100644 index 0000000..bd29447 --- /dev/null +++ b/src/main/resources/assets/quickiemod/models/block/drillstop.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "quickiemod:block/drillstop" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/quickiemod/models/block/drillwest.json b/src/main/resources/assets/quickiemod/models/block/drillwest.json new file mode 100644 index 0000000..243ea98 --- /dev/null +++ b/src/main/resources/assets/quickiemod/models/block/drillwest.json @@ -0,0 +1,45 @@ +{ + "parent": "block/cube", + "textures": { + "bottom": "quickiemod:block/drillwest", + "all": "quickiemod:block/drill" + }, + "elements": [ + { + "from": [0, 0, 0], + "to": [16, 16, 16], + "faces": { + "down": { + "uv": [0, 0, 16, 16], + "texture": "#bottom", + "cullface": "down" + }, + "up": { + "uv": [0, 0, 16, 16], + "texture": "#bottom", + "cullface": "up" + }, + "north": { + "uv": [0, 0, 16, 16], + "texture": "#all", + "cullface": "north" + }, + "south": { + "uv": [0, 0, 16, 16], + "texture": "#all", + "cullface": "south" + }, + "east": { + "uv": [0, 0, 16, 16], + "texture": "#all", + "cullface": "east" + }, + "west": { + "uv": [0, 0, 16, 16], + "texture": "#all", + "cullface": "west" + } + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/quickiemod/models/item/drill.json b/src/main/resources/assets/quickiemod/models/item/drill.json new file mode 100644 index 0000000..7a8559e --- /dev/null +++ b/src/main/resources/assets/quickiemod/models/item/drill.json @@ -0,0 +1,10 @@ +{ + "parent": "quickiemod:block/drill", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/quickiemod/models/item/drilleast.json b/src/main/resources/assets/quickiemod/models/item/drilleast.json new file mode 100644 index 0000000..faeeee7 --- /dev/null +++ b/src/main/resources/assets/quickiemod/models/item/drilleast.json @@ -0,0 +1,10 @@ +{ + "parent": "quickiemod:block/drilleast", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/quickiemod/models/item/drillnorth.json b/src/main/resources/assets/quickiemod/models/item/drillnorth.json new file mode 100644 index 0000000..f7d3858 --- /dev/null +++ b/src/main/resources/assets/quickiemod/models/item/drillnorth.json @@ -0,0 +1,10 @@ +{ + "parent": "quickiemod:block/drillnorth", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/quickiemod/models/item/drillsouth.json b/src/main/resources/assets/quickiemod/models/item/drillsouth.json new file mode 100644 index 0000000..21e28d4 --- /dev/null +++ b/src/main/resources/assets/quickiemod/models/item/drillsouth.json @@ -0,0 +1,10 @@ +{ + "parent": "quickiemod:block/drillsouth", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/quickiemod/models/item/drillstop.json b/src/main/resources/assets/quickiemod/models/item/drillstop.json new file mode 100644 index 0000000..f9b6069 --- /dev/null +++ b/src/main/resources/assets/quickiemod/models/item/drillstop.json @@ -0,0 +1,10 @@ +{ + "parent": "quickiemod:block/drillstop", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/quickiemod/models/item/drillwest.json b/src/main/resources/assets/quickiemod/models/item/drillwest.json new file mode 100644 index 0000000..bab118c --- /dev/null +++ b/src/main/resources/assets/quickiemod/models/item/drillwest.json @@ -0,0 +1,10 @@ +{ + "parent": "quickiemod:block/drillwest", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/quickiemod/textures/block/drill.png b/src/main/resources/assets/quickiemod/textures/block/drill.png new file mode 100644 index 0000000000000000000000000000000000000000..5d44222e4171f4770331dc777aa76e8de792d772 GIT binary patch literal 6128 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/quickiemod/textures/block/drillnorth.png b/src/main/resources/assets/quickiemod/textures/block/drillnorth.png new file mode 100644 index 0000000000000000000000000000000000000000..3ef63929a1acaeaa3697c4f8ebeec7dd7ae4a0b4 GIT binary patch literal 6114 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/quickiemod/textures/block/drillsouth.png b/src/main/resources/assets/quickiemod/textures/block/drillsouth.png new file mode 100644 index 0000000000000000000000000000000000000000..402a62622a942d78c1e67b4251d62e7ec73fe109 GIT binary patch literal 6075 zcmeHKdo)yS7aw^WB$P{pGDhy^K4UH!w;6ZiUQwYlGiR8Xiwbu9j*Q|BUoacG={_VYgdq4X;XI+4whsHF+ zX)qW}!^@Ky1pUuYT&l{@-3p}@41>XQlS4vfK|mrxED`beu^>X0BnA;7q|qVYr57w#yOjvNdKzEcDY`k4rj@OQ zZm!&4+VeuqT(>&9ysId=t2OhTF!DYBeP7~LSc%W`trH8jTydJ{NewMtzc7VRdIerx zq->tIasta$Z*^^smJveQHa(w!iTR-SJfB^x@Gg zKVYuwqd0vvqt%s8aY5GuI>NLqHrLUIX2QwZl%9g3UH(eNM|ZD1xMkI$m$iK>PQByW z9%AKcS?=o{uj>kY-+pQEZNr}#i?dT-NA|pOAL*VLB}d&!8lHWu-1N-tR{QvRNdtEH ztac1Pe)YCx1Q*8o-ll2j-z$tl2TqQwFDh}J-efVgKZJjyv1p?q0zUT-f??anCqp5v zOB-7sVJfpNqO5P6vGBQHtL_xq7g7J_>CkOm+r+aW76xX=U*6yT?t%W(rF)!vMqlWO zahNFO7PjyKPGiG0;=Y#qXL{ehw~NSi#;Qj|m{K3;o`?Smo<_TFv} zr@i#>rzZ~Xz2l-BWC%3py3eIuD%S}rc*M(#E8DTJ9Y1g`|N7g@qehjvhg-PKV`ca4t;Rx(5{i!pEnD*mAs>kz|6pp8lSmr9>(d{%;%jsnX&2cxn+h6cx zxUnL+l=}YR#*ZkeFmSA(ZQ{~>@?URl7=yf6k8VkYKC`PdC@k$lPPWIs8P;n9ZuH;m zclPjDZ*Ew z9-Eq?J*<}%+_}l7{8$<-f|@k6Zr3pv{_=nng4Mm2zYFsIvDAL|U?REc=0lBmsY(%r$IU*MT*Nb^{+>4c<*Hk)=k+>&v!bL;QEM<5p!A%)hf(-JLVW zDUEdLz1-XB6Z0A^GZ?d%swMU0Tbyj1IzFW*8Cx~5uiC0`@QsQQck$Tq(3IbF8zzd@ zwnl5gy|3DJYQA*5z@|{h%w;K5%`*e97x@_;ypn30UeWcqz;Fb6rx>R-D$4SNy|C|| z0{3m}&kXca_FAXjiawaEna!I>@mITX;pLj$bPHw zB>MGZ-U&GOC4^qrt1HkIOK?}j#QggeDT%k>J2N*Bo9?@po1_ud-%P2~y6GyvdG;?6 z%{DBrxx3UiM_HW08n8Tn`s8^3i@RV%>-_rZ;S)RJ61eAR zrSYY8TjW#Dl!nxuzPsG|gxTy}dAINKD9QFX14*Y8ovXYcpkveWk7Jsh><@jGvx2Qu zV^sE@z7};&rRJ9Vj_si*bHZQscnF9uQ`F$y{PbI^o-@>oN_+YvO^;}HiI(ovsA;TP zldJ4)h6J>bcdtI_4Q_m6)|Kkjs!1IW%YRjHvS>}==0XjD#iFx+2Zd-Z6p5ELq(7d> zd#1OfJL()dKV?Y1-S7{aNu^@b*D@mFjXQupfW$+x6+ z`ED!RtbcC*2h@q`Wv-^R45rHzBautKV~&ddyxMbczd3g}feBVe`wx(EFIFO%g--q^ z{grtK9qmo>Q+I|n)l4ZaOJBo1cI@HR;b+1L_FdVdO}B0xX$rZ>%|Ao3RFib=l2Kh z`b!R5TT-P1H{IzQq^@~rz-eZx@}UDvjY|)=+rwZ=YxoRCfER=D<>dsuk_uPm(ml^P z8=sF1K93w#{s(d1)HD7__Ik=+HoALU%k>t=V~>ug=M(2yqyI>cIddlGd__ifO|@oq zI^vDeqy9&weMs{U80*@s(T9yD!$b6;P9@h9ZNvk%@aQH%nRXm*OSs;Oh?&j?8GRSZ z+w3@gn>Y7SP7ZZH9thtW74JCK+ZQaIrJRC{+c3L~b=<|FhHq3jwvJJ0b)dPoS;r!L z)0^CZ^%q2i>S%Qb0=F#qRkJDk@U<3iqnhIVGyQcuLRkA!OdlVbT`nY-q zbtSlCfatO5G;$llWlg$`x79iKtqXVRs$1X7Nqn9eeu|0yeW^KCVz+yW#*qP)j~QJL z7LV`u!dM%qG({Tsa;Ep)ooYzBFz%R8*rN6@6<$5E?NpEo&&lgxUG2r0*h3mimo^YV zt;PTh7J=jn1hpC3~*vV8G;Q) z@r88c@Uc@!1fNSsE+Vn8EHML&=6fbfz~E%R5KeLohss4dIZkts(;xr=C<733L99?p zlhcutxHRZlF^xeYCPid1bYv(i0KpJRKm-v@L}O8Ia()6H={ODHAmQ?8K}`405YUK@ zjF!p7Gz=y&F%g|eK#L?%7#x*K#bEImJRSu}prlDc86ZaqrDh63LsG_WEJ;=Ne?epz*h|g1yOu~ zcv1@@`v*xGpZATdAAD1+OosElBar%6+#jUB#6BquNwHWoric@-aLoxFQap zOPhQou>sH?N5Y|aY$z2(0*Q@cgIEy7;c`KcOJb8L9QJomUP7r15OP2T6aU5Nmx9V%qF7j z@%981kxRru-jJ{;3LA%~0$dycOTtY;aXB=1kwgGM>EsK5C=eqSMolg#2&cIOc+rt~ zH1^v}KrA5RK?-!FFJBlh|F#gq7l6SsK*1)?o=U*l+fzss3Z9CkQoji;1SL|a5*3&@ zESm5s8bw-YP%sd&fTB(zfJqG~78*kW0y2>#L?nu(BNZ+o6q;X`Sq6dK+>1P9%*G!oesi>G0~lNWLMyrlmot=K#WhfgW@3QOSt zC?b?a6om&6P#~U2=5h&mvONj>5nU?c$r1qx=n@6-2yq3K=OkAMtI0%J|0tap4Jxt# z5e8X6eItzWnJ~=ffH8`m@g-sh%)fEsFe&g|lY#U;%|Xoz>V=rE&G0j4injBA{C&>F z|Iq>j{maNt@%xLeUv&Kx13xAFtGa&C^-~P|l<=?W`k&D??c3)RD1=TyiO|PV`}Aji z(1%uSfNzM~EDaq44NW60wKp;7!CodX>m7CX!jb#{()WrVsj!rk4L z_^`r#JR?~?TwfnhNN^gc#g3-}r1{hO=%4<{dJmY8!CC z%o7}}ZG*8!C%P^No^qnLwt8K>+T}m)v+B}B!-tYoZqGkAnnw2Qz(fU>^~}$o6OwuG zGVP9%`5&Cjx!knjcsikAGuCU%baL9el~2=H)dh7W%?YQ=E$Xvd@s-}f0CHoTFIW#hT57 RQ=vFvUT%KOYS(4y{{qX!TlW9} literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/quickiemod/textures/block/drillstop.png b/src/main/resources/assets/quickiemod/textures/block/drillstop.png new file mode 100644 index 0000000000000000000000000000000000000000..c223200997b548cfcedf552ea6378223ab66333b GIT binary patch literal 2020 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