From 0860afa51f1604090a0f0779a945a73230c9e533 Mon Sep 17 00:00:00 2001 From: Holmes Date: Sun, 21 Dec 2025 14:48:44 +0100 Subject: [PATCH] Updated .pngs, Fixed a Reload/Unload-Issue, Fixed an Issue where Guns didn't stop shooting, Updated SupplyDrop.java, Added new methods to BlockItemAction, Added headshot sound in AbstractGun, Fixed .pngs, --- .../com/craftingdead/core/CraftingDead.java | 6 +- .../mixin/AbstractContainerMenuMixin.java | 7 +- .../core/mixin/InventoryMixin.java | 69 ++--- .../core/mixin/KeyboardHandlerMixin.java | 6 +- .../core/mixin/LivingEntityMixin.java | 8 +- .../core/mixin/LocalPlayerMixin.java | 62 ---- .../core/network/NetworkChannel.java | 10 +- .../play/BlockDestroyActionMessage.java | 18 +- .../play/BlockDestroyParticleMessage.java | 50 ++++ .../craftingdead/core/server/ServerDist.java | 8 - .../core/trauma/TraumaHandler.java | 80 ++--- .../world/action/RemoveMagazineAction.java | 18 +- .../world/action/item/ItemActionType.java | 27 +- .../action/reload/AbstractReloadAction.java | 15 +- .../core/world/item/ClothingItem.java | 174 +---------- .../craftingdead/core/world/item/GunItem.java | 102 +++---- .../craftingdead/core/world/item/HatItem.java | 96 +----- .../core/world/item/MagazineItem.java | 18 +- .../core/world/item/MeleeWeaponItem.java | 56 +--- .../core/world/item/ModItems.java | 35 ++- .../core/world/item/PaintItem.java | 15 +- .../core/world/item/StorageItem.java | 68 +---- .../ClothingProtectionInitializer.java | 44 +-- .../core/world/item/gun/AbstractGun.java | 10 +- .../ammoprovider/RefillableAmmoProvider.java | 4 +- .../core/world/item/gun/skin/Skins.java | 37 ++- .../src/main/resources/META-INF/mods.toml | 7 - .../assets/craftingdead/lang/en_us.json | 5 + .../textures/attachment/acog_sight_reddot.png | Bin 106 -> 137 bytes .../textures/attachment/eotech_reddot.png | Bin 147 -> 192 bytes .../attachment/red_dot_sight_reddot.png | Bin 157 -> 189 bytes .../textures/gui/container/crafting.png | Bin 2037 -> 1990 bytes .../textures/gui/container/equipment.png | Bin 5072 -> 5031 bytes .../textures/gui/container/generic_54.png | Bin 3128 -> 3085 bytes .../textures/gui/container/widgets.png | Bin 11219 -> 0 bytes .../craftingdead/textures/item/acog_sight.png | Bin 408 -> 315 bytes .../textures/item/acr_magazine.png | Bin 358 -> 837 bytes .../textures/item/ak47_30_round_magazine.png | Bin 312 -> 297 bytes .../textures/item/as50_magazine.png | Bin 342 -> 240 bytes .../textures/item/awp_magazine.png | Bin 357 -> 219 bytes .../craftingdead/textures/item/bandage.png | Bin 339 -> 665 bytes .../craftingdead/textures/item/bipod.png | Bin 346 -> 184 bytes .../textures/item/desert_eagle_magazine.png | Bin 298 -> 323 bytes .../textures/item/dmr_magazine.png | Bin 269 -> 492 bytes .../textures/item/eotech_sight.png | Bin 438 -> 444 bytes .../textures/item/fn57_magazine.png | Bin 290 -> 392 bytes .../textures/item/fnfal_magazine.png | Bin 308 -> 248 bytes .../textures/item/g18_magazine.png | Bin 261 -> 214 bytes .../textures/item/g36c_magazine.png | Bin 405 -> 467 bytes .../textures/item/hk417_magazine.png | Bin 320 -> 406 bytes .../craftingdead/textures/item/hp_scope.png | Bin 316 -> 266 bytes .../craftingdead/textures/item/lp_scope.png | Bin 333 -> 272 bytes .../textures/item/m107_magazine.png | Bin 301 -> 388 bytes .../textures/item/m1911_magazine.png | Bin 339 -> 436 bytes .../textures/item/m240b_magazine.png | Bin 567 -> 689 bytes .../textures/item/m9_magazine.png | Bin 270 -> 350 bytes .../textures/item/mac10_extended_magazine.png | Bin 299 -> 568 bytes .../textures/item/mac10_magazine.png | Bin 267 -> 402 bytes .../textures/item/magnum_ammunition.png | Bin 526 -> 347 bytes .../textures/item/minigun_magazine.png | Bin 375 -> 718 bytes .../textures/item/mk48mod_magazine.png | Bin 544 -> 560 bytes .../textures/item/mossberg_shells.png | Bin 415 -> 522 bytes .../textures/item/mp5a5_21_round_magazine.png | Bin 323 -> 369 bytes .../textures/item/mp5a5_35_round_magazine.png | Bin 334 -> 381 bytes .../textures/item/mpt55_magazine.png | Bin 412 -> 376 bytes .../textures/item/p250_magazine.png | Bin 270 -> 212 bytes .../textures/item/p90_magazine.png | Bin 249 -> 169 bytes .../textures/item/red_dot_sight.png | Bin 375 -> 515 bytes .../textures/item/rpk_drum_magazine.png | Bin 441 -> 610 bytes .../textures/item/rpk_magazine.png | Bin 338 -> 385 bytes .../textures/item/sporter22_magazine.png | Bin 345 -> 373 bytes .../item/stanag_20_round_magazine.png | Bin 316 -> 552 bytes .../item/stanag_30_round_magazine.png | Bin 340 -> 265 bytes .../textures/item/stanag_box_magazine.png | Bin 374 -> 535 bytes .../textures/item/stanag_drum_magazine.png | Bin 490 -> 506 bytes .../craftingdead/textures/item/suppressor.png | Bin 238 -> 579 bytes .../textures/item/tactical_grip.png | Bin 343 -> 580 bytes .../textures/item/taser_cartridge.png | Bin 353 -> 371 bytes .../textures/item/trench_gun_shells.png | Bin 418 -> 464 bytes .../textures/item/vector_magazine.png | Bin 240 -> 360 bytes .../textures/gui/container/crafting_table.png | Bin 2453 -> 1877 bytes .../textures/gui/container/generic_54.png | Bin 1687 -> 1775 bytes .../main/resources/craftingdead.mixins.json | 2 + .../world/action/SurvivalActionTypes.java | 10 +- .../survival/world/entity/SupplyDrop.java | 5 + .../survival/world/item/ConsumableItem.java | 8 +- .../survival/world/item/SurvivalItems.java | 275 +++--------------- .../src/main/resources/META-INF/mods.toml | 7 - .../craftingdeadsurvival/lang/en_us.json | 18 +- .../textures/item/canned_beans.png | Bin 790 -> 768 bytes .../textures/item/canned_corned_beef.png | Bin 683 -> 801 bytes .../textures/item/canned_custard.png | Bin 730 -> 863 bytes .../textures/item/canned_dog_food.png | Bin 759 -> 757 bytes .../textures/item/canned_pasta.png | Bin 750 -> 786 bytes .../textures/item/canned_peaches.png | Bin 678 -> 812 bytes .../textures/item/canned_pickles.png | Bin 705 -> 616 bytes .../textures/item/canned_sweetcorn.png | Bin 687 -> 778 bytes .../textures/item/canned_tomato_soup.png | Bin 736 -> 3457 bytes .../textures/item/canned_tuna.png | Bin 761 -> 612 bytes .../textures/item/cereal.png | Bin 754 -> 597 bytes .../textures/item/emerald_cereal.png | Bin 769 -> 684 bytes .../textures/item/empty_milk_carton.png | Bin 469 -> 684 bytes .../textures/item/empty_water_bottle.png | Bin 591 -> 564 bytes .../textures/item/flake_cereal.png | Bin 784 -> 522 bytes .../textures/item/medical_drop_radio.png | Bin 371 -> 648 bytes .../textures/item/military_drop_radio.png | Bin 378 -> 653 bytes .../textures/item/milk_carton.png | Bin 417 -> 525 bytes .../textures/item/nutty_cereal.png | Bin 715 -> 545 bytes .../textures/item/open_canned_beans.png | Bin 834 -> 978 bytes .../textures/item/open_canned_corned_beef.png | Bin 731 -> 1022 bytes .../textures/item/open_canned_custard.png | Bin 785 -> 998 bytes .../textures/item/open_canned_dog_food.png | Bin 819 -> 827 bytes .../textures/item/open_canned_pasta.png | Bin 787 -> 956 bytes .../textures/item/open_canned_peaches.png | Bin 718 -> 1015 bytes .../textures/item/open_canned_pickles.png | Bin 752 -> 767 bytes .../textures/item/open_canned_sweetcorn.png | Bin 746 -> 983 bytes .../textures/item/open_canned_tomato_soup.png | Bin 790 -> 3596 bytes .../textures/item/open_canned_tuna.png | Bin 849 -> 807 bytes .../textures/item/water_bottle.png | Bin 715 -> 672 bytes 119 files changed, 435 insertions(+), 945 deletions(-) delete mode 100644 crafting-dead-core/src/main/java/com/craftingdead/core/mixin/LocalPlayerMixin.java create mode 100644 crafting-dead-core/src/main/java/com/craftingdead/core/network/message/play/BlockDestroyParticleMessage.java delete mode 100644 crafting-dead-core/src/main/resources/assets/craftingdead/textures/gui/container/widgets.png diff --git a/crafting-dead-core/src/main/java/com/craftingdead/core/CraftingDead.java b/crafting-dead-core/src/main/java/com/craftingdead/core/CraftingDead.java index 8eded21f9..a7cd4e927 100644 --- a/crafting-dead-core/src/main/java/com/craftingdead/core/CraftingDead.java +++ b/crafting-dead-core/src/main/java/com/craftingdead/core/CraftingDead.java @@ -18,8 +18,6 @@ package com.craftingdead.core; -import java.util.Optional; - import com.craftingdead.core.data.tags.ModBlockTagsProvider; import org.apache.commons.lang3.mutable.MutableInt; import org.slf4j.Logger; @@ -59,7 +57,6 @@ import com.craftingdead.core.trauma.ProtectionConfig; import com.craftingdead.core.event.LivingExtensionEvent; import com.craftingdead.core.world.entity.extension.ClothingProtectionHandler; -import com.craftingdead.core.world.entity.extension.LivingHandlerType; import com.mojang.logging.LogUtils; import io.netty.buffer.Unpooled; import net.minecraft.data.DataGenerator; @@ -103,7 +100,6 @@ import net.minecraftforge.server.ServerLifecycleHooks; import net.minecraftforge.forge.event.lifecycle.GatherDataEvent; import net.minecraftforge.network.PacketDistributor; -import com.craftingdead.core.trauma.TraumaHandler; @Mod(CraftingDead.ID) public class CraftingDead { @@ -160,7 +156,7 @@ public CraftingDead() { GunTriggerPredicates.deferredRegister.register(modEventBus); MinecraftForge.EVENT_BUS.register(this); - MinecraftForge.EVENT_BUS.register(TraumaHandler.INSTANCE); +// MinecraftForge.EVENT_BUS.register(TraumaHandler.INSTANCE); ProtectionConfig.load(); } diff --git a/crafting-dead-core/src/main/java/com/craftingdead/core/mixin/AbstractContainerMenuMixin.java b/crafting-dead-core/src/main/java/com/craftingdead/core/mixin/AbstractContainerMenuMixin.java index 47dc9d6c5..fe47ef240 100644 --- a/crafting-dead-core/src/main/java/com/craftingdead/core/mixin/AbstractContainerMenuMixin.java +++ b/crafting-dead-core/src/main/java/com/craftingdead/core/mixin/AbstractContainerMenuMixin.java @@ -48,10 +48,9 @@ public class AbstractContainerMenuMixin { private ContainerSynchronizer synchronizer; @SuppressWarnings("unchecked") - @Redirect(method = - "synchronizeSlotToRemote(ILnet/minecraft/world/item/ItemStack;Ljava/util/function/Supplier;)V", - at = @At(value = "INVOKE", - target = "Lnet/minecraft/world/item/ItemStack;matches(Lnet/minecraft/world/item/ItemStack;Lnet/minecraft/world/item/ItemStack;)Z")) + @Redirect(at = @At(value = "INVOKE", + target = "Lnet/minecraft/world/item/ItemStack;matches(Lnet/minecraft/world/item/ItemStack;Lnet/minecraft/world/item/ItemStack;)Z"), + method = "synchronizeSlotToRemote") private boolean matches(ItemStack lastStack, ItemStack currentStack, int slotIndex, ItemStack __, Supplier coppiedStack) { diff --git a/crafting-dead-core/src/main/java/com/craftingdead/core/mixin/InventoryMixin.java b/crafting-dead-core/src/main/java/com/craftingdead/core/mixin/InventoryMixin.java index 03ce22334..362be64cc 100644 --- a/crafting-dead-core/src/main/java/com/craftingdead/core/mixin/InventoryMixin.java +++ b/crafting-dead-core/src/main/java/com/craftingdead/core/mixin/InventoryMixin.java @@ -19,46 +19,41 @@ package com.craftingdead.core.mixin; import org.spongepowered.asm.mixin.Mixin; -// import org.spongepowered.asm.mixin.injection.At; -// import org.spongepowered.asm.mixin.injection.Inject; -// import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -// import com.craftingdead.core.CraftingDead; -// import com.craftingdead.core.world.entity.extension.PlayerExtension; + import org.spongepowered.asm.mixin.injection.At; + import org.spongepowered.asm.mixin.injection.Inject; + import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + import com.craftingdead.core.CraftingDead; + import com.craftingdead.core.world.entity.extension.PlayerExtension; import net.minecraft.world.entity.player.Inventory; @Mixin(Inventory.class) public class InventoryMixin { - - // DISABLED: The method 'swapPaint' no longer exists in Minecraft 1.18.2 - // The hotbar scrolling behavior in 1.18.2 uses 'swapPaint(double)' which was removed - // This mixin would need to target the new method if this functionality is needed - // Original purpose: Scrolls over empty slots when in combat mode - // @Inject(at = @At("HEAD"), method = "swapPaint", cancellable = true) - // private void swapPaint(double direction, CallbackInfo callbackInfo) { - // if (CraftingDead.getInstance().getClientDist().getPlayerExtension() - // .map(PlayerExtension::isCombatModeEnabled) - // .orElse(false)) { - // callbackInfo.cancel(); - - // Inventory inventory = (Inventory) (Object) this; - - // if (direction > 0.0D) { - // direction = 1.0D; - // } - - // if (direction < 0.0D) { - // direction = -1.0D; - // } - - // do { - // inventory.selected -= direction; - // if (inventory.selected < 0) { - // inventory.selected = 6; - // } else if (inventory.selected > 6) { - // inventory.selected = 0; - // } - // } while (!inventory.isEmpty() && inventory.getSelected().isEmpty()); - // } - // } + @Inject(at = @At("HEAD"), method = "swapPaint", cancellable = true) + private void swapPaint(double direction, CallbackInfo callbackInfo) { + if (CraftingDead.getInstance().getClientDist().getPlayerExtension() + .map(PlayerExtension::isCombatModeEnabled) + .orElse(false)) { + callbackInfo.cancel(); + + Inventory inventory = (Inventory) (Object) this; + + if (direction > 0.0D) { + direction = 1.0D; + } + + if (direction < 0.0D) { + direction = -1.0D; + } + + do { + inventory.selected -= direction; + if (inventory.selected < 0) { + inventory.selected = 6; + } else if (inventory.selected > 6) { + inventory.selected = 0; + } + } while (!inventory.isEmpty() && inventory.getSelected().isEmpty()); + } + } } diff --git a/crafting-dead-core/src/main/java/com/craftingdead/core/mixin/KeyboardHandlerMixin.java b/crafting-dead-core/src/main/java/com/craftingdead/core/mixin/KeyboardHandlerMixin.java index 6fb8316df..4a2479b83 100644 --- a/crafting-dead-core/src/main/java/com/craftingdead/core/mixin/KeyboardHandlerMixin.java +++ b/crafting-dead-core/src/main/java/com/craftingdead/core/mixin/KeyboardHandlerMixin.java @@ -30,10 +30,8 @@ @Mixin(KeyboardHandler.class) public class KeyboardHandlerMixin { - @SuppressWarnings("unused") - @Inject(method = "keyPress(JIIII)V", at = @At("HEAD"), cancellable = true) - private void onKeyPress(long ignoredWindowPointer, int key, int ignoredScancode, int action, - int ignoredModifiers, + @Inject(method = "keyPress", at = @At("HEAD"), cancellable = true) + private void onKeyPress(long windowPointer, int key, int scancode, int action, int modifiers, CallbackInfo ci) { var minecraft = Minecraft.getInstance(); diff --git a/crafting-dead-core/src/main/java/com/craftingdead/core/mixin/LivingEntityMixin.java b/crafting-dead-core/src/main/java/com/craftingdead/core/mixin/LivingEntityMixin.java index 3d24ed901..75fe9426d 100644 --- a/crafting-dead-core/src/main/java/com/craftingdead/core/mixin/LivingEntityMixin.java +++ b/crafting-dead-core/src/main/java/com/craftingdead/core/mixin/LivingEntityMixin.java @@ -35,9 +35,6 @@ @Mixin(LivingEntity.class) public abstract class LivingEntityMixin { - // TODO: Fix this mixin - isImmobile() method doesn't exist in 1.18.2 LivingEntity - // The refmap has wrong method signature m_6107_()Z - /* @Inject(at = @At("RETURN"), method = "isImmobile", cancellable = true) private void isImmobile(CallbackInfoReturnable callbackInfo) { var self = (LivingEntity) (Object) this; @@ -47,11 +44,9 @@ private void isImmobile(CallbackInfoReturnable callbackInfo) { } }); } - */ + // TODO - temp until https://github.com/MinecraftForge/MinecraftForge/pull/7630 gets merged - // TODO: Also broken - refmap has wrong method mappings for 1.18.2 - /* @Redirect(at = @At(value = "INVOKE", target = "Lnet/minecraft/world/item/ItemStack;matches(Lnet/minecraft/world/item/ItemStack;Lnet/minecraft/world/item/ItemStack;)Z"), method = "collectEquipmentChanges") @@ -72,5 +67,4 @@ private boolean matches(ItemStack currentStack, ItemStack lastStack) { } return true; } - */ } diff --git a/crafting-dead-core/src/main/java/com/craftingdead/core/mixin/LocalPlayerMixin.java b/crafting-dead-core/src/main/java/com/craftingdead/core/mixin/LocalPlayerMixin.java deleted file mode 100644 index cb994d1e5..000000000 --- a/crafting-dead-core/src/main/java/com/craftingdead/core/mixin/LocalPlayerMixin.java +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Crafting Dead - * Copyright (C) 2022 NexusNode LTD - * - * This Non-Commercial Software License Agreement (the "Agreement") is made between - * you (the "Licensee") and NEXUSNODE (BRAD HUNTER). (the "Licensor"). - * By installing or otherwise using Crafting Dead (the "Software"), you agree to be - * bound by the terms and conditions of this Agreement as may be revised from time - * to time at Licensor's sole discretion. - * - * If you do not agree to the terms and conditions of this Agreement do not download, - * copy, reproduce or otherwise use any of the source code available online at any time. - * - * https://github.com/nexusnode/crafting-dead/blob/1.18.x/LICENSE.txt - * - * https://craftingdead.net/terms.php - */ - -package com.craftingdead.core.mixin; - -import com.craftingdead.core.world.entity.extension.PlayerExtension; -import net.minecraft.client.player.LocalPlayer; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -@Mixin(LocalPlayer.class) -public class LocalPlayerMixin { - - /** - * Scrolls over empty slots when in combat mode. - */ - @Inject(method = "selectHotbarSlot", at = @At("HEAD"), cancellable = true) - private void onHotbarScroll(double direction, CallbackInfo ci) { - var minecraft = net.minecraft.client.Minecraft.getInstance(); - - if (minecraft.player == null) return; - - var ext = PlayerExtension.get(minecraft.player); - if (ext == null || !ext.isCombatModeEnabled()) return; - - ci.cancel(); - - var inventory = minecraft.player.getInventory(); - - // Normalize scroll direction - if (direction > 0) direction = 1; - if (direction < 0) direction = -1; - - do { - inventory.selected -= direction; - - if (inventory.selected < 0) { - inventory.selected = 8; - } else if (inventory.selected > 8) { - inventory.selected = 0; - } - } - while (!inventory.isEmpty() && inventory.getSelected().isEmpty()); - } -} diff --git a/crafting-dead-core/src/main/java/com/craftingdead/core/network/NetworkChannel.java b/crafting-dead-core/src/main/java/com/craftingdead/core/network/NetworkChannel.java index 18740c664..ad3d62788 100644 --- a/crafting-dead-core/src/main/java/com/craftingdead/core/network/NetworkChannel.java +++ b/crafting-dead-core/src/main/java/com/craftingdead/core/network/NetworkChannel.java @@ -19,6 +19,7 @@ package com.craftingdead.core.network; import com.craftingdead.core.CraftingDead; +import com.craftingdead.core.network.message.play.BlockDestroyParticleMessage; import com.craftingdead.core.network.message.play.BlockDestroyActionMessage; import com.craftingdead.core.network.message.play.CancelActionMessage; import com.craftingdead.core.network.message.play.CrouchMessage; @@ -199,7 +200,14 @@ public void registerMessages(SimpleChannel simpleChannel) { .add(); simpleChannel - .messageBuilder(BlockDestroyActionMessage.class, 0x16, NetworkDirection.PLAY_TO_SERVER) + .messageBuilder(BlockDestroyParticleMessage.class, 0x16, NetworkDirection.PLAY_TO_CLIENT) + .encoder(BlockDestroyParticleMessage::encode) + .decoder(BlockDestroyParticleMessage::decode) + .consumer(BlockDestroyParticleMessage::handle) + .add(); + + simpleChannel + .messageBuilder(BlockDestroyActionMessage.class, 0x17, NetworkDirection.PLAY_TO_SERVER) .encoder(BlockDestroyActionMessage::encode) .decoder(BlockDestroyActionMessage::decode) .consumer(BlockDestroyActionMessage::handle) diff --git a/crafting-dead-core/src/main/java/com/craftingdead/core/network/message/play/BlockDestroyActionMessage.java b/crafting-dead-core/src/main/java/com/craftingdead/core/network/message/play/BlockDestroyActionMessage.java index 5a3aaee4a..408c74bc1 100644 --- a/crafting-dead-core/src/main/java/com/craftingdead/core/network/message/play/BlockDestroyActionMessage.java +++ b/crafting-dead-core/src/main/java/com/craftingdead/core/network/message/play/BlockDestroyActionMessage.java @@ -18,12 +18,13 @@ package com.craftingdead.core.network.message.play; +import com.craftingdead.core.network.NetworkChannel; import java.util.function.Supplier; import net.minecraft.core.BlockPos; import net.minecraft.network.FriendlyByteBuf; -import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Blocks; import net.minecraftforge.network.NetworkEvent; +import net.minecraftforge.network.PacketDistributor; public record BlockDestroyActionMessage(BlockPos pos) { @@ -38,13 +39,14 @@ public static BlockDestroyActionMessage decode(FriendlyByteBuf buf) { public static void handle(BlockDestroyActionMessage msg, Supplier ctx) { ctx.get().enqueueWork(() -> { var player = ctx.get().getSender(); - if (player == null) { - return; - } - var state = player.getLevel().getBlockState(msg.pos); - if (!state.isAir()) { - player.getLevel().levelEvent(2001, msg.pos, Block.getId(state)); - player.getLevel().setBlock(msg.pos, Blocks.AIR.defaultBlockState(), 3); + if (player != null) { + var level = player.getLevel(); + var state = level.getBlockState(msg.pos); + if (!state.isAir()) { + NetworkChannel.PLAY.getSimpleChannel().send(PacketDistributor.TRACKING_CHUNK.with(() -> + level.getChunkAt(msg.pos())), new BlockDestroyParticleMessage(msg.pos(), state)); + player.getLevel().setBlock(msg.pos, Blocks.AIR.defaultBlockState(), 3); + } } }); ctx.get().setPacketHandled(true); diff --git a/crafting-dead-core/src/main/java/com/craftingdead/core/network/message/play/BlockDestroyParticleMessage.java b/crafting-dead-core/src/main/java/com/craftingdead/core/network/message/play/BlockDestroyParticleMessage.java new file mode 100644 index 000000000..33ab760e9 --- /dev/null +++ b/crafting-dead-core/src/main/java/com/craftingdead/core/network/message/play/BlockDestroyParticleMessage.java @@ -0,0 +1,50 @@ +/* + * Crafting Dead + * Copyright (C) 2022 NexusNode LTD + * + * This Non-Commercial Software License Agreement (the "Agreement") is made between + * you (the "Licensee") and NEXUSNODE (BRAD HUNTER). (the "Licensor"). + * By installing or otherwise using Crafting Dead (the "Software"), you agree to be + * bound by the terms and conditions of this Agreement as may be revised from time + * to time at Licensor's sole discretion. + * + * If you do not agree to the terms and conditions of this Agreement do not download, + * copy, reproduce or otherwise use any of the source code available online at any time. + * + * https://github.com/nexusnode/crafting-dead/blob/1.18.x/LICENSE.txt + * + * https://craftingdead.net/terms.php + */ + +package com.craftingdead.core.network.message.play; + +import java.util.function.Supplier; +import net.minecraft.client.Minecraft; +import net.minecraft.core.BlockPos; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraftforge.network.NetworkEvent; + +public record BlockDestroyParticleMessage(BlockPos pos, BlockState state) { + + public static void encode(BlockDestroyParticleMessage msg, FriendlyByteBuf buf) { + buf.writeBlockPos(msg.pos()); + buf.writeVarInt(Block.getId(msg.state())); + } + + public static BlockDestroyParticleMessage decode(FriendlyByteBuf buf) { + return new BlockDestroyParticleMessage(buf.readBlockPos(), Block.stateById(buf.readVarInt())); + } + + public static void handle(BlockDestroyParticleMessage msg, Supplier ctx) { + ctx.get().enqueueWork(() -> { + var player = Minecraft.getInstance().player; + if (player != null) { + var state = player.getLevel().getBlockState(msg.pos); + player.level.addDestroyBlockEffect(msg.pos, state); + } + }); + ctx.get().setPacketHandled(true); + } +} diff --git a/crafting-dead-core/src/main/java/com/craftingdead/core/server/ServerDist.java b/crafting-dead-core/src/main/java/com/craftingdead/core/server/ServerDist.java index 14169119c..0f6b8a00e 100644 --- a/crafting-dead-core/src/main/java/com/craftingdead/core/server/ServerDist.java +++ b/crafting-dead-core/src/main/java/com/craftingdead/core/server/ServerDist.java @@ -20,18 +20,10 @@ import com.craftingdead.core.ModDist; import net.minecraft.core.RegistryAccess; -import net.minecraftforge.fml.ModLoadingContext; -import net.minecraftforge.fml.config.ModConfig; import net.minecraftforge.server.ServerLifecycleHooks; public class ServerDist implements ModDist { - public ServerDist() { - // Auto-updater moved to crafting-dead-updater mod (separate optional mod) - // Server-side updater is now handled by the crafting-dead-updater mod - // This keeps the main Crafting Dead mods CurseForge-compliant - } - @SuppressWarnings("deprecation") @Override public RegistryAccess registryAccess() { diff --git a/crafting-dead-core/src/main/java/com/craftingdead/core/trauma/TraumaHandler.java b/crafting-dead-core/src/main/java/com/craftingdead/core/trauma/TraumaHandler.java index d7879a4be..a6dd4f7e0 100644 --- a/crafting-dead-core/src/main/java/com/craftingdead/core/trauma/TraumaHandler.java +++ b/crafting-dead-core/src/main/java/com/craftingdead/core/trauma/TraumaHandler.java @@ -44,46 +44,46 @@ public final class TraumaHandler { private TraumaHandler() { } - @SubscribeEvent - public void handleGunEntityDamaged(GunEvent.EntityDamaged event) { - if (!event.headshot() || !(event.target() instanceof LivingEntity living)) { - return; - } - if (living.getLevel().isClientSide()) { - return; - } - - var target = LivingExtension.get(living); - if (target == null) { - return; - } - - var config = ProtectionConfig.get(); - var settings = config.headTrauma(); - if (!settings.enabled()) { - return; - } - - float incomingEnergy = Math.max(0.0F, event.damage() * settings.damageToEnergyScale()); - var result = ProtectionLookup.INSTANCE.resolveHeadshot(target, incomingEnergy); - - if (LOGGER.isDebugEnabled()) { - logHeadshotDebug(event, living, target, incomingEnergy, result); - } - - var effect = result.effect(); - if (result.severity() == TraumaSeverity.NONE || effect.isEmpty()) { - return; - } - - applyMobEffects(living, effect); - - if (living instanceof ServerPlayer player) { - NetworkChannel.PLAY.getSimpleChannel().send( - PacketDistributor.PLAYER.with(() -> player), - new TraumaPacket(result.severity(), effect.aimSwayTicks(), effect.aimSwayStrength())); - } - } +// @SubscribeEvent +// public void handleGunEntityDamaged(GunEvent.EntityDamaged event) { +// if (!event.headshot() || !(event.target() instanceof LivingEntity living)) { +// return; +// } +// if (living.getLevel().isClientSide()) { +// return; +// } +// +// var target = LivingExtension.get(living); +// if (target == null) { +// return; +// } +// +// var config = ProtectionConfig.get(); +// var settings = config.headTrauma(); +// if (!settings.enabled()) { +// return; +// } +// +// float incomingEnergy = Math.max(0.0F, event.damage() * settings.damageToEnergyScale()); +// var result = ProtectionLookup.INSTANCE.resolveHeadshot(target, incomingEnergy); +// +// if (LOGGER.isDebugEnabled()) { +// logHeadshotDebug(event, living, target, incomingEnergy, result); +// } +// +// var effect = result.effect(); +// if (result.severity() == TraumaSeverity.NONE || effect.isEmpty()) { +// return; +// } +// +// applyMobEffects(living, effect); +// +// if (living instanceof ServerPlayer player) { +// NetworkChannel.PLAY.getSimpleChannel().send( +// PacketDistributor.PLAYER.with(() -> player), +// new TraumaPacket(result.severity(), effect.aimSwayTicks(), effect.aimSwayStrength())); +// } +// } private void applyMobEffects(LivingEntity living, ProtectionConfig.TraumaEffect effect) { if (effect.blindnessTicks() > 0) { diff --git a/crafting-dead-core/src/main/java/com/craftingdead/core/world/action/RemoveMagazineAction.java b/crafting-dead-core/src/main/java/com/craftingdead/core/world/action/RemoveMagazineAction.java index 5044385f7..1c69a7e20 100644 --- a/crafting-dead-core/src/main/java/com/craftingdead/core/world/action/RemoveMagazineAction.java +++ b/crafting-dead-core/src/main/java/com/craftingdead/core/world/action/RemoveMagazineAction.java @@ -36,6 +36,8 @@ public class RemoveMagazineAction extends TimedAction { private final Gun gun; + protected final int slot; + private final ItemStack oldMagazineStack; private final MagazineAmmoProvider ammoProvider; @@ -45,6 +47,11 @@ public class RemoveMagazineAction extends TimedAction { public RemoveMagazineAction(LivingExtension performer) { this.performer = performer; + if (this.performer.entity() instanceof Player player) { + this.slot = player.getInventory().selected; + } else { + this.slot = -1; + } this.gun = performer.mainHandGun() .orElseThrow(() -> new IllegalStateException("Performer not holding gun")); AmmoProvider ammoProvider = this.gun.getAmmoProvider(); @@ -89,10 +96,13 @@ public boolean start(boolean simulate) { @Override public boolean tick() { - if (!this.performer().level().isClientSide() && - (this.performer.mainHandItem().isEmpty() || - !this.performer.mainHandItem().is(this.gun.getItemStack().getItem()) || - this.performer().entity().isSprinting())) { + if (!this.performer().level().isClientSide() + && (this.performer.mainHandItem().isEmpty() + || !this.performer.mainHandItem().is(this.gun.getItemStack().getItem()) + || (this.slot != -1 + && this.performer().entity() instanceof Player player + && player.getInventory().selected != this.slot) + || this.performer().entity().isSprinting())) { this.performer().cancelAction(true); return false; } diff --git a/crafting-dead-core/src/main/java/com/craftingdead/core/world/action/item/ItemActionType.java b/crafting-dead-core/src/main/java/com/craftingdead/core/world/action/item/ItemActionType.java index 4f2f867b0..3ab47ec32 100644 --- a/crafting-dead-core/src/main/java/com/craftingdead/core/world/action/item/ItemActionType.java +++ b/crafting-dead-core/src/main/java/com/craftingdead/core/world/action/item/ItemActionType.java @@ -48,6 +48,8 @@ public abstract class ItemActionType private final Supplier resultItem; @Nullable private final Supplier finishSound; + private final float finishSoundVolume; + private final float finishSoundPitch; private final boolean consumeItemInCreative; private final boolean useResultItemInCreative; @@ -60,6 +62,8 @@ protected ItemActionType(Builder builder) { this.usageDamage = builder.usageDamage; this.resultItem = builder.resultItem; this.finishSound = builder.finishSound; + this.finishSoundVolume = builder.finishSoundVolume; + this.finishSoundPitch = builder.finishSoundPitch; this.consumeItemInCreative = builder.consumeItemInCreative; this.useResultItemInCreative = builder.useResultItemInCreative; } @@ -92,6 +96,14 @@ public Optional getFinishSound() { return Optional.ofNullable(this.finishSound).map(Supplier::get); } + public float getFinishSoundVolume() { + return finishSoundVolume; + } + + public float getFinishSoundPitch() { + return finishSoundPitch; + } + public boolean shouldConsumeItemInCreative() { return this.consumeItemInCreative; } @@ -132,6 +144,8 @@ public static abstract class Builder> { private Supplier resultItem; @Nullable private Supplier finishSound; + private float finishSoundVolume = 1.0F; + private float finishSoundPitch = 1.0F; private boolean consumeItemInCreative; @@ -181,11 +195,20 @@ public SELF resultItem(Supplier resultItem) { } public SELF finishSound(SoundEvent finishSound) { - return this.finishSound(() -> finishSound); + return this.finishSound(finishSound, this.finishSoundVolume, this.finishSoundPitch); + } + + public SELF finishSound(SoundEvent finishSound, float volume, float pitch) { + this.finishSound = () -> finishSound; + this.finishSoundVolume = volume; + this.finishSoundPitch = pitch; + return this.self(); } - public SELF finishSound(Supplier finishSound) { + public SELF finishSound(Supplier finishSound, float volume, float pitch) { this.finishSound = finishSound; + this.finishSoundVolume = volume; + this.finishSoundPitch = pitch; return this.self(); } diff --git a/crafting-dead-core/src/main/java/com/craftingdead/core/world/action/reload/AbstractReloadAction.java b/crafting-dead-core/src/main/java/com/craftingdead/core/world/action/reload/AbstractReloadAction.java index 7434dec3e..77fb34def 100644 --- a/crafting-dead-core/src/main/java/com/craftingdead/core/world/action/reload/AbstractReloadAction.java +++ b/crafting-dead-core/src/main/java/com/craftingdead/core/world/action/reload/AbstractReloadAction.java @@ -18,6 +18,7 @@ package com.craftingdead.core.world.action.reload; +import net.minecraft.world.entity.player.Player; import org.jetbrains.annotations.Nullable; import com.craftingdead.core.ServerConfig; import com.craftingdead.core.client.animation.Animation; @@ -35,6 +36,8 @@ public abstract class AbstractReloadAction extends TimedAction { protected final Gun gun; + protected final int slot; + protected final ItemStack oldMagazineStack; @Nullable @@ -42,6 +45,11 @@ public abstract class AbstractReloadAction extends TimedAction { public AbstractReloadAction(LivingExtension performer) { this.performer = performer; + if (this.performer.entity() instanceof Player player) { + this.slot = player.getInventory().selected; + } else { + this.slot = -1; + } this.gun = performer.mainHandItem().getCapability(Gun.CAPABILITY) .orElseThrow(() -> new IllegalStateException("Performer not holding gun")); this.oldMagazineStack = this.gun.getAmmoProvider().getMagazineStack(); @@ -88,8 +96,11 @@ public boolean start(boolean simulate) { @Override public boolean tick() { if (!this.performer().level().isClientSide() - && (!this.performer.mainHandItem().is(this.gun.getItemStack().getItem()) - || this.performer().mainHandItem().isEmpty() + && (this.performer().mainHandItem().isEmpty() + || !this.performer.mainHandItem().is(this.gun.getItemStack().getItem()) + || (this.slot != -1 + && this.performer().entity() instanceof Player player + && player.getInventory().selected != this.slot) || this.performer().entity().isSprinting())) { this.performer.cancelAction(true); return false; diff --git a/crafting-dead-core/src/main/java/com/craftingdead/core/world/item/ClothingItem.java b/crafting-dead-core/src/main/java/com/craftingdead/core/world/item/ClothingItem.java index 352f654a6..84f1a533b 100644 --- a/crafting-dead-core/src/main/java/com/craftingdead/core/world/item/ClothingItem.java +++ b/crafting-dead-core/src/main/java/com/craftingdead/core/world/item/ClothingItem.java @@ -22,10 +22,8 @@ import com.craftingdead.core.world.action.item.ItemActionType; import com.craftingdead.core.world.entity.extension.LivingExtension; import com.craftingdead.core.world.entity.extension.PlayerExtension; -import com.craftingdead.core.world.item.equipment.ClothingProtection; import com.craftingdead.core.world.item.equipment.Equipment.Slot; import java.util.List; -import java.util.Locale; import java.util.Objects; import java.util.UUID; import java.util.function.Supplier; @@ -47,7 +45,6 @@ import net.minecraft.ChatFormatting; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.chat.Component; -import net.minecraft.network.chat.TextComponent; import net.minecraft.network.chat.TranslatableComponent; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.entity.ai.attributes.Attribute; @@ -97,179 +94,26 @@ public ClothingType getClothingType() { @Override public void appendHoverText(ItemStack stack, Level world, List lines, TooltipFlag tooltipFlag) { super.appendHoverText(stack, world, lines, tooltipFlag); - - // Clothing tier display switch (this.clothingType) { case CASUAL -> lines.add(new TranslatableComponent("clothing.protection.level") .withStyle(ChatFormatting.GRAY) .append(" ") .append(new TranslatableComponent("clothing.casual") - .withStyle(ChatFormatting.WHITE))); + .withStyle(ChatFormatting.RED))); case UTILITY -> lines.add(new TranslatableComponent("clothing.protection.level") .withStyle(ChatFormatting.GRAY) .append(" ") .append(new TranslatableComponent("clothing.utility") - .withStyle(ChatFormatting.GREEN))); + .withStyle(ChatFormatting.RED))); case MILITARY -> lines.add(new TranslatableComponent("clothing.protection.level") .withStyle(ChatFormatting.GRAY) .append(" ") .append(new TranslatableComponent("clothing.military") - .withStyle(ChatFormatting.AQUA))); - case HEAVY -> lines.add(new TranslatableComponent("clothing.protection.level") - .withStyle(ChatFormatting.GRAY) - .append(" ") - .append(new TranslatableComponent("clothing.heavy") - .withStyle(ChatFormatting.GOLD))); + .withStyle(ChatFormatting.RED))); } - - // Fire immunity indicator if (this.fireImmunity) { - lines.add(new TextComponent("※ ") - .withStyle(ChatFormatting.GOLD) - .append(new TranslatableComponent("clothing.immune_to_fire") - .withStyle(ChatFormatting.GOLD))); - } - - // Add blank line for separation - lines.add(TextComponent.EMPTY); - - // Protection Stats Header - lines.add(new TranslatableComponent("clothing.protection.stats") - .withStyle(ChatFormatting.YELLOW, ChatFormatting.BOLD)); - - // Get protection values from NBT if available, otherwise show config defaults - float biteProtection = ClothingProtection.getBiteProtection(stack); - float stabResistance = ClothingProtection.getStabResistance(stack); - float bluntResistance = ClothingProtection.getBluntResistance(stack); - float weightModifier = ClothingProtection.getWeightModifier(stack); - - // Get legacy values - float damageReductionPct = switch (this.clothingType) { - case CASUAL -> ServerConfig.instance.casualClothingDamageReduction.get().floatValue() * 100.0F; - case UTILITY -> ServerConfig.instance.utilityClothingDamageReduction.get().floatValue() * 100.0F; - case MILITARY -> ServerConfig.instance.militaryClothingDamageReduction.get().floatValue() * 100.0F; - case HEAVY -> ServerConfig.instance.militaryClothingDamageReduction.get().floatValue() * 100.0F; - }; - - float bleedReductionPct = switch (this.clothingType) { - case CASUAL -> ServerConfig.instance.casualClothingBleedAndInfectionReduction.get().floatValue() * 100.0F; - case UTILITY -> ServerConfig.instance.utilityClothingBleedAndInfectionReduction.get().floatValue() * 100.0F; - case MILITARY -> ServerConfig.instance.militaryClothingBleedAndInfectionReduction.get().floatValue() * 100.0F; - case HEAVY -> ServerConfig.instance.militaryClothingBleedAndInfectionReduction.get().floatValue() * 100.0F; - }; - - // If no NBT data yet, show what values will be applied - if (!ClothingProtection.hasProtectionAttributes(stack)) { - biteProtection = switch (this.clothingType) { - case CASUAL -> ServerConfig.instance.casualClothingBiteProtection.get().floatValue(); - case UTILITY -> ServerConfig.instance.utilityClothingBiteProtection.get().floatValue(); - case MILITARY -> ServerConfig.instance.militaryClothingBiteProtection.get().floatValue(); - case HEAVY -> ServerConfig.instance.heavyClothingBiteProtection.get().floatValue(); - }; - stabResistance = switch (this.clothingType) { - case CASUAL -> ServerConfig.instance.casualClothingStabResistance.get().floatValue(); - case UTILITY -> ServerConfig.instance.utilityClothingStabResistance.get().floatValue(); - case MILITARY -> ServerConfig.instance.militaryClothingStabResistance.get().floatValue(); - case HEAVY -> ServerConfig.instance.heavyClothingStabResistance.get().floatValue(); - }; - bluntResistance = switch (this.clothingType) { - case CASUAL -> ServerConfig.instance.casualClothingBluntResistance.get().floatValue(); - case UTILITY -> ServerConfig.instance.utilityClothingBluntResistance.get().floatValue(); - case MILITARY -> ServerConfig.instance.militaryClothingBluntResistance.get().floatValue(); - case HEAVY -> ServerConfig.instance.heavyClothingBluntResistance.get().floatValue(); - }; - weightModifier = switch (this.clothingType) { - case CASUAL -> ServerConfig.instance.casualClothingWeightModifier.get().floatValue(); - case UTILITY -> ServerConfig.instance.utilityClothingWeightModifier.get().floatValue(); - case MILITARY -> ServerConfig.instance.militaryClothingWeightModifier.get().floatValue(); - case HEAVY -> ServerConfig.instance.heavyClothingWeightModifier.get().floatValue(); - }; - } - - // General Damage Reduction (if any) - if (damageReductionPct > 0.0F) { - var damageText = new TextComponent(String.format(Locale.ROOT, "%.0f%%", damageReductionPct)) - .withStyle(ChatFormatting.GREEN); - lines.add(new TextComponent("■ ") - .withStyle(ChatFormatting.DARK_GRAY) - .append(new TranslatableComponent("clothing.protection.general_damage") - .withStyle(ChatFormatting.GRAY)) - .append(": ") - .append(damageText)); - } - - // Bite Protection (zombies) - if (biteProtection > 0.0F) { - var biteText = new TextComponent(String.format(Locale.ROOT, "%.0f%%", biteProtection * 100.0F)) - .withStyle(ChatFormatting.GREEN); - lines.add(new TextComponent("☠ ") - .withStyle(ChatFormatting.DARK_GRAY) - .append(new TranslatableComponent("clothing.protection.bite") - .withStyle(ChatFormatting.GRAY)) - .append(": ") - .append(biteText)); - } - - // Stab Resistance (knives, blades) - if (stabResistance > 0.0F) { - var stabText = new TextComponent(String.format(Locale.ROOT, "%.0f%%", stabResistance * 100.0F)) - .withStyle(ChatFormatting.GREEN); - lines.add(new TextComponent("† ") - .withStyle(ChatFormatting.DARK_GRAY) - .append(new TranslatableComponent("clothing.protection.stab") - .withStyle(ChatFormatting.GRAY)) - .append(": ") - .append(stabText)); - } - - // Blunt Resistance (clubs, fists) - if (bluntResistance > 0.0F) { - var bluntText = new TextComponent(String.format(Locale.ROOT, "%.0f%%", bluntResistance * 100.0F)) - .withStyle(ChatFormatting.GREEN); - lines.add(new TextComponent("◆ ") - .withStyle(ChatFormatting.DARK_GRAY) - .append(new TranslatableComponent("clothing.protection.blunt") - .withStyle(ChatFormatting.GRAY)) - .append(": ") - .append(bluntText)); - } - - // Bullet Resistance (minimal for clothing, use vests for real protection) - float bulletProtection = Math.max(biteProtection, stabResistance) * 0.1F; - if (bulletProtection > 0.001F) { - var bulletText = new TextComponent(String.format(Locale.ROOT, "%.0f%%", bulletProtection * 100.0F)) - .withStyle(ChatFormatting.DARK_GREEN); - lines.add(new TextComponent("✖ ") - .withStyle(ChatFormatting.DARK_GRAY) - .append(new TranslatableComponent("clothing.protection.bullet") - .withStyle(ChatFormatting.GRAY)) - .append(": ") - .append(bulletText)); - } - - // Infection Resistance - if (bleedReductionPct > 0.0F) { - var infectionText = new TextComponent(String.format(Locale.ROOT, "%.0f%%", bleedReductionPct)) - .withStyle(ChatFormatting.GREEN); - lines.add(new TextComponent("✦ ") - .withStyle(ChatFormatting.DARK_GRAY) - .append(new TranslatableComponent("clothing.protection.infection") - .withStyle(ChatFormatting.GRAY)) - .append(": ") - .append(infectionText)); - } - - // Weight Modifier (affects movement speed) - if (Math.abs(weightModifier) > 0.001F) { - var weightColor = weightModifier < 0 ? ChatFormatting.RED : ChatFormatting.GREEN; - var weightText = new TextComponent(String.format(Locale.ROOT, "%+.0f%%", weightModifier * 100.0F)) - .withStyle(weightColor); - lines.add(new TextComponent("» ") - .withStyle(ChatFormatting.DARK_GRAY) - .append(new TranslatableComponent("clothing.protection.weight") - .withStyle(ChatFormatting.GRAY)) - .append(": ") - .append(weightText)); + lines.add(new TranslatableComponent("clothing.immune_to_fire") + .withStyle(ChatFormatting.GRAY)); } } @@ -377,9 +221,7 @@ public float calculateDamage(float damage) { casualClothingDamageReduction.get().floatValue(); case UTILITY -> 1.00F - ServerConfig.instance. utilityClothingDamageReduction.get().floatValue(); - case MILITARY -> 1.00F - ServerConfig.instance. - militaryClothingDamageReduction.get().floatValue(); - case HEAVY -> 1.00F - ServerConfig.instance. + case MILITARY, HEAVY -> 1.00F - ServerConfig.instance. militaryClothingDamageReduction.get().floatValue(); }; return damage * reductionFactor; @@ -391,9 +233,7 @@ public float calculateBleedAndInfectionChance(float baseChance) { casualClothingBleedAndInfectionReduction.get().floatValue(); case UTILITY -> 1.00F - ServerConfig.instance. utilityClothingBleedAndInfectionReduction.get().floatValue(); - case MILITARY -> 1.00F - ServerConfig.instance. - militaryClothingBleedAndInfectionReduction.get().floatValue(); - case HEAVY -> 1.00F - ServerConfig.instance. + case MILITARY, HEAVY -> 1.00F - ServerConfig.instance. militaryClothingBleedAndInfectionReduction.get().floatValue(); }; return baseChance * reductionFactor; diff --git a/crafting-dead-core/src/main/java/com/craftingdead/core/world/item/GunItem.java b/crafting-dead-core/src/main/java/com/craftingdead/core/world/item/GunItem.java index 94d9ba2e2..c640e457e 100644 --- a/crafting-dead-core/src/main/java/com/craftingdead/core/world/item/GunItem.java +++ b/crafting-dead-core/src/main/java/com/craftingdead/core/world/item/GunItem.java @@ -146,12 +146,7 @@ public GunConfiguration getConfiguration(RegistryAccess registryAccess) { } public GunConfiguration getConfiguration(Registry registry) { - var baseConfig = registry.get(this.configurationKey); - // Apply config overrides if available - return com.craftingdead.core.world.item.gun.GunConfigOverrides.isLoaded() - ? com.craftingdead.core.world.item.gun.GunConfigOverrides.applyOverride(baseConfig, - this.configurationKey.location()) - : baseConfig; + return registry.get(this.configurationKey); } @Override @@ -172,67 +167,48 @@ public void appendHoverText(ItemStack itemStack, @Nullable Level level, if (level != null) { var configuration = this.getConfiguration(level.registryAccess()); - - lines.add(TextComponent.EMPTY); - lines.add(new TranslatableComponent("gun.stats_header") - .withStyle(ChatFormatting.YELLOW, ChatFormatting.BOLD)); - - if (configuration.getRoundsPerShot() > 1) { - var pelletsText = new TextComponent(String.valueOf(configuration.getRoundsPerShot())) - .withStyle(ChatFormatting.RED); - - lines.add(new TextComponent("◆ ") - .withStyle(ChatFormatting.GOLD) - .append(new TranslatableComponent("gun.pellets_shot") - .withStyle(ChatFormatting.GRAY) - .append(pelletsText))); - } - - var rpmText = - new TextComponent(String.valueOf(configuration.getFireRateRPM())) - .withStyle(ChatFormatting.RED); - lines.add(new TextComponent("» ") - .withStyle(ChatFormatting.DARK_GRAY) - .append(new TranslatableComponent("gun.rpm") - .withStyle(ChatFormatting.GRAY) - .append(rpmText))); - var damageText = new TextComponent(String.valueOf(configuration.getDamage())) .withStyle(ChatFormatting.RED); - lines.add(new TextComponent("✖ ") - .withStyle(ChatFormatting.RED) - .append(new TranslatableComponent("gun.damage") - .withStyle(ChatFormatting.GRAY) - .append(damageText))); - var headshotDamageText = new TextComponent( String.valueOf((int) (configuration.getDamage() * ServerConfig.instance.headshotBonusDamage.get()))) - .withStyle(ChatFormatting.RED); - lines.add(new TextComponent("◈ ") - .withStyle(ChatFormatting.GOLD) - .append(new TranslatableComponent("gun.headshot_damage") - .withStyle(ChatFormatting.GRAY) - .append(headshotDamageText))); - + .withStyle(ChatFormatting.RED); var accuracyText = new TextComponent((int) (configuration.getAccuracyPercent() * 100.0F) + "%") .withStyle(ChatFormatting.RED); - lines.add(new TextComponent("+ ") - .withStyle(ChatFormatting.GREEN) - .append(new TranslatableComponent("gun.accuracy") - .withStyle(ChatFormatting.GRAY) - .append(accuracyText))); - + var rpmText = + new TextComponent(String.valueOf(configuration.getFireRateRPM())) + .withStyle(ChatFormatting.RED); var rangeText = new TextComponent(configuration.getRange() + " blocks") .withStyle(ChatFormatting.RED); - lines.add(new TextComponent("─ ") - .withStyle(ChatFormatting.AQUA) - .append(new TranslatableComponent("gun.range") - .withStyle(ChatFormatting.GRAY) - .append(rangeText))); + if (configuration.getRoundsPerShot() > 1) { + var pelletsText = new TextComponent(String.valueOf(configuration.getRoundsPerShot())) + .withStyle(ChatFormatting.RED); + + lines.add(new TranslatableComponent("gun.pellets_shot") + .withStyle(ChatFormatting.GRAY) + .append(pelletsText)); + } + + lines.add(new TranslatableComponent("gun.rpm") + .withStyle(ChatFormatting.GRAY) + .append(rpmText)); + + lines.add(new TranslatableComponent("gun.damage") + .withStyle(ChatFormatting.GRAY) + .append(damageText)); + lines.add(new TranslatableComponent("gun.headshot_damage") + .withStyle(ChatFormatting.GRAY) + .append(headshotDamageText)); + + lines.add(new TranslatableComponent("gun.accuracy") + .withStyle(ChatFormatting.GRAY) + .append(accuracyText)); + lines.add(new TranslatableComponent("gun.range") + .withStyle(ChatFormatting.GRAY) + .append(rangeText)); } itemStack.getCapability(Gun.CAPABILITY).ifPresent(gun -> { @@ -240,21 +216,17 @@ public void appendHoverText(ItemStack itemStack, @Nullable Level level, .map(Magazine::getSize) .orElse(0))).withStyle(ChatFormatting.RED); - lines.add(new TextComponent("■ ") - .withStyle(ChatFormatting.YELLOW) - .append(new TranslatableComponent("gun.ammo_amount") - .withStyle(ChatFormatting.GRAY) - .append(ammoCount))); + lines.add(new TranslatableComponent("gun.ammo_amount") + .withStyle(ChatFormatting.GRAY) + .append(ammoCount)); for (var attachment : gun.getAttachments().values()) { Component attachmentName = attachment.getDescription() .plainCopy() .withStyle(ChatFormatting.RED); - lines.add(new TextComponent("◊ ") - .withStyle(ChatFormatting.DARK_GRAY) - .append(new TranslatableComponent("gun.attachment") - .withStyle(ChatFormatting.GRAY) - .append(attachmentName))); + lines.add(new TranslatableComponent("gun.attachment") + .withStyle(ChatFormatting.GRAY) + .append(attachmentName)); } }); } diff --git a/crafting-dead-core/src/main/java/com/craftingdead/core/world/item/HatItem.java b/crafting-dead-core/src/main/java/com/craftingdead/core/world/item/HatItem.java index 6b7a7a5a0..87977b63f 100644 --- a/crafting-dead-core/src/main/java/com/craftingdead/core/world/item/HatItem.java +++ b/crafting-dead-core/src/main/java/com/craftingdead/core/world/item/HatItem.java @@ -19,12 +19,9 @@ package com.craftingdead.core.world.item; import java.util.List; -import java.util.Locale; -import java.util.Objects; import java.util.UUID; -import javax.annotation.Nullable; +import org.jetbrains.annotations.Nullable; import com.craftingdead.core.capability.CapabilityUtil; -import com.craftingdead.core.trauma.ProtectionConfig; import com.craftingdead.core.world.item.equipment.Equipment; import com.craftingdead.core.world.item.equipment.SimpleHat; import com.google.common.collect.ImmutableMultimap; @@ -40,7 +37,6 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.TooltipFlag; import net.minecraft.world.level.Level; -import net.minecraftforge.registries.ForgeRegistries; import net.minecraftforge.common.capabilities.ICapabilityProvider; public class HatItem extends EquipmentItem { @@ -74,88 +70,26 @@ public HatItem(Properties properties) { public void appendHoverText(ItemStack stack, @Nullable Level world, List lines, TooltipFlag tooltipFlag) { super.appendHoverText(stack, world, lines, tooltipFlag); - - // Special abilities with Unicode symbols if (this.headshotReductionPercentage > 0.0F) { Component percentageText = - new TextComponent(Objects.requireNonNull(String.format(Locale.ROOT, "%.0f%%", - this.headshotReductionPercentage * 100.0F))).withStyle(ChatFormatting.RED); - - lines.add(new TextComponent("◈ ") - .withStyle(ChatFormatting.GOLD) - .append(new TranslatableComponent("hat.headshot_reduction") - .withStyle(ChatFormatting.GRAY) - .append(Objects.requireNonNull(percentageText)))); + new TextComponent(String.format("%.0f", this.headshotReductionPercentage * 100.0F) + "%") + .withStyle(ChatFormatting.RED); + + lines.add(new TranslatableComponent("hat.headshot_reduction") + .withStyle(ChatFormatting.GRAY) + .append(percentageText)); } - if (this.immuneToFlashes) { - lines.add(new TextComponent("✦ ") - .withStyle(ChatFormatting.YELLOW) - .append(new TranslatableComponent("hat.immune_to_flashes") - .withStyle(ChatFormatting.GRAY))); + lines.add(new TranslatableComponent("hat.immune_to_flashes") + .withStyle(ChatFormatting.GRAY)); } - if (this.immuneToGas) { - lines.add(new TextComponent("☁ ") - .withStyle(ChatFormatting.GREEN) - .append(new TranslatableComponent("hat.immune_to_gas") - .withStyle(ChatFormatting.GRAY))); + lines.add(new TranslatableComponent("hat.immune_to_gas") + .withStyle(ChatFormatting.GRAY)); } - if (this.nightVision) { - lines.add(new TextComponent("★ ") - .withStyle(ChatFormatting.AQUA) - .append(new TranslatableComponent("hat.has_night_vision") - .withStyle(ChatFormatting.GRAY))); - } - - // Ballistic protection stats - var itemId = ForgeRegistries.ITEMS.getKey(stack.getItem()); - if (itemId != null) { - var profile = ProtectionConfig.get().helmetProfile(itemId); - if (!profile.isEmpty()) { - lines.add(TextComponent.EMPTY); - lines.add(new TranslatableComponent("equipment.ballistic_stats") - .withStyle(ChatFormatting.YELLOW, ChatFormatting.BOLD)); - - Component absorptionText = - new TextComponent(Objects.requireNonNull(String.format(Locale.ROOT, "%.0f%%", - profile.absorption() * 100.0F))).withStyle(ChatFormatting.RED); - lines.add(new TextComponent("▣ ") - .withStyle(ChatFormatting.BLUE) - .append(new TranslatableComponent("equipment.absorption") - .withStyle(ChatFormatting.GRAY) - .append(Objects.requireNonNull(absorptionText)))); - - Component stoppingPowerText = - new TextComponent(Objects.requireNonNull(String.format(Locale.ROOT, "%.0f", - profile.stoppingPower()))).withStyle(ChatFormatting.RED); - lines.add(new TextComponent("⚙ ") - .withStyle(ChatFormatting.GRAY) - .append(new TranslatableComponent("equipment.stopping_power") - .withStyle(ChatFormatting.GRAY) - .append(Objects.requireNonNull(stoppingPowerText)))); - - if (profile.stunThreshold() > 0.0F) { - Component stunThresholdText = - new TextComponent(Objects.requireNonNull(String.format(Locale.ROOT, "%.0f", - profile.stunThreshold()))).withStyle(ChatFormatting.RED); - lines.add(new TextComponent("✖ ") - .withStyle(ChatFormatting.YELLOW) - .append(new TranslatableComponent("equipment.stun_threshold") - .withStyle(ChatFormatting.GRAY) - .append(Objects.requireNonNull(stunThresholdText)))); - } - - Component durabilityText = - new TextComponent(Objects.requireNonNull(String.format(Locale.ROOT, "%.2f", - profile.durabilityPerEnergy()))).withStyle(ChatFormatting.RED); - lines.add(new TextComponent("◊ ") - .withStyle(ChatFormatting.DARK_GRAY) - .append(new TranslatableComponent("equipment.durability_per_energy") - .withStyle(ChatFormatting.GRAY) - .append(Objects.requireNonNull(durabilityText)))); - } + lines.add(new TranslatableComponent("hat.has_night_vision") + .withStyle(ChatFormatting.GRAY)); } } @@ -182,9 +116,7 @@ public static class Properties extends Item.Properties { private boolean waterBreathing; public Properties attributeModifier(Attribute attribute, AttributeModifier modifier) { - this.attributeModifiers.put( - Objects.requireNonNull(attribute), - Objects.requireNonNull(modifier)); + this.attributeModifiers.put(attribute, modifier); return this; } diff --git a/crafting-dead-core/src/main/java/com/craftingdead/core/world/item/MagazineItem.java b/crafting-dead-core/src/main/java/com/craftingdead/core/world/item/MagazineItem.java index 07880f153..def8f8cd9 100644 --- a/crafting-dead-core/src/main/java/com/craftingdead/core/world/item/MagazineItem.java +++ b/crafting-dead-core/src/main/java/com/craftingdead/core/world/item/MagazineItem.java @@ -105,20 +105,16 @@ public void appendHoverText(ItemStack stack, Level level, List lines, Component amountText = new TextComponent(currentAmount + "/" + this.getSize()) .withStyle(ChatFormatting.RED); - lines.add(new TextComponent("■ ") - .withStyle(ChatFormatting.YELLOW) - .append(new TranslatableComponent("magazine.amount") - .withStyle(ChatFormatting.GRAY) - .append(amountText))); + lines.add(new TranslatableComponent("magazine.amount") + .withStyle(ChatFormatting.GRAY) + .append(amountText)); } if (this.armorPenetration > 0) { - lines.add(new TextComponent("▣ ") - .withStyle(ChatFormatting.BLUE) - .append(new TranslatableComponent("magazine.armor_penetration") - .withStyle(ChatFormatting.GRAY) - .append(new TextComponent(String.format("%.0f%%", this.armorPenetration)) - .withStyle(ChatFormatting.RED)))); + lines.add(new TranslatableComponent("magazine.armor_penetration") + .withStyle(ChatFormatting.GRAY) + .append(new TextComponent(String.format("%.0f%%", this.armorPenetration)) + .withStyle(ChatFormatting.RED))); } } diff --git a/crafting-dead-core/src/main/java/com/craftingdead/core/world/item/MeleeWeaponItem.java b/crafting-dead-core/src/main/java/com/craftingdead/core/world/item/MeleeWeaponItem.java index ae347f393..530e7fc3a 100644 --- a/crafting-dead-core/src/main/java/com/craftingdead/core/world/item/MeleeWeaponItem.java +++ b/crafting-dead-core/src/main/java/com/craftingdead/core/world/item/MeleeWeaponItem.java @@ -70,53 +70,15 @@ public Multimap getAttributeModifiers( @Override public void appendHoverText(ItemStack stack, Level world, List tooltip, @NotNull TooltipFlag flag) { - super.appendHoverText(stack, world, tooltip, flag); - - // Calculate attack speed (convert from modifier to actual attacks per second) - double attackSpeed = 4.0D; // Base attack speed - for (var modifier : this.attributeModifiers.get(Attributes.ATTACK_SPEED)) { - attackSpeed += modifier.getAmount(); - } - - // Melee Stats Header - tooltip.add(new TranslatableComponent("melee.stats") - .withStyle(ChatFormatting.YELLOW, ChatFormatting.BOLD)); - - // Damage - tooltip.add(new TranslatableComponent("✖ ") - .withStyle(ChatFormatting.DARK_GRAY) - .append(new TranslatableComponent("melee.damage") - .withStyle(ChatFormatting.GRAY)) - .append(": ") - .append(new TranslatableComponent(String.valueOf(this.attackDamage)) - .withStyle(ChatFormatting.RED))); - - // Attack Speed - String attacksPerSecond = String.format("%.1f", attackSpeed); - tooltip.add(new TranslatableComponent("» ") - .withStyle(ChatFormatting.DARK_GRAY) - .append(new TranslatableComponent("melee.attack_speed") - .withStyle(ChatFormatting.GRAY)) - .append(": ") - .append(new TranslatableComponent(attacksPerSecond) - .withStyle(ChatFormatting.AQUA))); - - // Durability - int durability = stack.getMaxDamage() - stack.getDamageValue(); - int maxDurability = stack.getMaxDamage(); - ChatFormatting durabilityColor = durability > maxDurability * 0.5 - ? ChatFormatting.GREEN - : durability > maxDurability * 0.25 - ? ChatFormatting.YELLOW - : ChatFormatting.RED; - - tooltip.add(new TranslatableComponent("◆ ") - .withStyle(ChatFormatting.DARK_GRAY) - .append(new TranslatableComponent("melee.durability") - .withStyle(ChatFormatting.GRAY)) - .append(": ") - .append(new TranslatableComponent(durability + "/" + maxDurability) - .withStyle(durabilityColor))); + tooltip.add(new TranslatableComponent("item.craftingdead.damage").append(" ").append( + new TranslatableComponent(String.valueOf(this.attackDamage)) + .withStyle(style -> style.withColor(ChatFormatting.RED))) + .withStyle(style -> style.withColor(ChatFormatting.GRAY))); + + tooltip.add(new TranslatableComponent("item.craftingdead.durability").append(" ").append( + new TranslatableComponent(String.valueOf(stack.getMaxDamage() - stack.getDamageValue())) + .withStyle(style -> style.withColor(ChatFormatting.RED))) + .withStyle(style -> style.withColor(ChatFormatting.GRAY))); } @Override diff --git a/crafting-dead-core/src/main/java/com/craftingdead/core/world/item/ModItems.java b/crafting-dead-core/src/main/java/com/craftingdead/core/world/item/ModItems.java index d074eaf61..e8439efa5 100644 --- a/crafting-dead-core/src/main/java/com/craftingdead/core/world/item/ModItems.java +++ b/crafting-dead-core/src/main/java/com/craftingdead/core/world/item/ModItems.java @@ -44,7 +44,6 @@ import com.craftingdead.core.world.item.gun.attachment.Attachments; import com.craftingdead.core.world.item.gun.minigun.MinigunItem; import com.craftingdead.core.world.item.gun.skin.Skins; -import com.craftingdead.core.world.item.MedicalItem; import net.minecraft.ChatFormatting; import net.minecraft.network.chat.TranslatableComponent; @@ -1131,7 +1130,7 @@ public ItemStack makeIcon() { .tab(COMBAT_TAB))); public static final RegistryObject SLEDGEHAMMER = deferredRegister.register("sledgehammer", - () -> new ModPickaxeItem(Tiers.IRON, 1.0F, 10, -2.4F, + () -> new ModPickaxeItem(Tiers.IRON, 0.55F, 10, -2.4F, new Item.Properties() .durability(110) .tab(COMBAT_TAB))); @@ -1173,7 +1172,7 @@ public ItemStack makeIcon() { .tab(COMBAT_TAB))); public static final RegistryObject PICKAXE = deferredRegister.register("pickaxe", - () -> new ModPickaxeItem(Tiers.IRON, 1.5F, 10, -2.4F, new Item.Properties() + () -> new ModPickaxeItem(Tiers.IRON, 0.8F, 10, -2.4F, new Item.Properties() .durability(210) .tab(COMBAT_TAB))); @@ -1637,7 +1636,7 @@ public ItemStack makeIcon() { .stacksTo(1) .tab(COSMETICS_TAB), ActionTypes.SHRED_CLOTHING, - ClothingType.HEAVY)); + ClothingType.MILITARY)); public static final RegistryObject FIREMAN_CLOTHING = deferredRegister.register("fireman_clothing", @@ -1965,9 +1964,9 @@ public static void contributeProtectionMappings(ProtectionConfig.Builder builder public static final RegistryObject FIRST_AID_KIT = deferredRegister.register("first_aid_kit", - () -> new MedicalItem(ActionTypes.USE_FIRST_AID_KIT, new Item.Properties() + () -> new ActionItem(ActionTypes.USE_FIRST_AID_KIT, new Item.Properties() .stacksTo(3) - .tab(MEDICAL_TAB), MedicalItem.MedicalItemType.FIRST_AID_KIT)); + .tab(MEDICAL_TAB))); public static final RegistryObject DIRTY_RAG = deferredRegister.register("dirty_rag", @@ -1983,33 +1982,33 @@ public static void contributeProtectionMappings(ProtectionConfig.Builder builder public static final RegistryObject CLEAN_RAG = deferredRegister.register("clean_rag", - () -> new MedicalItem(ActionTypes.USE_CLEAN_RAG, new Item.Properties() + () -> new ActionItem(ActionTypes.USE_CLEAN_RAG, new Item.Properties() .stacksTo(3) - .tab(MEDICAL_TAB), MedicalItem.MedicalItemType.CLEAN_RAG)); + .tab(MEDICAL_TAB))); public static final RegistryObject ADRENALINE_SYRINGE = deferredRegister.register("adrenaline_syringe", - () -> new MedicalItem(ActionTypes.USE_ADRENALINE_SYRINGE, new Item.Properties() + () -> new ActionItem(ActionTypes.USE_ADRENALINE_SYRINGE, new Item.Properties() .stacksTo(3) - .tab(MEDICAL_TAB), MedicalItem.MedicalItemType.ADRENALINE_SYRINGE)); + .tab(MEDICAL_TAB))); public static final RegistryObject SYRINGE = deferredRegister.register("syringe", - () -> new MedicalItem(ActionTypes.USE_SYRINGE, new Item.Properties() + () -> new ActionItem(ActionTypes.USE_SYRINGE, new Item.Properties() .stacksTo(3) - .tab(MEDICAL_TAB), MedicalItem.MedicalItemType.SYRINGE)); + .tab(MEDICAL_TAB))); public static final RegistryObject BLOOD_SYRINGE = deferredRegister.register("blood_syringe", - () -> new MedicalItem(ActionTypes.USE_BLOOD_SYRINGE, new Item.Properties() + () -> new ActionItem(ActionTypes.USE_BLOOD_SYRINGE, new Item.Properties() .stacksTo(3) - .tab(MEDICAL_TAB), MedicalItem.MedicalItemType.BLOOD_SYRINGE)); + .tab(MEDICAL_TAB))); public static final RegistryObject BANDAGE = deferredRegister.register("bandage", - () -> new MedicalItem(ActionTypes.USE_BANDAGE, new Item.Properties() + () -> new ActionItem(ActionTypes.USE_BANDAGE, new Item.Properties() .stacksTo(3) - .tab(MEDICAL_TAB), MedicalItem.MedicalItemType.BANDAGE)); + .tab(MEDICAL_TAB))); // ================================================================================ // Backpacks @@ -2126,6 +2125,7 @@ private static StorageItem smallBackpack() { .slot(Equipment.Slot.BACKPACK) .itemRows(2) .menuConstructor(GenericMenu::createSmallBackpack) + .toolTip(new TranslatableComponent("small_backpack.information")) .stacksTo(1) .tab(COSMETICS_TAB)); } @@ -2135,6 +2135,7 @@ private static StorageItem mediumBackpack() { .slot(Equipment.Slot.BACKPACK) .itemRows(3) .menuConstructor(GenericMenu::createMediumBackpack) + .toolTip(new TranslatableComponent("medium_backpack.information")) .stacksTo(1) .tab(COSMETICS_TAB)); } @@ -2144,6 +2145,7 @@ private static StorageItem largeBackpack() { .slot(Equipment.Slot.BACKPACK) .itemRows(4) .menuConstructor(GenericMenu::createLargeBackpack) + .toolTip(new TranslatableComponent("large_backpack.information")) .stacksTo(1) .tab(COSMETICS_TAB)); } @@ -2153,6 +2155,7 @@ private static StorageItem gunBag() { .slot(Equipment.Slot.BACKPACK) .itemRows(2) .menuConstructor(GenericMenu::createGunBag) + .toolTip(new TranslatableComponent("gunbag.information")) .stacksTo(1) .tab(COSMETICS_TAB)); } diff --git a/crafting-dead-core/src/main/java/com/craftingdead/core/world/item/PaintItem.java b/crafting-dead-core/src/main/java/com/craftingdead/core/world/item/PaintItem.java index 82e084209..3ae05dc7d 100644 --- a/crafting-dead-core/src/main/java/com/craftingdead/core/world/item/PaintItem.java +++ b/crafting-dead-core/src/main/java/com/craftingdead/core/world/item/PaintItem.java @@ -19,6 +19,7 @@ package com.craftingdead.core.world.item; import java.util.List; +import java.util.Objects; import java.util.OptionalInt; import java.util.concurrent.ThreadLocalRandom; import org.jetbrains.annotations.Nullable; @@ -59,22 +60,30 @@ public PaintItem(ResourceKey skin, Properties properties) { @Override public ICapabilityProvider initCapabilities(ItemStack itemStack, @Nullable CompoundTag nbt) { return CapabilityUtil.provider(() -> Paint.of(this.skin, this.multipaint - ? OptionalInt.of( + ? OptionalInt.of( DyeColor.values()[ThreadLocalRandom.current().nextInt(DyeColor.values().length)] .getTextColor()) - : OptionalInt.empty()), + : OptionalInt.empty()), Paint.CAPABILITY); } @Override public void appendHoverText(ItemStack itemStack, @Nullable Level level, List lines, TooltipFlag flag) { + var skins = Skins.REGISTRY.get(this.skin).getAcceptedGuns(); + if (skins == null || skins.isEmpty()) { + lines.add(new TranslatableComponent("paint.no_guns") + .withStyle(ChatFormatting.GRAY)); + return; + } lines.add(new TranslatableComponent("paint.accepted_guns") .withStyle(ChatFormatting.GRAY)); - Skins.REGISTRY.get(this.skin).getAcceptedGuns().stream() + skins.stream() .map(ForgeRegistries.ITEMS::getValue) + .filter(Objects::nonNull) .map(Item::getDescription) .map(text -> text.copy().withStyle(ChatFormatting.RED)) .forEach(lines::add); } + } diff --git a/crafting-dead-core/src/main/java/com/craftingdead/core/world/item/StorageItem.java b/crafting-dead-core/src/main/java/com/craftingdead/core/world/item/StorageItem.java index 3d51db5dd..4bd4bf8c6 100644 --- a/crafting-dead-core/src/main/java/com/craftingdead/core/world/item/StorageItem.java +++ b/crafting-dead-core/src/main/java/com/craftingdead/core/world/item/StorageItem.java @@ -20,11 +20,8 @@ import java.util.List; -import java.util.Locale; -import java.util.Objects; import java.util.UUID; import org.jetbrains.annotations.Nullable; -import com.craftingdead.core.trauma.ProtectionConfig; import com.craftingdead.core.world.item.equipment.Equipment; import com.google.common.collect.ImmutableMultimap; import com.google.common.collect.Multimap; @@ -52,7 +49,6 @@ import net.minecraftforge.items.CapabilityItemHandler; import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.ItemStackHandler; -import net.minecraftforge.registries.ForgeRegistries; public class StorageItem extends EquipmentItem { @@ -65,6 +61,7 @@ public class StorageItem extends EquipmentItem { private final Equipment.Slot slot; private final int itemRows; private final ItemHandlerMenuConstructor menuConstructor; + private final TranslatableComponent component; public StorageItem(Properties properties) { super(properties); @@ -72,6 +69,7 @@ public StorageItem(Properties properties) { this.slot = properties.slot; this.itemRows = properties.itemRows; this.menuConstructor = properties.menuConstructor; + this.component = properties.component; } @Override @@ -115,54 +113,8 @@ public void appendHoverText(ItemStack itemStack, Level world, List li TooltipFlag tooltipFlag) { super.appendHoverText(itemStack, world, lines, tooltipFlag); - if (this.slot == Equipment.Slot.VEST) { - var itemId = ForgeRegistries.ITEMS.getKey(itemStack.getItem()); - if (itemId != null) { - var profile = ProtectionConfig.get().vestProfile(itemId); - if (!profile.isEmpty()) { - lines.add(TextComponent.EMPTY); - lines.add(new TranslatableComponent("equipment.ballistic_stats") - .withStyle(ChatFormatting.YELLOW, ChatFormatting.BOLD)); - - var absorptionText = new TextComponent(Objects.requireNonNull( - String.format(Locale.ROOT, "%.0f%%", profile.absorption() * 100.0F))) - .withStyle(ChatFormatting.RED); - lines.add(new TextComponent("▣ ") - .withStyle(ChatFormatting.BLUE) - .append(new TranslatableComponent("equipment.absorption") - .withStyle(ChatFormatting.GRAY) - .append(Objects.requireNonNull(absorptionText)))); - - var stoppingPowerText = new TextComponent(Objects.requireNonNull( - String.format(Locale.ROOT, "%.0f", profile.stoppingPower()))) - .withStyle(ChatFormatting.RED); - lines.add(new TextComponent("⚙ ") - .withStyle(ChatFormatting.GRAY) - .append(new TranslatableComponent("equipment.stopping_power") - .withStyle(ChatFormatting.GRAY) - .append(Objects.requireNonNull(stoppingPowerText)))); - - if (profile.stunThreshold() > 0.0F) { - var stunThresholdText = new TextComponent(Objects.requireNonNull( - String.format(Locale.ROOT, "%.0f", profile.stunThreshold()))) - .withStyle(ChatFormatting.RED); - lines.add(new TextComponent("✖ ") - .withStyle(ChatFormatting.YELLOW) - .append(new TranslatableComponent("equipment.stun_threshold") - .withStyle(ChatFormatting.GRAY) - .append(Objects.requireNonNull(stunThresholdText)))); - } - - var durabilityText = new TextComponent(Objects.requireNonNull( - String.format(Locale.ROOT, "%.2f", profile.durabilityPerEnergy()))) - .withStyle(ChatFormatting.RED); - lines.add(new TextComponent("◊ ") - .withStyle(ChatFormatting.DARK_GRAY) - .append(new TranslatableComponent("equipment.durability_per_energy") - .withStyle(ChatFormatting.GRAY) - .append(Objects.requireNonNull(durabilityText)))); - } - } + if (this.component != null) { + lines.add(this.component.copy().withStyle(ChatFormatting.GRAY)); } itemStack.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) @@ -221,16 +173,15 @@ public void readShareTag(ItemStack stack, @Nullable CompoundTag tag) { public static class Properties extends Item.Properties { - private ImmutableMultimap.Builder attributeModifiers = + private final ImmutableMultimap.Builder attributeModifiers = ImmutableMultimap.builder(); private Equipment.Slot slot; private int itemRows; private ItemHandlerMenuConstructor menuConstructor; + private TranslatableComponent component; public Properties attributeModifier(Attribute attribute, AttributeModifier modifier) { - this.attributeModifiers.put( - Objects.requireNonNull(attribute), - Objects.requireNonNull(modifier)); + this.attributeModifiers.put(attribute, modifier); return this; } @@ -248,6 +199,11 @@ public Properties menuConstructor(ItemHandlerMenuConstructor menuConstructor) { this.menuConstructor = menuConstructor; return this; } + + public Properties toolTip(TranslatableComponent component) { + this.component = component; + return this; + } } @FunctionalInterface diff --git a/crafting-dead-core/src/main/java/com/craftingdead/core/world/item/equipment/ClothingProtectionInitializer.java b/crafting-dead-core/src/main/java/com/craftingdead/core/world/item/equipment/ClothingProtectionInitializer.java index 4607b5a2c..71d941688 100644 --- a/crafting-dead-core/src/main/java/com/craftingdead/core/world/item/equipment/ClothingProtectionInitializer.java +++ b/crafting-dead-core/src/main/java/com/craftingdead/core/world/item/equipment/ClothingProtectionInitializer.java @@ -41,37 +41,37 @@ public class ClothingProtectionInitializer { * Applies protection attributes to clothing items when they enter the world. * This ensures loot, mob drops, and spawned items get protection values. */ - @SubscribeEvent - public static void onItemEntitySpawn(EntityJoinWorldEvent event) { - if (event.getWorld().isClientSide()) { - return; // Only process on server side - } - - Entity entity = event.getEntity(); - if (entity instanceof ItemEntity itemEntity) { - ItemStack itemStack = itemEntity.getItem(); - initializeClothingProtection(itemStack); - } - } +// @SubscribeEvent +// public static void onItemEntitySpawn(EntityJoinWorldEvent event) { +// if (event.getWorld().isClientSide()) { +// return; // Only process on server side +// } +// +// Entity entity = event.getEntity(); +// if (entity instanceof ItemEntity itemEntity) { +// ItemStack itemStack = itemEntity.getItem(); +// initializeClothingProtection(itemStack); +// } +// } /** * Applies protection attributes when players craft clothing items. */ - @SubscribeEvent - public static void onItemCrafted(PlayerEvent.ItemCraftedEvent event) { - ItemStack itemStack = event.getCrafting(); - initializeClothingProtection(itemStack); - } +// @SubscribeEvent +// public static void onItemCrafted(PlayerEvent.ItemCraftedEvent event) { +// ItemStack itemStack = event.getCrafting(); +// initializeClothingProtection(itemStack); +// } /** * Applies protection attributes when players pick up clothing items. * This is a backup to ensure all clothing gets initialized. */ - @SubscribeEvent - public static void onItemPickup(EntityItemPickupEvent event) { - ItemStack itemStack = event.getItem().getItem(); - initializeClothingProtection(itemStack); - } +// @SubscribeEvent +// public static void onItemPickup(EntityItemPickupEvent event) { +// ItemStack itemStack = event.getItem().getItem(); +// initializeClothingProtection(itemStack); +// } /** * Initializes protection attributes on a clothing item if it doesn't have them yet. diff --git a/crafting-dead-core/src/main/java/com/craftingdead/core/world/item/gun/AbstractGun.java b/crafting-dead-core/src/main/java/com/craftingdead/core/world/item/gun/AbstractGun.java index 021cdf727..227d30af4 100644 --- a/crafting-dead-core/src/main/java/com/craftingdead/core/world/item/gun/AbstractGun.java +++ b/crafting-dead-core/src/main/java/com/craftingdead/core/world/item/gun/AbstractGun.java @@ -32,6 +32,7 @@ import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; import java.util.stream.Collectors; +import net.minecraft.sounds.SoundEvents; import org.jetbrains.annotations.Nullable; import org.slf4j.Logger; import com.craftingdead.core.ServerConfig; @@ -689,7 +690,12 @@ private void hitEntity(LivingExtension living, Entity hitEntity, Vec3 hitP .map(Hat.class::cast) .map(Hat::headshotReductionPercentage) .orElse(0.0F); - damage *= headshotDamagePercent * ServerConfig.instance.headshotBonusDamage.get(); + damage *= (float) (headshotDamagePercent * ServerConfig.instance.headshotBonusDamage.get()); + if (entity instanceof ServerPlayer player) { + player.playNotifySound(SoundEvents.ITEM_BREAK, player.getSoundSource(), 0.65F, 1.5F); + } + hitEntity.level.playSound(null, hitEntity.getX(), hitEntity.getY(), hitEntity.getZ(), + SoundEvents.ITEM_BREAK, hitEntity.getSoundSource(), 0.65F, 1.5F); } } @@ -775,6 +781,8 @@ private void npcHitEntity(LivingExtension living, Entity hitEntity, Vec3 h .map(Hat::headshotReductionPercentage) .orElse(0.0F); damage *= (float) (headshotDamagePercent * ServerConfig.instance.headshotBonusDamage.get()); + hitEntity.level.playSound(null, hitEntity.getX(), hitEntity.getY(), hitEntity.getZ(), + SoundEvents.ITEM_BREAK, hitEntity.getSoundSource(), 0.65F, 1.5F); } } diff --git a/crafting-dead-core/src/main/java/com/craftingdead/core/world/item/gun/ammoprovider/RefillableAmmoProvider.java b/crafting-dead-core/src/main/java/com/craftingdead/core/world/item/gun/ammoprovider/RefillableAmmoProvider.java index 6ee281d02..9642649d2 100644 --- a/crafting-dead-core/src/main/java/com/craftingdead/core/world/item/gun/ammoprovider/RefillableAmmoProvider.java +++ b/crafting-dead-core/src/main/java/com/craftingdead/core/world/item/gun/ammoprovider/RefillableAmmoProvider.java @@ -123,7 +123,7 @@ public void encode(FriendlyByteBuf out, boolean writeAll) { } else { out.writeBoolean(false); } - this.getMagazine().ifPresent(magazine -> magazine.encode(out, writeAll)); + this.getExpectedMagazine().encode(out, writeAll); out.writeVarInt(this.reserveSize); this.reserveSizeChanged = false; @@ -136,7 +136,7 @@ public void decode(FriendlyByteBuf in) { this.infiniteAmmo = in.readBoolean(); } - this.getMagazine().ifPresent(magazine -> magazine.decode(in)); + this.getExpectedMagazine().decode(in); this.reserveSize = in.readVarInt(); } diff --git a/crafting-dead-core/src/main/java/com/craftingdead/core/world/item/gun/skin/Skins.java b/crafting-dead-core/src/main/java/com/craftingdead/core/world/item/gun/skin/Skins.java index 7e3101ddc..f602ea895 100644 --- a/crafting-dead-core/src/main/java/com/craftingdead/core/world/item/gun/skin/Skins.java +++ b/crafting-dead-core/src/main/java/com/craftingdead/core/world/item/gun/skin/Skins.java @@ -96,25 +96,24 @@ public class Skins { static { register(VULCAN, ModItems.AK47); - register(ASMO, ModItems.AK47, ModItems.AWP, ModItems.M4A1, ModItems.P250, ModItems.P90, - ModItems.SCARL); - register(CANDY_APPLE, ModItems.AS50, ModItems.M107); - register(CYREX, ModItems.M4A1, ModItems.M9); - register(DIAMOND, ModItems.AS50, ModItems.DMR, ModItems.M107, ModItems.M4A1); + register(ASMO, ModItems.AK47, ModItems.AWP); // M4A1, P250, P90, SCAR-L + register(CANDY_APPLE); // AS50, M107 + register(CYREX); // M4A1, M9 + register(DIAMOND); // AS50, DMR, M107, M4A1 register(DRAGON, ModItems.AWP); - register(FADE, ModItems.G18, ModItems.MAC10); - register(FURY, ModItems.MINIGUN); - register(GEM, ModItems.P90); - register(INFERNO, ModItems.DESERT_EAGLE, ModItems.M4A1); - register(RUBY, ModItems.P90); - register(SCORCHED, ModItems.AWP, ModItems.DESERT_EAGLE, ModItems.DMR, ModItems.M4A1); - register(SLAUGHTER, ModItems.VECTOR); - register(UV, ModItems.MAC10); - register(HYPER_BEAST, ModItems.M4A1); - register(EMPEROR_DRAGON, ModItems.M4A1); + register(FADE); // G18, MAC-10 + register(FURY); // Minigun + register(GEM); // P90 + register(INFERNO, ModItems.DESERT_EAGLE); // M4A1 + register(RUBY); // P90 + register(SCORCHED, ModItems.AWP, ModItems.DESERT_EAGLE); // DMR, M4A1 + register(SLAUGHTER); // Vector + register(UV); // MAC-10 + register(HYPER_BEAST); // M4A1 + register(EMPEROR_DRAGON); // M4A1 register(NUCLEAR_WINTER, ModItems.DESERT_EAGLE); register(MONARCH, ModItems.AWP); - register(LOVELACE, ModItems.DESERT_EAGLE, ModItems.M4A1); + register(LOVELACE, ModItems.DESERT_EAGLE); // M4A1 } private static ResourceKey> createRegistryKey(String name) { @@ -123,9 +122,9 @@ private static ResourceKey> createRegistryKey(String name) { private static void register(ResourceKey location, RegistryObject... guns) { REGISTRY.register(location, new Skin(location.location(), - Arrays.stream(guns) - .map(RegistryObject::getId) - .collect(Collectors.toList())), + Arrays.stream(guns) + .map(RegistryObject::getId) + .collect(Collectors.toList())), Lifecycle.stable()); } } diff --git a/crafting-dead-core/src/main/resources/META-INF/mods.toml b/crafting-dead-core/src/main/resources/META-INF/mods.toml index 0707f2237..ded688d3b 100644 --- a/crafting-dead-core/src/main/resources/META-INF/mods.toml +++ b/crafting-dead-core/src/main/resources/META-INF/mods.toml @@ -14,13 +14,6 @@ displayURL = "www.craftingdead.com" modId = "craftingdead" version = "${file.jarVersion}" -[[dependencies.craftingdead]] -mandatory = true -modId = "craftingdeadanticheat" -ordering = "AFTER" -side = "BOTH" -versionRange = "[1.0,)" - [[dependencies.craftingdead]] mandatory = true modId = "forge" diff --git a/crafting-dead-core/src/main/resources/assets/craftingdead/lang/en_us.json b/crafting-dead-core/src/main/resources/assets/craftingdead/lang/en_us.json index f60376959..b7cf640d7 100644 --- a/crafting-dead-core/src/main/resources/assets/craftingdead/lang/en_us.json +++ b/crafting-dead-core/src/main/resources/assets/craftingdead/lang/en_us.json @@ -468,6 +468,7 @@ "clothing_item.water_breathing": "Gives water breathing ability", "clothing_item.water_speed": "Increases swimming speed", "paint.accepted_guns":"Use with:", + "paint.no_guns": "Coming soon...", "attachment_multiplier_type.damage": "Damage", "attachment_multiplier_type.accuracy": "Accuracy", @@ -492,6 +493,10 @@ "bloody_rag.information": "Stained cloth", "clean_rag.information": "Stops bleeding", "parachute.information": "Slows descent for safe landing", + "small_backpack.information": "Compact backpack for light travel", + "medium_backpack.information": "Reliable backpack for everyday adventuring", + "large_backpack.information": "Heavy-duty backpack built for long journeys", + "gunbag.information": "Specialized carry bag for firearms", "medical.use_duration": "Use Time:", "medical.healing": "Healing:", diff --git a/crafting-dead-core/src/main/resources/assets/craftingdead/textures/attachment/acog_sight_reddot.png b/crafting-dead-core/src/main/resources/assets/craftingdead/textures/attachment/acog_sight_reddot.png index c218954e2b20cb62924e9024b23cedd69cfd7c3c..1758359b8f763c517433e3ee8ae025b530e0bf52 100644 GIT binary patch delta 107 zcmd1mWSpRq8sO>T7*cWT?e&ek2Mjn|9lzZ-j%-kheRFS;YSxb14@_SOGctfd!N{&HotRtCA}j$?)gWg!?~cm!={}z?fViHnelF{r G5}E+(5G@n{ delta 76 zcmeBV%$lI$X6WhS7*a9k?KwkU1_lo14L`-Zcmo^`9lxxV!NdRsIa)8@Geg)1jxu~X V%lItJY2#;*fTydU%Q~loCIFhJ7ySSL diff --git a/crafting-dead-core/src/main/resources/assets/craftingdead/textures/attachment/eotech_reddot.png b/crafting-dead-core/src/main/resources/assets/craftingdead/textures/attachment/eotech_reddot.png index 257c8224b15b648da0c5f37b3f407257bfd306fe..96a1e67fccb0b0545cb646a3a5c342c9a8d7a450 100644 GIT binary patch literal 192 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=?Vc` z!@sh=gk3{FOe@?V4rZ%CGR-@wKFokmV$b_UcF;q qz<$M}!ScX2QBjqOUSS4>>C#Gqb%nwgKTod!#fKl=8At(c;BX;T z06eqpW6Tjinx%WpiQRl`0DXRRCvQGJ0DwDd)tDmyP<{lU{QRg)#Rl+p`T5-D;{)(` z3IG5A{Nf5gtrdX#0QUg^*W3rV4?y`5fb#RhGUYxXb@T26JQ|(?0Elt`-H{}~qu6VQ P00000NkvXXu0mjf?FUCp delta 128 zcmdnXIG1sPN+n})kh>GZx^prw85kIBJzX3_D(1Ys<;csRz{7Ho`(Nobw~G!HB9kOp zwG)JaDjv9~#(Mgf--)=)2;_ml2a9?zwV3w{H~Y-e+w+$IxqPV+o@u_m3|c@o2S^$S RE(K2pQJ$`TF6*2Ung9yYBz^z@ diff --git a/crafting-dead-core/src/main/resources/assets/craftingdead/textures/gui/container/crafting.png b/crafting-dead-core/src/main/resources/assets/craftingdead/textures/gui/container/crafting.png index 0c215beef255309595c92551479610aa073d9d32..a832a18c5444ba0405a1d589af71fc488d8fb000 100644 GIT binary patch delta 1518 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 J<8^y+;=ep1PgVc` diff --git a/crafting-dead-core/src/main/resources/assets/craftingdead/textures/gui/container/equipment.png b/crafting-dead-core/src/main/resources/assets/craftingdead/textures/gui/container/equipment.png index d69e7b1fc04352b7098ea8228492142ffdb76596..8d63380911ff8b810972eeaff329b378c0863ed7 100644 GIT binary patch delta 4596 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 delta 4596 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 diff --git a/crafting-dead-core/src/main/resources/assets/craftingdead/textures/gui/container/generic_54.png b/crafting-dead-core/src/main/resources/assets/craftingdead/textures/gui/container/generic_54.png index 821defdf8e0d46978c70011346ee7a92684d0b0f..8e57aef239b3061c7e01dfcee42cec96fbcf549b 100644 GIT binary patch literal 3085 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 literal 3128 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 diff --git a/crafting-dead-core/src/main/resources/assets/craftingdead/textures/item/acog_sight.png b/crafting-dead-core/src/main/resources/assets/craftingdead/textures/item/acog_sight.png index ed8d8aa3b96c9a0957d1465146953385d0ee3abc..4097287d4b62a37ea930d1a0da2bbed62fd2445d 100644 GIT binary patch delta 288 zcmV+*0pI?Z1G@r{B!3BTNLh0L04^f{04^f|c%?sf0002(Nkl<;2>dYM06320{F$xM#zvn7PsI4KzceAo z7)3)$3GVyuS~msi$x5#4VofHc^m`|w^)0XjDjD&8o~H=@JbzDj3$#v-F^Uz{AYxZ& zB(5n?r`4h*l*d~cvC=awVL?PqfqiBYZIv3OcnD$sjsgJZgH=kbWCRiO84)o*BdKex ziipHh-uZG2BAS`oNB1v;Q0`+_)+jO|hUGkf9+~NJmnFBl?kLSw-wgjbA5kgFSxm>KZ z{~@v^2q7qn!o*=1s%8FsK0gSRWvMvl0DvS(p4K=Egkgv@O@B?C=lQzisSu?U0C2rt z-}QbiFijJrlqQbj_%2`9wK)&N004?}j(MH|073|qWvQlV!fv;--iB4+9c#I&svbWc zMK~UhFGulXOZ0sobY1tUpEECSpzr$tfNGis05FcD(?{3i`d9$?yK2|Qnl1I#5oj1= z!Rd6`B(OyPly)|pmP?-JN=j*-*c!%|IVVYS*IWnzLWp&dId3<;WR?vyE(^zo^E2d} zqitIgFXx{L!C00000NkvXXu0mjf;rOhC diff --git a/crafting-dead-core/src/main/resources/assets/craftingdead/textures/item/acr_magazine.png b/crafting-dead-core/src/main/resources/assets/craftingdead/textures/item/acr_magazine.png index 09ec7a96f48357c8065b17ea94e012b124d5ce34..33128a8e0b7b99e2adcf3d145cc474f31745135b 100644 GIT binary patch delta 814 zcmV+}1JV5E0>uW9B!2{FK}|sb0I`n?{9y$E000SaNLh0L01FTR01FTSts}j400007 zbV*G`2j2-E6Cor#ma3cp000xdS@x=_|!xt_m&CGXybLQMS0RI(fQ76)(PNYShNQ*j= z7Ih*m>O@-9iL|H_Y0*f1{W1J27K??Jkgr=qS~PO%HNQ*{zkwTyg!8?su54(^Vx1p4BP_nlXjHTZoKz*Vcyq?otJJD=lVnn&u{$} zV3Y~0g}N~})+z+D6L#!ot_XoV3Gg!~vX!_@DK!ZR<$nSkCkw38-|ToBDj82z;8|6G z6WLDoQGZww8KR`3M<9^6|EEB~kO2R`Ln$Q3&LcL`icLy`k3^k7xEs-XE%a7B$UU-S zKiiLmfP+%FK+hhONrDB^58H$U9|ub)O&~hbf{jQwC168^1!(gHzXJ#Kyq_DuUfP2< z-gdefc7Jgk+tirK1Xe>mh|?`#ktFrP?qLsnpcKBp8W3sca!BB4%zhDvz2 z8EZ5L5+uTrv%uoC6F&?B^CZ9$;%cfC;A=Q_y8){~r)Wm*dTzocv%u5NY67YSmV++% zZ=Ayl3B;%w%d|m(dSGd)DsYhN#~w9fO@I?9rGFF(e4M@r-}SQ;xdXFw6#RC19~}V+ zh_^o!;LTr8wyQpZ1ZkFT8;k%xwwu}$+oL*34EfH$rXJP&wt9@RVXC(@!$q(z-bi~2y_PtD|O+u!;vod5s;07*qoM6N<$f`F!F*#H0l delta 331 zcmV-R0krkhzQL5Eym2S*6v4OE`orUfb_m+7g*)zgWQ%Q$>u!I z2d(uuaFkL2fXfTQ*=dW1#~yWEi>9mBAo?Q9PCma{ajxhJthFGbUvXnvyu8Yr10E+} ztwoxq0Q^qC`$P(u8CSOk6aVZo0cIXwyHaZHDBh_65us@sag*5u03eRzjca}1?_OX^ dlRzNw7a!v*a0&dZ&F26B002ovPDHLkV1l#El{EkW diff --git a/crafting-dead-core/src/main/resources/assets/craftingdead/textures/item/ak47_30_round_magazine.png b/crafting-dead-core/src/main/resources/assets/craftingdead/textures/item/ak47_30_round_magazine.png index 027626a8e51382713bac731360e283eb23e9d573..e22be4945d49bcc83ba2ea0a15c3a72754bd12e3 100644 GIT binary patch delta 270 zcmV+p0rCF00;vL!B!3BTNLh0L04^f{04^f|c%?sf0002nNkl*4LfIx5XDODcqDVewd;u^qG4bzk20pmQKU%QZ_Z@Q15JD*b zQc90((Naz#YPRuK!Ix!G+4<2;h}I6z^ZaQ7EDb0nXzc^D5`V-P%lB~{k4GFw%HNv+ z0|4Zlhm0Z10s;V7*HtCIRspWJpERFF{+3MnzIJ8#AYzfemHkr%c-ywJ=OuV8yOw=Z z32N3c#u8N6U&qJ2l7O%$qA#|W?CR6*jpp3FUV?if)xGa})VP)jc;PiQF)NH zImh(3zNctoZJ3ygO`0spJ1DQFVzrS$( z{lVdW1ON;-!RhjezVA2ZH4C(D8{fU_x^8pcy;T4Js;YW0T{BL@~AFC7X?jC^k(4AYb=@asuA_EPJ1$wkDzo0Mj&5x(5u` j@vPX}|A9iGpcdf)yg_Arb$Jj%00000NkvXXu0mjf@ri@a diff --git a/crafting-dead-core/src/main/resources/assets/craftingdead/textures/item/as50_magazine.png b/crafting-dead-core/src/main/resources/assets/craftingdead/textures/item/as50_magazine.png index 08b6ca8f4ef0b3f37f2d73b63bd403afb75d37b2..3aa407808589cbaeecfdb8dfdbbdf8b4b8c6aedb 100644 GIT binary patch delta 212 zcmV;_04x920`LKlB!3BTNLh0L04^f{04^f|c%?sf0001@Nkl4L(E%Rj?1A-t3|BgC{my_#bJxcK2H+~2K z0N|Xv$*nOW+U;Qhl^Ekgzn7)w@tG{2Uc%oIkW#v9Pg}wY5ly|n1J>H_I7IdDU$@v8 zv->$`0D#sS%>2|LQZEW_1Z~^a1bYOmBOPPrGCC?Xd8Fm!`hp+`^SJ;JLor+#P)t_< O0000{CDnLHkW021$gg!o`x4L zkC)GH{aerT>jMBy(^%KF-dGgHRS3bdEC5I;iQ{y8cNtE5#ww+JteM$Rulu(Lt})-jVFG6&0XPYC$I#4HBeq;0NkF%N t_kMRI4}XYenWf0+?S+DAlzN6FdL_002ovPDHLkV1n*NQQ`mq delta 330 zcmV-Q0k!_y0p$XaB!2;OQb$4nuFf3k0003WNklfV69QIh zBZ8%$md{8N2>F0~j*W#(V;u}>LP#-=pr%Mx+zq?TxNEg@s)2dFcf5`Y7K`QFxiBey zetI15?gKvF--zT3w>Q_*-sjgh53g4MR8^(jSGzFJ^U-x(hJRrIKq-aid0T78aRBJL zj-n{EdSB`axUNeWh6o`@(-dHm0qFalx~_?$h^A?D+u~?f{^9%nqP>#|=pdzBUtk{p zE}OHls=%DS?-yUIEnpJsDgtv3#Sg!)<*EX6j*0&y0>@$`Fbu=iS(xAb(j>G6+O`EC zNs_(8rIbd`A43d2#Q#&ZX_UtnEzbH-TgR@r}ZYSlL{P=*(+tS cSS&jH0Miw4g}`X(m#o^{ z+uw~3pP&5kRKDcU-yYoiDDK&xf6G?`?CtNywXN-?nQ78w0=zsqzVziu6B`@TaQEt^ zS1(1*XXl@Vuum=CfB1Wob4FDgGn1r=zVF%IzCqJkh$yvI%!csA`2tmqAShl`Rm3a_ z(o$<5t1kLUfX9#i%6t2}s7NGD;_jFkW=66k$r4eAENfCmKa2pRdc}(~dwoi>B#pEX z0=(g?04_GIA?FN1j5o)Ua}IYGcOU8}!s5ThMKN=qDYY;^J7c=FC4vO8x@0Q>+_M59 zq9OwHDiP)C0Pk-}fF$8;cE<6GV^o#N zWWuX|{^iG;KXGz&f>~ng`ZnFDqhBnDTB%W_MqPQnUItJ~K~$)vVvXVMOeSMCuWjP) z)KVdWuIo5Fcn(0@wgeD>7r%N2y3vSQ>HzU>?A+Ob8i)wDZttL~{CxY?05;tiTG5P@ z5~cWMpPE$w5zD?85Q!ShPG=k*9N_MVDk6f4;H3<6RaAs_G-5m+v&_pOL-ooY5DCCi zqP#QGFTdVpb~>Y$Le81_d`>b$L=e?zng+CrB_rp4FlhcCChWRyFp4TcaCCI|ad4aH z=lun7UJmogrVzx?1()>UH~$x`wboi|eRI79nW-Bq-7MSo00000NkvXXu0mjfxS%q$ literal 339 zcmV-Z0j&OsP)Px$4M{{nR5*>rkg-m~Fc5}+*T!)Y#iAV&3C0Y4i#|Nhz{0==NMvY{t0s<#F@sf8 z6T{FBJ<0O<{NJzd4!CxZ--Y#No0EArDS<-~0 zn)}@Zy|(}WQBf32_NPgBG;Qf_?=$>I&?|#N^2j74%RAwOq>y!n)DBcPLUjhR<`D@y zig-?81~2SYJnEz!%-}~dgGH}Q_zMPRun^Llm|?bT@SNi7)8B>UbAuxR&ncKl6Buo= zxB)(1$IA$`vX>F?{AbCLvS~{;ov!iKCcYb#wz5)G=r}waZ5pw_l002ovPDHLkV1lf%l63$8 diff --git a/crafting-dead-core/src/main/resources/assets/craftingdead/textures/item/bipod.png b/crafting-dead-core/src/main/resources/assets/craftingdead/textures/item/bipod.png index c61d45046bd966e8f9317e69457f32feaac19d04..ba26d6180ff33714190982ea2983732d8c51fcc9 100644 GIT binary patch delta 156 zcmV;N0Av5!0=NN?B!3BTNLh0L04^f{04^f|c%?sf0001LNklsimHfIKh|5(x8wAU>9X0W&kR9~zTq0IV;DcrQR}4S?P|nMp+4PCq8! zT&`N{kTh;rAc=@L{Uiy1Qp)ZwGY|J?mW%$DCpw;(WoBmftrZRDdnn%2ykhrU_#Vd7d9?#u%n)a&j-90KnyPS%05%%d!B_wymS-Jc^=N zqbPDl^iz~ltJWF-Yb{OFIK7<}L{UVRWt3&PYON7M05H!pQp&xFwH7HQecy9Fp9#Yd zfK5mUK^TS@W3bi&Fbo4pk{k>=2DH}PZa1{n#Bt0#&z~QqdoGX1gK-?O)*^)1ovdkH_=Bc?ZoSeazYE RI_CfY002ovPDHLkV1oZTkhA~* diff --git a/crafting-dead-core/src/main/resources/assets/craftingdead/textures/item/desert_eagle_magazine.png b/crafting-dead-core/src/main/resources/assets/craftingdead/textures/item/desert_eagle_magazine.png index 8e91f0636da04bd59faa5f64f5f028253326470c..8b0826c4d678cf24f916192ff2025ca0b67911f4 100644 GIT binary patch delta 296 zcmV+@0oVSj0>c83B!3BTNLh0L04^f{04^f|c%?sf0002>NklI`$=n8o6AtJEW{@pVyisJqew{24qxI1150Wp3yzp^Yb41-QDcy>XE u2+s4ok7HSuWFZ0bW(9sTUnZ0JAAA7Z99+sElO5gw0000`(9@3c+Tl@TwS*Trq1r3GCOcy3PkP|0)Cmft`u88_KdAo2KFPeF5O- zcIWGQrmk!CyVL^K+R+&E@}7uzNgOo~8)L|_41hR}0dUR%(0_HEwl)9ng9R*00>D%PDHLkV1m|^ecJ#4 diff --git a/crafting-dead-core/src/main/resources/assets/craftingdead/textures/item/dmr_magazine.png b/crafting-dead-core/src/main/resources/assets/craftingdead/textures/item/dmr_magazine.png index 94a223cb95313b35927637b741cfda5582591084..feb3e7400adeec6ec257042e371f8cc1860b439c 100644 GIT binary patch delta 466 zcmV;@0WJQG0_+2jB!3BTNLh0L04^f{04^f|c%?sf0004=Nkly^iWI5Jt~9 zP8_$i2qB(=hNs}6k$4Cy1V~f}3FXJJeT%#CF4~3w(KdWlBs()_JfA0lk3Rb7k0o!4 z6Q7N(-&M(az2(yYXFL(0HCU>aZbQ{ zkM|xCNtIe_(|TRkbX_-I3vRbtI{w~l-ut^fL#rR`0TIDkn*fG7{$&8IHO3g~y2d$2 zjFGl&lR-xX=zlA|TrN20D2jp@W4aAm|M#;}YCHfD!5BlH=P0G_0QxtNB&{5h2fWilRVkoq7&n zj6rLSh!8>;rv=v9yJL3FeFssB5W-XA_+fxPLI38Sr0(Ghc#F8 z5Z=LLqbH%~Ao$Z*K*-u{R;8H%vl@8~kjXGF0|B7XX#6`1Nz&=q5B_|`cD)AxTyA&l z4jVY<*!!^)j4^{!DjSP2!dlDPbHx=9A^`wMDT#|# z5t#J|fcFkaJ0cdSQM{T!3BP*>YQYwWF+Q!Q=l>e}h(NCJESHdosys#_fs_)o*5iCS ra$$c)xnd=qU<-s0M6pJr@wGevJ?}}`n!@E}00000NkvXXu0mjfySQe@ diff --git a/crafting-dead-core/src/main/resources/assets/craftingdead/textures/item/eotech_sight.png b/crafting-dead-core/src/main/resources/assets/craftingdead/textures/item/eotech_sight.png index 029dc216b89821f21fa742ab6aa37c47f2c0b0de..a427cc54a7c97486f54413ba0be6e8a63130d45c 100644 GIT binary patch delta 406 zcmV;H0crlW1H1!}Fn<69XF*Lt006O%3;baP00009a7bBm001r`001r`0jlENk^lez z8FWQhbW?9;ba!ELWdLwtX>N2bZe?^JG%heMF*ZbLuk`=`0W3*GK~z{r?UPMwgfI|> zP3afAEnd6`B6t(L2p;M!;Q#+i%XHq<8Iqvgth@A3^1wq()PKB_7>i6M^WUHy{{-r~ zj@q`RrfFP@KE{7;CqhK(4Fus2DInsRePy3qFGR!q7S?rrdjX7DTV+`mBd$X}8i?y( zOeP4~2^HLmWy{eo%hGwWXR_}v?i%Cn={xvjPi)EJbG)%%Z1Bym?1ErY&X-&Dy83t` z-;0FDE!;Z;secC?2afu_SI2RLm$fBhjE4HbGIsP33K}}kGg)iZX_|rpVkNw)s=IbT zSB^l4LPQjRXP_KJ2^O~sNDT)r94qp+UzOsp3$YUZkOIVE7=k`T7((RN6Y(zGC?M$% z5Og9KheM3ZN`2#Z*+YD=Taz6zlgVTk07*qoM6N<$f-vc= A%K!iX delta 400 zcmV;B0dM}i1GWQ@FnWN)yC*aPk% z_7Zw9SwiBKWRYaiaF9d_>|h|sS}+@)le&3V^Ap`(X6lvpH17-1|V3De& zHI2E*KsmwNtAESG{i$BJ-wE#@PkC%S9^?CdK2sf06dBFd7NJs#eUJhP0Q(>%NfNDy z2_b}b|DmD?rIhJtG^+E5@B4&dSlP#M9E1=om&?nGaJ5=>bf-Wmb=D5Ukj-XOd75Uk unejCJ`FFfnEYiA}m#H(_($aF9`~V1Al<0M-7`6Za00{s|MNUMnLSTXdtHIs? diff --git a/crafting-dead-core/src/main/resources/assets/craftingdead/textures/item/fn57_magazine.png b/crafting-dead-core/src/main/resources/assets/craftingdead/textures/item/fn57_magazine.png index 394f21020391bc83637c69baf911f5dc6896c46b..82a093151f8578e1a001a8d1b4b13cb191b5bff5 100644 GIT binary patch delta 365 zcmV-z0h0cr0*C{UB!32COGiWi{{a60|De66lK=n!32;bRa{vGf6951U69E94oEQKA z00(qQO+^Rc1`-fC0Cqkm`2YX`6-h)vR9M69mN9OHKnw-vv)>g$Tc=M8XUiSZqZ6o9G%FpeX@A&@A5EZdgNAjtrJQ_%n- z@}m>U0L%=4uIuQ!?hwE|)&r`F_kIJEtOFvlSwj&?+W|8}L}=R~jn(TQHju zcs~^&&+|>}y~oVfCY;Xhzy#1V&0gLCpQn$Y@B6*f$Mu_i>Cfp4rLkmg=x3#}00000 LNkvXXu0mjff?=Kg delta 262 zcmV+h0r~!j1EKc8P2&R z0deCHQK;)0%zQQOy;n7&>ICBOwrw>_qzS}0=aQN-Ss?XBhy|>*h4+36|JW_K?7Zu` z&j`dYGmJ40pX!$h{QN^C{)~tyR8@sx7?Oh30st_M<5R*jnao#k20#o#cEa9+3IG5A M07*qoM6N<$g82b+`v3p{ diff --git a/crafting-dead-core/src/main/resources/assets/craftingdead/textures/item/fnfal_magazine.png b/crafting-dead-core/src/main/resources/assets/craftingdead/textures/item/fnfal_magazine.png index 6c2a2199bd3ec451e5ce95f79a6fb193054f56b2..581d1a4f54a4dcb218da682d863ac7cc2509bbee 100644 GIT binary patch delta 220 zcmV<203-jj0{8)tB!3BTNLh0L04^f{04^f|c%?sf00020NklK?(yQ5Cq#e zC=5Qt|G&nUh{}jLESp1)u2D8?-))MvXB61#6OA%@?JQSIb)IXZyt)Cr_W%H9MvM_5 zgf8DpZB8kDAWon!kl#*$QVPrr5dkyba||yplv*ot&M2ioL{;V|ptXjz7R(GHy5AN2 z4?v7@K7dlkz9AwQW99?2c5Gx3=_=qZ;V$8@1fE+$=iK_&@GM^`W%-|QgzwhYe7ynK W7&CBPxwKUP0000b>!3;-`i;K^&Y`UC#0 zAJ8Xs&r3Y{0WJy{@kSVwlqrFOwrI&H@S>Y&fg;bAOehozJ9DsZ==(k`mkV#l4-WbX z!1N`&pHBdc<7ldBO76NYt?NovRm2zp9%6vHt{H~m-*t}`0e@AcZCe0B2tVdb(_|@0 zWy%I(jD!$amgT;7i&fQH&MuHrdU#eF%G~W2t~gg zyo_-oj?Nz5cpXqF`U~HYgMW|;(n|`~n^0&AyGbiT<`R;y*&*yEP$(3BOr;IDUe3e&egxq0d~v!R z2qCD?F$pwHGtBK-C3e~X?>zt_f{1+QR@4H{xuk^20=ZEO#9|l`5!$xhULb@}bzL`F zbI#$tUo6mU0&7qN{!<`lC#VIcI$=|R++-85z6EB17~^QPl5_*9KOw+g8&KEv05DaE jec!JyU`N2bZe?^JG%heMHD!e|WdHyHL`g(JR9Hvtl-rJjFbqWD zq0;^luiWp5|Nk0qPpGSq!mid@=tCK4M5!Im*hz>kTrff&e199%z#b2WG)*IEn!2Y? zVoS=gaAH}O$vn?8j-z{irh#diq^@iCUKGU#PT*|@5U;ArZNVW1L}ZtQ)j-#E?hNpo z|CXhzTpRo%AqlI2VHl+EduiL&y)R2wxiY) z-%7+8KT}zjz2w^v7E%&ISg#%8@YD$)9!}s?1Dtk5^%j(6d9DG(^z*Cxf4Tv>r*pjl z|7IXbk}nt*Qr_Xj=$x(a#oH;Lo;DJBfVJZQ#NF$>MuDrVt@pAkjh XBxq51#7|&(00000NkvXXu0mjfoM*jg delta 366 zcmV-!0g?XG1C;}iFn}0re=$YJIuTZ}!{M7GXBmp*T`0uzo=i?+vrmpMo@bM~V z`}Z%rynU|by+2nxO;Z3*001Ebo*xS(9<2rlA(LSk==&a~X@AN&=NyjXKnQ^>%T{q~ zHDDM9!Z1YJwy-PF;g9oPLQz z6J=ShJ_VHx{AZMYUUSY>DAyYxgq%!Y6b14;SGr$T8{nLyEK2~FOAlz=hJ=s_0DRvE z0C=7UN-65PR@(a+%17}mG8>sqR8^%)br}#srYMT0({FCru;Gv58&A2a>&6|?Q2+n{ M07*qoM6N<$f)EF$CjbBd diff --git a/crafting-dead-core/src/main/resources/assets/craftingdead/textures/item/hk417_magazine.png b/crafting-dead-core/src/main/resources/assets/craftingdead/textures/item/hk417_magazine.png index 994d5b7898b933f4d86a9ae101e2fd5cae7c52de..7dda8ca2918cc684bb1ff8e98ab9a67460222062 100644 GIT binary patch delta 366 zcmX@WG>v(JVLeN_qpu?a!^VE@KZ&di3=EtF9+AZi40=i+%(&{&-AO<}_7YEDSN8iX zGR!Jwf1Wqo1`0`*xJHx&=ckpFCl;kL6eMQmmFVTAmMEC$8R!`rn=nUL0Tq4rba4!c za6dcQk*nE2z_s)tBa7gjj(05Pa)*A$XTD-_bE^L_SwP%gcTZBh_Gh8XelD|^RE0HW zI-F$jQVTF@{G@%@pkrd)bH>!p=S%Y=FIC$t&{@db_jp3??Uei93uYhn91;0@XuX76W#@XxN|CG66U|<`BMA;kI4P`OsRbNU#((R zM($-w?Tc|pfBQLn!5KmJ7ayK6R^>8oWe;e)bhu6X}Oiq zF1|s>yFtjHZ?Vs1kr~f_%HC5^;9bZv#pAsuBf`y}CcIFVdQ I&MBb@07a9M!vFvP delta 280 zcmV+z0q6df1Hb~1F@O3=L_t(oh3%CwPQ)+}00%@0S1X}BfR+zrYyQLw?iKtXMP8CL z{DB4`rN9l5;z&z@aypQ>vwcBV;3+M8ch;77p-}kmT%B{cZCmr+bNja2uf4o}@c8r| z9rxzkFrmNr{S99P$akdO;A;9n&v{; e3x&c4d;+ZnbrHRJ1}|s;0000u1tAPa~gx#pzvYeIGfxB0q~FZI%=j<^SBS*JJF=(B o{`xO?a1PXsGsVF$48!9*k9a#A^-pY07*qoM6N<$f|@619{>OV delta 289 zcmV++0p9+K0=xo{B!2;OQb$4nuFf3k0002?Nkl3#G z{of>wb&5tTqu0eYf+->W$y!nSSACVVzos|mXSS_c7N-EOVDwbo$f>flJ6Z)tnqJOwDfREhT< n%$(isC)#)Zf*K$Q!k_U8Sg0+ diff --git a/crafting-dead-core/src/main/resources/assets/craftingdead/textures/item/lp_scope.png b/crafting-dead-core/src/main/resources/assets/craftingdead/textures/item/lp_scope.png index 93173d3f8d8e42546825e63bb12d1d78598e1828..cd38ec4f812ca67e2dad7835cc6b384bcae5b378 100644 GIT binary patch delta 244 zcmV_+&qALGO`c}Nfq@{KM5&V;Qzr6KoA5$@b4^xm|j??lN^_MkAmyE zw(o7*P;1p*j3jEUm>AR9fnP_?_I(Ecq?Axf0Z9{30A5^u+-;dxlCW{B1SFAC0s!Qk zn;AdPIUkzt_lbxZUM`iO$BS7~FLri=U-iIQA`!XOWOkFc4TwnFY@&mvJB8%b@L>;l uobck;4C>m)r+>lI@4#d4Ll6W(@H0Nnms)}5Z$;Gr0000zD$!Rn0XJeh$QvC@Aqk%Fbu<~ zFDKWAx%tfBt7c{nVbU~?BIbe9H7MwVqc27kuJ;zc3OwIzxMwrv9d zv~7DB3AvCbqGY(%`qUq^j|{}kahz+k)``)QcAn>F1_JB4-j$R3JMAL_`LNPu&bj3I z^?H5AK)%#kd#V!=j4{ba*md3Ry}z8Nl)B9S+%31(!deRvX^03)DG(7vq{){9fH9`I z(w2?{3U44>94j|_@8O(7>B5*?`#u-3wR zkGifALV%PKecywbp_D>dmN3Q~+AhxCB!m!0?>**u-hA)vJpoI%DQIpN?lZ zt-ziWB8u~ODenBl%o_z#>4gx#Lh?umLI{|q2~E>r97j}DwQ+8(MccM;&V42a_KdD7 zq>2y`gb<%SKw_E?L(M%Tj53)_=Ii_b6Z?KjJm2);00000NkvXX Hu0mjfVQihA delta 274 zcmV+t0qy>T1FZs(B!2;OQb$4nuFf3k0002zNklToQ5Jq1SST<_PX*ehA zZhDCvgDtmUSF17@G3hESnpmg7c<<@^KB{*aE1;C3X@8o#0_(a0AR?PYEJZ&#%$SGl61#$1VC$jBbUi!GJE+3 YXs=>K*{&1)01E&B07*qoM6N<$f(RFRdH?_b diff --git a/crafting-dead-core/src/main/resources/assets/craftingdead/textures/item/m1911_magazine.png b/crafting-dead-core/src/main/resources/assets/craftingdead/textures/item/m1911_magazine.png index 51b50783910ce07d2dc61edb3c8a61c240b1a174..aedd7e3c104bfc07d29ff7713f1d19bae1475e70 100644 GIT binary patch delta 410 zcmV;L0cHNv0<;5=B!3BTNLh0L01FcU01FcV0GgZ_0004INklF{&~#6h=>m zXOsxRV$fQ_4T!C^OR#nWR+b`YBZyd9xEq(?7HmWZg$Of)I+MIT#Q#t8Jbi8sH{ZPk zzI^%Xh<{MSeNyk|!wWygM}U66&uBEF-EPzAbO7k}df@~rm46D|ZkJZ8g|(JE&%<_L zv)K?u5zaaCJf|oMZ-L0?&~mxta=BowMJdJm{SGT&jA6UoBBjJR7e0h>95b0rkWzBJ zUW4xecRU_3#-Nl!N{KOs!C>H3&+7>miv|1rp0X?{%krZs@DfOpgz&5+k_m=Q}f}$umpU<35 zCswOf&<;3&EX&yKcBE;FQp&pn!dKuwfAhY4`9u5ysS}2dFMUCC4gdfE07*qoM6N<$ Eg0J15Jo?Ti0!75g1b~o z4q#O294>N~biRa37uGRSE-7?_=mJ705M;K{E?6%7g9LJ5M~gyWUn8;0%shq}3GjG4 zf6T%*AlvV{B!3BTNLh0L01FcU01FcV0GgZ_0007GNklzks!XaFmaYcz<|w4sX?9>MbgjDo>6#csj9&YxEH35Rqam$kK$Q*TpZDh$N!Zi!n(? zZKOupX_GD)rq6o>rD0Cpj}b3kv!|FI(3(oMN;1Dh9>PTcKc zrGv{Y0%%{O^u`~&84IY5j9})Mh?^^*Jx<#0faCjaDI3AiGZ=AnWw- z${}JM$5MJlCnafYsxAal4pq4TM}u8!K` zmHQ(D`^P|m3OqU=er`E|A`aDd==ACHkMJ8zu@V`jCD%2n00000NkvXXu0mjf2cs+k delta 542 zcmV+(0^$9!1-Ar{B!2;OQb$4nuFf3k0005;NklgAz0a^3}o9~>;)@pODjA7n(dbeRthQY0zwQZ7!e84n5?^w?>%N1i{XtE^D(nY z>73?1-kmx3+?jJPn(d=dIK`FusN3av=>@!f^I>xV&Gu1Pzjq5;SZL`lxIjAEo8WuailD^a9GRh0>DQ4?n(3l1eXF zDtzy56%b6li_HZ9Ovei06e+vWqb35BY=LrR6t$dtZ~S$ZMh#>%VQsHO$rhOi4V0El z$12r?H`0iNQ>0`^9@uXjV+)J>4^Cqrn6t^5bIBH||9?M|0Ek>&KWI@A4gmdLCpO?O z=>bp?4)uc;0G|i17bavY0RW?6mwvAU%y(T84qE#3dmTo@E&%(Db%707*qoM6N<$g4x9Vr~m)} diff --git a/crafting-dead-core/src/main/resources/assets/craftingdead/textures/item/m9_magazine.png b/crafting-dead-core/src/main/resources/assets/craftingdead/textures/item/m9_magazine.png index 219d75920cec78468db3895e1f10d59cb8241ced..181565b54e589c8980dcb5e4fc96b9de179c7019 100644 GIT binary patch delta 323 zcmV-J0lfZ>0^S0UB!3BTNLh0L01FcU01FcV0GgZ_0003HNklL5hSh5Jg|g zBq$=d>hpMyK9?7CDF`a4#I}=OwajeOGwF>FvP|XY|EdtUxVX6ZGU|`&gxH$;!^1u% zMgaHw9cwMd7>c4`+cu0bv~8P4z#9>v?|YO|gb-(p#BB23BYz@z?*SOcF>M4|YrOY7 zpHD=DEX&dgIF9370LB=mX-XFXK%VC;%fjRFIHO4BKv|Y(t+Cbuutxm3>uJX&v}E0RT#=v<|#SuC8nLeP^EMv<@hxxZQ4e z?^)M1`t~snggmBcu+}mR1I{@_ggnoq-vS-;06FIfAz+LFU|E)AACmA7H7_o{%L_kS Vem{u1Q$GLz002ovPDHLkV1ia2kRAX4 delta 242 zcmVsvP{>S`T5!Fbr}}XK;C6p&G=wF*ZYlN4&+kK#LLdG>!2@BC1b@z%oFrrP#DB!~7V;oI zZefD!+e;+!b&F5;e1EkQ@bj%7MNr6eI+e@iBD>vADwT?~S}p1K`%S zGMmk$R;x+5T$VIVRSbDo77j8Rjby*y>l5-)sU*c>QQ|nZ6L2^jWIP^AE|*jCBuONj z&DsdSg5&Y1zJC`A1?>QxKn!_T77qI6STGz8)prCSB$LV52w)570G(JY7Se9FrO{}p z5b~}p9PVq#9Q1lUjZUXyFMux40jyvR^ZC4u0A>L4^?I$x2tf>_*&TrJbUMj)yHy)j ztCfnXR;xAwxPaaQI>0a@ia{jr%ECbjy#P9}TrOoW7=P$3An(e;LH+jR1cS&Xa1qJ7 zvT#sBzlH>saGv=vk#}X`pdEl1{~5%|WTF~o7o`H Ul0J=601E&B07*qoM6N<$f)&8)E&u=k delta 258 zcmV+d0sa2C1gip&F@NPrL_t(oh3(Wa4uUWg#_AYmKI9(6%kYFof1xG-oFT06-K)FYDp}>3gkb0}M@p%mSFw?*RI~ zUl$(-W}2f6H3jKzQA*Z=?k07*qo IM6N<$f{&7K;Q#;t diff --git a/crafting-dead-core/src/main/resources/assets/craftingdead/textures/item/mac10_magazine.png b/crafting-dead-core/src/main/resources/assets/craftingdead/textures/item/mac10_magazine.png index 87e3f59a14d9a3076841ae8cb2938f20bf6fb6ec..894ff5b1abe36427c4fa4cd5aa7fd20624931a59 100644 GIT binary patch delta 375 zcmV--0f_#K0+IueB!3BTNLh0L01FcU01FcV0GgZ_0003*NklF^=Of3`L(T zD@tM{DTBGg+#vVA!Iti~Ph!D}Epm#1g4tFZaGDTMN#XJ9izK|`m%}yY>8tMQTgmkg z@E7<1_i3wuzVf~%1umBhr4+_-WEciQ2#n*{q(Ik_`Qgn##*`~A+cEX_~Q1dwxP zU02q1MOC?8ueJbHg`6|aIYh)3AjZh!@xXhJbB?}m{!DEqT$Tmr93ccm#NGq7^7Hx3 zcDv$>L&A>h5Y z2iR;jlu{_A5O6}U_rOmjQcAXcV49|Xenct7R)NFefa>>D77=#4ovi}5+YMDkM4rbK zKtxbgRFxQ`{S#FAs|n3JVci3|u6x3m0@MjO&oePb`$kl&7ZGyK|7F5o--_SyjxVgN VpF-Q&Wx@ae002ovPDHLkV1nMAvF$#k)7>41`8W6JzJ;M)O zyll_WrJdS4)QdQ{#0YAfl$K8Y5)3VQmyqSp69@rPsT7%rxX1nGo|lumo{vsM95W|l z0d-w}9N09?*Ygw$u-2lgs%_u4Ej5P*XsyxrJ%(XGQ54WxQ)qJzEC2w?vV2>22e7ve z23Yff1OfQ;KY)3j;{w=zACP7AZyp8!0LGZO0H0_8`|5)M*2Zy+3&`_44!~LqV+^Kg p+V;BvM8qkj&~+VN*HkLSv;br~I)ph<+fo1k002ovPDHLkV1nj1XQ==H diff --git a/crafting-dead-core/src/main/resources/assets/craftingdead/textures/item/magnum_ammunition.png b/crafting-dead-core/src/main/resources/assets/craftingdead/textures/item/magnum_ammunition.png index dc1cb65c943a91b9bf08656201107818a42fe184..8de8728f2b68464f03543abd26b67b6c4be3735f 100644 GIT binary patch delta 320 zcmV-G0l)r^1lt0TB!3BTNLh0L04^f{04^f|c%?sf0003ENklDJXvaB&x0sS$ZtdhIf>RutsIASPA`0d}ppcOJH95Tn zEEbF9-*FW4^aFcpFQ$ie1OVtSCiR)i9sqDEcL0E3oFk570DnN5rlNgmTg{HNxF6Ju z^1d6mkMOCmu+E?ewt|we=jU6b9!f3rKbzrls9GDMV9pD}W z<6J7R==fy;ZUW+bd@5>i70Q!wB@Wy}2#WKspbhpl003rD^r8a^sg5yuug7GBP*Dgy z2d18I(W3*V0y(Pt0C&I}XxpC=V$==geSixHR3Z4#aG<##3-){e0*l3B`8rpwsb^nn SI5kNC0000C5F delta 500 zcmV5TD;OyMZMdD2Yvr}uD#@+n`C&m@K`v>gqA28?{xkzMMfwop= z8vbQEo${r6kvxA6Cb>hT;)~IHo`NTCo*iH-=g&2(kgb+$0 zQUjQ#S&G{p7p`8@u`Fw02+Oj#ylK&FHdXwW6KJ>F$xdU;X(3{B-}jXQWGc;|XGE_H zHyQ`DTCKUsecz|w?<*BC^Wn4*dCWoKDn2`RORozzYi;hjE>g<50%j?sa^gYHh!#yQ zrHmZMq0wky+b>^>uImIrz;HNB^;zj27eYjfuuCZ;+qUPZEHhs@K$c)x%t7&YoJA_; q@Qwt85K)$$f2dTi;X;K90sI4vq8Em8d`vq40000F;62q6oo&} zI5r|ogeYjKsHmcp2#FF=5Q&Okz;8hOA}S;bS|lV&DryR#NJLP=Xfk0K&)9d1714Xm zZr)?G&E`~Y?0b&S@x6v6mRRC%hidRF`9HOElWO+&_o?d|5r4sZ&u}>8`T6;mLUn@* zd3t)9ucIhJYyHo?>N^(5+1VNQ_xJzatQ1ic5kkOw&&|!vf3|uN0&;$S&S*4ZJRVb3 z6-80dYPHDo91)?@=^!F#tq~E5q99FE>bmCP;o+BcqDADtyu2`*&6rFk3tR;xuE$INCkoO7(NuTvBS z-(jH;Dy3LkTVpbrP?jZ|o118@xx2f=7=yKztE($Q2-I~A zKpe*l5m@L3Ha0d$)0F9Sic*T}>uZ!!?CtF#B7_h~l7EEb<6}-vPB6y&RHt<_1gfec zO;fbic<V!N!*|thGc@gmVsSEm~`|)^kE%4eR~={rj_^C<=hN1^$)7RrEXVhaA@f5#F_ cEYU1}0OxX7_BCiD%K!iX07*qoM6N<$f>qj2dH?_b delta 348 zcmV-i0i*uT1@{7wB!2;OQb$4nuFf3k0003oNklb>!47?UbwW^cX&U$O+ zzMw#dY<-O1P@xGRAd>(a?nHr6X_4w09bnj&W$}(Y5*Qd5cyv6qK86tX{~o+7OY>}% zz}M&7e!1QN0H^mE-g^LmbFS>kIm0SFwe6^&>cAo ziRYsab?_J?a?V8|J<~g1i!s7E2k*UFM%4qPoD_NQ@6ydnAnl1UHnVV;0j>%_QIt|D zN-0Pkyay_Q8bpG~(Zz#vqiUF}8@Xamf)lF)bAKE`%|Oqg+@R9G63iLkhe@@jHEAZa z(B%QC)>2t4fmOQ+NWtrFsJ&q+fw>KNe@o++)_XId&gu}tE;-yn+%k$)6Rzvp?D1M9 uA4--Cs06lc!!%8Q`d&ki5eEha9vi=svht;XA#D5r0000Ln;0M2L~+<;v^j%9fNfgC&8s)z}pgAmw%?%nlvAZi+QJT@6CPQ zob#SQrc9asyK-S0cjwKOrfLbqAtf#PhI;YlF)wCbO z_O-AL5g8vGx8Lrs+W=d5yrNMAhG>GI5GW{Q4ZtvrnfD#X0ibHyz3xR*%C*KIk%7M3 z_W-slb%5Svd4Ig9oVu<9;JPlpDaUar*BUCU+Mx!@hs{x^Wl=q{0SdqnpnKK`Iy(dY zoeW&rl=duuJm5uLWEjRw1^gC7v2sxtJGbq;u~YY)+xGW1^%Vf6niZIVn^OybUDGCU z3nuVTXq*hhkrua2i@?6pWFU@#z~n2{pFVfb8q*+tU4K)q`ndsPr|yM;=YcclV!&gC zFlzSa;X&ZkA@qMF^9i3%`=YOXSHtuz@Mk$-rXv*vj%8pn$4k4WJ-R$O0$^2^e+*5U zfgCUb@J%Gq{&6eapRm)ikfMMhuROI`HSLEaCcc2VyS6t<73(=|1rklfFEBD?%JjGT Z1U9X*%@AHXUZ?;7002ovPDHLkV1nsV?@|B& delta 518 zcmV+h0{Q*01fT?vB!2;OQb$4nuFf3k0005nNkl3-$!FeK}R8Hj# z1x{BdA(8<4mnkLToQJg*03d__5l_At2Vhc#ECu%W4-i6!p2z}397H9gRA`zOQc8r- zVQ;SlV+BI!pnuc?T2JpoF%_UxU%Y8rIOidRNIvI0s%km%8)Lv&0V1B%_%8xl_XVqJ z2_XcGF=^?DI2bDu5g`PsY6)vC7%S2kUc=-F9@cutw%JV9h1M_UzL~($x5KpMRkZ|T z1vb_~&{JxhdyI+run_=&l>O$1(2bhgtu4m9l=~X8FMnYOUHZl&obw|xk;w2cO<_`j z;noBFi<_oRKIc3b8<+9kgNX0szKZ}6A2lhrn+`mw5)Ts4zdnxQxnl1kptTt_i89*( zsbQmG?1$|@UEgod?_X$blC<89zej6r+WfkH+h1|Uj2WL7kK^R;N2bZe?^JG%heMIczh2P5=M_dr3q=R9HvtQoBk7K@jXn z);mx9Lqh`t0|NsCKgG;I5J5pO)GshKF%Sf~-~wZ{-J03j?thuvLuT*^TTt|4d%9}o zPDYIQ&uBXS3Mjr6s?^N4n$iIRG(#igmmn29*f7Q(gejiRMgmo4Y{}84%Hb^LyXz`D zjmrMizI$R0=9a$~BMNgV4N#l{Ftj(Z7eOC2=yz0L*ueH$DhNYf5C&k1-+8VAcGy2D zmLvBDcx%pbhJQ6;1yTbP;O$s{W`MB*_7h+^1rT#X$h}}*BUZp(!2jzZjvSE!KVpD4 z#zOxBh(iXvLBtBAOYGmAk_I@7NRzDNY%%=dz}ZCf{Z{nxEHd;dp3U|&|82yp~5=(+PUB4K~qK-LM&8+H=7%}3n aLF5DfDA+EP(`%6c0000(HM7 delta 376 zcmV-;0f+vI1fK(tFnJ?)HVph=VeoY82c^J=#0 zg!{gqD^ZJpfq$-62ui8c`c|Frc^spZA`HV+PJd+rW#9nYRlp_k^!X{= zKeRaLbgbcEF#~y1ERm-VkIwj7Ju~P}3c(?#1?E{rgdhk~YbEk@x4X|`@y_z?gUj2c zb!$@#lRe#a94m>U@JxZ>aH!kuHYdFvfR#j7Br=CE48xXEig_FZSZy{Fo0?pK zbrK@N&BY9fym3^3?Hzyui^#NN(4PRX;~ew)@`!)^^y3>vhqq8Kr(;*UojuGimj#EK zR?q*ko;2R4ViL!T~vPk6V>DaYeJWZPXxqJiS Wj}XS}R!*e=00005xh@6BR@>0UO>;KoXbE1;+k0z7zdGgQS~`HOX^hW+dHdMEQf+9)th z69B+_4*<|wW1i=))~!-NL}0Cj)*8+^Xsz2?z|2S~!CH$LBY)O)ZA(C@U!_w@AR@#V z+Y-o|dhfx^7olbZ^2UAN0|1(_N%)xUsh8bDMPp?U(w7^IY-lqyz&Y8yaA5Ru{>=u!gvzJKJQr3EsMBShpHr4=l; zVB5A!_TxCJLQhy^0W)8xH^#JYL6$uSFoe*SK#UP0auH~*05c$mdigqav$7-9|AtDzl_L`EdT%j07*qoM6N<$g4q$2Q~&?~ delta 296 zcmV+@0oVTV0>c83B!2;OQb$4nuFf3k0002}Nklb>!3`Kw90D>n+J`6YA zt9R&G8X&!bHyyxRr%qk$rGi1gpgPG(i!P#41W5HZ3K01}MM*%VQu*)fN;bcqPx1Ki zgtzxkJii<Xl06k@y1At8ETbrK2VQ00003WAAtg4`iv1c(;)Gq5}n8nl*$_n#%9|*vw{3V&1;*XwmG03zx@m>H@X z>LX$I{w&&BLrSRw8pgn~EHE?VoL|g1T!NHRc=0FzpQZ_|H2~<}%jFV^HAi>HDa4es6(Fq{Dq0TDq}K|~Odj|AgW zpsKjv@5niCzK}u^Ff+`o{}qjV8Tl`~G5&dd0gnK>VfFBfh5!Hn07*qoM6N<$f=!d0 Ag8%>k delta 307 zcmV-30nGmW0?q=EB!2;OQb$4nuFf3k00039Nkl1sx5JmsS0pZG#4>O$( zlUtq630q`F4sP_i5qR{z(8xfe(Kwh>ZG+4CB|m&T z0RUd#KJobcF6vn&Kt$OX^J9&f;l2NJ-}@Q?V+^ddSl1PO-+u!DmSqw3xT_KPO-f1p z&8`9(b`wY`A;x%|fEKlYb1qwJj}s_dPXO>ehW{>bD}9U+Aq3GIpcW{U^kw{{=~V(H zec80!eocCn05c<{1ZIXYW*a?CdO-LTJLmE+3|n0`*QN)ACvcsz>$;okQpDCol*e)0 z>JS2^X;S}H#VmKgdw-hed8=#ES3yLXi1IPJHyVu{`2u$&dlIlTB;5c2002ovPDHLk FV1oGBhg|>w diff --git a/crafting-dead-core/src/main/resources/assets/craftingdead/textures/item/mpt55_magazine.png b/crafting-dead-core/src/main/resources/assets/craftingdead/textures/item/mpt55_magazine.png index 896f0c6ed41030dbf46a222d95891f2c7df7084e..de47f11dee0065f3afaccb5ab910f755fbe1591e 100644 GIT binary patch delta 349 zcmV-j0iyn#1NZ`vB!32COGiWi{{a60|De66lK=n!32;bRa{vGf6951U69E94oEQKA z00(qQO+^Rc2?`StF>eOmkpKVz1xZ9fR9M69mBDI+Fc5~n?yM9F3q8~~h=SMp{*Pd< zg8By1CrA_bQf*w^L!zda{1C)}B%d?CGmw;&bc|kppK|s^7k{7xZooS*ZLA=29{_XY znb!aSlu~3_wglU@-IY=w{cHuxvWx}*@a4W}t+CbyLxcc)0_1rPuqs7}uAv*paa=Mm z3`5is{JRGLsOx%Ff|wovplKQaj4_BvG!IOV#_PIncWd>ow=sXsu&Sy(oz)*;{$j25 zGl=su;5H!_1Xg%Edl*eKgoteQfDhpNRDd}HBC>eFG2+E{BnNxIl~QVzp=cf`iUMnG v+~07PF^0bHAH%OvOnBgV#|)#Sq&>O=e*RPcJJ$e+00000NkvXXu0mjf61I~; delta 385 zcmV-{0e=4Y0-OVoB!2;OQb$4nuFf3k00042NklcQmr~Ny!PJ819VEsrlM|gC&v-L~S?#c diff --git a/crafting-dead-core/src/main/resources/assets/craftingdead/textures/item/p250_magazine.png b/crafting-dead-core/src/main/resources/assets/craftingdead/textures/item/p250_magazine.png index 1eb08944393a10e870949f87754a866531ed3504..2b22f6836bea786d76db043efd18197498af7d28 100644 GIT binary patch delta 184 zcmV;p07w6h0@MMJB!3BTNLh0L01FcU01FcV0GgZ_0001nNkl6Poh?EjYqP4as0?+MbKn7$$2CN3=BHCsk=Zp}-k};ibUPeQ`Hv-cDz4s-} mT?WPwUR;lG;kOn-?BfCdxm&w=ULPv}0000LPNtPxTAOQ zESl(HXeL%xR@=A@Q(%S7vc=4zn<%d$grApTW&k>!&c8EAH(W30>>mdJ!0rCT@#GO> z6rZCK2q9!+%xs>SK}0Hvy=1X52F|(J{4`CPyX67}YwdfSQfpFQ4gkAVyBi=9VCHQF zh-j$2w{s35g#2-V8YLfU)$tX9wTJ~;=Yd#&h=y?-w-Z=G8<}PT-g{LgG)+QHC8%04 sGp}yJYJu`2)*6x~57ZIpbUHu73p^x0R}JeTe*gdg07*qoM6N<$g08Y;Q2+n{ diff --git a/crafting-dead-core/src/main/resources/assets/craftingdead/textures/item/p90_magazine.png b/crafting-dead-core/src/main/resources/assets/craftingdead/textures/item/p90_magazine.png index 711f19d91764d9256d5a47cd0c23a842efe89e3c..fd0adcd1e4da3413c1223a14cdf1d6cad557650f 100644 GIT binary patch literal 169 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9GG!XV7ZFl&wkP%zrl z#WBR*cMmu)wFjSEA;7LnpeEH+YM`hp z$cr=Ei(5Af*y|s@IlF(ur`5mH7VlCxc~@e2QcjIiqC=KMUlSuM!wUxGNas@4y+CUi NJYD@<);T3K0RRrnGLZlP literal 249 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}n>}3|Ln2y} z6C_v{Cy4Yk1sZUHLu6p*T;7TeSi5mUF6?%{dkGIdwV#yPiKvs z)IEFl!{eKUdFIIE@Z7KebI99Ra6KeF?|dFDz~loS&4%01{>TFXzzof4a!wo14=E-=rK`Ix$M&=r8MY57HAHyj!*~ o6!#Sw85k5?I=C9mdKI;Vst07!ad5C8xG diff --git a/crafting-dead-core/src/main/resources/assets/craftingdead/textures/item/red_dot_sight.png b/crafting-dead-core/src/main/resources/assets/craftingdead/textures/item/red_dot_sight.png index 34fb1d5167a614461e4fb0cb2ecbf6540258462c..d2a8f1ed9ccef1c3313f3ba2b11d4c751a802d1c 100644 GIT binary patch delta 489 zcmV0|RL(5H8?&N#--rYIC%U<^1 zjT(IXVEj|2nw*o#B%YVcWhV@XCTFkLLzZPQ#&jk@BLE^oo`2_^_CO;5Yb}_$QxJ^+ zwALt!0wIK72f&NP0_XD?M1=Kv{re1*`rlPgT>z*ZLm|XZ@8&i;s1`t$Ws!-N7t==x zLkLLI6d?p04hIM!kYyP*o6YwOBuN5h{t5ub<1vgeAR?q`itTn=0XUsbvD@w92k$+! z)^N^&ncGQVt$#(H=jiwQpDJIiR<)GRW-}a*$BIKr3GY3ebDs*T1uz&4-UF1vd_J%A zL^+y71f>+N*K15rw>9%Thm^8?6OKkBBuN4y!hXN6AZKQT5Kt6Fg;FVHoEm0^wH88% z7^9SG4?rn};c$r4=@hjqt1i!FvdiTX8&(KW0pgs4)?&KScx|3n?qKBUp*?W_6a%Pe z>%E8f9?T4-6qp&_djP=gb}OfXezb`0lNw{d%u!1siU~h1t*^%RnLi@#it>jTcyj-D f(LXPH*&ntyXNB%YO^@w$00000NkvXXu0mjfV4~O! delta 348 zcmV-i0i*td1or}vB!2;OQb$4nuFf3k0003oNkl##hV)^elCIe$k0zeQ1sH)27 z_gg-;jFeKGPN!$(-WISd3jlx+@*V-N!YIIX-S-N36< z>iSe8E1IUc`<*uhjN^!Tp0&Xh%d(sUtIFwU+g7{(umVlfAkTBzwk=%Oh41@Ub|D1P zG?h^l-Psg`5Mxto1*kxmr%94T8{jhOx~@hMrhQ`t2qBo~`NxB(@B6DY=UnS&obg$f zNyl;Ec^-i8QdJ8fj0t_;Kc7+v0nWL$>2?dag)t_FVKCamFhpI~haat79~4C)yRLia u7soNmvOFYW*BqFp$=F1gPw5!0000b^d1L6dbFn<69XF*Lt006O%3;baP00009a7bBm001r`001r`0jlENk^lez z7<5HgbW?9;ba!ELWdLwtX>N2bZe?^JG%heMIczh2P5=M_(@8`@R9HvtmD#EyK@ddm zhlneVK~S1q%ED>@k8ke;X(o z`F7ZTzqiq7^f>|N^Vx>O;pYV0?{^!I$Nxltl3KZ3wo<8-d_M?&bl@9q%V93u@pij8 z4~K)F@nA5p&1Pe}-Oje#ZIUo`1ilVuvzf+2GXF3t&8~!x`Tz@idxdhO@cDwC?F%kA&uct&w zu^5NHC?5o79sy1iqvbmD$i-seYxqO~u>%qjsp9zL-hqCx>jNZ(%-`D^rPMr9!P)eDf&sX#N{ce;}=4c)N zD6wr@e0;sx^}_{(VQ3qNVfc6fZQG*nd%OM<0j{@so_oCBI)8yJ-Yx-LpsK3Hc%J8; z*4oB-y@%)angx_nh70)qR38xm0Foqu)*4;c0RV&$2!a56c&><-t>#e_frvmvh@!|A zuBr+_5Llkue2eGWGZDZ?>H9v22u;)2T+=ilB3o?9f@^sb0a=!rx~}aG0ALt~$p^sh zsIF@WAs~dnwST-U%gjsw`^l=;FwS*dcbGR5@GMvXLI@j_QmzulIkw;kk1@Ft<2m4~ z9HS@-?-m~5Sis)!)Q(k4DJKoaJ|5-GP5=PXG&MXhYY&Q)5@lI>_uwtQ(P^3* xU_RBnGq=bsyw#t?xFBP#@x6E_PMmlOE)WVWOegud!VCZa002ovPDHLkV1ft3yn_G$ diff --git a/crafting-dead-core/src/main/resources/assets/craftingdead/textures/item/rpk_magazine.png b/crafting-dead-core/src/main/resources/assets/craftingdead/textures/item/rpk_magazine.png index 3c8a1edafbf3a612f3fcdb44b74504657eda83dd..b5279a553b563dae09a7b45ac97028379afa0b9d 100644 GIT binary patch delta 358 zcmV-s0h#{N0)YdNB!2{FK}|sb0I`n?{9y$E000SaNLh0L04^Z_04^Z`2V4CA0000O zbVXQnQ*UN;cVTj60B~VxZgehgWpp4kE-)@RY%_jN00030Nkl;E$KLfxzHGel{I%E@yXx23nAjX(N z2r|-G&)bUb0NA!|H`epEqR{~By1oNo$}2!{c>{j{80&dk(I5cn7GJ=009QD42LR@# z_YVyKkRXK5xB&_2zJ90^fB}2B`wxh+0u<-=E_v+;N2t4d$OC|(4CkD7cMll>q$oQ+ zhO>KjIMe`OF<&WM3#Nl8di;oWn zyuCi-=Hm_k@bXUFKi#71x}>|+0++s}3W!EPODi$?NqM$ooxtg5P{ zbR7Yb7{~G3{Jr;C^Dh!`&c(W}0i4gjbPtMNV6F7o0&Azw768^wpCzzG`ecE*`7*tT zsM043ki;+y05J4_z9m`aP18gX!F;sovjvtSB+>W1N?>Pa=Mxywtz1!mdG7!K002ov JPDHLkV1jWgmP-Ht diff --git a/crafting-dead-core/src/main/resources/assets/craftingdead/textures/item/sporter22_magazine.png b/crafting-dead-core/src/main/resources/assets/craftingdead/textures/item/sporter22_magazine.png index 6bfe13e23a6bfb384597cad2de424ba8e7dac958..32d95590e04f64a015ff8d3f82eaa57f0728d9f7 100644 GIT binary patch delta 334 zcmV-U0kQts0`&rrFn<69XF*Lt006O%3;baP00009a7bBm001r`001r`0jlENk^lez z8gxZibW?9;ba!ELWdKlNX>N2bPDNB8b~7$DE-^4L^m3s90087kL_t(oN9~f)4TCTc zL)nA<#Vky~I8;v0kweK9;Sc!8ldRGt^}D8>27|#MW1i&Bct)^}eG8HFQe^o3pSpoMfP!_N zv0zD(W`N`MBNi;_q=+DY;s%Q3-}NIFS|n-Yy?;MrAw?{%V#@KJ#2NiuG~Fahij3co za)o<1OEF^+B}Y|?9Iu?uI7g|*B1(Q_d=>Gj9I=R!Dq~ItXrvm8C~4#eaVkeFqC{ny gM%2q-@N%Z<11IL^ncH=kx&QzG07*qoM6N<$f;%OT9RL6T delta 306 zcmV-20nPsP0@(tPFn<9PNkl*B-n6#($^`i94+2IDyH z);(pw7!!pM-}Z?Jec$iWzCU9?2mvW2s;UAJ0RTb>NgBl&1AhQemgTk%A%K~0W58M) zrIbIOt*`N`27r(3l~P+kW`_4ZN#l?KYi+FS`qSR}_s+T91$fv15g~*Cr4*cV0FGsU z$bc~>Hchh?TTv8;vrjg#1`i=@t+!Ub_ddA;fP^`qwT{e;b?|%*zAOudVMrcq$rp?< zk(oh6XxkP5Fe}e9rfE7o)|0thE>UY8Zyq?4$z=W&?`P$Vg2VUq!vFvP07*qoM6N<$ Ef)SpLQ~&?~ diff --git a/crafting-dead-core/src/main/resources/assets/craftingdead/textures/item/stanag_20_round_magazine.png b/crafting-dead-core/src/main/resources/assets/craftingdead/textures/item/stanag_20_round_magazine.png index 8b99b6b33f23ae5b4f04f101673cbe987366f1c9..5f4cc10b9d7ba57e7307e795c142bd90f639f0e6 100644 GIT binary patch delta 527 zcmV+q0`UF30;mL#B!32COGiWi{{a60|De66lK=n!32;bRa{vG?BLDy{BLR4&KXw2B z00(qQO+^Ra1RMh-HvH#++W-IowMj%lR9M69mO+lR|(!t2tkOIWq-+-7V*O-{e?Ww0az>+ z0Nn3)0FK9_A7}mz1pL}hCKCXr(`gF<&y3HVXSwn72vnI@H;JOC^WVI2`5q)1@cBrF zA|k(&ec5x02z}FC353Sxc}`Ijq-ok(KcCMZ_W2AA*>v7+x1G-W{l4C)xv>y}*=&X} z1}P=C+YNxtW`9%r91e$JBosm*guobsF{YJJC^|`!kY(BHIRId-MJa{W8e`1&lu&EU zd_D)L;q;m9qY%e2Ns_cmP!t79si1^jq62A~l4TiE%3%mZQB=SCvAbR`0u`j|^}5rc zV)0iAb(L%o2dV?&IPPV9rGiz*>=7XVuGi~pdx27l<$rQnYd|GJyWLKNYCtOiYc1AV zoO3wmT6`Fy0guO{?x-Q9`+Fv$)9Li|CeIRZFal!}5Fjecl910=%n$;GXvwG?@Co=k z$MO(!&eg=zT92E+YPCuME|*Ku6;Mq)ed45)dL05^&3aAc`%}&Azx{rD1LlqIeaS7G REdT%j00>D%PDHLkV1nNl?`Hr2 delta 289 zcmV++0p9+o1iS)}B!2;OQb$4nuFf3k0002?NklX-oXQK2QEa|SYdoInvgh@Zgm1o)P%mG#@KHvFX`jU`wImkk$-0qvN_Llw-LwT z`Fye19Zp_7S0OLYvJAj_sO`5`?>_7aXsz9|dQlXgnE(JNrGFrV01-h-2_o|Du?!Iq zLWFD&7wC~vepes_mVnmUDWw1a)>;4n5qTd#wg52Z-?lBcMVP=`umrlU8`k{+ysy1g zAWc)3Bnf~q|GKVGRTb-}#+txf`LhLjLcV{tfH7uLZ7N=O!K?h6reR-d-V>NJf0n@9 nctv20L0Og$wHiny^3&V^+V4|d?{Ky500000NkvXXu0mjfX+(f} diff --git a/crafting-dead-core/src/main/resources/assets/craftingdead/textures/item/stanag_30_round_magazine.png b/crafting-dead-core/src/main/resources/assets/craftingdead/textures/item/stanag_30_round_magazine.png index 85e65d4a31ac9a0a7a34d6ebd1e9ac0fd4502f13..65caf9b7dda0719fbd851be53daabc8ae2307931 100644 GIT binary patch delta 237 zcmVK@Ni;5Jmrh z%B;AKN8rpJ!5bk6cGEQNvIA<`%um>`_<0##06?RW<#?{Zt~5JlfcDQqe29>6WM zzD=q$>2ilX0C(U*v`|86MTvxz!qAb*>`F-_JoYA9gY7z4mO&j2{*q6RPt0M7Z3<0!6iyAe#&v_6Lcy!5UL zP?qIV6a{e3zwdk6wvGO=i93)Z|0IAQ>G@9r@ZN9owkY~8_$mKk7(^GFr~|q37X#!} zG{9xnVF0E1Lo(zH%Z}nO5Jive zJe*{S1c()D7JLm7f*)kVKkzqf!C8b6w&U3}5%fcCAg$4~xKb2Fc2d`;DrLhHpGS=r+P3t6~aQ00000NkvXXu0mjfxc1~; delta 347 zcmV-h0i^zy1oi@uB!2;OQb$4nuFf3k0003nNkl;^_ zxOOuK=rwwnIY6Ncui)AX^Z;E17ecp!CIsTlYKDPU-!nQCivLQ(^SzJ%y_f*IcKxv) zsDPpp;^qbb=_l!iIp5ElAUp zOro`h5F!YKH3QVpDW!rz*xQf;7y`oDhD$)4b5KelNfKzS(YEdEK+gh<7R)J9M z+th&&-4%f2-cjD^m;u2JkNW`IgSHB6h-8D{`w{? zih^ddi4X$M^M7z%x6H+HjOTecj)QI6oKC0L8_+b3>-9>z-7aHc7y>+O==(l~VZ477 z7e#@l{kh`rCI1_LsR1b^mSsJh{(L_FGl;s~ZdsX^8qjr}AP8tQ8cZe=R;$%RemowN zrYV=p}TAQ9Kw7$g&K>Fi=XBLrE!xX_{=e+e+Hn6AwVWL9?djb9@1L WO}ybgazC&D00000Wbdg1L^~iB!2;OQb$4nuFf3k0004`Nkl7xV6on5~As`WqkQitO zZzux~)Ui*|jrT-s84*&Y#3(q@mD0)72?@S&s&?T>8Dihu^Vv840iJs5pEU~kXuI83 zAMamydyP?4pIEI{*zfl^9*@2A1pz3fswj$TZDm;^P1D}_UVlOWqA0?0xxBp_V?xq| z1C(WXXKdU41mJSHu-Z84RWqej1prdY*8VKZ0HD{uz@7o6RJGgf002bP8nfAKY+uEN zU;$WjB7)Z18=oWz8^RmVWxigoYjNlEx%M8%F%E}=w;T^U+sv(Tp69jL#bNEiG=FazTjhBUB0?O;tTI`Nt`4PCl_W{8WUlOwDy6)wo?ZY=JsQ2Mq9`yP zkGX0206ujs%|QU%q@m_s09RcH&Jc4ifV;M})|gBtAfnoHmrw{?uh-!KX_}7g-abTG zmOb1Dyd`i?IjuE>5D?=2Gu!Tto^wxNZN*Yb%;$3eKS?#8&1SW@=Cm7QyrX9UxDeCn zloQT2X9Ktp06IbJlyl8{0ays&cP}Ktx8k<;kX!Ln|E_NUjq}&^!0000zf0>-9K}CP zY<{SPIt4+x8PGw<>Qb7-ru3h6(IF@bQJi!W2N61^Q+m_T5J>2Ki%)pNd#1k}9zAf! z`~4oy`F_v6u*DWzY*8Qb^Q;w(y3Km(q1zq?Gu+&+F?e zs;V-Z&B*h7<(a561C6`8JF2SU@$r$9lM}KmV}E}i(=_pYeysj7;bo12AeF5{gHf`F>3 za9x+Tw>JRB<1vO|aD9EfP~ByRNBX{xq9}Nt$Mf?unx>KGIb~ULb#+y{_9}@cd%YgJ zySr$bhGkjIW;28k?Ck7td3jl@zOu>+|MtEtON0=ps(*@QSr~>b4H^P2L}fTA-+{&9RvUxQ52D786O`X*tX4N zGU4#>kR(aiv;towo}Qj)x7)nGzvDO#aU9d>bT+mH|9m^9(07*qoM6N<$f<=W0ivR!s delta 210 zcmV;@04@K+1nvQlB!2;OQb$4nuFf3k0001}NklbD`JmsC}d#J=wU(BfIIdXi98A%1h6D2m!}&bnDCkN+}@u z5ziutVHn!lYHki7B1kE<^*D~Fo4?nml(20ZmSr*D!0o@lIp>^v0xoG$F-Bv!@Bjb+ M07*qoM6N<$f|X8TApigX diff --git a/crafting-dead-core/src/main/resources/assets/craftingdead/textures/item/tactical_grip.png b/crafting-dead-core/src/main/resources/assets/craftingdead/textures/item/tactical_grip.png index 559e776ba62be5c9bb1764ff8c8f0fb4ad537fee..8481f9575ae39d579889dc11d63e3b18b35f8cae 100644 GIT binary patch delta 555 zcmV+`0@VH20>lK6B!3BTNLh0L04^f{04^f|c%?sf0005@NklO>(0!5JsOQ z%dqf{T)uWRdbgbBA2Ri+Ev|3p+MR0r>$zYc>;VJQLd!W`^1LtD+Ev)cqR1 zRte5J>#W1_KV2NSpL+M>oL{7l0o>l+(lia$TJG-dzC=HrPJi3+_qCtq8XOCvwZ=I| zRaM;F+#n)otpUjMoG6Oe?RM?_vMjl{xWE{Lh>)f!Q4}2o9h|B}DaGUCBg5ek?>!=d za}Mu4P18`+x|D`;tOLu%2?CtHX^@1_x zsM$Ju;E<9eAx%@PwRrCt47!Etv}(KEQWOPQmN6QQSglrAYx@I8l7yltP)hOg^3oc! zH-M&T&{`uR42MH5FE7zrGn>u&0f^&xui{g^{?`Gjs(&KOGDM`^F?$8b^Ss?5ffl4U zfc1Kf_a3DbRaGG(1VPXrfQV3*WoyF8WI`B*JUl$~18{Y9h4-HK_jk0`ovZ(&olq&o z)6)|{5b*r`+%Ldxw?jnOY&LlB`|pCqVu5pxAPCy?LDx>`1mK**IoDPm$1%njmdj;- tCj0==S|n2xMdx48={)ccVxIN?^bNLc0Ch0=Colj2002ovPDHLkV1kz33%LLQ delta 316 zcmV-C0mJ^p1lIzPB!2;OQb$4nuFf3k0003INkl2zdcDt==i=yx~&N%?AwVTt!&MR0b%W_^~tu-RDni8OGTaqN9 z?|YxyYyM>ck5pAPFH1p=5Cu?o0(Al*kO?Z)=?FT2K#dxmL5Ij$ ze7BsyMIh}Yf0Mr+FOxK$RUpyA2V;!?)6RPF>2$1P{edOFSuEo?3SaMDjL6%wEX$G| zBEv9*$o1)#*X5QE$Y(AQ=ZTT)%Q@x_VL~nu;(-vo13yB(c7FjQL0m>smZkn86T%pW z@?n4wP*s)meQ!dNnTM?FD%-aC0*FW<=@X-zc?f}W0@}6>u^{*iAoD!OF}MKqAtb;; z5Wq2b0|KJ1>ktb;K#K6b4`DnhMv-mfH=600000NkvXXu0mjfR-~Xz delta 327 zcmV-N0l5D20^tIXBYyw^b5ch_0Itp)=>Px$8%ab#R9J=Wl`&4kFcgMAP?rofLkC9? zMO>g`PLS0{;2NBQflF|NtehZX>J6e4*#k&5Ll#S6K&ezwL7yqg;&1a){QL8ZY(pZE zNJLQA^>|9{6fUF_j4`8gjRs2NwWetrQKsl)W6U@V1AhSCd$iU7IOkAG0gz>x zNMa!o7>0qq?*S-^f=Naxbx@Ze5|}9NSLD}M`>}ns6s+hU-o#l^0`_r-W%oU7A&(Qy zxVzb)*GnLvmxsUEeS94P_rBp-ka;N)_zy%Kc-pS9FZO7wLkIxm`7H=~Fnb5iDlm0n zHh~z@>-uqwgdhfkRK>Qq6RrTY$-?ptdGm%Kl Z$|s>rUPl2mGpYap002ovPDHLkV1mlVkzN1* diff --git a/crafting-dead-core/src/main/resources/assets/craftingdead/textures/item/trench_gun_shells.png b/crafting-dead-core/src/main/resources/assets/craftingdead/textures/item/trench_gun_shells.png index e5ddc43ef23daa9368bd1d44fb5f3e0e40fae250..ae0096dae05310dea23babb85e95b1d6f9ae36a8 100644 GIT binary patch delta 438 zcmV;n0ZIO%1JDDIB!3BTNLh0L01FcU01FcV0GgZ_0004kNkl%}&BV6h_Zb zjFAMw#+6G$d=%EMOng#Z>T7^up{WZrB4`OXZCwmEo#`*M7&pC119S6r&dJQs0&TU` z)<2gzFdrXb4yU?@Lgyp%xrku&)LgK;4_Kh*69|Ei5T1Yb7JrP(L^@@5GFb?`h331j z;Z-NI&PV2&T)NrW){LcJYYTQvd<~1;Ac#yqv@-UJNLBV9el0LcreZa(}GRj1#ucW7=wO* zNizKtWHy0$?Rba-_KX?lSY(oL2 zFL2U@vr|`Yy~zs7Jhjh&QZ5wW>NcCPfwmwd{aOOkmoI#%wV!bsn9fSS_93ju7iEtA g$EB^d+WNEl1?Irj((i4EX#fBK07*qoM6N<$f}cId!TIcxpwdc#7PRSU3{88fgqVmp>tor$7iX@551vcRTj(_d44#LR#Ql9XsH)9=y zOoo0WCo_RGaLA|ymT8DluY+T|T5u(Sq*rX2hG@302$$~+x-Bg@B(y+Yt7E&oJS`$? zEz=N<#v$|h7mH7yo5$!{Wr59}R;mX|61wnMfs5Ok*sqp3X&wV8Nu){aVZR{}`v@mP zzqAfQrrr!dX@9cGsMI71Y?E+omr<{SWg3wH)ja?jgGjbx&}{)wuAJhzuUy{0{WwGS z@oM#Q+^>uJQ4RU!;^2_eD3%ggz*7lqOIkQ&unTtC1F+)_Z0-SoyXOxr_|5`SBJCc? mES71AabIol6e;rO@(tb<4%BAe6@dT%002ovPDHLkU;%;))3^}; diff --git a/crafting-dead-core/src/main/resources/assets/craftingdead/textures/item/vector_magazine.png b/crafting-dead-core/src/main/resources/assets/craftingdead/textures/item/vector_magazine.png index 1b8414ce179e40e08c79d81974c810719f28a540..c7c050862fe0a3eefc68f0397c0471ba2907378a 100644 GIT binary patch delta 333 zcmV-T0kZz^0q6pdB!3BTNLh0L01FcU01FcV0GgZ_0003RNklv2Md47=%CL zVtcS9_Z`xg$(|(--#v*X2S*7q0sbyk)fq=vRecg8aNOOG4mND~?BH-#?Ukk-g_R8M}7t7dB$3cQi{5+ z*O`KqESo9Ahx1rr`C*Q^7_sUku f#34c delta 212 zcmV;_04x9K0`LKlB!2;OQb$4nuFf3k00020NklSRFwxQ*a0n_Zd&6X_wcEtlxHDKezk*2yUZ4QL^Y7Vc8?Tr1ynh_g?oXU<2h>_s zYpI%Y&NIoknuwsawtBst20#)a1WoH0006`omvQf14cMwX2TjER4sd`29AE}m-hm+i zYaF2d4_NQs1Q3z0YCi*zL`rFyTTWv&pp-IOH#Gr71SBy{(?{Lo(c}e5O)+2(e_MqB O0000*_bin`tDRD^9pdw)yioo!)J|HMAl$NR} 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 Wlqr7(dG3`>N{;rfb~kKziT?)vBZ?yc diff --git a/crafting-dead-core/src/main/resources/assets/minecraft/textures/gui/container/generic_54.png b/crafting-dead-core/src/main/resources/assets/minecraft/textures/gui/container/generic_54.png index 822bd8a8ad6beb37cf4fbae44f0ee0a5995c2ac8..5f34ade81c48b95fef18cefd4de9e59bf923b69e 100644 GIT binary patch literal 1775 zcmd^Ae@qis9DjH8+T(y)q!b3X(83tVL_poRM8GRB1vYAtx-#U~f*Hh(ah+mt13bzA z5hw&qKxL*04xumt+XA@FaNw|JOQ2hZP7pb)o5>a<(Lul=?j4W?$Nt+N`(u~9?|tvR zm-o5v_w)IFUzJv~*M;yR001uWak2XWK%k2NTnt}n@3+4VfVeL{R;??XxIdMc;Flz? zcq?3G#3K!xZbqwo57n!$*FULqclcg=A@N(w!{wqeNsjG@uWcVUHd#I#yL@}9_+EO) zo&?3{A0>l&m+PU<)`Z95jcmvup#Y9uf$aTbonBpy_|$NK8wt0?=2n=Y8ga zQ9{^t?I`l@E9Y*`%|AAl?SMyM81rWsQXQAa3|whEkIj-1xr@IoXxL?sB4ai99! zUWg&XQR%2oipUk*kDDGW#YE(b$d+jaXMr$qPzlz#Ma7PA;v=|33oCy)-vox5lCsYD zgGwDkiU|)k+d`QfB#!)}?G^qdO}nI{ExxRAA9&9)WbmukgSs{<1KEnEwhZ^;x!$&U zxhan>qs8frGwRBUtuQnjPr(#;kr19Pv%~0e84|`zZZM%lOxos<-j zZNLW-_!G~X8r05vV%-@)+QC!K@@>GXGmsML=2a~DvWRcMG_6B@z2qxiK)5=lQp3+VaHYSLYI+QzcVFyTSY1tZ9 z`EF#OLu{?3Gmwb0cM7o{Jl8;2ea(6FWHQxPwQKC?pmdcy^VN=-@p zuNYrXn6A(>DD%3z)xay)ux9=XN_)U*OD|+gzEVF81r(`R+$GeD8&Y%P*mu(~aa#B( zGN&%ysjG(i!FFS54a5FwsG|1KOl;ee#Q@cckIgp9;6b`(5CM57&NvFiRbdoF=qps$ zC%Cx;S-3n$z0BZdGf2~w+M{JCbHLs7(oh4&f0jTt87l~`V4Uj40zhq*KxEj8kY4;J zA^lCrYs!6dgK|sqBQ-808o2O(kUIrn#>Y3MUCEjdMS9k&=5D5 xbR$ZSrlg>PDAS4;^$qO)+S4ch?Q`wRMPNDH^-ga}YY)80K>Vwk*zV{o7}bQv{`nRO)<-ZJQ=CBuE z*)u%+hazI#ta^y1W+Gyk2DoRM;o&QTYx{`a;l4TnEZbkg<96ls#bC{ za09RMp`?D9L8V92^+2-jpdK&>H@2y1A(?7)R~tP&K$m!(b1ju1v=1>lIu6n<$R2~` zZ>_X!F;hp}R?8QRz69RJ?k;5_v0BCD1E;#Q4*eNXBUsJuJXOjF2Q;}7`j7rk`5>3ixq3x!BVCh)8g}9 z_NI{8)2kaxCwiSE4;(i&NS0)sP%PiZxm>011(Cy;wuT_XHNllKcQ8jBNefqeCV^jG zN*{zsY+*rQ1#w*Kc$4xyE?Uj*Bu3?$1m=Wvsf-TOgKk=wtL*otP?c4nYnPcB#w75S zIq3-9EdIk9?h0ufRfQ|QON`Vs1ZPXJV&8mvH{Xrb76!gkrIM@tN}pLj&fU~>VWK53 zVtaCEl^7<+HK3U)C$3a0m|RKERv-SGNA#sfe|Ay3zBFN zVV?K{5;Ag8a?ecZ+GoD?XJhysI9IF`G*(h7FK3Ps&qVSAiOxzYIuS0G2R)H3kQ$Ew z;rqW1>2d!9^*Es>#Mn4Rebm&QkGwYQOyo#0U)+pM|5@899aWc&f5P>W)IW*!yd9E^P5!9D)w2F%2tB*2*B0?QjKD9*=25vLH zX>s50YP-QdWE5=dAm4qMdr1*ZJofX}YW+@laJsPhWEnYdQs9g2G~FuwsFa&1;WQh- zxutV_PT4%Jd@o*f^u^G*6*@%5dHCs)lB-xKRJg{>xBe@wr>bL11I)k!gbvvrE!Zk0 z81&Ld1X{D;&}kMC90Hx-vk8&# X`}TgE)Y7*MT{w_uE66^UY2W$}ywn&Y diff --git a/crafting-dead-core/src/main/resources/craftingdead.mixins.json b/crafting-dead-core/src/main/resources/craftingdead.mixins.json index b79eecbd7..87c166551 100644 --- a/crafting-dead-core/src/main/resources/craftingdead.mixins.json +++ b/crafting-dead-core/src/main/resources/craftingdead.mixins.json @@ -5,6 +5,7 @@ "minVersion": "0.8", "refmap": "craftingdead.refmap.json", "mixins": [ + "AbstractContainerMenuMixin", "EntityMixin", "ItemEntityMixin", "ExplosionMixin", @@ -18,6 +19,7 @@ "ModelBakeryMixin", "MouseHandlerMixin", "KeyboardHandlerMixin", + "InventoryMixin", "PlayerRendererMixin" ], "injectors": { diff --git a/crafting-dead-survival/src/main/java/com/craftingdead/survival/world/action/SurvivalActionTypes.java b/crafting-dead-survival/src/main/java/com/craftingdead/survival/world/action/SurvivalActionTypes.java index 7dd96ba35..d723f1539 100644 --- a/crafting-dead-survival/src/main/java/com/craftingdead/survival/world/action/SurvivalActionTypes.java +++ b/crafting-dead-survival/src/main/java/com/craftingdead/survival/world/action/SurvivalActionTypes.java @@ -33,6 +33,7 @@ import net.minecraft.world.damagesource.DamageSource; import net.minecraft.world.effect.MobEffectInstance; import net.minecraft.world.entity.monster.Zombie; +import net.minecraft.world.level.block.Blocks; import net.minecraftforge.registries.DeferredRegister; import net.minecraftforge.registries.RegistryObject; @@ -88,7 +89,7 @@ public class SurvivalActionTypes { .durationSeconds(3) .forFluid(FluidTags.WATER) .forItem(SurvivalItems.EMPTY_WATER_CANTEEN) - .finishSound(SoundEvents.BOTTLE_FILL) + .finishSound(SoundEvents.BOTTLE_FILL, 1.0F, 1.0F) .resultItem(SurvivalItems.WATER_CANTEEN) .consumeItemInCreative(true) .build()); @@ -96,12 +97,13 @@ public class SurvivalActionTypes { public static final RegistryObject> FILL_WATER_CANTEEN_FROM_PUMP = deferredRegister.register("fill_water_canteen_from_pump", () -> BlockItemActionType.builder() - .durationSeconds(0.5F) + .durationSeconds(5) .forBlock(blockState -> blockState.getBlock().getRegistryName() != null && (blockState.getBlock().getRegistryName().toString().equals("craftingdeadimmerse:water_pump") || blockState.getBlock().getRegistryName().toString().equals("craftingdeadimmerse:water_pump_tall") || blockState.getBlock().getRegistryName().toString().equals("craftingdeadimmerse:water_pump_rusted") - || blockState.getBlock().getRegistryName().toString().equals("craftingdeadimmerse:water_pump_tall_rusted"))) + || blockState.getBlock().getRegistryName().toString().equals("craftingdeadimmerse:water_pump_tall_rusted") + || blockState.getBlock().equals(Blocks.DIRT))) .forItem(SurvivalItems.EMPTY_WATER_CANTEEN) .finishSound(SoundEvents.BOTTLE_FILL) .resultItem(SurvivalItems.WATER_CANTEEN) @@ -114,7 +116,7 @@ public class SurvivalActionTypes { .durationSeconds(3) .forFluid(FluidTags.WATER) .forItem(SurvivalItems.EMPTY_FLASK) - .finishSound(SoundEvents.BOTTLE_FILL) + .finishSound(SoundEvents.BOTTLE_FILL, 1.0F, 1.0F) .resultItem(SurvivalItems.FLASK) .consumeItemInCreative(true) .build()); diff --git a/crafting-dead-survival/src/main/java/com/craftingdead/survival/world/entity/SupplyDrop.java b/crafting-dead-survival/src/main/java/com/craftingdead/survival/world/entity/SupplyDrop.java index c05181fe5..70faf1ca5 100644 --- a/crafting-dead-survival/src/main/java/com/craftingdead/survival/world/entity/SupplyDrop.java +++ b/crafting-dead-survival/src/main/java/com/craftingdead/survival/world/entity/SupplyDrop.java @@ -107,6 +107,11 @@ public void tick() { } } + if (this.dropActive) { + var motion = this.getDeltaMovement(); + this.setDeltaMovement(0.0D, Math.min(motion.y, 0.0D), 0.0D); + } + if (!this.isNoGravity()) { this.setDeltaMovement(this.getDeltaMovement().add(0.0D, -0.0025D, 0.0D)); } diff --git a/crafting-dead-survival/src/main/java/com/craftingdead/survival/world/item/ConsumableItem.java b/crafting-dead-survival/src/main/java/com/craftingdead/survival/world/item/ConsumableItem.java index f0a1dbb82..c04f04e1e 100644 --- a/crafting-dead-survival/src/main/java/com/craftingdead/survival/world/item/ConsumableItem.java +++ b/crafting-dead-survival/src/main/java/com/craftingdead/survival/world/item/ConsumableItem.java @@ -83,8 +83,8 @@ private static ICapabilityProvider createHydrationProvider(int water) { public @NotNull InteractionResultHolder use(@NotNull Level level, @NotNull Player player, @NotNull InteractionHand hand) { boolean canConsume = (this.type == Type.ONLY_FOOD && this.canEat(player)) || (this.type == Type.FOOD_AND_DRINK && ( - this.canEat(player) || this.canDrink(player))) || (this.type == Type.ONLY_DRINK && this.canDrink(player) - && CraftingDeadSurvival.instance().isImmerseLoaded()); + this.canEat(player) || this.canDrink(player))) || (this.type == Type.ONLY_DRINK && this.canDrink(player) + && CraftingDeadSurvival.instance().isImmerseLoaded()); return canConsume ? ItemUtils.startUsingInstantly(level, player, hand) : InteractionResultHolder.fail(player.getItemInHand(hand)); } @@ -175,11 +175,11 @@ public void appendHoverText(@NotNull ItemStack itemStack, @Nullable Level level, @NotNull List tooltip, @NotNull TooltipFlag flag) { if (this.foodProperties != null) { tooltip.add(new TranslatableComponent("item.craftingdeadsurvival.consumable.food_info").withStyle( - ChatFormatting.GRAY).append(new TextComponent(" " + this.foodProperties.getNutrition()).withStyle(ChatFormatting.RED))); + ChatFormatting.GRAY).append(new TextComponent(" " + this.foodProperties.getNutrition()).withStyle(ChatFormatting.RED))); } if (this.water > 0) { tooltip.add(new TranslatableComponent("item.craftingdeadsurvival.consumable.water_info").withStyle( - ChatFormatting.GRAY).append(new TextComponent(" " + this.water).withStyle(ChatFormatting.RED))); + ChatFormatting.GRAY).append(new TextComponent(" " + this.water).withStyle(ChatFormatting.RED))); } } } diff --git a/crafting-dead-survival/src/main/java/com/craftingdead/survival/world/item/SurvivalItems.java b/crafting-dead-survival/src/main/java/com/craftingdead/survival/world/item/SurvivalItems.java index 795b8b66c..2bc7d57fb 100644 --- a/crafting-dead-survival/src/main/java/com/craftingdead/survival/world/item/SurvivalItems.java +++ b/crafting-dead-survival/src/main/java/com/craftingdead/survival/world/item/SurvivalItems.java @@ -31,7 +31,9 @@ import com.craftingdead.survival.world.item.ConsumableItem.Type; import com.craftingdead.survival.world.level.block.SurvivalBlocks; import com.craftingdead.survival.world.level.storage.loot.BuiltInLootTables; +import java.util.List; import net.minecraft.ChatFormatting; +import net.minecraft.network.chat.Component; import net.minecraft.network.chat.TranslatableComponent; import net.minecraft.world.item.BlockItem; import net.minecraft.world.item.CreativeModeTab; @@ -39,10 +41,13 @@ import net.minecraft.world.item.Item.Properties; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Rarity; +import net.minecraft.world.item.TooltipFlag; +import net.minecraft.world.level.Level; import net.minecraftforge.common.ForgeSpawnEggItem; import net.minecraftforge.registries.DeferredRegister; import net.minecraftforge.registries.ForgeRegistries; import net.minecraftforge.registries.RegistryObject; +import org.jetbrains.annotations.NotNull; public class SurvivalItems { @@ -273,9 +278,7 @@ public ItemStack makeIcon() { public static final RegistryObject EMPTY_WATER_BOTTLE = deferredRegister.register("empty_water_bottle", - () -> new MultiActionItem(new Item.Properties().tab(TAB).stacksTo(3), - SurvivalActionTypes.FILL_WATER_BOTTLE_FROM_PUMP, - SurvivalActionTypes.FILL_WATER_BOTTLE)); + () -> new Item(new Item.Properties().tab(TAB).stacksTo(3))); public static final RegistryObject WATER_BOTTLE = deferredRegister.register("water_bottle", @@ -284,9 +287,8 @@ public ItemStack makeIcon() { public static final RegistryObject EMPTY_WATER_CANTEEN = deferredRegister.register("empty_water_canteen", - () -> new MultiActionItem(new Item.Properties().tab(TAB).stacksTo(3), - SurvivalActionTypes.FILL_WATER_CANTEEN_FROM_PUMP, - SurvivalActionTypes.FILL_WATER_CANTEEN)); + () -> new ActionItem(SurvivalActionTypes.FILL_WATER_CANTEEN, + new Item.Properties().tab(TAB).stacksTo(3))); public static final RegistryObject WATER_CANTEEN = deferredRegister.register("water_canteen", @@ -295,9 +297,8 @@ public ItemStack makeIcon() { public static final RegistryObject EMPTY_FLASK = deferredRegister.register("empty_flask", - () -> new MultiActionItem(new Item.Properties().tab(TAB).stacksTo(3), - SurvivalActionTypes.FILL_FLASK_FROM_PUMP, - SurvivalActionTypes.FILL_FLASK)); + () -> new ActionItem(SurvivalActionTypes.FILL_FLASK, + new Item.Properties().tab(TAB).stacksTo(3))); public static final RegistryObject FLASK = deferredRegister.register("flask", @@ -632,6 +633,15 @@ public ItemStack getContainerItem(ItemStack itemStack) { copy.setDamageValue(copy.getDamageValue() + 1); return copy.getDamageValue() >= copy.getMaxDamage() ? ItemStack.EMPTY : copy; } + + @Override + public void appendHoverText(ItemStack stack, Level world, List tooltip, + @NotNull TooltipFlag flag) { + tooltip.add(new TranslatableComponent("item.craftingdead.durability").append(" ").append( + new TranslatableComponent(String.valueOf(stack.getMaxDamage() - stack.getDamageValue())) + .withStyle(style -> style.withColor(ChatFormatting.RED))) + .withStyle(style -> style.withColor(ChatFormatting.GRAY))); + } }); public static final RegistryObject SCREWDRIVER = @@ -658,6 +668,15 @@ public ItemStack getContainerItem(ItemStack itemStack) { copy.setDamageValue(copy.getDamageValue() + 1); return copy.getDamageValue() >= copy.getMaxDamage() ? ItemStack.EMPTY : copy; } + + @Override + public void appendHoverText(ItemStack stack, Level world, List tooltip, + @NotNull TooltipFlag flag) { + tooltip.add(new TranslatableComponent("item.craftingdead.durability").append(" ").append( + new TranslatableComponent(String.valueOf(stack.getMaxDamage() - stack.getDamageValue())) + .withStyle(style -> style.withColor(ChatFormatting.RED))) + .withStyle(style -> style.withColor(ChatFormatting.GRAY))); + } }); public static final RegistryObject MULTI_TOOL = @@ -697,83 +716,15 @@ public ItemStack getContainerItem(ItemStack itemStack) { .tab(TAB))); static { + var canOpenerTooltip = new TranslatableComponent("can_opener.information") + .withStyle(ChatFormatting.GRAY); var cannedFoodTooltip = new TranslatableComponent("canned_food.information") .withStyle(ChatFormatting.GRAY); var emptyCanteenFlaskTooltip = new TranslatableComponent("empty_canteen_flask.information") - .withStyle(ChatFormatting.AQUA); - - // Tools - ArbitraryTooltips.registerTooltip(CAN_OPENER, - new TranslatableComponent("can_opener.information") - .withStyle(ChatFormatting.YELLOW)); - ArbitraryTooltips.registerTooltip(SCREWDRIVER, - new TranslatableComponent("screwdriver.information") - .withStyle(ChatFormatting.YELLOW)); - ArbitraryTooltips.registerTooltip(MULTI_TOOL, - new TranslatableComponent("multi_tool.information") - .withStyle(ChatFormatting.YELLOW)); - ArbitraryTooltips.registerTooltip(ROPE, - new TranslatableComponent("rope.information") - .withStyle(ChatFormatting.GRAY)); - - // Medical items - ArbitraryTooltips.registerTooltip(SPLINT, - new TranslatableComponent("splint.information") - .withStyle(ChatFormatting.GREEN)); - ArbitraryTooltips.registerTooltip(MORPHINE_SYRINGE, - new TranslatableComponent("morphine_syringe.information") - .withStyle(ChatFormatting.GREEN)); - ArbitraryTooltips.registerTooltip(RBI_SYRINGE, - new TranslatableComponent("rbi_syringe.information") - .withStyle(ChatFormatting.RED)); - ArbitraryTooltips.registerTooltip(CURE_SYRINGE, - new TranslatableComponent("cure_syringe.information") - .withStyle(ChatFormatting.GREEN)); - - // Explosives and radios - ArbitraryTooltips.registerTooltip(PIPE_BOMB, - new TranslatableComponent("pipe_bomb.information") - .withStyle(ChatFormatting.RED)); - ArbitraryTooltips.registerTooltip(MEDICAL_DROP_RADIO, - new TranslatableComponent("medical_drop_radio.information") - .withStyle(ChatFormatting.GREEN)); - ArbitraryTooltips.registerTooltip(MILITARY_DROP_RADIO, - new TranslatableComponent("military_drop_radio.information") - .withStyle(ChatFormatting.GOLD)); - - // Loot blocks - ArbitraryTooltips.registerTooltip(MILITARY_LOOT_ITEM, - new TranslatableComponent("military_loot.information") - .withStyle(ChatFormatting.DARK_GREEN)); - ArbitraryTooltips.registerTooltip(MILITARY_LOOT_GEN_ITEM, - new TranslatableComponent("military_loot_gen.information") - .withStyle(ChatFormatting.DARK_GRAY)); - ArbitraryTooltips.registerTooltip(POLICE_LOOT_ITEM, - new TranslatableComponent("police_loot.information") - .withStyle(ChatFormatting.BLUE)); - ArbitraryTooltips.registerTooltip(POLICE_LOOT_GEN_ITEM, - new TranslatableComponent("police_loot_gen.information") - .withStyle(ChatFormatting.DARK_GRAY)); - ArbitraryTooltips.registerTooltip(MEDIC_LOOT_ITEM, - new TranslatableComponent("medic_loot.information") - .withStyle(ChatFormatting.LIGHT_PURPLE)); - ArbitraryTooltips.registerTooltip(MEDIC_LOOT_GEN_ITEM, - new TranslatableComponent("medic_loot_gen.information") - .withStyle(ChatFormatting.DARK_GRAY)); - ArbitraryTooltips.registerTooltip(CIVILIAN_LOOT_ITEM, - new TranslatableComponent("civilian_loot.information") - .withStyle(ChatFormatting.WHITE)); - ArbitraryTooltips.registerTooltip(CIVILIAN_LOOT_GEN_ITEM, - new TranslatableComponent("civilian_loot_gen.information") - .withStyle(ChatFormatting.DARK_GRAY)); - ArbitraryTooltips.registerTooltip(CIVILIAN_RARE_LOOT_ITEM, - new TranslatableComponent("civilian_rare_loot.information") - .withStyle(ChatFormatting.YELLOW)); - ArbitraryTooltips.registerTooltip(CIVILIAN_RARE_LOOT_GEN_ITEM, - new TranslatableComponent("civilian_rare_loot_gen.information") - .withStyle(ChatFormatting.DARK_GRAY)); - - // Canned foods (need to be opened) + .withStyle(ChatFormatting.GRAY); + ArbitraryTooltips.registerTooltip(CAN_OPENER, canOpenerTooltip); + ArbitraryTooltips.registerTooltip(SCREWDRIVER, canOpenerTooltip); + ArbitraryTooltips.registerTooltip(MULTI_TOOL, canOpenerTooltip); ArbitraryTooltips.registerTooltip(CANNED_SWEETCORN, cannedFoodTooltip); ArbitraryTooltips.registerTooltip(CANNED_BEANS, cannedFoodTooltip); ArbitraryTooltips.registerTooltip(CANNED_TUNA, cannedFoodTooltip); @@ -784,12 +735,8 @@ public ItemStack getContainerItem(ItemStack itemStack) { ArbitraryTooltips.registerTooltip(CANNED_PICKLES, cannedFoodTooltip); ArbitraryTooltips.registerTooltip(CANNED_DOG_FOOD, cannedFoodTooltip); ArbitraryTooltips.registerTooltip(CANNED_TOMATO_SOUP, cannedFoodTooltip); - - // Empty containers ArbitraryTooltips.registerTooltip(EMPTY_WATER_CANTEEN, emptyCanteenFlaskTooltip); ArbitraryTooltips.registerTooltip(EMPTY_FLASK, emptyCanteenFlaskTooltip); - - // Medical items ArbitraryTooltips.registerTooltip(SPLINT, new TranslatableComponent("splint.information") .withStyle(ChatFormatting.GRAY)); @@ -802,156 +749,8 @@ public ItemStack getContainerItem(ItemStack itemStack) { ArbitraryTooltips.registerTooltip(CURE_SYRINGE, new TranslatableComponent("cure_syringe.information") .withStyle(ChatFormatting.GRAY)); - - // Drinks - ArbitraryTooltips.registerTooltip(WATER_BOTTLE, - new TranslatableComponent("water_bottle.information") - .withStyle(ChatFormatting.AQUA)); - ArbitraryTooltips.registerTooltip(WATER_CANTEEN, - new TranslatableComponent("water_canteen.information") - .withStyle(ChatFormatting.AQUA)); - ArbitraryTooltips.registerTooltip(FLASK, - new TranslatableComponent("flask.information") - .withStyle(ChatFormatting.AQUA)); - ArbitraryTooltips.registerTooltip(ICED_TEA, - new TranslatableComponent("iced_tea.information") - .withStyle(ChatFormatting.AQUA)); - ArbitraryTooltips.registerTooltip(IRON_BREW, - new TranslatableComponent("iron_brew.information") - .withStyle(ChatFormatting.AQUA)); - ArbitraryTooltips.registerTooltip(JUICE_POUCH, - new TranslatableComponent("juice_pouch.information") - .withStyle(ChatFormatting.AQUA)); - ArbitraryTooltips.registerTooltip(LEMON_SODA, - new TranslatableComponent("lemon_soda.information") - .withStyle(ChatFormatting.AQUA)); - ArbitraryTooltips.registerTooltip(MILK_CARTON, - new TranslatableComponent("milk_carton.information") - .withStyle(ChatFormatting.AQUA)); - ArbitraryTooltips.registerTooltip(ORANGE_SODA, - new TranslatableComponent("orange_soda.information") - .withStyle(ChatFormatting.AQUA)); - ArbitraryTooltips.registerTooltip(PEPE_SODA, - new TranslatableComponent("pepe_soda.information") - .withStyle(ChatFormatting.AQUA)); - ArbitraryTooltips.registerTooltip(SPRITE, - new TranslatableComponent("sprite.information") - .withStyle(ChatFormatting.AQUA)); - ArbitraryTooltips.registerTooltip(COLA, - new TranslatableComponent("cola.information") - .withStyle(ChatFormatting.AQUA)); - ArbitraryTooltips.registerTooltip(ZOMBIE_ENERGY, - new TranslatableComponent("zombie_energy.information") - .withStyle(ChatFormatting.AQUA)); - - // Snacks and packaged food - ArbitraryTooltips.registerTooltip(POWER_BAR, - new TranslatableComponent("power_bar.information") - .withStyle(ChatFormatting.GOLD)); - ArbitraryTooltips.registerTooltip(CANDY_BAR, - new TranslatableComponent("candy_bar.information") - .withStyle(ChatFormatting.GOLD)); - ArbitraryTooltips.registerTooltip(CEREAL, - new TranslatableComponent("cereal.information") - .withStyle(ChatFormatting.GOLD)); - ArbitraryTooltips.registerTooltip(NUTTY_CEREAL, - new TranslatableComponent("nutty_cereal.information") - .withStyle(ChatFormatting.GOLD)); - ArbitraryTooltips.registerTooltip(EMERALD_CEREAL, - new TranslatableComponent("emerald_cereal.information") - .withStyle(ChatFormatting.GOLD)); - ArbitraryTooltips.registerTooltip(FLAKE_CEREAL, - new TranslatableComponent("flake_cereal.information") - .withStyle(ChatFormatting.GOLD)); - ArbitraryTooltips.registerTooltip(CHIPS, - new TranslatableComponent("chips.information") - .withStyle(ChatFormatting.GOLD)); - ArbitraryTooltips.registerTooltip(RANCH_CHIPS, - new TranslatableComponent("ranch_chips.information") - .withStyle(ChatFormatting.GOLD)); - ArbitraryTooltips.registerTooltip(CHEESY_CHIPS, - new TranslatableComponent("cheesy_chips.information") - .withStyle(ChatFormatting.GOLD)); - ArbitraryTooltips.registerTooltip(SALTED_CHIPS, - new TranslatableComponent("salted_chips.information") - .withStyle(ChatFormatting.GOLD)); - ArbitraryTooltips.registerTooltip(POPCORN, - new TranslatableComponent("popcorn.information") - .withStyle(ChatFormatting.GOLD)); - ArbitraryTooltips.registerTooltip(RICE_BAG, - new TranslatableComponent("rice_bag.information") - .withStyle(ChatFormatting.GOLD)); - ArbitraryTooltips.registerTooltip(NOODLES, - new TranslatableComponent("noodles.information") - .withStyle(ChatFormatting.GOLD)); - - // Fresh and rotten fruits - ArbitraryTooltips.registerTooltip(ORANGE, - new TranslatableComponent("orange.information") - .withStyle(ChatFormatting.GOLD)); - ArbitraryTooltips.registerTooltip(ROTTEN_ORANGE, - new TranslatableComponent("rotten_orange.information") - .withStyle(ChatFormatting.DARK_GRAY)); - ArbitraryTooltips.registerTooltip(PEAR, - new TranslatableComponent("pear.information") - .withStyle(ChatFormatting.GOLD)); - ArbitraryTooltips.registerTooltip(ROTTEN_PEAR, - new TranslatableComponent("rotten_pear.information") - .withStyle(ChatFormatting.DARK_GRAY)); - ArbitraryTooltips.registerTooltip(ROTTEN_APPLE, - new TranslatableComponent("rotten_apple.information") - .withStyle(ChatFormatting.DARK_GRAY)); - ArbitraryTooltips.registerTooltip(BLUEBERRY, - new TranslatableComponent("blueberry.information") - .withStyle(ChatFormatting.GOLD)); - ArbitraryTooltips.registerTooltip(ROTTEN_BLUEBERRY, - new TranslatableComponent("rotten_blueberry.information") - .withStyle(ChatFormatting.DARK_GRAY)); - ArbitraryTooltips.registerTooltip(RASPBERRY, - new TranslatableComponent("raspberry.information") - .withStyle(ChatFormatting.GOLD)); - ArbitraryTooltips.registerTooltip(ROTTEN_RASPBERRY, - new TranslatableComponent("rotten_raspberry.information") - .withStyle(ChatFormatting.DARK_GRAY)); - ArbitraryTooltips.registerTooltip(ROTTEN_MELON_SLICE, - new TranslatableComponent("rotten_melon_slice.information") - .withStyle(ChatFormatting.DARK_GRAY)); - - // MRE - ArbitraryTooltips.registerTooltip(MRE, - new TranslatableComponent("mre.information") - .withStyle(ChatFormatting.GOLD)); - - // Opened canned foods - ArbitraryTooltips.registerTooltip(OPEN_CANNED_SWEETCORN, - new TranslatableComponent("open_canned_sweetcorn.information") - .withStyle(ChatFormatting.GOLD)); - ArbitraryTooltips.registerTooltip(OPEN_CANNED_BEANS, - new TranslatableComponent("open_canned_beans.information") - .withStyle(ChatFormatting.GOLD)); - ArbitraryTooltips.registerTooltip(OPEN_CANNED_TUNA, - new TranslatableComponent("open_canned_tuna.information") - .withStyle(ChatFormatting.GOLD)); - ArbitraryTooltips.registerTooltip(OPEN_CANNED_PEACHES, - new TranslatableComponent("open_canned_peaches.information") - .withStyle(ChatFormatting.GOLD)); - ArbitraryTooltips.registerTooltip(OPEN_CANNED_PASTA, - new TranslatableComponent("open_canned_pasta.information") - .withStyle(ChatFormatting.GOLD)); - ArbitraryTooltips.registerTooltip(OPEN_CANNED_CORNED_BEEF, - new TranslatableComponent("open_canned_corned_beef.information") - .withStyle(ChatFormatting.GOLD)); - ArbitraryTooltips.registerTooltip(OPEN_CANNED_CUSTARD, - new TranslatableComponent("open_canned_custard.information") - .withStyle(ChatFormatting.GOLD)); - ArbitraryTooltips.registerTooltip(OPEN_CANNED_PICKLES, - new TranslatableComponent("open_canned_pickles.information") - .withStyle(ChatFormatting.GOLD)); - ArbitraryTooltips.registerTooltip(OPEN_CANNED_DOG_FOOD, - new TranslatableComponent("open_canned_dog_food.information") - .withStyle(ChatFormatting.DARK_GRAY)); - ArbitraryTooltips.registerTooltip(OPEN_CANNED_TOMATO_SOUP, - new TranslatableComponent("open_canned_tomato_soup.information") - .withStyle(ChatFormatting.GOLD)); + ArbitraryTooltips.registerTooltip(ROPE, + new TranslatableComponent("rope.information") + .withStyle(ChatFormatting.GRAY)); } } diff --git a/crafting-dead-survival/src/main/resources/META-INF/mods.toml b/crafting-dead-survival/src/main/resources/META-INF/mods.toml index 4edaee965..dca7ff10d 100644 --- a/crafting-dead-survival/src/main/resources/META-INF/mods.toml +++ b/crafting-dead-survival/src/main/resources/META-INF/mods.toml @@ -11,13 +11,6 @@ displayURL = "www.craftingdead.com" modId = "craftingdeadsurvival" version = "${file.jarVersion}" -[[dependencies.craftingdeadsurvival]] -mandatory = true -modId = "craftingdeadanticheat" -ordering = "AFTER" -side = "BOTH" -versionRange = "[1.0,)" - [[dependencies.craftingdeadsurvival]] mandatory = true modId = "craftingdead" diff --git a/crafting-dead-survival/src/main/resources/assets/craftingdeadsurvival/lang/en_us.json b/crafting-dead-survival/src/main/resources/assets/craftingdeadsurvival/lang/en_us.json index 2b18a2ceb..1f3242ea8 100644 --- a/crafting-dead-survival/src/main/resources/assets/craftingdeadsurvival/lang/en_us.json +++ b/crafting-dead-survival/src/main/resources/assets/craftingdeadsurvival/lang/en_us.json @@ -251,16 +251,14 @@ "item.craftingdeadsurvival.consumable.food_info": "Food", "item.craftingdeadsurvival.consumable.water_info": "Water", - "can_opener.information": "🔧 Opens canned goods", - "screwdriver.information": "🔧 Opens canned goods", - "multi_tool.information": "🔪 Opens cans • Melee weapon", - "rope.information": "🪢 Useful for crafting", - "canned_food.information": "🥫 Requires can opener or tool", - "empty_canteen_flask.information": "💧 Refill at water sources", - "splint.information": "🩹 Fixes broken legs • Restores mobility", - "morphine_syringe.information": "💉 Pain relief • Movement boost", - "rbi_syringe.information": "☠ Infects target • Dangerous", - "cure_syringe.information": "💚 Cures RBI infection • Life-saving", + "can_opener.information": "Opens canned goods", + "canned_food.information": "Open it using the right tool", + "empty_canteen_flask.information": "Can be refilled with water", + "splint.information": "Stabilizes broken limbs", + "morphine_syringe.information": "Relieves severe pain", + "rope.information": "Useful for crafting", + "rbi_syringe.information": "Causes infection", + "cure_syringe.information": "Cures infection", "pipe_bomb.information": "💣 Improvised explosive • High damage", "medical_drop_radio.information": "📻 Calls medical supply drop", "military_drop_radio.information": "📻 Calls military supply drop", diff --git a/crafting-dead-survival/src/main/resources/assets/craftingdeadsurvival/textures/item/canned_beans.png b/crafting-dead-survival/src/main/resources/assets/craftingdeadsurvival/textures/item/canned_beans.png index a006b394d166155cac5a82f95b0868d60109327f..b478a01d1e9c3b559f7657d68b5a2e5e7c3e770f 100644 GIT binary patch delta 744 zcmVF>4e-7>1vn zo!w0~F`Oh8DXuXVhbU>R>;&-#Nc0!@0|IHRW05Wd1b={qMG6%pm4!&aLJ;AK6d{2i z62yokdz;H;7YEL*1|e_G!TkI@N~tcnuLDNou`ae+tuFcVJHM3cx1oor*TTXA0Ar!gSm0r; z#q%8I0tcC4#D9m}44!jf0nIsw?Gj>bNOIUp;L3!)vw@pQe^L_5#yU*UiA+2LmiY2I|37d0tn##tZwqsG?o&(jz@krZRh+Vyn zeR>O9xfM6(I&N2z87Ku}Eho+>Y$ej&lA!{v$V#b5fFp534d$-#733dB1n>-9cMz{bzNwVjdqKFMt23W?2>hsZ^?^IX#(c z!HOiYxwX|$6G8yc8;@5&gut>a&mc`r$z-w|3x@&7s_LG4EjX*HNRmXPs|!mAR8=LN zPB)$3)sRdk%Zj3)NRkr(5b5f2JXuw3fT-_;7lnk{Mk$+r1k7ZdXisFRqmL-I<|E6gYkHaP1EQZo5D1VN=UUMzX3|l zxc)hSUMkT{t^hTaN+l#&1|Tpt)lfTJ1p_cl6J>7J%apAF)a%ikd(JqSxZ!~Le3jMz zY;nFrt(a2_GXN9}8+C1y>8E#`S|}7E5Dc~$-$Dmc3o{f9n}T5j&>8f%9JZfaJFv90 z#Lh+rz<&wv4Emk$8q7ZfQ08XI>jplbkE{J>m>8L)VA$l=baHDt6C;xc25{Yi%^w9K z?>>-?X6euk!eqELI)(W5j6+9<*xAUC*A1e5qX5oPwMD7ne)wyEw{kz-!5F8XPZJ4s zvU%gLo6WMix{5sauy+cu&HLl$u}u@2T*ghm*TX}D4Nw%V%KFVTNITqQooApigX07*qoM6N<$f}o9LhX4Qo diff --git a/crafting-dead-survival/src/main/resources/assets/craftingdeadsurvival/textures/item/canned_corned_beef.png b/crafting-dead-survival/src/main/resources/assets/craftingdeadsurvival/textures/item/canned_corned_beef.png index 3dfd7d3a62fdcd121e6858ff1756b6df83aecd27..736ae1bce2366f765694d4f8e1ee8371fe049fc0 100644 GIT binary patch delta 778 zcmV+l1NHo?1)&CzB!3BTNLh0L01FcU01FcV0GgZ_0008hNklJ!lj`7>1vj z-Mzidc^WZ#AQ2=45ff6#7B=aGRBC4tObQ!8L}JnjHn9kz2|=;8u(1gwTBS~5X`zUO z7!f6yAHlnv-u}&uMcgHkh#Oq6$=A#l-@flV-`{+&Z~OM2O@Hjs-)#HVfc#fXu@~a0 zsVRgID5Yq%S}3KkEDNO+jYb34b(xr$*b{bc0n^jd#BofLBmiuzukCO+(s7h#vx#ln zjE|4!#+G@=ecxwfWCST?MsC>-URxzQH#avk@}8ca-_!L+v-gs(v9U1#DkY1GBQVAw z#MT*Us0WI&1%Jkv+?crq_`bhYd0Hc-%<91NysRFM0hVPE1VQlvfDAajp_Gy+ijYzw zr6dRflv0JaVHVHc-rgMowxp*6&vA?l5K`c@RuhO&)_ScjaLx=&{i@c#OBHda>XY4D~=^`+%m=(O0J9LIEY_kdho(|0G3u8#kFB~ zpU=R+K(3q~?>@5yy#6*wbU~9)YfX2bk1-}4Fn_z&N;;5QtybQLE|&nUwU%KR?wESJ z3D`ca3+nMzk`uR`pU2to~dM(!G@-B zdUh762_XP@n#puPguwGWWsq1?KA&%=Qz-zBZTnhX1|Qotnx038LavQ7pjH!YpIvB$ua$ zjG2>^N+l%#mA8)tSYDhPcuhjBt?w%Z-3mbJ^7N2{t$zwo0pQu&mjk_)WdYzg4y&uH z_XBXSRpHOMAD&mgZ1UoL=XhyhmbLZ$NN~AaR&K#qoWaaa^UL{t?fTy5ui>#}SvZcv z%E}7mav96AC>D!K0I~bP^5Pt3cA9V22ZD=>u=eibCmhF#dXjcB!32COGiWi{{a60|De66lK=n!32;bRa{vGf6951U69E94oEQKA z00(qQO+^Rb0vixDB&A%p%K!iZ>`6pHR9M69m(OY>RTRd5=l-ecu5>bES{E%u#3+P8 z$l68Tz;+?(#wTzW$Q$GVLRLP4;6fClZbaq@+_=ahkcG@J3x6jxJ>50^r>gEfE-Gmq z5mOB{WRnZUDX7Ca-#zy`U!5ze%3UtQ9j|);cMia<<18ZoWNiGe4XCQL4&Wy7$;k;K zLI{ERd~QMrSZfI(Fquq9({$zA6o@owLlM!_(^JZ_q^c?auAcw-ickN|x5)Dx=N!k! z$BhA)Cdu>BkblF&LyR%2n@Nf%HM0iS~R07BATuL8Grfq#f-za#wd?BhlO2ZJ9Gu}l_K zqfTga1ZUrU%SZcP@#N|SAu84g&KigjOl>QL@x0=<$3HQ1TO1r5w8H^oOck~U?(1)U zAWc&MLI}iSLE;QW6-k_-6whL@VCMYFuN4lcs);e;y=O2Ou)Dj9wH92$dwU( z`}_N(X@AOcxoi~xF-D4_Aj>i?E-om`lD)k>X0sXIdoC|8$+C>|^Km$UB)=_bGm%qv|IBUv%#)6c))`HPoKm!S$#JxzA_e-EG+zkaE8)1g`7bR+fk zyEiM_OPxMU(0nx1d^FTLwB8!OQ5W<-$QeETgnuG8*hCRg#6YZsP$)?ciafHI2$N^9 z^)@)eqBSK9h2Xo9tRGe)C)d@x5kBLDbZdQ)YvL5M?La6YR#4;+OVI1Y3KVk?TYvZ6 z_D8bX=bEcN12MG(qje>G3gt`XnxgkKVw(^X|{f&I52MET<3(s0uI^swG$t zok0hGt8Q=mtlf#o8ksmD8C?x;mAKya*;=!qtaCGJGUcp0l*;|p>>j{f1NaMazkphT SV@iAg0000!GhNS delta 706 zcmV;z0zLiT2HFLXB!2;OQb$4nuFf3k0007%Nkl1uV7N-cujw2!H z(5*w4LQ_Hq6H-Elqy##YZXP;$>{7Zmbn73`C6FmY$XGnIv{Oh24<(dBwvwTc!Bj|b ztf;asa&ZS+ihspc;y@R_AUO1W`rhaC-JJvzP4u62<1)#`Vt=uDQOx&!0JgWcFI6*9 za%8Lt!EvqD6_Zi|aLY7XAX4J{eqxZ3Nrgh8Y2~pZcfPY=B;`=_Dro|?`@}-RX?|B}kX(oag3Ls@je)$l9^6nje9UYNQrw8VG zo(F(wnrNEF(&L|4zmF-E#sEk)i`e!iLMY^y56J`N-P>{8Z|{IePoFu!5oci?8Fa_4 z1Rzuu!At(g_rM82{6;R)>1iuZ%5Z!DMN!CPGAQmV!hbMC1_8F*B$GXFL+?z5D&lbv zoQ((23#02g@D|5$x(di306?4FNm?$}%_K?Xy)6J-*Tr>R6h($8oT2n^{A~;N`D(se2x9Fce_q_j+x0r8%n`sH)0? zhd%%iV(^NOX8rx!eS#q1#IgDK`O8p`M1L)7t2--AAylT*Y1AS6J!l_DbG*PGi0o}hQ%PT->5&!@I07*qoM6N<$f+bf&00000 diff --git a/crafting-dead-survival/src/main/resources/assets/craftingdeadsurvival/textures/item/canned_dog_food.png b/crafting-dead-survival/src/main/resources/assets/craftingdeadsurvival/textures/item/canned_dog_food.png index 173fc02a5bc2b73febed5d34a0dc757deabc8b26..916a19eab660be56781521c50adab6762473f281 100644 GIT binary patch delta 721 zcmV;?0xtdc1@#4xFn<69XF*Lt006O%3;baP00009a7bBm000XT000XT0n*)m`~Uy| z7<5HgbW?9;ba!ELWdLwtX>N2bZe?^JG%heMIczh2P5=M`W=TXrR9HvtR?CVSK@{zm zJ>4?tVVs#vlF4f^yL?052_b|K@+mPOC?bNO3!mSStqdd^+kaMCjUk)-f@{|y402Pa zs;lkvGF`J6@WA0#RaezHbt!MD?Xbgj10}dg^(C(aeDhwfNBw@EI-L$R8V#z~>v1d= zi&QR`ugnMy1_Nrh+tg~cI6oIZ{ljLnNtH^4YPFhj1N8pBI90dXjm1l)5>>0!IO6nD z{M|i8S+EVwVt;`fU~O_3(a+}$I?0=K?2343Yjnfb`8UjaeMg-EhXsD3w|7N^84zs< zJ-;dV@|Nf$f>_5l`CmXhZQ#wB5P5Z5qZg-Jq7PBTCr1i15P^$B04IgO(__KM1<{ug zW6w^6QLGcovx5$-?a8H)H1Q3Ya!rjq$5LxxcJYNCoqrvYw`b74ZSYvgTU2mFJaSDs za7-@x)4!nUbgIsPVHlU#5L_;oob&md!oa5=VGzgJY(}HeD4xfbsxhGJ`X&ehS}Yc{ zTCHfkUUPvk40&6|&dsL)9YML4UF<~+TNZ}OVLbz}=P}RB%+&u@lTre(xVU((F@IB;8^NZov$MC?Qd3F+ zaK&*BL6kyDnHr?6saP!5?R*}9ZPz_jZv=0w`L>h?Rq@tbA<5em^>zg*WK|gAXQtDKA8YKdh)>auF9mlIw zkWylrW*l--Qh%wq|Gw|zI8G{vM1UYvl-5=O7#fql1rtUrD!^;KWa5j1Xdw4vq%cB+0(9Zg2Hh;FwOb?(7L1Fp<04vX*#30QI!eank*_hy)l_m8nG3tb3wAe15~S3EX$%= ztzJGr6h#EpEzG_w!pvfHM*xJf#(;elfQlboC^!`WfMJaw%Ri9&HO#&&0CK;EFlzvG zg*E8!zke`5;y17~KSvZr^!5*9SR>TM5OpzxVU4i!Yl~3UsEeTshqna?)B#KLb9kOd z6h$pp1E`@WI&MX6KS&Lb*n+-mHyN;O-o04B5ISR1cd>2zRA9MW#`C;5I0zMkH*OR7 zK71=B0<`^KPfir-1D1^tg39`*mfFe9rm^>5zf5(9Fbvr(d%S+Ll9-X|)G|3ysO!4G z$Yc-+>peW$kOJRFsjzK$YJjsqPHMO80i+7;sH2XW^#?HqI^-XNk2e4S002ovPDHLk FV1gdXRy6KX2qz6vcn< zkL`>ny9y)}DbkQ8LZEzw6)gw}1bl?l5ou^>QV@wEiUgugML`1swpj{x71%1YDI(Kq5%6`kE(Wn)F`o;TyKdyg-z0G;;?Cb#0&kg-dAtET% zuuE`JM-~i7@_%#JoZGK&)z{qkm!kSf{2g=w1RZqZbmEK`s4}5 z7>0HDH#u{&fu|3@mN(XxWvOT7USVXZXJutEmzDBQUVrLY0p!=89?H?tk#zPKXstuM zziPky>RXDU03gOlay7ZtxRA)L#;c6Ft{K~`-PcJEh=@)pk!2aHtE;T9uVah>oAc_% z>n*RXt+BbeNl_GBU0ro*fRqx>Im)u+^z;<(JsTSvjK^cLEaU9#jIt~_IXR)KDh7kW zbXIiJgn#!JOMd+R8)9(}pfxj#loF*I@ZJX>^6cW0(Nzpd$U14l<>!O9rSm90KHO?UMp8slY!dN08C~@plx_pcYU+?WGB6cU+7Kqg z_IU`dNygyNb^(#t98q;XcgW3SAW4e)y6BBf+H-IONlhF}w^6M9_;){jyV=;9V~<9~us% z=%P}Kl+ewkxD+D@Lbpm57r~)WItoG;ox5}poQ19m7UNc2910;6AtFL)kia!HXYO*n zHTh!1ng`jcWQz zc8nEC;^OkMB_@ObU|3b_AVOeSmT!=2lTxWvEgp*jP|&oFxMN(V$6si{)qMp@#05}j(UyW!0qOoZ=W;J$zTg*P8dU5W)S2pas14vSTy

