From 9e36a086604bcdbfa912c93a252e00dddf8a3e67 Mon Sep 17 00:00:00 2001 From: Jottyfan Date: Sat, 20 Aug 2022 16:55:30 +0200 Subject: [PATCH] blockstacker works --- .../blockentity/BlockStackerEntity.java | 48 +++++++++++++++--- .../quickiefabric/items/ItemCarrotstack.java | 4 +- .../quickiefabric/items/ItemCotton.java | 4 +- .../quickiefabric/items/ItemCottonseed.java | 4 +- .../quickiefabric/items/ItemLevelup.java | 4 +- .../items/ItemRottenFleshStripes.java | 4 +- .../quickiefabric/items/ItemStub.java | 4 +- .../models/block/blockstacker.json | 10 ++-- .../textures/block/blockstacker.png | Bin 6315 -> 5736 bytes .../textures/block/blockstackerbottom.png | Bin 0 -> 5712 bytes .../textures/block/blockstackertop.png | Bin 0 -> 5710 bytes 11 files changed, 59 insertions(+), 23 deletions(-) create mode 100644 src/main/resources/assets/quickiefabric/textures/block/blockstackerbottom.png create mode 100644 src/main/resources/assets/quickiefabric/textures/block/blockstackertop.png 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 2ecc7648193414e2d25853584c6c82b31a45ea14..92b6a86bc6c69d9ffb34ad737d5fa2a2bbbd6ca3 100644 GIT binary patch delta 1554 zcmV+t2JQK)G3YFi7=Ho-0001Dofq-|00XspR9JLUVRs;Ka&Km7Y-J#Hd2nSQWq4_3 z004N}#a3;y<0uULuT$(1kc9X+4hB=TH`wD(gY9gbm(1ijuWC%$5E-?ET9QNSfB$y+ z2bYK@@)lFbAvjz<`z!^Eh*!LfDb|)k*SlJy= zs{4!O{381uKRp2LhIDu&ShO7|??5Ws3*G_Bb}SciiuXrY)@^RbNz!)Hc=RfH$ZXl( zJ^uC)(Q5`fDzYl8!&6i?2Xx#*TChlXLV%5|5o^{wC5I;n$g?=PJFn=GmD`G6$R9}2 zu*nI6b1=hget#-wdmen6A-=P$^=A1bkJZJ;;~aPIEm805cDmvNLK^l%9Y>ifY(&_- zPPKp$aU0fgj*O8A*;_$*bJZ;vl`{)y>Fl|2;m+%vD_6MaWtE6oq>4^i(kNM~Is!v} z4DJ%aRRe>f74#~ka`T0!-8{`zPB7dUJB0zp8~yS#<9{Vk?<3`zUAn~ze#uBexG|U; zPwWCA+>bo68Q^0)UV~Q!gEqsQaKPf04Pr6gb8F<0PNEeX4f9rO9NP|n5W%*=8CEdh z0;_Rg7eyj7;+Vis0Z>9E$N~!3Od7ltuNpv3l3^P_49*~I8sAi^}DoYE*JaOKh1 zkU!BU4MekE%3(PD@(rkG<%ntZYpQcQ_bP9;lLG)K!J z$DDG`rNC$ba)EZihEf(;bn%NVVTnsx@=_|&r}}C&)L0YMTuYOt4Sk}87F%k$m6cbd z(&|@R!y4DL=CyRBTG#Ho_0VHaJ@;~BjcKFx%YS&EH9lCA$<){wZ>&Kz#sh*!JF&qT z7!%K6JPrns&@wo4iMp$YzRrgt}91kx2jnr@*H zcYjM$TE=&Gn>$|5Wna2hB$m)y2H(J?2jI(o(KqzJp65=DUh9R%-q=?FY$^a)?*Ptv z^rpc-o|D{%IENZN=soU#8=ju?@oIjJOIQ4O<`;c0e_w}--tzm6nXc5;Gd%hs9OTjE zdOzb)`Jp~SpZ1~O=h20-q3iX2wnrcIwNaDbbiLlsYIMEc&+v4;-p{ynz247$(e--& z#^>lee$fYYdh(O51q~8k1-SEq}r^t7{z4blXfP z6Jj>ED)zi03;|I@Fd#F_n3JRwe8<;40(`xT^DO^!e~vyiZ!sVs63;Tjw23!}r#Eeb z^FFb_O0r6PPCRDP1&JTIu6X>$x#)6`X9{K}Jx?qUi^UFBI+&GAjd+SUrfNFn2eTfl zoVPe@l^Sc^lfN*M*MC=*xlVH!Ni1Rs5=1Ddp^OS_#A($@v5=Klt6PRhXRck|GJ9`^9lSMu47OpjmgE?_D(rF=k^eGB-FhEi^G? zVJ$c^Ib4W;88fW;J3oH90vpI5;%3rwyhFChhr0u>b%72~bQ_MH&|a z)U_Vgw;sgWw(kG{00Cl4M??UK1szC}z!xA*6b};^njJ^a0000jNkld09^nNS=?Xr+W-In07*qoM6N<$ Ef_8k%{Qv*} delta 2346 zcmV+_3Dx%KEUPh)7=H)@0000eEe}%w00sSeR9JLUVRs;Ka&Km7Y-J#Hd2nSQWq4_3 z004N}tygQ(BPR^}&na>QBwpe;yrwEQ$nn#Fz@NR}CcBk*$^+IgLQ*#kHsh~9AM*!3 zOi_#vNn(!C;^VW=T+k7_KV{v?`gPYI_H^Ft=00GU99p-3N`KVx$4>Um6BYEr7e~_c zL4ALaz516AM>>(45ivSl9c6Xoct0R@Pmr!Ca|?DMxz zs9q14$1x8_&f?CFcK~jF*|>s^;7%^_GOa%0&hFF%1^KQ{_DfXe6P4SepV&V@adF!X z4DZE^xBb>m;eY$$n^od3GrM+Yez!-PKGQkh=jmdeXYA~Xk0@!>q;7Rq@t=;ed$(ST zcDjt9ilCiW#w7;qZGgPnW-G2nnHaD<nLR>sah%hE{ z^Nvvfgr38runK&x&(Flw0l~1!EJ(1}x?R*j%B{&Gw}5sS7|`yuMyaaod?MVA0gb_G~@ z2pjm5ynld0CAi>22r;A}A%_xO^fAO3Q=H;gl1n~?6jMr)aw_7)OOPl@#7LHsIXj4B z$T6oZIp!{H|jTcgLV7jQ`)s&74nsO2* zWYkqa$?>l-t z?|*=bj6&T9@`2g6XIV?D9Cpv!T-H00G0eI(ifeh!OYD%qaRA5VCi1 z**r+Jdxa#BnUApn(i((HAF!r&HT~f&E(t}<}ql~m8g5>OnsQ8{FgP=PC zu(s}JKJPia;Ha{5vN7sh)|}2RK?bjPHh;ysti=);!LF`YS0All8&IXO#x}9VJUZP@ zBNUvube0x_sCUUjLr_zJZ0;AW=4X&#jD3gI4suCz@NPSRW=hEj_lo4JzdC1~-y%YhWTs z(wQxlut!#^IlGsqqQ$3;3wG$-wSSD>=<=plI^k8ZbXL{P=;byPrDo>Z*IEnFVR5fq zaLj*P&_1^POT2uQrD_zxvpu9(%mxv>*RbrVoVvhiP|GFk^B2w7q&x+(8-B1-$JpqO zQn@zbWuCvxYf8t4fvNyU5wX*%&eb*bz*gE6s2U-H3U4NtXJhoMy2n$t-teqnwagly^9k z)qYk5>8gldg*Ynwy`&dM=~J8X`!@4J{k+mvsPn`oa>jP$6ArJ(BpawMmCKpqJ25d( z6TX=0asx$m6Yz)2puW@OUw?Dxie7qU-jv}c7!R{P#qzAPh(9hP?Q-Jy<-W>De{Egq z#?$Y5MBPaR-m%U5}~+a>W4$ z$0P1uDTazVS2mAuFtXt&sfw)CYCuHpro`i{d}SLRsydt3p6oNH++3A#4fPBEoc4Qb zes$n)IKqFXr)Tpwj^y(Q_^vGM0004mX+uL$Nkc;*aB^>EX>4Tx0C=2zkv&MmKpe$i zTcxE`M9d)KkfAzR5EXIMDionYs1;guFuC*#ni!KH1TBBcG^=Y2&~)3(q>^GTzaoZT z5kVgWL=ljgWz0%a8ouM}9s$1IC3u$qxj#pbTCf-p5Q%4)VcNvaEL!FiupU}ae) zJ|`YE>4L*{h z@IUz7tyP>D_mW~sp!>yfK8AttF3_wy&iAq7G*5ugGjOH1{TmHn`jhl}TZxgT*57en#Jv2l{V;=&CE%TWcSu4?vc>O5XqnhrmdQve$gx z9qH`t-!rZLegOM`a(BOLP{aTL4~w&Q1^xmgIc8!vG&DD2EjTb`GA%S@HDfJdIWaIT zW@2GvGh#I{Wn(rslb8sO4KO!0H!wIcH#9dgFfp?;348*xe+*U$e>@z=1poj5V^B;~ zMNS2Hh#|a+CBBO#zlEtZ?=01L8vMmIaV+JNXh@g5IVMV$?HOpZOrc%X5ZD~{=p zNyx`m&bdOgEZ&h9G1Cd*XZ0ZvGpB_A0b8|l@C=aJ1btdte^-gx(7w;V0rqPQNRm?3 QW&i*H07*qoM6N<$g4+db&Hw-a 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 0000000000000000000000000000000000000000..40eb5ddf1ab288a24c49f45f82e8d5c40ba7678e GIT binary patch literal 5712 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