diff --git a/src/main/java/de/jottyfan/minecraft/quickiefabric/blockentity/BlockStackerEntity.java b/src/main/java/de/jottyfan/minecraft/quickiefabric/blockentity/BlockStackerEntity.java index ef6b165..bc25477 100644 --- a/src/main/java/de/jottyfan/minecraft/quickiefabric/blockentity/BlockStackerEntity.java +++ b/src/main/java/de/jottyfan/minecraft/quickiefabric/blockentity/BlockStackerEntity.java @@ -7,6 +7,7 @@ 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.item.Items; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; @@ -36,16 +37,49 @@ public class BlockStackerEntity extends BlockEntity { } } - 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 final void transferOneStack(LootableContainerBlockEntity source, LootableContainerBlockEntity dest) { + Integer sourceSlot = findItemStackPos(source, false); + if (sourceSlot != null && !Items.AIR.equals(source.getStack(sourceSlot).getItem())) { + ItemStack sourceStack = source.getStack(sourceSlot); + Integer destSlot = findItemStackPos(dest, sourceStack); + if (destSlot != null) { + Integer occupied = dest.getStack(destSlot).getCount(); + Integer free = dest.getStack(destSlot).getMaxCount() - occupied; + Integer candidates = source.getStack(sourceSlot).getCount(); + Integer travellers = candidates > free ? free : candidates; + if (travellers > 0) { + LOGGER.debug("transfer {}/{} of {} from slot {} to slot {} on top of {} ones", travellers, candidates, source.getStack(sourceSlot).getItem().toString(), sourceSlot, destSlot, occupied); + source.getStack(sourceSlot).decrement(travellers); + if (source.getStack(sourceSlot).getCount() < 1) { + source.removeStack(sourceSlot); // make empty slots really empty + } + dest.getStack(destSlot).increment(travellers); + } + } else { + Integer destFreeSlot = findItemStackPos(dest, true); + if (destFreeSlot != null) { + LOGGER.debug("transfer all of {} from slot {} to slot {}", source.getStack(sourceSlot).getItem().toString(), sourceSlot, destSlot); + dest.setStack(destFreeSlot, source.removeStack(sourceSlot)); + } + } } } - private static Integer findItemStackPos(LootableContainerBlockEntity lcbe, Boolean empty) { + private static final Integer findItemStackPos(LootableContainerBlockEntity lcbe, ItemStack sourceStack) { + Integer counter = lcbe.size(); + while (counter > 0) { + counter--; + ItemStack stack = lcbe.getStack(counter); + if (stack.getItem().equals(sourceStack.getItem())) { + if (stack.getCount() < stack.getMaxCount()) { + return counter; + } + } + } + return null; + } + + private static final Integer findItemStackPos(LootableContainerBlockEntity lcbe, Boolean empty) { Integer counter = lcbe.size(); while (counter > 0) { counter--; diff --git a/src/main/java/de/jottyfan/minecraft/quickiefabric/items/ItemCarrotstack.java b/src/main/java/de/jottyfan/minecraft/quickiefabric/items/ItemCarrotstack.java index 3dae696..d95b478 100644 --- a/src/main/java/de/jottyfan/minecraft/quickiefabric/items/ItemCarrotstack.java +++ b/src/main/java/de/jottyfan/minecraft/quickiefabric/items/ItemCarrotstack.java @@ -5,12 +5,12 @@ import net.minecraft.item.FoodComponent; import net.minecraft.item.Item; /** - * + * * @author jotty * */ public class ItemCarrotstack extends Item { public ItemCarrotstack() { - super(new Item.Settings().group(RegistryManager.QUICKIEFABRIC_GROUP).maxCount(99).food(new FoodComponent.Builder().hunger(12).saturationModifier(0.6F).build())); + super(new Item.Settings().group(RegistryManager.QUICKIEFABRIC_GROUP).maxCount(64).food(new FoodComponent.Builder().hunger(12).saturationModifier(0.6F).build())); } } diff --git a/src/main/java/de/jottyfan/minecraft/quickiefabric/items/ItemCotton.java b/src/main/java/de/jottyfan/minecraft/quickiefabric/items/ItemCotton.java index 43ee503..3c425d8 100644 --- a/src/main/java/de/jottyfan/minecraft/quickiefabric/items/ItemCotton.java +++ b/src/main/java/de/jottyfan/minecraft/quickiefabric/items/ItemCotton.java @@ -4,12 +4,12 @@ import de.jottyfan.minecraft.quickiefabric.init.RegistryManager; import net.minecraft.item.Item; /** - * + * * @author jotty * */ public class ItemCotton extends Item { public ItemCotton() { - super(new Item.Settings().group(RegistryManager.QUICKIEFABRIC_GROUP).maxCount(99)); + super(new Item.Settings().group(RegistryManager.QUICKIEFABRIC_GROUP).maxCount(64)); } } diff --git a/src/main/java/de/jottyfan/minecraft/quickiefabric/items/ItemCottonseed.java b/src/main/java/de/jottyfan/minecraft/quickiefabric/items/ItemCottonseed.java index 30c7340..389ddb5 100644 --- a/src/main/java/de/jottyfan/minecraft/quickiefabric/items/ItemCottonseed.java +++ b/src/main/java/de/jottyfan/minecraft/quickiefabric/items/ItemCottonseed.java @@ -11,13 +11,13 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; /** - * + * * @author jotty * */ public class ItemCottonseed extends Item { public ItemCottonseed() { - super(new Item.Settings().group(RegistryManager.QUICKIEFABRIC_GROUP).maxCount(99)); + super(new Item.Settings().group(RegistryManager.QUICKIEFABRIC_GROUP).maxCount(64)); } @Override diff --git a/src/main/java/de/jottyfan/minecraft/quickiefabric/items/ItemLevelup.java b/src/main/java/de/jottyfan/minecraft/quickiefabric/items/ItemLevelup.java index 27ae601..c47eaa7 100644 --- a/src/main/java/de/jottyfan/minecraft/quickiefabric/items/ItemLevelup.java +++ b/src/main/java/de/jottyfan/minecraft/quickiefabric/items/ItemLevelup.java @@ -4,12 +4,12 @@ import de.jottyfan.minecraft.quickiefabric.init.RegistryManager; import net.minecraft.item.Item; /** - * + * * @author jotty * */ public class ItemLevelup extends Item { public ItemLevelup() { - super(new Item.Settings().group(RegistryManager.QUICKIEFABRIC_GROUP).maxCount(99)); + super(new Item.Settings().group(RegistryManager.QUICKIEFABRIC_GROUP).maxCount(64)); } } diff --git a/src/main/java/de/jottyfan/minecraft/quickiefabric/items/ItemRottenFleshStripes.java b/src/main/java/de/jottyfan/minecraft/quickiefabric/items/ItemRottenFleshStripes.java index b0b6c9c..08e246c 100644 --- a/src/main/java/de/jottyfan/minecraft/quickiefabric/items/ItemRottenFleshStripes.java +++ b/src/main/java/de/jottyfan/minecraft/quickiefabric/items/ItemRottenFleshStripes.java @@ -4,12 +4,12 @@ import de.jottyfan.minecraft.quickiefabric.init.RegistryManager; import net.minecraft.item.Item; /** - * + * * @author jotty * */ public class ItemRottenFleshStripes extends Item { public ItemRottenFleshStripes() { - super(new Item.Settings().group(RegistryManager.QUICKIEFABRIC_GROUP).maxCount(99)); + super(new Item.Settings().group(RegistryManager.QUICKIEFABRIC_GROUP).maxCount(64)); } } diff --git a/src/main/java/de/jottyfan/minecraft/quickiefabric/items/ItemStub.java b/src/main/java/de/jottyfan/minecraft/quickiefabric/items/ItemStub.java index d528f2a..5009037 100644 --- a/src/main/java/de/jottyfan/minecraft/quickiefabric/items/ItemStub.java +++ b/src/main/java/de/jottyfan/minecraft/quickiefabric/items/ItemStub.java @@ -4,12 +4,12 @@ import de.jottyfan.minecraft.quickiefabric.init.RegistryManager; import net.minecraft.item.Item; /** - * + * * @author jotty * */ public class ItemStub extends Item { public ItemStub() { - super(new Item.Settings().group(RegistryManager.QUICKIEFABRIC_GROUP).maxCount(99)); + super(new Item.Settings().group(RegistryManager.QUICKIEFABRIC_GROUP).maxCount(64)); } } diff --git a/src/main/resources/assets/quickiefabric/models/block/blockstacker.json b/src/main/resources/assets/quickiefabric/models/block/blockstacker.json index 47dbce9..7e749f0 100644 --- a/src/main/resources/assets/quickiefabric/models/block/blockstacker.json +++ b/src/main/resources/assets/quickiefabric/models/block/blockstacker.json @@ -1,6 +1,8 @@ { - "parent": "block/cube_all", - "textures": { - "all": "quickiefabric:block/blockstacker" - } + "parent": "block/cube_bottom_top", + "textures": { + "bottom": "quickiefabric:block/blockstackerbottom", + "side": "quickiefabric:block/blockstacker", + "top": "quickiefabric:block/blockstackertop" + } } \ 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 index 2ecc764..92b6a86 100644 Binary files a/src/main/resources/assets/quickiefabric/textures/block/blockstacker.png and b/src/main/resources/assets/quickiefabric/textures/block/blockstacker.png differ diff --git a/src/main/resources/assets/quickiefabric/textures/block/blockstackerbottom.png b/src/main/resources/assets/quickiefabric/textures/block/blockstackerbottom.png new file mode 100644 index 0000000..40eb5dd Binary files /dev/null and b/src/main/resources/assets/quickiefabric/textures/block/blockstackerbottom.png differ diff --git a/src/main/resources/assets/quickiefabric/textures/block/blockstackertop.png b/src/main/resources/assets/quickiefabric/textures/block/blockstackertop.png new file mode 100644 index 0000000..3ea688a Binary files /dev/null and b/src/main/resources/assets/quickiefabric/textures/block/blockstackertop.png differ