diff --git a/src/generated/resources/.cache/3b3e690e31dfaa5a9fbd882cfd19f4a91b4da31c b/src/generated/resources/.cache/3b3e690e31dfaa5a9fbd882cfd19f4a91b4da31c index 8c80053..518b066 100644 --- a/src/generated/resources/.cache/3b3e690e31dfaa5a9fbd882cfd19f4a91b4da31c +++ b/src/generated/resources/.cache/3b3e690e31dfaa5a9fbd882cfd19f4a91b4da31c @@ -1,5 +1,5 @@ -// 1.21.1 2026-05-24T05:53:10.9684448 Tags for minecraft:item mod id lemonmates -c3b5fb89d505d662d95dfee5f9199f6ea85224c5 data/create/tags/item/upright_on_belt.json +// 1.21.1 2026-05-29T19:22:40.1888447 Tags for minecraft:item mod id lemonmates +d231b55caa33415899617007b0dbfbc428a9495d data/create/tags/item/upright_on_belt.json 28511dee5e7f0634f2aece3397d9ffd9274aefed data/c/tags/item/buckets.json 0c38161e712608c74a46b6afa4e53a0a4e1ee80f data/c/tags/item/buckets/plastic.json 82c82b1bb47c267ab2926e6ce0705705f1ae5c7e data/c/tags/item/drinks.json diff --git a/src/generated/resources/.cache/59eb3dbb5f86130e09b3c62d89b9525ee01cf52d b/src/generated/resources/.cache/59eb3dbb5f86130e09b3c62d89b9525ee01cf52d index 44fdd9f..5782516 100644 --- a/src/generated/resources/.cache/59eb3dbb5f86130e09b3c62d89b9525ee01cf52d +++ b/src/generated/resources/.cache/59eb3dbb5f86130e09b3c62d89b9525ee01cf52d @@ -1,4 +1,4 @@ -// 1.21.1 2026-05-28T23:38:51.8802081 Loot Tables +// 1.21.1 2026-05-29T19:22:40.1918185 Loot Tables 7e6629cf425f2397f87b1a6c439f701aa8b4fd04 data/lemonmates/loot_table/blocks/citron_button.json 5ecfcd3e41895ce2db80738f891e13845547f945 data/lemonmates/loot_table/blocks/citron_crate.json 1126754d8c95732b55490a43313d49624d070270 data/lemonmates/loot_table/blocks/citron_door.json @@ -18,6 +18,8 @@ be56f3f3d40997839e2f5cafbdd671ad138bff15 data/lemonmates/loot_table/blocks/citro d4e59033f364cc2b689d470b73733bcad5a931a8 data/lemonmates/loot_table/blocks/citron_wall_sign.json 4098d61de0b4bf5314926c5a4b04f366f2f7f8d2 data/lemonmates/loot_table/blocks/citron_wood.json 52b02e8a86046b0714d06d30e507355d0db80338 data/lemonmates/loot_table/blocks/lemonade_glass.json +6cec54e70429e90771526e7e9654ddf9c135eced data/lemonmates/loot_table/blocks/lemonade_glass_decorated.json +aed3ef01a3de02d9c3c734a23806caf4d1878430 data/lemonmates/loot_table/blocks/lemonade_jug_terracotta.json f904d74cc3fafb07d9e23051af019f5edaebaeae data/lemonmates/loot_table/blocks/orange_button.json 8c2027370536a83e1ebc819a9b0d034c20326f33 data/lemonmates/loot_table/blocks/orange_crate.json 48e8f83773044b736f7636152a6aba42210a525e data/lemonmates/loot_table/blocks/orange_door.json @@ -42,4 +44,3 @@ f449a514381baf54e4515a0ca8f4a304d9c2735d data/lemonmates/loot_table/blocks/strip 52a1b6d1cba20cd6b102a26193248df56eb37c52 data/lemonmates/loot_table/blocks/stripped_citron_wood.json 6119e198844f5713fd685fdd8ade49f8c00a7733 data/lemonmates/loot_table/blocks/stripped_orange_log.json 7dfcf28cad578249cb297340014d8229e44ee1c1 data/lemonmates/loot_table/blocks/stripped_orange_wood.json -0c4ae2b05dbe46f34cfe03c0528c2ce346452121 data/lemonmates/loot_table/blocks/terracotta_lemonade_jug.json diff --git a/src/generated/resources/.cache/9fb1092f32d4fcbf9e061ffd718d4ec689c6c95e b/src/generated/resources/.cache/9fb1092f32d4fcbf9e061ffd718d4ec689c6c95e index 6f56d16..d8db6d3 100644 --- a/src/generated/resources/.cache/9fb1092f32d4fcbf9e061ffd718d4ec689c6c95e +++ b/src/generated/resources/.cache/9fb1092f32d4fcbf9e061ffd718d4ec689c6c95e @@ -1,4 +1,4 @@ -// 1.21.1 2026-05-28T23:38:51.8963216 Recipes +// 1.21.1 2026-05-29T19:22:40.1918185 Recipes facd248ef881f97de28f9e5e269db79dc09c7fb3 data/lemonmates/advancement/recipes/building_blocks/citron.json 1d7c61d7aa66adee3bb6a9752e28e5b3481ff485 data/lemonmates/advancement/recipes/building_blocks/citron_crate.json 8c180e50e9625c1985dfc40e7be05f0293d92fd2 data/lemonmates/advancement/recipes/building_blocks/citron_planks.json @@ -28,12 +28,12 @@ ed7cc37c657142fcfb7a9f35e05ee108279cba8f data/lemonmates/advancement/recipes/mis 3f7b9d8f197674a62374728056c3fbb0390897b6 data/lemonmates/advancement/recipes/misc/citron_slice.json 8a5ff5088292e7db5904b0488942fcdeb4f3d8b7 data/lemonmates/advancement/recipes/misc/label_empty.json 2ce38d1b0a3191d6ccf0b53638f457b5a8c0f517 data/lemonmates/advancement/recipes/misc/lemonade_glass.json +07794e11bca6b3f5a4541c23ce70e184079ba7f2 data/lemonmates/advancement/recipes/misc/lemonade_jug_terracotta.json 7090289653e8095ab022c12bc87396441acb7b00 data/lemonmates/advancement/recipes/misc/orange_from_crate.json 79dda7e25b11b57791df4af5f50cd05c55a68eb6 data/lemonmates/advancement/recipes/misc/orange_slice.json 02a69065c1431db74b184acb80e738e17de6d632 data/lemonmates/advancement/recipes/misc/preform.json 083334ac302ce3a0a69dc54ede3b36bd5a284ae1 data/lemonmates/advancement/recipes/misc/preform_mold.json e9a2fe0611d96dcfaafadbb8ada78fd10586215a data/lemonmates/advancement/recipes/misc/raspberry.json -28dec962d44773cfc954691c71ed68ac008cdcbe data/lemonmates/advancement/recipes/misc/terracotta_lemonade_jug.json 8705e703b642f9226f38b7eea60d820b32112c90 data/lemonmates/advancement/recipes/redstone/citron_button.json 88f5d881de84c5dd384ce0c3292e009440b74ab6 data/lemonmates/advancement/recipes/redstone/citron_door.json b9b463ee4a3fea1c84dc3e78179dd0d0e6667473 data/lemonmates/advancement/recipes/redstone/citron_fence_gate.json @@ -71,7 +71,8 @@ a2e9563dd03da6f91007bce9d7f5ca443a86d2be data/lemonmates/recipe/citron_slice.jso 7d7e2f8febe477605eddf1d6883a81ec8e8e7f9e data/lemonmates/recipe/citron_trapdoor.json 8a180511c751f3e23544d072d880c7d0cc60ccec data/lemonmates/recipe/citron_wood.json f37e26b1d661dbf1d288bc4fa2a3d2590aa307d7 data/lemonmates/recipe/label_empty.json -6eb50907c1d53ee5caf1c6799e332f998b5d8b2c data/lemonmates/recipe/lemonade_glass.json +972a1051a558fd53ff3e93e533239e7822f32984 data/lemonmates/recipe/lemonade_glass.json +95577366693e19041ea153ada391de14ccdca07c data/lemonmates/recipe/lemonade_jug_terracotta.json fa5c3be35146baac35c21ac10ea3fce7aa431d80 data/lemonmates/recipe/orange.json 4fee22ae48a9903db8201e411fad82b780879c23 data/lemonmates/recipe/orange_boat.json 446643ff87c3cd0eea22285bb723163ae970c0d4 data/lemonmates/recipe/orange_button.json @@ -96,4 +97,3 @@ de2f1cb106b62ea49608bebd5f9a1671727c86d2 data/lemonmates/recipe/preform_mold.jso 1445516a5fab144d5ab7dfed1ad3de0efa970a3c data/lemonmates/recipe/raspberry_crate.json 145218accb1ca38a0a5f92fa8c36fec665f9fb60 data/lemonmates/recipe/stripped_citron_wood.json 538d2929b9a38901bd7becd5ad38af94afe42e5a data/lemonmates/recipe/stripped_orange_wood.json -39118b7a981c91df62b5dfe84a0878bce90b3851 data/lemonmates/recipe/terracotta_lemonade_jug.json diff --git a/src/generated/resources/data/create/tags/item/upright_on_belt.json b/src/generated/resources/data/create/tags/item/upright_on_belt.json index 17ce063..c0755d0 100644 --- a/src/generated/resources/data/create/tags/item/upright_on_belt.json +++ b/src/generated/resources/data/create/tags/item/upright_on_belt.json @@ -24,6 +24,8 @@ "lemonmates:straw_agender", "lemonmates:straw_bi", "lemonmates:straw_pan", + "lemonmates:straw_german", + "lemonmates:straw_omnisexual", "lemonmates:drink_umbrella_1", "lemonmates:drink_umbrella_2", "lemonmates:drink_umbrella_3", diff --git a/src/generated/resources/data/lemonmates/advancement/recipes/misc/terracotta_lemonade_jug.json b/src/generated/resources/data/lemonmates/advancement/recipes/misc/lemonade_jug_terracotta.json similarity index 83% rename from src/generated/resources/data/lemonmates/advancement/recipes/misc/terracotta_lemonade_jug.json rename to src/generated/resources/data/lemonmates/advancement/recipes/misc/lemonade_jug_terracotta.json index 5f3dc03..9698b40 100644 --- a/src/generated/resources/data/lemonmates/advancement/recipes/misc/terracotta_lemonade_jug.json +++ b/src/generated/resources/data/lemonmates/advancement/recipes/misc/lemonade_jug_terracotta.json @@ -13,7 +13,7 @@ }, "has_the_recipe": { "conditions": { - "recipe": "lemonmates:terracotta_lemonade_jug" + "recipe": "lemonmates:lemonade_jug_terracotta" }, "trigger": "minecraft:recipe_unlocked" } @@ -26,7 +26,7 @@ ], "rewards": { "recipes": [ - "lemonmates:terracotta_lemonade_jug" + "lemonmates:lemonade_jug_terracotta" ] } } \ No newline at end of file diff --git a/src/generated/resources/data/lemonmates/loot_table/blocks/lemonade_glass.json b/src/generated/resources/data/lemonmates/loot_table/blocks/lemonade_glass.json new file mode 100644 index 0000000..9546934 --- /dev/null +++ b/src/generated/resources/data/lemonmates/loot_table/blocks/lemonade_glass.json @@ -0,0 +1,4 @@ +{ + "type": "minecraft:block", + "random_sequence": "lemonmates:blocks/lemonade_glass" +} \ No newline at end of file diff --git a/src/generated/resources/data/lemonmates/loot_table/blocks/lemonade_glass_decorated.json b/src/generated/resources/data/lemonmates/loot_table/blocks/lemonade_glass_decorated.json new file mode 100644 index 0000000..8dd6c16 --- /dev/null +++ b/src/generated/resources/data/lemonmates/loot_table/blocks/lemonade_glass_decorated.json @@ -0,0 +1,4 @@ +{ + "type": "minecraft:block", + "random_sequence": "lemonmates:blocks/lemonade_glass_decorated" +} \ No newline at end of file diff --git a/src/generated/resources/data/lemonmates/loot_table/blocks/lemonade_jug_terracotta.json b/src/generated/resources/data/lemonmates/loot_table/blocks/lemonade_jug_terracotta.json new file mode 100644 index 0000000..388292b --- /dev/null +++ b/src/generated/resources/data/lemonmates/loot_table/blocks/lemonade_jug_terracotta.json @@ -0,0 +1,4 @@ +{ + "type": "minecraft:block", + "random_sequence": "lemonmates:blocks/lemonade_jug_terracotta" +} \ No newline at end of file diff --git a/src/generated/resources/data/lemonmates/recipe/terracotta_lemonade_jug.json b/src/generated/resources/data/lemonmates/recipe/lemonade_jug_terracotta.json similarity index 81% rename from src/generated/resources/data/lemonmates/recipe/terracotta_lemonade_jug.json rename to src/generated/resources/data/lemonmates/recipe/lemonade_jug_terracotta.json index fa8b5a5..30de5d8 100644 --- a/src/generated/resources/data/lemonmates/recipe/terracotta_lemonade_jug.json +++ b/src/generated/resources/data/lemonmates/recipe/lemonade_jug_terracotta.json @@ -13,6 +13,6 @@ ], "result": { "count": 1, - "id": "lemonmates:terracotta_lemonade_jug" + "id": "lemonmates:lemonade_jug_terracotta" } } \ No newline at end of file diff --git a/src/main/java/net/doppelr/lemonmates/AllCreativeModeTabs.java b/src/main/java/net/doppelr/lemonmates/AllCreativeModeTabs.java index 62d3f59..67e59d1 100644 --- a/src/main/java/net/doppelr/lemonmates/AllCreativeModeTabs.java +++ b/src/main/java/net/doppelr/lemonmates/AllCreativeModeTabs.java @@ -1,6 +1,8 @@ package net.doppelr.lemonmates; import net.doppelr.lemonmates.block.ModBlocks; +import net.doppelr.lemonmates.block.properties.StrawsVariants; +import net.doppelr.lemonmates.block.properties.UmbrellaVariants; import net.doppelr.lemonmates.fluid.ModFluids; import net.doppelr.lemonmates.item.ModItems; import net.minecraft.core.registries.Registries; @@ -40,6 +42,7 @@ private static ItemStack lemonadeJugStack(ItemStack stack) { // Misc output.accept(ModBlocks.LEMONADE_GLASS); + output.accept(lemonadeJugStack(ModItems.LEMONADE_JUG_TERRACOTTA.toStack())); // Finished Lemonades output.accept(ModItems.CITRON_LEMONADE_BOTTLE); @@ -172,27 +175,15 @@ private static ItemStack lemonadeJugStack(ItemStack stack) { output.accept(ModItems.ICE_CUBES); // Straws - output.accept(ModItems.STRAW_BASIC); - output.accept(ModItems.STRAW_RAINBOW); - output.accept(ModItems.STRAW_TRANS); - output.accept(ModItems.STRAW_NONBINARY); - output.accept(ModItems.STRAW_LESBIAN); - output.accept(ModItems.STRAW_GAY); - output.accept(ModItems.STRAW_GENDERFLUID); - output.accept(ModItems.STRAW_ACE); - output.accept(ModItems.STRAW_ARO); - output.accept(ModItems.STRAW_AROACE); - output.accept(ModItems.STRAW_AGENDER); - output.accept(ModItems.STRAW_BI); - output.accept(ModItems.STRAW_PAN); - output.accept(ModItems.STRAW_GERMAN); - output.accept(ModItems.STRAW_OMNISEXUAL); + for (StrawsVariants variants : StrawsVariants.values()) + if (variants.getValue() != 0) + output.accept(variants.getRegisteredItem()); + // Umbrellas - output.accept(ModItems.DRINK_UMBRELLA_1); - output.accept(ModItems.DRINK_UMBRELLA_2); - output.accept(ModItems.DRINK_UMBRELLA_3); - output.accept(ModItems.DRINK_UMBRELLA_4); + for (UmbrellaVariants variants : UmbrellaVariants.values()) + if (variants.getValue() != 0) + output.accept(variants.getRegisteredItem()); // Fruit output.accept(ModItems.CITRON_SLICE); diff --git a/src/main/java/net/doppelr/lemonmates/LemonMates.java b/src/main/java/net/doppelr/lemonmates/LemonMates.java index 110f1a6..2254472 100644 --- a/src/main/java/net/doppelr/lemonmates/LemonMates.java +++ b/src/main/java/net/doppelr/lemonmates/LemonMates.java @@ -1,10 +1,6 @@ package net.doppelr.lemonmates; import com.mojang.logging.LogUtils; -import com.simibubi.create.foundation.data.CreateRegistrate; -import com.simibubi.create.foundation.item.ItemDescription; -import com.tterrag.registrate.util.nullness.NonNullSupplier; -import net.createmod.catnip.lang.FontHelper; import net.doppelr.lemonmates.block.ModBlocks; import net.doppelr.lemonmates.block.entity.ModBlockEntities; import net.doppelr.lemonmates.datagen.DataGenerators; @@ -22,6 +18,7 @@ public class LemonMates { public static final String MOD_ID = "lemonmates"; public static final Logger LOGGER = LogUtils.getLogger(); + public LemonMates(IEventBus modEventBus, ModContainer modContainer) { AllCreativeModeTabs.register(modEventBus); AllDataComponents.register(modEventBus); @@ -36,21 +33,8 @@ public LemonMates(IEventBus modEventBus, ModContainer modContainer) { modEventBus.addListener(DataGenerators::gatherData); } - public static final NonNullSupplier REGISTRATE = - NonNullSupplier.lazy(() -> CreateRegistrate.create(MOD_ID)); - - - static { - REGISTRATE.get().setTooltipModifierFactory(item -> new ItemDescription.Modifier(item, FontHelper.Palette.STANDARD_CREATE)); - } - - public static CreateRegistrate registrate() { - return REGISTRATE.get(); - } - public static ResourceLocation rl(String path){ return ResourceLocation.fromNamespaceAndPath(MOD_ID, path); } - } diff --git a/src/main/java/net/doppelr/lemonmates/LemonMatesTooltipUtils.java b/src/main/java/net/doppelr/lemonmates/LemonMatesTooltipUtils.java new file mode 100644 index 0000000..acaf17e --- /dev/null +++ b/src/main/java/net/doppelr/lemonmates/LemonMatesTooltipUtils.java @@ -0,0 +1,103 @@ +package net.doppelr.lemonmates; + +import net.createmod.catnip.lang.FontHelper; +import net.minecraft.ChatFormatting; +import net.minecraft.client.gui.screens.Screen; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.MutableComponent; + +import java.util.List; + +public class LemonMatesTooltipUtils { + + public static void createCustomTooltip(String id, boolean hasConditionalBehaviour, List components) { + createShiftText(components); + if (Screen.hasShiftDown()) { + components.add(empty()); + components.addAll(getBasicSummary(id)); + if (hasConditionalBehaviour) { + createConditionalBehaviourTooltip(id, 1, components); + } + } + } + + public static void createCustomTooltip(String id, boolean hasConditionalBehaviour, List components, Object... args) { + createShiftText(components); + if (Screen.hasShiftDown()) { + components.add(empty()); + components.addAll(getBasicSummary(id)); + if (hasConditionalBehaviour) { + createConditionalBehaviourTooltip(id, 1, components, args); + } + } + } + + public static void createShiftText(List components) { + if (!Screen.hasShiftDown()) + components.add(Component.translatable("create.tooltip.holdForDescription", Component.translatable("create.tooltip.keyShift").withStyle(ChatFormatting.GRAY)).withStyle(ChatFormatting.DARK_GRAY)); + else + components.add(Component.translatable("create.tooltip.holdForDescription", Component.translatable("create.tooltip.keyShift").withStyle(ChatFormatting.WHITE)).withStyle(ChatFormatting.DARK_GRAY)); + } + + public static void add(MutableComponent component, List components) { + add(component, components, true, true, false); + } + + public static void add(MutableComponent component, List components, boolean hasSpaceAbove, boolean hasSpaceBelow, boolean showWithoutShifting) { + if (Screen.hasShiftDown() || showWithoutShifting) { + if (hasSpaceAbove) + components.add(empty()); + components.addAll(createGeneric(component)); + if (hasSpaceBelow) + components.add(empty()); + } + } + + public static List createGeneric(MutableComponent component) { + return textComponentIndentHelper(component, FontHelper.Palette.STANDARD_CREATE, 1); + } + + public static void createAdditionalConditionalBehaviourTooltip(String id, int sequence, List components) { + if (Screen.hasShiftDown()) { + components.addAll(getCondition(id, sequence)); + components.addAll(getBehaviour(id, sequence)); + } + } + + public static void createConditionalBehaviourTooltip(String id, int sequence, List components) { + components.add(empty()); + components.addAll(getCondition(id, sequence)); + components.addAll(getBehaviour(id, sequence)); + } + + public static void createConditionalBehaviourTooltip(String id, int sequence, List components, Object... args) { + components.add(empty()); + components.addAll(getCondition(id, sequence, args)); + components.addAll(getBehaviour(id, sequence)); + } + + public static MutableComponent empty() { + return Component.literal(""); + } + + public static List getBasicSummary(String id) { + return FontHelper.cutTextComponent(Component.translatable(id + ".tooltip.summary"), FontHelper.Palette.STANDARD_CREATE); + } + + public static List getCondition(String id, int sequence) { + return FontHelper.cutTextComponent(Component.translatable(id + ".tooltip.condition" + sequence), FontHelper.Palette.GRAY); + } + + public static List getCondition(String id, int sequence, Object... args) { + return FontHelper.cutTextComponent(Component.translatable(id + ".tooltip.condition" + sequence, args), FontHelper.Palette.GRAY); + } + + public static List getBehaviour(String id, int sequence) { + return textComponentIndentHelper(Component.translatable(id + ".tooltip.behaviour" + sequence), FontHelper.Palette.STANDARD_CREATE, 1); + } + + public static List textComponentIndentHelper(Component component, FontHelper.Palette palette, int indent) { + return FontHelper.cutTextComponent(component, palette.primary(), palette.highlight(), indent); + } + +} diff --git a/src/main/java/net/doppelr/lemonmates/block/ModBlocks.java b/src/main/java/net/doppelr/lemonmates/block/ModBlocks.java index 516526c..175f2af 100644 --- a/src/main/java/net/doppelr/lemonmates/block/ModBlocks.java +++ b/src/main/java/net/doppelr/lemonmates/block/ModBlocks.java @@ -5,6 +5,7 @@ import net.doppelr.lemonmates.AllWoodTypes; import net.doppelr.lemonmates.LemonMates; import net.doppelr.lemonmates.item.ModItems; +import net.doppelr.lemonmates.item.ModJugItem; import net.doppelr.lemonmates.worldgen.tree.ModTreeGrowers; import net.minecraft.client.renderer.RenderType; import net.minecraft.world.item.BlockItem; @@ -122,15 +123,13 @@ public class ModBlocks { .sound(SoundType.GLASS) )); - //public static final DeferredBlock LEMONADE_JUG_TERRACOTTA = registerBlockWithoutBlockItem("lemonade_jug_terracotta", - // () -> new ModJugBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.FLOWER_POT).noOcclusion())); + public static final DeferredBlock LEMONADE_JUG_TERRACOTTA = registerBlockWithoutBlockItem("lemonade_jug_terracotta", + () -> new ModJugBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.FLOWER_POT).noOcclusion())); - public static final BlockEntry LEMONADE_JUG_TERRACOTTA = LemonMates.registrate().block("lemonade_jug_terracotta", Block::new) - .addLayer(() -> RenderType::cutout) - .initialProperties(() -> Blocks.FLOWER_POT) - .properties(BlockBehaviour.Properties::noOcclusion) - .properties((NonNullUnaryOperator) new ModJugBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.FLOWER_POT))) - .simpleItem().register(); +// public static final BlockEntry LEMONADE_JUG_TERRACOTTA = LemonMates.registrate().block("lemonade_jug_terracotta", ModJugBlock::new) +// .addLayer(() -> RenderType::cutout) +// .initialProperties(() -> Blocks.FLOWER_POT) +// .properties(BlockBehaviour.Properties::noOcclusion).register(); private static DeferredBlock registerBlockWithoutBlockItem(String name, Supplier block) { DeferredBlock toReturn = BLOCKS.register(name, block); diff --git a/src/main/java/net/doppelr/lemonmates/block/ModDrinkingGlassBlock.java b/src/main/java/net/doppelr/lemonmates/block/ModDrinkingGlassBlock.java index 1cc5ffb..3858d51 100644 --- a/src/main/java/net/doppelr/lemonmates/block/ModDrinkingGlassBlock.java +++ b/src/main/java/net/doppelr/lemonmates/block/ModDrinkingGlassBlock.java @@ -23,6 +23,7 @@ import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; import net.minecraft.world.item.TooltipFlag; import net.minecraft.world.item.component.BlockItemStateProperties; import net.minecraft.world.item.context.BlockPlaceContext; @@ -104,6 +105,16 @@ protected InteractionResult useWithoutItem(BlockState state, Level level, BlockP return super.useWithoutItem(state, level, pos, player, hitResult); } + private void getDroppedItem(Item item, BlockPos pos, Player player, Level level) { + this.getDroppedItem(item, pos, level); + level.playSound(player, player.getX(), player.getY(), player.getZ(), SoundEvents.SNOW_GOLEM_SHEAR, SoundSource.BLOCKS, 1.0F, 1.0F); + } + + private void getDroppedItem(Item item, BlockPos pos, Level level) { + ItemStack itemStack = new ItemStack(item, 1); + popResource(level, pos, itemStack); + } + @Override protected ItemInteractionResult useItemOn(ItemStack stack, BlockState state, Level level, BlockPos pos, Player player, InteractionHand hand, BlockHitResult hitResult) { if (stack.getItem() instanceof ModJugItem jugItem && Boolean.TRUE.equals(stack.get(AllDataComponents.CAN_POUR))) { @@ -114,155 +125,94 @@ protected ItemInteractionResult useItemOn(ItemStack stack, BlockState state, Lev newDrinkLevel = 1; int blockDrinkLevel = state.getValue(DRINK_LEVEL) == 1 ? 2 : newDrinkLevel; ApplicableFluidsToFluidContainer pouredFluid = stack.get(AllDataComponents.JUG_LEVEL) > 0 ? stack.get(AllDataComponents.APPLICABLE_FLUID_TO_CONTAINER) : state.getValue(FLUID); - level.setBlockAndUpdate(pos, state.setValue(FLUID, pouredFluid) - .setValue(DRINK_LEVEL, blockDrinkLevel)); - jugItem.removeFromJugLevel(stack, newDrinkLevel); + if (state.getValue(FLUID) == ApplicableFluidsToFluidContainer.NONE || state.getValue(DRINK_LEVEL) == 0) { + level.setBlockAndUpdate(pos, state.setValue(FLUID, pouredFluid).setValue(DRINK_LEVEL, blockDrinkLevel)); + jugItem.removeFromJugLevel(stack, player, newDrinkLevel); + } } } else { return ItemInteractionResult.FAIL; } } - if (stack.is(ModItems.STRAW_BASIC)) { - level.setBlockAndUpdate(pos, state.setValue(STRAW, StrawsVariants.BASIC)); - if (!player.getAbilities().instabuild) - stack.shrink(1); - return ItemInteractionResult.sidedSuccess(level.isClientSide); - } - if (stack.is(ModItems.STRAW_RAINBOW)) { - level.setBlockAndUpdate(pos, state.setValue(STRAW, StrawsVariants.RAINBOW)); - if (!player.getAbilities().instabuild) - stack.shrink(1); - return ItemInteractionResult.sidedSuccess(level.isClientSide); - } - if (stack.is(ModItems.STRAW_TRANS)) { - level.setBlockAndUpdate(pos, state.setValue(STRAW, StrawsVariants.TRANS)); - if (!player.getAbilities().instabuild) - stack.shrink(1); - return ItemInteractionResult.sidedSuccess(level.isClientSide); - } - if (stack.is(ModItems.STRAW_NONBINARY)) { - level.setBlockAndUpdate(pos, state.setValue(STRAW, StrawsVariants.NONBINARY)); - if (!player.getAbilities().instabuild) - stack.shrink(1); - return ItemInteractionResult.sidedSuccess(level.isClientSide); - } - if (stack.is(ModItems.STRAW_LESBIAN)) { - level.setBlockAndUpdate(pos, state.setValue(STRAW, StrawsVariants.LESBIAN)); - if (!player.getAbilities().instabuild) - stack.shrink(1); - return ItemInteractionResult.sidedSuccess(level.isClientSide); - } - if (stack.is(ModItems.STRAW_GAY)) { - level.setBlockAndUpdate(pos, state.setValue(STRAW, StrawsVariants.GAY)); - if (!player.getAbilities().instabuild) - stack.shrink(1); - return ItemInteractionResult.sidedSuccess(level.isClientSide); - } - if (stack.is(ModItems.STRAW_GENDERFLUID)) { - level.setBlockAndUpdate(pos, state.setValue(STRAW, StrawsVariants.GENDERFLUID)); - if (!player.getAbilities().instabuild) - stack.shrink(1); - return ItemInteractionResult.sidedSuccess(level.isClientSide); - } - if (stack.is(ModItems.STRAW_ACE)) { - level.setBlockAndUpdate(pos, state.setValue(STRAW, StrawsVariants.ACE)); - if (!player.getAbilities().instabuild) - stack.shrink(1); - return ItemInteractionResult.sidedSuccess(level.isClientSide); - } - if (stack.is(ModItems.STRAW_ARO)) { - level.setBlockAndUpdate(pos, state.setValue(STRAW, StrawsVariants.ARO)); - if (!player.getAbilities().instabuild) - stack.shrink(1); - return ItemInteractionResult.sidedSuccess(level.isClientSide); - } - if (stack.is(ModItems.STRAW_AROACE)) { - level.setBlockAndUpdate(pos, state.setValue(STRAW, StrawsVariants.AROACE)); - if (!player.getAbilities().instabuild) - stack.shrink(1); - return ItemInteractionResult.sidedSuccess(level.isClientSide); - } - if (stack.is(ModItems.STRAW_AGENDER)) { - level.setBlockAndUpdate(pos, state.setValue(STRAW, StrawsVariants.AGENDER)); - if (!player.getAbilities().instabuild) - stack.shrink(1); - return ItemInteractionResult.sidedSuccess(level.isClientSide); - } - if (stack.is(ModItems.STRAW_BI)) { - level.setBlockAndUpdate(pos, state.setValue(STRAW, StrawsVariants.BI)); - if (!player.getAbilities().instabuild) - stack.shrink(1); - return ItemInteractionResult.sidedSuccess(level.isClientSide); - } - if (stack.is(ModItems.STRAW_PAN)) { - level.setBlockAndUpdate(pos, state.setValue(STRAW, StrawsVariants.PAN)); - if (!player.getAbilities().instabuild) - stack.shrink(1); - return ItemInteractionResult.sidedSuccess(level.isClientSide); - } - if (stack.is(ModItems.STRAW_GERMAN)) { - level.setBlockAndUpdate(pos, state.setValue(STRAW, StrawsVariants.GERMAN)); - if (!player.getAbilities().instabuild) - stack.shrink(1); - return ItemInteractionResult.sidedSuccess(level.isClientSide); - } - if (stack.is(ModItems.STRAW_OMNISEXUAL)) { - level.setBlockAndUpdate(pos, state.setValue(STRAW, StrawsVariants.OMNISEXUAL)); - if (!player.getAbilities().instabuild) - stack.shrink(1); - return ItemInteractionResult.sidedSuccess(level.isClientSide); + if (stack.is(Items.SHEARS)) { + //BlockPos popPosition = pos.offset(0, 1, 0); + if (state.getValue(AllBlockStateProperties.STRAWS).getValue() != 0) { + this.getDroppedItem(state.getValue(AllBlockStateProperties.STRAWS).getRegisteredItem().get(), pos, player, level); + level.setBlockAndUpdate(pos, state.setValue(AllBlockStateProperties.STRAWS, StrawsVariants.NONE)); + return ItemInteractionResult.sidedSuccess(level.isClientSide); + } + if (state.getValue(AllBlockStateProperties.UMBRELLAS).getValue() != 0) { + this.getDroppedItem(state.getValue(AllBlockStateProperties.UMBRELLAS).getRegisteredItem().get(), pos, player, level); + level.setBlockAndUpdate(pos, state.setValue(AllBlockStateProperties.UMBRELLAS, UmbrellaVariants.NONE)); + return ItemInteractionResult.sidedSuccess(level.isClientSide); + } + FruitSlices sliceValue = state.getValue(AllBlockStateProperties.FRUIT_SLICES); + if (sliceValue != FruitSlices.NONE) { + if (sliceValue == FruitSlices.CITRON) + this.getDroppedItem(ModItems.CITRON_SLICE.get(), pos, player, level); + if (sliceValue == FruitSlices.ORANGE) + this.getDroppedItem(ModItems.ORANGE_SLICE.get(), pos, player, level); + level.setBlockAndUpdate(pos, state.setValue(AllBlockStateProperties.FRUIT_SLICES, FruitSlices.NONE)); + return ItemInteractionResult.sidedSuccess(level.isClientSide); + } + if (state.getValue(ICE_CUBES)) { + this.getDroppedItem(ModItems.ICE_CUBES.get(), pos, player, level); + level.setBlockAndUpdate(pos, state.setValue(AllBlockStateProperties.ICE_CUBES, false)); + return ItemInteractionResult.sidedSuccess(level.isClientSide); + } } - // Each straw follows this same logic, duplicate as necessary + for (StrawsVariants variants : StrawsVariants.values()) + if (variants.getValue() != 0 && stack.getItem() == StrawsVariants.byValue(variants.getValue()).getRegisteredItem().get()) { + if (!player.getAbilities().instabuild) { + stack.shrink(1); + if (state.getValue(AllBlockStateProperties.STRAWS).getValue() != 0) + this.getDroppedItem(state.getValue(AllBlockStateProperties.STRAWS).getRegisteredItem().get(), pos, level); + } + level.setBlockAndUpdate(pos, state.setValue(STRAW, StrawsVariants.byValue(variants.getValue()))); + return ItemInteractionResult.sidedSuccess(level.isClientSide); + } + + for (UmbrellaVariants variants : UmbrellaVariants.values()) + if (variants.getValue() != 0 && stack.getItem() == UmbrellaVariants.byValue(variants.getValue()).getRegisteredItem().get()) { + if (!player.getAbilities().instabuild) { + stack.shrink(1); + if (state.getValue(AllBlockStateProperties.UMBRELLAS).getValue() != 0) + this.getDroppedItem(state.getValue(AllBlockStateProperties.UMBRELLAS).getRegisteredItem().get(), pos, level); + } + level.setBlockAndUpdate(pos, state.setValue(UMBRELLA, UmbrellaVariants.byValue(variants.getValue()))); + return ItemInteractionResult.sidedSuccess(level.isClientSide); + } + + // Will need adjusting if more slice types are added - suggested approach: Enum registration similar to straws and umbrellas if (stack.is(ModItems.CITRON_SLICE)) { - level.setBlockAndUpdate(pos, state.setValue(FRUIT_SLICE, FruitSlices.CITRON)); - if (!player.getAbilities().instabuild) + if (!player.getAbilities().instabuild) { stack.shrink(1); + if (state.getValue(AllBlockStateProperties.FRUIT_SLICES) != FruitSlices.NONE) + this.getDroppedItem(ModItems.ORANGE_SLICE.get(), pos, level); + } + level.setBlockAndUpdate(pos, state.setValue(FRUIT_SLICE, FruitSlices.CITRON)); return ItemInteractionResult.sidedSuccess(level.isClientSide); } - if (stack.is(ModItems.ORANGE_SLICE)) { - level.setBlockAndUpdate(pos, state.setValue(FRUIT_SLICE, FruitSlices.ORANGE)); - if (!player.getAbilities().instabuild) + if (!player.getAbilities().instabuild) { stack.shrink(1); + if (state.getValue(AllBlockStateProperties.FRUIT_SLICES) != FruitSlices.NONE) + this.getDroppedItem(ModItems.CITRON_SLICE.get(), pos, level); + } + level.setBlockAndUpdate(pos, state.setValue(FRUIT_SLICE, FruitSlices.ORANGE)); return ItemInteractionResult.sidedSuccess(level.isClientSide); } // Each slice follows this same logic, duplicate as necessary - if (stack.is(ModItems.DRINK_UMBRELLA_1)) { - level.setBlockAndUpdate(pos, state.setValue(UMBRELLA, UmbrellaVariants.RED_WHITE)); - if (!player.getAbilities().instabuild) - stack.shrink(1); - return ItemInteractionResult.sidedSuccess(level.isClientSide); - } - - if (stack.is(ModItems.DRINK_UMBRELLA_2)) { - level.setBlockAndUpdate(pos, state.setValue(UMBRELLA, UmbrellaVariants.YELLOW_WHITE)); - if (!player.getAbilities().instabuild) - stack.shrink(1); - return ItemInteractionResult.sidedSuccess(level.isClientSide); - } - - if (stack.is(ModItems.DRINK_UMBRELLA_3)) { - level.setBlockAndUpdate(pos, state.setValue(UMBRELLA, UmbrellaVariants.BLACK_PURPLE)); - if (!player.getAbilities().instabuild) - stack.shrink(1); - return ItemInteractionResult.sidedSuccess(level.isClientSide); - } - - if (stack.is(ModItems.DRINK_UMBRELLA_4)) { - level.setBlockAndUpdate(pos, state.setValue(UMBRELLA, UmbrellaVariants.ORANGE_WHITE)); - if (!player.getAbilities().instabuild) - stack.shrink(1); - return ItemInteractionResult.sidedSuccess(level.isClientSide); - } - // Each umbrella follows this same logic, duplicate as necessary - if (stack.is(ModItems.ICE_CUBES)) { - level.setBlockAndUpdate(pos, state.setValue(ICE_CUBES, true)); - if (!player.getAbilities().instabuild) + if (!player.getAbilities().instabuild) { stack.shrink(1); + if (state.getValue(AllBlockStateProperties.ICE_CUBES)) + this.getDroppedItem(ModItems.ICE_CUBES.get(), pos, level); + } + level.setBlockAndUpdate(pos, state.setValue(ICE_CUBES, true)); return ItemInteractionResult.sidedSuccess(level.isClientSide); } diff --git a/src/main/java/net/doppelr/lemonmates/block/properties/ApplicableFluidsToFluidContainer.java b/src/main/java/net/doppelr/lemonmates/block/properties/ApplicableFluidsToFluidContainer.java index 95c3f36..fdbc598 100644 --- a/src/main/java/net/doppelr/lemonmates/block/properties/ApplicableFluidsToFluidContainer.java +++ b/src/main/java/net/doppelr/lemonmates/block/properties/ApplicableFluidsToFluidContainer.java @@ -13,8 +13,8 @@ public enum ApplicableFluidsToFluidContainer implements StringRepresentable { NONE, - LEMONADE(new FoodProperties.Builder().effect(() -> new MobEffectInstance(MobEffects.REGENERATION, 200, 2), 1.0F).build()), - CITRON_LEMONADE(new FoodProperties.Builder().effect(() -> new MobEffectInstance(MobEffects.DAMAGE_RESISTANCE, 200, 2), 1.0F).build()),; + LEMONADE(), + CITRON_LEMONADE(new FoodProperties.Builder().build()),; final FoodProperties properties; public static final Codec CODEC = StringRepresentable.fromEnum(ApplicableFluidsToFluidContainer::values); diff --git a/src/main/java/net/doppelr/lemonmates/block/properties/StrawsVariants.java b/src/main/java/net/doppelr/lemonmates/block/properties/StrawsVariants.java index d8547bc..4494553 100644 --- a/src/main/java/net/doppelr/lemonmates/block/properties/StrawsVariants.java +++ b/src/main/java/net/doppelr/lemonmates/block/properties/StrawsVariants.java @@ -1,31 +1,59 @@ package net.doppelr.lemonmates.block.properties; +import net.doppelr.lemonmates.item.ModItems; +import net.minecraft.util.ByIdMap; import net.minecraft.util.StringRepresentable; +import net.minecraft.world.item.Item; +import net.neoforged.neoforge.registries.DeferredItem; +import org.jetbrains.annotations.NotNull; import java.util.Locale; +import java.util.function.IntFunction; public enum StrawsVariants implements StringRepresentable { - NONE, - BASIC, - RAINBOW, - TRANS, - NONBINARY, - LESBIAN, - GAY, - GENDERFLUID, - ACE, - ARO, - AROACE, - AGENDER, - BI, - PAN, - GERMAN, - OMNISEXUAL,; - - StrawsVariants() {} + NONE(0, false), + BASIC(1, true), + RAINBOW(2, true), + TRANS(3, true), + NONBINARY(4, true), + LESBIAN(5, true), + GAY(6, true), + GENDERFLUID(7, true), + ACE(8, true), + ARO(9, true), + AROACE(10, true), + AGENDER(11, true), + BI(12, true), + PAN(13, true), + GERMAN(14, true), + OMNISEXUAL(15, true),; + private static final IntFunction BY_ID = ByIdMap.continuous(StrawsVariants::getValue, values(), ByIdMap.OutOfBoundsStrategy.ZERO); + + DeferredItem registeredItem; + final int value; + + StrawsVariants(int value, boolean registerItem) { + this.value = value; + if (registerItem) + registeredItem = ModItems.ITEMS.register("straw_" + this.name().toLowerCase(Locale.ROOT), () -> new Item(new Item.Properties())); + } + + public DeferredItem getRegisteredItem() { + return registeredItem; + } + + public int getValue() { + return value; + } + + public static StrawsVariants byValue(int value) { + return BY_ID.apply(value); + } @Override - public String getSerializedName() { + public @NotNull String getSerializedName() { return name().toLowerCase(Locale.ROOT); } + + public static void include() {} } diff --git a/src/main/java/net/doppelr/lemonmates/block/properties/UmbrellaVariants.java b/src/main/java/net/doppelr/lemonmates/block/properties/UmbrellaVariants.java index edd2889..ee5eeb7 100644 --- a/src/main/java/net/doppelr/lemonmates/block/properties/UmbrellaVariants.java +++ b/src/main/java/net/doppelr/lemonmates/block/properties/UmbrellaVariants.java @@ -1,20 +1,48 @@ package net.doppelr.lemonmates.block.properties; +import net.doppelr.lemonmates.item.ModItems; +import net.minecraft.util.ByIdMap; import net.minecraft.util.StringRepresentable; +import net.minecraft.world.item.Item; +import net.neoforged.neoforge.registries.DeferredItem; +import org.jetbrains.annotations.NotNull; import java.util.Locale; +import java.util.function.IntFunction; public enum UmbrellaVariants implements StringRepresentable { - NONE, - RED_WHITE, - YELLOW_WHITE, - BLACK_PURPLE, - ORANGE_WHITE,; + NONE(0, false), + RED_WHITE(1, true), + YELLOW_WHITE(2, true), + BLACK_PURPLE(3, true), + ORANGE_WHITE(4, true),; + private static final IntFunction BY_ID = ByIdMap.continuous(UmbrellaVariants::getValue, values(), ByIdMap.OutOfBoundsStrategy.ZERO); - UmbrellaVariants() {} + DeferredItem registeredItem; + final int value; + + UmbrellaVariants(int value, boolean registerItem) { + this.value = value; + if (registerItem) + registeredItem = ModItems.ITEMS.register("drink_umbrella_" + value, () -> new Item(new Item.Properties())); + } + + public DeferredItem getRegisteredItem() { + return registeredItem; + } + + public int getValue() { + return value; + } + + public static UmbrellaVariants byValue(int value) { + return BY_ID.apply(value); + } @Override - public String getSerializedName() { + public @NotNull String getSerializedName() { return name().toLowerCase(Locale.ROOT); } + + public static void include() {} } diff --git a/src/main/java/net/doppelr/lemonmates/datagen/ModBlockLootTableProvider.java b/src/main/java/net/doppelr/lemonmates/datagen/ModBlockLootTableProvider.java index 2c63985..858444e 100644 --- a/src/main/java/net/doppelr/lemonmates/datagen/ModBlockLootTableProvider.java +++ b/src/main/java/net/doppelr/lemonmates/datagen/ModBlockLootTableProvider.java @@ -125,8 +125,11 @@ protected void generate() { dropSelf(ModBlocks.CITRON_CRATE.get()); dropSelf(ModBlocks.RASPBERRY_CRATE.get()); - //add(ModBlocks.LEMONADE_GLASS.get(), noDrop()); - //add(ModBlocks.LEMONADE_JUG_TERRACOTTA.get(), noDrop()); + add(ModBlocks.LEMONADE_GLASS.get(), noDrop()); + add(ModBlocks.LEMONADE_JUG_TERRACOTTA.get(), noDrop()); + + // Temp to fix datagen nagging + add(ModBlocks.LEMONADE_GLASS_DECORATED.get(), noDrop()); } @Override diff --git a/src/main/java/net/doppelr/lemonmates/datagen/ModItemTagProvider.java b/src/main/java/net/doppelr/lemonmates/datagen/ModItemTagProvider.java index 8b1d1a9..bcac361 100644 --- a/src/main/java/net/doppelr/lemonmates/datagen/ModItemTagProvider.java +++ b/src/main/java/net/doppelr/lemonmates/datagen/ModItemTagProvider.java @@ -3,6 +3,8 @@ import net.doppelr.lemonmates.AllTags; import net.doppelr.lemonmates.LemonMates; import net.doppelr.lemonmates.block.ModBlocks; +import net.doppelr.lemonmates.block.properties.StrawsVariants; +import net.doppelr.lemonmates.block.properties.UmbrellaVariants; import net.doppelr.lemonmates.fluid.ModFluids; import net.doppelr.lemonmates.item.ModItems; import net.minecraft.core.HolderLookup; @@ -107,27 +109,14 @@ protected void addTags(HolderLookup.Provider provider) { ModItems.INCOMPLETE_ORANGE_LEMONADE.get(), ModItems.INCOMPLETE_RASPBERRY_LEMONADE.get(), ModItems.INCOMPLETE_SUMMERMIX_LEMONADE.get(), - ModItems.INCOMPLETE_WATERMELON_LEMONADE.get(), - - ModItems.STRAW_BASIC.get(), - ModItems.STRAW_RAINBOW.get(), - ModItems.STRAW_TRANS.get(), - ModItems.STRAW_NONBINARY.get(), - ModItems.STRAW_LESBIAN.get(), - ModItems.STRAW_GAY.get(), - ModItems.STRAW_GENDERFLUID.get(), - ModItems.STRAW_ACE.get(), - ModItems.STRAW_ARO.get(), - ModItems.STRAW_AROACE.get(), - ModItems.STRAW_AGENDER.get(), - ModItems.STRAW_BI.get(), - ModItems.STRAW_PAN.get(), - - ModItems.DRINK_UMBRELLA_1.get(), - ModItems.DRINK_UMBRELLA_2.get(), - ModItems.DRINK_UMBRELLA_3.get(), - ModItems.DRINK_UMBRELLA_4.get() - ); + ModItems.INCOMPLETE_WATERMELON_LEMONADE.get() + ); + for (StrawsVariants variants : StrawsVariants.values()) + if (variants.getValue() != 0) + tag(com.simibubi.create.AllTags.AllItemTags.UPRIGHT_ON_BELT.tag).add(variants.getRegisteredItem().get()); + for (UmbrellaVariants variants : UmbrellaVariants.values()) + if (variants.getValue() != 0) + tag(com.simibubi.create.AllTags.AllItemTags.UPRIGHT_ON_BELT.tag).add(variants.getRegisteredItem().get()); tag(AllTags.ItemTags.MOLDS).add( ModItems.PREFORM_MOLD.get().asItem(), ModItems.BOTTLE_MOLD.get().asItem(), diff --git a/src/main/java/net/doppelr/lemonmates/item/ModItems.java b/src/main/java/net/doppelr/lemonmates/item/ModItems.java index 3945e23..8a244ab 100644 --- a/src/main/java/net/doppelr/lemonmates/item/ModItems.java +++ b/src/main/java/net/doppelr/lemonmates/item/ModItems.java @@ -1,10 +1,17 @@ package net.doppelr.lemonmates.item; import com.simibubi.create.content.processing.sequenced.SequencedAssemblyItem; +import com.simibubi.create.foundation.item.ItemDescription; +import com.tterrag.registrate.util.entry.ItemEntry; import net.doppelr.lemonmates.AllFoodProperties; import net.doppelr.lemonmates.LemonMates; import net.doppelr.lemonmates.block.ModBlocks; +import net.doppelr.lemonmates.block.ModJugBlock; +import net.doppelr.lemonmates.block.properties.StrawsVariants; +import net.doppelr.lemonmates.block.properties.UmbrellaVariants; import net.doppelr.lemonmates.entity.ModBoatEntity; +import net.minecraft.core.registries.Registries; +import net.minecraft.world.entity.item.ItemEntity; import net.minecraft.world.item.HangingSignItem; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemNameBlockItem; @@ -146,50 +153,13 @@ public class ModItems { // Straws // 2 = rainbow, 3 = trans, 4 = nonbinary, 5 = lesbian, 6 = gay, 7 = genderfluid, 8 = ace, 9 = aro, 10 = agender, 11 = aroace, 12 = bisexual, 13 = pansexual, 14 = Germany - public static final DeferredItem STRAW_BASIC = ITEMS.register("straw_basic", - () -> new Item(new Item.Properties())); - public static final DeferredItem STRAW_RAINBOW = ITEMS.register("straw_rainbow", - () -> new Item(new Item.Properties())); - public static final DeferredItem STRAW_TRANS = ITEMS.register("straw_trans", - () -> new Item(new Item.Properties())); - public static final DeferredItem STRAW_NONBINARY = ITEMS.register("straw_nonbinary", - () -> new Item(new Item.Properties())); - public static final DeferredItem STRAW_LESBIAN = ITEMS.register("straw_lesbian", - () -> new Item(new Item.Properties())); - public static final DeferredItem STRAW_GAY = ITEMS.register("straw_gay", - () -> new Item(new Item.Properties())); - public static final DeferredItem STRAW_GENDERFLUID = ITEMS.register("straw_genderfluid", - () -> new Item(new Item.Properties())); - public static final DeferredItem STRAW_ACE = ITEMS.register("straw_ace", - () -> new Item(new Item.Properties())); - public static final DeferredItem STRAW_ARO = ITEMS.register("straw_aro", - () -> new Item(new Item.Properties())); - public static final DeferredItem STRAW_AROACE = ITEMS.register("straw_aroace", - () -> new Item(new Item.Properties())); - public static final DeferredItem STRAW_AGENDER = ITEMS.register("straw_agender", - () -> new Item(new Item.Properties())); - public static final DeferredItem STRAW_BI = ITEMS.register("straw_bi", - () -> new Item(new Item.Properties())); - public static final DeferredItem STRAW_PAN = ITEMS.register("straw_pan", - () -> new Item(new Item.Properties())); - public static final DeferredItem STRAW_GERMAN = ITEMS.register("straw_german", - () -> new Item(new Item.Properties())); - public static final DeferredItem STRAW_OMNISEXUAL = ITEMS.register("straw_omnisexual", - () -> new Item(new Item.Properties())); + + /** Move registration to enum -> {@link StrawsVariants} **/ // Umbrellas // Red-White - public static final DeferredItem DRINK_UMBRELLA_1 = ITEMS.register("drink_umbrella_1", - () -> new Item(new Item.Properties())); - // Yellow-White - public static final DeferredItem DRINK_UMBRELLA_2 = ITEMS.register("drink_umbrella_2", - () -> new Item(new Item.Properties())); - // Black-Purple - public static final DeferredItem DRINK_UMBRELLA_3 = ITEMS.register("drink_umbrella_3", - () -> new Item(new Item.Properties())); - // Orange-White - public static final DeferredItem DRINK_UMBRELLA_4 = ITEMS.register("drink_umbrella_4", - () -> new Item(new Item.Properties())); + + /** Move registration to enum -> {@link UmbrellaVariants} **/ public static final DeferredItem LEMONADE_JUG_TERRACOTTA = ITEMS.register("lemonade_jug_terracotta", () -> new ModJugItem(ModBlocks.LEMONADE_JUG_TERRACOTTA.get(), new Item.Properties().stacksTo(1))); @@ -199,6 +169,8 @@ public class ModItems { () -> new Item(new Item.Properties())); public static void register(IEventBus eventBus) { - ITEMS.register(eventBus); + StrawsVariants.include(); + UmbrellaVariants.include(); + ITEMS.register(eventBus); } } diff --git a/src/main/java/net/doppelr/lemonmates/item/ModJugItem.java b/src/main/java/net/doppelr/lemonmates/item/ModJugItem.java index 7568004..a70e730 100644 --- a/src/main/java/net/doppelr/lemonmates/item/ModJugItem.java +++ b/src/main/java/net/doppelr/lemonmates/item/ModJugItem.java @@ -2,9 +2,9 @@ import net.doppelr.lemonmates.AllBlockStateProperties; import net.doppelr.lemonmates.AllDataComponents; +import net.doppelr.lemonmates.LemonMatesTooltipUtils; import net.doppelr.lemonmates.block.ModDrinkingGlassBlock; import net.doppelr.lemonmates.block.properties.ApplicableFluidsToFluidContainer; -import net.minecraft.ChatFormatting; import net.minecraft.core.BlockPos; import net.minecraft.network.chat.Component; import net.minecraft.world.InteractionHand; @@ -27,6 +27,7 @@ public class ModJugItem extends BlockItem { public ModJugItem(Block block, Properties properties) { super(block, properties); + } public void setPourAbility(ItemStack stack, boolean pour) { @@ -46,27 +47,34 @@ public void addToJugLevel(ItemStack stack, int increment) { stack.set(AllDataComponents.JUG_LEVEL, stack.get(AllDataComponents.JUG_LEVEL) + increment); } - public void removeFromJugLevel(ItemStack stack, int decrement) { - if (stack.get(AllDataComponents.JUG_LEVEL) != null) { - int f = stack.get(AllDataComponents.JUG_LEVEL) - decrement; - if (f >= 0 && f <= 8) - stack.set(AllDataComponents.JUG_LEVEL, stack.get(AllDataComponents.JUG_LEVEL) - decrement); - } + public void removeFromJugLevel(ItemStack stack, Player player, int decrement) { + if (!player.getAbilities().instabuild) + if (stack.get(AllDataComponents.JUG_LEVEL) != null) { + int f = stack.get(AllDataComponents.JUG_LEVEL) - decrement; + if (f >= 0 && f <= 8) + stack.set(AllDataComponents.JUG_LEVEL, stack.get(AllDataComponents.JUG_LEVEL) - decrement); + } } - public void jugLevelHandling(ItemStack stack, ApplicableFluidsToFluidContainer fluid) { + public void jugLevelHandling(ItemStack stack, Player player, ApplicableFluidsToFluidContainer fluid) { if (stack.get(AllDataComponents.APPLICABLE_FLUID_TO_CONTAINER) != fluid) this.setContainedFluid(stack, fluid); if (stack.get(AllDataComponents.JUG_LEVEL) == null || stack.get(AllDataComponents.JUG_LEVEL) == 0) { this.setJugLevel(stack, 4); + if (!player.getAbilities().instabuild) + player.setItemInHand(InteractionHand.OFF_HAND, ModItems.BOTTLE_EMPTY.toStack()); } else if (stack.get(AllDataComponents.JUG_LEVEL) <= 4) { this.addToJugLevel(stack, 4); + if (!player.getAbilities().instabuild) + player.setItemInHand(InteractionHand.OFF_HAND, ModItems.BOTTLE_EMPTY.toStack()); } else if (stack.get(AllDataComponents.JUG_LEVEL) < 8) { int incrementJugLevel = 4; if (stack.get(AllDataComponents.JUG_LEVEL) > 4) incrementJugLevel = 8 - stack.get(AllDataComponents.JUG_LEVEL); this.addToJugLevel(stack, incrementJugLevel); + if (!player.getAbilities().instabuild) + player.setItemInHand(InteractionHand.OFF_HAND, ModItems.BOTTLE_EMPTY.toStack()); } } @@ -106,9 +114,9 @@ public InteractionResult useOn(UseOnContext context) { } else if (Boolean.FALSE.equals(stack.get(AllDataComponents.CAN_POUR))) { if (stack.get(AllDataComponents.JUG_LEVEL) == null || stack.get(AllDataComponents.JUG_LEVEL) <= 4) { if (offHandStack.is(ModItems.SUMMERMIX_LEMONADE_BOTTLE)) - this.jugLevelHandling(stack, ApplicableFluidsToFluidContainer.LEMONADE); + this.jugLevelHandling(stack, player, ApplicableFluidsToFluidContainer.LEMONADE); if (offHandStack.is(ModItems.CITRON_LEMONADE_BOTTLE)) - this.jugLevelHandling(stack, ApplicableFluidsToFluidContainer.CITRON_LEMONADE); + this.jugLevelHandling(stack, player, ApplicableFluidsToFluidContainer.CITRON_LEMONADE); } } } @@ -118,8 +126,9 @@ public InteractionResult useOn(UseOnContext context) { @Override public void appendHoverText(ItemStack stack, @NotNull TooltipContext context, @NotNull List tooltipComponents, @NotNull TooltipFlag tooltipFlag) { - if (stack.get(AllDataComponents.CAN_POUR) != null) { - tooltipComponents.add(Component.literal("Can Pour: " + stack.get(AllDataComponents.CAN_POUR)).withStyle(ChatFormatting.DARK_GREEN)); - } + String id = "block.lemonmates.lemonade_jug_terracotta"; + boolean pour = stack.get(AllDataComponents.CAN_POUR) != null ? stack.get(AllDataComponents.CAN_POUR) : false; + LemonMatesTooltipUtils.createCustomTooltip(id, true, tooltipComponents, pour); + LemonMatesTooltipUtils.createAdditionalConditionalBehaviourTooltip(id, 2, tooltipComponents); } } diff --git a/src/main/resources/assets/lemonmates/lang/en_us.json b/src/main/resources/assets/lemonmates/lang/en_us.json index 8b7dad4..bacc04a 100644 --- a/src/main/resources/assets/lemonmates/lang/en_us.json +++ b/src/main/resources/assets/lemonmates/lang/en_us.json @@ -172,5 +172,9 @@ "tag.fluid.c.lemonades": "Lemonades", "tag.fluid.c.plastic": "Plastic", - "item.lemonmates.lemonade_jug_terracotta.tooltip.summary": "This is a _Test_ Tooltip." + "block.lemonmates.lemonade_jug_terracotta.tooltip.summary": "A way to store your fluids _more aesthetically._", + "block.lemonmates.lemonade_jug_terracotta.tooltip.condition1": "_When Shift+R-Clicking with empty offhand_ (Able to pour: %1$s)", + "block.lemonmates.lemonade_jug_terracotta.tooltip.behaviour1": "Switch pouring functionality to either be _priority or secondary._", + "block.lemonmates.lemonade_jug_terracotta.tooltip.condition2": "_When R-Clicking onto a Lemonade Glass_", + "block.lemonmates.lemonade_jug_terracotta.tooltip.behaviour2": "Pours the _fluid contained within_ into the glass." } \ No newline at end of file diff --git a/src/main/resources/assets/lemonmates/models/block/lemonade_jug_terracotta.json b/src/main/resources/assets/lemonmates/models/block/lemonade_jug_terracotta.json index ba6b810..a9edd47 100644 --- a/src/main/resources/assets/lemonmates/models/block/lemonade_jug_terracotta.json +++ b/src/main/resources/assets/lemonmates/models/block/lemonade_jug_terracotta.json @@ -4,8 +4,8 @@ "render_type": "minecraft:cutout", "texture_size": [32, 32], "textures": { - "jc": "lemonmates:block/lemonade_jug_hardened_clay", - "particle": "lemonmates:block/lemonade_jug_hardened_clay" + "jc": "lemonmates:block/lemonade_jug_terracotta", + "particle": "lemonmates:block/lemonade_jug_terracotta" }, "elements": [ { diff --git a/src/main/resources/assets/lemonmates/textures/block/lemonade_jug_hardened_clay.png b/src/main/resources/assets/lemonmates/textures/block/lemonade_jug_terracotta.png similarity index 100% rename from src/main/resources/assets/lemonmates/textures/block/lemonade_jug_hardened_clay.png rename to src/main/resources/assets/lemonmates/textures/block/lemonade_jug_terracotta.png