B zFC29(?J*C(o|TbzlL6sQLnU;1x{g#($8NFz??yX}P9zWA2coes{FL zduISgt6S%6EE@bVb8IXcE=;?GsB&;R#cp<_>ngR&$9D=Fiw0G@LfNPg9tiU8Wrfu( zkd-jI*%1~Jc@9peu&pu+iQ@*0FaPUTU~T0&#UJ(k93BV)P&O*OebG9@*@`@1v8@=);D2oWvS)4uIqgG z_|?7t{QcRjTHp!b93(TN84f>XT$5%w%RW2d82j6Pz5t4qA)-TZ%EpNc0(5M-c4G(J z`27g@a(jTi{dC{_T(TA&dW#HA#|r z7z!cF-H%(_u0#AXO@y%7+fU!^hr|n{U3z1-eoTAnsi$WB1yhSR4=@JQCIA2c07*qo IM6N<$g2-uA>Hq)$ diff --git a/crafting-dead-survival/src/main/resources/assets/craftingdeadsurvival/textures/item/canned_peaches.png b/crafting-dead-survival/src/main/resources/assets/craftingdeadsurvival/textures/item/canned_peaches.png index e4845836081513da26e60444ad267014d59f4300..f756cbddf5e9b7aa96d34a318e41c09b2f96571a 100644 GIT binary patch delta 789 zcmV+w1M2*y1*`^;B!3BTNLh0L01FcU01FcV0GgZ_0008sNklKWiLU6vcn< z&-~l9B_)ljk`}lCZkEI#ce(0@l~psj3R+902{D-iZU}7SA&pjj-0T zva-@Rw{Ai%8-}H&CA8K@L!X z1MC-`)PVENbAL7#AR7jN%6TFSlc{5C7d|-$Tf0zH^|?+A+k5|k03`7DK+pX8;|4f zA9g-{@HPFx9@A-s1dl;LKv{#E6c8uu4yULazu^Zx_Q3#$5mCDc3(UU@R2F_L@+9WpNJU56I@`Slz5GMvZs5`FY(3w>AZr%yaL_4l?dT zlt6I0wSOj@pFfNH;diQ_2;~G(20b0%Y!?+}Pz(@dk?tZF?_OqSFDEaY3qsV!q=;-7 z(OOBGC34~Xf-KB+#9AZsXA()XL^_d{Gl`Xj7};7!{=AK}ZpHq-rgBqYO6h95O=C|{ zLK?$XKcICzp0Ne1DO_ktKyAN<$S9ugAAi_E34dDEv6Ddfck9_sbCYW#AUKciq0@SQmBHv3huPHawB3X!67wmI-T5` zG{i+SxA|x%w>Ib|FAQ^;bGYww&tc9C3^dSx)|HDSFD)%K&VP#qK>)zo+S-NoG)fMQ zZ6Wx5aL^W0N&#@gbx%N)A_xLwke*4|Y_^e3CIKjTUROLcE_fb72*wf#0;TXgkM;HS zp8H28WV6|ZZQIyFXaj(;L_+5jJg*I+wGt)}Ls7wWGD)#i0@_d7+6K{Vi&Cn~+(eN8 z&p&_oSEzU zJ^-%kV%s*aKkrhnsmlT67pGZ%@e!a25@-HqQpW?;Zt(tF33hiiyon+Kgk_OmcmU7= za;lm<(rZ&wV*mhWWQ3ugZ^1QDfK&&-6Zk?{HvVT7Sogl{(bGj-3s#*m=O3BmB zucq5w4B&WTPT%ELjv=5TtHkc*5%IVN_!}8lKyKxrY1~g40m!XfmvOmLC-tuYTFuLq zIsmDuCw;Jot5Lz+>IVMdA>~S4U*nk-#xpB@F^3)%sL3OipM4;|cyd}{SzS5dThONF zD|qQicz-utXEYV(@#-65)-d_SX&pN#m(Mk>$s_7D#nhz3tLq ooCVUU{kN2bZe?^JG%heMIczh2P5=M_*-1n}R9Hvtm0wH3P#DI~ zj&m+&mS}ZT&_xghK{wvnhiZYK3=;&s@b7n#pl%!~DjD7MQGdFr5P92s^c>ficCj-; z@PQxi+|GNRXLIL_Y_-*<30%xPzd50ZP2Os?pxtgmqtSp$r2^%0Sya0~ltjK^abKHKm* zd=_;y8bPnu100Jut#Se=iZVlUJ~0pDKIeDcX_XVe(SOXgZRq#=Y+`oz!=VU);8Wqp z_!PR`E}G-FLW&@nh{KEh#2z!hOa6Bt{M>v05zda1Y*V5NnJ)SRi!DK{NL*9Fh(+he zQ7UR8=Ddj7d>2F(|V z$7_s``#hw)ci=Kbs7A@xDl;!q&AFT<^?@P$481tR1i=N6FnowPa(!oVXp@VeM^;#&1 zxClL`+TzebM1&$PE+ROHLvbq<+C>oBp`eaVb}DwXAeI&m;>Bx^^yNK*oWu3fyX!Sc zTgB!6@F3*-=ly^A9()OO)zyDi&uPpvGc&c5YC;GAmY0`LwSQ+Sb0gT)b$;#dx73tU z09h<-am9QtN4Zh~THmz!81%zqQA!;PPor3Xjoo!dhDRw^ zDhMGkO*0B+Wwvxni@bi3?>WHXqv|2+S?- z(hd`bVSm$e$rCUYz)100000NkvXXu0mjf DosK&h diff --git a/crafting-dead-survival/src/main/resources/assets/craftingdeadsurvival/textures/item/canned_sweetcorn.png b/crafting-dead-survival/src/main/resources/assets/craftingdeadsurvival/textures/item/canned_sweetcorn.png index 592424306aa3b09c0721eae4f3ab4005ba280211..7ebf09a24ba9ced80227c240cc0dad99c4ab0fed 100644 GIT binary patch delta 754 zcmV!D<{w5Qe|* z>6wv6vQdzH$iZNIT8xqqjIVJHArBCUVGp_F2?TlrU33#V`EDN!35FQLo&qsO;G9An zgQP_;FA!VtdUvgz+3BwGVWqJxWY|pxj6rqz8>XrMpRVe^8h_5?JU(!k8Tad3YXR*4 z&1q&K-rCy27()nw(P%^nfhdXyA<*ylNz;_g&CQu|Pc2}3dz-4N@ZJOP{MkS6Y*=2o z#BeyoImgDv#?-m(H01l8Hfw8ZSZizY$i>WO3pEY~gPQ#5{clf~>%HM-sn`1YIsgkv z#6oOPRg9V7SbyMU5txer^;74ZTEKp%Jvk1kFg8YfK~)?Q&n;6Ghp1GOBee-t@uGPF zsNl=qWT^@W);dBpz*+~^Q57!`ikYsJ{TO^em*)(>-~Ad?P^k!hgvc3xW8teGpAbb6 z{lfnjpE+B=B?fFE7==dntyi+=${Wey0f#Rjokuktq&JJ zb+_+5AWc&MLI}vXAaRzl7ZPWwOiWP}T>1P9@;q;@302jK2&=2B9335zWf=h7ZkMaA zR*fg$@;s+3%jTL;RS^+(cX!FMjDv#%y4^0VW71ZuMV{wmS;pSp9>d{~UaxmDE1GG- zi;Ee*{eSukA-w>=cs#C8qMl45WaA#+eSeE*FJCbzgBK-kqzU&s?USa`EOEM!#*=ky zYg|m7E+y#G``_r_Ki$;Et$4rFuH8D2x{9A#XBA4T-H$e>*zU-l@SPNcA z8WC{q6QUdKMELFR&Hw-a07*qoM6N<$f_6M?s{jB1 delta 663 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 delta 712 zcmV;(0yq7E8{h?yB!2;OQb$4nuFf3k0007-NklrJKf#yd++xl#a+opM>-VEM0O%z38I37nxiD{bT z^ZAbB2O3hTR9(|FG)3_O0EXjn&$DfsK8V(t2m>(?RMZm*3Z)X@|I*erD2=vADUXDQ zQ6Rv^a*pKWG=GIs2_XcUrgk5ow=4_8FhW5D&%pT@8_PKWl9SW?-rOV>iyiB= zEDHd`FwiuOy{{kXs~vU(2<*?o!a{v5o1rT9y=NC6PI=d&u>-)}hP7{>eecWKAIY8EcRv^z@YTWq1hxR&MSrF!3gh$dylGy`X53mN;`!R) z!m1-cD@aqfGFe}(P$&TKGnefeBs9R>+b6{0QHJ8@n7;SYd+s<6x~_W=-Ksx~>HF*~ zkG2e~%0AV~A715VyjrBu23^^*fB!3BTNLh0L01FcU01FcV0GgZ_0006ONkl}8~F zIFdDE`|6(KId|q7xZ{ow2CEoPg?R>m-J#ID|O+M?0mv-F*nso%75)uHi>lQuPf*xD{$9BUa0MxKR&ks8ODnwZovyQ+Q z>$s|lfMrI7RewH>O@WBa?*hsNUi3PSV>phZE#M4UMuv7l?rE#lLKH=C97oqgjv_e#WK=G9>4RuKpO^Nv-|s_k z#7Tyxk%MT_tyMaRo*x7W4rQtaG5~zhtw9kW*|8TCv3y~6m3~mF2!E!>j6KdY`SOhl z%gK`rbwndI@U;W}V};%KPeKBK&0dq`&+_|IGcxx_#2MCtp`ME{*$Hp?DK(YzjypaU Z{{U++_!%S>8odAj002ovPDHLkV1lzv2ps?b delta 737 zcmV<70v`S31o;J!B!2;OQb$4nuFf3k0008BNkl%HV44*6lOZ7x?@amlmX@O|F*`MmGV29*trNfu?Cx zDwU!0dm7T|bW2eb6iMm@0E|bYJKIrceMt*fu-GqRS_mO|NM@ z^2z{KmS3~GuQMx+0WiC^MkEr!FpLWa4bt^thD5A= z>Mh5ioXzrOVd0D?7z`2&2Cp7qDZk3Ibe7osJOE1PkZt91Y~^wQykE@^9Div5fbp9@ zm{9lGO@GSV&SYFLmkl2Zu(7yEXl#ahz0Oj8m90-7n3|g6ezv_Ure*(IfM1OU+sn&L z+E>pI_8R$LG_rlRIhl_%!rux*>; zBc08!-!2Exg^(nfP&kY%%L9FO=RrC#O@y$AhWiFM59G9tk8}WEp(BknQosHHM-eP_ T(U(A>00000NkvXXu0mjfVjWe| diff --git a/crafting-dead-survival/src/main/resources/assets/craftingdeadsurvival/textures/item/cereal.png b/crafting-dead-survival/src/main/resources/assets/craftingdeadsurvival/textures/item/cereal.png index 18416a5137d7a157c18a62bd2125b74369e63b62..fa991e4748de524cc5d93e8fc59470c9a8b301e2 100644 GIT binary patch delta 572 zcmV-C0>l0C1=R$QB!3BTNLh0L01FWS01FWTe`H^g00069NklBjE6vzKA zo{GC=j3MbgX3hMq~Ck*-urU`cJ|KJTC-km>AkgXEPu;C!0Z8-D_}Y^7rQ;+ z*JX*xo&J3<^!!*%F*@6??L^z@-J$#8$=x%U;ERRi*<0(x2iIbr=f=pg3~8DI(9v_S z1;=18sI`So2ZRu-SqK3sC88)=rT$(#N4;1`ByoTw4mNVaxdl?n)f`0;0HA;J5>C)8 z%U1U)rO@eg{C{eIpplc- zIqh{-&cWQM;A}YA&m-Ve!{1(n1V8wu2ai691N^@adzc z1C)A#Q}mR6+UwUG@K!=@1h3MGqR_PEatSFV!Z5_u7=JkW4*wb;mE*;i!~ya=H{e`1 zNQAD&o(|YibEy?V7;wsl?L;G6z`;ozAWc&PRF#27l+XrODWuE1mC)#j-{#_60bjr9 z>)YIH$;Onh3Thj{$%=msD&bt2!v)`p5>98p=e_l+XGh`Pu#CeuzKnYvj-kVRw zwVi0!=rxkkwU@6!&XamlT=)E59{r!>v?la} z7zA4g6e&f$NJGI(1$$`E!GlL{K`$1H2dU`6LVtpnc=b|2C*qH) zc(6Z2babq%LbexH7SsCGp@clvlqv`1J&TM%baV{BR&1w`XKD3)+gQDJ0<8ps5#qs! zlmVoW^8KqtDt|OM0zj!)Kvf%-Y@Au3RR*vZ5_MFyK{Pf@us?(%>fQyW?xg`JZf$rH zGGyFhD^RIa2nK^BCQ_F3orD4&B|1KW-|I_6W}eGquR;K!_!N*mn}C_>=NAC3g?y14 z0QB?*Y{$IRDX6A4P6gik_)K1JHk+1~m`D*DpC%NaVt+6;!eDH~ar}-M7{34dl#uz{ z{$`e;+i8msIM3Ql#|(553Wvk&Z)T;8S3C=S9!QteW0M?YBCH;;90|Ns9G}?SdKfHZ;Jlif{E0F(mJfqyM zkA|qrmVevzA%p-BtlZBVP#xOVrEWo!N>9F|KQmP_n!=WGQWOQ+?`f^IHA zj8)Hx#6*fprNUvk#8LGJaJ)?06(p`}x0S`TZd2?Vg@>Jxrc_ZxUG{SlaJ?9r>pDZm zC^XFFnVT$`=}LXyE;|S1J)*H;$JuvHpq-4WHUJ!h|5J=VG#7N@FTjyMX;om4I{*Lx M07*qoM6N<$f;G%kPXGV_ diff --git a/crafting-dead-survival/src/main/resources/assets/craftingdeadsurvival/textures/item/emerald_cereal.png b/crafting-dead-survival/src/main/resources/assets/craftingdeadsurvival/textures/item/emerald_cereal.png index 4f8a23513da0b5fee55660d1943c47cdde822586..88d230b8b67a6da09b3ddc6a098f954262641303 100644 GIT binary patch delta 648 zcmV;30(bp^2CM~;Fn<69XF*Lt006O%3;baP00009a7bBm000XR000XR0j(pwbpQYW z7<5HgbW?9;ba!ELWdLwtX>N2bZe?^JG%heMIczh2P5=M`9Z5t%R9HvtmcK6qK@`U) zDBZOx1ql%fl_)f#y_)!uh@+#^(GVes-y;0E>wVttcW>@Ukbiv=g-O1doxRz4pZA@& zvzPwcUvEXNv7yhE&*>?o73p}?wcPEv7WY?*`NO5YaXPg*sG92vf+!bb@$~+z3ePV9z2IhR~G!GRmwmGFfl#V7{YC4(e<4ThoG1EP1ot( zg1@yLCoAX9EGO!U6C=&y@=nP+7ADe$V!w zo_Rp{{73*6MeYPHT(t=$ z<_OMkU%!O`u$XKmLjvX**L6TKRs|XdU=OmGAaVx~V}JDyfUH{!0j6Q@#mzfdGT=InsVBa1DS9j}|=A z0RR*L2pzlWtmXBPJK=Bu@Kq$}+(;ZiZ7tawz+hnJXshb~0|t<$hnoTTL1SM-w^jC5 zhYpTVpnno$!1@4C6M*^;3AW+@vSK6a!R=YyUUO~kZIwaEJ_JAz$O9AZ~=G$Hmm`f7AR#WT%QJi&lK?*s@04AM0$?iS83Qj1o)14u2M+L i7yOC-+h1-ey#v{*-m!ZLLplHe002ovPDHLkU;%=U_ZxWt delta 733 zcmV<30wVpa1%U>TFn59IOado(QLz^NPiW;)8pdP(puB~8h_Eerv9OshhU83=`gmchL}UQPx5|FpA9mLo>BSs|r>93T`90wBr;+xZ>z zl5WaK>{9iFzI@oME75QbNZcNmMFwCyzk{d8MJ{WVl0v!c2IZ1rnVz-<>@t9(P`PB# z=kLYkcVScv<$qYpxq1I?p$afFH`$V$l+jB%uI_zNqhcu6fieS{rs4DXNXF8Z`;CO$ z9+xT63=OA12mwH9ISxQF_Oc}*fQiv*#+UB4Cm@3t3p$Bt1|bBgC4ZS1ohBFx6AXnN$8RVggD0XH z9=*K{fbWEtso_~uA`#6{Ea;{XI6rku0<|Qf8HdzQXsIvMnvJ729tEt^|;E{{abYas;1Vi8T#%)rlIJyUK*j-}I3 zq`z8Q4M~}67q6Oa7FHH5eUh;>nx>K8SYz(Z{#NVhv>P^EyImRySLL}ZJnY$#h_Z3; z?buH308*x2d8U$5aVYhDz3gn~cj)u?IzIiO3DhFXd5NkRJ#y?K$Ef%XQ_efQfDePY P00000NkvXXu0mjfj*wzZ diff --git a/crafting-dead-survival/src/main/resources/assets/craftingdeadsurvival/textures/item/empty_milk_carton.png b/crafting-dead-survival/src/main/resources/assets/craftingdeadsurvival/textures/item/empty_milk_carton.png index 99a3963fd9bc8126aeb9f1bfb51be88ce35d81ce..0f25ba86bc008ce389339f8a2342a2f27a6fdb92 100644 GIT binary patch delta 660 zcmV;F0&D%%1FQv*B!3BTNLh0L01FcU01FcV0GgZ_0007BNkly-wpm6otQ; zF&V{%I3R(9cnc&XYPTtfFocE%Z9z%D53t&HA0Rz{B~nV>g@O_Z0wGRje78UuE$psH z7VmD8BUvNcntRTid#`?enL1Ic65n>2x?hKL?=IYO%1e06-K)F9DU};^JZw zTi)ZCB?Yp-zds>Y0QGtutu@9N0LrpNMA+NgV;XXRXqMxT$KzM`-h0~Zc5op{5{jaD zm5NFQlx6wTvwt*A(OQ#b86v{z=_$^+sbkL61(TD8oQRO7DN9RBhzPx2kJZ&x`u+aY zF=ui>>!4S5c6QKOhqPQ>U16=|;o%|FMCAfRURry1cQ-iF?RG;wOxC|9pePFRJZCf- z0pOgYR;%H?M{A99jwp(LbgHr%kXEaOF^0ilKv|YpYkx!U0~lj4#t_Fb)>;k@4yO7V zMzgfwV|#lWr4)@uBe;_!36GDDVb9swS#>E$l7xQ0PqW!%JRY;MvO=@j4Davn z?@7}Xr4-A{%iP@DRNIE5(J16rDTRpe{QOLoWn@{#U@#!dGTQAnx3{;|7hxR7q410` z42MJFIDZcRg<7pfuh*l|Xz=v(gtfL>0a|N{qCiA&&T)Nx&DPddAQ}#b+}+(#mL-de zi+^Pxkvz{45sWd^>vgQPIOkYjUuR=ugQKG(y!VL6q&QWj0ssyV582$@$PX u;E;$=mSyOSss;RR^s0K)n`4fDi|<-5^1uF_N)5yS0000EIwLF1Bd>70ZUSHuYj`8sxDZnIT z0iqBetP3g7_3lx;o1lAope2+gSW5r^%H=XnE^m@z5}`>Dq}q1+F6Oh?T%cIm`jX(G zggSkf3=|=E!GHGN;X)=L5=9YSpB}NXSxS7L&tg3I9+|O56^^|@VeAbGQ52B^DnSaZ zT>vacxr#s|0eiQaSoz`_kO}EbzqWvgxC?lpi=%x2z%&fe@;zl=MglUSNe~#F1LPtE zmiK{p@aRynEUjys6fh0XBB7jt-$p4QJ7RTF-Go5K2Q&#o_FMQx$bx_TAju-c&y?x& l%$T0zELQnY&B^&wJ^|Ktqo|s}*NFfC002ovPDHLkV1i4a$;1Ev diff --git a/crafting-dead-survival/src/main/resources/assets/craftingdeadsurvival/textures/item/empty_water_bottle.png b/crafting-dead-survival/src/main/resources/assets/craftingdeadsurvival/textures/item/empty_water_bottle.png index 74b9031f0aa7f585a3ad1e226818d9156257fe9c..a6e813ad922319b4992f1b870d73b0cc6c44e0df 100644 GIT binary patch delta 539 zcmV+$0_6SA1hfQ@B!3BTNLh0L01FcU01FcV0GgZ_0005zNkl&uUXa6vlsZ z|1?ds#DH!hUFcqD3fX9dNLL~*#Fg%R0bj$n@F`rlb|1+~3>PBUn3S5droEl}cjmY# zsHI(aZ%m+=4+aJHgp^S&A11=|G~vylf&j5TA+$bUo>mtwK<>OZ_!u0=Cl$zm0}ZLk5Z8xi zs!-g*zreF*3Ifa^mXF1`n>$=TDFbz%-LHVRj@=oqTK=Zy;)tmz}}O31RN zfVvN12BHt~lz$?6*2U;a+OqupKE+G@#c zHk09SDE)q4E-|OY323+5((QJo*Xv2A(^)DxfQ&{X84L!}+TNB2J3FNXsFLJo8xf{I zW`wEXe(PSTc&ZF}m|Ap}paisWc>V1*$4O5ANv&|q!hd7<@MD8|wL(o9>elkzxO|FT zwDp(c16Da4<%&Z*K5Gbpc#dW&{2&p|E}(r4({tnkZ^xhY8{NEXJ&J`t-3qYgMz;HMO=UmllwYdOPcPS;L zlwgd_St%nx7>1yFl2KYOIF2(lFBgEMbP(OxRz?8jayi;DMV|yocDoLi3qTl#QPes} znz3mQSf2xAM9uhJ59D?ZR4SF|*|Z0$)vC$TW(oBB{eP&VTdmei^vRuio)^vSbUOK+ zgnMWGDHt7ujQ1~Y0RYEa8%FC|e}+0p5Crf%Pm!^$jQ@u7Kz2{B0mQrhRe(h*l}bkQ zj7l(>OmMQ@0uYxVO;r2QXp|oS5H}swp5oVysq=sAU!a2oL4f0}jhRo*^e8qKUCH!u zeW$ipGB4u<^qWxHzrf`9O)B#>nm`7F0T^S}#{VLH0_3STL@vb6tpET307*qoM6N<$ Ef=g}=fB*mh diff --git a/crafting-dead-survival/src/main/resources/assets/craftingdeadsurvival/textures/item/flake_cereal.png b/crafting-dead-survival/src/main/resources/assets/craftingdeadsurvival/textures/item/flake_cereal.png index 4df60da92bf29a5150112487714c960f803285cb..c8bd71f35d216dfd52c7ab452a3d1e00ad626f8a 100644 GIT binary patch delta 484 zcmVN2bZe?^JG%heMIczh2P5=M_dr3q=R9HvtmN8DlFc^is zvQan>mtbK)NGvRLsR&gimMmO=6L2stz%5Lk?dQBC4m9yE)PJGB^r=mq#@REN z;S^}wwp!xoa1AC9sFj!m16}j+CD(nMrl}WD#y4DHy$3)5r0rET2xYLYIreea-7LXo z-y;&~`>L7*tA9YA{Wv^5qVD2`;dKHC#FYRH&$G{cg5iCS2m-ytsu~Dz_LRVQY)~Bx zCRPF(s^P!ge3}0c(8pB4Sio99*S{1@FfKiyUVy<0#!KM~`JnobgyDO8|>LkXtP! zf=IVLBf;%(tcd{s=>XQ2LP-Lsh_wJJ2Q9`(0M(yt2|Ug~05uIbh8S)lfYK8#;asO& a&iw#aZ$IQahYQC50000nhzLcoTZo4aNtc2Mq(gcvqoQ;q>eM|C*`94boa-RJ$31J$ zvprMk;s?gFJ^X&Z@9X(J|9*qR{O44a+c3}($^p1*>-ah|ReyHBQmHAo@VPT>#y*kR z#Q=K(S#~T|*eajD#SDy7knIcv{65p*4IURh-|>Ii6(U6@lq(lx36KK>{5}A5Jw;qi zqUl)!BU6Yf23nYXRTNS38j$gL>Ir!24GchBP2#StLyN^tC<*!=iz6~=)9I-gP>2C+ zK_Zi;*{gs@F@I*w5ny8YCIBO2la4?VqhWp2WdT%GMNt%n2765VOMyIjh&=&hgb)A> zOw0lB^tLk)K%}pW@XS>Ah17bM}Yi9BS8~N79E(FGXb5%5#a8VI{y?ePPkugU3VET8h{t?f6?3B$&VCp>;wSo8woC43hnmGJ7tNrWdKH>zq16`E}a4$pT9A~zb~}6VT26kK3y=KS z$&aq5(Dba)&JIxaf+T-kCo!7-#{{xNS!G|=_r+!>t|n>rDz-cm8uuS0Cu8qxLDB ztV<=^1)u(x&WA=vYPk=2v(h&Bben^?2!2|Uv-SI)R`o!*KlTXkJwu}-)C%I&x#y`w zi=1Pv<=fK@ith#i_%u6r{`^pjD_h~*TFdtMcT^F!Uu@vBjE57CYeB_%)8eYmg%U_9 z2`*56wn<0>vKwx`8AM9S+T8r5oMtl+?v0Njr9?_i6d6pxQhYl=NCWP`vGZ~hrPPHz zag_kh;LjHpK|&D6$3$^Vab^H54Yyz4!8yn0rR7UAAew<|tx-{g5P|Kx@9A5ALZ!4t z;YJ_Q7&MS&8LJ;=>M}&5HP^;a-PtAXzlBRvwAMf%gg~XdgYD}@DU}Njpc;XjLV?Iy zR98%;w1w{KIxc|+trcEMf(We5&gV9lCx9?KHHnQahov$)wg@R9(j>e4MBP0^T9YJ4 zq)Ez`rIm&&j}weWmKb0etWzdk0`N zx)77>?W2rASxZ(uB1`Lcd$Ub=mVqcT9G1$co^G_(n1Ug#COGF=Us!DVQmc0lh?8z6 zO%ty57jZv+;=M-%K?qz4-pGsL!Nl0{WfK_yT$=Im?;lRv0{9~cEp_hiyyZj3@YH16 i$ErNjZbu#cKl%mu(e2F}$J50C0000Px$ElET{R5*==lCf>WFc3wb<1{Yr0Na2IdH|`=0%<%JmVL{U~gK=APS|Htu2n84w1Xs7royiA#kqIeo|RBex{{aF++hoP~nU&o^L zdL8WlA?l#6Ys#{uuIotr?%ZNrFUF!YP1__%*lacdUsV;?>y^vp5_lG4vxv~GA-wnf z8iqtO5D`A)i)_0j|8B^(O8{~jK6%4?KR<&Gr}M*nIyaoo%`;he1!GLR-|s1kg4Jrp z?REp`>+Z~2`}_(+!_Qwp$4wy!P*p^PBuTK=l4ThHd7fj8!CH%|Vy&GHfXB4Uvc!8& zRaFr;+W|aYVYl0Hzu)`6FyzJ|L4b1(5t;44ITr*(KhYS|s%j+cxZw)``~sxerCs>I RmaYH*002ovPDHLkV1hl_rF;MY diff --git a/crafting-dead-survival/src/main/resources/assets/craftingdeadsurvival/textures/item/military_drop_radio.png b/crafting-dead-survival/src/main/resources/assets/craftingdeadsurvival/textures/item/military_drop_radio.png index 0a823381a6eee6fe09a0ceadfba336fe8d945542..cc5fe6822e0558557c67815112639f4114ae71bf 100644 GIT binary patch literal 653 zcmV;80&@L{P)~rlFx_2U9w0^*nVu~sX5OUJhfde?z28z*&{0S2lRtZ| zm24OM<-c@3G%XDn4YywpBBf+wap_u4qZ#nSQ$?hdNT~?|gUMO)ZwBzO#~nHLUTmY3 zVrXKV>qbvD1An%>0usD9T_y-a^78{|X(+t9i*xR;Q_*M%{P0u}tu-nL5W=&2{~djs zkExV)$ldBg8iNLsBw_vid`*U^x8~Xys(br{{daJ2jMf_Pc<-r{_pp7vD5WyN0aQJ3 zlgklUi|Pugly=ZvU8f~TL2E@SC0=+o7M3!b%MySeo1MXimg7O3#1AXpsA6lP~00000NkvXXu0mjf3Jxu~ literal 378 zcmV-=0fqjFP)Px$G)Y83R5*=|k}+<>FbqYXn=TnBAPJB`K7cj&0$p;b9;9c;S+ev32I3sR8Vtk+ ztic^(xI^kdishgL1PNc{BSi`#b~qfym>#nv7F<;oX_|66oe}_J%nVqTWdiW_-%LyP z{w!=Zn_%~|`PCR>#i_@%07*qoM6N<$g3kq>SpWb4 diff --git a/crafting-dead-survival/src/main/resources/assets/craftingdeadsurvival/textures/item/milk_carton.png b/crafting-dead-survival/src/main/resources/assets/craftingdeadsurvival/textures/item/milk_carton.png index d68ecd7028af47c95c3a135e7e0ff4adb2ae55ff..39d515c8088385a9ef49ce954dbb08a8b535c5d4 100644 GIT binary patch delta 499 zcmVJFeP56o$V6 zYzvIdLqbuuGb^A93&;Y}X9a0fQPCq>kh~uXN+it7#-2H;u$0`F_}y_9*>QCK<<^0Wf=gQ%?8i&h~t=cyWL0` z7D-qpcU>2tAb+*iVy%6XthI&Ua5xm_ZnukwAR-uJ$g-@cgt|Q-e>NZ2brF$*&=^zP zIgSJHkQXZFfa5q=YnjjID5Z*ql%^@Z?^kX_l?5oJ$g+&_c+7A({4F$t!2qQcqtS@% zcH2xD=6Q}W1`*+Uy`r^7Yt7|yL2J!)I%T)pHR}P-^K3|xgkG=5YPBkIB8noyFywqb z<9S{)0*o=ZuFGsTW3gBiL`jmc-|w;3mM3EUeE^`-=^!H9Znt6z-Y24nJX`^l1^jIn pD5Es0YZdUwHdM#1`N9j&#V;yd#RPdicVPek002ovPDHLkV1g?(<{=}B0|N}-!5kEtoQ72oOue*>41dGZCr|L2PtXA{M_{u6 z-9g9}6ASP6$R*t4m}Ov3W2W7V1}npo-pJb+f11QNO4eCW-v)+k>vnv4!U~b z0$Jq%!9+-FFzNt;4!~B#5(@~`gbWNMHb`Iqy)t58U_eQPFpDW}kdWdaN2bZe?^JG%heMIczh2P5=M_l1W5CR9Hvtl*>)TFcbh& z1$EE_XwRHid=5y^00=nH2Gl?SQ~(GGA#vkG2h?D8lAYu!1b=DQw$L8-Nu$J$KVv(7 z%{DeYQYKX*rKcu+KQ`&>p-C_It3%&zh_Z+)%B3jM=V>1FJ=-mp=m&f~9I)==WZ?a{ z!*BFOpj4tA^zCQ>0VlOAl$D@w6#-#TC79d^dB%2;Dgyldzye-s2l^uu@ z;5jQWo?L;8`G3%7L00tV=>$<^T<_#jAV_4zq`(w$as|#0{!u_^EAv?=u`Fjrd(KL% z0&Qb^B$n@4(F!O5<8mZ^qi?tYb-`nUYOV?ZE9pf!U5I>fznK9^yfJR xtDJ&F|9LGPVEZMehvtlS_TY-77Q_xX6CP{?|TJ~&USXowqX?5 z)AKGETV7C38Fc3PuIz<*Ex*X~RM@O5c66p#%A{-%KdbX_MJjglNryZWmExgqKRu=R8KF=wtn zmF=)V0EvMySa?tyfK$KTPXGi4YQ1_3fTos{zA;Z!Gd(C3D~z|_K9b`?2v7}(nw0IuxpCKgA%6s*UUet{FCeG!&Aa2O>5T^f zn4dm8P~|&tBmm;$tSkVdnHdbz1d#RO+;~keN`U408EI z%1dSG)w7B|!!%tmbpw2OnE_yRvzekwU|Sdi|9(nDOT30kHk z*@2xvDkwiSB)|9CojpBITx(aZzF`1PO^x(ha3FXXRpv)3=dK(}r9TueA1~*g#*_d6 N002ovPDHLkV1mwAJ!t>{ diff --git a/crafting-dead-survival/src/main/resources/assets/craftingdeadsurvival/textures/item/open_canned_beans.png b/crafting-dead-survival/src/main/resources/assets/craftingdeadsurvival/textures/item/open_canned_beans.png index 2aa8af98c81e8d84426cc39e4d65abe8e308f8ea..610ddb6bca2c677f50468ebde19f9f1e0b78d5eb 100644 GIT binary patch delta 956 zcmV;t14I162GR$RB!3BTNLh0L01FcU01FcV0GgZ_000AoNklAg3x5hrb=n>?Fm=FH3czJKTacm^(TfoBYLM*BSQ zXen^H!)Qeg%C{m0zzOE8KFbV zNWm>ze6RYj*MuAQKqVTH6fD^cX1b4}a^jv9Te?Z>yAY^Yim^{rX2@j7iT_0j;&oM<&eb*LMlSuy-q5+95ES)H(vA z$&^p0)1hVjzTL4|P*D`6F1Nwb(vsY~d9z=I|C|94(at%1-)CZCf-6_96eTtRFHODL z=gG-Qrl+R~!;o&b``9e3tgMjdIrVxy&|2HlLw_hDIOj;ylsJyr-rgq5GNz`cXti4S zzR&LNE^!>QwY5c(B-HD5D8{4@Yi+Q)_BrF@<4!5nJ(CWMRAavT<_>u{4A4*J#F{!s zoYr~o{j2OBHaY6%)(QSUeLcxfP&Q}j4VA=!k)hBpo_*ctYG`CMKyJT-d^LldwsKD; z#ebW#J+-rRa8(>TkM0zSh9bBV_#+vdl|h*-_5C9<>rMuD0%<8kgN`k3YF!aP?v({aD7dTJ9g!nm3?PK?K+4U7Xp>*E{li1pewa>r0C+b42qBg| zQz4cSLLf;J`r;A*-ED`+<#M#Pwg!Um1#t3$q?Q3-GO?fCW;d}|tZJ=kngA$@f}$ww z(;oBwv&Pup0K|@6Wd8PL8tNsIWJoG7*|guw+xdJ&eSiPTa~$n8085rz!#W6nsj}ueXkoF;VAU$~v%W$v^2Y{&B5ZbJoe0N}GW`>nd;{cv{RBiCg zOECWoK$#fji*6uE5~n)$a{lNLmf^54r?W7pbN=YiUjz6)g2k^E%`e`NO=PLl4VoC| z!tr79AMdhZa~~_8#`&TfB-)Pyc(1CH7Zvm2kADH4${jSSE$qHGLUTOI;(^oDJ-IZOp|=xt!W+@ ppd=c|&(gI8fIz0}TGzVD^&Lw*QU@Y8%GCe>002ovPDHLkV1iyxj;8PiP!v7{-6! zH#57l*=(9>O>BvO$w89PgY3aePVKeLt%uNp)fz7%H3Sv}3G9+XN_tVE@#Mjamq4S4 z=Hwv<5dsJnJp%tR$hDJk^#d)tf44UJDUqg@xH71{_`7Hjv{XnOjT4Bxn+ z4uhRo!0_-e%QG`Pckee&Z&;Lr6(sV}e#jZCot4urx6eL9_SBOUi^aqoIth6`pQlhL zVCQmd{W8nu@_#h`+I`m7*V)`I^V8NeGfT60+uIb2MLIh>tKeE2t+n@WTQB*1Ug~?E zOiTR`T3WLyv6K?mLOMD+1dySjAsHMT^#7iZ$8Le-^ZA{PF$S$QaUA1$ z9+^xA&+~}mDu-oR1VO;U!U9Su1_lOjT{kL~O7?zy_J3ils8lLdMItqe34#EvHCk&b zmCBBg+I^nq`RflJq#eic!!Ue22Wlr>U0u5bhzLrlo&DV093p~k+xWf@pe)M@uU>uC zZf-v5jf{+B9_38rz|_mtR`z@`n&4W@bhJQb@DbV)Gb$;#bWy2U={&bw+N{OH; zi+u3To>?0m9rgR(xW>lDMoMcP8Do+;AR;&!m$s2%R&y)diEi`Kty{eE#pm3sk&ln_ z!=+2Cp16;C?+Tj_H}~K~QIz`dqcK`qT8vW4Khz9-_st}sS3y(?sZ>}jmH1<6iO%Lc z4S%Ek%wKyQtLX$U7T@J}(x5dx7cXFB557Fgn@B)&3MMBfiPJeY*Vb?>jgxi}5mMiax z7_(z_&6V031i_9A3kwTJ`$wb|##X4d=U)KSu71}iW*zyF|B~(bG9Dr3aUIuxTYmu; WY|b7Oq|b2x0000)K1Hfib~ zkVOzIg$h!k;89C!q|mu>sDqn}*!c#B;u0vqu|o%4S`bAVEE+Nhm4bsfI7-1SRXLl> z{j^?(^sZh^a&M|z^Ih(__j&I9e(rtmeGWSM-*v6s2QrzA>wm?SO2r@F+}vz?uC@Ut zCnw!zIbGKQSX^9eYfhnJ&v<)#`$EpP?La&{JdCdE!XTkV*=*L`+1cTd^ov+D3V>zX z4P$_>=5+=J1}K-ytgNhr&fl^io6Wk_ZzWQXfaN$1%|+A_V6{*nl}HeM_?YfN*@rM~2g|8lPpUex zNQA?apJ;|b_n=I;5|H|2LY52R7UsW%3A(BIEe z$loyZf9*j?l0>Og5(1EA8PhaTj}G~~_T_Q_9y~-WCUG+!N0Owbb*5Q6s)nXvS!SrY pFhC=adZ|Z;079l6b=1*${RXjpP8s(sghBuS002ovPDHLkV1ig2Scd=r diff --git a/crafting-dead-survival/src/main/resources/assets/craftingdeadsurvival/textures/item/open_canned_custard.png b/crafting-dead-survival/src/main/resources/assets/craftingdeadsurvival/textures/item/open_canned_custard.png index 1e8e5922b9bba6f508bf63713ac5fbe5968e99cc..1e1fdd49c71db1b424d8cf2d6f37e9373f9de703 100644 GIT binary patch delta 976 zcmV;>126oM2IdElB!32COGiWi{{a60|De66lK=n!32;bRa{vGf6951U69E94oEQKA z00(qQO+^Rb0vizmGq+0k4*&oIb4f%&R9M69m%VEoM;OL`@63MOtxg}2)SSU_Fa(6b z$^Q^Y7o`X!P0AS51l59A0!h745mGs=i!=$yPGgc3f^=zx5Pw{eU`!zP<$PXCd%HXH zrdZuc7fI165~%UOGCMO5JI}oP%rozZs&bvhaLwfnfomraTm&p4#}(^OTY##{l@sVs zys@!?h~S*#;NZYG=djk|oTJym$8x)Pc32K$;3cpct_j z>j}dZ*4EZWCVwL5`GAOM+McH|y~WQ@zU0=;HhEqV@V=^@2efM6dH*4O{Bf=6853Pd z10Q_&H2`CgWh@j_6_KjWJ-o~uHG70#Utb4cd3o6ba;XS(p2nEK5!On486d_X)?)*q zI8bceqXh)9A*>6H=`Cut8jFjI)a!LtS65H{9V15|nSbd~?1PCxf)e#0RxlwLCm#ptrkg=u(Pv6nx=F*o&H%dR31F|_W$|7L?hwJ*7vx09AH3ZSY)0g@9@c|pYhkr z*SzYv(s>O}J5w$!!o8n9*UD_sBnosa4y*Uj4C+Q4=v0KJ?Ribx^C!f1)-%#JoOw5; z{eSdh^3-4>MMMz;z7$-pL=DJOPu3N>&tT#P1cvO&PD7UqVcnC=xPha~Vf6aOX96Lf zxOlQN3dkqZ4p)FLAy2^upWy!V4BVjkDw?@v0WR#1EHPQ`)sQr9C yJ`dYZM6Q&;8A<6`#&w~jRNh?8-VnHM0{;N+cKtSE?XkZA0000XgM4XsVx?&Cpd`P4Nl#3P+TqIqPvUGsY4N5^ahJUq1M6;a>#+3bP+-Ak@Qb4 zChsMcbGRn8?U~EjZuSd-AMf{jzwak`?x5FN)PD-&X0sWMFDxwd+^c7R z@$vE2-*T?&0x&&2-BZs*#i4PnR@;&DeSb?lJUoo+x`{!$7M088R=r;5(GwM8-~<4k z_mgz`$c`A`?(J_B3I!UC29-*sYya4Sa=F|ZEmg^8`w_xpp#L}ku4kjCvr*mh%2JeD zURlET1=V+>iGLst#wBz8{mjl35yHdw1+HfUpr^A@4B-2sqj?gg;*w_yH9pk}%)A-| zV6;?42rn`X!44nR__6c_fZ3TMj?*BY&nJS21&}hJII;*pb?y|eUYsS9$#krB90!1W zUPsq;hAw}mv9wI3vI~GzYaG*@L{$}vBa0M)>fFgF?|(|UrT+R23;2p3cu27|_fG(- zrlE3&pYkcN3J^V!zp2@5*GU=d9zanPve_((eUBgrkV0U}NwUW_mtp&zs+tMUVVQW&vAfHu>f7a*VnF$wfc-4 znx-*$p$>qmcHZ&fU4Q&=4j}}qmdWckZ(}_Y{k2@XGS*U6jdUi17IWUk#tX@F9HbOo r%@YH30@red#&8a{L9jx1pf$L7!wCs97O7dzGC7Ac=5NlGqklR>E(4v zPZtI4-VpTSnnSN|I`n)=(wkdp+eo6IXL*-)mtERa!mpMc+Rh8+`V~PtOM*793N`_g z7;iB)X#K2S?0^1cK^qHt*E@NK4LwnHl+pI?PKw8EoYUh!es~|xL|XE<eQVZ+vDIo(xm+HO zQ&SHaz<)u6fsqfS<2Zv_twx%Dy`Bh`9Z-od$Y i1|7rx2`2cTAjEHo5jrGd?9+w-0000L&bUN*2G8t}MyMm@^ z!0O#riviAGx=eR>Hwz03jEs!boIkK2olbjw#}3lEyB*tHL5(#5RKx&_^E0&WZufJ` zxjEiVeh&rF5Py_Rw6rk#>H~}OGc4!ku+0?!)L4@r130qagOru3ko8 zeE{J2VXzB^Z)z6|99bYDqWt_e1;C4UpD<06WHK2FA`rlq4%3-206MyQdHj5WSS(hx z)-+83lF1~RrZMwz4BIJItql!u>dZx6J{$s8pTVj+6_Kjrn+5<-6ot>vu9F(LfFmV<|5Vm19#yv%Kv5I`nqn%7 zqOkP-4lAZjYT!aeT?y>z~VEzP`ALuIogEARkikqHzGMf`QOh8`2JGKx5;k0RrEF2e+@{x-PpKJ5cpbJkf?H+EDdQ7Jtnm zEdx)qZQ8shfbA4{aQiCRY!=sbD~=LSNv^xL6n{p+4h;~v1kt?*Xx0-vzdwX3A{;$+ znnWV8!7!K0kF zJHIyDB%ned#azrKh!BrniWjj4Z#~!?b16Ak$R(Il4<-Z=T8r2=1$z)d5HB7|FM5z> zMI_)ghd}%bbhC-GJ3BM)`#c^d*@PN(HVyQWFAUEvJoEhgK7ZeV3tZp@!wl)~H)+C_&!S(B5Beuya6PMZFYm;ReDxOC366yXvldn#dU)+1( z^3sjeja|#B5z?KXpKo5fa+xTK5HFZ8z#5Avh!cV!pkE4Gzn6US>FwG%Y@O~mA1*Y% z{^naE>!Ca#kbey0_OUL-6ng|_kB}Y>4!C#s4z17Ts^Hd&wKn^&;NdX)n!E8i0AoqO zcw#8MVvNC}6as(tJfjh)DgbM1Yqlr~ySlpSRW&&43Uuqy!tozpVuA=M`xM>f^q9`xR@=P3ft~1}**a$GNw6r9Eo@oMa-S~>9cji!4)R*-0YTTk= zO=Y3_eQot;g5Y@F-urNLbj+n`Iub>Zlx3;IYK8vtJ#>nF0 zqTamup?`*9SPV4*YpwI+li}0N7DJfci>E#5+_xHjEKhV8fUq{R5002vlh4J2|HUj^x+a zfPXUEKi+FzV2r`#1vYA+;sNNT2en16P649gZQ1|pUr7p7$yLaD-GMOGL7ggX(QTJU z-5qC^Y9)tOeMz2mQB|w~C&cGc!0Rs&yz|iyBCeB*~hO#bOP| zYFNPR>};-h?(QzHp4~@i z_5q+@%2mezFJ6CUaBz@xI?ej}dfoW84v|PC_h`sK5WVP{f*^YHq($TMZ(UQ!N(x`T zcQ_Jp%g)%=(tpBQ+-(KbH3h&DWFjjmRmq*eWoOKs#A$0EVl93FxEbxgAW%daFnhn3 z)6+cR$GsM0IZY@OawNi5K)^4OIf>%}g6%`R|0?72xeM0PUY7GeV<_ao#~w|bpe8q-+!Tb^qG@*%|NEuMo?G4MzXVF zF5Gum)z=gYpzB6epK{n{K{VBk=n3%V>79~3n(DTiAh@kozV^xjOw6wwvotO7TTZbw zEm>m9q3Z_Q2mNd$J8Pa&IUM|_urw`U6mmS^_ww?g!u$$|o&X!kPNoKq*goh-Q?pDB z>=nc~;(xDy0t<5wI4k6Mz@M*nSxMpfXz32ediR(bI4Y1E*K-BozC#w5V|aUJ$V!UU z0K7djJb8TA^3`?2x`Jq``}(e6xGTZpGAzu^l+0%`8Q#A8W_^G9aqpk5z*c}+NQS!- z#6Bb}l46+0KGtgzJ4-)D0?w3Hf~{?2rF}~XP;`-U<;13N=~o9(`G#;TU~?O=w+36vuz_ zalhVs`KoQeqVC-I0V*y9aqZGYp->bp*#;#NDBYMxP`c7Wnn*W7Kya^XcS41Nh%4*H zP>{ASc`wP!d+**mGsnd=HTHwP*oX)@o0+*Yob$i``Oi5Aj(_dg{$o>zJTC|40nktC zQynJo`STwDFf(%kfNpn-a?mGhv;Zgveb&GJ=1{)vxJb{PJ;T*Ezq+^n{f>vH|JuLV zy*oL3W*>x%17sYOBI^cq&Lit42EIS&0ehnjH@|>q=0R&6fGUJgJTU_R>Rb%oObyLM zAtERh$11?~$bXX?aCb4b+ihJ{m0ns}@*-lMh=F~pohPw|Vd>e}gy)`ujZGNUaletm z?cKVMtR@6}ynP9bF@OWW zdv9B<3D@uUizG=xUDtB(Dju%^o9?9_ecyQT+jr^ox|C&&1dl;LKv{zujv&q0+$~WT ze!}-|!{xW``BzGXxw$!&B$l=etgPU@r`PMHT5C792*uYH=P-UiF*(Vn*Q1ow z-X<4ck2?75y5O=YuKaih+3P@(L2!Tb?VL-mtbeXCJ3AYcQstrYz|_4cH7{`B_=5k3>>5-U1 z!P4EuAt)k9u#|?DA`b16uKfazK?rql=;R0JXdM*9R*F?|YDI;DDbm43K`GMMl6pz+ z-n;aOLy~Koq?b1~xR^g2_vD@@&;NJt-TNfa)&H(@?S5f=e1E)LiwlKlS{9{Jsd6@(zDQtqO0&pU(|7;2y-E{cYcUubL zyjL=+X>9pM-G8R0s4RC-RooarH=U;DGV%m?{NXE6P2;_Ni!I-%3vnE1CvS2g=wl~u zqMHs|zEN_y9I;qT3ZTa;=~sJsn%x0l>dF8ge_SW*3s;gpz&<(`%_0D?Scp(4#Pd(v zI3??B0GXK)=AOI*sDda=UDDjVVVyL1{Us0E+b+C}JbwWKs!C@120$IikxJsgjb%-x z0RX~%ee`^PL1sGPUaP?X_>UJW>QQWq&H&Vd91cyos{&wE2aynhhpV4u+qDO9I5g>= z#d?|^DqGHfEki(2T!6ok^a_aeG*pc{DJcN4o^CMKO^3+80%$h%B8mGQux~L5(+evU z3k7u3aet4&fPDbudH c>gu@u00F8p>~N2bZe?^JG%heMIczh2P5=M`a7jc#R9HvtRzZ)_Kop*~ z)0PE9H@oUZ6AxZA@wm73tcfv3W8x2h1QZM$;Ib?s9EjP!;(wKFq8AzHBy*b3dlCVa`4*S@}a-#6{d0NY@LtA>f8v0tXfesG1I8Y=r~sLGkDurU#z zgIyLr07XyUynZ=kAGUyH48a%Ap1`Z;Pr=DyGg{16A;Q_I5IAzh#q~i1Sk`oN zL^5L=kX#$EcYm;NHHg()>@!5g3Cz4k~EH(%jJft zWD;~;ABt`(AdmsCxW@p~G;N$pC81a>uDm;7C!#DA@_#d?E0BnA#{k7bp)k&5GV~T` zE&R6$=pBEAM|XGN#ukTbrY7QU+<@Jv8!1P%->hTkbUI!G4A;VWI-SPPkp<5ApJ_T6 za2vti<9*R|Fc=8-`+exPEcn`OIkDI4i5jXU;!y8QA)n8W-lKtXxjdqKI~@SDl3T5o z(^#76c7MAw_x|TNbVdYcK6>{y1KDhr&Ij5RfdQ6fLA%`+jpvcxio9+%o6u-9{xN_M zxmv9@!G(EZr-A_z@hE(;K8x2ZXDL4iQRcq4Kf(Rm32`XlkCWd3VV$OzOPaGE7>;-U3os)@qVt!(I_y#=i3M}FV8(bwY_7_WuONE+A%H{w7 N002ovPDHLkV1l3eP5A%- delta 716 zcmV;-0yF*p1@HxsFnGT6vsbG!6Bq7>%Kz3(me=|dDhizv6 zw9d?Go$?Dmc+7kAdmrAsdA}bV>3>&CvoDN|jg?$GpU->G*MHX5n%=8vfa&S!(tbYE zGyzyzT54*~P{D5Ejg5^ze70@Z*h51@n5G#TBrqtIN|m;@w&?DQ5{X0ruq>;g4UqYi zXK-+kOeVw1%1Yq=z5%IJs`T;uCb3uyDJ4P(fEpXhy%3AVJlnQyE}pv*3Zm7|+11%e z|A_?oe4av~fPa({03n2DL*+BnCl8}ze$LI^brQWv`bhwg{<@CiIG*2e9BkXBt*s4R z*8vzfl_ZnN(9_cs3c?panv%`kbpR5*NzNGOiAJLhV-3RqKvh*#RprCZdt}i%9KfyX zGrW4Y2$ZWq3!LsudVbTYO|bnV&9|K|fk{IHM1){scz+5-QCL`gQ30uvG%LLz)JkJY zOAO$mMb#OgtV3U}AWxCMF2%PyqYE zxY9Ju`vVT5K!E3qPdxk1&Dn-f@p#;W`>Ozs<4`OV0ch`N4}>|0d?z8mDy| zf^uctb$=N7R$zX4j>&5?%-(*4rfC2?czV}^fO2L28Gtk;^UHHwy>tV|aZnV+t4KXe z^@x^c@B|D6(A|2H;~ibRe7k^9g$Ls5-sD37bX_N#%_2>!Jb-?}+3o>~hC!Ooz5s#e z_4w#W>3F;gAq3lcy2e*OY~0y@q3<$MO7`?Dt3|Kh_~r<8YZ)IMDMccJ_Gq-`9#Aj$ yh%OoimL&s|hX!Z_Qm;Kd3lJ*lk&bkvYW)IC&OLZ1AEf300000K@mf|YV zE`;ogZNLwN=|9k@qmItpd(J&?7o%g0La!f?jnC#i7vB4Roqy*%FI?ghFB$5T{#g{T zr@&_(qZJvb(1{oTFPPKD%=%H_knQ1N6WD z0Dw{yPzn_yf>JG;de~}altVxq08>*_I!#kOIXRh$NN`pT$jbci;fJ><9pYUR+gv9s zc4M3Ch`0M)N4RvGo3|HHN-;h@PO(^YQ&UqX5;Xq=#DC+GTI(nRc(gWTb_cBuXoGET z;%OfKB0{6lNH#Y%3Sk%~*4i_1;9SpqZf-6>!PwZCe~y@^o50(j{J`(uy$9kEZ^>K( z?@wT~hIhXFiy%0>?kvkpx!mdM^?FAbhTd8$r_~C1GXImj-q$T%9Y#6}fpm2kxmJ$k zT6}1`I)97+^5-A(vaqlq&v&bo@}r}pa_7!hVvI>oH36+P*_B>qzyF0op>WU@K5Y^i zP3k<6(O4DIY&Lo2jUlSl>d_8FRIyl0edeNxi3ypWo^DU!e>or`c<&h;9Hh6mm;U~K z1_lPeMBJ#n*0z0peGCn?k|#-Wj0-a}Gh|stt$$XFwAL;+2@eWbT3RBGW7gKzSY2JE zQmL@Fw@0N?p<1mH$1%&x%hc<2YPH(2IL^6fcJ4ksJw0A2m7Gcku9RaQ|MoLkp%Z{K zO^M_9h?Do8IIZ#Vr=Rif)-F3qhL>aU7zSLTP?YA4>dWLSr7Wps^aZNXAHz-Vy(f(kfDqEygULjcK=wpBp^ zXk|=x*K?0IX8{>5*={eMli`oZbzbC>V!Qhc@Gm6y`&+MNC9}AshKQhZjz3ocgI5XP z`eFg^n)@8^tzt5ZOSaqArQ7WSZ{A+a%{ug4PFmrOLOpr-CQ2#12miuNn0@)*Pkyll jobZk>GUg>N@pADW&w9*zD>fe)00000NkvXXu0mjfIUCK` delta 722 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 diff --git a/crafting-dead-survival/src/main/resources/assets/craftingdeadsurvival/textures/item/open_canned_tuna.png b/crafting-dead-survival/src/main/resources/assets/craftingdeadsurvival/textures/item/open_canned_tuna.png index 63044bbc8bd0aa10c715cbc6e3d7156410584580..0a1c1d5ca8711ec580b719142c76f48f0e7beb2e 100644 GIT binary patch delta 784 zcmV+r1MmFN2B!v)B!3BTNLh0L01FcU01FcV0GgZ_0008nNkle|%6#ne< zaTg8>NEAAC=-7q!FEDkx z=hp!^0l73sid0qNldQ9SPkx{M`T0Fyi!J^$5MwL^KmbC{xqq7V7u#A8NgdllsE@VU zz+o(-iC_ROrQ|{gShkH|Fo0I-*V*~GAtDBVC0RJBk@<9Z$X*o+D3wac+cx@2VTUnD zA_&U@O(wX$xxuwksGpufi0R(6)_?TDlkEOm(PoY28D34>hI2mpYu#G~5ov5OMp;Kt$rJQEZAIUlYY_l)Ezm`NYG1F{ z>G=3q&hE{VC7@PedYmtC&ZU^czi(_oCDR;$5vU43$LBI5idx`glUG+G6L zA0aI{c?f$wJ!MXW(P$*^Zf_miwxv?)X%ck1U5W{}2Y=gwJuJ&o`}^;yR;vx;!Zc|Z zqTB68eb4hAv3$Yip5Fc|FEwr!MBv?v8%=O{eSL#NY$@B8=u`Mw`J4}diq z4U33yaPWZ(A=Fx7$T`<@=f3ZwTrMM*%c0$Fqup*tcCPD2{o!!9tRWF|U3bC&9334k zy_k;@Ab+AIoAG!I0B{@!j^ji`9LIs{y6AK|v8T{%HW7v)dc9t1zNw@HBF%SqchT?n zA*FmW;GPY9j^7>jL=q zK89bP2?qc?cHh~2ZZQ*Xv?AgRKLtZ-P9jMr+$e#VINs!%TWs-f@f#-3XO%i@cA@|P O00{s|MNUMnLSTXvy=9RA delta 826 zcmV-A1I7HO2GItPB!2;OQb$4nuFf3k0009ENklF|9LGP^Y|c*Gs<{k% zP?Cs(E?tB&59!5nJFJFL>;~mw4-y7N;Gx4Jcv%o6M6&kaX>XB=m?d}+!9yu{>fp&J zp_UPKc6iRZ6Wd|kZ8zJ0ZJqLad5`z|z2EmU^WOXh4)wq5NPoE-JRVOnJ&(m=nf1lR z#j_n zbow6vsi##Gg~`Y$?Oi=6iUPo7WEB1TNt&9Ph(@DKO-&W8f3%pnw6K8B=i`EAA%s8( z!Iy9tAq4GRJ%7wijI;LaSqA3v))srSv#6?y*XzxDWNAr-g09+Hw5wP75)SjxB|$jM zd&L3;*k5b!>S68qbK1KCDKN|8ct;1(XtbC&P~-@1yWL55cQ@MBR*H6E0Y#Gd=#pss zYNALI!m={sx?86H{3Q&-KvmU}j-g=iUVVMiv@8JJ-GAMzfBuZa;rMN?VHg0YstSNU zJ&kEuOljJm1H2d;ORj`M#1jd!LDCZO_|LfzSo8Ba`zr>BL?TH5BNk(6aF8mSjh)@y zy!o>9^GcbPRT4nKOXzeuGh^G}AOLaGWF-{J$%`ivg~}9EL4a)4)ztx@>pEA0!CU~- z1Yl_&@_(-Z3=KSDeM7@jRRe%$WCW+viLUEq8|72MMg-uhP2GB7S-k4)0)+j`1)v3xFn<69XF*Lt006O%3;baP00009a7bBm000XT000XT0n*)m`~Uy| z8FWQhbW?9;ba!ELWdLwtX>N2bZe?^JG%heMF*7s+TY3Nh0uV_=K~z{r?Ul`I6G0fp zCm+Uw2R(SSwW*+9gf_6fm_wvT|2+#u#3B;CB&lM8tyF~`>VLt6CW>v7C2O@w1e*_& zUEEDJ+sAii^Hr}p+e;pJm|=L~`OOUT4x4JKe-Qq%=Yp!L!hG&7d8^6YdkP=|(`o~W z!#dJOI$j@}&TyR<$QE|$z{WQV%kKe&d?(XE_?77i0K%INZf^E)`wg(L1|=NDGj=}i!5_TPAJj;b2reB}kXOqnl*;&U@D<8-54SSE z-KQz}6mTPLBJ%bW(RViPZ+Ef0)yJimZdddKAe`wUOs#mHe3b%chQZt^M?Szj0bHYS z9z5E$@N_BI;~!u?KmVGg33I7mqWzA82TpduRu2ilCl`RlCqE ze+BZcfI6-iSb~1Obvo`f4eY@I*pm~2Xh^^RF#vZUXpiP+El&f0^V7KlO!fc8*dMw> V+oe6#w5I?7002ovPDHLkV1gS6APWEh delta 679 zcmV;Y0$BZ^13G9LGPj6$;mPr7TSdO$iGF9bnMi-Ic_| zurzToG10%niIBLMu()X4jmyP>!9+uhNgargcnBy|ZF`SvFKT)Y?R#wz!n>oyLBHeO zd%xf3{eIv3-GhH!BXKuAeX$V&eE!w|;NGnpv0_Euq!J$=et#TzE>pQ!AgQPTDtRV9 z3-l@=e$_O@r2+_R0`jxE0;2m|rgH2b)glAL>f7^;%~1MHpjUzYqZ$wHuSAZQh`PaX zobbzscT7#?NM0EwYYRq_DP|JiSzTQXqsB9Cf#WzKK#dFl4e65=7W>s2wl$6i*mH}l zudjyy<#O4m8h=KM9LEXUA`d`99s=OHE&x(W07|720F~-b07Ub^2qKaR8`1|dWQ9es zIQVY2*$HJ^DLlVr9Mi}HuIuWPE07u)+9J=ZU0JFk0Y$yOh5a`eDuXq4B(*rQ*`b+VE zZQInlL)O#-g+gI?005ICEhg;*uGiKer+Hu|{R7fT)3D|Mcb>cf;Ni`y02*Wv?U zTL9LUmw$!}a5_i}x}{c$qbl<6xF2NY(aQ@ZzYxHA8XFrkT4&S(&+~NeRSV9N>izci z_V54z>ftyI>1z;G{*#IKf>Aubh1nR2VM68p$G5L{!0L6@mY3KIMhDiJj$-3Wq`H!| zMZSA6;g30BTjP2p5A{lR76_mLM0fO>CXNko5+I~fsUU=iocO<#egp98G9!&HB!>V1 N002ovPDHLkV1gToKF9z7