From 0df9614d081f2516856c42b03c37fa6f9d659354 Mon Sep 17 00:00:00 2001 From: Jottyfan Date: Sat, 20 Aug 2022 01:14:38 +0200 Subject: [PATCH] upper for complete stacks --- gradle.properties | 2 +- .../blockentity/BlockStackerEntity.java | 59 ++++++++++++++++++ .../blockentity/QuickieFabricBlockEntity.java | 3 +- .../quickiefabric/blocks/BlockStacker.java | 43 +++++++++++++ .../quickiefabric/blocks/QuickieBlocks.java | 3 +- .../quickiefabric/init/RegistryManager.java | 25 +++++--- .../blockstates/blockstacker.json | 7 +++ .../assets/quickiefabric/lang/de_de.json | 2 + .../assets/quickiefabric/lang/en_us.json | 2 + .../models/block/blockstacker.json | 6 ++ .../models/item/blockstacker.json | 10 +++ .../textures/block/blockstacker.png | Bin 0 -> 6315 bytes .../quickiefabric/recipes/blockstacker.json | 17 +++++ 13 files changed, 166 insertions(+), 13 deletions(-) create mode 100644 src/main/java/de/jottyfan/minecraft/quickiefabric/blockentity/BlockStackerEntity.java create mode 100644 src/main/java/de/jottyfan/minecraft/quickiefabric/blocks/BlockStacker.java create mode 100644 src/main/resources/assets/quickiefabric/blockstates/blockstacker.json create mode 100644 src/main/resources/assets/quickiefabric/models/block/blockstacker.json create mode 100644 src/main/resources/assets/quickiefabric/models/item/blockstacker.json create mode 100644 src/main/resources/assets/quickiefabric/textures/block/blockstacker.png create mode 100644 src/main/resources/data/quickiefabric/recipes/blockstacker.json diff --git a/gradle.properties b/gradle.properties index bad0cb2..eb36e07 100644 --- a/gradle.properties +++ b/gradle.properties @@ -9,7 +9,7 @@ loader_version=0.14.8 # Mod Properties - mod_version = 1.19.0.1 + mod_version = 1.19.0.2 maven_group = de.jottyfan.minecraft archives_base_name = quickiefabric diff --git a/src/main/java/de/jottyfan/minecraft/quickiefabric/blockentity/BlockStackerEntity.java b/src/main/java/de/jottyfan/minecraft/quickiefabric/blockentity/BlockStackerEntity.java new file mode 100644 index 0000000..ef6b165 --- /dev/null +++ b/src/main/java/de/jottyfan/minecraft/quickiefabric/blockentity/BlockStackerEntity.java @@ -0,0 +1,59 @@ +package de.jottyfan.minecraft.quickiefabric.blockentity; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import net.minecraft.block.BlockState; +import net.minecraft.block.entity.BlockEntity; +import net.minecraft.block.entity.LootableContainerBlockEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +/** + * + * @author jotty + * + */ +public class BlockStackerEntity extends BlockEntity { + private static final Logger LOGGER = LogManager.getLogger(BlockStackerEntity.class); + + public BlockStackerEntity(BlockPos blockPos, BlockState blockState) { + super(QuickieFabricBlockEntity.BLOCKSTACKER_ENTITY, blockPos, blockState); + } + + public static void tick(World world, BlockPos pos, BlockState state, BlockStackerEntity entity) { + if (!world.isClient) { + BlockEntity source = world.getBlockEntity(pos.down()); + BlockEntity dest = world.getBlockEntity(pos.up()); + Boolean sourceIsLootable = source instanceof LootableContainerBlockEntity; + Boolean destIsLootable = dest instanceof LootableContainerBlockEntity; + if (sourceIsLootable && destIsLootable) { + LootableContainerBlockEntity lootableSource = (LootableContainerBlockEntity) source; + LootableContainerBlockEntity lootableDest = (LootableContainerBlockEntity) dest; + transferOneStack(lootableSource, lootableDest); + } + } + } + + private static void transferOneStack(LootableContainerBlockEntity source, LootableContainerBlockEntity dest) { + Integer sourceCounter = findItemStackPos(source, false); + Integer destCounter = findItemStackPos(dest, true); + // TODO: if stack.getItem().equals(source.getStack(sourceCounter).getItem() and stacksize < maxStackSize... + if (sourceCounter != null && destCounter != null) { + dest.setStack(destCounter, source.removeStack(sourceCounter)); + } + } + + private static Integer findItemStackPos(LootableContainerBlockEntity lcbe, Boolean empty) { + Integer counter = lcbe.size(); + while (counter > 0) { + counter--; + ItemStack stack = lcbe.getStack(counter); + if (empty.equals(ItemStack.EMPTY.equals(stack))) { + return counter; + } + } + return null; + } +} diff --git a/src/main/java/de/jottyfan/minecraft/quickiefabric/blockentity/QuickieFabricBlockEntity.java b/src/main/java/de/jottyfan/minecraft/quickiefabric/blockentity/QuickieFabricBlockEntity.java index 17476ca..7a0a51d 100644 --- a/src/main/java/de/jottyfan/minecraft/quickiefabric/blockentity/QuickieFabricBlockEntity.java +++ b/src/main/java/de/jottyfan/minecraft/quickiefabric/blockentity/QuickieFabricBlockEntity.java @@ -3,11 +3,12 @@ package de.jottyfan.minecraft.quickiefabric.blockentity; import net.minecraft.block.entity.BlockEntityType; /** - * + * * @author jotty * */ public class QuickieFabricBlockEntity { + public static BlockEntityType BLOCKSTACKER_ENTITY; public static BlockEntityType ITEMHOARDER; public static BlockEntityType MONSTERHOARDER; public static BlockEntityType EMPTYLAVAHOARDER; diff --git a/src/main/java/de/jottyfan/minecraft/quickiefabric/blocks/BlockStacker.java b/src/main/java/de/jottyfan/minecraft/quickiefabric/blocks/BlockStacker.java new file mode 100644 index 0000000..348d63a --- /dev/null +++ b/src/main/java/de/jottyfan/minecraft/quickiefabric/blocks/BlockStacker.java @@ -0,0 +1,43 @@ +package de.jottyfan.minecraft.quickiefabric.blocks; + +import de.jottyfan.minecraft.quickiefabric.blockentity.BlockStackerEntity; +import de.jottyfan.minecraft.quickiefabric.blockentity.QuickieFabricBlockEntity; +import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; +import net.minecraft.block.BlockRenderType; +import net.minecraft.block.BlockState; +import net.minecraft.block.BlockWithEntity; +import net.minecraft.block.Material; +import net.minecraft.block.entity.BlockEntity; +import net.minecraft.block.entity.BlockEntityTicker; +import net.minecraft.block.entity.BlockEntityType; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +/** + * + * @author jotty + * + */ +public class BlockStacker extends BlockWithEntity { + + public BlockStacker() { + super(FabricBlockSettings.of(Material.STONE).hardness(2.5f)); + } + + @Override + public BlockEntity createBlockEntity(BlockPos pos, BlockState state) { + return new BlockStackerEntity(pos, state); + } + + @Override + public BlockRenderType getRenderType(BlockState state) { + return BlockRenderType.MODEL; + } + + @Override + public BlockEntityTicker getTicker(World world, BlockState state, + BlockEntityType type) { + return checkType(type, QuickieFabricBlockEntity.BLOCKSTACKER_ENTITY, + (world1, pos, state1, be) -> BlockStackerEntity.tick(world1, pos, state1, be)); + } +} diff --git a/src/main/java/de/jottyfan/minecraft/quickiefabric/blocks/QuickieBlocks.java b/src/main/java/de/jottyfan/minecraft/quickiefabric/blocks/QuickieBlocks.java index d6bd224..92e23df 100644 --- a/src/main/java/de/jottyfan/minecraft/quickiefabric/blocks/QuickieBlocks.java +++ b/src/main/java/de/jottyfan/minecraft/quickiefabric/blocks/QuickieBlocks.java @@ -1,7 +1,7 @@ package de.jottyfan.minecraft.quickiefabric.blocks; /** - * + * * @author jotty * */ @@ -25,4 +25,5 @@ public class QuickieBlocks { public static final BlockDrillWest DRILL_WEST = new BlockDrillWest(); public static final BlockDrillNorth DRILL_NORTH = new BlockDrillNorth(); public static final BlockDrillstop DRILLSTOP = new BlockDrillstop(); + public static final BlockStacker BLOCKSTACKER = new BlockStacker(); } diff --git a/src/main/java/de/jottyfan/minecraft/quickiefabric/init/RegistryManager.java b/src/main/java/de/jottyfan/minecraft/quickiefabric/init/RegistryManager.java index 57c0e44..c1a793c 100644 --- a/src/main/java/de/jottyfan/minecraft/quickiefabric/init/RegistryManager.java +++ b/src/main/java/de/jottyfan/minecraft/quickiefabric/init/RegistryManager.java @@ -6,6 +6,7 @@ import java.util.function.Predicate; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +import de.jottyfan.minecraft.quickiefabric.blockentity.BlockStackerEntity; import de.jottyfan.minecraft.quickiefabric.blockentity.DrillBlockDownEntity; import de.jottyfan.minecraft.quickiefabric.blockentity.DrillBlockEastEntity; import de.jottyfan.minecraft.quickiefabric.blockentity.DrillBlockNorthEntity; @@ -163,6 +164,7 @@ public class RegistryManager { stacks.add(new ItemStack(QuickieBlocks.DRILL_WEST)); stacks.add(new ItemStack(QuickieBlocks.DRILL_NORTH)); stacks.add(new ItemStack(QuickieBlocks.DRILLSTOP)); + stacks.add(new ItemStack(QuickieBlocks.BLOCKSTACKER)); }).build(); private static final void registerBlock(Block block, String name) { @@ -193,16 +195,18 @@ public class RegistryManager { QuickieFabricBlockEntity.EMPTYLAVAHOARDER = (BlockEntityType) registerBlockEntity( "emptylavahoarderblockentity", EmptyLavaHoarderBlockEntity::new, QuickieBlocks.EMPTYLAVAHOARDER, QuickieBlocks.LAVAHOARDER); - QuickieFabricBlockEntity.DRILL_DOWN = (BlockEntityType) registerBlockEntity("drillblockdownentity", - DrillBlockDownEntity::new, QuickieBlocks.DRILL_DOWN); - QuickieFabricBlockEntity.DRILL_EAST = (BlockEntityType) registerBlockEntity("drillblockeastentity", - DrillBlockEastEntity::new, QuickieBlocks.DRILL_EAST); - QuickieFabricBlockEntity.DRILL_SOUTH = (BlockEntityType) registerBlockEntity("drillblocksouthentity", - DrillBlockSouthEntity::new, QuickieBlocks.DRILL_SOUTH); - QuickieFabricBlockEntity.DRILL_WEST = (BlockEntityType) registerBlockEntity("drillblockwestentity", - DrillBlockWestEntity::new, QuickieBlocks.DRILL_WEST); - QuickieFabricBlockEntity.DRILL_NORTH = (BlockEntityType) registerBlockEntity("drillblocknorthentity", - DrillBlockNorthEntity::new, QuickieBlocks.DRILL_NORTH); + QuickieFabricBlockEntity.DRILL_DOWN = (BlockEntityType) registerBlockEntity( + "drillblockdownentity", DrillBlockDownEntity::new, QuickieBlocks.DRILL_DOWN); + QuickieFabricBlockEntity.DRILL_EAST = (BlockEntityType) registerBlockEntity( + "drillblockeastentity", DrillBlockEastEntity::new, QuickieBlocks.DRILL_EAST); + QuickieFabricBlockEntity.DRILL_SOUTH = (BlockEntityType) registerBlockEntity( + "drillblocksouthentity", DrillBlockSouthEntity::new, QuickieBlocks.DRILL_SOUTH); + QuickieFabricBlockEntity.DRILL_WEST = (BlockEntityType) registerBlockEntity( + "drillblockwestentity", DrillBlockWestEntity::new, QuickieBlocks.DRILL_WEST); + QuickieFabricBlockEntity.DRILL_NORTH = (BlockEntityType) registerBlockEntity( + "drillblocknorthentity", DrillBlockNorthEntity::new, QuickieBlocks.DRILL_NORTH); + QuickieFabricBlockEntity.BLOCKSTACKER_ENTITY = (BlockEntityType) registerBlockEntity( + "blockstackerentity", BlockStackerEntity::new, QuickieBlocks.BLOCKSTACKER); } public static final void registerBlocks() { @@ -226,6 +230,7 @@ public class RegistryManager { registerBlock(QuickieBlocks.DRILL_WEST, "drillwest"); registerBlock(QuickieBlocks.DRILL_NORTH, "drillnorth"); registerBlock(QuickieBlocks.DRILLSTOP, "drillstop"); + registerBlock(QuickieBlocks.BLOCKSTACKER, "blockstacker"); } public static final void registerItems() { diff --git a/src/main/resources/assets/quickiefabric/blockstates/blockstacker.json b/src/main/resources/assets/quickiefabric/blockstates/blockstacker.json new file mode 100644 index 0000000..f28472b --- /dev/null +++ b/src/main/resources/assets/quickiefabric/blockstates/blockstacker.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "quickiefabric:block/blockstacker" + } + } +} diff --git a/src/main/resources/assets/quickiefabric/lang/de_de.json b/src/main/resources/assets/quickiefabric/lang/de_de.json index 648b995..6635ef4 100644 --- a/src/main/resources/assets/quickiefabric/lang/de_de.json +++ b/src/main/resources/assets/quickiefabric/lang/de_de.json @@ -62,7 +62,9 @@ "block.quickiefabric.drillwest": "West-Bohrer", "block.quickiefabric.drillnorth": "Nord-Bohrer", "block.quickiefabric.drillstop": "Bohrerstopper", + "block.quickiefabric.blockstacker": "Blockstapler", "container.quickiefabric.backpack": "Rucksack", + "container.quickiefabric.blockstacker": "Blockstapler", "msg.buildingplan.start": "beginne Konstruktionsaufnahme bei %s,%s,%s", "msg.buildingplan.end": "beende Konstruktionsaufnahme bei %s,%s,%s", "msg.buildingplan.null": "Der Bauplan ist kaputt.", diff --git a/src/main/resources/assets/quickiefabric/lang/en_us.json b/src/main/resources/assets/quickiefabric/lang/en_us.json index 975ec1b..f16e08d 100644 --- a/src/main/resources/assets/quickiefabric/lang/en_us.json +++ b/src/main/resources/assets/quickiefabric/lang/en_us.json @@ -62,7 +62,9 @@ "block.quickiefabric.drillwest": "west drill", "block.quickiefabric.drillnorth": "north drill", "block.quickiefabric.drillstop": "drill stopper", + "block.quickiefabric.blockstacker": "block stacker", "container.quickiefabric.backpack": "backpack", + "container.quickiefabric.blockstacker": "block stacker", "msg.buildingplan.start": "started recording of construction at %s,%s,%s", "msg.buildingplan.end": "finished recording of construction at %s,%s,%s", "msg.buildingplan.null": "The building plan is damaged.", diff --git a/src/main/resources/assets/quickiefabric/models/block/blockstacker.json b/src/main/resources/assets/quickiefabric/models/block/blockstacker.json new file mode 100644 index 0000000..47dbce9 --- /dev/null +++ b/src/main/resources/assets/quickiefabric/models/block/blockstacker.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "quickiefabric:block/blockstacker" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/quickiefabric/models/item/blockstacker.json b/src/main/resources/assets/quickiefabric/models/item/blockstacker.json new file mode 100644 index 0000000..d0dbc2f --- /dev/null +++ b/src/main/resources/assets/quickiefabric/models/item/blockstacker.json @@ -0,0 +1,10 @@ +{ + "parent": "quickiefabric:block/blockstacker", + "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/quickiefabric/textures/block/blockstacker.png b/src/main/resources/assets/quickiefabric/textures/block/blockstacker.png new file mode 100644 index 0000000000000000000000000000000000000000..2ecc7648193414e2d25853584c6c82b31a45ea14 GIT binary patch literal 6315 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