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 0000000..2ecc764 Binary files /dev/null and b/src/main/resources/assets/quickiefabric/textures/block/blockstacker.png differ diff --git a/src/main/resources/data/quickiefabric/recipes/blockstacker.json b/src/main/resources/data/quickiefabric/recipes/blockstacker.json new file mode 100644 index 0000000..6741cde --- /dev/null +++ b/src/main/resources/data/quickiefabric/recipes/blockstacker.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + " s ", + "s s", + "s s" + ], + "key": { + "s": { + "item": "quickiefabric:speedpowder" + } + }, + "result": { + "item": "quickiefabric:blockstacker", + "count": 1 + } +} \ No newline at end of file