From 06e5f220bd120fdedf8070425ebf9d497d46a479 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bruno=20Ryb=C3=A1rsky?= Date: Sun, 23 Jun 2024 22:51:41 +0200 Subject: [PATCH] Edit assets --- assets/Casing.aseprite | Bin 0 -> 384 bytes assets/Controller.aseprite | Bin 0 -> 1860 bytes assets/Drive.aseprite | Bin 0 -> 1791 bytes assets/DriveContainer.aseprite | Bin 0 -> 568 bytes assets/Head.aseprite | Bin 0 -> 962 bytes assets/Platter.aseprite | Bin 0 -> 1142 bytes assets/Tiers.aseprite | Bin 0 -> 1054 bytes build.gradle | 13 +++ gradle.properties | 2 +- .../brn/server_storage/ServerStorage.java | 31 ++++- .../HardDriveContainerBlockEntity.java | 13 +++ .../blocks/HardDriveContainerBlock.java | 109 ++++++++++++++++++ .../server_storage/blocks/StorageBlock.java | 16 +-- .../items/HardDriveContainerBlockItem.java | 41 +++++++ .../server_storage/items/HardDriveItem.java | 43 +++++++ .../items/StorageBlockItem.java | 9 +- .../brn/server_storage/lib/CraftingEntry.java | 33 +++++- .../server_storage/lib/MyCraftingRecipe.java | 2 +- .../systems/brn/server_storage/lib/Util.java | 59 ++++++---- .../screens/CraftingScreen.java | 3 +- .../server_storage/screens/StorageScreen.java | 2 +- .../blockstates/drive_container.json | 7 ++ .../assets/serverstorage/lang/en_us.json | 3 +- .../serverstorage/models/drive_container.json | 6 + .../serverstorage/models/item/drive.json | 6 + .../models/item/drive_container.json | 3 + 26 files changed, 353 insertions(+), 48 deletions(-) create mode 100644 assets/Casing.aseprite create mode 100644 assets/Controller.aseprite create mode 100644 assets/Drive.aseprite create mode 100644 assets/DriveContainer.aseprite create mode 100644 assets/Head.aseprite create mode 100644 assets/Platter.aseprite create mode 100644 assets/Tiers.aseprite create mode 100644 src/main/java/systems/brn/server_storage/blockentities/HardDriveContainerBlockEntity.java create mode 100644 src/main/java/systems/brn/server_storage/blocks/HardDriveContainerBlock.java create mode 100644 src/main/java/systems/brn/server_storage/items/HardDriveContainerBlockItem.java create mode 100644 src/main/java/systems/brn/server_storage/items/HardDriveItem.java create mode 100644 src/main/resources/assets/serverstorage/blockstates/drive_container.json create mode 100644 src/main/resources/assets/serverstorage/models/drive_container.json create mode 100644 src/main/resources/assets/serverstorage/models/item/drive.json create mode 100644 src/main/resources/assets/serverstorage/models/item/drive_container.json diff --git a/assets/Casing.aseprite b/assets/Casing.aseprite new file mode 100644 index 0000000000000000000000000000000000000000..31bb7067ba0f19a4e4b043592d34156bb9f9cfd3 GIT binary patch literal 384 zcmZo*WMFu(l#xLI2o)HB9EKDiMgS!SMvx#_9wACa7SQxxA6dY*vH*=017dasu$4%b z6ad*QAlE4Y8A=K!t{OIJmWKUd*7pn5ZZ1fBcX-zCPi8Zp24w9sFrSj=ov9z>tzu+j zX>VU*kkAyJ_b_?(|M;^{PT&6X|NsBlYqz)5wP$8!MTP~HId!cuGP)U_e7$;C|8%de ze1qf1k9Tx*$b;-tU`BGme;}Kk!6&gYwMfCx8^~c*U|;|#_|F6+z<>)FNELHlzj*PZ x{?CuXJv*3JwFxw=Tt3Ze!d?ZR{OZhy{7GjQFRN$Qx;No6&%zQ`hRD<5RRH(>Roegn literal 0 HcmV?d00001 diff --git a/assets/Controller.aseprite b/assets/Controller.aseprite new file mode 100644 index 0000000000000000000000000000000000000000..fcece121a1ee97f9da641b4b6c6833253c668954 GIT binary patch literal 1860 zcmZ=^XJB}+l#M|E2o)F@85kH+fEWRQVjw}VJVKOutV2N4e|=;F+sXzsRt$*Q6~I;^ zS&{{0vw&Qu0AwgBn7C@#q*)sFhgsh*RJ*w#?cL#7zdxDHd>W9o&%k_2o_D5xkhhAF zjitSPi9teBbl$_{+5h9uJ~@5+&;S4bXRqDfQrDiDl@%ElROZyR#>nVqc=Gk?UH#L& zy7CR=K{hEc14$V84`i@2_#{@Q7AY9wmo_Q|s%2Gx=={$Fp&?;cG3WQ+lW*!jz4`xt z@n^Y7KL6WZ{q=2=RIpW$QgiE)G}x0VP8tJa#Pmd&(&o;q z_F4ZQY?*)KOY_;fpv(H3{!V!!U-U(3HY3Bi18gPrU`rW+0mQ<9u#|&=gP~$had`TV z_kIlfb5noTuWx($|EyM;!QUNyPyb)EN!wxL!L#Jq#l`Ob-{0HI9ag?{j^yDv>i+Zo z>@R&S)@E_SX2QSc=jS({W%xMpYx9$H;>L$xiuw2PU)14<<12?OhbqS;gUSgKC*meZO|bCzm#clKZi2;`T7|9pvmyfC z9B*g*{H3x5lstcZ9N=)MCL9j&n(6=cTQ~pwzmkdL@3yH=|2N8{iTpfXs*@nKjLqfn zll(Bl=BtO#Fs@|1Xiz!hm$k2q#Iyn26i!-1#g#hsrxykqJ-d`9t! zz5pA;`J0v7hEzJ(H{<93sYTEJ=SN5Wdw(wBU%f)Rq~8BUolpPom74ay|8>NHN6Wcp z9L#ZgcF5pF&V-o?#SXt5emRyMdgA!4>50Q5h0l&zjyW@IJorz;e&peow@X4TXg4K-ZcULzEq?$8GN0oK`9t_?tBkXNZ zQTTrcUlacmgXW*WbPX;8GUQmAkNArk{I`!k1M)rF%KhPonatQ-_Gcvhtl!MFP+o=Y fkV2`#Z^w5G8z;VHPn=*U;8reg$HTyzQnnZXqCcLP literal 0 HcmV?d00001 diff --git a/assets/Drive.aseprite b/assets/Drive.aseprite new file mode 100644 index 0000000000000000000000000000000000000000..c1572712d852d6c2ba29fc5b1f69f64bcfce85c6 GIT binary patch literal 1791 zcmey*#=!7kDGP%F7&0<2Fr)x60&p`hf&>`^fRGko6Eg$Dua7KXTUme>crh_Buqyxw z6kq@rU@~xYadKq>IwUu*q$tSUNg*OKN`d`60~-U-6c9*EE-r8k2=D>1^YZgjK{P7( zc8vk-pUb)+vry#-^0<-}7DyFQ_ca zOwTA$FtoI^RB%kmPfAq?t}HG|%`H~&%uCKMD#$NNEJ+2$A;f(kT?~Q{g`g1A0BW?* z1dCFU0L25uxX*#$@MRP`gAhYllw4X=2IVm_88a{t;v>wMBf-Gnzm$Q2N7Cxn-c@HNK%0tY8@BC5pb5YwDf-l22D*(AQ=`K3M3iQ{sYP8 z=4K$-(a`}Uj~zP(B#$3I4kT~gx&I%v9aa!<;eYh7N}}Fo=DmZ}Qv|xU;oW5Cl*t#i`m)PokJ^Lig%&xk~ z;oXUvo%j9YetwVMxwv@3j!QAKYN9RYq~2ZgM){7!;vM}-ouJUa8BbS* zsBc%>$Y?t8S0NYIqe9D$#*TMif;3Y-SahP!JpHb@R8dj-`Qv@BpFRs(`}OR!GsmtL zUD|T=>AtCVjvagM!FOWr%=KS>pI!Z@PQSd2Pbz%&=}Gze?TgpUp1!wzc5&GEjobPn zlp_p}EuSFkWbixJ=gHXQ?{I_;2`Y>b;GBv-fN7NVn3riQG~c9kc%59e=&+ zdX?sqJKZBwWcy2nZrgs7Q+v(G@m-kVJ(_O`MJ}@<4={2oxpq#spXc-bfveX`cW*CU z=UY2wuPEXED-jk}bFMFMieJg%Y|SF21niR?M`TYD<~ayL;Z)-kGy`SN~REdg+8Ep_W|C>g{0;83y*(2K3k+pU~jWH=TdoH=`2aJ z*vYX|mtE*r6#8f>d3M$AIJtLA=M+zu*>ERCZ*RY08OXn1?@rt8xpa#8Y-8>4Q=XUP zrvFMS(w3fYYpGD4vhU7&_4R*#uf228(jz8Q&v)NinRA=+!oCUSd3oMBe#t7SSD{rP zO!0R0`ft%QPe@N>{(k#W*0&Fl|B}C)-kbdUc3pZw{mVTYQUZ^^EnNGnczevM*gtuf Yiu*5lSj)Xu*%tjq+2@k*rsYzn0Ta+DKL7v# literal 0 HcmV?d00001 diff --git a/assets/DriveContainer.aseprite b/assets/DriveContainer.aseprite new file mode 100644 index 0000000000000000000000000000000000000000..c8486bc4ce2f1ca5ff57c3ef359574d26296ae6d GIT binary patch literal 568 zcmcCuVqkc%l!-wA2o)F@85kH+fEWRQVjw}VJVKOutaPC1zdo{oZDj)*D+a{u3ScXd zEXe}0SwOB+05X&mOk6c=(ku=8!>sQYs@+_W_U`bk-=EB8J`Kp)XJ9@h&pT5;$Xmt8 z#?s!t#2}$5I`3if?Emp+pPat^=l}ozv)68KscX;7%8CpNDs$>uV`OwQJo$R{uKwv> zUHJy`Ae$7Jfg}w42Qt_hd=e{Dixdp;OB*=?)v_u;bp8j1EChhUwqj1V{qHCBHmw$w z-~RuTzfyO~fPw4IgR>Dp9jrj_GXWvO03HTjpaIskzt8`_ zoH2uupW$SBTIxYV!&ikf`@QqN-Fo{!amKB($Hn|+yV+;gdz#Ll@O$IW=~KQmod0_R X==ekpqd=g!zdka8gBcXK6gw0E_f3vz literal 0 HcmV?d00001 diff --git a/assets/Head.aseprite b/assets/Head.aseprite new file mode 100644 index 0000000000000000000000000000000000000000..9ffaae7f974a60856a9d3922163e6a3a66eb2b70 GIT binary patch literal 962 zcmX@a%)szqDGP%D5GpV*GB7Zt05Jjp#Xy2!d4wqSSP4MWe|=;D+sXnoRt$*Q6~I;^ zS&{{0vw&Qu0AwgBn7C@#q*)sFhgsh*RJ*w#?cL#7zdxDHd>W9o&%k_2o_D5xkhhAF zjitSPi9teBbl$_{+5h9uJ~@5+&;S4bXRqDfQrDiDl@%ElROZyR#>nVqc=Gk?UH#L& zy7CR=K{hD>0|gHL16k}0K8cm7MGA%+fgDx^h}?fB2n`9GiaDRFsz2K^w?42Ji23`! zH>Y?{LmtD!*8TAla@joed4iMJPRJSwr%z06yRz!(f5(W2FTxDej`JK`q_sm*sqkRR zY{pOA9`+osZFV?rvQ(%wsBgHTVC;F3|1x_KyN5nU#l#uc65hFA<7ZkjqcP81XYIr! zwq0|VEZh7)pka;pv}+xv%+K;7q?i*Q)iN+{C~4JUV+d8+a-tvT#$O*9!Ql%E)p{Vt z<$<-64)QW6a4^rEDLA8T;tjW_fzCbhT`DRcUU0e^&t5FKO;Rv+@9xVz7yczE?5>*D zC@b(rW|fuelMSnSE-1~c{p1_zpQk_L_oKTXm~CHiDS!X4)XI6?>bfU?Z|?v2DW6fm z;%4t6H0MmhKxa}GK^<3-%#V~S!EyUx(rIQYFH7E$U{GPk(sqPyg zL5U}kAM_9XKRzSL$!hEFLrPtruSuTOynfE&RAiP}LE7_GQyurt-_yyscN(MYy8@lp zu~KX$UxdD|NZL}_wD4g-|4h}3&eGdHd~097QT_;znDJGk8H}4I?t6cI_m}mL&Yfub ayK`E_!N{!0|FSmB`wnJ&*K7Gxz6t<&`!?JF literal 0 HcmV?d00001 diff --git a/assets/Platter.aseprite b/assets/Platter.aseprite new file mode 100644 index 0000000000000000000000000000000000000000..4f289b7fa854a69b36ffa47cb9ad4196da4d2720 GIT binary patch literal 1142 zcmXS8VPJT$l!ZY62o)F@85kH+fEWRQVjw}VJVKOutjR#re|=;D+X{3FgBTFAD}b#; zvLp-0W&ycQ0mx8NFmcteNwYNU53{~ssCIKf+PlNEet$BX`7|JFpMm+5Jnu~XAa4~T z8%ulp5`%=M=)8x?v;W7ReRBHtpa1{=&tAK|rLH|QD=RWAsLZKrjgisK@Z{^&yZWbl zb>$n#gKSb@29hxFAIM;5@JXypEmAOi0_3nNK&1XNL1;+eRLp4&-pG5%LEtpk#1#Qt z&lWCC=Qx$)=zHC1e$TmGdF7D|>-Q~Jgxkg5MgE*!cs2aa>ZRv*ywbe(t~Yz`Y1?y)etz6Jley?_ z{Q3TU3)5FjWqfx0Yt{WT^5^}hE<6=qo6bE}A`?^(^u73ybduV~*dMZmK!i?)#0M zQFj_wRc?Gf-}(*Tmnr5BdLrpxR@Ke9z3kn__+!^@$p2jNc;^+FRm;~)N>59QeSErZ zp6zF4`#ST_>FXbfm;T^0ZLj}a71rzP8~>y3qmul;^H=O1|30SqDL<~KNAx)B!U#Fd zPiUTagvS%Dlf1bO13ghZw`}?wuU(u=Cpc~9dm^U#{rFQ!Hnzm0ZI0WXUQAz;n6du- zC#~1jYj4;^d(JbheEweNcwLBGy3T`lUETjJeMRLC|BU3>J72!I^<0GGR>tR_=GpBO zk56Co>SEoVyRYp&ZG57_KOugrxA)7Y{)i(j-J!i3?cd)o{t@>z_N8`(>^jrZFaNG> z?ftpA^5FWorSjMQ>z(VqzE-Ay5R?*M))z&QW_ literal 0 HcmV?d00001 diff --git a/assets/Tiers.aseprite b/assets/Tiers.aseprite new file mode 100644 index 0000000000000000000000000000000000000000..f9a306bfa1154f37062abe8a01fd74f5b7f0af44 GIT binary patch literal 1054 zcmb1RVPJT$l!ZY62o)F@85kH+fEWRQVjw}VJVKOutm#10e|=;D+X{3FgBTFAD}b#; zvLp-0W&ycQ0mx8NFmcteNwYNU53{~ssCIKf+PlNEet$BX`7|JFpMm+5Jnu~XAa4~T z8%ulp5`%=M=)8x?v;W7ReRBHtpa1{=&tAK|rLH|QD=RWAsLZKrjgisK@Z{^&yZWbl zb>$n#gKSb@29hxFAIM;5@JXypEmAOi0pzeMK&1XNL1;+eRLtoOGUPjCAW+RLB%Jhu zxx(|>yIPjy`h%yAwH!Go{Hw)lgW;wPn+#+uCaJ!j6=QL->(z~N-$!3|-G2G`%#62l zuYY;G>t)vKh1;*znS`u*!60I>?#bT$OCHbrc0cA^<-YIJO5Qm0-H_|!u3r+&C-vcl zul=fJhq=}=MV-6;TjQmL`$5|~@(%jdRT+tL7Jrog?mnJdC|Aq9H@slZ+2SANA-THZ zUmotBx=_P@EsyKZi^kWDM4le{?R`tb{(p+bDgIwujFwa#dVW0J<0Gp^*Z-+gfL{Cc zkr5m%pvY(eVqE?{8+4GDL6PJ3Ou-p#6K_28k(YSywDtSsC7otdFC@9xtT;2Lqb<4N z+v@igUu{=CUUlvFuYDEAcK&{ylQzkoA&SjZo$cu2Tg{a=U-fhkpZy(foOE+V@ur+B zmgWEczuEBn|0%x6`;0Z4<0BWLxoHv}H~s$q{ow!o@sAJwxNfR%@K?TD!i;AUb7IO@ zgTfNSnzRR-CW{z5Fhuh2lHgJP>{)pDbnhaKH`bS19_Gx5nqi^&u-#X8<->N}Kb^ex zF>d%fyd>0`Iof(Ablk#)@reD`b+-%r!w(B3fN-FbJNpo_FTokSFb<+DmLTY HARD_DRIVE_CONTAINER_BLOCK_ENTITY; + public static HardDriveContainerBlock HARD_DRIVE_CONTAINER_BLOCK; + public static StorageBlock STORAGE_BLOCK; public static BlockEntityType STORAGE_BLOCK_ENTITY; public static final GameRules.Key ServerStorage_Crafting_Enable = GameRuleRegistry.register("enableserverstoragecrafting", GameRules.Category.MISC, GameRuleFactory.createBooleanRule(false)); + + public static Identifier id(String path) { + return Identifier.of(MOD_ID, path); + } + @Override public void onInitialize() { StorageBlock.register(); StorageBlockItem.register(); - PolymerResourcePackUtils.addModAssets(MODID); + + HardDriveContainerBlock.register(); + HardDriveContainerBlockItem.register(); + + HardDriveItem.register(); + + PolymerResourcePackUtils.addModAssets(MOD_ID); PolymerResourcePackUtils.markAsRequired(); } -} +} \ No newline at end of file diff --git a/src/main/java/systems/brn/server_storage/blockentities/HardDriveContainerBlockEntity.java b/src/main/java/systems/brn/server_storage/blockentities/HardDriveContainerBlockEntity.java new file mode 100644 index 0000000..19d1ae3 --- /dev/null +++ b/src/main/java/systems/brn/server_storage/blockentities/HardDriveContainerBlockEntity.java @@ -0,0 +1,13 @@ +package systems.brn.server_storage.blockentities; + +import net.minecraft.block.BlockState; +import net.minecraft.block.entity.BlockEntity; +import net.minecraft.util.math.BlockPos; + +import static systems.brn.server_storage.ServerStorage.HARD_DRIVE_CONTAINER_BLOCK_ENTITY; + +public class HardDriveContainerBlockEntity extends BlockEntity { + public HardDriveContainerBlockEntity(BlockPos pos, BlockState state) { + super(HARD_DRIVE_CONTAINER_BLOCK_ENTITY, pos, state); + } +} diff --git a/src/main/java/systems/brn/server_storage/blocks/HardDriveContainerBlock.java b/src/main/java/systems/brn/server_storage/blocks/HardDriveContainerBlock.java new file mode 100644 index 0000000..342b3b1 --- /dev/null +++ b/src/main/java/systems/brn/server_storage/blocks/HardDriveContainerBlock.java @@ -0,0 +1,109 @@ +package systems.brn.server_storage.blocks; + +import eu.pb4.polymer.blocks.api.BlockModelType; +import eu.pb4.polymer.blocks.api.PolymerBlockModel; +import eu.pb4.polymer.blocks.api.PolymerBlockResourceUtils; +import eu.pb4.polymer.blocks.api.PolymerTexturedBlock; +import eu.pb4.polymer.core.api.block.PolymerBlockUtils; +import net.fabricmc.fabric.api.event.player.UseBlockCallback; +import net.minecraft.block.Block; +import net.minecraft.block.BlockEntityProvider; +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.component.DataComponentTypes; +import net.minecraft.component.type.WrittenBookContentComponent; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.item.Items; +import net.minecraft.registry.Registries; +import net.minecraft.registry.Registry; +import net.minecraft.server.network.ServerPlayerEntity; +import net.minecraft.text.RawFilteredPair; +import net.minecraft.text.Text; +import net.minecraft.util.ActionResult; +import net.minecraft.util.Hand; +import net.minecraft.util.hit.BlockHitResult; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import org.jetbrains.annotations.Nullable; +import systems.brn.server_storage.ServerStorage; +import systems.brn.server_storage.blockentities.HardDriveContainerBlockEntity; +import systems.brn.server_storage.blockentities.StorageBlockEntity; +import systems.brn.server_storage.screens.StorageScreen; + +import java.util.List; + +import static systems.brn.server_storage.ServerStorage.*; +import static systems.brn.server_storage.lib.Util.generateBookContent; + +public class HardDriveContainerBlock extends Block implements PolymerTexturedBlock, BlockEntityProvider { + + String modelID; + + BlockModelType blockModelType; + + public HardDriveContainerBlock(Settings settings, BlockModelType type, String modelId) { + super(settings); + this.modelID = modelId; + this.blockModelType = type; + } + + @Override + public BlockState getPolymerBlockState(BlockState state) { + return PolymerBlockResourceUtils.requestBlock(BlockModelType.FULL_BLOCK, PolymerBlockModel.of(id(this.modelID))); + } + + public static void register() { + var modId = id(STORAGE_MODEL_ID); + HARD_DRIVE_CONTAINER_BLOCK = Registry.register(Registries.BLOCK, modId, + new HardDriveContainerBlock(Settings.copy(Blocks.WHITE_WOOL), BlockModelType.FULL_BLOCK, ServerStorage.HARD_DRIVE_CONTAINER_BLOCK_MODEL_ID)); + UseBlockCallback.EVENT.register(HardDriveContainerBlock::onUse); + + HARD_DRIVE_CONTAINER_BLOCK_ENTITY = Registry.register( + Registries.BLOCK_ENTITY_TYPE, + modId, + BlockEntityType.Builder.create(HardDriveContainerBlockEntity::new, HARD_DRIVE_CONTAINER_BLOCK).build(null) + ); + PolymerBlockUtils.registerBlockEntity(STORAGE_BLOCK_ENTITY); + } + + private static ActionResult onUse(PlayerEntity player, World world, Hand hand, BlockHitResult hitResult) { + BlockPos pos = hitResult.getBlockPos(); + BlockState state = world.getBlockState(pos); + Block block = state.getBlock(); + + if (block instanceof HardDriveContainerBlock) { + if (!world.isClient && !player.isSpectator()) { + if (!player.isSneaking()) { + StorageScreen storageScreen = new StorageScreen((ServerPlayerEntity) player, pos, null); + storageScreen.open(); + + } else if (player.getStackInHand(hand).getItem() == Items.WRITTEN_BOOK) { + ItemStack book = player.getStackInHand(hand); + StorageBlockEntity storageBlockEntity = (StorageBlockEntity) world.getBlockEntity(pos); + assert storageBlockEntity != null; + List> generatedContent = generateBookContent(storageBlockEntity.chests.inventory); + book.set(DataComponentTypes.WRITTEN_BOOK_CONTENT, new WrittenBookContentComponent( + RawFilteredPair.of("Item Listing"), + player.getGameProfile().getName(), + 0, + generatedContent, + false + )); + } else { + return ActionResult.PASS; + } + } + return ActionResult.SUCCESS; + } + return ActionResult.PASS; + } + + @Nullable + @Override + public BlockEntity createBlockEntity(BlockPos pos, BlockState state) { + return new StorageBlockEntity(pos, state); + } +} diff --git a/src/main/java/systems/brn/server_storage/blocks/StorageBlock.java b/src/main/java/systems/brn/server_storage/blocks/StorageBlock.java index 024e7a6..533bc07 100644 --- a/src/main/java/systems/brn/server_storage/blocks/StorageBlock.java +++ b/src/main/java/systems/brn/server_storage/blocks/StorageBlock.java @@ -37,27 +37,24 @@ import static systems.brn.server_storage.lib.Util.generateBookContent; public class StorageBlock extends Block implements PolymerTexturedBlock, BlockEntityProvider { - private final BlockState polymerBlockState; - public StorageBlock(Settings settings, BlockModelType type, String modelId) { super(settings); - this.polymerBlockState = PolymerBlockResourceUtils.requestBlock(type, PolymerBlockModel.of(Identifier.of(ServerStorage.MODID, modelId))); } @Override public BlockState getPolymerBlockState(BlockState state) { - return this.polymerBlockState; + return PolymerBlockResourceUtils.requestBlock(BlockModelType.FULL_BLOCK, PolymerBlockModel.of(Identifier.of(MOD_ID, STORAGE_MODEL_ID))); } public static void register() { - var modId = Identifier.of(ServerStorage.MODID, ServerStorage.MODELID); + var modId = id(STORAGE_MODEL_ID); STORAGE_BLOCK = Registry.register(Registries.BLOCK, modId, - new StorageBlock(AbstractBlock.Settings.copy(Blocks.WHITE_WOOL), BlockModelType.FULL_BLOCK, ServerStorage.MODELID)); + new StorageBlock(AbstractBlock.Settings.copy(Blocks.WHITE_WOOL), BlockModelType.FULL_BLOCK, ServerStorage.STORAGE_MODEL_ID)); UseBlockCallback.EVENT.register(StorageBlock::onUse); STORAGE_BLOCK_ENTITY = Registry.register( Registries.BLOCK_ENTITY_TYPE, - Identifier.of(MODID, MODELID), + modId, BlockEntityType.Builder.create(StorageBlockEntity::new, STORAGE_BLOCK).build(null) ); PolymerBlockUtils.registerBlockEntity(STORAGE_BLOCK_ENTITY); @@ -70,12 +67,11 @@ public class StorageBlock extends Block implements PolymerTexturedBlock, BlockEn if (block instanceof StorageBlock) { if (!world.isClient && !player.isSpectator()) { - if(!player.isSneaking()){ + if (!player.isSneaking()) { StorageScreen storageScreen = new StorageScreen((ServerPlayerEntity) player, pos, null); storageScreen.open(); - } - else if(player.getStackInHand(hand).getItem() == Items.WRITTEN_BOOK) { + } else if (player.getStackInHand(hand).getItem() == Items.WRITTEN_BOOK) { ItemStack book = player.getStackInHand(hand); StorageBlockEntity storageBlockEntity = (StorageBlockEntity) world.getBlockEntity(pos); assert storageBlockEntity != null; diff --git a/src/main/java/systems/brn/server_storage/items/HardDriveContainerBlockItem.java b/src/main/java/systems/brn/server_storage/items/HardDriveContainerBlockItem.java new file mode 100644 index 0000000..2199686 --- /dev/null +++ b/src/main/java/systems/brn/server_storage/items/HardDriveContainerBlockItem.java @@ -0,0 +1,41 @@ +package systems.brn.server_storage.items; + +import eu.pb4.polymer.core.api.item.PolymerItem; +import eu.pb4.polymer.resourcepack.api.PolymerModelData; +import eu.pb4.polymer.resourcepack.api.PolymerResourcePackUtils; +import net.fabricmc.fabric.api.itemgroup.v1.ItemGroupEvents; +import net.minecraft.block.Block; +import net.minecraft.item.*; +import net.minecraft.registry.Registries; +import net.minecraft.registry.Registry; +import net.minecraft.server.network.ServerPlayerEntity; +import net.minecraft.util.Identifier; +import org.jetbrains.annotations.Nullable; +import systems.brn.server_storage.ServerStorage; + +import static systems.brn.server_storage.ServerStorage.*; + +public class HardDriveContainerBlockItem extends BlockItem implements PolymerItem { + private final PolymerModelData polymerModel; + + public HardDriveContainerBlockItem(Item.Settings settings, Block block, Identifier identifier) { + super(block, settings); + this.polymerModel = PolymerResourcePackUtils.requestModel(Items.BARRIER, identifier); + } + + @Override + public Item getPolymerItem(ItemStack itemStack, @Nullable ServerPlayerEntity player) { + return this.polymerModel.item(); + } + + @Override + public int getPolymerCustomModelData(ItemStack itemStack, @Nullable ServerPlayerEntity player) { + return this.polymerModel.value(); + } + + public static void register() { + Identifier identifier= id(ServerStorage.HARD_DRIVE_CONTAINER_BLOCK_MODEL_ID); + Item item = Registry.register(Registries.ITEM, identifier, new HardDriveContainerBlockItem(new Item.Settings(), HARD_DRIVE_CONTAINER_BLOCK, identifier)); + ItemGroupEvents.modifyEntriesEvent(ItemGroups.FUNCTIONAL).register(content -> content.add(item)); + } +} diff --git a/src/main/java/systems/brn/server_storage/items/HardDriveItem.java b/src/main/java/systems/brn/server_storage/items/HardDriveItem.java new file mode 100644 index 0000000..a50e5dc --- /dev/null +++ b/src/main/java/systems/brn/server_storage/items/HardDriveItem.java @@ -0,0 +1,43 @@ +package systems.brn.server_storage.items; + +import eu.pb4.polymer.core.api.item.PolymerItem; +import eu.pb4.polymer.resourcepack.api.PolymerModelData; +import eu.pb4.polymer.resourcepack.api.PolymerResourcePackUtils; +import net.fabricmc.fabric.api.itemgroup.v1.ItemGroupEvents; +import net.minecraft.item.Item; +import net.minecraft.item.ItemGroups; +import net.minecraft.item.ItemStack; +import net.minecraft.item.Items; +import net.minecraft.registry.Registries; +import net.minecraft.registry.Registry; +import net.minecraft.server.network.ServerPlayerEntity; +import net.minecraft.util.Identifier; +import org.jetbrains.annotations.Nullable; +import systems.brn.server_storage.ServerStorage; + +import static systems.brn.server_storage.ServerStorage.id; + +public class HardDriveItem extends Item implements PolymerItem { + private final PolymerModelData polymerModel; + + public HardDriveItem(Settings settings, Identifier identifier) { + super(settings); + this.polymerModel = PolymerResourcePackUtils.requestModel(Items.BARRIER, identifier); + } + + @Override + public Item getPolymerItem(ItemStack itemStack, @Nullable ServerPlayerEntity player) { + return this.polymerModel.item(); + } + + @Override + public int getPolymerCustomModelData(ItemStack itemStack, @Nullable ServerPlayerEntity player) { + return this.polymerModel.value(); + } + + public static void register() { + Identifier identifier = id(ServerStorage.HARD_DRIVE_MODEL_ID); + Item item = Registry.register(Registries.ITEM, identifier, new HardDriveItem(new Settings(), identifier)); + ItemGroupEvents.modifyEntriesEvent(ItemGroups.FUNCTIONAL).register(content -> content.add(item)); + } +} diff --git a/src/main/java/systems/brn/server_storage/items/StorageBlockItem.java b/src/main/java/systems/brn/server_storage/items/StorageBlockItem.java index b421da2..baf795b 100644 --- a/src/main/java/systems/brn/server_storage/items/StorageBlockItem.java +++ b/src/main/java/systems/brn/server_storage/items/StorageBlockItem.java @@ -14,13 +14,14 @@ import org.jetbrains.annotations.Nullable; import systems.brn.server_storage.ServerStorage; import static systems.brn.server_storage.ServerStorage.STORAGE_BLOCK; +import static systems.brn.server_storage.ServerStorage.id; public class StorageBlockItem extends BlockItem implements PolymerItem { private final PolymerModelData polymerModel; - public StorageBlockItem(Settings settings, Block block, String modelId) { + public StorageBlockItem(Settings settings, Block block, Identifier identifier) { super(block, settings); - this.polymerModel = PolymerResourcePackUtils.requestModel(Items.BARRIER, Identifier.of(ServerStorage.MODID, modelId)); + this.polymerModel = PolymerResourcePackUtils.requestModel(Items.BARRIER, identifier); } @Override @@ -34,8 +35,8 @@ public class StorageBlockItem extends BlockItem implements PolymerItem { } public static void register() { - var modId = Identifier.of(ServerStorage.MODID, ServerStorage.MODELID); - Item item = Registry.register(Registries.ITEM, modId, new StorageBlockItem(new Item.Settings(), STORAGE_BLOCK, ServerStorage.MODELID)); + Identifier identifier = id(ServerStorage.STORAGE_MODEL_ID); + Item item = Registry.register(Registries.ITEM, identifier, new StorageBlockItem(new Item.Settings(), STORAGE_BLOCK, identifier)); ItemGroupEvents.modifyEntriesEvent(ItemGroups.FUNCTIONAL).register(content -> content.add(item)); } } \ No newline at end of file diff --git a/src/main/java/systems/brn/server_storage/lib/CraftingEntry.java b/src/main/java/systems/brn/server_storage/lib/CraftingEntry.java index 4332141..11baf2f 100644 --- a/src/main/java/systems/brn/server_storage/lib/CraftingEntry.java +++ b/src/main/java/systems/brn/server_storage/lib/CraftingEntry.java @@ -1,17 +1,44 @@ package systems.brn.server_storage.lib; +import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.recipe.CraftingRecipe; import net.minecraft.recipe.RecipeEntry; import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; + +import static systems.brn.server_storage.lib.Util.addCountToLore; public class CraftingEntry { - public final ItemStack itemStack; + public final ArrayList outputStacks; public final RecipeEntry recipeEntry; public final ArrayList myCraftingRecipeEntries; - public CraftingEntry(ItemStack itemStack, RecipeEntry recipeEntry) { - this.itemStack = itemStack; + + public CraftingEntry(ItemStack itemStack, RecipeEntry recipeEntry, HashMap inputs, Integer maxCount) { + ArrayList tempOutputStacks = new ArrayList<>(); + ItemStack outputStack = itemStack.copy(); + outputStack.setCount(maxCount); + outputStack = addCountToLore(itemStack.getCount() * maxCount, outputStack, "Total max: "); + outputStack = addCountToLore(itemStack.getCount(), outputStack, "Each craft: "); + outputStack = addCountToLore(maxCount, outputStack, "Max crafts: "); + tempOutputStacks.add(outputStack); + for (Map.Entry entry : inputs.entrySet()) { + ItemStack stackIn = entry.getKey(); + Integer count = entry.getValue(); + if (count > 0 && stackIn.isEmpty() && stackIn.getItem().hasRecipeRemainder()) { + Item remainderItem = stackIn.getItem().getRecipeRemainder(); + if (remainderItem != null) { + ItemStack remainderStack = new ItemStack(stackIn.getItem().getRecipeRemainder(), count); + tempOutputStacks.add(remainderStack); + } + } + } + this.outputStacks = tempOutputStacks; this.recipeEntry = recipeEntry; + this.myCraftingRecipeEntries = new ArrayList<>(); + } } + diff --git a/src/main/java/systems/brn/server_storage/lib/MyCraftingRecipe.java b/src/main/java/systems/brn/server_storage/lib/MyCraftingRecipe.java index 3db8e74..03e843b 100644 --- a/src/main/java/systems/brn/server_storage/lib/MyCraftingRecipe.java +++ b/src/main/java/systems/brn/server_storage/lib/MyCraftingRecipe.java @@ -10,6 +10,6 @@ public class MyCraftingRecipe { HashMap inputs = new HashMap<>(); HashMap outputs = new HashMap<>(); MyCraftingRecipe(RecipeEntry recipeEntry) { - recipeEntry.value().getIngredients() + recipeEntry.value().getIngredients(); } } diff --git a/src/main/java/systems/brn/server_storage/lib/Util.java b/src/main/java/systems/brn/server_storage/lib/Util.java index 781c85b..a89085e 100644 --- a/src/main/java/systems/brn/server_storage/lib/Util.java +++ b/src/main/java/systems/brn/server_storage/lib/Util.java @@ -5,6 +5,7 @@ import net.minecraft.component.type.LoreComponent; import net.minecraft.inventory.Inventory; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; +import net.minecraft.item.Items; import net.minecraft.recipe.*; import net.minecraft.server.MinecraftServer; import net.minecraft.text.RawFilteredPair; @@ -63,11 +64,12 @@ public class Util { return pages; } - public static ItemStack addCountToLore(final int count, ItemStack stack) { + public static ItemStack addCountToLore(final int count, ItemStack stack, String name) { if (count > 0) { ItemStack newStack = stack.copy(); LoreComponent lore = stack.get(DataComponentTypes.LORE); - Text countLine = Text.literal("Amount: " + count).setStyle(Style.EMPTY.withColor(Formatting.GOLD).withItalic(true)); + name = name != null ? name : "Amount: "; + Text countLine = Text.literal(name + count).setStyle(Style.EMPTY.withColor(Formatting.GOLD).withItalic(true)); LoreComponent newLore; if (lore == null) { @@ -113,6 +115,9 @@ public class Util { for (RecipeEntry recipe : allRecipes) { int maxAmount = -1; boolean canMake = true; + boolean needToAdd = true; + CraftingEntry finalEntry; + HashMap finalInputs = new HashMap<>(); for (Ingredient ingredient : recipe.value().getIngredients()) { HashMap inputsTemp = new HashMap<>(); for (ItemStack stack : ingredient.getMatchingStacks()) { @@ -143,18 +148,23 @@ public class Util { stackIn.setCount(count); inputs.put(stackIn, stackIn.getCount()); } - for (int i = 0; i < inventory.size(); i++) { - ItemStack slotStack = inventory.getStack(i); - Item slotItem = slotStack.getItem(); - int slotCount = slotStack.getCount(); - for (Map.Entry entry : inputs.entrySet()) { - ItemStack stackIn = entry.getKey(); - Integer count = entry.getValue(); + for (Map.Entry entry : inputs.entrySet()) { + ItemStack stackIn = entry.getKey(); + Integer count = entry.getValue(); + boolean itemFound = false; + for (int i = 0; i < inventory.size(); i++) { + ItemStack slotStack = inventory.getStack(i); + Item slotItem = slotStack.getItem(); + int slotCount = slotStack.getCount(); if (stackIn.getItem() == slotItem) { count -= slotCount; entry.setValue(count); + itemFound = true; } } + if (!itemFound) { + maxAmount = 0; + } } for (Map.Entry entry : inputs.entrySet()) { ItemStack stackIn = entry.getKey(); @@ -162,6 +172,9 @@ public class Util { if (count > 0) { canMake = false; } else { + if(recipe.value().getResult(server.getRegistryManager()).getItem() == Items.REDSTONE_BLOCK){ + int asdasd = 0; + } int thisMaxAmount = Math.floorDivExact(Math.abs(count), stackIn.getCount()); if (maxAmount == -1) { maxAmount = thisMaxAmount; @@ -170,27 +183,31 @@ public class Util { } } } - if (maxAmount > 1 && canMake) { - Item outputItem = recipe.value().getResult(server.getRegistryManager()).getItem(); - CraftingEntry entry = new CraftingEntry(new ItemStack(outputItem, maxAmount), recipe); - boolean needToAdd = true; + if (maxAmount > 0 && canMake && needToAdd) { + ItemStack outputItem = recipe.value().getResult(server.getRegistryManager()).copy(); + finalEntry = new CraftingEntry(outputItem, recipe, inputs, maxAmount); + finalInputs.putAll(inputs); for (int i = 0; i < craftingEntries.size(); i++) { CraftingEntry entryLoop = craftingEntries.get(i); - if (entryLoop.itemStack.getItem().equals(outputItem)) { - needToAdd = false; - if (maxAmount > entryLoop.itemStack.getCount()) { - craftingEntries.set(i, entry); - break; + for (ItemStack outputStack : entryLoop.outputStacks) { + if (ItemStack.areItemsAndComponentsEqual(outputStack, outputItem)) { + needToAdd = false; + if (maxAmount > outputStack.getCount()) { + craftingEntries.set(i, finalEntry); + break; + } } } } - if (needToAdd) { - craftingEntries.add(entry); - } } else { break; } } + if (needToAdd && maxAmount > 0) { + ItemStack outputItem = recipe.value().getResult(server.getRegistryManager()).copy(); + finalEntry = new CraftingEntry(outputItem, recipe, finalInputs, maxAmount); + craftingEntries.add(finalEntry); + } } return craftingEntries; } diff --git a/src/main/java/systems/brn/server_storage/screens/CraftingScreen.java b/src/main/java/systems/brn/server_storage/screens/CraftingScreen.java index 6c8c867..bc77377 100644 --- a/src/main/java/systems/brn/server_storage/screens/CraftingScreen.java +++ b/src/main/java/systems/brn/server_storage/screens/CraftingScreen.java @@ -17,7 +17,6 @@ import java.util.Map; import java.util.Objects; import static systems.brn.server_storage.lib.StorageOperations.*; -import static systems.brn.server_storage.lib.Util.addCountToLore; import static systems.brn.server_storage.lib.Util.getCraftableRecipes; public class CraftingScreen extends PagedGui { @@ -50,7 +49,7 @@ public class CraftingScreen extends PagedGui { ArrayList recipes = new ArrayList<>(); for (CraftingEntry craftingEntry : craftingEntries) { - ItemStack stackWithCount = addCountToLore(craftingEntry.itemStack.getCount(), craftingEntry.itemStack); + ItemStack stackWithCount = craftingEntry.outputStacks.getFirst().copy(); if (stackWithCount.getCount() > stackWithCount.getMaxCount()) { stackWithCount.setCount(stackWithCount.getMaxCount()); } diff --git a/src/main/java/systems/brn/server_storage/screens/StorageScreen.java b/src/main/java/systems/brn/server_storage/screens/StorageScreen.java index 0bb8f26..21101b7 100644 --- a/src/main/java/systems/brn/server_storage/screens/StorageScreen.java +++ b/src/main/java/systems/brn/server_storage/screens/StorageScreen.java @@ -64,7 +64,7 @@ public class StorageScreen extends PagedGui { protected DisplayElement getElement(int id) { if (blockEntity.chests.inventory.size() > id) { ItemStack itemStack = blockEntity.chests.inventory.getStack(id); - ItemStack newStack = addCountToLore(itemStack.getCount(), itemStack); + ItemStack newStack = addCountToLore(itemStack.getCount(), itemStack, null); GuiElementBuilder guiElement = new GuiElementBuilder(newStack); return DisplayElement.of(guiElement); } diff --git a/src/main/resources/assets/serverstorage/blockstates/drive_container.json b/src/main/resources/assets/serverstorage/blockstates/drive_container.json new file mode 100644 index 0000000..d3beb3b --- /dev/null +++ b/src/main/resources/assets/serverstorage/blockstates/drive_container.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "serverstorage:block/drive_container" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/serverstorage/lang/en_us.json b/src/main/resources/assets/serverstorage/lang/en_us.json index cfdf057..9739388 100644 --- a/src/main/resources/assets/serverstorage/lang/en_us.json +++ b/src/main/resources/assets/serverstorage/lang/en_us.json @@ -1,4 +1,5 @@ { "block.serverstorage.storage": "Chest storage controller", - "block.serverstorage.fast_hopper": "Fast hopper" + "block.serverstorage.drive": "Hard drive", + "block.serverstorage.drive_container": "Hard drive container" } \ No newline at end of file diff --git a/src/main/resources/assets/serverstorage/models/drive_container.json b/src/main/resources/assets/serverstorage/models/drive_container.json new file mode 100644 index 0000000..5bf0c3a --- /dev/null +++ b/src/main/resources/assets/serverstorage/models/drive_container.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "serverstorage:block/drive_container" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/serverstorage/models/item/drive.json b/src/main/resources/assets/serverstorage/models/item/drive.json new file mode 100644 index 0000000..ddcec5f --- /dev/null +++ b/src/main/resources/assets/serverstorage/models/item/drive.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "minecraft:item/drive" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/serverstorage/models/item/drive_container.json b/src/main/resources/assets/serverstorage/models/item/drive_container.json new file mode 100644 index 0000000..9793643 --- /dev/null +++ b/src/main/resources/assets/serverstorage/models/item/drive_container.json @@ -0,0 +1,3 @@ +{ + "parent": "storage:block/drive_container" +} \ No newline at end of file