diff --git a/src/main/generated/.cache/042b4fa789f2d02b21b174eafe0698eede724a83 b/src/main/generated/.cache/042b4fa789f2d02b21b174eafe0698eede724a83 index 0b95f85..60fc76f 100644 --- a/src/main/generated/.cache/042b4fa789f2d02b21b174eafe0698eede724a83 +++ b/src/main/generated/.cache/042b4fa789f2d02b21b174eafe0698eede724a83 @@ -1,4 +1,4 @@ -// 1.20.2 2023-11-18T14:08:12.2924639 All That Matters/Tags for minecraft:block +// 1.20.2 2023-11-18T14:15:16.4588291 All That Matters/Tags for minecraft:block 1f9bdd1045dccd95466410e12579545b8cbca675 data\minecraft\tags\blocks\lapis_ores.json 1d31e2156524120781d25e2046706c128e9e445e data\minecraft\tags\blocks\needs_iron_tool.json 6895288c69659b400340acf63661097c3d574c87 data\minecraft\tags\blocks\diamond_ores.json @@ -10,5 +10,5 @@ ccfcb5ecb24b5a9d5e0946cabb8cbbb308c8d5b6 data\minecraft\tags\blocks\copper_ores. b0d06695c3b27e22724b2d8ad70fd6ea964e5118 data\minecraft\tags\blocks\needs_stone_tool.json be68c7cf758c4a85f2a636278e341e901714fc6a data\minecraft\tags\blocks\iron_ores.json 495e39cd6637871f928d4a47f2fbe93cdf282cf5 data\minecraft\tags\blocks\redstone_ores.json -09a2ae92540badc81ac57242964ad153ba18d077 data\minecraft\tags\blocks\needs_diamond_tool.json 8a23702b05296c8af5014d6aa6e9265ded85c7d9 data\fabric\tags\blocks\needs_tool_level_4.json +09a2ae92540badc81ac57242964ad153ba18d077 data\minecraft\tags\blocks\needs_diamond_tool.json diff --git a/src/main/generated/.cache/3f1b16494788c9d2beceba5ae33b9c469dd522b5 b/src/main/generated/.cache/3f1b16494788c9d2beceba5ae33b9c469dd522b5 index 0bd8d7c..24b6a14 100644 --- a/src/main/generated/.cache/3f1b16494788c9d2beceba5ae33b9c469dd522b5 +++ b/src/main/generated/.cache/3f1b16494788c9d2beceba5ae33b9c469dd522b5 @@ -1,4 +1,4 @@ -// 1.20.2 2023-11-18T14:08:12.2779553 All That Matters/Block Loot Tables +// 1.20.2 2023-11-18T14:15:16.4428382 All That Matters/Block Loot Tables f55017dc588353c031ec3b0e0bc97ba94d592c39 data\allthatmatters\loot_tables\blocks\ore_nether_iron.json f887ca04c0dfcdb62e56c72d195c096b023061dc data\allthatmatters\loot_tables\blocks\ore_end_sapphire.json 85cb66e6c2b06d692e11e67c503ae5ef6cc53d1f data\allthatmatters\loot_tables\blocks\ore_nether_copper.json diff --git a/src/main/generated/.cache/4c7a60e422ab93e43e0681bf2a983d4139f31d2c b/src/main/generated/.cache/4c7a60e422ab93e43e0681bf2a983d4139f31d2c index 95e1516..c63dbfc 100644 --- a/src/main/generated/.cache/4c7a60e422ab93e43e0681bf2a983d4139f31d2c +++ b/src/main/generated/.cache/4c7a60e422ab93e43e0681bf2a983d4139f31d2c @@ -1,4 +1,4 @@ -// 1.20.2 2023-11-18T14:08:12.2749566 All That Matters/Tags for minecraft:item +// 1.20.2 2023-11-18T14:15:16.4418392 All That Matters/Tags for minecraft:item 572d7d80d10f03c8d6f51e2925a9ea3b372fe5be data\c\tags\items\casts.json 3234976729a598e706a52e4c0b5936fd6dba9911 data\minecraft\tags\items\swords.json 78af564205e8c82467224b545583d00b3e08dc27 data\allthatmatters\tags\items\smeltery.json diff --git a/src/main/generated/.cache/565bf4a5e950f34d74636d5e13b1cfeeca20f4c3 b/src/main/generated/.cache/565bf4a5e950f34d74636d5e13b1cfeeca20f4c3 index a8a22d1..7ea3667 100644 --- a/src/main/generated/.cache/565bf4a5e950f34d74636d5e13b1cfeeca20f4c3 +++ b/src/main/generated/.cache/565bf4a5e950f34d74636d5e13b1cfeeca20f4c3 @@ -1,4 +1,4 @@ -// 1.20.2 2023-11-18T14:08:12.2799536 All That Matters/Model Definitions +// 1.20.2 2023-11-18T14:15:16.4438382 All That Matters/Model Definitions b78797ac06939db80100f4503a8e82b10af97f8c assets\allthatmatters\models\item\tool_ruby_sword.json a99398a6ba0eb50d349987ad956cc5521a8f9bc1 assets\allthatmatters\models\item\armor_copper_chestplate_copper_trim.json ffea7bf5ed6426d9d81e5e15ff28d4eb9ae073dc assets\allthatmatters\models\item\armor_ruby_chestplate.json @@ -89,14 +89,14 @@ b8f1d085166655776ae7ab6fabbd6cba9a7c5446 assets\allthatmatters\models\item\plate 082bab17d1af348da2c02e52d266be417104627c assets\allthatmatters\models\item\gear_netherite.json 1923afa7998212dc64e3fb40eb3bfacf60e1bd2e assets\allthatmatters\models\item\gear_diamond.json 3f756270936ffc857652c6aeabe9459373413d05 assets\allthatmatters\models\item\armor_ruby_boots_emerald_trim.json -5aac29640f8bb369cb88384b2646bf1a87136d70 assets\allthatmatters\models\item\gem_sapphire.json e8dad44f8b9caa6674072b7cdd67a939a7f313fa assets\allthatmatters\models\item\armor_emerald_leggings_gold_trim.json +5aac29640f8bb369cb88384b2646bf1a87136d70 assets\allthatmatters\models\item\gem_sapphire.json 2f53bb5a513be06b1c213c748b5de5dda181e637 assets\allthatmatters\models\item\armor_emerald_helmet_quartz_trim.json 59382e8c060d86da25f15236222a7fb24d1f796f assets\allthatmatters\models\item\head_netherite_hoe.json cc4581f25a7b064ba34293c761d9dcf91558b694 assets\allthatmatters\models\item\armor_amethyst_chestplate_emerald_trim.json 725a56d1e3ca1360782d3871f65e5d12e5b5f541 assets\allthatmatters\models\item\armor_emerald_chestplate_copper_trim.json -d9411587bb45b3cfdc5be5b5ea92680e3a7b18de assets\allthatmatters\models\item\armor_sapphire_chestplate_netherite_trim.json de58f06b9612e1589ab97f0b3ebb306faf2965a7 assets\allthatmatters\models\block\ore_deep_sapphire.json +d9411587bb45b3cfdc5be5b5ea92680e3a7b18de assets\allthatmatters\models\item\armor_sapphire_chestplate_netherite_trim.json 90da0bdc6ee4c87afff3f31e2c4ba894e5fc2f8e assets\allthatmatters\models\item\armor_sapphire_leggings_redstone_trim.json f96e78714a12c02e979ae6afdd82ae9a636246fa assets\allthatmatters\models\item\armor_amethyst_chestplate_redstone_trim.json 7aee19025169b6a5c59bc72feed5ac2404e65ade assets\allthatmatters\models\item\armor_amethyst_chestplate_lapis_trim.json @@ -157,8 +157,8 @@ e5bb9d08d01327e0a5f39d38cb8339fd308f54c7 assets\allthatmatters\models\item\head_ 2d5e313e3ed72bfa52e4219dc71612f4ef36c767 assets\allthatmatters\models\item\head_copper_sword.json 6ff14a88fb53e60f840216372a8e047e879b8193 assets\allthatmatters\models\item\tool_ruby_pickaxe.json 6229b9f9e88960766a33626e8298db279cb800c1 assets\allthatmatters\models\item\tool_netherite_hammer.json -83c80afcd41c3d9733cc7bda5c81a76536daf2e9 assets\allthatmatters\models\item\raw_sapphire.json 743a54ef37df4dedbe96016ffeb20b4cf2c6aed4 assets\allthatmatters\models\item\armor_amethyst_helmet_quartz_trim.json +83c80afcd41c3d9733cc7bda5c81a76536daf2e9 assets\allthatmatters\models\item\raw_sapphire.json 9f10691c44a0a04d41d91d5406ea4685e9feb239 assets\allthatmatters\models\item\tool_citrine_axe.json 3438eeb9d92b82cbbfddff55abc774345499aed6 assets\allthatmatters\models\item\armor_citrine_helmet_netherite_trim.json 65bc3a6bcb5753934644054ad288f89ae45c5b73 assets\allthatmatters\models\item\armor_amethyst_leggings_iron_trim.json @@ -271,8 +271,8 @@ b72c6f462fb949549321688c3856e3d53cb826af assets\allthatmatters\models\item\armor 586d14e05e1123d0997c1811a42b0ccb0a1acfe4 assets\allthatmatters\blockstates\ore_end_citrine.json 4f68d0615786c01b677d1848f036c0e73d9bb860 assets\allthatmatters\models\item\armor_amethyst_helmet_lapis_trim.json 88d490aa6551e9f340831d698924995f269f1b63 assets\allthatmatters\models\item\armor_ruby_leggings_lapis_trim.json -93bc844f6e3592d67176da32949361170dec4f33 assets\allthatmatters\models\item\armor_copper_leggings_gold_trim.json 79ad8112dd60fbf7f9b6a1859e40f99df4fb3de3 assets\allthatmatters\models\item\armor_emerald_helmet_lapis_trim.json +93bc844f6e3592d67176da32949361170dec4f33 assets\allthatmatters\models\item\armor_copper_leggings_gold_trim.json 8ad5337028c921d6f30e75890a858e47ec14eb94 assets\allthatmatters\models\item\armor_copper_boots.json f6be3d27b44008ac9fbc44395bb66202be40ae5b assets\allthatmatters\models\item\armor_copper_chestplate.json 27f724e1920d5c9630ab10c0468f842c9641a865 assets\allthatmatters\models\item\armor_emerald_chestplate_diamond_trim.json @@ -486,9 +486,9 @@ c018e919dfbe9d6735aeaad0fb5ca25ad7fc7b20 assets\allthatmatters\models\item\armor 0992e0cbec0a21e668e7c45276c49b530c349b3f assets\allthatmatters\models\item\plate_citrine.json 34255a045704a254fcf7fc17d49c8fef725e0c85 assets\allthatmatters\models\block\ore_nether_citrine.json 22d63818e4c94da17ccb42eb67a27838544d27f4 assets\allthatmatters\models\item\tool_sapphire_hoe.json -a96332af8c638597a4388c753cac2487748ed775 assets\allthatmatters\models\item\armor_citrine_boots.json 9ff7883992d7faa26a8ffebc07654238d742137a assets\allthatmatters\models\item\plate_emerald.json 4c63718563bbf9668c406a8d6964f6dee385d8f2 assets\allthatmatters\models\item\ore_enderite.json +a96332af8c638597a4388c753cac2487748ed775 assets\allthatmatters\models\item\armor_citrine_boots.json 19e575d1e7d8cfada0a2fa63d4b056cf31475837 assets\allthatmatters\models\item\reinforced_plate_gold.json 0b9db2059c5e9cc9e14c3575e41bcb86e8da8291 assets\allthatmatters\models\item\armor_citrine_leggings_amethyst_trim.json 6c31b76ca31b0d5aaecebe4adea701ac2f5eee25 assets\allthatmatters\models\item\armor_citrine_helmet_gold_trim.json diff --git a/src/main/generated/.cache/db22f983ad9bf2eee19adade9469a1fa0cd0dccc b/src/main/generated/.cache/db22f983ad9bf2eee19adade9469a1fa0cd0dccc index d184516..6ebbce1 100644 --- a/src/main/generated/.cache/db22f983ad9bf2eee19adade9469a1fa0cd0dccc +++ b/src/main/generated/.cache/db22f983ad9bf2eee19adade9469a1fa0cd0dccc @@ -1,4 +1,4 @@ -// 1.20.2 2023-11-18T14:08:12.2729572 All That Matters/allthatmatters +// 1.20.2 2023-11-18T14:15:16.43884 All That Matters/allthatmatters 30f27ba590246e575f59f5cb66c03477dc8cc8de data\allthatmatters\worldgen\configured_feature\ore_ruby.json 0da71feddc9be599dd4bcd66c7244dee4a84c269 data\allthatmatters\worldgen\configured_feature\ore_nether_copper.json b74a342ad43adb06b8e2cdf2fc59fa4911133aa3 data\allthatmatters\worldgen\configured_feature\ore_nether_citrine.json @@ -23,8 +23,8 @@ bf323287250b8ae2cf97105275a4feea64b1a1db data\allthatmatters\worldgen\placed_fea 43c88d7eb6f47048a05870dd226a02ac29ea5efd data\allthatmatters\worldgen\placed_feature\ore_nether_redstone_placed.json 4e87c2f33de15818108776683a433290cc1541b3 data\allthatmatters\worldgen\configured_feature\ore_nether_diamond.json 7df4b5444a2dfa2775368bf75e4e37a5f061f993 data\allthatmatters\worldgen\placed_feature\ore_end_citrine_placed.json -2266bdcf2e39f4a6c5e2f44e9ff9e9ca92c55a39 data\allthatmatters\worldgen\configured_feature\ore_citrine.json 4e87c2f33de15818108776683a433290cc1541b3 data\allthatmatters\worldgen\configured_feature\ore_nether_sapphire.json +2266bdcf2e39f4a6c5e2f44e9ff9e9ca92c55a39 data\allthatmatters\worldgen\configured_feature\ore_citrine.json a62666a6b3f37932b0a559bd064195cb2825fac4 data\allthatmatters\worldgen\configured_feature\ore_end_ruby.json 0da71feddc9be599dd4bcd66c7244dee4a84c269 data\allthatmatters\worldgen\configured_feature\ore_nether_lapis.json b8d97cacc078dc905d3cef712305e679b667d6a4 data\allthatmatters\worldgen\placed_feature\ore_nether_iron_placed.json diff --git a/src/main/generated/.cache/f061f22d017d34e178f27b13e358f03033a7bebb b/src/main/generated/.cache/f061f22d017d34e178f27b13e358f03033a7bebb index 05e350e..e2a2d4c 100644 --- a/src/main/generated/.cache/f061f22d017d34e178f27b13e358f03033a7bebb +++ b/src/main/generated/.cache/f061f22d017d34e178f27b13e358f03033a7bebb @@ -1,4 +1,4 @@ -// 1.20.2 2023-11-18T14:08:12.2579625 All That Matters/Recipes +// 1.20.2 2023-11-18T14:15:16.4248503 All That Matters/Recipes f0e134e54e902372ddec9fc749c8937d08d424cc data\allthatmatters\recipes\enderite_shulker_pinkshaped.json be6d5410d3c4e24a47e69b9d1755c749d2ecb717 data\allthatmatters\recipes\enderite_shulker_light_grayshapeless.json 50e770715c18b7eef9739df81cb97f75d2e25918 data\allthatmatters\recipes\enderite_shulker_purpleshaped.json @@ -36,7 +36,7 @@ ab9840e309e350a108d5b78b70cf0cf151654a16 data\allthatmatters\advancements\recipe d8f442a9d34b9d68f8f2668b1284681776c98f9d data\allthatmatters\advancements\recipes\combat\armor_ruby_leggings.json 483d4f691015bdf19d6925c53bc8426d362a22e4 data\allthatmatters\advancements\recipes\combat\armor_sapphire_helmet.json f83f050e3b4060c3adea0d183fb2c16d700e180a data\allthatmatters\recipes\armor_amethyst_helmet.json -07fc5d937967f235caeefc952431231c9b106bb6 data\allthatmatters\recipes\tool_player_teleport.json +df7c01613357fddb0b5b189478adde056d837c71 data\allthatmatters\recipes\tool_player_teleport.json 7e702f859b2e7995ed4c1d89ecaf182cc414aec7 data\allthatmatters\advancements\recipes\misc\enderite_shulker_light_blueshapeless.json bdd4e9c84b0bcbd5ab575bb5857d9af351964b99 data\allthatmatters\advancements\recipes\tools\tool_sapphire_hammer.json dfdcd3a50052f71796f7ba79a1055e1fe89d2a35 data\allthatmatters\advancements\recipes\misc\enderite_shulker_blueshapeless.json @@ -219,7 +219,7 @@ b1b405e828eb2f07f4041ba5654735f659a63f33 data\allthatmatters\recipes\tool_citrin 38215430123f3f0f8ae2c2061922299c8ec25f02 data\allthatmatters\recipes\enderite_shulker_grayshaped.json 1965cbaad3dbd53aa797e68486071e50afbc990e data\allthatmatters\recipes\tool_enderite_shovel.json 80cba5526c57c3ccac4b05280fcb68da01bf5b1f data\allthatmatters\advancements\recipes\combat\armor_emerald_leggings.json -4a3840142ff1f1e8ceaa5aa5afd056f3bde4fcf7 data\allthatmatters\advancements\recipes\misc\tool_player_teleport.json +23387099e476220409398cf732c05228f342c893 data\allthatmatters\advancements\recipes\misc\tool_player_teleport.json 11a273ccc06f9d6c774b7c61b38f18a74bfe4b32 data\allthatmatters\advancements\recipes\tools\tool_citrine_axe.json fabace0598b198d09ffe377beefd1906629636dc data\allthatmatters\recipes\tool_stone_hammer.json bd33c4441eb201db2403538d4aa79981f082fee4 data\allthatmatters\recipes\tool_citrine_sword.json diff --git a/src/main/generated/data/allthatmatters/advancements/recipes/misc/tool_player_teleport.json b/src/main/generated/data/allthatmatters/advancements/recipes/misc/tool_player_teleport.json index d4b9bb1..562dd63 100644 --- a/src/main/generated/data/allthatmatters/advancements/recipes/misc/tool_player_teleport.json +++ b/src/main/generated/data/allthatmatters/advancements/recipes/misc/tool_player_teleport.json @@ -25,6 +25,18 @@ }, "trigger": "minecraft:inventory_changed" }, + "has_reinforced_plate_diamond": { + "conditions": { + "items": [ + { + "items": [ + "allthatmatters:reinforced_plate_diamond" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, "has_reinforced_plate_gold": { "conditions": { "items": [ @@ -49,7 +61,8 @@ "has_the_recipe", "has_compass", "has_ender_eye", - "has_reinforced_plate_gold" + "has_reinforced_plate_gold", + "has_reinforced_plate_diamond" ] ], "rewards": { diff --git a/src/main/generated/data/allthatmatters/recipes/tool_player_teleport.json b/src/main/generated/data/allthatmatters/recipes/tool_player_teleport.json index 482c8d7..df04af0 100644 --- a/src/main/generated/data/allthatmatters/recipes/tool_player_teleport.json +++ b/src/main/generated/data/allthatmatters/recipes/tool_player_teleport.json @@ -5,6 +5,9 @@ "C": { "item": "minecraft:compass" }, + "D": { + "item": "allthatmatters:reinforced_plate_diamond" + }, "E": { "item": "minecraft:ender_eye" }, @@ -17,7 +20,7 @@ }, "pattern": [ "PEP", - "GCG", + "DCD", "GGG" ], "result": { diff --git a/src/main/java/jiraiyah/allthatmatters/block/entity/EnderiteShulkerBlockEntity.java b/src/main/java/jiraiyah/allthatmatters/block/entity/EnderiteShulkerBlockEntity.java index 4b195f5..f413101 100644 --- a/src/main/java/jiraiyah/allthatmatters/block/entity/EnderiteShulkerBlockEntity.java +++ b/src/main/java/jiraiyah/allthatmatters/block/entity/EnderiteShulkerBlockEntity.java @@ -1,13 +1,31 @@ package jiraiyah.allthatmatters.block.entity; import jiraiyah.allthatmatters.block.ModBlockEntities; +import jiraiyah.allthatmatters.block.custom.EnderiteShulkerBoxBlock; +import jiraiyah.allthatmatters.utils.ModTags; +import jiraiyah.allthatmatters.utils.fluid.FluidStack; +import net.fabricmc.fabric.api.transfer.v1.context.ContainerItemContext; +import net.fabricmc.fabric.api.transfer.v1.fluid.FluidConstants; +import net.fabricmc.fabric.api.transfer.v1.fluid.FluidStorage; +import net.fabricmc.fabric.api.transfer.v1.fluid.FluidVariant; +import net.fabricmc.fabric.api.transfer.v1.fluid.FluidVariantAttributes; +import net.fabricmc.fabric.api.transfer.v1.storage.Storage; +import net.fabricmc.fabric.api.transfer.v1.storage.StorageView; +import net.fabricmc.fabric.api.transfer.v1.storage.base.SingleVariantStorage; +import net.fabricmc.fabric.api.transfer.v1.transaction.Transaction; import net.minecraft.block.BlockState; import net.minecraft.block.entity.BlockEntityType; import net.minecraft.block.entity.ShulkerBoxBlockEntity; import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.fluid.Fluids; +import net.minecraft.item.Item; import net.minecraft.item.ItemStack; +import net.minecraft.item.Items; import net.minecraft.nbt.NbtCompound; import net.minecraft.screen.ScreenHandler; +import net.minecraft.sound.SoundCategory; +import net.minecraft.sound.SoundEvent; +import net.minecraft.sound.SoundEvents; import net.minecraft.text.Text; import net.minecraft.util.DyeColor; import net.minecraft.util.collection.DefaultedList; @@ -18,12 +36,87 @@ import java.util.stream.IntStream; +import static jiraiyah.allthatmatters.AllThatMatters.LOGGER; + public class EnderiteShulkerBlockEntity extends ShulkerBoxBlockEntity { private final int[] AVAILABLE_SLOTS; - public static int INVENTORY_SLOT_SIZE = 108; + public static int INVENTORY_SLOT_SIZE = 112; + + public static int LEFT_FLUID_INPUT_SLOT = 108; + public static int LEFT_FLUID_OUTPUT_SLOT = 109; + public static int RIGHT_FLUID_INPUT_SLOT = 110; + public static int RIGHT_FLUID_OUTPUT_SLOT = 111; + + // NEW SECTION + public static long FLUID_CAPACITY = FluidStack.convertDropletsToMb(FluidConstants.BLOCK) * 100; // 20k mb + + public final SingleVariantStorage leftFluidStorage = new SingleVariantStorage() + { + @Override + protected FluidVariant getBlankVariant() + { + return FluidVariant.blank(); + } + + @Override + protected long getCapacity(FluidVariant variant) + { + return FLUID_CAPACITY; + } + + @Override + protected void onFinalCommit() + { + markDirty(); + + if (!world.isClient()) + { + //sendFluidPacket(); + } + } + }; + + public final SingleVariantStorage rightFluidStorage = new SingleVariantStorage() + { + @Override + protected FluidVariant getBlankVariant() + { + return FluidVariant.blank(); + } + + @Override + protected long getCapacity(FluidVariant variant) + { + return FLUID_CAPACITY; + } + + @Override + protected void onFinalCommit() + { + markDirty(); + + if (!world.isClient()) + { + //sendFluidPacket(); + } + } + }; + + + + + + + + + + // + + + //region SHULKER public EnderiteShulkerBlockEntity(@Nullable DyeColor color, BlockPos pos, BlockState state) { super(color, pos, state); @@ -46,12 +139,20 @@ public BlockEntityType getType() public void readNbt(NbtCompound tag) { super.readNbt(tag); + leftFluidStorage.variant = FluidVariant.fromNbt((NbtCompound) tag.get("atm.shulker_box.left_fluid_variant")); + leftFluidStorage.amount = tag.getLong("atm.shulker_box.left_fluid_level"); + rightFluidStorage.variant = FluidVariant.fromNbt((NbtCompound) tag.get("atm.shulker_box.right_fluid_variant")); + rightFluidStorage.amount = tag.getLong("atm.shulker_box.right_fluid_level"); } @Override public void writeNbt(NbtCompound tag) { super.writeNbt(tag); + tag.put("atm.shulker_box.left_fluid_variant", leftFluidStorage.variant.toNbt()); + tag.putLong("atm.shulker_box.left_fluid_level", leftFluidStorage.amount); + tag.put("atm.shulker_box.right_fluid_variant", rightFluidStorage.variant.toNbt()); + tag.putLong("atm.shulker_box.right_fluid_level", rightFluidStorage.amount); } @Override @@ -75,5 +176,139 @@ protected Text getContainerName() public void customTick(World world, BlockPos pos, BlockState state) { ShulkerBoxBlockEntity.tick(world, pos, state, this); + handleFluidTick(world, pos, state); + } + //endregion + + + @Override + public boolean canInsert(int slot, ItemStack stack, @Nullable Direction side) + { + Direction localDir = this.getWorld().getBlockState(this.pos).get(EnderiteShulkerBoxBlock.FACING); + + if (side == Direction.UP) + return slot != LEFT_FLUID_INPUT_SLOT && slot != LEFT_FLUID_OUTPUT_SLOT && + slot != RIGHT_FLUID_INPUT_SLOT && slot != RIGHT_FLUID_OUTPUT_SLOT; + if (side == Direction.DOWN) + return false; + + return switch (localDir) + { + default -> (side.getOpposite() == Direction.NORTH && slot != LEFT_FLUID_INPUT_SLOT && slot != LEFT_FLUID_OUTPUT_SLOT && + slot != RIGHT_FLUID_INPUT_SLOT && slot != RIGHT_FLUID_OUTPUT_SLOT) || // TOP + (side.getOpposite() == Direction.EAST && slot == RIGHT_FLUID_INPUT_SLOT && StackAcceptableInSlot(stack)) || //RIGHT + (side.getOpposite() == Direction.WEST && slot == LEFT_FLUID_INPUT_SLOT && StackAcceptableInSlot(stack)); // LEFT + + case EAST -> (side.rotateYClockwise() == Direction.NORTH && slot != LEFT_FLUID_INPUT_SLOT && slot != LEFT_FLUID_OUTPUT_SLOT && + slot != RIGHT_FLUID_INPUT_SLOT && slot != RIGHT_FLUID_OUTPUT_SLOT) || // TOP + (side.rotateYClockwise() == Direction.EAST && slot == RIGHT_FLUID_INPUT_SLOT && StackAcceptableInSlot(stack)) || //RIGHT + (side.rotateYClockwise() == Direction.WEST && slot == LEFT_FLUID_INPUT_SLOT && StackAcceptableInSlot(stack)); // LEFT + + case SOUTH -> (side == Direction.NORTH && slot != LEFT_FLUID_INPUT_SLOT && slot != LEFT_FLUID_OUTPUT_SLOT && + slot != RIGHT_FLUID_INPUT_SLOT && slot != RIGHT_FLUID_OUTPUT_SLOT) || // TOP + (side == Direction.EAST && slot == RIGHT_FLUID_INPUT_SLOT && StackAcceptableInSlot(stack)) || //RIGHT + (side == Direction.WEST && slot == LEFT_FLUID_INPUT_SLOT && StackAcceptableInSlot(stack)); // LEFT + + case WEST -> (side.rotateYCounterclockwise() == Direction.NORTH && slot != LEFT_FLUID_INPUT_SLOT && slot != LEFT_FLUID_OUTPUT_SLOT && + slot != RIGHT_FLUID_INPUT_SLOT && slot != RIGHT_FLUID_OUTPUT_SLOT) || // TOP + (side.rotateYCounterclockwise() == Direction.EAST && slot == RIGHT_FLUID_INPUT_SLOT && StackAcceptableInSlot(stack)) || //RIGHT + (side.rotateYCounterclockwise() == Direction.WEST && slot == LEFT_FLUID_INPUT_SLOT && StackAcceptableInSlot(stack)); // LEFT + }; + } + + @Override + public boolean canExtract(int slot, ItemStack stack, Direction side) + { + Direction localDir = this.getWorld().getBlockState(this.pos).get(EnderiteShulkerBoxBlock.FACING); + if (side == Direction.DOWN) + return slot != LEFT_FLUID_INPUT_SLOT || slot != RIGHT_FLUID_INPUT_SLOT; + return switch (localDir) + { + default -> side.getOpposite() == Direction.SOUTH && (slot != LEFT_FLUID_INPUT_SLOT || slot != RIGHT_FLUID_INPUT_SLOT); + case EAST -> side.rotateYClockwise() == Direction.SOUTH && (slot != LEFT_FLUID_INPUT_SLOT || slot != RIGHT_FLUID_INPUT_SLOT); + case SOUTH -> side == Direction.SOUTH && (slot != LEFT_FLUID_INPUT_SLOT || slot != RIGHT_FLUID_INPUT_SLOT); + case WEST -> side.rotateYCounterclockwise() == Direction.SOUTH && (slot != LEFT_FLUID_INPUT_SLOT || slot != RIGHT_FLUID_INPUT_SLOT); + }; + } + + public void setFluidLevel(FluidVariant leftFluidVariant, long leftFluidLevel, FluidVariant rightFluidVariant, long rightFluidLevel) + { + this.leftFluidStorage.variant = leftFluidVariant; + this.leftFluidStorage.amount = leftFluidLevel; + this.rightFluidStorage.variant = rightFluidVariant; + this.rightFluidStorage.amount = rightFluidLevel; + } + + private boolean StackAcceptableInSlot(ItemStack stack) + { + return stack.isOf(Items.BUCKET) || stack.isIn(ModTags.Items.FLUID_BUCKETS); + } + + private void handleFluidTick(World world, BlockPos pos, BlockState state) + { + handleTank(world, pos, state, this.leftFluidStorage, LEFT_FLUID_INPUT_SLOT, LEFT_FLUID_OUTPUT_SLOT); + handleTank(world, pos, state, this.rightFluidStorage, RIGHT_FLUID_INPUT_SLOT, RIGHT_FLUID_OUTPUT_SLOT); + } + + private void handleTank(World world, BlockPos pos, BlockState state, SingleVariantStorage tank, int inputSlot, int outputSlot) + { + Storage slotStorage = ContainerItemContext.withConstant(getStack(inputSlot)).find(FluidStorage.ITEM); + if(slotStorage == null) + return; + Item slotItem = getStack(inputSlot).getItem(); + try + { + if(!moveWithSound(world, pos, tank, slotStorage, true, slotItem)) + moveWithSound(world, pos, slotStorage, tank, false, slotItem); + } + catch (Exception e) + { + LOGGER.info(e.getMessage()); + } + } + + private static boolean moveWithSound(World world, BlockPos pos, Storage from, Storage to, boolean fill, Item handItem) + { + for (StorageView view : from) + { + if (view.isResourceBlank()) + continue; + + FluidVariant resource = view.getResource(); + long maxExtracted; + + // check how much can be extracted + try (Transaction extractionTestTransaction = Transaction.openOuter()) + { + maxExtracted = view.extract(resource, Long.MAX_VALUE, extractionTestTransaction); + extractionTestTransaction.abort(); + } + + try (Transaction transferTransaction = Transaction.openOuter()) + { + // check how much can be inserted + long accepted = to.insert(resource, maxExtracted, transferTransaction); + + // extract it, or rollback if the amounts don't match + if (accepted > 0 && view.extract(resource, accepted, transferTransaction) == accepted) + { + transferTransaction.commit(); + + SoundEvent sound = fill ? FluidVariantAttributes.getFillSound(resource) : FluidVariantAttributes.getEmptySound(resource); + + if (resource.isOf(Fluids.WATER)) + { + if (fill && handItem == Items.GLASS_BOTTLE) sound = SoundEvents.ITEM_BOTTLE_FILL; + if (!fill && handItem == Items.POTION) sound = SoundEvents.ITEM_BOTTLE_EMPTY; + } + + world.playSound(pos.getX(), pos.getY(), pos.getZ(), sound, SoundCategory.BLOCKS, 1, 1, true); + + return true; + } + } + } + + return false; } } \ No newline at end of file diff --git a/src/main/java/jiraiyah/allthatmatters/datagen/ModRecipeProvider.java b/src/main/java/jiraiyah/allthatmatters/datagen/ModRecipeProvider.java index a357d62..c669f9b 100644 --- a/src/main/java/jiraiyah/allthatmatters/datagen/ModRecipeProvider.java +++ b/src/main/java/jiraiyah/allthatmatters/datagen/ModRecipeProvider.java @@ -1114,15 +1114,17 @@ public void generate(RecipeExporter exporter) ShapedRecipeJsonBuilder.create(RecipeCategory.MISC, ModItems.PLAYER_TELEPORT, 1) .pattern("PEP") - .pattern("GCG") + .pattern("DCD") .pattern("GGG") .input('G', ModItems.REINFORCED_PLATE_GOLD) + .input('D', ModItems.REINFORCED_PLATE_DIAMOND) .input('C', Items.COMPASS) .input('P', Items.ENDER_PEARL) .input('E', Items.ENDER_EYE) .criterion(hasItem(Items.COMPASS), conditionsFromItem(Items.COMPASS)) .criterion(hasItem(Items.ENDER_EYE), conditionsFromItem(Items.ENDER_EYE)) .criterion(hasItem(ModItems.REINFORCED_PLATE_GOLD), conditionsFromItem(ModItems.REINFORCED_PLATE_GOLD)) + .criterion(hasItem(ModItems.REINFORCED_PLATE_DIAMOND), conditionsFromItem(ModItems.REINFORCED_PLATE_DIAMOND)) .offerTo(exporter, new Identifier(getRecipeName(ModItems.PLAYER_TELEPORT))); } } \ No newline at end of file