From 301ca884533af9cf1c5405d12febd76bf3c96017 Mon Sep 17 00:00:00 2001 From: Eugene Date: Sun, 11 Aug 2024 15:59:56 +0300 Subject: [PATCH 1/2] test 1 --- .../ukrainian_dlight/UkrainianDelight.java | 23 +-- .../UkrainianDeligthClient.java | 8 +- .../block/custom/PysankerTableBlock.java | 58 +++++++ .../block/entity/BrewingKegBlockEntity.java | 13 +- .../block/entity/ModBlockEntities.java | 4 +- .../ukrainian_dlight/item/DrinkBlockItem.java | 10 +- ...{ItemBuilder.java => FoodItemBuilder.java} | 10 +- .../ukrainian_dlight/item/KrashankyItem.java | 9 ++ .../ukrainian_dlight/item/ModItemGroups.java | 78 ++++----- .../recipe/BrewingRecipe.java | 8 +- .../BlockRegistry.java} | 10 +- .../ItemsRegistry.java} | 69 ++++---- .../registry/PatternRegistry.java | 22 +++ .../RecipesRegistry.java} | 6 +- .../ScreenHandlersRegistry.java} | 14 +- .../registry/ScreensRegistry.java | 12 ++ .../{ModTags.java => TagsRegistry.java} | 2 +- .../initialize/CustomizeLootTables.java | 6 +- .../registry/manager/PatternManager.java | 57 +++++++ .../screen/BrewingKegScreenHandler.java | 10 +- .../ukrainian_dlight/screen/ModScreens.java | 9 -- .../screen/PysankersTableScreen.java | 74 +++++++++ .../screen/PysankersTableScreenHandler.java | 151 ++++++++++++++++++ .../util/StatusEffectUtil.java | 10 +- .../models/item/krashanky_item.json | 6 + .../gui/container/pysankers_table.png | Bin 0 -> 1836 bytes .../item/krashanky/black_krashanka.png | Bin 4176 -> 4539 bytes .../item/krashanky/patterns/border.png | Bin 0 -> 1832 bytes .../item/krashanky/patterns/circle.png | Bin 0 -> 1813 bytes .../item/krashanky/patterns/cross.png | Bin 0 -> 1836 bytes .../item/krashanky/patterns/diagonal_left.png | Bin 0 -> 1995 bytes .../krashanky/patterns/diagonal_right.png | Bin 0 -> 1987 bytes .../item/krashanky/patterns/flower.png | Bin 0 -> 1812 bytes .../item/krashanky/patterns/globe.png | Bin 0 -> 1989 bytes .../item/krashanky/patterns/gradient.png | Bin 0 -> 1985 bytes .../item/krashanky/patterns/gradient_up.png | Bin 0 -> 1983 bytes .../item/krashanky/patterns/half_vertical.png | Bin 0 -> 1822 bytes .../patterns/half_vertical_right.png | Bin 0 -> 1819 bytes .../item/krashanky/patterns/piglin.png | Bin 0 -> 1818 bytes .../item/krashanky/patterns/rhombus.png | Bin 0 -> 1819 bytes .../item/krashanky/patterns/small_stripes.png | Bin 0 -> 1974 bytes .../krashanky/patterns/straight_cross.png | Bin 0 -> 1811 bytes .../item/krashanky/patterns/stripe_bottom.png | Bin 0 -> 1812 bytes .../item/krashanky/patterns/stripe_center.png | Bin 0 -> 1807 bytes .../krashanky/patterns/stripe_downleft.png | Bin 0 -> 1979 bytes .../krashanky/patterns/stripe_downright.png | Bin 0 -> 1983 bytes .../item/krashanky/patterns/stripe_middle.png | Bin 0 -> 1804 bytes .../item/krashanky/patterns/stripe_top.png | Bin 0 -> 1812 bytes .../krashanky/patterns/triangle_bottom.png | Bin 0 -> 1818 bytes .../item/krashanky/patterns/triangle_top.png | Bin 0 -> 1819 bytes .../krashanky/patterns/triangles_bottom.png | Bin 0 -> 1815 bytes .../item/krashanky/patterns/triangles_top.png | Bin 0 -> 1815 bytes 52 files changed, 527 insertions(+), 152 deletions(-) create mode 100644 src/main/java/com/megatrex4/ukrainian_dlight/block/custom/PysankerTableBlock.java rename src/main/java/com/megatrex4/ukrainian_dlight/item/{ItemBuilder.java => FoodItemBuilder.java} (78%) create mode 100644 src/main/java/com/megatrex4/ukrainian_dlight/item/KrashankyItem.java rename src/main/java/com/megatrex4/ukrainian_dlight/{block/ModBlocks.java => registry/BlockRegistry.java} (86%) rename src/main/java/com/megatrex4/ukrainian_dlight/{item/ModItems.java => registry/ItemsRegistry.java} (66%) create mode 100644 src/main/java/com/megatrex4/ukrainian_dlight/registry/PatternRegistry.java rename src/main/java/com/megatrex4/ukrainian_dlight/{recipe/ModRecipes.java => registry/RecipesRegistry.java} (79%) rename src/main/java/com/megatrex4/ukrainian_dlight/{screen/ModScreenHandlers.java => registry/ScreenHandlersRegistry.java} (50%) create mode 100644 src/main/java/com/megatrex4/ukrainian_dlight/registry/ScreensRegistry.java rename src/main/java/com/megatrex4/ukrainian_dlight/registry/{ModTags.java => TagsRegistry.java} (97%) rename src/main/java/com/megatrex4/ukrainian_dlight/{ => registry}/initialize/CustomizeLootTables.java (84%) create mode 100644 src/main/java/com/megatrex4/ukrainian_dlight/registry/manager/PatternManager.java delete mode 100644 src/main/java/com/megatrex4/ukrainian_dlight/screen/ModScreens.java create mode 100644 src/main/java/com/megatrex4/ukrainian_dlight/screen/PysankersTableScreen.java create mode 100644 src/main/java/com/megatrex4/ukrainian_dlight/screen/PysankersTableScreenHandler.java create mode 100644 src/main/resources/assets/ukrainian_delight/models/item/krashanky_item.json create mode 100644 src/main/resources/assets/ukrainian_delight/textures/gui/container/pysankers_table.png create mode 100644 src/main/resources/assets/ukrainian_delight/textures/item/krashanky/patterns/border.png create mode 100644 src/main/resources/assets/ukrainian_delight/textures/item/krashanky/patterns/circle.png create mode 100644 src/main/resources/assets/ukrainian_delight/textures/item/krashanky/patterns/cross.png create mode 100644 src/main/resources/assets/ukrainian_delight/textures/item/krashanky/patterns/diagonal_left.png create mode 100644 src/main/resources/assets/ukrainian_delight/textures/item/krashanky/patterns/diagonal_right.png create mode 100644 src/main/resources/assets/ukrainian_delight/textures/item/krashanky/patterns/flower.png create mode 100644 src/main/resources/assets/ukrainian_delight/textures/item/krashanky/patterns/globe.png create mode 100644 src/main/resources/assets/ukrainian_delight/textures/item/krashanky/patterns/gradient.png create mode 100644 src/main/resources/assets/ukrainian_delight/textures/item/krashanky/patterns/gradient_up.png create mode 100644 src/main/resources/assets/ukrainian_delight/textures/item/krashanky/patterns/half_vertical.png create mode 100644 src/main/resources/assets/ukrainian_delight/textures/item/krashanky/patterns/half_vertical_right.png create mode 100644 src/main/resources/assets/ukrainian_delight/textures/item/krashanky/patterns/piglin.png create mode 100644 src/main/resources/assets/ukrainian_delight/textures/item/krashanky/patterns/rhombus.png create mode 100644 src/main/resources/assets/ukrainian_delight/textures/item/krashanky/patterns/small_stripes.png create mode 100644 src/main/resources/assets/ukrainian_delight/textures/item/krashanky/patterns/straight_cross.png create mode 100644 src/main/resources/assets/ukrainian_delight/textures/item/krashanky/patterns/stripe_bottom.png create mode 100644 src/main/resources/assets/ukrainian_delight/textures/item/krashanky/patterns/stripe_center.png create mode 100644 src/main/resources/assets/ukrainian_delight/textures/item/krashanky/patterns/stripe_downleft.png create mode 100644 src/main/resources/assets/ukrainian_delight/textures/item/krashanky/patterns/stripe_downright.png create mode 100644 src/main/resources/assets/ukrainian_delight/textures/item/krashanky/patterns/stripe_middle.png create mode 100644 src/main/resources/assets/ukrainian_delight/textures/item/krashanky/patterns/stripe_top.png create mode 100644 src/main/resources/assets/ukrainian_delight/textures/item/krashanky/patterns/triangle_bottom.png create mode 100644 src/main/resources/assets/ukrainian_delight/textures/item/krashanky/patterns/triangle_top.png create mode 100644 src/main/resources/assets/ukrainian_delight/textures/item/krashanky/patterns/triangles_bottom.png create mode 100644 src/main/resources/assets/ukrainian_delight/textures/item/krashanky/patterns/triangles_top.png diff --git a/src/main/java/com/megatrex4/ukrainian_dlight/UkrainianDelight.java b/src/main/java/com/megatrex4/ukrainian_dlight/UkrainianDelight.java index 7da6ad2..a5b8c17 100644 --- a/src/main/java/com/megatrex4/ukrainian_dlight/UkrainianDelight.java +++ b/src/main/java/com/megatrex4/ukrainian_dlight/UkrainianDelight.java @@ -2,18 +2,19 @@ import com.megatrex4.ukrainian_dlight.block.DrinkBottleBlock; import com.megatrex4.ukrainian_dlight.block.FoodJarBlocks; -import com.megatrex4.ukrainian_dlight.block.ModBlocks; +import com.megatrex4.ukrainian_dlight.item.KrashankyItem; +import com.megatrex4.ukrainian_dlight.registry.BlockRegistry; import com.megatrex4.ukrainian_dlight.block.entity.ModBlockEntities; //import com.megatrex4.ukrainian_dlight.compat.patchouli.CustomBrewingRecipeProcessor; import com.megatrex4.ukrainian_dlight.config.ModConfig; -import com.megatrex4.ukrainian_dlight.initialize.CustomizeLootTables; +import com.megatrex4.ukrainian_dlight.registry.initialize.CustomizeLootTables; import com.megatrex4.ukrainian_dlight.item.ModItemGroups; -import com.megatrex4.ukrainian_dlight.item.ModItems; +import com.megatrex4.ukrainian_dlight.registry.ItemsRegistry; import com.megatrex4.ukrainian_dlight.item.ToolTipHelper; import com.megatrex4.ukrainian_dlight.networking.ModMessages; -import com.megatrex4.ukrainian_dlight.recipe.ModRecipes; -import com.megatrex4.ukrainian_dlight.screen.ModScreenHandlers; -import com.megatrex4.ukrainian_dlight.screen.ModScreens; +import com.megatrex4.ukrainian_dlight.registry.RecipesRegistry; +import com.megatrex4.ukrainian_dlight.registry.ScreenHandlersRegistry; +import com.megatrex4.ukrainian_dlight.registry.ScreensRegistry; import net.fabricmc.api.ModInitializer; import net.minecraft.entity.damage.DamageType; import net.minecraft.registry.RegistryKey; @@ -41,15 +42,15 @@ public static MutableText i18n(String key, Object... args) { public void onInitialize() { FoodJarBlocks.registerFoodBlocks(); DrinkBottleBlock.registerDrinkBlock(); - ModBlocks.registerModBlocks(); - ModItems.registerModItems(); + BlockRegistry.registerModBlocks(); + ItemsRegistry.registerModItems(); ModItemGroups.registerItemGroups(); ToolTipHelper.registerTooltip(); ModBlockEntities.registerBlockEntities(); - ModScreenHandlers.registerModScreenHandlers(); + ScreenHandlersRegistry.registerModScreenHandlers(); ModMessages.registerS2CPackets(); - ModRecipes.registerRecipes(); - ModScreens.registerScreens(); + RecipesRegistry.registerRecipes(); + ScreensRegistry.registerScreens(); ModConfig.loadConfig(); CustomizeLootTables.register(); diff --git a/src/main/java/com/megatrex4/ukrainian_dlight/UkrainianDeligthClient.java b/src/main/java/com/megatrex4/ukrainian_dlight/UkrainianDeligthClient.java index 07b6b56..709fdb0 100644 --- a/src/main/java/com/megatrex4/ukrainian_dlight/UkrainianDeligthClient.java +++ b/src/main/java/com/megatrex4/ukrainian_dlight/UkrainianDeligthClient.java @@ -1,18 +1,14 @@ package com.megatrex4.ukrainian_dlight; import com.megatrex4.ukrainian_dlight.screen.BrewingKegScreen; -import com.megatrex4.ukrainian_dlight.screen.ModScreenHandlers; +import com.megatrex4.ukrainian_dlight.registry.ScreenHandlersRegistry; import net.fabricmc.api.ClientModInitializer; -import net.fabricmc.fabric.api.blockrenderlayer.v1.BlockRenderLayerMap; -import net.fabricmc.fabric.api.client.rendering.v1.EntityModelLayerRegistry; -import net.fabricmc.fabric.api.client.rendering.v1.EntityRendererRegistry; import net.minecraft.client.gui.screen.ingame.HandledScreens; -import net.minecraft.client.render.RenderLayer; public class UkrainianDeligthClient implements ClientModInitializer { @Override public void onInitializeClient() { - HandledScreens.register(ModScreenHandlers.BREWING_KEG_SCREEN_HANDLER, BrewingKegScreen::new); + HandledScreens.register(ScreenHandlersRegistry.BREWING_KEG_SCREEN_HANDLER, BrewingKegScreen::new); } } diff --git a/src/main/java/com/megatrex4/ukrainian_dlight/block/custom/PysankerTableBlock.java b/src/main/java/com/megatrex4/ukrainian_dlight/block/custom/PysankerTableBlock.java new file mode 100644 index 0000000..fa51f77 --- /dev/null +++ b/src/main/java/com/megatrex4/ukrainian_dlight/block/custom/PysankerTableBlock.java @@ -0,0 +1,58 @@ +package com.megatrex4.ukrainian_dlight.block.custom; + +import com.megatrex4.ukrainian_dlight.screen.PysankersTableScreenHandler; +import net.fabricmc.fabric.api.screenhandler.v1.ExtendedScreenHandlerFactory; +import net.minecraft.block.AbstractBlock; +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.inventory.SimpleInventory; +import net.minecraft.network.PacketByteBuf; +import net.minecraft.screen.NamedScreenHandlerFactory; +import net.minecraft.screen.ScreenHandler; +import net.minecraft.screen.ScreenHandlerContext; +import net.minecraft.server.network.ServerPlayerEntity; +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; + +public class PysankerTableBlock extends Block { + + public PysankerTableBlock(AbstractBlock.Settings settings) { + super(settings); + } + + @Override + public ActionResult onUse(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockHitResult hit) { + if (!world.isClient) { + player.openHandledScreen(createScreenHandlerFactory(state, world, pos)); + } + return ActionResult.SUCCESS; + } + + @Nullable + @Override + public NamedScreenHandlerFactory createScreenHandlerFactory(BlockState state, World world, BlockPos pos) { + return new ExtendedScreenHandlerFactory() { + @Override + public void writeScreenOpeningData(ServerPlayerEntity player, PacketByteBuf buf) { + buf.writeBlockPos(pos); + } + + @Override + public Text getDisplayName() { + return Text.translatable("container.pysankers_table"); + } + + @Override + public ScreenHandler createMenu(int syncId, net.minecraft.entity.player.PlayerInventory inv, PlayerEntity player) { + return new PysankersTableScreenHandler(syncId, inv, (PysankerTableBlock) state.getBlock(), new SimpleInventory(PysankersTableScreenHandler.INVENTORY_SIZE), ScreenHandlerContext.create(world, pos)); + } + + }; + } +} diff --git a/src/main/java/com/megatrex4/ukrainian_dlight/block/entity/BrewingKegBlockEntity.java b/src/main/java/com/megatrex4/ukrainian_dlight/block/entity/BrewingKegBlockEntity.java index a700b21..efcb0e3 100644 --- a/src/main/java/com/megatrex4/ukrainian_dlight/block/entity/BrewingKegBlockEntity.java +++ b/src/main/java/com/megatrex4/ukrainian_dlight/block/entity/BrewingKegBlockEntity.java @@ -1,12 +1,10 @@ package com.megatrex4.ukrainian_dlight.block.entity; -import com.megatrex4.ukrainian_dlight.block.custom.BrewingKegBlock; import com.megatrex4.ukrainian_dlight.block.entity.inventory.ImplementedInventory; import com.megatrex4.ukrainian_dlight.config.ModConfig; import com.megatrex4.ukrainian_dlight.networking.ModMessages; import com.megatrex4.ukrainian_dlight.recipe.BrewingRecipe; -import com.megatrex4.ukrainian_dlight.recipe.ModRecipes; -import com.megatrex4.ukrainian_dlight.registry.ModTags; +import com.megatrex4.ukrainian_dlight.registry.RecipesRegistry; import com.megatrex4.ukrainian_dlight.screen.BrewingKegScreenHandler; import com.megatrex4.ukrainian_dlight.util.CompoundTagUtils; import com.megatrex4.ukrainian_dlight.util.FluidStack; @@ -18,7 +16,6 @@ import net.fabricmc.fabric.api.networking.v1.PlayerLookup; import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking; import net.fabricmc.fabric.api.screenhandler.v1.ExtendedScreenHandlerFactory; -import net.fabricmc.fabric.api.transfer.v1.fluid.FluidConstants; import net.fabricmc.fabric.api.transfer.v1.fluid.FluidVariant; import net.fabricmc.fabric.api.transfer.v1.storage.base.SingleVariantStorage; import net.fabricmc.fabric.api.transfer.v1.transaction.Transaction; @@ -31,7 +28,6 @@ import net.minecraft.entity.player.PlayerInventory; import net.minecraft.fluid.Fluids; import net.minecraft.inventory.Inventories; -import net.minecraft.item.Item; import net.minecraft.item.ItemConvertible; import net.minecraft.item.ItemStack; import net.minecraft.item.Items; @@ -39,8 +35,6 @@ import net.minecraft.network.PacketByteBuf; import net.minecraft.recipe.Ingredient; import net.minecraft.recipe.Recipe; -import net.minecraft.recipe.RecipeType; -import net.minecraft.registry.tag.ItemTags; import net.minecraft.screen.PropertyDelegate; import net.minecraft.screen.ScreenHandler; import net.minecraft.server.network.ServerPlayerEntity; @@ -53,9 +47,6 @@ import net.minecraft.util.math.*; import net.minecraft.world.World; import org.jetbrains.annotations.Nullable; -import vectorwing.farmersdelight.common.crafting.CookingPotRecipe; -import vectorwing.farmersdelight.common.mixin.accessor.RecipeManagerAccessor; -import vectorwing.farmersdelight.common.registry.ModRecipeTypes; import java.util.*; @@ -570,7 +561,7 @@ public void setFluidLevel(FluidVariant fluidVariant, long fluidLevel) { private Optional getCurrentRecipe() { if (world == null) return Optional.empty(); - return world.getRecipeManager().getFirstMatch(ModRecipes.BREWING, this, world); + return world.getRecipeManager().getFirstMatch(RecipesRegistry.BREWING, this, world); } public boolean isContainerValid(ItemStack containerItem) { diff --git a/src/main/java/com/megatrex4/ukrainian_dlight/block/entity/ModBlockEntities.java b/src/main/java/com/megatrex4/ukrainian_dlight/block/entity/ModBlockEntities.java index ed68523..c677b72 100644 --- a/src/main/java/com/megatrex4/ukrainian_dlight/block/entity/ModBlockEntities.java +++ b/src/main/java/com/megatrex4/ukrainian_dlight/block/entity/ModBlockEntities.java @@ -2,7 +2,7 @@ import net.fabricmc.fabric.api.object.builder.v1.block.entity.FabricBlockEntityTypeBuilder; import com.megatrex4.ukrainian_dlight.UkrainianDelight; -import com.megatrex4.ukrainian_dlight.block.ModBlocks; +import com.megatrex4.ukrainian_dlight.registry.BlockRegistry; import net.fabricmc.fabric.api.transfer.v1.fluid.FluidStorage; import net.minecraft.block.entity.BlockEntityType; import net.minecraft.registry.Registries; @@ -15,7 +15,7 @@ public static void registerBlockEntities() { BREWING_KEG_BLOCK_ENTITY = Registry.register(Registries.BLOCK_ENTITY_TYPE, new Identifier(UkrainianDelight.MOD_ID, "brewing_keg_be"), FabricBlockEntityTypeBuilder.create(BrewingKegBlockEntity::new, - ModBlocks.BREWING_KEG).build(null)); + BlockRegistry.BREWING_KEG).build(null)); FluidStorage.SIDED.registerForBlockEntity((blockEntity, direction) -> blockEntity.fluidStorage, BREWING_KEG_BLOCK_ENTITY); UkrainianDelight.LOGGER.info("Registering Mod Block Entities for " + UkrainianDelight.MOD_ID); diff --git a/src/main/java/com/megatrex4/ukrainian_dlight/item/DrinkBlockItem.java b/src/main/java/com/megatrex4/ukrainian_dlight/item/DrinkBlockItem.java index 78abd36..baa4c6c 100644 --- a/src/main/java/com/megatrex4/ukrainian_dlight/item/DrinkBlockItem.java +++ b/src/main/java/com/megatrex4/ukrainian_dlight/item/DrinkBlockItem.java @@ -1,7 +1,7 @@ package com.megatrex4.ukrainian_dlight.item; import com.megatrex4.ukrainian_dlight.UkrainianDelight; -import com.megatrex4.ukrainian_dlight.registry.ModTags; +import com.megatrex4.ukrainian_dlight.registry.TagsRegistry; import com.megatrex4.ukrainian_dlight.util.StatusEffectUtil; import com.mojang.datafixers.util.Pair; import net.fabricmc.fabric.api.event.lifecycle.v1.ServerTickEvents; @@ -22,12 +22,10 @@ import net.minecraft.util.Hand; import net.minecraft.util.TypedActionResult; import net.minecraft.util.UseAction; -import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import java.util.ArrayList; import java.util.List; -import java.util.concurrent.TimeUnit; public class DrinkBlockItem extends BlockItem { private final FoodComponent foodComponent; @@ -155,13 +153,13 @@ public void appendTooltip(ItemStack stack, World world, List tooltip, Tool } // Check if the item is in the drink tags and add corresponding tooltip - if (stack.isIn(ModTags.LIGHT_DRINK)) { + if (stack.isIn(TagsRegistry.LIGHT_DRINK)) { tooltip.add(Text.literal("").formatted(Formatting.GRAY)); tooltip.add(UkrainianDelight.i18n("tooltip.light_drink").formatted(Formatting.GREEN)); - } else if (stack.isIn(ModTags.MID_DRINK)) { + } else if (stack.isIn(TagsRegistry.MID_DRINK)) { tooltip.add(Text.literal("").formatted(Formatting.GRAY)); tooltip.add(UkrainianDelight.i18n("tooltip.mid_drink").formatted(Formatting.YELLOW)); - } else if (stack.isIn(ModTags.STRONG_DRINK)) { + } else if (stack.isIn(TagsRegistry.STRONG_DRINK)) { tooltip.add(Text.literal("").formatted(Formatting.GRAY)); tooltip.add(UkrainianDelight.i18n("tooltip.strong_drink").formatted(Formatting.RED)); } diff --git a/src/main/java/com/megatrex4/ukrainian_dlight/item/ItemBuilder.java b/src/main/java/com/megatrex4/ukrainian_dlight/item/FoodItemBuilder.java similarity index 78% rename from src/main/java/com/megatrex4/ukrainian_dlight/item/ItemBuilder.java rename to src/main/java/com/megatrex4/ukrainian_dlight/item/FoodItemBuilder.java index d5685d5..0f3a492 100644 --- a/src/main/java/com/megatrex4/ukrainian_dlight/item/ItemBuilder.java +++ b/src/main/java/com/megatrex4/ukrainian_dlight/item/FoodItemBuilder.java @@ -4,27 +4,27 @@ import net.minecraft.item.FoodComponent; import net.minecraft.item.Item; -public class ItemBuilder { +public class FoodItemBuilder { private FoodComponent foodComponent; private int maxCount = 64; private Boolean returnsBowl = false; - public ItemBuilder food(FoodComponent foodComponent) { + public FoodItemBuilder food(FoodComponent foodComponent) { this.foodComponent = foodComponent; return this; } - public ItemBuilder maxCount(int maxCount) { + public FoodItemBuilder maxCount(int maxCount) { this.maxCount = maxCount; return this; } - public ItemBuilder returnsBowl() { + public FoodItemBuilder returnsBowl() { this.returnsBowl = true; return this; } - public ItemBuilder returnsBowl(boolean returnsBowl) { + public FoodItemBuilder returnsBowl(boolean returnsBowl) { this.returnsBowl = returnsBowl; return this; } diff --git a/src/main/java/com/megatrex4/ukrainian_dlight/item/KrashankyItem.java b/src/main/java/com/megatrex4/ukrainian_dlight/item/KrashankyItem.java new file mode 100644 index 0000000..89361ca --- /dev/null +++ b/src/main/java/com/megatrex4/ukrainian_dlight/item/KrashankyItem.java @@ -0,0 +1,9 @@ +package com.megatrex4.ukrainian_dlight.item; + +import net.minecraft.item.Item; + +public class KrashankyItem extends Item { + public KrashankyItem(Settings settings) { + super(settings); + } +} diff --git a/src/main/java/com/megatrex4/ukrainian_dlight/item/ModItemGroups.java b/src/main/java/com/megatrex4/ukrainian_dlight/item/ModItemGroups.java index d5261fc..dc0830f 100644 --- a/src/main/java/com/megatrex4/ukrainian_dlight/item/ModItemGroups.java +++ b/src/main/java/com/megatrex4/ukrainian_dlight/item/ModItemGroups.java @@ -3,7 +3,8 @@ import com.megatrex4.ukrainian_dlight.UkrainianDelight; import com.megatrex4.ukrainian_dlight.block.DrinkBottleBlock; import com.megatrex4.ukrainian_dlight.block.FoodJarBlocks; -import com.megatrex4.ukrainian_dlight.block.ModBlocks; +import com.megatrex4.ukrainian_dlight.registry.BlockRegistry; +import com.megatrex4.ukrainian_dlight.registry.ItemsRegistry; import net.fabricmc.fabric.api.itemgroup.v1.FabricItemGroup; import net.minecraft.item.ItemGroup; import net.minecraft.item.ItemStack; @@ -17,59 +18,60 @@ public class ModItemGroups { new Identifier(UkrainianDelight.MOD_ID, "meals_ukrainian_delight"), FabricItemGroup.builder() .displayName(Text.translatable("itemgroup.meals_ukrainian_delight")) - .icon(() -> new ItemStack(ModItems.BORSCHT)) + .icon(() -> new ItemStack(ItemsRegistry.BORSCHT)) .entries((displayContext, entries) -> { - entries.add(ModItems.BORSCHT); - entries.add(ModItems.LEAN_BORSCHT); - entries.add(ModItems.HOMEMADE_SAUSAGE); - entries.add(ModItems.VARENYK); + entries.add(ItemsRegistry.BORSCHT); + entries.add(ItemsRegistry.LEAN_BORSCHT); + entries.add(ItemsRegistry.HOMEMADE_SAUSAGE); + entries.add(ItemsRegistry.VARENYK); }).build()); public static final ItemGroup INGREDIENT_UKRAINIAN_DELIGHT = Registry.register(Registries.ITEM_GROUP, new Identifier(UkrainianDelight.MOD_ID, "ingredients_ukrainian_delight"), FabricItemGroup.builder() .displayName(Text.translatable("itemgroup.ingredients_ukrainian_delight")) - .icon(() -> new ItemStack(ModItems.CUCUMBER)) + .icon(() -> new ItemStack(ItemsRegistry.CUCUMBER)) .entries((displayContext, entries) -> { - entries.add(ModBlocks.BREWING_KEG); - entries.add(ModBlocks.SALT_BAG); - entries.add(ModBlocks.SALT_BLOCK); - entries.add(ModItems.SALT); + entries.add(BlockRegistry.BREWING_KEG); + entries.add(BlockRegistry.PYSANKER_TABLE); + entries.add(BlockRegistry.SALT_BAG); + entries.add(BlockRegistry.SALT_BLOCK); + entries.add(ItemsRegistry.SALT); - entries.add(ModItems.HORSERADISH); - entries.add(ModBlocks.CUCUMBER_CRATE); - entries.add(ModItems.CUCUMBER); - entries.add(ModItems.CUTTED_CUCUMBER); - entries.add(ModItems.APPLE_SLICE); - entries.add(ModItems.DRIED_APPLE_SLICE); - entries.add(ModItems.CHERRY_BERRY); - entries.add(ModItems.COTTAGE_CHEESE); - entries.add(ModItems.SALO); - entries.add(ModItems.YEAST); + entries.add(ItemsRegistry.HORSERADISH); + entries.add(BlockRegistry.CUCUMBER_CRATE); + entries.add(ItemsRegistry.CUCUMBER); + entries.add(ItemsRegistry.CUTTED_CUCUMBER); + entries.add(ItemsRegistry.APPLE_SLICE); + entries.add(ItemsRegistry.DRIED_APPLE_SLICE); + entries.add(ItemsRegistry.CHERRY_BERRY); + entries.add(ItemsRegistry.COTTAGE_CHEESE); + entries.add(ItemsRegistry.SALO); + entries.add(ItemsRegistry.YEAST); }).build()); public static final ItemGroup KRASHANKY_UKRAINIAN_DELIGHT = Registry.register(Registries.ITEM_GROUP, new Identifier(UkrainianDelight.MOD_ID, "krashanky_ukrainian_delight"), FabricItemGroup.builder() .displayName(Text.translatable("itemgroup.krashanky_ukrainian_delight")) - .icon(() -> new ItemStack(ModItems.APPLE_SLICE)) + .icon(() -> new ItemStack(ItemsRegistry.APPLE_SLICE)) .entries((displayContext, entries) -> { - entries.add(ModItems.BLACK_KRASHANKA); - entries.add(ModItems.BLUE_KRASHANKA); - entries.add(ModItems.BROWN_KRASHANKA); - entries.add(ModItems.CYAN_KRASHANKA); - entries.add(ModItems.GRAY_KRASHANKA); - entries.add(ModItems.GREEN_KRASHANKA); - entries.add(ModItems.LIGHT_BLUE_KRASHANKA); - entries.add(ModItems.LIGHT_GRAY_KRASHANKA); - entries.add(ModItems.LIME_KRASHANKA); - entries.add(ModItems.MAGENTA_KRASHANKA); - entries.add(ModItems.ORANGE_KRASHANKA); - entries.add(ModItems.PINK_KRASHANKA); - entries.add(ModItems.PURPLE_KRASHANKA); - entries.add(ModItems.RED_KRASHANKA); - entries.add(ModItems.WHITE_KRASHANKA); - entries.add(ModItems.YELLOW_KRASHANKA); + entries.add(ItemsRegistry.BLACK_KRASHANKA); + entries.add(ItemsRegistry.BLUE_KRASHANKA); + entries.add(ItemsRegistry.BROWN_KRASHANKA); + entries.add(ItemsRegistry.CYAN_KRASHANKA); + entries.add(ItemsRegistry.GRAY_KRASHANKA); + entries.add(ItemsRegistry.GREEN_KRASHANKA); + entries.add(ItemsRegistry.LIGHT_BLUE_KRASHANKA); + entries.add(ItemsRegistry.LIGHT_GRAY_KRASHANKA); + entries.add(ItemsRegistry.LIME_KRASHANKA); + entries.add(ItemsRegistry.MAGENTA_KRASHANKA); + entries.add(ItemsRegistry.ORANGE_KRASHANKA); + entries.add(ItemsRegistry.PINK_KRASHANKA); + entries.add(ItemsRegistry.PURPLE_KRASHANKA); + entries.add(ItemsRegistry.RED_KRASHANKA); + entries.add(ItemsRegistry.WHITE_KRASHANKA); + entries.add(ItemsRegistry.YELLOW_KRASHANKA); }).build()); diff --git a/src/main/java/com/megatrex4/ukrainian_dlight/recipe/BrewingRecipe.java b/src/main/java/com/megatrex4/ukrainian_dlight/recipe/BrewingRecipe.java index 5a8b371..a76b4fb 100644 --- a/src/main/java/com/megatrex4/ukrainian_dlight/recipe/BrewingRecipe.java +++ b/src/main/java/com/megatrex4/ukrainian_dlight/recipe/BrewingRecipe.java @@ -1,7 +1,6 @@ package com.megatrex4.ukrainian_dlight.recipe; -import com.google.gson.JsonArray; -import com.google.gson.JsonObject; +import com.megatrex4.ukrainian_dlight.registry.RecipesRegistry; import net.minecraft.inventory.Inventory; import net.minecraft.item.ItemStack; import net.minecraft.recipe.Ingredient; @@ -10,7 +9,6 @@ import net.minecraft.recipe.RecipeType; import net.minecraft.registry.DynamicRegistryManager; import net.minecraft.util.Identifier; -import net.minecraft.util.JsonHelper; import net.minecraft.util.collection.DefaultedList; import net.minecraft.world.World; @@ -68,12 +66,12 @@ public Identifier getId() { @Override public RecipeSerializer getSerializer() { - return ModRecipes.BREWING_RECIPE_SERIALIZER; + return RecipesRegistry.BREWING_RECIPE_SERIALIZER; } @Override public RecipeType getType() { - return ModRecipes.BREWING; + return RecipesRegistry.BREWING; } public ItemStack getContainer() { diff --git a/src/main/java/com/megatrex4/ukrainian_dlight/block/ModBlocks.java b/src/main/java/com/megatrex4/ukrainian_dlight/registry/BlockRegistry.java similarity index 86% rename from src/main/java/com/megatrex4/ukrainian_dlight/block/ModBlocks.java rename to src/main/java/com/megatrex4/ukrainian_dlight/registry/BlockRegistry.java index f960923..803915c 100644 --- a/src/main/java/com/megatrex4/ukrainian_dlight/block/ModBlocks.java +++ b/src/main/java/com/megatrex4/ukrainian_dlight/registry/BlockRegistry.java @@ -1,8 +1,9 @@ -package com.megatrex4.ukrainian_dlight.block; +package com.megatrex4.ukrainian_dlight.registry; import com.megatrex4.ukrainian_dlight.UkrainianDelight; import com.megatrex4.ukrainian_dlight.block.custom.BrewingKegBlock; import com.megatrex4.ukrainian_dlight.block.custom.BrewingKegBlockItem; +import com.megatrex4.ukrainian_dlight.block.custom.PysankerTableBlock; import com.megatrex4.ukrainian_dlight.block.custom.SaltBlock; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.block.Block; @@ -14,7 +15,7 @@ import net.minecraft.sound.BlockSoundGroup; import net.minecraft.util.Identifier; -public class ModBlocks { +public class BlockRegistry { public static final Block SALT_BLOCK = registerBlock("salt_block", new SaltBlock(Block.Settings.copy(Blocks.STONE).sounds(BlockSoundGroup.STONE))); @@ -28,6 +29,9 @@ public class ModBlocks { public static final Block BREWING_KEG = registerBlock("brewing_keg", new BrewingKegBlock(FabricBlockSettings.copyOf(Blocks.OAK_PLANKS).sounds(BlockSoundGroup.WOOD).nonOpaque())); + public static final Block PYSANKER_TABLE = registerBlock("pysankers_table", + new PysankerTableBlock(FabricBlockSettings.copyOf(Blocks.OAK_PLANKS).sounds(BlockSoundGroup.WOOD))); + private static Block registerBlock(String name, Block block){ registerBlockItem(name, block); return Registry.register(Registries.BLOCK, new Identifier(UkrainianDelight.MOD_ID, name), block); @@ -36,10 +40,8 @@ private static Block registerBlock(String name, Block block){ private static void registerBlockItem(String name, Block block){ Item item; if (block instanceof BrewingKegBlock) { - // Use custom BrewingKegBlockItem for BrewingKegBlock item = new BrewingKegBlockItem(block, new Item.Settings().maxCount(1)); } else { - // Default BlockItem for other blocks item = new BlockItem(block, new Item.Settings()); } Registry.register(Registries.ITEM, new Identifier(UkrainianDelight.MOD_ID, name), item); diff --git a/src/main/java/com/megatrex4/ukrainian_dlight/item/ModItems.java b/src/main/java/com/megatrex4/ukrainian_dlight/registry/ItemsRegistry.java similarity index 66% rename from src/main/java/com/megatrex4/ukrainian_dlight/item/ModItems.java rename to src/main/java/com/megatrex4/ukrainian_dlight/registry/ItemsRegistry.java index 848a39f..5c85935 100644 --- a/src/main/java/com/megatrex4/ukrainian_dlight/item/ModItems.java +++ b/src/main/java/com/megatrex4/ukrainian_dlight/registry/ItemsRegistry.java @@ -1,88 +1,91 @@ -package com.megatrex4.ukrainian_dlight.item; +package com.megatrex4.ukrainian_dlight.registry; import com.megatrex4.ukrainian_dlight.UkrainianDelight; +import com.megatrex4.ukrainian_dlight.item.FoodItemBuilder; +import com.megatrex4.ukrainian_dlight.item.ModFoodComponents; +import com.megatrex4.ukrainian_dlight.item.KrashankyItem; import net.fabricmc.fabric.api.item.v1.FabricItemSettings; import net.minecraft.item.Item; import net.minecraft.registry.Registries; import net.minecraft.registry.Registry; import net.minecraft.util.Identifier; -public class ModItems { +public class ItemsRegistry { // Define items using the ItemBuilder - public static final Item VARENYK = registerItem("varenyk", new ItemBuilder() + public static final Item VARENYK = registerItem("varenyk", new FoodItemBuilder() .food(ModFoodComponents.VARENYK) .build()); - public static final Item BORSCHT = registerItem("borscht", new ItemBuilder() + public static final Item BORSCHT = registerItem("borscht", new FoodItemBuilder() .food(ModFoodComponents.BORSCHT) .maxCount(16) .returnsBowl() .build()); - public static final Item LEAN_BORSCHT = registerItem("lean_borscht", new ItemBuilder() + public static final Item LEAN_BORSCHT = registerItem("lean_borscht", new FoodItemBuilder() .food(ModFoodComponents.LEAN_BORSCHT) .maxCount(16) .returnsBowl() .build()); - public static final Item HORSERADISH = registerItem("horseradish", new ItemBuilder() + public static final Item HORSERADISH = registerItem("horseradish", new FoodItemBuilder() .food(ModFoodComponents.HORSERADISH) .build()); - public static final Item CUCUMBER = registerItem("cucumber", new ItemBuilder() + public static final Item CUCUMBER = registerItem("cucumber", new FoodItemBuilder() .food(ModFoodComponents.CUCUMBER) .build()); - public static final Item CUTTED_CUCUMBER = registerItem("cutted_cucumber", new ItemBuilder() + public static final Item CUTTED_CUCUMBER = registerItem("cutted_cucumber", new FoodItemBuilder() .food(ModFoodComponents.CUTTED_CUCUMBER) .build()); - public static final Item APPLE_SLICE = registerItem("apple_slice", new ItemBuilder() + public static final Item APPLE_SLICE = registerItem("apple_slice", new FoodItemBuilder() .food(ModFoodComponents.APPLE_SLICE) .build()); - public static final Item DRIED_APPLE_SLICE = registerItem("dried_apple_slice", new ItemBuilder() + public static final Item DRIED_APPLE_SLICE = registerItem("dried_apple_slice", new FoodItemBuilder() .food(ModFoodComponents.DRIED_APPLE_SLICE) .build()); - public static final Item HOMEMADE_SAUSAGE = registerItem("homemade_sausage", new ItemBuilder() + public static final Item HOMEMADE_SAUSAGE = registerItem("homemade_sausage", new FoodItemBuilder() .food(ModFoodComponents.HOMEMADE_SAUSAGE) .build()); - public static final Item CHERRY_BERRY = registerItem("cherry_berry", new ItemBuilder() + public static final Item CHERRY_BERRY = registerItem("cherry_berry", new FoodItemBuilder() .food(ModFoodComponents.CHERRY_BERRY) .build()); - public static final Item COTTAGE_CHEESE = registerItem("cottage_cheese", new ItemBuilder() + public static final Item COTTAGE_CHEESE = registerItem("cottage_cheese", new FoodItemBuilder() .food(ModFoodComponents.COTTAGE_CHEESE) .build()); - public static final Item SALO = registerItem("salo", new ItemBuilder() + public static final Item SALO = registerItem("salo", new FoodItemBuilder() .food(ModFoodComponents.SALO) .build()); // Simple items without specifying maxCount, defaults to 64 - public static final Item SALT = registerItem("salt", new ItemBuilder().build()); - public static final Item YEAST = registerItem("yeast", new ItemBuilder().build()); - - public static final Item BLACK_KRASHANKA = registerItem("black_krashanka", new ItemBuilder().build()); - public static final Item BLUE_KRASHANKA = registerItem("blue_krashanka", new ItemBuilder().build()); - public static final Item BROWN_KRASHANKA = registerItem("brown_krashanka", new ItemBuilder().build()); - public static final Item CYAN_KRASHANKA = registerItem("cyan_krashanka", new ItemBuilder().build()); - public static final Item GREEN_KRASHANKA = registerItem("green_krashanka", new ItemBuilder().build()); - public static final Item GRAY_KRASHANKA = registerItem("gray_krashanka", new ItemBuilder().build()); - public static final Item LIGHT_BLUE_KRASHANKA = registerItem("light_blue_krashanka", new ItemBuilder().build()); - public static final Item LIGHT_GRAY_KRASHANKA = registerItem("light_gray_krashanka", new ItemBuilder().build()); - public static final Item LIME_KRASHANKA = registerItem("lime_krashanka", new ItemBuilder().build()); - public static final Item MAGENTA_KRASHANKA = registerItem("magenta_krashanka", new ItemBuilder().build()); - public static final Item ORANGE_KRASHANKA = registerItem("orange_krashanka", new ItemBuilder().build()); - public static final Item PINK_KRASHANKA = registerItem("pink_krashanka", new ItemBuilder().build()); - public static final Item PURPLE_KRASHANKA = registerItem("purple_krashanka", new ItemBuilder().build()); - public static final Item RED_KRASHANKA = registerItem("red_krashanka", new ItemBuilder().build()); - public static final Item WHITE_KRASHANKA = registerItem("white_krashanka", new ItemBuilder().build()); - public static final Item YELLOW_KRASHANKA = registerItem("yellow_krashanka", new ItemBuilder().build()); + public static final Item SALT = registerItem("salt", new FoodItemBuilder().build()); + public static final Item YEAST = registerItem("yeast", new FoodItemBuilder().build()); + + public static final Item BLACK_KRASHANKA = registerItem("black_krashanka", new KrashankyItem(new FabricItemSettings())); + public static final Item BLUE_KRASHANKA = registerItem("blue_krashanka", new KrashankyItem(new FabricItemSettings())); + public static final Item BROWN_KRASHANKA = registerItem("brown_krashanka", new KrashankyItem(new FabricItemSettings())); + public static final Item CYAN_KRASHANKA = registerItem("cyan_krashanka", new KrashankyItem(new FabricItemSettings())); + public static final Item GREEN_KRASHANKA = registerItem("green_krashanka", new KrashankyItem(new FabricItemSettings())); + public static final Item GRAY_KRASHANKA = registerItem("gray_krashanka", new KrashankyItem(new FabricItemSettings())); + public static final Item LIGHT_BLUE_KRASHANKA = registerItem("light_blue_krashanka", new KrashankyItem(new FabricItemSettings())); + public static final Item LIGHT_GRAY_KRASHANKA = registerItem("light_gray_krashanka", new KrashankyItem(new FabricItemSettings())); + public static final Item LIME_KRASHANKA = registerItem("lime_krashanka", new KrashankyItem(new FabricItemSettings())); + public static final Item MAGENTA_KRASHANKA = registerItem("magenta_krashanka", new KrashankyItem(new FabricItemSettings())); + public static final Item ORANGE_KRASHANKA = registerItem("orange_krashanka", new KrashankyItem(new FabricItemSettings())); + public static final Item PINK_KRASHANKA = registerItem("pink_krashanka", new KrashankyItem(new FabricItemSettings())); + public static final Item PURPLE_KRASHANKA = registerItem("purple_krashanka", new KrashankyItem(new FabricItemSettings())); + public static final Item RED_KRASHANKA = registerItem("red_krashanka", new KrashankyItem(new FabricItemSettings())); + public static final Item WHITE_KRASHANKA = registerItem("white_krashanka", new KrashankyItem(new FabricItemSettings())); + public static final Item YELLOW_KRASHANKA = registerItem("yellow_krashanka", new KrashankyItem(new FabricItemSettings())); // Register items diff --git a/src/main/java/com/megatrex4/ukrainian_dlight/registry/PatternRegistry.java b/src/main/java/com/megatrex4/ukrainian_dlight/registry/PatternRegistry.java new file mode 100644 index 0000000..d91c429 --- /dev/null +++ b/src/main/java/com/megatrex4/ukrainian_dlight/registry/PatternRegistry.java @@ -0,0 +1,22 @@ +package com.megatrex4.ukrainian_dlight.registry; + +import net.minecraft.util.Identifier; + +public class PatternRegistry { + + private final Identifier id; + private final String texturePath; + + public PatternRegistry(String patternName) { + this.id = new Identifier("ukrainian_dlight", patternName); + this.texturePath = "assets/ukrainian_delight/textures/item/krashanky/patterns/" + patternName + ".png"; + } + + public Identifier getId() { + return id; + } + + public String getTexturePath() { + return texturePath; + } +} diff --git a/src/main/java/com/megatrex4/ukrainian_dlight/recipe/ModRecipes.java b/src/main/java/com/megatrex4/ukrainian_dlight/registry/RecipesRegistry.java similarity index 79% rename from src/main/java/com/megatrex4/ukrainian_dlight/recipe/ModRecipes.java rename to src/main/java/com/megatrex4/ukrainian_dlight/registry/RecipesRegistry.java index 9c83a5a..01e06f1 100644 --- a/src/main/java/com/megatrex4/ukrainian_dlight/recipe/ModRecipes.java +++ b/src/main/java/com/megatrex4/ukrainian_dlight/registry/RecipesRegistry.java @@ -1,13 +1,15 @@ -package com.megatrex4.ukrainian_dlight.recipe; +package com.megatrex4.ukrainian_dlight.registry; import com.megatrex4.ukrainian_dlight.UkrainianDelight; +import com.megatrex4.ukrainian_dlight.recipe.BrewingRecipe; +import com.megatrex4.ukrainian_dlight.recipe.BrewingRecipeSerializer; import net.minecraft.recipe.RecipeSerializer; import net.minecraft.recipe.RecipeType; import net.minecraft.registry.Registries; import net.minecraft.registry.Registry; import net.minecraft.util.Identifier; -public class ModRecipes { +public class RecipesRegistry { public static final RecipeType BREWING = RecipeType.register(new Identifier("ukrainian_delight", "brewing").toString()); public static final RecipeSerializer BREWING_RECIPE_SERIALIZER = new BrewingRecipeSerializer(); diff --git a/src/main/java/com/megatrex4/ukrainian_dlight/screen/ModScreenHandlers.java b/src/main/java/com/megatrex4/ukrainian_dlight/registry/ScreenHandlersRegistry.java similarity index 50% rename from src/main/java/com/megatrex4/ukrainian_dlight/screen/ModScreenHandlers.java rename to src/main/java/com/megatrex4/ukrainian_dlight/registry/ScreenHandlersRegistry.java index 9486978..49b4af7 100644 --- a/src/main/java/com/megatrex4/ukrainian_dlight/screen/ModScreenHandlers.java +++ b/src/main/java/com/megatrex4/ukrainian_dlight/registry/ScreenHandlersRegistry.java @@ -1,17 +1,27 @@ -package com.megatrex4.ukrainian_dlight.screen; +package com.megatrex4.ukrainian_dlight.registry; import com.megatrex4.ukrainian_dlight.UkrainianDelight; +import com.megatrex4.ukrainian_dlight.screen.BrewingKegScreenHandler; +import com.megatrex4.ukrainian_dlight.screen.PysankersTableScreenHandler; import net.fabricmc.fabric.api.screenhandler.v1.ExtendedScreenHandlerType; +import net.minecraft.inventory.SimpleInventory; import net.minecraft.registry.Registries; import net.minecraft.registry.Registry; +import net.minecraft.screen.ScreenHandlerContext; import net.minecraft.screen.ScreenHandlerType; import net.minecraft.util.Identifier; -public class ModScreenHandlers { +public class ScreenHandlersRegistry { public static final ScreenHandlerType BREWING_KEG_SCREEN_HANDLER = Registry.register(Registries.SCREEN_HANDLER, new Identifier(UkrainianDelight.MOD_ID, "brewing_keg_screen_handler"), new ExtendedScreenHandlerType<>(BrewingKegScreenHandler::new)); + + //register PYSANKERS_TABLE + public static final ScreenHandlerType PYSANKERS_TABLE_SCREEN_HANDLER = + Registry.register(Registries.SCREEN_HANDLER, new Identifier(UkrainianDelight.MOD_ID, "pysankers_table_screen_handler"), + new ExtendedScreenHandlerType<>((syncId, inv, buf) -> new PysankersTableScreenHandler(syncId, inv, null, new SimpleInventory(PysankersTableScreenHandler.INVENTORY_SIZE), ScreenHandlerContext.EMPTY))); + public static void registerModScreenHandlers() { UkrainianDelight.LOGGER.info("Registering Mod Screen Handlers for " + UkrainianDelight.MOD_ID); // If there are more screen handlers, register them here diff --git a/src/main/java/com/megatrex4/ukrainian_dlight/registry/ScreensRegistry.java b/src/main/java/com/megatrex4/ukrainian_dlight/registry/ScreensRegistry.java new file mode 100644 index 0000000..dbba606 --- /dev/null +++ b/src/main/java/com/megatrex4/ukrainian_dlight/registry/ScreensRegistry.java @@ -0,0 +1,12 @@ +package com.megatrex4.ukrainian_dlight.registry; + +import com.megatrex4.ukrainian_dlight.screen.BrewingKegScreen; +import com.megatrex4.ukrainian_dlight.screen.PysankersTableScreen; +import net.fabricmc.fabric.api.client.screenhandler.v1.ScreenRegistry; + +public class ScreensRegistry { + public static void registerScreens() { + ScreenRegistry.register(ScreenHandlersRegistry.BREWING_KEG_SCREEN_HANDLER, BrewingKegScreen::new); + ScreenRegistry.register(ScreenHandlersRegistry.PYSANKERS_TABLE_SCREEN_HANDLER, PysankersTableScreen::new); + } +} diff --git a/src/main/java/com/megatrex4/ukrainian_dlight/registry/ModTags.java b/src/main/java/com/megatrex4/ukrainian_dlight/registry/TagsRegistry.java similarity index 97% rename from src/main/java/com/megatrex4/ukrainian_dlight/registry/ModTags.java rename to src/main/java/com/megatrex4/ukrainian_dlight/registry/TagsRegistry.java index fdf0304..7e6629b 100644 --- a/src/main/java/com/megatrex4/ukrainian_dlight/registry/ModTags.java +++ b/src/main/java/com/megatrex4/ukrainian_dlight/registry/TagsRegistry.java @@ -8,7 +8,7 @@ import net.minecraft.util.Identifier; import net.minecraft.registry.RegistryKeys; -public class ModTags { +public class TagsRegistry { public static final TagKey LIGHT_DRINK; public static final TagKey MID_DRINK; public static final TagKey STRONG_DRINK; diff --git a/src/main/java/com/megatrex4/ukrainian_dlight/initialize/CustomizeLootTables.java b/src/main/java/com/megatrex4/ukrainian_dlight/registry/initialize/CustomizeLootTables.java similarity index 84% rename from src/main/java/com/megatrex4/ukrainian_dlight/initialize/CustomizeLootTables.java rename to src/main/java/com/megatrex4/ukrainian_dlight/registry/initialize/CustomizeLootTables.java index e086445..aca8fb9 100644 --- a/src/main/java/com/megatrex4/ukrainian_dlight/initialize/CustomizeLootTables.java +++ b/src/main/java/com/megatrex4/ukrainian_dlight/registry/initialize/CustomizeLootTables.java @@ -1,6 +1,6 @@ -package com.megatrex4.ukrainian_dlight.initialize; +package com.megatrex4.ukrainian_dlight.registry.initialize; -import com.megatrex4.ukrainian_dlight.item.ModItems; +import com.megatrex4.ukrainian_dlight.registry.ItemsRegistry; import net.fabricmc.fabric.api.loot.v2.LootTableEvents; import net.minecraft.loot.LootPool; import net.minecraft.loot.condition.RandomChanceLootCondition; @@ -18,7 +18,7 @@ public static void register() { LootTableEvents.MODIFY.register((resourceManager, lootManager, id, tableBuilder, source) -> { if (id.equals(CHERRY_TREE_LOOT_TABLE_ID)) { LootPool.Builder poolBuilder = LootPool.builder() - .with(ItemEntry.builder(ModItems.CHERRY_BERRY)) + .with(ItemEntry.builder(ItemsRegistry.CHERRY_BERRY)) .conditionally(RandomChanceLootCondition.builder(0.12f)) // 20% chance .apply(SetCountLootFunction.builder(ConstantLootNumberProvider.create(1)).build()); diff --git a/src/main/java/com/megatrex4/ukrainian_dlight/registry/manager/PatternManager.java b/src/main/java/com/megatrex4/ukrainian_dlight/registry/manager/PatternManager.java new file mode 100644 index 0000000..76a0bf1 --- /dev/null +++ b/src/main/java/com/megatrex4/ukrainian_dlight/registry/manager/PatternManager.java @@ -0,0 +1,57 @@ +package com.megatrex4.ukrainian_dlight.registry.manager; + +import com.megatrex4.ukrainian_dlight.registry.PatternRegistry; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NbtCompound; +import net.minecraft.nbt.NbtList; + +import java.util.HashMap; +import java.util.Map; + +public class PatternManager { + private static final Map patterns = new HashMap<>(); + + static { + // Define all patterns here + patterns.put("border", new PatternRegistry("border")); + patterns.put("circle", new PatternRegistry("circle")); + patterns.put("cross", new PatternRegistry("cross")); + patterns.put("diagonal_left", new PatternRegistry("diagonal_left")); + patterns.put("diagonal_right", new PatternRegistry("diagonal_right")); + patterns.put("flower", new PatternRegistry("flower")); + patterns.put("globe", new PatternRegistry("globe")); + patterns.put("gradient", new PatternRegistry("gradient")); + patterns.put("gradient_up", new PatternRegistry("gradient_up")); + patterns.put("half_vertical", new PatternRegistry("half_vertical")); + patterns.put("half_vertical_right", new PatternRegistry("half_vertical_right")); + patterns.put("piglin", new PatternRegistry("piglin")); + patterns.put("rhombus", new PatternRegistry("rhombus")); + patterns.put("small_stripes", new PatternRegistry("small_stripes")); + patterns.put("straight_cross", new PatternRegistry("straight_cross")); + patterns.put("stripe_bottom", new PatternRegistry("stripe_bottom")); + patterns.put("stripe_center", new PatternRegistry("stripe_center")); + patterns.put("stripe_downleft", new PatternRegistry("stripe_downleft")); + patterns.put("stripe_downright", new PatternRegistry("stripe_downright")); + patterns.put("stripe_middle", new PatternRegistry("stripe_middle")); + patterns.put("stripe_top", new PatternRegistry("stripe_top")); + patterns.put("triangles_bottom", new PatternRegistry("triangles_bottom")); + patterns.put("triangles_top", new PatternRegistry("triangles_top")); + patterns.put("triangle_bottom", new PatternRegistry("triangle_bottom")); + patterns.put("triangle_top", new PatternRegistry("triangle_top")); + } + + public static PatternRegistry getPatternForItem(ItemStack itemStack) { + if (itemStack.hasNbt()) { + NbtCompound nbt = itemStack.getNbt(); + if (nbt != null && nbt.contains("Patterns", NbtCompound.LIST_TYPE)) { + NbtList patternList = nbt.getList("Patterns", NbtCompound.COMPOUND_TYPE); + if (!patternList.isEmpty()) { + NbtCompound patternData = patternList.getCompound(0); // Assumes the first pattern is the one to use + String patternName = patternData.getString("Pattern"); + return patterns.getOrDefault(patternName, patterns.get("border")); // Default to "border" if not found + } + } + } + return patterns.get("border"); // Default to "border" if no NBT data or pattern not found + } +} diff --git a/src/main/java/com/megatrex4/ukrainian_dlight/screen/BrewingKegScreenHandler.java b/src/main/java/com/megatrex4/ukrainian_dlight/screen/BrewingKegScreenHandler.java index 18b9c8d..d1f69c3 100644 --- a/src/main/java/com/megatrex4/ukrainian_dlight/screen/BrewingKegScreenHandler.java +++ b/src/main/java/com/megatrex4/ukrainian_dlight/screen/BrewingKegScreenHandler.java @@ -2,11 +2,10 @@ import com.megatrex4.ukrainian_dlight.block.entity.BrewingKegBlockEntity; import com.megatrex4.ukrainian_dlight.block.entity.inventory.BrewingKegResultSlot; +import com.megatrex4.ukrainian_dlight.registry.ScreenHandlersRegistry; import com.megatrex4.ukrainian_dlight.util.FluidStack; -import net.minecraft.block.entity.BlockEntity; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerInventory; -import net.minecraft.fluid.Fluid; import net.minecraft.inventory.Inventory; import net.minecraft.item.ItemStack; import net.minecraft.item.Items; @@ -15,11 +14,6 @@ import net.minecraft.screen.PropertyDelegate; import net.minecraft.screen.ScreenHandler; import net.minecraft.screen.slot.Slot; -import net.minecraft.text.Text; -import net.minecraft.util.Formatting; - -import java.util.ArrayList; -import java.util.List; public class BrewingKegScreenHandler extends ScreenHandler { @@ -47,7 +41,7 @@ public BrewingKegScreenHandler(int syncId, PlayerInventory tileEntity, PacketByt } public BrewingKegScreenHandler(int syncId, PlayerInventory playerInventory, BrewingKegBlockEntity blockEntity, PropertyDelegate arrayPropertyDelegate) { - super(ModScreenHandlers.BREWING_KEG_SCREEN_HANDLER, syncId); + super(ScreenHandlersRegistry.BREWING_KEG_SCREEN_HANDLER, syncId); checkSize(blockEntity, INVENTORY_SIZE); // Corrected type casting this.tileEntity = blockEntity; // Corrected type casting diff --git a/src/main/java/com/megatrex4/ukrainian_dlight/screen/ModScreens.java b/src/main/java/com/megatrex4/ukrainian_dlight/screen/ModScreens.java deleted file mode 100644 index a3f1563..0000000 --- a/src/main/java/com/megatrex4/ukrainian_dlight/screen/ModScreens.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.megatrex4.ukrainian_dlight.screen; - -import net.fabricmc.fabric.api.client.screenhandler.v1.ScreenRegistry; - -public class ModScreens { - public static void registerScreens() { - ScreenRegistry.register(ModScreenHandlers.BREWING_KEG_SCREEN_HANDLER, BrewingKegScreen::new); - } -} diff --git a/src/main/java/com/megatrex4/ukrainian_dlight/screen/PysankersTableScreen.java b/src/main/java/com/megatrex4/ukrainian_dlight/screen/PysankersTableScreen.java new file mode 100644 index 0000000..8cf609c --- /dev/null +++ b/src/main/java/com/megatrex4/ukrainian_dlight/screen/PysankersTableScreen.java @@ -0,0 +1,74 @@ +package com.megatrex4.ukrainian_dlight.screen; + +import com.megatrex4.ukrainian_dlight.registry.PatternRegistry; +import com.megatrex4.ukrainian_dlight.registry.manager.PatternManager; +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; +import net.minecraft.client.gui.DrawContext; +import net.minecraft.client.gui.screen.ingame.HandledScreen; +import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.screen.slot.Slot; +import net.minecraft.text.Text; +import net.minecraft.util.Identifier; + +@Environment(EnvType.CLIENT) +public class PysankersTableScreen extends HandledScreen { + private static final Identifier TEXTURE = new Identifier("ukrainian_delight", "textures/gui/container/pysankers_table.png"); + + public PysankersTableScreen(PysankersTableScreenHandler handler, PlayerInventory inventory, Text title) { + super(handler, inventory, title); + this.backgroundWidth = 176; + this.backgroundHeight = 166; + } + + @Override + protected void init() { + super.init(); + } + + @Override + protected void drawBackground(DrawContext context, float delta, int mouseX, int mouseY) { + // Draw the main GUI texture + context.drawTexture(TEXTURE, this.x, this.y, 0, 0, this.backgroundWidth, this.backgroundHeight); + + // Get the slots from the handler + Slot krashankaSlot = this.handler.getSlot(0); + Slot dyeSlot = this.handler.getSlot(1); + Slot patternSlot = this.handler.getSlot(2); + Slot outputSlot = this.handler.getSlot(3); + + // Draw slot backgrounds + if (!krashankaSlot.hasStack()) { + context.drawTexture(TEXTURE, this.x + krashankaSlot.x, this.y + krashankaSlot.y, this.backgroundWidth, 0, 16, 16); + } + if (!dyeSlot.hasStack()) { + context.drawTexture(TEXTURE, this.x + dyeSlot.x, this.y + dyeSlot.y, this.backgroundWidth + 16, 0, 16, 16); + } + if (!patternSlot.hasStack()) { + context.drawTexture(TEXTURE, this.x + patternSlot.x, this.y + patternSlot.y, this.backgroundWidth + 32, 0, 16, 16); + } + + // Draw the pattern if available + ItemStack patternStack = patternSlot.getStack(); + if (!patternStack.isEmpty()) { + // Get the pattern ID + PatternRegistry patternRegistry = PatternManager.getPatternForItem(patternStack); + if (patternRegistry != null) { + Identifier patternTexture = new Identifier("ukrainian_dlight", "textures/item/krashanky/patterns/" + patternRegistry.getId().getPath() + ".png"); + + // Render the pattern texture + context.drawTexture(patternTexture, this.x + patternSlot.x + 1, this.y + patternSlot.y + 1, 0, 0, 16, 16); + } + } + } + + @Override + public void render(DrawContext context, int mouseX, int mouseY, float delta) { + this.renderBackground(context); + super.render(context, mouseX, mouseY, delta); + this.drawMouseoverTooltip(context, mouseX, mouseY); + } +} + + diff --git a/src/main/java/com/megatrex4/ukrainian_dlight/screen/PysankersTableScreenHandler.java b/src/main/java/com/megatrex4/ukrainian_dlight/screen/PysankersTableScreenHandler.java new file mode 100644 index 0000000..6f6725d --- /dev/null +++ b/src/main/java/com/megatrex4/ukrainian_dlight/screen/PysankersTableScreenHandler.java @@ -0,0 +1,151 @@ +package com.megatrex4.ukrainian_dlight.screen; + +import com.megatrex4.ukrainian_dlight.block.custom.PysankerTableBlock; +import com.megatrex4.ukrainian_dlight.registry.PatternRegistry; +import com.megatrex4.ukrainian_dlight.registry.ScreenHandlersRegistry; +import com.megatrex4.ukrainian_dlight.registry.manager.PatternManager; +import net.fabricmc.fabric.api.util.NbtType; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.inventory.Inventory; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NbtCompound; +import net.minecraft.nbt.NbtList; +import net.minecraft.registry.entry.RegistryEntry; +import net.minecraft.screen.Property; +import net.minecraft.screen.ScreenHandler; +import net.minecraft.screen.ScreenHandlerContext; +import net.minecraft.screen.slot.Slot; +import net.minecraft.screen.slot.SlotActionType; +import net.minecraft.util.Identifier; + +import java.util.List; + +public class PysankersTableScreenHandler extends ScreenHandler { + private final Inventory inventory; + private final ScreenHandlerContext context; + + // Slot indices + public static final int KRASHANKA_SLOT = 0; + public static final int DYE_SLOT = 1; + public static final int PATTERN_SLOT = 2; + public static final int OUTPUT_SLOT = 3; + + // Inventory size + public static final int INVENTORY_SIZE = 4; // 4 slots for krashanka, dye, pattern, and output + + private final Property selectedPattern; + private List> patterns; + private Runnable inventoryChangeListener; + + public PysankersTableScreenHandler(int syncId, PlayerInventory playerInventory, PysankerTableBlock block, Inventory inventory, ScreenHandlerContext context) { + super(ScreenHandlersRegistry.PYSANKERS_TABLE_SCREEN_HANDLER, syncId); + this.inventory = inventory; + checkSize(inventory, INVENTORY_SIZE); + this.selectedPattern = Property.create(); + this.patterns = List.of(); + this.inventoryChangeListener = () -> {}; + + this.context = context; + + // Add slots for the Pysankers Table + this.addSlot(new Slot(inventory, KRASHANKA_SLOT, 13, 26)); // Input slot for krashanka + this.addSlot(new Slot(inventory, DYE_SLOT, 33, 26)); // Dye slot + this.addSlot(new Slot(inventory, PATTERN_SLOT, 23, 45)); // Pattern slot + this.addSlot(new Slot(inventory, OUTPUT_SLOT, 143, 58)); // Output slot + + addPlayerInventory(playerInventory); + addPlayerHotbar(playerInventory); + } + + @Override + public boolean canUse(PlayerEntity player) { + return this.inventory.canPlayerUse(player); + } + + // Example method for applying a pattern to krashanka + public void applyPattern(ItemStack krashanka, ItemStack patternItem) { + Identifier patternId = PatternManager.getPatternForItem(patternItem).getId(); + NbtCompound nbt = krashanka.getOrCreateNbt(); + NbtList patterns; + if (nbt.contains("Patterns", NbtType.LIST)) { + patterns = nbt.getList("Patterns", NbtType.COMPOUND); + } else { + patterns = new NbtList(); + nbt.put("Patterns", patterns); + } + NbtCompound patternData = new NbtCompound(); + patternData.putString("Pattern", patternId.toString()); + patterns.add(patternData); + krashanka.setNbt(nbt); + this.slots.get(OUTPUT_SLOT).setStack(krashanka.copy()); // Update output slot + } + + + @Override + public ItemStack quickMove(PlayerEntity player, int slotId) { + Slot slot = this.slots.get(slotId); + if (slot == null || !slot.hasStack()) { + return ItemStack.EMPTY; + } + + ItemStack stack = slot.getStack(); + ItemStack stackCopy = stack.copy(); + + if (slotId < INVENTORY_SIZE) { + // Move from container to player inventory + if (!this.insertItem(stack, INVENTORY_SIZE, INVENTORY_SIZE + 36, true)) { + return ItemStack.EMPTY; + } + } else { + // Move from player inventory to container + if (!this.insertItem(stack, 0, INVENTORY_SIZE, false)) { + return ItemStack.EMPTY; + } + } + + if (stack.isEmpty()) { + slot.setStack(ItemStack.EMPTY); + } else { + slot.markDirty(); + } + + return stackCopy; + } + + + @Override + public void onSlotClick(int slotId, int button, SlotActionType actionType, PlayerEntity player) { + if (slotId >= 0 && slotId < this.slots.size()) { + Slot slot = this.slots.get(slotId); + if (slot != null) { + if (slotId == PATTERN_SLOT) { + ItemStack patternItem = slot.getStack(); + ItemStack krashankaItem = this.getSlot(KRASHANKA_SLOT).getStack(); + + // Apply the pattern to the krashanka item + applyPattern(krashankaItem, patternItem); + this.slots.get(OUTPUT_SLOT).setStack(krashankaItem.copy()); // Update output slot + } else { + super.onSlotClick(slotId, button, actionType, player); // Call parent method for default handling + } + } + } + } + + private void addPlayerInventory(PlayerInventory playerInventory) { + // Add slots for the player's inventory + for (int i = 0; i < 3; ++i) { + for (int l = 0; l < 9; ++l) { + this.addSlot(new Slot(playerInventory, l + i * 9 + 9, 8 + l * 18, 84 + i * 18)); + } + } + } + + private void addPlayerHotbar(PlayerInventory playerInventory) { + // Add slots for the player's hotbar + for (int i = 0; i < 9; ++i) { + this.addSlot(new Slot(playerInventory, i, 8 + i * 18, 142)); + } + } +} diff --git a/src/main/java/com/megatrex4/ukrainian_dlight/util/StatusEffectUtil.java b/src/main/java/com/megatrex4/ukrainian_dlight/util/StatusEffectUtil.java index 19e66df..e52ed24 100644 --- a/src/main/java/com/megatrex4/ukrainian_dlight/util/StatusEffectUtil.java +++ b/src/main/java/com/megatrex4/ukrainian_dlight/util/StatusEffectUtil.java @@ -1,11 +1,9 @@ package com.megatrex4.ukrainian_dlight.util; -import com.megatrex4.ukrainian_dlight.registry.ModTags; +import com.megatrex4.ukrainian_dlight.registry.TagsRegistry; import net.minecraft.entity.effect.StatusEffectInstance; import net.minecraft.entity.effect.StatusEffects; import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.util.Identifier; -import net.minecraft.world.World; import java.util.Random; @@ -21,19 +19,19 @@ public static void applySecondaryEffects(PlayerEntity player, StatusEffectInstan int duration = mainEffect.getDuration(); int amplifier = mainEffect.getAmplifier() + 1; - if (player.getInventory().contains(ModTags.LIGHT_DRINK)) { + if (player.getInventory().contains(TagsRegistry.LIGHT_DRINK)) { applyWeakness(player, duration / 2, (int) (amplifier * 1.3)); applyNausea(player, duration / 2, (int) (amplifier * 1.3)); if (RANDOM.nextFloat() < 0.2) { applyBlindness(player, (int) (duration * 0.7), (int) (amplifier * 1.3)); } - } else if (player.getInventory().contains(ModTags.MID_DRINK)) { + } else if (player.getInventory().contains(TagsRegistry.MID_DRINK)) { applyWeakness(player, (int) (duration * 0.7), (int) (amplifier * 1.5)); applyNausea(player, (int) (duration * 0.7), (int) (amplifier * 1.5)); if (RANDOM.nextFloat() < 0.7) { applyBlindness(player, (int) (duration * 0.7), (int) (amplifier * 1.5)); } - } else if (player.getInventory().contains(ModTags.STRONG_DRINK)) { + } else if (player.getInventory().contains(TagsRegistry.STRONG_DRINK)) { applyWeakness(player, (int) (duration * 0.9), (int) (amplifier * 1.7)); applyNausea(player, (int) (duration * 0.9), (int) (amplifier * 1.7)); if (RANDOM.nextFloat() < 0.8) { diff --git a/src/main/resources/assets/ukrainian_delight/models/item/krashanky_item.json b/src/main/resources/assets/ukrainian_delight/models/item/krashanky_item.json new file mode 100644 index 0000000..7adc85e --- /dev/null +++ b/src/main/resources/assets/ukrainian_delight/models/item/krashanky_item.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "ukrainian_dlight:item/krashanky" + } +} diff --git a/src/main/resources/assets/ukrainian_delight/textures/gui/container/pysankers_table.png b/src/main/resources/assets/ukrainian_delight/textures/gui/container/pysankers_table.png new file mode 100644 index 0000000000000000000000000000000000000000..cdeff581daa04704b0ab5c629e11515558ab7bb6 GIT binary patch literal 1836 zcmb7EYfzKd7Cm3cOOyZ+N~DUh5X-9q8bydSUjPZA1yU@PD{vc1712V9)PN!;h>^Bx z5+xQNpusu<<)MK9is6zgP=ZvjTKwb@Kq7B~LNO@M2KCzBncg4w%$(V0)|s`>+H3DQ z-?4+3CdSsr000w~zi$Wtkl_dcJk}5*_T}#~1au4|kO6>PymU4S0{~Xb@@0IQ+^*Bm zxwczLxSow!!IES4L`=Yi_d=y~%mL=Y3f`#Wr|IzH?yx&Dzm2(nM`K!LVVwhIN=h4 zAR9DedcD3zqT^~ne$g@kUBQ&7U+bzjqHEQU1JM+5*mt!>-q>0tpz6m z`P3;mb4PW&iUdir#q??Nj&NE>cw5`?<9737KZ!d0mPDc97@_Fh+Wwyp#?W3~X;iJf z)*I-38xP*uJnPcZ@A7+VHy-p4s*kVSs8~hx1LoP;*+sM6H*U_4=3c!xz%>cJR~4*S zhYaoajJ&x#c!w!F29lV=88mgkLaOk5)!1^k2><&7^_&4Kf#FtVqwX#QH+bg{7BmT){C@nTSdRg$!VX6M z3J^tFb?mo-uNljImkBIlnz`}uTT0Ce(XQvPg+nHJ-~{*u5&%~mK&e)Ovqoy+esz7h zI+BikPXs3Rt8+6g5sxe+u;pNca_~yn7t}Zx(==(nv+Q?>z3d3dYLnE(^Sjo64sS1I z5GnAoNUrG#uvQA>78#@Rj%_Ho&K&l@f5B^iq;oKWmjHVRP=E{#q(DFfY?Od#!2Cb} zFf(j6${teT4M4RG^yFGmZlZASRPFOAw_~Gm3Y;PW_2j|wo3QKLV>wumOOgI_=!M?Q+w|hl}@~SB9!Yc~bg% z0>z+P`bO*`3;Y$3(I~K4N}&q{*oB~uUW;}fW~1OE6xDihn!l~!@z*cfB~?ugKb-ci z17USr$#P9+XY!Y89cn241@&(}=G@G?0|sVW~*S zgN!yUX*Kb3&U{658A8Fp^MGpJq;DZJ5Cq|YEW>fi z=-YBj1yAAQZZfu@(WGp)=PEf&vhJJQoCy(J`}o=8g-&Q9=zo34(=1d_qOuTA*fd_sUjTThjhk8IqMYLx-8FPUbzs3gzKnr4Nnwr zEhGP(3ozJ>Ap?O;snd0yXE#A7cXDl%J6(TGk|ovhd-0iq^pqs+_@hSQMG?T_aJXh{ zqbo#WzC?F->Q{;o@h=Fi~3XBr25i=by+^hqixnohUDz&8l0 z_QQjD|L)*c|6^v4ioI4j9W}ZK4ige(H}w2>`th8N$yWc%LV;cJ&H2^Sd!Mz4`N+Sl zpAFCtH+IeR`fNAy9<~)I4MK-2pJsa)M$e9pvQL?xC}TFbT;l6KW_*q!=ig%CW&b@! zk#6I0FoJ`{Mm-Obf^t?2`hcS&ph$-U|KB28E}({y3b*Kq5Aqh7tgS)5CElDPe*mOn B)zkn0 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/ukrainian_delight/textures/item/krashanky/black_krashanka.png b/src/main/resources/assets/ukrainian_delight/textures/item/krashanky/black_krashanka.png index 9e509ea3c0b47bf45d620cb14f437a6083b88a6f..8a512950ee12f139a45f0e7a3bd3b9dbfc86bcb0 100644 GIT binary patch delta 349 zcmcbhuv>Y?$S<&R$xklLP0cHD%u7x! zF3B${wo|YvN=dVFN=%2cax(1_Q}UBity1!nGgGV(S`!UYQj;tU5_K&SEs}K2j7&^) zEmBM^bd%B&4b3bqO%hX$lWg=sh5?OGfUqFO%IG6Z!EnIjGQL}rC-aFi7bliYUdty( voUh*ViJ=6C0Kbi(LUD;}S&3D0Mq*xiYKpCr{$y|dIF`;&wLd4X;Z;K6SMml-&g55{tk1_b`73YB WWO4rMlXnY5vQ*Xig-wf*p7&eMjK_L=VI1t3aazUbkS&zrxqnaq)4b4i~G)h-$IMMNVylZ9cacn2M ziNv8Ckhr6&LP%VS#ECz^0WL`N4F-s0 zy)DXR+G3FmMQf7gfL4_2Ym=PueNm~Q7$jMs{qoJXnwms`cE|4FUfveNWb>pDw@+fImGk*cT|FjsbfbcHX@i}gW9$_|7j4eh+?|id2b#J?gDLCRXNr5@p#-Cn=M%k zbi?<39TS}p1PD|fXBC^Eth~Bl=!lXRNnRx~Q)@;R%EKzqKm_A{- zZnSWn(-au-2A3ZeqiOJn>tZBQkyRyNjRu_shx#nmDnw;zI7+bA~`Ov zotYpytP+6+U9%AO;NOR?87{^C+t{QS&!9aSCGqijsA2RCLJg1F?l~xUCSnzPDmdaa zmPN`S;Ur}Pq378^Q=2lacMNsI34iZe* zp(A+cI()%)t4QEOW23XIwW8fjRQS$VC>mJmmXvhl=4J`U|K&JuUzM literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/ukrainian_delight/textures/item/krashanky/patterns/circle.png b/src/main/resources/assets/ukrainian_delight/textures/item/krashanky/patterns/circle.png new file mode 100644 index 0000000000000000000000000000000000000000..1bd8519269df05b0e8993d9e2dc91566155904b5 GIT binary patch literal 1813 zcmcgtO>f*p7&Zcx5)_Gw3vfV|D-d6^9*;lP9%`bH4P+4;qI9K(6CKZtcde{F#&)us z+={p$ap(b|3UL96D?b1Z`~yz>3An(KTY2sEx(P}@)I(Qmdu%`RywCf-k7vHx+x>8T z?Ugl6)7FPOgMGMOf#ZeCm*D)5_04B+c`o1iwA8fcU#yR(wC}!uNz*QUn~V>tgVD#7 ztF*_2iezt*=783;Ya5H4@k3eZk(?x1X#D-_Z-$5Fuhm2?pr4KIap{n#}022ve{#%3K*KN#)lTdI(H(6bQ7*wXtj zay;S(!8K5*HCnu|-{1Z+`}aD@0892OqS-;4U<#Rh3iIoX_XIx!qI6#I%AS zFflO+L4ZKzNmj81%F3%NhJh@3k>pjPGQDPGkvghE1Eel{zSt~m(%@E=3htUkrT+t{WUFQFqPlKA92)Uw7Fp_W5!{~Q!NBUr^A3KpEksz@0m zoTO|b%{-eJdRIoerDm#tz@W}17LG)| z?AyrpnGBe4eD0Ig{DI;}b!Y4OOP349f#Y6Oi?~rNT?cuBaAbLojUqt=!nPeqVqx2p zY{m9Tk-&$>W@lMzRRS0TH+Cb5ISL}tM-Fy;6a;aE0z0;a?PJ?-$i z_ic->?vjP`MIK|LNRayx%Ml|cG{<}ag{Dz4_Nked^z-9yb~ z-cNkVjvp+YW9E4-@e%WEXr=2!C~^Z2T4_Z-ar?aA?@~W6{Q@&Sj`X%He9E$kgq71Y z9zU5!^W{?I6HLae*UP2D%>SFOd3R=Qg+?}yV8O13-BtlN-DV>*s8a!3$+JJc^(t&b zuMG#AWB&^O_wL<|r+>P`{s&tJ72%lPy>Sh< McLzVefAfp~0Bd$ItpET3 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/ukrainian_delight/textures/item/krashanky/patterns/cross.png b/src/main/resources/assets/ukrainian_delight/textures/item/krashanky/patterns/cross.png new file mode 100644 index 0000000000000000000000000000000000000000..fb0646da29111bded982275464e83b131b7cef2f GIT binary patch literal 1836 zcmcgt&x_%oKPMGszF{{T-OJc(CP1YtalFX?ogk=Y;Y!KRZ`lCQq^z4yLU z-PqiC>-@PF&nb#>zQ5kvg6jo1o_*>Joc}Oyz5|!D+4|dsqCEXvbv&Wm`s@WoIrB+8 z+%C5VR|u1dPPq()K1(t{E6URHETe2klxiqOaT;j9fBT)L#yrrjy8}GPR>e48Kgh+k zgN-3O*kL}`mS0zwW&{WlQBrl5OwxkP0dOnp#83oj_Zu0;=1CO?6e~LiKeM zF^o;M3nQmvdA|ReYGKPZaL2G*WMP6$;<{?{(;!^VBeKq%djj22vqE+C7q$PxVT{GiGt;ER>m?_D@Gd1-7?TX>O6-eYiZM>sS{Mp zn9nK^x;#ElJXb zD9W`xNTVspspw+3p9y126mmCbVr>s(UaYdo$Z9TVDf6L}lSQXC7m`)W)vp^$K#(2+2*bfl?m8Of@g$Q%NLI=fae7?6Hilr&|c-wQOzS&w5*x-4=;)HM;N zkw8p1HVR!ULf8`A#Xb#f$6d_tNw!;cwwgb8IhPDL{*6j87omqK@~9W0j^#MW4m;h7XNSj-L-Py)pGPlbR8DCw zRz^^}hnmZ{pZJ3AJy<&SEZz;7gY1ZVsLLFTJO`TUa~^eUpGJ`YL(VmwlzxgCA4ht_ z&Binx30OG|?eUX&G++Mj$r#moId_=xU-Q-Pj;*cG$odg1*wwJzD&VHwY(xrm%3&+< z(jTpA8|wE~hTa8scyzS<XZ^K}-q&xu`@uioqeTn= literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/ukrainian_delight/textures/item/krashanky/patterns/diagonal_left.png b/src/main/resources/assets/ukrainian_delight/textures/item/krashanky/patterns/diagonal_left.png new file mode 100644 index 0000000000000000000000000000000000000000..359a2a6a2fb54d8996a2c2efb83a22e43ae26cc3 GIT binary patch literal 1995 zcmcgtJCEE{6m|lFBq$1j20{ws6ydRVeEk|fv`)0yS(ri0vf3RfOPb`qJY(&Qud%&5 zGh3!Z5gif|qM@LmfgiBNiXs(4LO@T4C?X{VKY-(TIJ;=FiBd2c+t>DYzw@1!&*vNK zAD%yV>71e{=UdIjCR{JV@#>kE;QYw=@-|$~rp-@tMS11*@;Ie@{mmPS^0FOwwu|ld z#{rXr8sUXy>6RKY`5X0C| zU0B(5)ARi$)x@Ty@EjKMl-fJPI}&AIyxwU8wbnA`NtXI2_i7R!wGI z-SB;1$EI$Y2oNYACj}XyB)>9eXo#F;aazPOQAR3`Fb zZ4ca-1!N&Q?~GHSZ;D**W=yQ@fy^tVH)*h%2~xE1 zJ+eVGNFhQEvSuUf!M_7pGu#0C?_(>#cnWPx9!KNjP{ZgLW?&itHjhD}W;iLxQ^A}C zk<11J9F7O1EA%w!YHAh6U{&^I28KbMHBr%S2dyM8NWw&`5o+LbEsi;8G#zXb7ZF<+ z$RxInD6fMzmP;eYbbV^E`TmAvyJcp}{nIMvk^#qKt9IRrs6{z)u*HxdHbFiU6uB-V z!gO42d(NEglPrctBmJYSr78}Lz7siAV1|6kU1Ve1L%ttTc`g>izb*0>S2OB;!#vLAp{u_ZpM^r(}H4G1ecG1ORDf`V(a$MJ$}JyTp}`-eRNq$iZ-)Os$X zVn{Nv(uK@EwedxV#)7gGGZd+^XjUR5@x%)3-^K%*i literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/ukrainian_delight/textures/item/krashanky/patterns/diagonal_right.png b/src/main/resources/assets/ukrainian_delight/textures/item/krashanky/patterns/diagonal_right.png new file mode 100644 index 0000000000000000000000000000000000000000..30fd51f0dcc0062ec7dd74bb125ffaad6fb19538 GIT binary patch literal 1987 zcmcgt&u`pB6gC1uX%(pzQiXaz#<_s#tjFUYYg=)vG@FtYYzXN}Ne_sQXJ&V;tUbnd zvYUtt<%GEQgb)(vN=Qgt5E2D(L|ph2khp>12RGr4-B=@I*R`L2UE+6ZfT0x4vKwB*Xs=K`{bxmeM^;!mE z7#nIEMwUZd&%3M=OiUd+I#JCU~m^`qoPQCU7t)Qt%=!^ z*-$q;&(kr{2|<8B`C(GfDN6F?IYUR}EQ``2l8IU}(opUffd*1%ImBs0o8)z!pkn%z zrn=F>Wlj~4vj&&$XX7e3XSx`RSR_RbSfjzFBU#9NBp*TDygm^CYTN5IF&1ix<0eF2 ztRFxcbwL)Q^ZsEf^lg#L{fvqA1CY5~W|R7BnV^Nt`cjVPo!Xj9R*Buh>T5eu!sR4? z{n!N2p@j%E=$eJF3;#ZJ&1n1Bdjp$3#xrP7@@Q~)5^5NIgZKm*Y@L9DXE-hBsbJ3h zfy`nG2}dy<3O!ARn%b1nUz1~*L10j4Rw{ZuznkO*O_=C*0u6F*MG^N2=JvpJLS(jG z3klEikn6NDY7>_@E-@(a$b5cBvi-8N<@}k;xn#icAgX8s-Xt8@!Vt<~g~(%+Au6yT z9Bw#bRGIL;Z)5WG`vC_>CBF|Y? zA-^0Nnb)i38XeZ7adc&|Xo|TAT}+Wn-4Hp%vXIMd7li|AIG$%wVTLPuxln*YosDL+ z`s3qQ_VqWSQqN(n;)eL3(W6$5^(iY?VxY0of`V)H<7h#*o~SPM{K-fF>0_)pi=N9t zF`=1Q9YSYMwZ8r+@i{#>MLKg`2O9+8wy?kumVlPp1X+|3n+P5X+N6F``hunMG}7y` zun|p$0>10I_Vmd-*{YeT{2!C4OgeLz{;>I~cgMc`b0@=gQVyGq3~rjOP$W>N3^uw^ z_Wi%GN!s1cYTy0&&tJb>Qt^TYekzH7ht%Wto=@0QzacYU+-)wNr<{{w$=ZNdNm literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/ukrainian_delight/textures/item/krashanky/patterns/flower.png b/src/main/resources/assets/ukrainian_delight/textures/item/krashanky/patterns/flower.png new file mode 100644 index 0000000000000000000000000000000000000000..a2fb3edbe0aba8de6eee3f1b095cf33503717200 GIT binary patch literal 1812 zcmcgt&yU+g6gEPtpr{gs3+l;odjP@2Gh;ikM|Gnm*|L$ycD0SvEVO?A@h8hnWN6*<#(10$)GXOKE!5r9-HA9o z6oIt*x6GSM1_Y_9xVcQ{S;>~6)$lSH*N<(>Y#`NPXl>O2&4cltInaeNgAPFgV`BDT zpjPGqYyokv^(I3#6`cNb?PCRVw+_P#3hQ6bd!G041LXOpu*p?IZ>iPrOVr}oy8P3m>9`TD&ilX_9Uab|)V z@=Apkbj?NBhhqX=BRz(LH?hMoUO~rNCh^I6C?OL<864C(2L;baUhyY_rC_lxQVt0x zDW57k&!(2SDI*)`xh^0usB;<><1rg$WyLe0M#Ip8oI6P(8TDl3dI3Sy5it_6OHmLI z2MJDn(u;XdD!QIO)Z(b_Y(0PFa;XJy{2R6B#g3~2fudLn#JjGKxI<&qBRGHkc!F_Jdp)#7-DD-L_HlASJ)SCZJAW}#K>C>GucDVat`@vdTT`gr6U}8m zN_@$WA1}R&yBuolAnwK-5#Q}1KaO4GImGuQ#l)=*xzcoA`UPfu7U?awnDK0?VCA%} zXHVwoeEGj8W7q5D%3=0@&DXp;v$jGbn@6x<*TcE@ScZc7- I{lO>y0IA+HUH||9 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/ukrainian_delight/textures/item/krashanky/patterns/globe.png b/src/main/resources/assets/ukrainian_delight/textures/item/krashanky/patterns/globe.png new file mode 100644 index 0000000000000000000000000000000000000000..2a163a7566d296298b7dfe5055a286cefe7f647b GIT binary patch literal 1989 zcmcgt&2QX96gL7DC{#+t1%ZTI_W~-j9)EkRY|}Iw*p=!KrCT+eU_3M4wX*gY+sSTn zr7T z8v&DPi*gx>)+EirT2WTlCOKt$qEaIcPr(O`njLRTG<*j$Pe!kck6q1dgN5e;T+ecpU6>UYR?CyS6s0syxv3@p#-CTP;}( zbb}D0V^cRx1Qw_~%qluTS$TPZ&=DmolDtY}rq+lwlKWL#1FEwa(!7Dq%6Xn3WBP>V zy3xXQOjAS78oPYI7)_mXri+nCMOKwyYc#g`P*$=W%6mXJuTMFE+=gM}V=0$3ZCsSq z<^hB;Psmd1vVWKheMgjXzhGkX0BByWqsfDfLeNSUeJMwaN^LJFtESV!>WjCNjLUKP z(uobCLo3nNplUY4KK%PoHNy)qxq__#^1E*W6l^=iA=G7N_zU)Tas&*q5uzJ++~ zdVVY%!?EK9+G|AujYdZ&QEOHl5Q!5zk-!X*hc8(APN^mZ5#RA@lh00!zIL~!irY)x={c^ovmiD z`q}=c@(sF4&F65=;-+}3;iFC!8&FnvVq0Ui1O;S!_BdHmtq01>eE)bT0Q3xL&fJtT zuEw+w>jS9leWkD8i+o8B&Zf>NvpmOfk>^1n9lI79p$6iN#KbdQn_B)N^wZRrw93O! zpQnWlX*Lk>UDvgT59YzTX2$Y=3}!0QnZoq{if{Vv#Fu}eWEdy)vKeG>(~LrqL7oa2 zbeq?1T!A6!^*ZZ)|04V6_;~HnkKd<1uDtW~SLeFsuWK)S(={J^Z=FB?^|d>fj=%rn n?~i`KmwsCL^xN;cTYoA1_wbkBe*WZEJ!pHITb<9YzxnpRDsXcF literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/ukrainian_delight/textures/item/krashanky/patterns/gradient.png b/src/main/resources/assets/ukrainian_delight/textures/item/krashanky/patterns/gradient.png new file mode 100644 index 0000000000000000000000000000000000000000..4e2fd64930a7b397eef40895e2e8d74e0feacfd4 GIT binary patch literal 1985 zcmb_dL2ukd6m}b_l+p?!E|8PuRtN;M9@}HDZDkWB*+5q6hA3UB;na+0#=9nKkFlNX zCb#xbse%Is4is@L9Jz5qh&w-kBNBHc;DE%fJnwp)1SM%zv9i}=`_1>h_ulvX9&K%Y zaO2v-HAPWwbT-=CaGi(qwX0X)|4-wKdvJL<-S{Y1lviFa&r8ZzU%#O!FOjIXQ|xqa z`%K0S%4HxL<2VItMOj=Pr9A)Cp(Pobw z?J;m(T}vAjMe6JNXf$e!tcJ|` zy5V`Aj!oS(5m=!7Fe&I5CHc)6LR;i4i_#*JiCQAkK<*bU4X93Ih|?N2$*Vj;#`G~w zb)$jHm?nmt)pqHAHk>%;Ocz5Di=@cG)~IdMfh=S`kmo?xuTMFE+;+RQk2AT%aqS{6 z)(;?zDj{cD=e@&J=-VQf`xz7K2SD>?8BOZ1Wr7wm>q$ABRcdQSSvBnjR^PrGC0vg3 zcTQ{&ZCZ$y22~>nyKwZNYDUw?-n-cHF`k-sC6B_x)24>eGfdxf;W%Xqn&Gsd&ot)D z4`mip2snyqU+8Jl*VH*VHYr>-2^*c#k(1eLjyQM+QjVR*2pdkyn;~6WtH};)i7E*n>58-1TLn?rEY*6lMv)`+eJZ04af5c6;`mQmyH4t>U1@Q z)i3rxk*~iIm3$5>7I(xaH6L}NSf8@86I&W9B`CO7J&w+()^p{h+CLfy0KGt(Q}4M9 zixJJlN*^lwOzG?Ak)MM4^L$-1WqDpOb>IJg!AwLtRha%?@lD>H`0~$`4CAC+)`JXg z>QN{X$WsP`?()))Phdz|o%Tx4ooD|%eY!mN&6oFodAK`w>&@)St8e}M`Q!HPgNIM% r@Bg(B+`jznz284uFh9O}eNOrH)79_){_Ws#Ib=KQo9*vbcOU!<32ASF literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/ukrainian_delight/textures/item/krashanky/patterns/gradient_up.png b/src/main/resources/assets/ukrainian_delight/textures/item/krashanky/patterns/gradient_up.png new file mode 100644 index 0000000000000000000000000000000000000000..f56e6e6f852f523f26907655b3d8045d7c2b38bc GIT binary patch literal 1983 zcmcgtO>f*p7&eshQ4|TvrBoa&S3-Qvdd44XkCkn--A&k)x*D#vecaWazPI8F$?Q9%LOkj(f+symP!gCK#g#dwyqqJl*lomHu3|(39JkH8krFzB4LUmBK43N6;A<1gmv{=RoB4*B5W|9W3 ze3}CVuW{KyKA9UA+>{fU$h0f~OKNO3R;4P&>Ky9&^(g}o+rgl=ai*3esZA8+<{`MT z49J=2VtABEb5|DXAm?)P5M5-^O-;@d7$fB94wuLkSrYE3mx4@lQdaW&|tQBf)|Pk;)SW z4#x=_Ni$1FhF*s;=%|Ux!7!+^=PCw+pq~~cOS$ZKTL$>th+`4hf;f@1B4lwwkrO%` z`PgE}^*!nf?0Pn?_jeUPs4`paUsSnJ95^0YWx~TD#}v7?gorSQAZEK1F)3-}G%4{2 zS*dw1kD<}nFM$6SCzIl#lEM(|ohJ5CSsA)M4@`dZ8Fk+-hsl%iluA5b(0ENC-EojY)?a#|M z=*5+uqos;F@_wyHpI2mGt-boiC)d9E@c#8Lx1Rnb{`K}%{5z(dXI_8n-d`WJ bU;9~WU+(q8e|~FJBeuV}-TmR#y^sF|YaD6} literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/ukrainian_delight/textures/item/krashanky/patterns/half_vertical.png b/src/main/resources/assets/ukrainian_delight/textures/item/krashanky/patterns/half_vertical.png new file mode 100644 index 0000000000000000000000000000000000000000..405922bc1437b5dafa13ce89083cb2b05f961de3 GIT binary patch literal 1822 zcmcgtO>f*p7&bzR+CU{LE)^%sy@2T0^$)@G+hl?^;=VjO}DM zxwVxdaiRxQ5aNaqJ@E%PfH-rkkht;(;E2RWc$l%&YQh8UrW@ig?}>4;c~poSM_WU7 zw8se7)?QPu&wL}0Z7HAEx599i=p{Wg|+6%PxI-t56ZmT_62$kq2Vi=oh z7e-FU@(8)6TG+A;+%YT{S=h&>@49OH(;!^IV}GarMjH(70&QGXxo;TL=~SQEx-3S9 zNeD5pWmpyh1S$`+iq240UR^NsMahaJuM(N5H6xAWeidjSb)G|-FKM%~trJwtn9`VX!)1(fwWR4XL|JVd zKpJg9&PA8Q!(13UqLlju6B`F0^J<+tpgNwtbA}&`|OuK0FIG&7o=eCVt>@2O&Lsnmf1`RG569f;B8w0x2X+`D+_8`oJ2s)7 z6}hIlV0*hr;6tO6)2y{B4vfT&-AG`V9q}%5u;U>@;s_Btwz=(L+i_U!=EflYW>P}y z4%_eJhWM}@O%k>7gil%R^+02FlLgn>$H_VMc%sPd{OMQ#=_8syk6y~Sn$kk7kDzvs zHJ9-)@g+TYv~))}n8d_J9%VM-#OWX}>M+D;yG95X(R^tLQ)OtX=I zmDA9kKA9);boeJ1W{$73e z57>tEL4SSdU1qbUAZqV{8gID Z#}D57@t2j0pVm9rU}LNQ&FdfB{s)reJM#bl literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/ukrainian_delight/textures/item/krashanky/patterns/half_vertical_right.png b/src/main/resources/assets/ukrainian_delight/textures/item/krashanky/patterns/half_vertical_right.png new file mode 100644 index 0000000000000000000000000000000000000000..ab0838e7cc25ba730139735db1ecd0439724edd1 GIT binary patch literal 1819 zcmcgt&yU+g6gEPtpmYTl9B5CL%K<18kAG!7qng!{EF^+#SKFX20s-Thabj)kF}8P; z-5VSboVXx_5aPy_GZF_7XAX!9e+C>uNNt}T$Lyl*5A{G4+hhBi?|tvR&oiIyY`?a4 z{_=TE)7FNA{w`cE!tvB&=ivOO_4#{nc|04uRcP81Pglny+E-sct7+%Hh{t>7-sla= zRnlQXg|f3qGC*tEwT(r__`WRlP)_1BF#h=AM?;TAVBGXZc$D?zG#(u1^2YJ@m>=(R zB8-if^=k_X1c@w}zDQ!^^;4UzxWtmaaoX_W-xzkbk#Iy(@ zCbmu6Mu0%YQChMEN{cHihQ2I#9%p5&QoUkip*ko71EelYknYG)-`x4jP5pT8NWLd}a8PE3$} zR?5JDuDJ;N@E=3htaXaXRqRlVm(YiUFxn0azFzpwZ~)!AzP(&a*N;P^LcWHBrmj!*<9M8tPPL|o<~+xA_K9V~4@ zR&3Yv7(O&MJIPw962M5j$O|Rrh=gJtx!46kBmy!ga)je!$8~w-=Gq{15Esz8qvrd# zAwOtFvskY^K^d>S9vHl8vJ^)1I6k8u4-~nXKc7k#n&W_%dwOCfojZC3VIcz1D2Kn!>4P71f zH^=@({@3l>8;^eb<%i#V{FC literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/ukrainian_delight/textures/item/krashanky/patterns/piglin.png b/src/main/resources/assets/ukrainian_delight/textures/item/krashanky/patterns/piglin.png new file mode 100644 index 0000000000000000000000000000000000000000..1d3e9a83cee81aacf0b6caa8c9d396dd70032eb4 GIT binary patch literal 1818 zcmcgtJ&fE$6gG+!g^(y0pg^fCM@Zpk*5kij&nV_{xjnd**yD6rDMv-dGvi(B)*fT~ zZuhQ?A|W~ogb>gnS}HmUL`eq%iJl6H0!l;^p1odk7hQgog4Nm{+uwZed+&Xo`EYyd zt&8WcoYyq%;$XAC1J}!NteiUw=fA9v--FAu+2*^2rakvUbv&be_Qgw@cJ`Bav|H{D z-=n@734b+k3& zM|+$IWAzRF`kVqmB1@*vlWAJed0^DM6vowK)6i>3xfd8~RX}}rxUH|NTSsANTuNYaV_RGKksf!$vtffthrcO{XbIvl; z>fkD;8Yp;+%l7kW9b9lzPGus~vH+~rVzY@VRWVTyp>AKF2mrMm4%--~YDtndL{V-W zKpIU!PDK}^!%UhxvQYaumm3El^Jx+!yz4{Mafbw2mQc+oI7zWC}wWtaN;A*Yzy_U z%aQL1j$9meyDr1NV0<~hulRn|*=qj66kG{GR9%NgU=aQ$H#F6f-`J^rkF)!qTyX zmD4nyKA9);Qna1%0E}`UiwI!`{}oP7rx*4`PY|U{NRU4_~ptO?MHg^ V_s=g(p09SV!Nykq>zjA({tJ;dHJbnc literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/ukrainian_delight/textures/item/krashanky/patterns/rhombus.png b/src/main/resources/assets/ukrainian_delight/textures/item/krashanky/patterns/rhombus.png new file mode 100644 index 0000000000000000000000000000000000000000..02662716deba8c3819377482e472761943b6f3df GIT binary patch literal 1819 zcmcgtJ&fE$6gEPNAR$sBnuy9cLIRRmkAKE%TX9au?!m2uFQ>~&IcQ)!Gv2js?J>6R zcJC^JXlOt}5kiQD0wgF9qNRY6l7gC&3JFT6!n4|ZWb7vJrIX~JQ?!fgT92cHC1LwbtJ8!||>3s8zQc=!5TOUs-pM8EwQOnws!HyG24A<^wTJHjfH%^Jr_# zj`o&BNM~8;F9NOM^F12K#Z zwGSiPFRG;S-{^KMleaJoa~nueQP9F3_e`mHWCrpU-=9t0#+z zZg`%jV^cRx1PD|fW))qath~Hp7>be=NnRx~Q)@;V$^9zOK42;+=LhOVq{_K4rDn1C7;97F=r|C#Tfop(3~Q=TiZs_i6qzdMV>-P7AR8Dlm-OKN(rvfzcuqe;a1i8R+d!Tm965qS+$DYN3Ml?k(@E*4nDJ4hx7=(>vx$I} zQ`a6nnTPY`V^2n}*UP2D^#7Z$d3S7Wg+?}yV8O13-BtlN-DV>)s8a!3NpxJ*1`RB&h&;R`H)xmeSZyWEw{M#3A{`BEjyQZO-A7B6D U&NnZ7RBvCSjjiFgue|--(3!-C*J(1VCK@u=Y0gD2682nzlUiU&Q2co4>y?sRrWdS{nC*mROg^6Govd+&RB z@9yrra^>>1%bKQL8Ep6W;CdB~XP$f<&VP^(--OFk+4k#&rak>^bzIUu{^U7Ld%}r_ z`{jP{s?Sx@VnT(oHA^zE*0il)*-%zV?FPN%J@ z-BS6;B$QGUTc%|put3FeTCy2Ri|b2-zAShiXJxEXy+UN6IxM>eP+i23WDRUu)Omu8 znKPD|q=l=P=7xedcG+P*nL8KUloOfAv@F1uG`87Tm8ux4`#?9Z&pCkH20`OvC6^>= zTomQj5rk1EWTka6JkF%KCku6$bGdZ{G_P0DWd3F@S*h}&Qj=w+c9)cO%WYx(#_c#2 zYFfN-W`pdrQg#ifnuD+h{~=V3bbL%-#I}#|!Zc7Kj*icp5;7!~Z?%2gIcEx*5v*hn zG#1>CRGu&hI8N9|nprwB^d^n|rkbc690NOh&LRl>L0Xh7<#N#P8W3|Uj)gBnx6`%> zMZ^guB9_Au6F5TfRC3$qHoeVE^xtcV?LWUk@$YWlJ+Q1rl!u3!XG18{gVbTuQ%&JiULSL*F zu;#`7=koQpc{blYCTk5>iyHP1keklx$s`7 zsGPD~_C`?I2TI?(ANhhET}&O*4rPuYNH|!cHiayQ)U{9~+N2ZOwoM!m>VngG>ML61 zQK;A0e9Y33gzvg(JbEw>*ERopFmsVE6lVTceDil_zWhri!#Jsy%^-uDW)#X4@|44% zyY%b&2QVaW4EnvHca{Hrdbf*p7&bzRN>HR$2r1%%HqejWzd7G6;~Wiks7PoRw@ETC=ze#`R;{GG~zLIJCCvgyvEIz}(S=GHHt-fiW@L zF!BPYL+NeP!H#R=z;=A(V1^0veRJ`%AYCD2cG&%3kqquaYgAP^v+c=b(wev}T?}nP zDYda}prDzt#=yoNMy!e-?{Cs53u^4umZ zT-P)MO3~o*lVUteE`_beDpgrk0+uw`e55N~j`TA^H?J=x0B!sICdZXr(zHoYR=cNA z#zK%Q(dFPQSN5SQ^+_Sr?kUjRsH@4@PN8_Ei-FeTWv337lugHPVe{7gB$IklzIS1Q z>hem37Ie)+xC8$Ibd9tbrtf2yVLXTSwM^o(%TPiF#9=sK#JvOs&q!YJ7lNf=u`W^$ z1t%#VDm%}Hmf6V2cJx>mkQmsxGZy_m>t$udGogCj(1Myh>M5KP~M+yr>BiTkC_Bx2tI6~BoUFmkP>v^Jf^UNS@FDapQ zXN&LSp89Mt8Ykw=6O4=6>!Bs;CM#(z9w%4m@lu%=^Cu$(L7&t7dG=Dr)r1#nYY5uC z&|LPj$d~-|`P2hNVoDW39XBAz_d$G40uO=kQQQucP&`_eewq3eW_%Uu3t7a7XF~-m zr)|A@F)!!KIm`dC7`t9C=MJ;~YrfgL3u`Mha`p%o?0VR26>!sRHYx+13fM}*+c%%U zHnh>}ZVfs vRJZodBH+ee>%@%OvF{AzuBb$#vEUmjljydcK-$L-(Wu2z1lx2@jp Le)os%hmZdOJdZFv literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/ukrainian_delight/textures/item/krashanky/patterns/stripe_bottom.png b/src/main/resources/assets/ukrainian_delight/textures/item/krashanky/patterns/stripe_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..cd04d0bf9bec0203e0db751ee0e4caf1fe3b7cde GIT binary patch literal 1812 zcmcgt&x_QGDt~o9!pMLhdqO5(Kj`r%k z@D0jk)?=}ZL~ouIfL4@S>+^!~eNn5C7^iul{r=6jnwrLecGn4USoFmt-8wGCo#X8h zKi=mg*4AHDZ_OzXWTIy3Je%efod;UWOJUqR)-|<-)cb+9(F9cY!X33QOQDjUfjGv7 z>cPl%O`njPs)dA7f z8-x%Yo4RQtK%nXuPeYB9k!UrT2>SJ5bEyrnE+7RFzjNSt0l|25LLZ- z2x%+}axS_W9Th^~6_q?Fx!61enb(_a3feCPt7SQoa=Pl&&PuXsIz6nubT`doIjdei zH9-tmEdmX?W+Uvwe*|4KJc`LH*rFIOprMS@orXUzOoR~;N zHbKm^d}JqvMKHKA!pUm>K=Om8v(5a4%VWub8;EP-5FYB5o8R=GxrG zK6ky?Sh2lXrtqP$>1ozRRSb;8Nt{Svjz|=H$i@v1Ng_n7#ELB+Tei&`H@60%TWJNY zJ6e7pcf|Y4(KJCR0FQQj6sb{Pd8)K;5 zW6h;MOnk)-A1xglk?Wa}gS>Hjrf`|i}*3XN*Qqp;uoK=Umm>GU;FXF$&H`=cW!@p;q$LQc=4h#|J(cX`|p0b Q-|Sn%&F#Tgx8J+>5Ac06=Kufz literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/ukrainian_delight/textures/item/krashanky/patterns/stripe_center.png b/src/main/resources/assets/ukrainian_delight/textures/item/krashanky/patterns/stripe_center.png new file mode 100644 index 0000000000000000000000000000000000000000..6f41ccb892e218ad58fe3ea0cbfe0ace4ef6e9ea GIT binary patch literal 1807 zcmcgtJ#XYh7&ba7f;*kWL4y#|S-u7YV~@ulYg=ccup7uqIE36v$x#5~nencbwa3^_ zc9RYYBswHMgb*z)B?S~T`~?051&E3Q>3Hq+ngr!Obj7XK_Sk;rd7t-vAJ2TYxBJ%h zt1n(v6y^GOXS5I38*n`P^ah;&G{5`+F3%J@cPmA?_Iz_ZrF{F{3yQMwbvik$52LpO zCNrIK84G=x6@XTh+ndXRvLjKev6!ZLsQvNtFPfV2P&;rU92G+`OLxvnap!Dz!p@GE z&$Z3h)!WMe2r^Mqb(zicDp-bE%NxMBd2DEE3#pGnZL0~W9!7iWP?kdVbrUg+O?3bx z+a;dwzorsQECag+aS*`)HUq~|yPpQ(N}dG!qc^)?a2IN`x-J64SS%L$!qR0qHB8_4 z4NMF|5Fk)>n%8uR^6J)_VI(S6rbV5~Tx}R>ERX9@1F5SVvZANWtFBH^F=I&!!_;w; zQw!v*#}&urybaEoA?6|zd0he4?6Jj6*0P$(`%w3g z$ff9Na#{#uUsUqAWMcaSWZr7BDS}}sXf4Z$l=F3`_STYB;^oB{P?j2Oo@5}s|LI3^gy!e!huP0wQH zn(du3g%6F+&$BkFI57H7;=}?o!xqD}#_OTRnkEabb&u0a>hVaCyZMWm0MZ9Ee-*uwNxh(@*qTD^9%?S* ze&Q>7@?hx+6`Z?-A{-9}h&Z-DF`)zzo0uZzBuQL%o%%)TmzeQ!q<3XuGn!8Ytel4S z_{lt)FIOs`U@}ItUalNw{NH@-yK`$RG_rjJ3wAT?w+guFHye>dol4kBe!u(GORx>y z9FMjp-VOHmy?dKizW?Uq_dosTro(^x{N3S(e&xAem4hF>zrJ|y@TX?W8gK88et6@< GPyPkGF)^(G literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/ukrainian_delight/textures/item/krashanky/patterns/stripe_downleft.png b/src/main/resources/assets/ukrainian_delight/textures/item/krashanky/patterns/stripe_downleft.png new file mode 100644 index 0000000000000000000000000000000000000000..351c8d5807034f0017236c10571bc655771697c7 GIT binary patch literal 1979 zcmb_d&u`pB6m~)4N85--y&z7;J(LP&J^r=p8D$%#yMe64rXgLm;RNHE@vfD%$F;rL zO}JFOapS-N5LYf7_y;)fPjE;41t0-ZPYutzUN=EWT2-vp_Sk;&z3;vEJ-;t^wm(|A z{LW=f(^h(0-Cek@!g1}5*Wmo8_4Q|Pc{APmG}p8%*URIQ_TBeyYuf8>G}tTl`X5uS z;sz5ckd0ZKg0-fttUS_p=l99 zOl+IBjlcrshe^R^D9LXu5xO$xS(Fx$O7s$u1!_{X4WPP+Ax>-9B(L%W88c@rHLV6N zW11TZUfZRUY&>@^xGBdnmPwI=tySBmBUPw;q|Sk^U!QUSx$XCBA7^rji8BIz%nPi2^21<>WmD*WS)@`qW_4gh`iBQx0)`<^xplU9{KKutzHLFE2c^^9zP4OJF1 z2snz_P?~8nH1s-+w4=r<1INJ5nX~BkX)nnOmT=kYwhf565k-RfRzRdDJS3W-gIdJ3 z5Ocx+R@@?Pi+Ev6EcbU6pOlp?_b*f~6bFoFUYT^7veooaivtE^#YV(p7!mH;oDka% z19ypbH;bUr*!U!B$w~ksxb*^wIU<2*As4$oA_NeL6FS22vE#bDRP!^>OOy?WFNZ?r zRkz$>!)i5-Zl6OM3mN#BA)omHYTB-geBt>h2$|I+#D$=OHM49KfY2AK1+00o|G9kW zR#fsitXSNW4{JX9T(Ok#vJ=||FC{1;+l$B18P$5Byj1(ABMG1vNOR#PS79+_ncNsc zWuGg3^E~o7JGhv-$AVTR%1;!($0w#v&; zudw-uB|{0{b<=qHU|y_iE(qpi-~WHX%tg9TnE7Av&EK8)@-LMPKi&EK@xPNSYTEz+ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/ukrainian_delight/textures/item/krashanky/patterns/stripe_downright.png b/src/main/resources/assets/ukrainian_delight/textures/item/krashanky/patterns/stripe_downright.png new file mode 100644 index 0000000000000000000000000000000000000000..41e2927f78ed40ee2053164b6ce1c22085227c9c GIT binary patch literal 1983 zcmb_d&u`pB6gE@>+Nu&&4j_85+zS=VdTft(J)>-+G#f}HHjUDi8cuXPGv2kb>oK;I z-QS}F|?Kj{1-h1Ek zySusZ?xhQFTrdpd()wCw3$B;pc=eT+;QXia=?8E*pRT>18^*tLfN4t4~U*3xxzal!y#qzZ0MM#Cg$leRU*Ww0(E+m<;sDR$b{a_P|A?rxeZI#VWX zI7ndZm@Qb5rW;WDw&`NmvvJdQedJ<>9p?LH^|QcTCL^}hd8cv)cWrA>6e+Xq@p#-A zdkvlSZHH27W7l?F1QsaYPYOOkNq%*X&{4U_;08)i7|%?*TE@}-NmIw^IWBW4!{mf1Xh!ma zKhanU7U^unA>eq#`^rv}zGc>FWGi~8GjI&-yeW%rm#rsx!4sj@J8cVMZp5)x2SRfk879yAgh|(xT)Qddn1=u4*lxlwD zd5*FS@#Rp+yy})4ykD(`@%7V5b1YRDV2%PFgsABff&%FWD2%w%q?B;wg^PCCC;(y3 zRx?=pZ2wdFvbDJ6vtO~er9Q0rm{Y|vF3L`9TcVVpl2-LNKBZbum6vM&c%T6E3~A21 z=Q=9JJX6bksO%G^Z$FNF&iBry?nx|!;v8|=B*>>EL_CTJB7%~pz{KSdw9AasN$ORr z_{^zW*dhq>kOV@t=>Zikd rKjVLIe)8Jg^WPnP`MZ2@L>c5<;j##=W$nvmXE68P!B-HZ&{Yuu4{HIFa$pc-P9>V{9k8 z$+5Ry5J(6i#FZ;|#DPD6EB^)pi3_*#?ABTj^| z@u7ZyL4hEXHPaW_EU)MyG+JH?@P?hQU#1%tcLnAUYcO>;h<_vTJdl@rqRYsmk?+k;Uq`4h@jH%pof}+PqrT2`XkTSYcW{+~m{( z1@CahaXD*)3vSAp%w%3yfVDboF;%syrs^5g-Rlbhpte!e#kf>UmUSVjdiw;@SQX?_ zbTvLLq`4<6bzE|}eF8FXH`x?)tCXx(KXIWZm|9Sikcq&4rp*ch60b16Iq> zfUda+_u)T=u2})aKCP7V#b$|zA6i!vV0<8mwM9BhvJ wzw*DIKHYfrhi}<$Uw)NbzkBE&KK$Z+?WbG8U;E+jqh`MvZto6$d~o>qACQDC*8l(j literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/ukrainian_delight/textures/item/krashanky/patterns/stripe_top.png b/src/main/resources/assets/ukrainian_delight/textures/item/krashanky/patterns/stripe_top.png new file mode 100644 index 0000000000000000000000000000000000000000..dca01569494a81263f5312d7412f93afaeec73f2 GIT binary patch literal 1812 zcmcgt&x_<{)}(@84HSKs^Idta(P-Q9Wn z+S>Y>rfJuP+k-v0UWenw%a`E%hxPCSxV(^Wzh7$Fm6z({Iqi!tZ)n=3&yvx8wI973 zFqL*FSFz~K(;U#6c6Vc*Q+6OKJr?663yt4@_|ec49vb)E2uFEeOp@)BLfkvq8L^WC z=5u4?4gKys0D@FhRG+8QtPJL%(eMT^t{if~I-dBat{f>ng#+KfL zk<%rf@4u!KOl%W(P2wVg18fDZt1o{Bge$lV_6Bb)gTY;BOsXmmOmjAyb!K))6=T!# zec!~yBm@BhmB(2{=O`<0t{4WQWJQu!iOTevk;dw<3Js9D$RW*J+N@mG2`XmJX>M8_ zT<6pPIcstGVKHrjb7qRENJUnafVEm|K2en_C+ZQ@?dx*^pte!e#<);RnzkXzYU>En zSQg|$bU8ZCg}En6byzU5bp$eR*4gAizYw%i#Ym~?s#Ciw$vSa6SigNg$+()8cg{=@ z16qmDfUY?Rd+;AY*Q{QE{a3LaV7!1viYM~;Jk+vA7O9~QIR^#La9YtPf;kJMDpCpw zCn+5ZGtb6`-j*@wtEnm=FsQQ|6;Tunv$CQY6T?AhK+c^c;eoKJ)gzQ57rO$9t|L$^ zZHc7pbv@6MjN5!Qf1uc5-PwBn!sT2s;P^MH<$FFR0wZbpT||2hMzOFw6cg!?*ro*c z#ER{`B7qN$PS3K|syHzEu5@F88S-P^Lk@O4Z(nz41gqS?%@EV0DuP-BQsF!R6WYu=q%TcMH7BUrHOVY^kpO}p8M4C++CR`TmR-`|35 z=#}AMbL3rTf1jRiJpb+Il;8OCD=qrv!Ra^aKjHP)zy9RvoxXPYW%sY&eqKAO_pRa9 L&fvQ@Km7O~(U~;d literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/ukrainian_delight/textures/item/krashanky/patterns/triangle_bottom.png b/src/main/resources/assets/ukrainian_delight/textures/item/krashanky/patterns/triangle_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..5fe4c4b639c83c10631f7a5d26261a560371aa9c GIT binary patch literal 1818 zcmcgt&u`pB6gEPNN>L;#F2DuLy_CYN$3Nq->Za*#Ad7Ga=}HZ!GM*XlT3LHs+sSTn zsZ^;4ZapA`5Z6kG1L_?lPDuO#{0T^KgCi%(v)5~qD*d4zSgq}`{mu8j_ul83&v&*z zSUvyNc|}oHhg*YPxL$zcwR0%8{7F=G*w>~Wu<<-~g<0a+mZ{ARpl`oUgUbPo~ zR6jDm4=0Bnz}ZfA~pL6CP+coe+n4Urds%<3ijx-X5{z zeMY#pepS6P_kkc46;i%W)qC|Qx@RU$LBW~7lkr~(b7E^J(4cEJ!XErb&^2St$K+jX`4}&tq2x(?bQ)?HBg6C!_i-qAhSQ2Z6U><(%Oa(a zaFWuo(DQ7psa+ZUzMRSe0)slMQ4xmzFe@vXF)(g1CIZqy4YbNwiq%AwvlPtHll*K$f1#eW7DQg zcuTgAiv&J2Iz7o+tKz^&oY;v3W{5<54cXZC5Fv4dh!tDh@~~ywtafu_5PvHvp>;>? z_i;nqZb#EZZ9L&qR(n0rSlwj7wf1pxMm?S@ayx%E5kUHs<}ad`GOlK{5F2Bt-80Rl zKS_K^51%gG^{C~zBu1DE8`++X5%nU5xJfai4v#DXhFoYmE&U8LzKHaen@wmo7O-;a z+KVUie7^kOlhNz-a^W!jaq~6rPOPoa$mS6&*!8g6D&VHuY(xfiDqt(I?)`WPwxP?z z!N$nD!2W*pX#M2}U(sLhf71V!|8nQU)r}SY=H1o%{M^-RxB7p){j>7VZ~fmNJbd_F Py?YHew+G)}|LpF+lGirj literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/ukrainian_delight/textures/item/krashanky/patterns/triangle_top.png b/src/main/resources/assets/ukrainian_delight/textures/item/krashanky/patterns/triangle_top.png new file mode 100644 index 0000000000000000000000000000000000000000..dbcede837b16adc8d53288bdafec54769924027f GIT binary patch literal 1819 zcmcgt&u`pB6gG-fmC~wITp%aQEmBeOdi-P8o>5H{vVp9GLzJ%6^wf-J#=CCT9@loV zo80IDsZx)C5aNWym4AQ(;(~;@aDx5|NJwzx7M{IcH$mwS^}uRvkL_>X_r3Q%&ph1P z{P5C+$l^S%W3h> zi3y@lOW|wKHAhDt{D;sr(F?+=EPC>yloR;*tV9rP+ z^MpdeaY9GJ$kLIfwq+!1aw2me26c9=A_&MJElQd)G3fgm>5k(@dJj8T#~6HwX^62+ zd&srvLe0l{3?CYuoQztj;t&ycBVb3MCFHK|Ajg9^QK(}(vbpUc+i_Us=Gq`+BQBtI zht2nKOWbcplUS`iK`5)d?rW@Svfx_tI6k8uFT~u;pN<6teMa-=?1hZVDb2;|2x|9S za~V$)U(kbROSin96Gm2~hq#Az+lAtL*mHG6Bh;fV6cKk9sh^g9h8bT*dQ%oQrs+t) z%4ujXpUjK-a<1}!Ovb3z%eljh|C+CUcVcaYM%IsD!LEkwRslEdW+PIlQx03nkH3tr z!8UYb&|e*TSJ*$t$16+Ue)-97pYASQd+WjFUw?o5@x^bh?;c;C{rPCwx_AEKlJfaa WtAG5w`*^w9z6R@?{qNr2eef@H)-$dE literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/ukrainian_delight/textures/item/krashanky/patterns/triangles_bottom.png b/src/main/resources/assets/ukrainian_delight/textures/item/krashanky/patterns/triangles_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..4c036c4b334d3970fa7dadf74df57f5c546d7390 GIT binary patch literal 1815 zcmcgt&u`;I6!r>KvAa~-h06*qUhe@AOg!UXu}2$9NeYdGOX)`1A|dULXU2)u*kf#` zNqb`@khmd)03l9DToE@89QYSFApQs>1V?V=IdMXZx^%S%qSzkW-+b?T?|q*6cz5T` z^()U^(KKznzunt|>vcG;J+%hsKgnnJ;BqsMA{$%Kh=ook15QlkJj*{);Lf$#v8Svu+ z9tdOORsHsi0zoP(rq9xGR?=C=nDbH?*N;s@pF^sHj)c3<(y{ihT2Q7j)#zb$! z$nh*c2wu@GY}qFEOv^4eGnAFLmJB^v@*>HrL}hx-$RahVItEBxOl4M;fF&zzK2nt`N9rNetJh}&KyAZt72{kjX}StgR$GUV zMpKY;(dFPMm*$=<)uiBZ>kwq#sRuRBok^{zI1AW z?6FFA4CtDJun+$Mbd9tr4qnDK#drY?l}O^Fvrs|?#G=@zmUjjUo)N5K7lH++u_{sq z2`4EVN;A)fhQ2Bz?W(aVATX%2=PJUG_Or5L8JGQD$AFw$Ng}9&vFlpQMl8YsBElhv zxr`uRV2?O%I}kow&hIHcsXJTGU$|T-4jlhPwPN80KKGC-?FhLJumw@uL$>9UC?cLG ze74TwJHIOfg8J##2jXeHgd4zqacVQ6xgvXY#-Z>!)rIs4MMk*5?XiE zd>?n@`^{*a=yOj{#%r&43|==`3Zr?PoKufSirmbfjwF!&NAnlaOBGjBR>;jE)b2ua znGX|Rvcn6cN2DzRB2er?shI0X#M-`tIEyXMl95MzXPNq0>F1d7ailk8;Uks}C9IsL z@%YI+nlBeB|Hov^dc9mY%>1|c=I>6ete3> literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/ukrainian_delight/textures/item/krashanky/patterns/triangles_top.png b/src/main/resources/assets/ukrainian_delight/textures/item/krashanky/patterns/triangles_top.png new file mode 100644 index 0000000000000000000000000000000000000000..376bba0080c638090098a8230ebe78adf09b86d4 GIT binary patch literal 1815 zcmcgt&u`pB6n0gqDn%8cy#OcUA{7L)9{*Zk`xt825I@qJn8ksKviX#Dx(&xW3e(75dl@F3ri<7Df&khhMvhx~Y- z6Je~~&{t;^2vS)weU?tLlFmY-;iWLHADf2WK&t)FSg!->dxIT)Llsgd9Sd=cE!~Ha z+qDBi-qLMsJ0|X$wufv?u|+*kU;GRRSBRMI_TF9ugS*feS5;0;b2^=NrcOr{Bhw;; znAkRL8vz29M_I*YC@Zfm8G5qhMUq#E%JiC%Me3jm4Ujs|AJeZpw*FWmc7dwOVXGR+TEp>JilK>r(-swu3<%<4i4S+J-2r%|l3I zQIIpy$cay`s=roOsHx3#)%2C z$0`{b&@~s~0RBVhn&neW-oy^Ycn%#Xk;F%*p_VnYY`{_Mo`QmB1gqE+!GhCR6)A&+ zla!65nP($IZ_7wG)I=2!7}Pn9iot;Pv$A3tm;GL7K+c^c5tK2)BS+YX`CWo6>0%UE zk&kTQ+Ey%FAuO?+-&6dc?rc4O?sB0xaQqw9vjuacPf)}>8`;wJQ4~XA1owPD3RvX% z@sjPmB7qN$O-{1bssu0+FZLpdIUy}%KE7YsSqbXxiuW_%Xu3vNDU*+|05 zX&TR-%+vYue^17&*UP!X%>SCNd3R!Mg+?}yV8O13?N$Ld?Peo0s8a!3$wycAet>Q0 zdcU_m41VQ*KYX}${@btb{r>6Q^RK;p|Ao)R#TyTPV)h5WeD~_dzpZGWTwVRcx$@;o Py><0Bw|n2;ynFv2X_7NU literal 0 HcmV?d00001 From 16648be2f9a4b52fc6a84703e8f913fc7a13731b Mon Sep 17 00:00:00 2001 From: Eugene Date: Sun, 11 Aug 2024 17:01:26 +0300 Subject: [PATCH 2/2] I refuse to do so... --- .../ukrainian_dlight/UkrainianDelight.java | 3 +- .../block/{custom => }/BottleBlock.java | 2 +- .../block/{custom => }/BrewingKegBlock.java | 12 +- .../{custom => }/BrewingKegBlockItem.java | 2 +- .../block/DrinkBottleBlock.java | 1 - .../ukrainian_dlight/block/FoodJarBlocks.java | 1 - .../block/{custom => }/JarBlock.java | 2 +- .../block/{custom => }/SaltBlock.java | 2 +- .../block/custom/PysankerTableBlock.java | 58 ------- .../block/entity/BrewingKegBlockEntity.java | 2 +- .../{ => gen}/features/Features.java | 6 +- .../features/features/SaltCavesFeature.java | 4 +- .../config/SaltCavesFeatureConfig.java | 2 +- .../ukrainian_dlight/item/KrashankyItem.java | 6 + .../ukrainian_dlight/item/ModItemGroups.java | 1 - .../registry/BlockRegistry.java | 9 +- .../registry/ItemsRegistry.java | 28 ++++ .../registry/PatternRegistry.java | 22 --- .../registry/ScreenHandlersRegistry.java | 7 - .../registry/ScreensRegistry.java | 2 - .../registry/manager/PatternManager.java | 57 ------- .../screen/PysankersTableScreen.java | 74 --------- .../screen/PysankersTableScreenHandler.java | 151 ------------------ 23 files changed, 51 insertions(+), 403 deletions(-) rename src/main/java/com/megatrex4/ukrainian_dlight/block/{custom => }/BottleBlock.java (99%) rename src/main/java/com/megatrex4/ukrainian_dlight/block/{custom => }/BrewingKegBlock.java (96%) rename src/main/java/com/megatrex4/ukrainian_dlight/block/{custom => }/BrewingKegBlockItem.java (97%) rename src/main/java/com/megatrex4/ukrainian_dlight/block/{custom => }/JarBlock.java (99%) rename src/main/java/com/megatrex4/ukrainian_dlight/block/{custom => }/SaltBlock.java (95%) delete mode 100644 src/main/java/com/megatrex4/ukrainian_dlight/block/custom/PysankerTableBlock.java rename src/main/java/com/megatrex4/ukrainian_dlight/{ => gen}/features/Features.java (76%) rename src/main/java/com/megatrex4/ukrainian_dlight/{ => gen}/features/features/SaltCavesFeature.java (96%) rename src/main/java/com/megatrex4/ukrainian_dlight/{ => gen}/features/features/config/SaltCavesFeatureConfig.java (94%) delete mode 100644 src/main/java/com/megatrex4/ukrainian_dlight/registry/PatternRegistry.java delete mode 100644 src/main/java/com/megatrex4/ukrainian_dlight/registry/manager/PatternManager.java delete mode 100644 src/main/java/com/megatrex4/ukrainian_dlight/screen/PysankersTableScreen.java delete mode 100644 src/main/java/com/megatrex4/ukrainian_dlight/screen/PysankersTableScreenHandler.java diff --git a/src/main/java/com/megatrex4/ukrainian_dlight/UkrainianDelight.java b/src/main/java/com/megatrex4/ukrainian_dlight/UkrainianDelight.java index a5b8c17..3c5afbc 100644 --- a/src/main/java/com/megatrex4/ukrainian_dlight/UkrainianDelight.java +++ b/src/main/java/com/megatrex4/ukrainian_dlight/UkrainianDelight.java @@ -2,7 +2,6 @@ import com.megatrex4.ukrainian_dlight.block.DrinkBottleBlock; import com.megatrex4.ukrainian_dlight.block.FoodJarBlocks; -import com.megatrex4.ukrainian_dlight.item.KrashankyItem; import com.megatrex4.ukrainian_dlight.registry.BlockRegistry; import com.megatrex4.ukrainian_dlight.block.entity.ModBlockEntities; //import com.megatrex4.ukrainian_dlight.compat.patchouli.CustomBrewingRecipeProcessor; @@ -16,7 +15,9 @@ import com.megatrex4.ukrainian_dlight.registry.ScreenHandlersRegistry; import com.megatrex4.ukrainian_dlight.registry.ScreensRegistry; import net.fabricmc.api.ModInitializer; +import net.fabricmc.fabric.api.client.rendering.v1.BuiltinItemRendererRegistry; import net.minecraft.entity.damage.DamageType; +import net.minecraft.item.ItemConvertible; import net.minecraft.registry.RegistryKey; import net.minecraft.registry.RegistryKeys; import net.minecraft.text.MutableText; diff --git a/src/main/java/com/megatrex4/ukrainian_dlight/block/custom/BottleBlock.java b/src/main/java/com/megatrex4/ukrainian_dlight/block/BottleBlock.java similarity index 99% rename from src/main/java/com/megatrex4/ukrainian_dlight/block/custom/BottleBlock.java rename to src/main/java/com/megatrex4/ukrainian_dlight/block/BottleBlock.java index 7a5576f..eaea653 100644 --- a/src/main/java/com/megatrex4/ukrainian_dlight/block/custom/BottleBlock.java +++ b/src/main/java/com/megatrex4/ukrainian_dlight/block/BottleBlock.java @@ -1,4 +1,4 @@ -package com.megatrex4.ukrainian_dlight.block.custom; +package com.megatrex4.ukrainian_dlight.block; import net.fabricmc.fabric.api.blockrenderlayer.v1.BlockRenderLayerMap; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; diff --git a/src/main/java/com/megatrex4/ukrainian_dlight/block/custom/BrewingKegBlock.java b/src/main/java/com/megatrex4/ukrainian_dlight/block/BrewingKegBlock.java similarity index 96% rename from src/main/java/com/megatrex4/ukrainian_dlight/block/custom/BrewingKegBlock.java rename to src/main/java/com/megatrex4/ukrainian_dlight/block/BrewingKegBlock.java index 7fee69a..c979d77 100644 --- a/src/main/java/com/megatrex4/ukrainian_dlight/block/custom/BrewingKegBlock.java +++ b/src/main/java/com/megatrex4/ukrainian_dlight/block/BrewingKegBlock.java @@ -1,10 +1,9 @@ -package com.megatrex4.ukrainian_dlight.block.custom; +package com.megatrex4.ukrainian_dlight.block; import com.megatrex4.ukrainian_dlight.UkrainianDelight; import com.megatrex4.ukrainian_dlight.block.entity.BrewingKegBlockEntity; import com.megatrex4.ukrainian_dlight.block.entity.ModBlockEntities; import com.megatrex4.ukrainian_dlight.screen.renderer.FluidStackRenderer; -import com.megatrex4.ukrainian_dlight.util.CompoundTagUtils; import com.megatrex4.ukrainian_dlight.util.FluidStack; import net.fabricmc.api.EnvType; @@ -18,39 +17,30 @@ import net.minecraft.entity.ItemEntity; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.fluid.FluidState; -import net.minecraft.fluid.Fluids; -import net.minecraft.inventory.Inventories; import net.minecraft.item.ItemPlacementContext; import net.minecraft.item.ItemStack; import net.minecraft.item.Items; import net.minecraft.nbt.NbtCompound; import net.minecraft.nbt.NbtElement; import net.minecraft.particle.ParticleTypes; -import net.minecraft.registry.Registries; import net.minecraft.screen.NamedScreenHandlerFactory; -import net.minecraft.screen.ScreenHandler; import net.minecraft.sound.SoundCategory; import net.minecraft.sound.SoundEvents; import net.minecraft.state.StateManager; import net.minecraft.state.property.DirectionProperty; -import net.minecraft.state.property.EnumProperty; import net.minecraft.state.property.Properties; -import net.minecraft.state.property.Property; import net.minecraft.text.MutableText; import net.minecraft.text.Text; import net.minecraft.util.*; -import net.minecraft.util.collection.DefaultedList; import net.minecraft.util.hit.BlockHitResult; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Direction; import net.minecraft.util.math.random.Random; import net.minecraft.util.shape.VoxelShape; -import net.minecraft.util.shape.VoxelShapes; import net.minecraft.world.BlockView; import net.minecraft.world.World; import org.jetbrains.annotations.Nullable; -import java.util.Iterator; import java.util.List; public class BrewingKegBlock extends BlockWithEntity implements BlockEntityProvider { diff --git a/src/main/java/com/megatrex4/ukrainian_dlight/block/custom/BrewingKegBlockItem.java b/src/main/java/com/megatrex4/ukrainian_dlight/block/BrewingKegBlockItem.java similarity index 97% rename from src/main/java/com/megatrex4/ukrainian_dlight/block/custom/BrewingKegBlockItem.java rename to src/main/java/com/megatrex4/ukrainian_dlight/block/BrewingKegBlockItem.java index 565ba3f..a372088 100644 --- a/src/main/java/com/megatrex4/ukrainian_dlight/block/custom/BrewingKegBlockItem.java +++ b/src/main/java/com/megatrex4/ukrainian_dlight/block/BrewingKegBlockItem.java @@ -1,4 +1,4 @@ -package com.megatrex4.ukrainian_dlight.block.custom; +package com.megatrex4.ukrainian_dlight.block; import net.minecraft.block.Block; import net.minecraft.item.BlockItem; diff --git a/src/main/java/com/megatrex4/ukrainian_dlight/block/DrinkBottleBlock.java b/src/main/java/com/megatrex4/ukrainian_dlight/block/DrinkBottleBlock.java index 3f884da..ee12ab0 100644 --- a/src/main/java/com/megatrex4/ukrainian_dlight/block/DrinkBottleBlock.java +++ b/src/main/java/com/megatrex4/ukrainian_dlight/block/DrinkBottleBlock.java @@ -1,7 +1,6 @@ package com.megatrex4.ukrainian_dlight.block; import com.megatrex4.ukrainian_dlight.UkrainianDelight; -import com.megatrex4.ukrainian_dlight.block.custom.BottleBlock; import com.megatrex4.ukrainian_dlight.item.DrinkBlockItem; import net.minecraft.block.Block; import net.minecraft.entity.effect.StatusEffectInstance; diff --git a/src/main/java/com/megatrex4/ukrainian_dlight/block/FoodJarBlocks.java b/src/main/java/com/megatrex4/ukrainian_dlight/block/FoodJarBlocks.java index daa43f7..0b35de5 100644 --- a/src/main/java/com/megatrex4/ukrainian_dlight/block/FoodJarBlocks.java +++ b/src/main/java/com/megatrex4/ukrainian_dlight/block/FoodJarBlocks.java @@ -1,7 +1,6 @@ package com.megatrex4.ukrainian_dlight.block; import com.megatrex4.ukrainian_dlight.UkrainianDelight; -import com.megatrex4.ukrainian_dlight.block.custom.JarBlock; import com.megatrex4.ukrainian_dlight.item.FoodBlockItem; import net.minecraft.block.Block; import net.minecraft.item.BlockItem; diff --git a/src/main/java/com/megatrex4/ukrainian_dlight/block/custom/JarBlock.java b/src/main/java/com/megatrex4/ukrainian_dlight/block/JarBlock.java similarity index 99% rename from src/main/java/com/megatrex4/ukrainian_dlight/block/custom/JarBlock.java rename to src/main/java/com/megatrex4/ukrainian_dlight/block/JarBlock.java index 64adaa2..1fcbc55 100644 --- a/src/main/java/com/megatrex4/ukrainian_dlight/block/custom/JarBlock.java +++ b/src/main/java/com/megatrex4/ukrainian_dlight/block/JarBlock.java @@ -1,4 +1,4 @@ -package com.megatrex4.ukrainian_dlight.block.custom; +package com.megatrex4.ukrainian_dlight.block; import net.fabricmc.fabric.api.blockrenderlayer.v1.BlockRenderLayerMap; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; diff --git a/src/main/java/com/megatrex4/ukrainian_dlight/block/custom/SaltBlock.java b/src/main/java/com/megatrex4/ukrainian_dlight/block/SaltBlock.java similarity index 95% rename from src/main/java/com/megatrex4/ukrainian_dlight/block/custom/SaltBlock.java rename to src/main/java/com/megatrex4/ukrainian_dlight/block/SaltBlock.java index 5ecb7f5..9d40a44 100644 --- a/src/main/java/com/megatrex4/ukrainian_dlight/block/custom/SaltBlock.java +++ b/src/main/java/com/megatrex4/ukrainian_dlight/block/SaltBlock.java @@ -1,4 +1,4 @@ -package com.megatrex4.ukrainian_dlight.block.custom; +package com.megatrex4.ukrainian_dlight.block; import net.minecraft.block.Block; import net.minecraft.block.BlockState; diff --git a/src/main/java/com/megatrex4/ukrainian_dlight/block/custom/PysankerTableBlock.java b/src/main/java/com/megatrex4/ukrainian_dlight/block/custom/PysankerTableBlock.java deleted file mode 100644 index fa51f77..0000000 --- a/src/main/java/com/megatrex4/ukrainian_dlight/block/custom/PysankerTableBlock.java +++ /dev/null @@ -1,58 +0,0 @@ -package com.megatrex4.ukrainian_dlight.block.custom; - -import com.megatrex4.ukrainian_dlight.screen.PysankersTableScreenHandler; -import net.fabricmc.fabric.api.screenhandler.v1.ExtendedScreenHandlerFactory; -import net.minecraft.block.AbstractBlock; -import net.minecraft.block.Block; -import net.minecraft.block.BlockState; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.inventory.SimpleInventory; -import net.minecraft.network.PacketByteBuf; -import net.minecraft.screen.NamedScreenHandlerFactory; -import net.minecraft.screen.ScreenHandler; -import net.minecraft.screen.ScreenHandlerContext; -import net.minecraft.server.network.ServerPlayerEntity; -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; - -public class PysankerTableBlock extends Block { - - public PysankerTableBlock(AbstractBlock.Settings settings) { - super(settings); - } - - @Override - public ActionResult onUse(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockHitResult hit) { - if (!world.isClient) { - player.openHandledScreen(createScreenHandlerFactory(state, world, pos)); - } - return ActionResult.SUCCESS; - } - - @Nullable - @Override - public NamedScreenHandlerFactory createScreenHandlerFactory(BlockState state, World world, BlockPos pos) { - return new ExtendedScreenHandlerFactory() { - @Override - public void writeScreenOpeningData(ServerPlayerEntity player, PacketByteBuf buf) { - buf.writeBlockPos(pos); - } - - @Override - public Text getDisplayName() { - return Text.translatable("container.pysankers_table"); - } - - @Override - public ScreenHandler createMenu(int syncId, net.minecraft.entity.player.PlayerInventory inv, PlayerEntity player) { - return new PysankersTableScreenHandler(syncId, inv, (PysankerTableBlock) state.getBlock(), new SimpleInventory(PysankersTableScreenHandler.INVENTORY_SIZE), ScreenHandlerContext.create(world, pos)); - } - - }; - } -} diff --git a/src/main/java/com/megatrex4/ukrainian_dlight/block/entity/BrewingKegBlockEntity.java b/src/main/java/com/megatrex4/ukrainian_dlight/block/entity/BrewingKegBlockEntity.java index efcb0e3..e54e58c 100644 --- a/src/main/java/com/megatrex4/ukrainian_dlight/block/entity/BrewingKegBlockEntity.java +++ b/src/main/java/com/megatrex4/ukrainian_dlight/block/entity/BrewingKegBlockEntity.java @@ -50,7 +50,7 @@ import java.util.*; -import static com.megatrex4.ukrainian_dlight.block.custom.BrewingKegBlock.FACING; +import static com.megatrex4.ukrainian_dlight.block.BrewingKegBlock.FACING; public class BrewingKegBlockEntity extends BlockEntity implements ExtendedScreenHandlerFactory, ImplementedInventory { private final DefaultedList inventory = DefaultedList.ofSize(INVENTORY_SIZE, ItemStack.EMPTY); diff --git a/src/main/java/com/megatrex4/ukrainian_dlight/features/Features.java b/src/main/java/com/megatrex4/ukrainian_dlight/gen/features/Features.java similarity index 76% rename from src/main/java/com/megatrex4/ukrainian_dlight/features/Features.java rename to src/main/java/com/megatrex4/ukrainian_dlight/gen/features/Features.java index df782ec..aa4d82b 100644 --- a/src/main/java/com/megatrex4/ukrainian_dlight/features/Features.java +++ b/src/main/java/com/megatrex4/ukrainian_dlight/gen/features/Features.java @@ -1,8 +1,8 @@ -package com.megatrex4.ukrainian_dlight.features; +package com.megatrex4.ukrainian_dlight.gen.features; import com.megatrex4.ukrainian_dlight.UkrainianDelight; -import com.megatrex4.ukrainian_dlight.features.features.SaltCavesFeature; -import com.megatrex4.ukrainian_dlight.features.features.config.SaltCavesFeatureConfig; +import com.megatrex4.ukrainian_dlight.gen.features.features.SaltCavesFeature; +import com.megatrex4.ukrainian_dlight.gen.features.features.config.SaltCavesFeatureConfig; import net.minecraft.registry.Registries; import net.minecraft.registry.Registry; import net.minecraft.world.gen.feature.Feature; diff --git a/src/main/java/com/megatrex4/ukrainian_dlight/features/features/SaltCavesFeature.java b/src/main/java/com/megatrex4/ukrainian_dlight/gen/features/features/SaltCavesFeature.java similarity index 96% rename from src/main/java/com/megatrex4/ukrainian_dlight/features/features/SaltCavesFeature.java rename to src/main/java/com/megatrex4/ukrainian_dlight/gen/features/features/SaltCavesFeature.java index 33567c0..c76f35a 100644 --- a/src/main/java/com/megatrex4/ukrainian_dlight/features/features/SaltCavesFeature.java +++ b/src/main/java/com/megatrex4/ukrainian_dlight/gen/features/features/SaltCavesFeature.java @@ -1,7 +1,7 @@ -package com.megatrex4.ukrainian_dlight.features.features; +package com.megatrex4.ukrainian_dlight.gen.features.features; -import com.megatrex4.ukrainian_dlight.features.features.config.SaltCavesFeatureConfig; +import com.megatrex4.ukrainian_dlight.gen.features.features.config.SaltCavesFeatureConfig; import com.mojang.serialization.Codec; import net.minecraft.block.BlockState; import net.minecraft.util.math.BlockPos; diff --git a/src/main/java/com/megatrex4/ukrainian_dlight/features/features/config/SaltCavesFeatureConfig.java b/src/main/java/com/megatrex4/ukrainian_dlight/gen/features/features/config/SaltCavesFeatureConfig.java similarity index 94% rename from src/main/java/com/megatrex4/ukrainian_dlight/features/features/config/SaltCavesFeatureConfig.java rename to src/main/java/com/megatrex4/ukrainian_dlight/gen/features/features/config/SaltCavesFeatureConfig.java index 2c37132..e16d250 100644 --- a/src/main/java/com/megatrex4/ukrainian_dlight/features/features/config/SaltCavesFeatureConfig.java +++ b/src/main/java/com/megatrex4/ukrainian_dlight/gen/features/features/config/SaltCavesFeatureConfig.java @@ -1,4 +1,4 @@ -package com.megatrex4.ukrainian_dlight.features.features.config; +package com.megatrex4.ukrainian_dlight.gen.features.features.config; import com.mojang.serialization.Codec; import com.mojang.serialization.codecs.RecordCodecBuilder; diff --git a/src/main/java/com/megatrex4/ukrainian_dlight/item/KrashankyItem.java b/src/main/java/com/megatrex4/ukrainian_dlight/item/KrashankyItem.java index 89361ca..8d3f3de 100644 --- a/src/main/java/com/megatrex4/ukrainian_dlight/item/KrashankyItem.java +++ b/src/main/java/com/megatrex4/ukrainian_dlight/item/KrashankyItem.java @@ -1,6 +1,12 @@ package com.megatrex4.ukrainian_dlight.item; +import net.minecraft.client.item.TooltipContext; import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.text.Text; +import net.minecraft.world.World; + +import java.util.List; public class KrashankyItem extends Item { public KrashankyItem(Settings settings) { diff --git a/src/main/java/com/megatrex4/ukrainian_dlight/item/ModItemGroups.java b/src/main/java/com/megatrex4/ukrainian_dlight/item/ModItemGroups.java index dc0830f..cfdf924 100644 --- a/src/main/java/com/megatrex4/ukrainian_dlight/item/ModItemGroups.java +++ b/src/main/java/com/megatrex4/ukrainian_dlight/item/ModItemGroups.java @@ -33,7 +33,6 @@ public class ModItemGroups { .icon(() -> new ItemStack(ItemsRegistry.CUCUMBER)) .entries((displayContext, entries) -> { entries.add(BlockRegistry.BREWING_KEG); - entries.add(BlockRegistry.PYSANKER_TABLE); entries.add(BlockRegistry.SALT_BAG); entries.add(BlockRegistry.SALT_BLOCK); entries.add(ItemsRegistry.SALT); diff --git a/src/main/java/com/megatrex4/ukrainian_dlight/registry/BlockRegistry.java b/src/main/java/com/megatrex4/ukrainian_dlight/registry/BlockRegistry.java index 803915c..a694eab 100644 --- a/src/main/java/com/megatrex4/ukrainian_dlight/registry/BlockRegistry.java +++ b/src/main/java/com/megatrex4/ukrainian_dlight/registry/BlockRegistry.java @@ -1,10 +1,9 @@ package com.megatrex4.ukrainian_dlight.registry; import com.megatrex4.ukrainian_dlight.UkrainianDelight; -import com.megatrex4.ukrainian_dlight.block.custom.BrewingKegBlock; -import com.megatrex4.ukrainian_dlight.block.custom.BrewingKegBlockItem; -import com.megatrex4.ukrainian_dlight.block.custom.PysankerTableBlock; -import com.megatrex4.ukrainian_dlight.block.custom.SaltBlock; +import com.megatrex4.ukrainian_dlight.block.BrewingKegBlock; +import com.megatrex4.ukrainian_dlight.block.BrewingKegBlockItem; +import com.megatrex4.ukrainian_dlight.block.SaltBlock; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.block.Block; import net.minecraft.block.Blocks; @@ -29,8 +28,6 @@ public class BlockRegistry { public static final Block BREWING_KEG = registerBlock("brewing_keg", new BrewingKegBlock(FabricBlockSettings.copyOf(Blocks.OAK_PLANKS).sounds(BlockSoundGroup.WOOD).nonOpaque())); - public static final Block PYSANKER_TABLE = registerBlock("pysankers_table", - new PysankerTableBlock(FabricBlockSettings.copyOf(Blocks.OAK_PLANKS).sounds(BlockSoundGroup.WOOD))); private static Block registerBlock(String name, Block block){ registerBlockItem(name, block); diff --git a/src/main/java/com/megatrex4/ukrainian_dlight/registry/ItemsRegistry.java b/src/main/java/com/megatrex4/ukrainian_dlight/registry/ItemsRegistry.java index 5c85935..a471349 100644 --- a/src/main/java/com/megatrex4/ukrainian_dlight/registry/ItemsRegistry.java +++ b/src/main/java/com/megatrex4/ukrainian_dlight/registry/ItemsRegistry.java @@ -1,5 +1,7 @@ package com.megatrex4.ukrainian_dlight.registry; +import com.google.common.collect.FluentIterable; +import com.google.common.collect.ImmutableList; import com.megatrex4.ukrainian_dlight.UkrainianDelight; import com.megatrex4.ukrainian_dlight.item.FoodItemBuilder; import com.megatrex4.ukrainian_dlight.item.ModFoodComponents; @@ -10,6 +12,8 @@ import net.minecraft.registry.Registry; import net.minecraft.util.Identifier; +import java.util.List; + public class ItemsRegistry { // Define items using the ItemBuilder @@ -70,6 +74,7 @@ public class ItemsRegistry { public static final Item SALT = registerItem("salt", new FoodItemBuilder().build()); public static final Item YEAST = registerItem("yeast", new FoodItemBuilder().build()); + //KRASHANKY public static final Item BLACK_KRASHANKA = registerItem("black_krashanka", new KrashankyItem(new FabricItemSettings())); public static final Item BLUE_KRASHANKA = registerItem("blue_krashanka", new KrashankyItem(new FabricItemSettings())); public static final Item BROWN_KRASHANKA = registerItem("brown_krashanka", new KrashankyItem(new FabricItemSettings())); @@ -87,6 +92,29 @@ public class ItemsRegistry { public static final Item WHITE_KRASHANKA = registerItem("white_krashanka", new KrashankyItem(new FabricItemSettings())); public static final Item YELLOW_KRASHANKA = registerItem("yellow_krashanka", new KrashankyItem(new FabricItemSettings())); +// public static final FluentIterable KRASHANKY_ITEMS = ; + + //make to add all KRASHANY to KRASHANY_ITEMS to FluentIterable + public static final ImmutableList KRASHANKY_ITEMS = ImmutableList.of( + BLACK_KRASHANKA, + BLUE_KRASHANKA, + BROWN_KRASHANKA, + CYAN_KRASHANKA, + GREEN_KRASHANKA, + GRAY_KRASHANKA, + LIGHT_BLUE_KRASHANKA, + LIGHT_GRAY_KRASHANKA, + LIME_KRASHANKA, + MAGENTA_KRASHANKA, + ORANGE_KRASHANKA, + PINK_KRASHANKA, + PURPLE_KRASHANKA, + RED_KRASHANKA, + WHITE_KRASHANKA, + YELLOW_KRASHANKA + ); + + // Register items public static Item registerItem(String name, Item item) { diff --git a/src/main/java/com/megatrex4/ukrainian_dlight/registry/PatternRegistry.java b/src/main/java/com/megatrex4/ukrainian_dlight/registry/PatternRegistry.java deleted file mode 100644 index d91c429..0000000 --- a/src/main/java/com/megatrex4/ukrainian_dlight/registry/PatternRegistry.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.megatrex4.ukrainian_dlight.registry; - -import net.minecraft.util.Identifier; - -public class PatternRegistry { - - private final Identifier id; - private final String texturePath; - - public PatternRegistry(String patternName) { - this.id = new Identifier("ukrainian_dlight", patternName); - this.texturePath = "assets/ukrainian_delight/textures/item/krashanky/patterns/" + patternName + ".png"; - } - - public Identifier getId() { - return id; - } - - public String getTexturePath() { - return texturePath; - } -} diff --git a/src/main/java/com/megatrex4/ukrainian_dlight/registry/ScreenHandlersRegistry.java b/src/main/java/com/megatrex4/ukrainian_dlight/registry/ScreenHandlersRegistry.java index 49b4af7..2fe441a 100644 --- a/src/main/java/com/megatrex4/ukrainian_dlight/registry/ScreenHandlersRegistry.java +++ b/src/main/java/com/megatrex4/ukrainian_dlight/registry/ScreenHandlersRegistry.java @@ -2,7 +2,6 @@ import com.megatrex4.ukrainian_dlight.UkrainianDelight; import com.megatrex4.ukrainian_dlight.screen.BrewingKegScreenHandler; -import com.megatrex4.ukrainian_dlight.screen.PysankersTableScreenHandler; import net.fabricmc.fabric.api.screenhandler.v1.ExtendedScreenHandlerType; import net.minecraft.inventory.SimpleInventory; import net.minecraft.registry.Registries; @@ -16,12 +15,6 @@ public class ScreenHandlersRegistry { Registry.register(Registries.SCREEN_HANDLER, new Identifier(UkrainianDelight.MOD_ID, "brewing_keg_screen_handler"), new ExtendedScreenHandlerType<>(BrewingKegScreenHandler::new)); - - //register PYSANKERS_TABLE - public static final ScreenHandlerType PYSANKERS_TABLE_SCREEN_HANDLER = - Registry.register(Registries.SCREEN_HANDLER, new Identifier(UkrainianDelight.MOD_ID, "pysankers_table_screen_handler"), - new ExtendedScreenHandlerType<>((syncId, inv, buf) -> new PysankersTableScreenHandler(syncId, inv, null, new SimpleInventory(PysankersTableScreenHandler.INVENTORY_SIZE), ScreenHandlerContext.EMPTY))); - public static void registerModScreenHandlers() { UkrainianDelight.LOGGER.info("Registering Mod Screen Handlers for " + UkrainianDelight.MOD_ID); // If there are more screen handlers, register them here diff --git a/src/main/java/com/megatrex4/ukrainian_dlight/registry/ScreensRegistry.java b/src/main/java/com/megatrex4/ukrainian_dlight/registry/ScreensRegistry.java index dbba606..5600da2 100644 --- a/src/main/java/com/megatrex4/ukrainian_dlight/registry/ScreensRegistry.java +++ b/src/main/java/com/megatrex4/ukrainian_dlight/registry/ScreensRegistry.java @@ -1,12 +1,10 @@ package com.megatrex4.ukrainian_dlight.registry; import com.megatrex4.ukrainian_dlight.screen.BrewingKegScreen; -import com.megatrex4.ukrainian_dlight.screen.PysankersTableScreen; import net.fabricmc.fabric.api.client.screenhandler.v1.ScreenRegistry; public class ScreensRegistry { public static void registerScreens() { ScreenRegistry.register(ScreenHandlersRegistry.BREWING_KEG_SCREEN_HANDLER, BrewingKegScreen::new); - ScreenRegistry.register(ScreenHandlersRegistry.PYSANKERS_TABLE_SCREEN_HANDLER, PysankersTableScreen::new); } } diff --git a/src/main/java/com/megatrex4/ukrainian_dlight/registry/manager/PatternManager.java b/src/main/java/com/megatrex4/ukrainian_dlight/registry/manager/PatternManager.java deleted file mode 100644 index 76a0bf1..0000000 --- a/src/main/java/com/megatrex4/ukrainian_dlight/registry/manager/PatternManager.java +++ /dev/null @@ -1,57 +0,0 @@ -package com.megatrex4.ukrainian_dlight.registry.manager; - -import com.megatrex4.ukrainian_dlight.registry.PatternRegistry; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NbtCompound; -import net.minecraft.nbt.NbtList; - -import java.util.HashMap; -import java.util.Map; - -public class PatternManager { - private static final Map patterns = new HashMap<>(); - - static { - // Define all patterns here - patterns.put("border", new PatternRegistry("border")); - patterns.put("circle", new PatternRegistry("circle")); - patterns.put("cross", new PatternRegistry("cross")); - patterns.put("diagonal_left", new PatternRegistry("diagonal_left")); - patterns.put("diagonal_right", new PatternRegistry("diagonal_right")); - patterns.put("flower", new PatternRegistry("flower")); - patterns.put("globe", new PatternRegistry("globe")); - patterns.put("gradient", new PatternRegistry("gradient")); - patterns.put("gradient_up", new PatternRegistry("gradient_up")); - patterns.put("half_vertical", new PatternRegistry("half_vertical")); - patterns.put("half_vertical_right", new PatternRegistry("half_vertical_right")); - patterns.put("piglin", new PatternRegistry("piglin")); - patterns.put("rhombus", new PatternRegistry("rhombus")); - patterns.put("small_stripes", new PatternRegistry("small_stripes")); - patterns.put("straight_cross", new PatternRegistry("straight_cross")); - patterns.put("stripe_bottom", new PatternRegistry("stripe_bottom")); - patterns.put("stripe_center", new PatternRegistry("stripe_center")); - patterns.put("stripe_downleft", new PatternRegistry("stripe_downleft")); - patterns.put("stripe_downright", new PatternRegistry("stripe_downright")); - patterns.put("stripe_middle", new PatternRegistry("stripe_middle")); - patterns.put("stripe_top", new PatternRegistry("stripe_top")); - patterns.put("triangles_bottom", new PatternRegistry("triangles_bottom")); - patterns.put("triangles_top", new PatternRegistry("triangles_top")); - patterns.put("triangle_bottom", new PatternRegistry("triangle_bottom")); - patterns.put("triangle_top", new PatternRegistry("triangle_top")); - } - - public static PatternRegistry getPatternForItem(ItemStack itemStack) { - if (itemStack.hasNbt()) { - NbtCompound nbt = itemStack.getNbt(); - if (nbt != null && nbt.contains("Patterns", NbtCompound.LIST_TYPE)) { - NbtList patternList = nbt.getList("Patterns", NbtCompound.COMPOUND_TYPE); - if (!patternList.isEmpty()) { - NbtCompound patternData = patternList.getCompound(0); // Assumes the first pattern is the one to use - String patternName = patternData.getString("Pattern"); - return patterns.getOrDefault(patternName, patterns.get("border")); // Default to "border" if not found - } - } - } - return patterns.get("border"); // Default to "border" if no NBT data or pattern not found - } -} diff --git a/src/main/java/com/megatrex4/ukrainian_dlight/screen/PysankersTableScreen.java b/src/main/java/com/megatrex4/ukrainian_dlight/screen/PysankersTableScreen.java deleted file mode 100644 index 8cf609c..0000000 --- a/src/main/java/com/megatrex4/ukrainian_dlight/screen/PysankersTableScreen.java +++ /dev/null @@ -1,74 +0,0 @@ -package com.megatrex4.ukrainian_dlight.screen; - -import com.megatrex4.ukrainian_dlight.registry.PatternRegistry; -import com.megatrex4.ukrainian_dlight.registry.manager.PatternManager; -import net.fabricmc.api.EnvType; -import net.fabricmc.api.Environment; -import net.minecraft.client.gui.DrawContext; -import net.minecraft.client.gui.screen.ingame.HandledScreen; -import net.minecraft.entity.player.PlayerInventory; -import net.minecraft.item.ItemStack; -import net.minecraft.screen.slot.Slot; -import net.minecraft.text.Text; -import net.minecraft.util.Identifier; - -@Environment(EnvType.CLIENT) -public class PysankersTableScreen extends HandledScreen { - private static final Identifier TEXTURE = new Identifier("ukrainian_delight", "textures/gui/container/pysankers_table.png"); - - public PysankersTableScreen(PysankersTableScreenHandler handler, PlayerInventory inventory, Text title) { - super(handler, inventory, title); - this.backgroundWidth = 176; - this.backgroundHeight = 166; - } - - @Override - protected void init() { - super.init(); - } - - @Override - protected void drawBackground(DrawContext context, float delta, int mouseX, int mouseY) { - // Draw the main GUI texture - context.drawTexture(TEXTURE, this.x, this.y, 0, 0, this.backgroundWidth, this.backgroundHeight); - - // Get the slots from the handler - Slot krashankaSlot = this.handler.getSlot(0); - Slot dyeSlot = this.handler.getSlot(1); - Slot patternSlot = this.handler.getSlot(2); - Slot outputSlot = this.handler.getSlot(3); - - // Draw slot backgrounds - if (!krashankaSlot.hasStack()) { - context.drawTexture(TEXTURE, this.x + krashankaSlot.x, this.y + krashankaSlot.y, this.backgroundWidth, 0, 16, 16); - } - if (!dyeSlot.hasStack()) { - context.drawTexture(TEXTURE, this.x + dyeSlot.x, this.y + dyeSlot.y, this.backgroundWidth + 16, 0, 16, 16); - } - if (!patternSlot.hasStack()) { - context.drawTexture(TEXTURE, this.x + patternSlot.x, this.y + patternSlot.y, this.backgroundWidth + 32, 0, 16, 16); - } - - // Draw the pattern if available - ItemStack patternStack = patternSlot.getStack(); - if (!patternStack.isEmpty()) { - // Get the pattern ID - PatternRegistry patternRegistry = PatternManager.getPatternForItem(patternStack); - if (patternRegistry != null) { - Identifier patternTexture = new Identifier("ukrainian_dlight", "textures/item/krashanky/patterns/" + patternRegistry.getId().getPath() + ".png"); - - // Render the pattern texture - context.drawTexture(patternTexture, this.x + patternSlot.x + 1, this.y + patternSlot.y + 1, 0, 0, 16, 16); - } - } - } - - @Override - public void render(DrawContext context, int mouseX, int mouseY, float delta) { - this.renderBackground(context); - super.render(context, mouseX, mouseY, delta); - this.drawMouseoverTooltip(context, mouseX, mouseY); - } -} - - diff --git a/src/main/java/com/megatrex4/ukrainian_dlight/screen/PysankersTableScreenHandler.java b/src/main/java/com/megatrex4/ukrainian_dlight/screen/PysankersTableScreenHandler.java deleted file mode 100644 index 6f6725d..0000000 --- a/src/main/java/com/megatrex4/ukrainian_dlight/screen/PysankersTableScreenHandler.java +++ /dev/null @@ -1,151 +0,0 @@ -package com.megatrex4.ukrainian_dlight.screen; - -import com.megatrex4.ukrainian_dlight.block.custom.PysankerTableBlock; -import com.megatrex4.ukrainian_dlight.registry.PatternRegistry; -import com.megatrex4.ukrainian_dlight.registry.ScreenHandlersRegistry; -import com.megatrex4.ukrainian_dlight.registry.manager.PatternManager; -import net.fabricmc.fabric.api.util.NbtType; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.entity.player.PlayerInventory; -import net.minecraft.inventory.Inventory; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NbtCompound; -import net.minecraft.nbt.NbtList; -import net.minecraft.registry.entry.RegistryEntry; -import net.minecraft.screen.Property; -import net.minecraft.screen.ScreenHandler; -import net.minecraft.screen.ScreenHandlerContext; -import net.minecraft.screen.slot.Slot; -import net.minecraft.screen.slot.SlotActionType; -import net.minecraft.util.Identifier; - -import java.util.List; - -public class PysankersTableScreenHandler extends ScreenHandler { - private final Inventory inventory; - private final ScreenHandlerContext context; - - // Slot indices - public static final int KRASHANKA_SLOT = 0; - public static final int DYE_SLOT = 1; - public static final int PATTERN_SLOT = 2; - public static final int OUTPUT_SLOT = 3; - - // Inventory size - public static final int INVENTORY_SIZE = 4; // 4 slots for krashanka, dye, pattern, and output - - private final Property selectedPattern; - private List> patterns; - private Runnable inventoryChangeListener; - - public PysankersTableScreenHandler(int syncId, PlayerInventory playerInventory, PysankerTableBlock block, Inventory inventory, ScreenHandlerContext context) { - super(ScreenHandlersRegistry.PYSANKERS_TABLE_SCREEN_HANDLER, syncId); - this.inventory = inventory; - checkSize(inventory, INVENTORY_SIZE); - this.selectedPattern = Property.create(); - this.patterns = List.of(); - this.inventoryChangeListener = () -> {}; - - this.context = context; - - // Add slots for the Pysankers Table - this.addSlot(new Slot(inventory, KRASHANKA_SLOT, 13, 26)); // Input slot for krashanka - this.addSlot(new Slot(inventory, DYE_SLOT, 33, 26)); // Dye slot - this.addSlot(new Slot(inventory, PATTERN_SLOT, 23, 45)); // Pattern slot - this.addSlot(new Slot(inventory, OUTPUT_SLOT, 143, 58)); // Output slot - - addPlayerInventory(playerInventory); - addPlayerHotbar(playerInventory); - } - - @Override - public boolean canUse(PlayerEntity player) { - return this.inventory.canPlayerUse(player); - } - - // Example method for applying a pattern to krashanka - public void applyPattern(ItemStack krashanka, ItemStack patternItem) { - Identifier patternId = PatternManager.getPatternForItem(patternItem).getId(); - NbtCompound nbt = krashanka.getOrCreateNbt(); - NbtList patterns; - if (nbt.contains("Patterns", NbtType.LIST)) { - patterns = nbt.getList("Patterns", NbtType.COMPOUND); - } else { - patterns = new NbtList(); - nbt.put("Patterns", patterns); - } - NbtCompound patternData = new NbtCompound(); - patternData.putString("Pattern", patternId.toString()); - patterns.add(patternData); - krashanka.setNbt(nbt); - this.slots.get(OUTPUT_SLOT).setStack(krashanka.copy()); // Update output slot - } - - - @Override - public ItemStack quickMove(PlayerEntity player, int slotId) { - Slot slot = this.slots.get(slotId); - if (slot == null || !slot.hasStack()) { - return ItemStack.EMPTY; - } - - ItemStack stack = slot.getStack(); - ItemStack stackCopy = stack.copy(); - - if (slotId < INVENTORY_SIZE) { - // Move from container to player inventory - if (!this.insertItem(stack, INVENTORY_SIZE, INVENTORY_SIZE + 36, true)) { - return ItemStack.EMPTY; - } - } else { - // Move from player inventory to container - if (!this.insertItem(stack, 0, INVENTORY_SIZE, false)) { - return ItemStack.EMPTY; - } - } - - if (stack.isEmpty()) { - slot.setStack(ItemStack.EMPTY); - } else { - slot.markDirty(); - } - - return stackCopy; - } - - - @Override - public void onSlotClick(int slotId, int button, SlotActionType actionType, PlayerEntity player) { - if (slotId >= 0 && slotId < this.slots.size()) { - Slot slot = this.slots.get(slotId); - if (slot != null) { - if (slotId == PATTERN_SLOT) { - ItemStack patternItem = slot.getStack(); - ItemStack krashankaItem = this.getSlot(KRASHANKA_SLOT).getStack(); - - // Apply the pattern to the krashanka item - applyPattern(krashankaItem, patternItem); - this.slots.get(OUTPUT_SLOT).setStack(krashankaItem.copy()); // Update output slot - } else { - super.onSlotClick(slotId, button, actionType, player); // Call parent method for default handling - } - } - } - } - - private void addPlayerInventory(PlayerInventory playerInventory) { - // Add slots for the player's inventory - for (int i = 0; i < 3; ++i) { - for (int l = 0; l < 9; ++l) { - this.addSlot(new Slot(playerInventory, l + i * 9 + 9, 8 + l * 18, 84 + i * 18)); - } - } - } - - private void addPlayerHotbar(PlayerInventory playerInventory) { - // Add slots for the player's hotbar - for (int i = 0; i < 9; ++i) { - this.addSlot(new Slot(playerInventory, i, 8 + i * 18, 142)); - } - } -}