From 351c41c0288471ebe17e0716bdf994525cd24a4d Mon Sep 17 00:00:00 2001 From: TGGamesYT Date: Sun, 15 Mar 2026 17:25:45 +0100 Subject: [PATCH] forradalom es szabadsagharc: island structure, update ak47, rework revolver --- gradle.properties | 2 +- .../tggamesyt/szar/client/AK47InputState.java | 5 + .../szar/client/RevolverHudRenderer.java | 121 +++++++++++ .../szar/client/RevolverHudState.java | 8 + .../szar/client/RevolverHudTicker.java | 29 +++ .../tggamesyt/szar/client/RevolverScreen.java | 132 ------------ .../dev/tggamesyt/szar/client/SzarClient.java | 70 ++++++- .../client/mixin/HeldItemRendererMixin.java | 40 +++- .../client/mixin/RevolverAttackMixin.java | 28 ++- .../client/mixin/RevolverScrollMixin.java | 35 ++++ src/client/resources/szar.client.mixins.json | 1 + .../java/dev/tggamesyt/szar/AK47Item.java | 25 +-- .../java/dev/tggamesyt/szar/BulletEntity.java | 63 +++++- .../dev/tggamesyt/szar/EpsteinEntity.java | 13 ++ .../dev/tggamesyt/szar/IslamTerrorist.java | 12 ++ .../dev/tggamesyt/szar/IslandStructure.java | 57 ++++++ .../tggamesyt/szar/IslandStructurePiece.java | 87 ++++++++ .../java/dev/tggamesyt/szar/RevolverItem.java | 16 ++ src/main/java/dev/tggamesyt/szar/Szar.java | 193 ++++++++++++------ src/main/resources/assets/szar/sounds.json | 32 +++ .../assets/szar/sounds/revolver_click1.mp3 | Bin 0 -> 33024 bytes .../assets/szar/sounds/revolver_click1.ogg | Bin 0 -> 8125 bytes .../assets/szar/sounds/revolver_click2.mp3 | Bin 0 -> 13374 bytes .../assets/szar/sounds/revolver_click2.ogg | Bin 0 -> 7202 bytes .../assets/szar/sounds/revolver_click3.mp3 | Bin 0 -> 5376 bytes .../assets/szar/sounds/revolver_click3.ogg | Bin 0 -> 5104 bytes .../assets/szar/sounds/revolver_roll.mp3 | Bin 0 -> 21504 bytes .../assets/szar/sounds/revolver_roll.ogg | Bin 0 -> 17811 bytes .../assets/szar/textures/item/bullet.png | Bin 202 -> 905 bytes .../bullet/defno/pistolrounds_incendiary.png | Bin 0 -> 1579 bytes .../bullet/defno/riflerounds_incendiary.png | Bin 0 -> 1512 bytes .../defno/rifleroundsstack_incendiary.png | Bin 0 -> 2303 bytes .../bullet/defno/sniperrounds_explosive.png | Bin 0 -> 1694 bytes .../bullet/defno/sniperrounds_incendiary.png | Bin 0 -> 1699 bytes .../textures/item/bullet/defno/tgmanual.png | Bin 0 -> 1581 bytes .../textures/item/bullet/pistolrounds.png | Bin 0 -> 1595 bytes .../item/bullet/pistolrounds_fahh.png | Bin 0 -> 905 bytes .../szar/textures/item/bullet/riflerounds.png | Bin 0 -> 1530 bytes .../textures/item/bullet/rifleroundsstack.png | Bin 0 -> 2331 bytes .../textures/item/bullet/sniperrounds.png | Bin 0 -> 1725 bytes .../tags/blocks/beacon_base_blocks.json | 3 +- .../data/szar/loot_tables/chests/island.json | 61 ++++++ .../resources/data/szar/recipes/debug.json | 17 ++ .../resources/data/szar/structures/island.nbt | Bin 0 -> 33962 bytes .../data/szar/tags/worldgen/biome/island.json | 11 + .../data/szar/worldgen/structure/island.json | 8 + .../szar/worldgen/structure_set/island.json | 14 ++ 47 files changed, 837 insertions(+), 246 deletions(-) create mode 100644 src/client/java/dev/tggamesyt/szar/client/AK47InputState.java create mode 100644 src/client/java/dev/tggamesyt/szar/client/RevolverHudRenderer.java create mode 100644 src/client/java/dev/tggamesyt/szar/client/RevolverHudState.java create mode 100644 src/client/java/dev/tggamesyt/szar/client/RevolverHudTicker.java delete mode 100644 src/client/java/dev/tggamesyt/szar/client/RevolverScreen.java create mode 100644 src/client/java/dev/tggamesyt/szar/client/mixin/RevolverScrollMixin.java create mode 100644 src/main/java/dev/tggamesyt/szar/IslandStructure.java create mode 100644 src/main/java/dev/tggamesyt/szar/IslandStructurePiece.java create mode 100644 src/main/resources/assets/szar/sounds/revolver_click1.mp3 create mode 100644 src/main/resources/assets/szar/sounds/revolver_click1.ogg create mode 100644 src/main/resources/assets/szar/sounds/revolver_click2.mp3 create mode 100644 src/main/resources/assets/szar/sounds/revolver_click2.ogg create mode 100644 src/main/resources/assets/szar/sounds/revolver_click3.mp3 create mode 100644 src/main/resources/assets/szar/sounds/revolver_click3.ogg create mode 100644 src/main/resources/assets/szar/sounds/revolver_roll.mp3 create mode 100644 src/main/resources/assets/szar/sounds/revolver_roll.ogg create mode 100644 src/main/resources/assets/szar/textures/item/bullet/defno/pistolrounds_incendiary.png create mode 100644 src/main/resources/assets/szar/textures/item/bullet/defno/riflerounds_incendiary.png create mode 100644 src/main/resources/assets/szar/textures/item/bullet/defno/rifleroundsstack_incendiary.png create mode 100644 src/main/resources/assets/szar/textures/item/bullet/defno/sniperrounds_explosive.png create mode 100644 src/main/resources/assets/szar/textures/item/bullet/defno/sniperrounds_incendiary.png create mode 100644 src/main/resources/assets/szar/textures/item/bullet/defno/tgmanual.png create mode 100644 src/main/resources/assets/szar/textures/item/bullet/pistolrounds.png create mode 100644 src/main/resources/assets/szar/textures/item/bullet/pistolrounds_fahh.png create mode 100644 src/main/resources/assets/szar/textures/item/bullet/riflerounds.png create mode 100644 src/main/resources/assets/szar/textures/item/bullet/rifleroundsstack.png create mode 100644 src/main/resources/assets/szar/textures/item/bullet/sniperrounds.png create mode 100644 src/main/resources/data/szar/loot_tables/chests/island.json create mode 100644 src/main/resources/data/szar/recipes/debug.json create mode 100644 src/main/resources/data/szar/structures/island.nbt create mode 100644 src/main/resources/data/szar/tags/worldgen/biome/island.json create mode 100644 src/main/resources/data/szar/worldgen/structure/island.json create mode 100644 src/main/resources/data/szar/worldgen/structure_set/island.json diff --git a/gradle.properties b/gradle.properties index d728827..9940cf2 100644 --- a/gradle.properties +++ b/gradle.properties @@ -6,7 +6,7 @@ minecraft_version=1.20.1 yarn_mappings=1.20.1+build.10 loader_version=0.18.3 # Mod Properties -mod_version=26.3.14 +mod_version=26.3.15 maven_group=dev.tggamesyt archives_base_name=szar # Dependencies diff --git a/src/client/java/dev/tggamesyt/szar/client/AK47InputState.java b/src/client/java/dev/tggamesyt/szar/client/AK47InputState.java new file mode 100644 index 0000000..e9e5e29 --- /dev/null +++ b/src/client/java/dev/tggamesyt/szar/client/AK47InputState.java @@ -0,0 +1,5 @@ +package dev.tggamesyt.szar.client; + +public class AK47InputState { + public static boolean mouseHeld = false; +} \ No newline at end of file diff --git a/src/client/java/dev/tggamesyt/szar/client/RevolverHudRenderer.java b/src/client/java/dev/tggamesyt/szar/client/RevolverHudRenderer.java new file mode 100644 index 0000000..e094de2 --- /dev/null +++ b/src/client/java/dev/tggamesyt/szar/client/RevolverHudRenderer.java @@ -0,0 +1,121 @@ +package dev.tggamesyt.szar.client; + +import dev.tggamesyt.szar.RevolverItem; +import dev.tggamesyt.szar.Szar; +import net.fabricmc.fabric.api.client.rendering.v1.HudRenderCallback; +import net.minecraft.client.MinecraftClient; +import net.minecraft.client.gui.DrawContext; +import net.minecraft.item.ItemStack; + +public class RevolverHudRenderer { + + private static final int RADIUS = 30; + private static final int CX_FROM_RIGHT = 80; + private static final int CY_FROM_BOTTOM = 80; + private static final float SNAP_SPEED = 0.15F; + private static final float SLIDE_SPEED = 0.18F; + // How far off screen to the right the barrel slides when closed + private static final int SLIDE_DISTANCE = 150; + + private static float displayAngle = 0F; + private static int lastKnownChamber = 0; + + // 0 = fully hidden (off screen right), 1 = fully visible + private static float slideProgress = 0F; + + public static void register() { + HudRenderCallback.EVENT.register(RevolverHudRenderer::render); + } + + public static void tick(int currentChamber, float tickDelta) { + float degreesPerChamber = 360F / RevolverItem.CHAMBERS; + float targetAngle = -currentChamber * degreesPerChamber; + + if (currentChamber != lastKnownChamber) { + lastKnownChamber = currentChamber; + } + + float delta = targetAngle - displayAngle; + while (delta > 180F) delta -= 360F; + while (delta < -180F) delta += 360F; + displayAngle += delta * SNAP_SPEED * tickDelta; + + // Slide in/out + float targetSlide = RevolverHudState.isOpen ? 1F : 0F; + slideProgress += (targetSlide - slideProgress) * SLIDE_SPEED * tickDelta; + } + + public static void render(DrawContext context, float tickDelta) { + MinecraftClient client = MinecraftClient.getInstance(); + if (client.player == null) return; + + ItemStack stack = client.player.getMainHandStack(); + if (!stack.isOf(Szar.REVOLVER)) return; + + int current = RevolverItem.getCurrentChamber(stack); + tick(current, tickDelta); + + // Don't render at all if fully hidden + if (slideProgress < 0.01F) return; + + boolean[] chambers = RevolverItem.getChambers(stack); + + int baseCx = context.getScaledWindowWidth() - CX_FROM_RIGHT; + int cy = context.getScaledWindowHeight() - CY_FROM_BOTTOM; + + // Slide offset: 0 = off screen right, 1 = in place + int slideOffset = (int)((1F - slideProgress) * SLIDE_DISTANCE); + int cx = baseCx + slideOffset; + + // Draw translucent background circle + int circleAlpha = (int)(slideProgress * 120); // max alpha 120 (~47% opacity) + drawCircle(context, cx, cy, RADIUS + 8, circleAlpha); + + // Draw chamber dots + for (int i = 0; i < RevolverItem.CHAMBERS; i++) { + float baseAngle = (float)(-Math.PI / 2.0) + + i * (float)(2.0 * Math.PI / RevolverItem.CHAMBERS) + + (float)Math.toRadians(displayAngle); + + int x = (int)(cx + Math.cos(baseAngle) * RADIUS); + int y = (int)(cy + Math.sin(baseAngle) * RADIUS); + + boolean isCurrent = i == current; + int size = isCurrent ? 6 : 4; + int color; + if (isCurrent) { + color = (int)(slideProgress * 255) << 24 | (chambers[i] ? 0x0000FF00 : 0x00FF4444); + } else { + color = (int)(slideProgress * 255) << 24 | (chambers[i] ? 0x00FFFFFF : 0x00555555); + } + + context.fill(x - size / 2, y - size / 2, x + size / 2, y + size / 2, color); + } + + // Center dot + int dotAlpha = (int)(slideProgress * 255); + context.fill(cx - 2, cy - 2, cx + 2, cy + 2, dotAlpha << 24 | 0x00AAAAAA); + } + + private static void drawCircle(DrawContext context, int cx, int cy, int radius, int alpha) { + // Approximate circle with filled quads at each degree + int steps = 64; + int color = alpha << 24 | 0x00222222; + for (int i = 0; i < steps; i++) { + float a1 = (float)(i * 2 * Math.PI / steps); + float a2 = (float)((i + 1) * 2 * Math.PI / steps); + + // Draw thin triangle slice as a quad + int x1 = (int)(cx + Math.cos(a1) * radius); + int y1 = (int)(cy + Math.sin(a1) * radius); + int x2 = (int)(cx + Math.cos(a2) * radius); + int y2 = (int)(cy + Math.sin(a2) * radius); + + // Fill triangle from center to edge + context.fill(Math.min(x1, x2) - 1, Math.min(y1, y2) - 1, + Math.max(x1, x2) + 1, Math.max(y1, y2) + 1, color); + } + // Fill center solid + context.fill(cx - radius, cy - radius, cx + radius, cy + radius, color); + } +} \ No newline at end of file diff --git a/src/client/java/dev/tggamesyt/szar/client/RevolverHudState.java b/src/client/java/dev/tggamesyt/szar/client/RevolverHudState.java new file mode 100644 index 0000000..1467c35 --- /dev/null +++ b/src/client/java/dev/tggamesyt/szar/client/RevolverHudState.java @@ -0,0 +1,8 @@ +package dev.tggamesyt.szar.client; + +public class RevolverHudState { + public static boolean isOpen = false; + public static boolean isSpinning = false; + public static float spinAngle = 0F; + public static float spinVelocity = 0F; +} \ No newline at end of file diff --git a/src/client/java/dev/tggamesyt/szar/client/RevolverHudTicker.java b/src/client/java/dev/tggamesyt/szar/client/RevolverHudTicker.java new file mode 100644 index 0000000..dbc93c4 --- /dev/null +++ b/src/client/java/dev/tggamesyt/szar/client/RevolverHudTicker.java @@ -0,0 +1,29 @@ +package dev.tggamesyt.szar.client; + +import dev.tggamesyt.szar.RevolverItem; + +public class RevolverHudTicker { + + private static final float DECELERATION = 0.88F; + private static final float STOP_THRESHOLD = 0.2F; + + public static void tick() { + if (!RevolverHudState.isSpinning) return; + + RevolverHudState.spinAngle += RevolverHudState.spinVelocity; + RevolverHudState.spinVelocity *= DECELERATION; + + if (Math.abs(RevolverHudState.spinVelocity) < STOP_THRESHOLD) { + RevolverHudState.isSpinning = false; + RevolverHudState.spinAngle = 0F; + RevolverHudState.spinVelocity = 0F; + } + } + + public static void startSpin(int steps) { + // Spin in the positive direction, one full rotation per step minimum + RevolverHudState.spinAngle = 0F; + RevolverHudState.spinVelocity = steps * (360F / RevolverItem.CHAMBERS) * 0.25F; + RevolverHudState.isSpinning = true; + } +} \ No newline at end of file diff --git a/src/client/java/dev/tggamesyt/szar/client/RevolverScreen.java b/src/client/java/dev/tggamesyt/szar/client/RevolverScreen.java deleted file mode 100644 index 90ca936..0000000 --- a/src/client/java/dev/tggamesyt/szar/client/RevolverScreen.java +++ /dev/null @@ -1,132 +0,0 @@ -package dev.tggamesyt.szar.client; - -import dev.tggamesyt.szar.RevolverItem; -import dev.tggamesyt.szar.Szar; -import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking; -import net.fabricmc.fabric.api.networking.v1.PacketByteBufs; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.gui.DrawContext; -import net.minecraft.client.gui.screen.Screen; -import net.minecraft.client.gui.widget.ButtonWidget; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.item.ItemStack; -import net.minecraft.network.PacketByteBuf; -import net.minecraft.text.Text; - -public class RevolverScreen extends Screen { - - private final ItemStack revolverStack; - - private static final int[][] SLOT_OFFSETS = { - { 0, -50}, {43, -25}, {43, 25}, - { 0, 50}, {-43, 25}, {-43,-25} - }; - - public RevolverScreen(ItemStack stack) { - super(Text.literal("Revolver")); - this.revolverStack = stack; - } - - @Override - protected void init() { - int cx = this.width / 2; - int cy = this.height / 2; - - boolean[] chambers = RevolverItem.getChambers(revolverStack); - - for (int i = 0; i < RevolverItem.CHAMBERS; i++) { - final int index = i; - int bx = cx + SLOT_OFFSETS[i][0] - 15; - int by = cy + SLOT_OFFSETS[i][1] - 10; - - this.addDrawableChild(ButtonWidget.builder( - getChamberText(index, chambers), - btn -> { - PlayerEntity player = MinecraftClient.getInstance().player; - if (player == null) return; - - boolean[] current = RevolverItem.getChambers(revolverStack); - - if (current[index]) { - // Optimistically update client visual - current[index] = false; - RevolverItem.setChambers(revolverStack, current); - } else { - // Check if player has bullet before sending — purely for visual feedback - boolean hasBullet = false; - for (int o = 0; o < player.getInventory().size(); o++) { - ItemStack s = player.getInventory().getStack(o); - if (!s.isEmpty() && s.isOf(Szar.BULLET_ITEM)) { - hasBullet = true; - break; - } - } - if (!hasBullet) return; // don't even send packet - - current[index] = true; - RevolverItem.setChambers(revolverStack, current); - } - - // Send to server — server does the actual inventory changes - PacketByteBuf buf = PacketByteBufs.create(); - buf.writeInt(index); - buf.writeBoolean(!current[index]); // wasLoaded = what it WAS before the flip - ClientPlayNetworking.send(Szar.REVOLVER_CHAMBER_CHANGE, buf); - - clearChildren(); - init(); - } - ).dimensions(bx, by, 30, 20).build()); - } - - this.addDrawableChild(ButtonWidget.builder( - Text.literal("Done"), - btn -> this.close() - ).dimensions(cx - 40, cy + 75, 80, 20).build()); - } - - private boolean takeBullet(PlayerEntity player) { - for (int i = 0; i < player.getInventory().size(); i++) { - ItemStack s = player.getInventory().getStack(i); - if (!s.isEmpty() && s.isOf(Szar.BULLET_ITEM)) { - s.decrement(1); - return true; - } - } - return false; - } - - private Text getChamberText(int i, boolean[] chambers) { - int current = RevolverItem.getCurrentChamber(revolverStack); - String prefix = (i == current) ? "►" : " "; - return Text.literal(prefix + (chambers[i] ? "●" : "○")); - } - - @Override - public void render(DrawContext context, int mouseX, int mouseY, float delta) { - this.renderBackground(context); - context.drawCenteredTextWithShadow(this.textRenderer, - Text.literal("Load Revolver"), this.width / 2, this.height / 2 - 70, 0xFFFFFF); - context.drawCenteredTextWithShadow(this.textRenderer, - Text.literal("► = current chamber"), this.width / 2, this.height / 2 - 58, 0xAAAAAA); - super.render(context, mouseX, mouseY, delta); - } - - @Override - public boolean shouldPause() { - return false; - } - - private void syncToServer() { - boolean[] chambers = RevolverItem.getChambers(revolverStack); - int current = RevolverItem.getCurrentChamber(revolverStack); - - PacketByteBuf buf = PacketByteBufs.create(); - for (int i = 0; i < RevolverItem.CHAMBERS; i++) { - buf.writeBoolean(chambers[i]); - } - buf.writeInt(current); - - ClientPlayNetworking.send(Szar.REVOLVER_SYNC, buf); - } -} \ No newline at end of file diff --git a/src/client/java/dev/tggamesyt/szar/client/SzarClient.java b/src/client/java/dev/tggamesyt/szar/client/SzarClient.java index 3d87833..caf45ac 100644 --- a/src/client/java/dev/tggamesyt/szar/client/SzarClient.java +++ b/src/client/java/dev/tggamesyt/szar/client/SzarClient.java @@ -3,6 +3,7 @@ package dev.tggamesyt.szar.client; import com.mojang.blaze3d.systems.RenderSystem; import dev.tggamesyt.szar.*; import dev.tggamesyt.szar.ServerCosmetics.NameType; +import dev.tggamesyt.szar.client.mixin.RevolverAttackMixin; import net.fabricmc.api.ClientModInitializer; import net.fabricmc.fabric.api.blockrenderlayer.v1.BlockRenderLayerMap; import net.fabricmc.fabric.api.client.command.v2.ClientCommandRegistrationCallback; @@ -91,6 +92,20 @@ public class SzarClient implements ClientModInitializer { ); @Override public void onInitializeClient() { + ClientTickEvents.START_CLIENT_TICK.register(client -> { + if (!AK47InputState.mouseHeld) return; + if (client.player == null || client.currentScreen != null) { + AK47InputState.mouseHeld = false; + return; + } + ItemStack stack = client.player.getMainHandStack(); + if (!stack.isOf(Szar.AK47)) { + AK47InputState.mouseHeld = false; + return; + } + if (!client.player.isUsingItem()) return; + ClientPlayNetworking.send(Szar.AK47_SHOOT, PacketByteBufs.create()); + }); BulletDecalRenderer.register(); // In ClientModInitializer: ClientPlayNetworking.registerGlobalReceiver(Szar.BULLET_IMPACT, (client, handler, buf, sender) -> { @@ -103,17 +118,58 @@ public class SzarClient implements ClientModInitializer { BulletDecalStore.add(new Vec3d(x, y, z), face); }); }); -// Then in a ClientTickEvents.END_CLIENT_TICK: + + RevolverHudRenderer.register(); + ClientTickEvents.END_CLIENT_TICK.register(client -> { - if (SPIN_KEY.wasPressed() && client.player != null) { - ItemStack stack = client.player.getMainHandStack(); - if (stack.isOf(Szar.REVOLVER)) { - // Send spin packet to server - ClientPlayNetworking.send(Szar.REVOLVER_SPIN, - PacketByteBufs.create()); + RevolverHudTicker.tick(); + + if (client.player == null) return; + ItemStack stack = client.player.getMainHandStack(); + + if (!stack.isOf(Szar.REVOLVER)) { + RevolverHudState.isOpen = false; + return; + } + + if (SPIN_KEY.wasPressed()) { + if (client.player.isSneaking()) { + // Shift+R: toggle open/close + RevolverHudState.isOpen = !RevolverHudState.isOpen; + } else if (RevolverHudState.isOpen) { + // R while open: load/unload current chamber then advance + boolean[] chambers = RevolverItem.getChambers(stack); + int current = RevolverItem.getCurrentChamber(stack); + PacketByteBuf buf = PacketByteBufs.create(); + buf.writeInt(current); + buf.writeBoolean(chambers[current]); // wasLoaded + ClientPlayNetworking.send(Szar.REVOLVER_CHAMBER_CHANGE, buf); + } else { + // R while closed and not sneaking: spin + ClientPlayNetworking.send(Szar.REVOLVER_SPIN, PacketByteBufs.create()); + // Animation starts when server responds with REVOLVER_SPIN_RESULT } } }); + ClientPlayNetworking.registerGlobalReceiver(Szar.REVOLVER_STATE_SYNC, (client, handler, buf, sender) -> { + boolean[] chambers = new boolean[RevolverItem.CHAMBERS]; + for (int i = 0; i < RevolverItem.CHAMBERS; i++) { + chambers[i] = buf.readBoolean(); + } + int current = buf.readInt(); + + client.execute(() -> { + if (client.player == null) return; + ItemStack stack = client.player.getMainHandStack(); + if (!stack.isOf(Szar.REVOLVER)) return; + RevolverItem.setChambers(stack, chambers); + RevolverItem.setCurrentChamber(stack, current); + }); + }); + ClientPlayNetworking.registerGlobalReceiver(Szar.REVOLVER_SPIN_RESULT, (client2, handler, buf, sender) -> { + int steps = buf.readInt(); + client2.execute(() -> RevolverHudTicker.startSpin(steps)); + }); ClientPlayConnectionEvents.JOIN.register((handler, sender, client) -> { PacketByteBuf buf = PacketByteBufs.create(); diff --git a/src/client/java/dev/tggamesyt/szar/client/mixin/HeldItemRendererMixin.java b/src/client/java/dev/tggamesyt/szar/client/mixin/HeldItemRendererMixin.java index 9984783..c9230f9 100644 --- a/src/client/java/dev/tggamesyt/szar/client/mixin/HeldItemRendererMixin.java +++ b/src/client/java/dev/tggamesyt/szar/client/mixin/HeldItemRendererMixin.java @@ -1,5 +1,6 @@ package dev.tggamesyt.szar.client.mixin; +import dev.tggamesyt.szar.AK47Item; import dev.tggamesyt.szar.Joint; import dev.tggamesyt.szar.RevolverItem; import net.minecraft.client.network.AbstractClientPlayerEntity; @@ -77,11 +78,46 @@ public abstract class HeldItemRendererMixin { matrices.push(); + // Center in middle of screen regardless of hand + if (!player.isSneaking()) { + matrices.translate( + isMainHand ? -0.18F : 0.18F, + -0.5F, + -0.5F + ); + } else { + matrices.translate( + isMainHand ? 1F : -1F, + -0.2F, + -0.5F + ); + matrices.multiply(RotationAxis.POSITIVE_Y.rotationDegrees(isMainHand ? 100.0F : -100F)); + } + matrices.translate(0.0F, equipProgress * -0.6F, 0.0F); + + HeldItemRenderer self = (HeldItemRenderer) (Object) this; + self.renderItem(player, item, + isRight ? ModelTransformationMode.FIRST_PERSON_RIGHT_HAND : ModelTransformationMode.FIRST_PERSON_LEFT_HAND, + !isRight, matrices, vertexConsumers, light); + + matrices.pop(); + ci.cancel(); + } + if (item.getItem() instanceof AK47Item + && player.isUsingItem() + && player.getActiveHand() == hand) { + + boolean isMainHand = hand == Hand.MAIN_HAND; + Arm arm = isMainHand ? player.getMainArm() : player.getMainArm().getOpposite(); + boolean isRight = arm == Arm.RIGHT; + + matrices.push(); + // Center in middle of screen regardless of hand matrices.translate( - isMainHand ? -0.18F : 0.18F, + 0.00F, -0.5F, - -0.5F + -1.0F ); matrices.translate(0.0F, equipProgress * -0.6F, 0.0F); diff --git a/src/client/java/dev/tggamesyt/szar/client/mixin/RevolverAttackMixin.java b/src/client/java/dev/tggamesyt/szar/client/mixin/RevolverAttackMixin.java index 10b27df..23c1b66 100644 --- a/src/client/java/dev/tggamesyt/szar/client/mixin/RevolverAttackMixin.java +++ b/src/client/java/dev/tggamesyt/szar/client/mixin/RevolverAttackMixin.java @@ -1,13 +1,15 @@ package dev.tggamesyt.szar.client.mixin; import dev.tggamesyt.szar.Szar; -import dev.tggamesyt.szar.client.RevolverScreen; +import dev.tggamesyt.szar.client.AK47InputState; + import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking; import net.fabricmc.fabric.api.networking.v1.PacketByteBufs; import net.minecraft.client.MinecraftClient; import net.minecraft.client.Mouse; import net.minecraft.item.ItemStack; import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @@ -19,20 +21,24 @@ public class RevolverAttackMixin { private void onMouseButton(long window, int button, int action, int mods, CallbackInfo ci) { MinecraftClient client = MinecraftClient.getInstance(); if (client.player == null) return; - if (client.currentScreen != null) return; // let screens handle their own clicks - if (button != 0 || action != 1) return; // only left click press + if (client.currentScreen != null) return; + if (button != 0) return; ItemStack stack = client.player.getMainHandStack(); - if (!stack.isOf(Szar.REVOLVER)) return; - ci.cancel(); // cancel vanilla handling entirely + if (stack.isOf(Szar.REVOLVER)) { + if (action != 1) return; + ci.cancel(); + if (client.player.isUsingItem()) { + ClientPlayNetworking.send(Szar.REVOLVER_SHOOT, PacketByteBufs.create()); + } + return; + } - if (!client.player.isUsingItem()) { - // Not aiming — open loading screen - client.execute(() -> client.setScreen(new RevolverScreen(stack))); - } else { - // Aiming — shoot - ClientPlayNetworking.send(Szar.REVOLVER_SHOOT, PacketByteBufs.create()); + if (stack.isOf(Szar.AK47)) { + ci.cancel(); + if (action == 1) AK47InputState.mouseHeld = true; + if (action == 0) AK47InputState.mouseHeld = false; } } } \ No newline at end of file diff --git a/src/client/java/dev/tggamesyt/szar/client/mixin/RevolverScrollMixin.java b/src/client/java/dev/tggamesyt/szar/client/mixin/RevolverScrollMixin.java new file mode 100644 index 0000000..59c9529 --- /dev/null +++ b/src/client/java/dev/tggamesyt/szar/client/mixin/RevolverScrollMixin.java @@ -0,0 +1,35 @@ +package dev.tggamesyt.szar.client.mixin; + +import dev.tggamesyt.szar.Szar; +import dev.tggamesyt.szar.client.RevolverHudState; +import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking; +import net.fabricmc.fabric.api.networking.v1.PacketByteBufs; +import net.minecraft.client.MinecraftClient; +import net.minecraft.client.Mouse; +import net.minecraft.item.ItemStack; +import net.minecraft.network.PacketByteBuf; +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(Mouse.class) +public class RevolverScrollMixin { + + @Inject(method = "onMouseScroll", at = @At("HEAD"), cancellable = true) + private void onScroll(long window, double horizontal, double vertical, CallbackInfo ci) { + MinecraftClient client = MinecraftClient.getInstance(); + if (client.player == null || client.currentScreen != null) return; + + ItemStack stack = client.player.getMainHandStack(); + if (!stack.isOf(Szar.REVOLVER)) return; + if (!RevolverHudState.isOpen) return; + + ci.cancel(); // don't scroll hotbar + + int direction = vertical > 0 ? 1 : -1; + PacketByteBuf buf = PacketByteBufs.create(); + buf.writeInt(direction); + ClientPlayNetworking.send(Szar.REVOLVER_SCROLL, buf); + } +} \ No newline at end of file diff --git a/src/client/resources/szar.client.mixins.json b/src/client/resources/szar.client.mixins.json index baf434d..da7352b 100644 --- a/src/client/resources/szar.client.mixins.json +++ b/src/client/resources/szar.client.mixins.json @@ -20,6 +20,7 @@ "RadiatedItemRendererMixin", "RadiationHeartMixin", "RevolverAttackMixin", + "RevolverScrollMixin", "ScreenFlipMixin", "SplashOverlayMixin", "TGcapeMixin", diff --git a/src/main/java/dev/tggamesyt/szar/AK47Item.java b/src/main/java/dev/tggamesyt/szar/AK47Item.java index 45c79a3..94aa738 100644 --- a/src/main/java/dev/tggamesyt/szar/AK47Item.java +++ b/src/main/java/dev/tggamesyt/szar/AK47Item.java @@ -1,11 +1,8 @@ package dev.tggamesyt.szar; -import net.minecraft.entity.Entity; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; -import net.minecraft.sound.SoundCategory; -import net.minecraft.sound.SoundEvents; import net.minecraft.util.Hand; import net.minecraft.util.TypedActionResult; import net.minecraft.util.UseAction; @@ -17,25 +14,7 @@ public class AK47Item extends Item { super(settings); } - @Override - public void inventoryTick(ItemStack stack, World world, Entity entity, int slot, boolean selected) { - if (!(entity instanceof PlayerEntity player)) return; - if (!selected) return; - if (!player.isUsingItem()) return; - if (world.isClient) return; - - if (player.getItemCooldownManager().isCoolingDown(this)) return; - if (!consumeAmmo(player)) return; - player.getWorld().playSound(null, player.getBlockPos(), - SoundEvents.ENTITY_GENERIC_EXPLODE, SoundCategory.PLAYERS, 0.5f, 1.8f); - BulletEntity bullet = new BulletEntity(world, player); - bullet.setVelocity(player, player.getPitch(), player.getYaw(), 0f, 4.5f, 1.0f); - world.spawnEntity(bullet); - - player.getItemCooldownManager().set(this, 2); // fire rate - } - - private boolean consumeAmmo(PlayerEntity player) { + public boolean consumeAmmo(PlayerEntity player) { if (player.getAbilities().creativeMode) return true; for (int i = 0; i < player.getInventory().size(); i++) { @@ -50,7 +29,7 @@ public class AK47Item extends Item { @Override public UseAction getUseAction(ItemStack stack) { - return UseAction.NONE; + return UseAction.BOW; // raises arm } @Override diff --git a/src/main/java/dev/tggamesyt/szar/BulletEntity.java b/src/main/java/dev/tggamesyt/szar/BulletEntity.java index 4cc5fad..2710641 100644 --- a/src/main/java/dev/tggamesyt/szar/BulletEntity.java +++ b/src/main/java/dev/tggamesyt/szar/BulletEntity.java @@ -3,6 +3,7 @@ package dev.tggamesyt.szar; import net.fabricmc.fabric.api.networking.v1.PacketByteBufs; import net.fabricmc.fabric.api.networking.v1.PlayerLookup; import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking; +import net.minecraft.block.BlockState; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityType; import net.minecraft.entity.LivingEntity; @@ -13,14 +14,20 @@ import net.minecraft.network.PacketByteBuf; import net.minecraft.particle.ParticleTypes; import net.minecraft.registry.RegistryKeys; import net.minecraft.server.world.ServerWorld; +import net.minecraft.sound.SoundCategory; import net.minecraft.util.hit.BlockHitResult; import net.minecraft.util.hit.EntityHitResult; +import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Direction; import net.minecraft.util.math.Vec3d; import net.minecraft.world.World; public class BulletEntity extends ThrownItemEntity { + private static final float BASE_DAMAGE = 13.0F; + private static final float PIERCE_BREAK_THRESHOLD = 0.4F; + + private float pierceValue = 1.0F; private int stillTicks = 0; private double lastX, lastY, lastZ; @@ -47,7 +54,7 @@ public class BulletEntity extends ThrownItemEntity { if (movedSq < 0.0001) { stillTicks++; - if (stillTicks >= 3) { // discard after 3 ticks of no movement + if (stillTicks >= 3) { discard(); return; } @@ -79,20 +86,60 @@ public class BulletEntity extends ThrownItemEntity { this, livingOwner ); - target.damage(source, 13.0F); + // Damage scaled by remaining pierce value + target.damage(source, BASE_DAMAGE * pierceValue); } - discard(); + // Don't discard — bullet continues through entities + // But reduce pierce value a bit for entity hits + pierceValue -= 0.3F; + if (pierceValue <= 0) { + discard(); + } } @Override - protected void onBlockHit(net.minecraft.util.hit.BlockHitResult hit) { - super.onBlockHit(hit); - // Use exact hit position + nudge along face normal to sit on surface + protected void onBlockHit(BlockHitResult hit) { + if (getWorld().isClient) return; + + BlockPos blockPos = hit.getBlockPos(); + BlockState state = getWorld().getBlockState(blockPos); Vec3d pos = hit.getPos(); Direction face = hit.getSide(); - spawnImpact(pos, face); - discard(); + + float resistance = state.getBlock().getBlastResistance(); + + if (!state.isAir()) { + pierceValue -= resistance; + } + + if (pierceValue <= 0) { + // Bullet stopped — spawn impact and discard + spawnImpact(pos, face); + discard(); + return; + } + + if (resistance < PIERCE_BREAK_THRESHOLD && !state.isAir()) { + // Break the block + if (getWorld() instanceof ServerWorld serverWorld) { + // Play break sound + getWorld().playSound( + null, + blockPos, + state.getSoundGroup().getBreakSound(), + SoundCategory.BLOCKS, + 1.0F, + 1.0F + ); + serverWorld.breakBlock(blockPos, true, getOwner()); + } + // Bullet continues — don't call super, don't discard + } else { + // Block too strong to break — bullet stops here + spawnImpact(pos, face); + discard(); + } } private void spawnImpact(Vec3d pos, Direction face) { diff --git a/src/main/java/dev/tggamesyt/szar/EpsteinEntity.java b/src/main/java/dev/tggamesyt/szar/EpsteinEntity.java index 78d32d4..5d125cc 100644 --- a/src/main/java/dev/tggamesyt/szar/EpsteinEntity.java +++ b/src/main/java/dev/tggamesyt/szar/EpsteinEntity.java @@ -3,6 +3,7 @@ package dev.tggamesyt.szar; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityType; import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.SpawnReason; import net.minecraft.entity.ai.goal.Goal; import net.minecraft.entity.ai.goal.LookAroundGoal; import net.minecraft.entity.ai.goal.MeleeAttackGoal; @@ -13,10 +14,21 @@ import net.minecraft.entity.damage.DamageSource; import net.minecraft.entity.mob.MobEntity; import net.minecraft.entity.mob.PathAwareEntity; import net.minecraft.entity.passive.VillagerEntity; +import net.minecraft.registry.RegistryKey; +import net.minecraft.registry.RegistryKeys; +import net.minecraft.registry.entry.RegistryEntry; +import net.minecraft.server.world.ServerWorld; +import net.minecraft.structure.StructureStart; +import net.minecraft.util.Identifier; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.random.Random; +import net.minecraft.world.ServerWorldAccess; import net.minecraft.world.World; +import net.minecraft.world.gen.structure.Structure; import java.util.EnumSet; import java.util.List; +import java.util.Optional; public class EpsteinEntity extends PathAwareEntity implements Arrestable { @@ -24,6 +36,7 @@ public class EpsteinEntity extends PathAwareEntity implements Arrestable { public EpsteinEntity(EntityType type, World world) { super(type, world); + this.setPersistent(); } @Override diff --git a/src/main/java/dev/tggamesyt/szar/IslamTerrorist.java b/src/main/java/dev/tggamesyt/szar/IslamTerrorist.java index 08747c7..afd48c2 100644 --- a/src/main/java/dev/tggamesyt/szar/IslamTerrorist.java +++ b/src/main/java/dev/tggamesyt/szar/IslamTerrorist.java @@ -13,7 +13,10 @@ import net.minecraft.entity.mob.MobEntity; import net.minecraft.entity.mob.PathAwareEntity; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; +import net.minecraft.item.Items; import net.minecraft.nbt.NbtCompound; +import net.minecraft.nbt.NbtList; +import net.minecraft.nbt.NbtString; import net.minecraft.server.world.ServerWorld; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Vec3d; @@ -241,6 +244,15 @@ public class IslamTerrorist extends PathAwareEntity implements Arrestable{ } } + @Override + protected void dropLoot(DamageSource source, boolean causedByPlayer) { + Random r = new Random(); + int number = r.nextInt(3) + 1; + ItemStack powder = new ItemStack(Items.GUNPOWDER, number); + + this.dropStack(powder); + } + // ================= DAMAGE ================= diff --git a/src/main/java/dev/tggamesyt/szar/IslandStructure.java b/src/main/java/dev/tggamesyt/szar/IslandStructure.java new file mode 100644 index 0000000..213c07c --- /dev/null +++ b/src/main/java/dev/tggamesyt/szar/IslandStructure.java @@ -0,0 +1,57 @@ +package dev.tggamesyt.szar; + +import com.mojang.serialization.Codec; +import net.minecraft.structure.StructurePlacementData; +import net.minecraft.util.BlockRotation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.ChunkPos; +import net.minecraft.world.Heightmap; +import net.minecraft.world.gen.structure.Structure; +import net.minecraft.world.gen.structure.StructureType; + +import java.util.Optional; + +public class IslandStructure extends Structure { + + public static final Codec CODEC = + Structure.createCodec(IslandStructure::new); + + public IslandStructure(Config config) { + super(config); + } + + @Override + protected Optional getStructurePosition(Context context) { + ChunkPos chunkPos = context.chunkPos(); + int x = chunkPos.getCenterX(); + int z = chunkPos.getCenterZ(); + + // Find water surface — scan down from world height to sea level + int seaLevel = context.chunkGenerator().getSeaLevel(); + + int surfaceY = context.chunkGenerator().getHeightInGround( + x, z, + Heightmap.Type.OCEAN_FLOOR_WG, + context.world(), + context.noiseConfig() + ); + + // Must be underwater (ocean floor below sea level) + if (surfaceY >= seaLevel - 2) return Optional.empty(); + + // Place structure at sea level + 1 so it sits on the water surface + BlockPos pos = new BlockPos(x, seaLevel + 1, z); + + StructurePlacementData placement = new StructurePlacementData() + .setRotation(BlockRotation.random(context.random())); + + return Structure.getStructurePosition(context, Heightmap.Type.WORLD_SURFACE_WG, collector -> + collector.addPiece(new IslandStructurePiece(context, pos, BlockPos.ORIGIN, placement)) + ); + } + + @Override + public StructureType getType() { + return Szar.ISLAND_TYPE; + } +} \ No newline at end of file diff --git a/src/main/java/dev/tggamesyt/szar/IslandStructurePiece.java b/src/main/java/dev/tggamesyt/szar/IslandStructurePiece.java new file mode 100644 index 0000000..47e2b4c --- /dev/null +++ b/src/main/java/dev/tggamesyt/szar/IslandStructurePiece.java @@ -0,0 +1,87 @@ +package dev.tggamesyt.szar; + +import net.minecraft.block.entity.ChestBlockEntity; +import net.minecraft.nbt.NbtCompound; +import net.minecraft.structure.SimpleStructurePiece; +import net.minecraft.structure.StructureContext; +import net.minecraft.structure.StructurePlacementData; +import net.minecraft.util.Identifier; +import net.minecraft.util.math.BlockBox; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.ChunkPos; +import net.minecraft.util.math.random.Random; +import net.minecraft.world.ServerWorldAccess; +import net.minecraft.world.StructureWorldAccess; +import net.minecraft.world.gen.StructureAccessor; +import net.minecraft.world.gen.chunk.ChunkGenerator; +import net.minecraft.world.gen.structure.Structure; + +public class IslandStructurePiece extends SimpleStructurePiece { + + private static final Identifier TEMPLATE_ID = + new Identifier(Szar.MOD_ID, "island"); + + /* ===== NORMAL CONSTRUCTOR (Worldgen) ===== */ + public IslandStructurePiece( + Structure.Context context, + BlockPos pos, + BlockPos origin, + StructurePlacementData placement + ) { + super( + Szar.ISLAND_PIECE, + 0, + context.structureTemplateManager(), + TEMPLATE_ID, + TEMPLATE_ID.toString(), + placement, + pos + ); + } + + /* ===== NBT CONSTRUCTOR (Chunk Save/Load) ===== */ + public IslandStructurePiece(StructureContext context, NbtCompound nbt) { + super( + Szar.ISLAND_PIECE, + nbt, + context.structureTemplateManager(), + identifier -> new StructurePlacementData() + ); + } + + /* ===== Metadata Handler (DATA structure blocks) ===== */ + @Override + protected void handleMetadata( + String metadata, + BlockPos pos, + ServerWorldAccess world, + Random random, + BlockBox boundingBox + ) { + + } + + @Override + public void generate(StructureWorldAccess world, StructureAccessor structureAccessor, + ChunkGenerator chunkGenerator, Random random, + BlockBox chunkBox, ChunkPos chunkPos, BlockPos pivot) { + + // This actually places the structure blocks + super.generate(world, structureAccessor, chunkGenerator, random, chunkBox, chunkPos, pivot); + + BlockBox box = this.getBoundingBox(); + for (int bx = box.getMinX(); bx <= box.getMaxX(); bx++) { + for (int by = box.getMinY(); by <= box.getMaxY(); by++) { + for (int bz = box.getMinZ(); bz <= box.getMaxZ(); bz++) { + BlockPos pos = new BlockPos(bx, by, bz); + if (world.getBlockEntity(pos) instanceof ChestBlockEntity chest) { + chest.setLootTable( + new Identifier(Szar.MOD_ID, "chests/island"), + random.nextLong() + ); + } + } + } + } + } +} \ No newline at end of file diff --git a/src/main/java/dev/tggamesyt/szar/RevolverItem.java b/src/main/java/dev/tggamesyt/szar/RevolverItem.java index 7bae012..1ce5c27 100644 --- a/src/main/java/dev/tggamesyt/szar/RevolverItem.java +++ b/src/main/java/dev/tggamesyt/szar/RevolverItem.java @@ -1,11 +1,13 @@ package dev.tggamesyt.szar; import net.fabricmc.fabric.api.networking.v1.PacketByteBufs; +import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NbtCompound; +import net.minecraft.network.PacketByteBuf; import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.sound.SoundCategory; import net.minecraft.sound.SoundEvents; @@ -15,6 +17,8 @@ import net.minecraft.util.UseAction; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; +import static dev.tggamesyt.szar.Szar.REVOLVER_STATE_SYNC; + public class RevolverItem extends Item { public static final int CHAMBERS = 6; @@ -75,4 +79,16 @@ public class RevolverItem extends Item { return 72000; // held indefinitely } + public static void syncRevolverToClient(ServerPlayerEntity player, ItemStack stack) { + boolean[] chambers = RevolverItem.getChambers(stack); + int current = RevolverItem.getCurrentChamber(stack); + + PacketByteBuf buf = PacketByteBufs.create(); + for (int i = 0; i < RevolverItem.CHAMBERS; i++) { + buf.writeBoolean(chambers[i]); + } + buf.writeInt(current); + ServerPlayNetworking.send(player, REVOLVER_STATE_SYNC, buf); + } + } \ No newline at end of file diff --git a/src/main/java/dev/tggamesyt/szar/Szar.java b/src/main/java/dev/tggamesyt/szar/Szar.java index 048235b..27a19b3 100644 --- a/src/main/java/dev/tggamesyt/szar/Szar.java +++ b/src/main/java/dev/tggamesyt/szar/Szar.java @@ -9,8 +9,10 @@ import net.fabricmc.fabric.api.command.v2.CommandRegistrationCallback; import net.fabricmc.fabric.api.event.lifecycle.v1.ServerLifecycleEvents; import net.fabricmc.fabric.api.event.lifecycle.v1.ServerTickEvents; import net.fabricmc.fabric.api.event.player.AttackEntityCallback; +import net.fabricmc.fabric.api.event.player.UseBlockCallback; import net.fabricmc.fabric.api.item.v1.FabricItemSettings; import net.fabricmc.fabric.api.itemgroup.v1.FabricItemGroup; +import net.fabricmc.fabric.api.loot.v2.LootTableEvents; import net.fabricmc.fabric.api.message.v1.ServerMessageDecoratorEvent; import net.fabricmc.fabric.api.networking.v1.PacketByteBufs; import net.fabricmc.fabric.api.networking.v1.ServerPlayConnectionEvents; @@ -26,6 +28,7 @@ import net.minecraft.advancement.Advancement; import net.minecraft.block.*; import net.minecraft.block.entity.BlockEntity; import net.minecraft.block.entity.BlockEntityType; +import net.minecraft.block.entity.ChestBlockEntity; import net.minecraft.entity.*; import net.minecraft.entity.damage.DamageSource; import net.minecraft.entity.damage.DamageType; @@ -38,6 +41,11 @@ import net.minecraft.entity.effect.StatusEffectInstance; import net.minecraft.entity.passive.VillagerEntity; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.*; +import net.minecraft.loot.LootPool; +import net.minecraft.loot.entry.ItemEntry; +import net.minecraft.loot.function.SetCountLootFunction; +import net.minecraft.loot.provider.number.ConstantLootNumberProvider; +import net.minecraft.nbt.NbtCompound; import net.minecraft.network.PacketByteBuf; import net.minecraft.registry.*; import net.minecraft.registry.entry.RegistryEntry; @@ -79,6 +87,7 @@ import net.minecraft.world.gen.structure.StructureType; import net.minecraft.world.poi.PointOfInterestType; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.core.jmx.Server; import java.util.*; import java.util.concurrent.CompletableFuture; @@ -93,9 +102,16 @@ public class Szar implements ModInitializer { public static MinecraftServer SERVER; public static final Identifier REVOLVER_SHOOT = new Identifier(MOD_ID, "revolver_shoot"); public static final Identifier REVOLVER_SPIN = new Identifier(MOD_ID, "revolver_spin"); - public static final Identifier REVOLVER_SYNC = new Identifier(MOD_ID, "revolver_sync"); + public static final Identifier REVOLVER_STATE_SYNC = new Identifier(MOD_ID, "revolver_state_sync"); public static final Identifier BULLET_IMPACT = new Identifier(MOD_ID, "bullet_impact"); + public static final Identifier REVOLVER_SCROLL = new Identifier(MOD_ID, "revolver_scroll"); + public static final Identifier REVOLVER_SPIN_RESULT = new Identifier(MOD_ID, "revolver_spin_result"); // S2C + public static final Identifier AK47_SHOOT = new Identifier(MOD_ID, "ak47_shoot"); public static final Identifier REVOLVER_CHAMBER_CHANGE = new Identifier(MOD_ID, "revolver_chamber_change"); + public static final SoundEvent REVOLVER_CLICK1_SOUND = SoundEvent.of(new Identifier(MOD_ID, "revolver_click1")); + public static final SoundEvent REVOLVER_CLICK2_SOUND = SoundEvent.of(new Identifier(MOD_ID, "revolver_click2")); + public static final SoundEvent REVOLVER_CLICK3_SOUND = SoundEvent.of(new Identifier(MOD_ID, "revolver_click3")); + public static final SoundEvent REVOLVER_ROLL_SOUND = SoundEvent.of(new Identifier(MOD_ID, "revolver_roll")); public static final SoundEvent BESZIV = Registry.register( Registries.SOUND_EVENT, new Identifier(MOD_ID, "besziv"), @@ -239,6 +255,7 @@ public class Szar implements ModInitializer { .dimensions(EntityDimensions.fixed(0.6F, 1.8F)) // player-sized .build() ); + public static final EntityType HitterEntityType = Registry.register( Registries.ENTITY_TYPE, @@ -373,12 +390,62 @@ public class Szar implements ModInitializer { private final Map sleepingPlayers = new HashMap<>(); @Override public void onInitialize() { + ServerPlayNetworking.registerGlobalReceiver(AK47_SHOOT, (server, player, handler, buf, responseSender) -> { + server.execute(() -> { + ItemStack stack = player.getMainHandStack(); + if (!stack.isOf(Szar.AK47)) return; + if (player.getItemCooldownManager().isCoolingDown(Szar.AK47)) return; + + AK47Item ak = (AK47Item) Szar.AK47; + if (!ak.consumeAmmo(player)) return; + + player.getWorld().playSound(null, player.getBlockPos(), + SoundEvents.ENTITY_GENERIC_EXPLODE, SoundCategory.PLAYERS, 0.5f, 1.8f); + + BulletEntity bullet = new BulletEntity(player.getWorld(), player); + bullet.setVelocity(player, player.getPitch(), player.getYaw(), 0f, 4.5f, 1.0f); + player.getWorld().spawnEntity(bullet); + // Recoil when shooting downward while falling + recoil(player, 0.1); + player.getItemCooldownManager().set(Szar.AK47, 2); + }); + }); ServerPlayConnectionEvents.DISCONNECT.register((handler, server) -> { PoliceSpawnTimerStore.remove(handler.player); }); + + ServerPlayNetworking.registerGlobalReceiver(REVOLVER_SCROLL, (server, player, handler, buf, responseSender) -> { + int direction = buf.readInt(); + server.execute(() -> { + ItemStack stack = player.getMainHandStack(); + if (!stack.isOf(Szar.REVOLVER)) return; + int current = RevolverItem.getCurrentChamber(stack); + int next = (current + direction + RevolverItem.CHAMBERS) % RevolverItem.CHAMBERS; + RevolverItem.setCurrentChamber(stack, next); + playRevolverClick(player); + RevolverItem.syncRevolverToClient(player, stack); // <- here + }); + }); + ServerPlayNetworking.registerGlobalReceiver(REVOLVER_SPIN, (server, player, handler, buf, responseSender) -> { + server.execute(() -> { + ItemStack stack = player.getMainHandStack(); + if (!stack.isOf(Szar.REVOLVER)) return; + int steps = 1 + player.getWorld().getRandom().nextInt(RevolverItem.CHAMBERS); + int current = RevolverItem.getCurrentChamber(stack); + RevolverItem.setCurrentChamber(stack, (current + steps) % RevolverItem.CHAMBERS); + player.getWorld().playSound(null, player.getBlockPos(), + Szar.REVOLVER_ROLL_SOUND, SoundCategory.PLAYERS, 1f, 1f); + + // Tell client how many steps for animation + PacketByteBuf replyBuf = PacketByteBufs.create(); + replyBuf.writeInt(steps); + ServerPlayNetworking.send(player, REVOLVER_SPIN_RESULT, replyBuf); + RevolverItem.syncRevolverToClient(player, stack); + }); + }); ServerPlayNetworking.registerGlobalReceiver(REVOLVER_CHAMBER_CHANGE, (server, player, handler, buf, responseSender) -> { int index = buf.readInt(); - boolean wasLoaded = buf.readBoolean(); // true = unloading, false = loading + boolean wasLoaded = buf.readBoolean(); server.execute(() -> { ItemStack stack = player.getMainHandStack(); @@ -387,12 +454,10 @@ public class Szar implements ModInitializer { boolean[] chambers = RevolverItem.getChambers(stack); if (wasLoaded) { - // Unload — give shell chambers[index] = false; RevolverItem.setChambers(stack, chambers); player.getInventory().insertStack(new ItemStack(Szar.BULLET_ITEM)); } else { - // Load — take bullet from inventory for (int i = 0; i < player.getInventory().size(); i++) { ItemStack s = player.getInventory().getStack(i); if (!s.isEmpty() && s.isOf(Szar.BULLET_ITEM)) { @@ -403,33 +468,11 @@ public class Szar implements ModInitializer { } } } - }); - }); - ServerPlayNetworking.registerGlobalReceiver(REVOLVER_SYNC, (server, player, handler, buf, responseSender) -> { - // Read 6 booleans from packet - boolean[] chambers = new boolean[RevolverItem.CHAMBERS]; - for (int i = 0; i < RevolverItem.CHAMBERS; i++) { - chambers[i] = buf.readBoolean(); - } - int currentChamber = buf.readInt(); - server.execute(() -> { - ItemStack stack = player.getMainHandStack(); - if (!stack.isOf(Szar.REVOLVER)) return; - RevolverItem.setChambers(stack, chambers); - RevolverItem.setCurrentChamber(stack, currentChamber); - }); - }); - ServerPlayNetworking.registerGlobalReceiver(REVOLVER_SPIN, (server, player, handler, buf, responseSender) -> { - server.execute(() -> { - ItemStack stack = player.getMainHandStack(); - if (!stack.isOf(Szar.REVOLVER)) return; - int steps = 1 + player.getWorld().getRandom().nextInt(RevolverItem.CHAMBERS); - int current = RevolverItem.getCurrentChamber(stack); - RevolverItem.setCurrentChamber(stack, (current + steps) % RevolverItem.CHAMBERS); - // Notify player - player.sendMessage(Text.literal("*click* chamber " + - (RevolverItem.getCurrentChamber(stack) + 1)).formatted(Formatting.GRAY), true); + // Advance to next chamber after loading/unloading + RevolverItem.setCurrentChamber(stack, (index + 1) % RevolverItem.CHAMBERS); + playRevolverClick(player); + RevolverItem.syncRevolverToClient(player, stack); }); }); ServerPlayNetworking.registerGlobalReceiver(REVOLVER_SHOOT, (server, player, handler, buf, responseSender) -> { @@ -462,11 +505,15 @@ public class Szar implements ModInitializer { BulletEntity bullet = new BulletEntity(player.getWorld(), player); bullet.setVelocity(player, player.getPitch(), player.getYaw(), 0f, 4.5f, 0.0f); player.getWorld().spawnEntity(bullet); + // Recoil when shooting downward while falling + recoil(player, 0.2); } } // Always advance chamber after trigger pull RevolverItem.setCurrentChamber(stack, (current + 1) % RevolverItem.CHAMBERS); + playRevolverClick(player); + RevolverItem.syncRevolverToClient(player, stack); }); }); ServerPlayNetworking.registerGlobalReceiver(CONFIG_SYNC, @@ -759,12 +806,6 @@ public class Szar implements ModInitializer { NyanEntityType, 1, 1, 1 ); - BiomeModifications.addSpawn( - BiomeSelectors.includeByKey(BiomeKeys.FOREST, BiomeKeys.FLOWER_FOREST), - SpawnGroup.MONSTER, - EpsteinEntityType, - 1, 1, 1 - ); BiomeModifications.addFeature( BiomeSelectors.tag(BiomeTags.IS_JUNGLE), GenerationStep.Feature.VEGETAL_DECORATION, @@ -912,6 +953,26 @@ public class Szar implements ModInitializer { new Identifier(MOD_ID, "nyansniffer"), new PaintingVariant(32, 32) ); + // In Szar.java onInitialize: + UseBlockCallback.EVENT.register((player, world, hand, hitResult) -> { + if (world.isClient) return ActionResult.PASS; + BlockPos pos = hitResult.getBlockPos(); + if (!(world.getBlockEntity(pos) instanceof ChestBlockEntity chest)) return ActionResult.PASS; + + // Check if this is an island chest by checking if it has our loot table pending + // Once loot generates we can't check anymore, so tag it via NBT during structure gen + NbtCompound nbt = chest.createNbt(); + if (!nbt.getString("szar_chest_type").equals("island")) return ActionResult.PASS; + + // Set center item if not already set + ItemStack center = chest.getStack(13); + if (center.isEmpty()) { + chest.setStack(13, new ItemStack(Szar.EPSTEIN_FILES)); + } + nbt.remove("szar_chest_type"); + + return ActionResult.PASS; + }); } // In your ModItems or wherever you register items @@ -1066,6 +1127,19 @@ public class Szar implements ModInitializer { new Identifier(MOD_ID, "casino"), () -> CasinoStructure.CODEC ); + public static final StructurePieceType ISLAND_PIECE = + Registry.register( + Registries.STRUCTURE_PIECE, + new Identifier(MOD_ID, "island_piece"), + IslandStructurePiece::new + ); + + public static final StructureType ISLAND_TYPE = + Registry.register( + Registries.STRUCTURE_TYPE, + new Identifier(MOD_ID, "island"), + () -> IslandStructure.CODEC + ); static VoxelShape shape0 = VoxelShapes.cuboid(0.1875f, 0f, 0.625f, 0.6875f, 0.5f, 1.125f); static VoxelShape shape1 = VoxelShapes.cuboid(0.1875f, 1.5f, 0.625f, 0.6875f, 2f, 1.125f); static VoxelShape shape2 = VoxelShapes.cuboid(0.5625f, 0f, 0.25f, 1.0625f, 2f, 0.75f); @@ -1732,32 +1806,29 @@ public class Szar implements ModInitializer { } } - private static void shootBullet(ServerPlayerEntity player) { - World world = player.getWorld(); - Vec3d start = player.getEyePos(); - Vec3d dir = player.getRotationVec(1.0f); - Vec3d end = start.add(dir.multiply(100)); // 100 block range - - net.minecraft.util.hit.HitResult hit = world.raycast(new net.minecraft.world.RaycastContext( - start, end, - net.minecraft.world.RaycastContext.ShapeType.COLLIDER, - net.minecraft.world.RaycastContext.FluidHandling.NONE, - player - )); - - // Entity hit check - Box box = new Box(start, end).expand(1); - net.minecraft.util.hit.EntityHitResult entityHit = - net.minecraft.entity.projectile.ProjectileUtil.raycast( - player, start, end, box, - e -> !e.isSpectator() && e != player && e.canHit(), 100 * 100 - ); - - if (entityHit != null) { - entityHit.getEntity().damage( - world.getDamageSources().playerAttack(player), 8.0f - ); + public static void recoil(ServerPlayerEntity player, double recoil) { + if (player.isCreative()) { + return; } + double recoilfinal = player.isOnGround() ? recoil / 2 : recoil; + + // Opposite of the direction the player is looking + float pitch = (float) Math.toRadians(player.getPitch()); + float yaw = (float) Math.toRadians(player.getYaw()); + + double dx = -(-Math.cos(pitch) * Math.sin(yaw)) * recoilfinal; + double dy = -(- Math.sin(pitch)) * recoilfinal; + double dz = -( Math.cos(pitch) * Math.cos(yaw)) * recoilfinal; + + player.addVelocity(dx, dy, dz); + player.velocityModified = true; + player.fallDistance = Math.max(0, player.fallDistance - (float)(dy * 8)); + } + + private static void playRevolverClick(ServerPlayerEntity player) { + float pitch = 0.9F + player.getWorld().getRandom().nextFloat() * 0.2F; // 0.9 to 1.1 + player.getWorld().playSound(null, player.getBlockPos(), + Szar.REVOLVER_CLICK2_SOUND, SoundCategory.PLAYERS, 1f, pitch); } } diff --git a/src/main/resources/assets/szar/sounds.json b/src/main/resources/assets/szar/sounds.json index 197c40e..cfdbadc 100644 --- a/src/main/resources/assets/szar/sounds.json +++ b/src/main/resources/assets/szar/sounds.json @@ -162,5 +162,37 @@ "stream": true } ] + }, + "revolver_click1": { + "sounds": [ + { + "name": "szar:revolver_click1", + "stream": true + } + ] + }, + "revolver_click2": { + "sounds": [ + { + "name": "szar:revolver_click2", + "stream": true + } + ] + }, + "revolver_click3": { + "sounds": [ + { + "name": "szar:revolver_click3", + "stream": true + } + ] + }, + "revolver_roll": { + "sounds": [ + { + "name": "szar:revolver_roll", + "stream": true + } + ] } } diff --git a/src/main/resources/assets/szar/sounds/revolver_click1.mp3 b/src/main/resources/assets/szar/sounds/revolver_click1.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..d099bc127e333dfef5862395924bc13f2441c082 GIT binary patch literal 33024 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 R)Sn>F-4QqGAP{!;{{pM}tjhoZ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/szar/sounds/revolver_click2.mp3 b/src/main/resources/assets/szar/sounds/revolver_click2.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..4800e1ed048b2e653884b80918111d03384a7dde GIT binary patch literal 13374 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 F{9hEygUucp@ktvO<9G>B z0ex%!d6<5m?<&8(1xGAQ(Zab$43{okl&_!UEEzM9js_?KiF#ML2`PFE!UQpGM`E0W zHV7plK-@(N4yympV1)1isd@~8gn0#ZmblOAdoY3#!VwDMmV^lG`gPfHWeAX2RK?Uf zjt;Q|BfOE7Oo?q%sN*Hjs7T(7{iM(}9LKDmlpSZLvL`_B*1O94$A+k$X?h%;UKbz1 zSPz^59ion#(4+T6fFO-vI7tvvzQ6;d13>;m$&`nZOi+R6Oh6X^Ky_`nJA+`|w_)8? zFlGi;Ct7eD00xlHG^NNi?UN}{)QKo|)EAOVWqY0M6yJDaAf1i%Dq=goH9GAQ}K@Kr_k)wpu16!+tyTXpR5Ge|6_9EdP->=tJoHi(Vyk zNea~bbVvIDP9vHlMWHSFA16oiA=w@>mLq0z=kuM|vXNB?!CceoFk((hJz_Bz*Vny} z3-1G=hq+EH*&yFyZd<++(;rBpDr_KInt}`JTXxIk=l~({^04&m)M^l-Ex(wSZC(XJ zruAW{9CHc|M^SY&d}&{X<#JIzpET8HbT0H?mLt9+Cxh$Ng(jrBPf9Vo zU-S_&=I{_uT-MuNQeYH_%hmrfxa3nr(qItF3_>9#{y3Zp&}9&g=SG?SGk7EkC-4Qo zm3o{Xi;;=93%m_#AXDCkvh`OPar9kBEM~{Ow8!|CSEG

m)%JB27)0{~WAut5&N|MX2*KZlqNC)nkN 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 V`s#?cM&<04o9wd@sxuI_{{zHRt2O`t literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/szar/sounds/revolver_click3.mp3 b/src/main/resources/assets/szar/sounds/revolver_click3.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..f35da77dbe684f9c228031379bb6a0ed188264cd GIT binary patch literal 5376 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 S;M$sMLV}FaHZ)@)Rfl literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/szar/sounds/revolver_click3.ogg b/src/main/resources/assets/szar/sounds/revolver_click3.ogg new file mode 100644 index 0000000000000000000000000000000000000000..538f212b3483ead31852bad8a1ede145e0b336e1 GIT binary patch literal 5104 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 a?75oXxv)xY{Of-IPkU}Wwu64qgZ>{XDwsF` literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/szar/sounds/revolver_roll.mp3 b/src/main/resources/assets/szar/sounds/revolver_roll.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..d343fb947371736f3b09a443ddc378c06a1a8603 GIT binary patch literal 21504 zcmZ6ycUTkM^FF)@Ap{5zLJOfKGyy50DIjX-T{_Z9=vZh13Kl}|Nbg8Tx(F6PkkC6K zO;L~{DqRs#R3JZmJ`XnvwQBjcXnpZS<3H8X8?ebeA}so7Qg_&fGGq( zGS)nbKkorYO)l){koPhhZFV%%b$%&agkFO1=P3KdDL=e|{FG}%THw+%7adgswheko-s#hFF>(k6@`4&m%7t)+ zQ%Y$AQBE`kKpzW=83gS@FzGA7DF45<`}|jB(5uP|Bcf|k{jCb^Cl+5EU$H|U9Rm|) zU_gB_U-YqmmKP()*&(&+P9EiHBWAGHG5+q8#yG znMB7PIThfB0j@BbGj~1$2*21|W}-;2fBD}pNPIsFO42W85rmsvg_}+(*=GB>>M$BS zyLxqbL;VJ)OlTD`1aWVamHn)NRqdsqj9S4UQPBkB?gA@MJ$U^k=mfusW&xyv?pIlW zi=5e;bW@A>zQL9ESa~npf7uh{#KQ6Zv(xKDS0Y>*mm-+>w@h9G4{8SoOXECa53d|C&yZ^V~oGQtW-L=$;NRL0y&%|#|!qcCRHJCc;_f(zv~wX$8YrS~dd9Ikn~dajm#bWmjOzV(T+=5(uD zD_-g7k$z4@%`SfK6y;DjPw}kdx97e)c4X4?=bs(Ef55SQg3wgyN$ztN1Q)l0$c(W` zR%cHvEu?Tj7DX{-6*)X~Bsm7?#N^AMUfmfgcyr0LVsQsFgVZ|ub0lf^TT#bdgsr!MD znB1c88{&|xT7ltW-kRb|kGo5irMgiI@$Agl4s9WFsTt^iT*$ z*37sbIX066rP2#Y()h!FLjZ0RW%}I>|K|ZQWB`z8;W3|yCxLXk7`mA7z#}bOeesw^ z@&YR@aWaeGgutk4qg6OxKK`I4+zO#1A%Isij*3^d)WN(3w^Y7gC@{b>!V6g$sHc^v zIO#wcvXe}Cmb(&P*~J}RBQxkCg%ISoU=Nv%GFyg#a3X}#J&RL>0e<+y5l9F#l_A?C zaU@)WxMs0UPSDu=OMczVU9745P;@}F3R-rt*YU;IbPdO=ZpZpVzJz(ZjdLj`5PS0C zk9Q7^7p2JeHrpzzZurSe9)ZD>Lpi7sc~N*Re+E`;17lyfS%Ey4b&3Ptt*=@6Kvx2m z%PE@6g`w`k3)o2*`KLgg^kQYcSWgFFK>7)xACB`M8%WmhF_HJlbR2%9d=d&+ixV2MJEczPKx}|mQpVx_Y z*CZ{Y1w=3d%XKqJ;MVlI)klH!&?uuWWB*=zjpj=Mu;uuJk-{fpqTP#RT1%UI+Z$_ zbCmNB|2arBk>PI-br!(B-fSuzA^`t)W`~)00C-fZ(gpGcQVf@959{t+tyO&>NfRip z5N6~pfI0h!3%S$NOiq!Uy1J%{@V~_Pb~HzH?x`5!o6cA*3sss=R{ZA})63nvgom8e z+o};$+S?bwpVX`q0%{N9PK7y_j-}B@vRNn4-x#i`4oVzs)qL!4W6$U}LmlyUAoWXD zI;Xc`#Vb!Om79TS*xG_U>C0?Q2def@Wi>bUB9}(DV+!7}ho8RTpVczIB7IikI6yY<=g9;* z3R~FH(g{kOV3+o?>8A{VlZVtQjJit7#7Q$=rV(q(p*J%KBMKcWXM}Z<4^2(R=cOq7 z%_2{`wI3;*6Te`2bWb-oT&bO+1BEieM@>T+vCz+{WOh7yk7y{L57mh#Fe)w=-joV6 z4`|`3=`p#1wdso=G&3dN2Lw)y2Q_A!S@Ts=;a4Bf=mrw~X6?o!LG%$FOoKlY*OM#a z8PFt~@Y_F$9JgaIP6n~lX^(T@O}SSkqUHAjr|%e7P!}OykLOoCo*LrpH9gH%n$RTfF>2YMZ4~g8sQ_3%(hRn}NN=dp(X{)^&o>`*kVyALQ&m7r1d>e`nac z9Z=xrv1R;&T}Msvs*NDi6gD_qMXgv*JYz;Wd)>13cVn%aSX6o7aM`QX%SIZ7Wv3JM zD%;`h|Kd$K_<6l*#N=&oa>)I`X9<$ej^&ih!)h0AGiKN7zmg;B%8tL59Vfe$h4ASS z`SgM*`<$x;O%17zdl|t;mqC?6#+WFxE!i=?X1frD1*S?0#T>`Gtm>>ztLcq=wPzx2 zL=3$kHN|hP2-wnZS7f^~cTK@h*r>5m0~mE@V%kUXx*UyqiE-E^4OPVM<%utu=ajf! zp1_@^VYzt*8|%lidu8Jf|D{Q=mhji#i3{L>(J7-2ZUB3a#cgjNIF5g`?9+Re1qf#& zjbLHXi-Jxr`nApCCcK3S9NVP2otSojmyVr7=xg8nTBgU! z2esLh8o+A-0%^8`ZN~hRxhrEA+Urzk3OiMa@u0nd0 zT>|ABV-hEll_qMCsuR)&3#NQ_@lv?KC(7Pdw>7d-6H{R}r3s^r91{4{^)vFpY1)wI zlF5+QQe-%9IFm@afEohuepy9(#!26}L&zkzN!O|3lJ(uBw;TIs7{AS3;f{#j6Ak@s z=YLwf*wgoB;Caco?>1Tz`=&ArX2Hw;^LwpfFm}jO>vAd8>I!=AfYlPI-@KL@+H2Nn zUdok1>6&pJj#ePuPhpD{FqLqTeuU6IA^ z;YOB`KqXaZ7We8yK0F&2e@OAk zvUkQJsnB4Drr{k@+mFEg$XA!|4CEgf33GQOMT*^BXGMZjE|gw@&D%zxhb|VNHK@WECA}?=!5M;ctRTmDX)S7VS+=--qF#)^>{Fk}%4ACho$E5^bU0%(PYc`T)ea_n zB#K%;jHaSNmsdI4mPI;B6uVYfhIavGEJ8*wSs0BxYsRIKi#7Y)(kUSKVGv!Xt|N=7 z2DdStw3c3il#3>6$amhStNj?r!#X}Hy2sJy+fhwqXhp5!gcYTnc)^dPdKXRPybKbLs^P5 z1Kv38Wt3t_1Q~;)f&%y+>=#@U1lPuR6!xrDRi>IHn!uZybcYOxaaUago$qzsc>&)>&kmO1vq4!^-m! z&uDmML!w`ekh|k%jB2@3-H$6$d3lSP6S4R6USt)#I9JFsD)R8FA>-q*c@FAJq8Hwu zq*KJ$jD`7iUZ{Fm^Jc33dr12~ARQfkco8m-{yb>k`&aP2Z+Cb)`9d5S55eGNXn8t1 zAo^6{?7c6;WGp0TRhC`8;t6_Am0L3OVf|lLDYz2WDAe^t@R%m@ zrM;i)Q1HHH92CM@xWa(nqALoKqEJ3Xk*^b zdLFvzH_u$<-)8fgYf_?iU<&`evVxPZ=tC5LTk0XNYK~Qk)jViM?`{-9gA6 z*!SM}l#fUX6}Q_xZR@G-C<#*g!ECJMzwYAI(lu1j@3?!<&EUM${b20u3XeqB<5lm+ zik_Z1Dbnx@=Di2QvUz#4S`Id;GU%!D58rq5H!VwZQ?(avJX1&-AIMqymhf_@-Rv~q zYnRPDI|GZ!$rcBZHmQ_>#i*IRvVfJ1>&joIYkU9mP)E3{xjAHhW;*!S0)I}6cYV9g zPLF4fzL*`1@pnd&j@ZRCwEZ@c0p@5X=^v)o_!0(Yonr=a%=JU4<7~rXR#JP7h!}{bxA$CL7~f0&vO}i#K?z;*#5s2GbyBlVt>RqIFazSJdTQRCcL@ z<1US;Jl8RtH@~ZPVDY zUMZBt$kj;f;S)=Z3s9Q$7?3XiZ?e>6ImhqhO!(xlG!N(>bhc;-$ zk6WqQNfL~%1=?jyJ#;u$9mF*;NM}C(ydQ!VKtCJ^zSP*>@I5`BHRcEpfXX-Ds@BRL zD(GEx&EA1|VJPbi=kpvcc-1XGYS<9ig=@KNlTern|5ETooe0@~_%wz$&)cVAipP>T zmPWiJ7H3@op<|F94q?yDBf!c{o_)(@I7}8fZWf&}Pe=vkDR;fYeCmkeHw+{>My(gg25% z%!o5~6v;mq{7S!<;|aMhL7|T93LeIYJEao%V;L1 zYM2aZR=-j29HG(yVA45$-A)lq7^#{uKOL=k^o{;5%v=W}$&KUHF1W1**kO}QNKdY$ zi-I}~Mm6%9TdeI66yp{rC~C>QWNX$mJ~<^nzK7LDT4;{8tsA_l=nRQ~xym z5@A8E0Ek;G#MeJaw84$64v;Y*;&Lf|%7?{>axlby1Z-?6}fW#GiqD zt;x~mB4}Y<_EmE~BuhNK2a3-)bCJPz8F5bHQH305d%CAnQm9!K% z*`SPe7a#v7^qXwAzA*yeF2gPbo+bjoN{CUYx;l}wm!~|}%^3>lj>!-z#b@|BLQJ@* z;80=;ZGI-e3PX+3&e)CoLewubMbz1Bdt*I1bf{&7MhBeJa00i6BQ>t|p{H_(vJm1iRL>j@l*W9Cfw&UP9n$erb^hOhe{Pk} zMbCp|jG(S|Lql>(qT@$n)4ZS*y_dv1%_DCy;J8@Bu#EJLW0ka484d|pC)4|pB>GP) zAu+gA)e}p84@1{Vyf7uq{gm@GS9urBA#=yj?9%pzsQPM!ZFbUB&~3!v^Ku2Y*uB_ZC~I*Dy`lE9gH5!_ zhbkphT~Lj&Ox5gE{IwHrzc193gw}slDzShT=A61H{UkSDSPZ5{yWMg-qhzdip&+1G zE449ZJ@7DI^96(cuu6(>#Z$@dv{@pimUi0X-ZKknZlza0{+<3oa;MNv#V7NJ|Dr+p zt;Yd3omPHFfRF$HgTuh6q(U7)C$jE+)j;a)$Y-8chzs7|6sAx(Bh4OAwkJY$sT6n$ zk8(Zm6+n-=l#PTYK$18+kWg3>g|clX#;-21hb?tUhQx3j-9jnQP9QA%igT&nL@x%nqrtm~z-1|QhwW$Z1#x!o-| z{MQ5r`?vRSj)fswT~W&PA??Ln#pntH}_ z&QNOVtS(`1+AwP)Q9K4io%zLyboxnErT##cw0GPZJWc?Ge%y6sS8EF9Jz>Yf{*B6q zmsi28M_|JZ=~}AGVw7c%NUmz?%&d56s*t1755P1D^aIu)AOla9s0i=x_D!mTHH;)H zXj3(#6$?pS!XW2y{n_`YB5W8>X#2c8OMBVCT~>xQ8P!5-S+)WXZ^$;)zaccV{B+Hi z7GXiOkAI{?8mlRbUw%pr)kj2R=o|HWj=tQ+qQEE1tg-1KC(XnI2XOl>BZ3I|5G930 zXF@Ot&MW$b`jY{;D4gMZn%HBpJJzOy5Rkd5o=o^tLLW7P@e)(!h-3(z)hfb|RyU+j zD9p#u6x;>NBZ6&l%1#`2LZKH?F25${{-U}2`cV7CoWfN{ak%9D13mWOW6kTh5|&g6 zOVC4bh`q6?)C2$77l+RVq9d;fw*Dd91D*~(%Tdu&Ug2OyCqjts9aaJo}H1lGj=S{KtZMeRrHnx^pLPbgRA%9gB}jq&(pyF6@T>nGtR7mn}=`T#71Jp{>*=J{`0r|Xk`c- zK_{#j9S0-D$6I3h-wQ^8LYFng7ZR9OA@}%KG(lPY(F?1S5X);7s=^G(W_4ycx>xC( zbk2Zrg2F<6r@ptAf&@)}k@&+vp|ps$F(3-EV~z;TZuFsxeicWPaLV49Do0gZL=dMf zib?su`leMQsyOe!K=W7KnDZ0JHtxq`=Z-uj)lQ2ebvKw| z8cK>>Fb0Jcy?hji&QU+1iUGne2{rlN(3?5@?zMos<^ywWq>g{p(mORrvRv zy~NTVKlwOc9VW;Ye3tK;z?ztC8uUq=vpCmPm(r5ox)xuDA#{wQ2y=yoFqJ~i(#Ggc zT4ps(W?Ia27wML{KUw@#C7pCyqg~^eYIcZs@ znmntq>on9U!eBJL`$m5t)bdB>T>nv0VO(L4x`r0(|6$ zkt)t=*#s&B5ah1O%GFEfLNSc2Y|T;fK8sUk>=n+g{bb+hG=E6JlMX86AO5S5==Gw^ z@BA14OOEmw&(x4W93AXxU<}A!%#)uLCBu_W8$4}YA5G&KiV<4z>?D&yLxcd!PrDs? z!EeGaI?H_O_3z{AyC%tL;U6KfA`DHh2xi~ac88P6V{s-)@r$@uN{I~--Va!AE81MQ z>-I>jy2$_Le4V^Dqw-uYlyo!CA1js{UTJ23FGxdaY5TwPt&{Tq{Wj+Xtj3XaM10WRY}ZA2PUB7U znlL&tAv_Yh0NGn0Uo#5%*mmhg#IPYal)*RtRmYg3$j3}NR5b(tds2~J5)K#NV&<%d z6*jJ)ycgmiZm!ufy`vCj#q}*27HVgfC+W@Uy%3(LJz>j6g=0`;QjH|BLLLLgnx&Ul zTjcRy#2>w2(;bGSvE2%V-6~8jLu&A)5X&Y&9%;6{!S%Fsgxi6ub#TAfIA@&B2@EuykS*({V_onAz*lTxOFI}%@FGh=-PcfAycRxPbs*(!jDk^8>7M3N=XvuDLGC~N=O)n{hT9yT zT>w0<^dLLr00C7tm;Y1$|8&bbH=&MpF(u+bzP}<{rJszOR`I5CFk*&wX*K!LTiYCs z1SUpIoqSq_&RIO#(6pO-$Fy05I}O%Vx`I8?{OB>)L#^{EpH6z_G3-cKS6d)=KMAQ6 z7mD|tp<{V#YsuDlA~$_xFowVJ(fQ&;X{qxiJhbC`_hm0!t9$Ht$DyF8%1kIQlBxxp zC?;1qTCF(Na)uCN{)uX~<*3&E(@5lvaNpis;FY^x$EfVjU!0Zc`wKedbMWoeWYiI> zVa&G^J~Di}U4Fh;hiBi43zZthad;zuxj&ZvDJ3I%;VFI56)F05N@B;}>WzTAsG~In z0shH*f+drF9J;Yl4=9woz1R_yEbz6}n%$}9l=bY~343a{+MJ1oX&aWDcP)ljb{iKXfXyq0Ggrjt2?2~h_h zOsl<@Z(r9$U-}s7f*K!xqAg$3Hno_&<`%ddZk<6ig?YRwOjb5c+ntNfW%5K?Za!Ul zBr$S_a9Xu>OD2B}eZMjQC~8AJ@Kinc>L$7hc{00U@ZTz$lNg7tn@Q&lx~{4A4wZC&=_Y-ocqi(Q?1&0)#>i}AII2J(r2r!o?a!0&%F9< z^H=yG=v(UKm(JZtiM4UD!2H9uWj9sh|84epwi9ft&NDBY%upK656&^7LWIv{DNO6n zOgOOVX6)T4JCtE$#_6i5upwGL7eIuyiDrJxJ}u(R=n! z{4;m7|KUIXFHy{C`m^ot`d48eYN`;Sv>{P7E;~Tw>IwsBT_nG)-x%5-E!By4NfX0f z6QcIL``|(nhkm%;g1_hKKM~Vc{RF{LisC97Dgw%DYj>Mhp=M z)lr6Wvi-c_K<6GLaIB>;^{z~U6w!1mvS7)s=ah+F?11ZL@TR?HS{dysDYDS}l!tQ2zDrgudOqI6$^fWUd28TbqnB^VKAc*FN zL3rQXCnPW8SLmpar2LOFyQlS32=S;f6_a0uORvL2FJjUMFVa7jvxw*SHRVmb7*+Jc zuN{*l%#FQ^QeuSY7q8+XFHvJqqNM&$s|2_9q^Gt7bWD7x+2E{w%6|1_8%dU`bQ8JT zMl&hfj3N3SGq3aP9b2D&J7cfxfC(EX6J%6k%&Z;1pOTk|azaisxR9Def>K4!Af3gi z&?T|6A7ZVTFqOj_i>*SwS+2t5ZeVixO$?s?#LYzuQK$2NaW#Gy-7r4F$SjwT63g4E z$T;2|e5~8e{F+03llk#E(GA;vmmBdT8E#Q7rZQOofM=SY`}L*J9e&mhV3fZhB|12) zPBLdO7U1=#P7zm(e(K+Z1&4h!YApZK)fGxjk78Xg@<1oV49_`GJBN)acg9eI-1H3W zW^T`?N4Q~#q$T*=s_s)kZiZJEvE(7Y!&cKo6OHrQ+7fv)0BZ`C+mYrE|Id@?y`s$i z?EleDibx^n0sLr|fA&B8oB!q_7cc}uL|-Jwj5s2MDF$Y9?KP;HPUSh){o( zoJBg?w9-MBEC_d0QOC0S_SV0A&2UmeB?Ir+TYRJ5h((TFVvw6f6h90=Q58cs+Dvq9 zIHI=n119`JM2Ac=`}bR3Zu1#I3QI|<9jV3@npx=BB*2=VZ2b+q&^`_w5P!xOxtwUm z#9-Cu7m5?w1|oFv-Y!odFiTkR)!#Yo!Z5VEN+cwN>$-^zI{z4Q%ELPu zviLqSZsW$T4_6ai$Hs~UL8(_*Vk9RQL_p%@t4<&U{I9g5_i)Ro0V&ULEhYNp$!LR znrMbZn5)xF8Jk%R3`FVee;ysQdu&_&a?d01+_RyN+2G4KF`Ahgy}8$o(&-(KCQen> zj0^wLtiKV#nvzVVm1pN>Ro`kDZ+-7M`?Cz0!Hb&ROf1(wJejw^6iO|v`Bi;3Lk}^| zW_%LQ3l@Ldn0q0m%h=WQcF=6F!<(;Zru3>7o%>rP1svFB>X$xHDUY022v`h5eFCX0{BhRsQmO zt1TuBpFn=9))_$(39S}v4%d8z&;zSooobFkn13FRtu{`E3*DIIwT8-x091zBfB3IM zqTl?J|Ne1y|J47F>OaOawMV`G)qi9G!RV#EOH~=N@H}CVNufsxKJ7Nv^yeHM2n1G5 z6)}4qLXAN4Pq>LVBFh?z;Iu9&VS<=YBb8*=jvksMT0S@sA|yDW7MW>TNGk(bio7Q> z$$;C$YYY1nEEW+8ax5!M+iVI=>WmTRagS`Q3^8Yu=T*MH0Y6){-&d+!s~ z^Tw9;kefj7SS=RKpPpIY*g@urph#R_d~>F*+8z&zW+gC0u{atC?SvGf{|koBWR8d$ z^-~EjtFHX!*}U@CEQkK{ZvjsNAY2wplr8^6ea2{b_XEYnMYX%C2>EC7w&fFjo0CoD z#1dfs}25F)mk`W!|BV#DMBy6niv}*!gi6jCJuo}b(+;qTc*qX~& zv~kRKhh6Cco2uyATxONS3OGtWrHJ1sT( zReWW5KVCX0Zoh17+F}G5rjLM#w|WJsmF%Id#v}nGBNw;kRCTJfbKNjC7tuh>-sKXT!Qu-PYmxKn=$?ykuYa$?! z(jqAJT%9g=2v{G_4t`(r%6RO~%A|Z| zTZ+)SfoF}Vos7^BCX;yCI{l1sBTm}#%f|iHqx$gw+ToU-xPhcbg`;ln*iz@%xXRV& z^X%u3wcE8!0sAmO>8jiX1tYm2&W8-<8FiZ*uaEXf$j0Ch0GRsZ+U*yQln}`f`8+Az zaD1)`i!jVtawytExTu$fJRb2>9xBVO=0wCS(Y;Ym?lQ(raVuQ!hT)Q8ami#=H#J*mz6`5r6Y1_Q~k0 zTP92vz3zQOq!fmZnj{jpiE@}Fx~5xDjKz}xvFo0sl0@0w6L;vT6uZF>vl!>n2-rON zC_!&so0nQN7$2a5H60sn`aEkfd=+3KrU44ZM!l(WT2vSGnNwhb#ssoq>o-T~u2i%j ztK3x*hX+e?_ap6mS@dOZn^jRs>u2}AdC@T1^t^QP``P;;AVs`qQaj35+DS~0?-=>7 zxrkT7=`r*2->KDt?11Ml1Lu!b2NQ4O)sUH`gTsOSSAQ4el|H<9`*+%JPtD?^xE%oa zWOstK%~^MfhFMXB#S|ohwaeTUW&?pU%i-~5Bpvw6@JCc&|9R&N>2{G5?j1BZuytyN z1Lw{94QaC*jPjr}wJz6?pyDeO7yY?NV_@LER-_18IYNyiON19%uA%xxhzwDHH9li_ zY_gTEo~;VCHA{OU9+L6`!e#XItEl6tXTw}!NK~`XlvVYIiWVuG<>$st-LW9>1q=JK zI9NXQQ*a3W>(UtsGC7hR!p;bl`QC@{A4rfdwQvw&za_VT0PZ%iU+^{^CA3S z+mT#vOw$ny4O3xGemN7{dl^y%y|*3IY)nBI%>gzL(rKSC1e`+55^9ftP80XqE7;yOL8z4mVO=<2l z`DhMrqu#pi6q}z}4t6{Vz^pSTK(584t;YK8~vk7mtRd$@)Y`GT-T zK?T$37@66D7~P6UK{KZ?s2D;G3ImV8RoMdO8_@ash)r)wjAw2}JSn3*&+?(V`6LIZ$-d_3|I@re)Dmu8)bbq8?TYV+M z_>rar(JO9P-5reYJ;@kklM%vLwkA?rMo3XabUIZw7r`NP38P9?0J>0pnSrQsbIsOJ!kYMt}%{>>t1Vw9$8nO$a%vE5vG= z?$yvkOl}izp2@x+hI%_ZlkK-5D?Zp_R*#Wgkja%ym2BA<`it#+Ykkv(PM#XhMV-^x z>F#nP(=qCMY1UM>>SI4+WC#)+$etw*%~|o20*E9HI1H>B#>&Z zbcHAZxu7VC5MakfeysvR2iI(ld(^H z|5@eO5ENvxI)TH2aFoO>=bL*F#2czu_WU{G@8_fD3 zxARoHgw+ME%YCPomMT_0YAGi@Gb04YqaLMk+AjPwv>kqK6+*k}kMbF*M|Tg_-Qxp6XgqIr{TN$lQ=R=w4&`2H8mc`Dw1pYiZq?ASrnr1~8QzY%~I= z?xgQNaL*+DQJRj|&7bMHZ|8lyiX$4u-%yQ%YROw)g;5>lB3W`&HWxDSBD-#TLgKK?W8#-jnueMITuL(vS)zK_xz4DStn4)P23_V|KK znG}REFgg!JBxgb3qCpHu*N@yN5fp0&!nmlP4h%|D-fD4(?moGLV8t^KZC~?@G1BNr zMU5jWDkH-g*yt+eix8~OLuVi{{G3I}V4MiI_dqf~1d4K+K$-Qj#@e>~EW6!7qS1tY z`)7dqg#CqQtU%urev4%&vZ6p8PeAK=)mAXLw@563;6Pz$OaMQC!t_NkbE&*%bVoc2 z-+qW{x9AZHLhD{NRll;*<{zgSwmt_iolMMvFAOE(9GRzRhO+F&2wy@IPFYN6<}Po_ zB$H{wu`tI@AWW`oj!HsXhA}QP!EWgNwY~F!1P;2eA#ptON$eFXv)8-sY8P*x-#)l$ z4Ht{pr|btG1AFL@!8*`iL+31DR+e^m`JsQ;(N@lX+jgw~XgxWJ40;c_E9p%VHJd-} z`ayZNimvt9@NiCqobhUs2o7f8MfoyS7U3Chfb}Wt89I~p^Mf%xC*(sJqa{9@WEI__ zA>n*oLzWHUt}&3-UP;$lRR5l}8!~rN^V-V;zHDO*mN=HA{uUCvn$u+$fNnjvU$G-` z!I?e%SsY_(r5{xKdrPUBCct~E2#cuk^O551Lm)et3D&#_SpeTs> z$?4UaPHU6i^j>RS^@^P*Yv;z`L-rm$vjlhcjQ+7cz20UdCml}(^^I!!4RXPrZ-6*E zduS)iJrPbDdsg$CLN{a7F7H1}yd1@TM}VxxfRD_DLKvmZSU8L(HEIS}@2tKj+ZcxUPe|4+}GfLZglS^h4S^f$wy?7qi;B*t8))@ zFyEYhT4rND6a!#?QYgLjPol!2%C=R1EGs7Z*G-TCCDq|f&w_!5(>W40nJ#q80u@__u+ zpwA)iIT~Zt=Y-I{7Hn-EVjpAeyz<}Sem5)TBHS2@*Io6?h?WUI*695n=t)@Sjec8Z zstlHONxk=KX$>;ec+2XFMvtet`Lpw#TME~2_ok%OvnH#WclS@f=qx|Yh|8Q`7%D&*sN7S`rpbv9zrS;_rg+L+mp0$#-F30kt^PYV` zS#}`=K?P%#B0V6b&hd$gI%HNIU}L=}+b9{mZv5>OEk7T$R@eWiT3*VSZe%B1_2OG=M;_HF)E z_L$f?(WqRe#34K z>kf6vLwaHg{Qeon;dlGbc4X#)eKOyE45Z+?HoVTa)wx!LEJG{ZRya`(7!#u0`yIg7vM_(i0W- z>WF&QDrz$@d8WoCtLdZm%QOrlBF_VbECZ0vF*G84aw0q<1x(Qnl$XC+mX*g~VvHm<#f z00_ij9B#4eF3Kp{u{g2HUpljS@tUyN)NQrxJ@7@nJ8D8%QP_c_Eu{;@SS#XQX%q{i z6mImD%@3DM*;k@jskG7q`ou!AUiO1C(sYWa#J_B)fRUF=w!@z=B1sZi9Y6nzqOwwS&+=uzBORvlnBOl&nH16$mSf*PXt$>A?w7qhiTeln289@E=d2_y4p0^*8>J zNZ~Q~Klv~GrxO^LHP}&AMH{cscZV~oyyRv^b_xD{th05$;^d8Cg@{phVeTFU@X{E# z>w%f4##Y|F=v{;Hyv`^XyCvAMyTnqC{uZftp{&R!DKET)9b+V#cv{xY-*d2RO#jjq z1ujb(dSikS$>&=?3{Ym^r6(`MQb|Z0IOz#~dJ6@0tu8@ProhkqxDsodF9!z&ns^qYe0f6pK`}ggvCgXUGX7PnS@<J|SyXd@tq3*T-&p$eR z{!lxuEG>lUd2e3|OL^(0uuz)TG0zVl|7s5CdJ5!%dZsYlo-xwS@)%N*M>np~PL()pIr%v_S=I?{=Q zAzjE+qSHpmtWwD-Au7@hClrN!=X*}|{pI`v=W$+-&kvvX`}M=;{eHfmkN4+wdB5J{ zXj`AcghbgjQjDNFnlNw`4;mhUy+f@_@2F91c;oI$0M<$`Qff=7I_VuV<41t#WM`G4 z^@H^4_Uy}!h~s%+Fzzq@GgEyJ$A0JkU4!jUZg7CV;y(`* z(eSjf#}~}vif;t8Ifz=YBrw;!SYW>`JDq39co2FQh3Tr$<>>z8Y5m)H=d*!xS9z)+ zE&}Nc4`G^=?d`K>CJ~YK5K_iM8^;7zOj8*;7G71uzVPGjH8$5*323VGD0<3*H_2#~ zvdsAdnM)d-(o6!Vl~$@s_q5&aYl5;p={2vOOdQ`^_6grrdiI1^+;c3qeg&lE3V$B8 zUsto2+Ecx7tWnJv8>wF8K-}kWN+iQ+e#2fki52p1gp*Z!ZZ1X~IQzB#P0VEb*lIH` z(hGznd*{8!aRY=K-tq5lZEnDsB9><#a$@7X`z7^yxq5s}E~vC^11t-!Bds zS=jkXk6B8^DC_c;=!y1sna(o-?(MS7Bj?+D;iAX<=vN%y-YfM#q&er~Gwp?Ceeo?) zCD;6Ruor&|lEN_MZGfEYAd)j>o1z91PiHcDjYWb9xjgiIW4Vhiw#Qc$?n2wIDi-X& zUCqvb=DSKvWFaS#K@_|pGb=BUMXIR~Q2GZioK!fzucjCDR~*_T>^?|uqq~923$efq z8LVvaM{LA%yxXJ~raDQoj2GpB6e~TtSPwcFE#Ub;i4iPJ#a} zte-OgQkQPs_r(T-;#^M?RFV+%La3}nFj7g-LhqyXTs48Hh{jgfyV<9uSY8Bw^ z?K=UnL*ya%zW&b%ImrSOoDwhisk=s&59!Ug9a05{p@D|2j$TFM3av}iafiuo&|qs! zwzi&n7#umrv1V|pYW z4WNTj!~Qowmf5PS-V3EaSF{Jaa(yyTWh&{7BW+4x9}>s}3Q2L7ks$=D_ZRcMo}6#O z=&S@e$6TMGT=5y`DYzpRzgGp+ehCLm&zNFpyVQtEZXk(@u1-x!#G{M1OnoRE}8Wi`wDzP}PxO6ixqeC_aRUp;a<-z>@a z$W8e}^Z^ zy(9EeBTF(d9slOJ$>`JPPZk_43^bm}d%X!Ocui^Oa4sC=zzv$?H`P4&&szx?N-et| zo^NGlMmB5`q6su*6~D3ZvX^=43@UB^Lv@ztAbVukY|NzT^+iWGK~0OI)2&Uec!oC5 zSG$30&lS);>Lfsnn$4$%DY~{11Im5`-`do{v)c2a(9-;fb3;%RK{MG$?7}&F`$4}? zzTqy)a4G&uzE&m(jRWT@8}?HoH(wL2Wl5qabF4)^zBcFMXQQIT9>30?_0^+Xlb|pN zM)FHhM&2O{pG>x-e*M*;^p@#IM>mlPkf;C-#6A0ftw^8+?CgOI3| z{ffG@J*TMpW7}9Gw-YAW`y@EqVYbp>?bQC6gX<-kkaN}kX>URmr9Uu?M`xVf9^V$#xIH8(7#HDuQ`XXs@!@BivL;TFkgq71zp1qHCLL z9XaFwG^fU-F6p$|RHj!kfKs-l;MXyIdk+M9vh-X^)bytkl1~braM+9*WI)nSMUN4N z&4W48vrvQZW&SJbUvjuTA7g1syR!1>;yi%9bxrWK@AZ!pd?pNq$lai)!bh?YT}PuU zd^`pXQ}(bwm2_M^$|UiQB-6PnIbM4&sYKc{m1+zteR9=#5fir30+l^ILTG z?%|Cn%GtdLs$nm=+;DXrvlTDfaV?7;qil~!=EliU!q8%vIv!h&!Hi@jBhluWP?8gl5Ivf*E@ZJQ53Ir0>j=mEZiPk~N+*3xpKpseUqa2E|U! z$0iCoHbw*)v~jN&hdz|cXaD2M=I)Spo;stJOe7M!mX=P`gV(It?GAQYs>9%7KuK+L zZqnWUHs*AbSoyhu$!7;+<%$r5la_9#U!vkO$BT`0!AW8<&1vrATyOWQ#B;~|e>J`OZWqQpf4()#BxdZPMv=#)eMdKxQEYGX{@FmtGhxAzE-Rv8Q)shJ-L-a`n99@- z8H92Moeqw=^Wspwwe;fKp<}~`&&IVs-HR-_J-C*O`62j21MbpLUB)Ku%$&8WFE)x% zyYaTl7NwWp%Ril7m|sjBefL|kmGe6v`|X1{rEzq-v7>*i4T{WBwsewTn^tTZbIo$Q zbP6RP$>PA&Qh-HH`}(-~({J~9KW=k9VYD3eS)Bbp&q^-uFThmPJ+z43;*?l0_3A6A z3)gpR3X8)qQ+6w6CbyT(9bL5cBSidgI3A&}brb@Rkvn-k`cV|vV$TcwNyh!fRpj@y`tHWH%r0<&t=;;JJ-1LIDHZ@anDYUjo%vLok!I#fnosqnTR zOV4#1cSToyzUk6>Lc`Jpq`g+dxwISsbwP35u{ni}58N*_?{vjm2tg|FATKQHWxJ%{ zIX#D+Em`LO4gi+QlYNZfCjS%XUbGyls0Agutb_bH+0%kMguAB0!-y=V{` z8l))x0W@8;F1AH$|flC{-AgZKg3NKF=0 zQJd%J+Z|rbSU>G}bbK=6(%tredoTFesvJ`q?Xk1cHV-fs(R)yxo`lZcFQ!S#w9s7) zJD5eY)nWSU7;IBim2vZ)cniOq7mtNGmcJDYXC=W+6@F2cqfDKsn^Isa(%X^x^eg;J z!4WpqrDcey)(AvO)|N`C?>A#~F+Opwij~Fx)wyK;o(NFfPXOT!uJMlVw(?!IyIFBVgcm1mZNl;TjrL1zqLr+8QUkd+vhNRhUtqkx z=nA{rZc?9`Fz>r8LEY>70-5rbL-Lchwj~KIEEapr??LUB1$JkV?}0#OL7=~|^K1*d z)95&!#Y)hMJ6pxK279S5IL&=Rb(+;=kJ}m~GOu{2bS9^Jxp=$b?64Tjxqszv5m@Fw spfLpiECu-$2Od_U6lb**PlckXcy-_a0OTJHY7EtwQ&Z7UVrUQ=L5mtglt|2Ni7_f}YN+aPtEr}{DoPABB_wDK zF%+E$9jKB>i&O_XptQGE=ezCiXz%ay{XV~cp7*+*_pkSQ&vkOvK6^ZS?X~w_>$5id zA|kv1A>f~@ShH(*BS?*(or0)ClKwbMro?YV2&MLK5CBN+g8ZVrkbN5^|LfW)xsh^Z z^2|4xJwN~ZwMqDQO;TV6x8S63b7P}jM#d=AMuBbMFDxeHkI=Bg)?iu)m}YFTk*E<( zA^$E05&ccI?e=;@02=^6#KVz}^mxS#n6jP6)&*6&@k1+H?c8M2R88ChMz!M$H5+Q| zvIBHaO%#%VjRL1_ljSpVZK0YO+Sa~B={u~!P__jaN7;yj+5PL`U=azX+CtSb7ElOzzA!LuQ6poET`w)Y#RANXFmv`u7qeJY%@{P$%}wK=dKEK7%yje9o}+G0 zrAyjn)6!kcJ}YNL*d{CfZUbTKT$nCqdmEnNXbXOUm_@IA#;9$Rat6`@x-CNk9jX8n z0zgfjZf>2f1WdU@0=NwTFdI+#TXCv)&Z*vMSCxcr_7epF2ml51Ip;Pw7d&?^LiiPF z|GHo1una~!e%&U&iaP^x6w5{lZx#DB4&Y~`%H*OrssCbfDjX+W zC*ErDq;jFgPnw2nw@|Be?mAjjk$c7BRb~A6otKry<6x++(oc#8=6hAisqvHe9oo@; zbb^N5h>IIv3aXSD0Yf^iM+<3Zy1LVyiaGgF@6{I3T&TQduO_^w`KO&Si#Y^uvQ88zq}`}M%C zv~)^aN*Qxtd-Yp61TU)D1K&e$EMC#l+1~z#TDu51J$f-g;urrkK;GMlZ4E8-+^CtH zt=Cw2SOVGfo1GdPLjwT&-lL6fa%Qr zpH9qy_vgf5-_kI@|91cGIylWWKw*zdWE>S-RvGu!WFzMtex^(mzWbSDZfgb6;Kc=8|j{!PES zC<_4CqV0M`T6#qbm;!{0P2_DPU?a9MBXj3<3l=a%2$v#lN>Rko(x!6SQh7C!^(zYi z+sLwU8Yzt2$(ia5!u*%0>U~@wXppC|sx}=4;Qfm;08ohDJYlt^4ZY=` zcLZM8V4pDhzVJWq{~Kb%Mccf$0`Gq+0UP?uO6D(nnSb65?hB(Qg{?fn)#HDC{oif1 zfo<8#Oj!L#TVO+0lmBn@>wo>R|9=JlU*`Y}-0Gf!zaUL{kcr3VqqiUu8>zgpSVGtm70aFU<1O*GeiU8nS zs+|h}L4Gt{aH0R-UH`p7Ss+^oh}8ufywz^-6l@W3rvoSzov=z}K)~LBnRPe5uFckq z9G40%{6c^y0Ei8@8{p*}iW(@i9k~b>p4C2i3hmX=YRceytBr2gMbcmno@jg-gTg|h z@FWFLUwOL0_H+hk9>~mU5drLk0M%TwAMNGQ>K(ZZChd1E4wGoS7s;iFakLs#mMAm^ ztHS{Q-fCluB9cg%|3tG`%V0zMacu_1vq?e{5#Y!rFj*CFLWdI+YM zh5;LI2BRR?rBy*yIltz7J~FRuGDC8UO|7QBP^vBf+<-IWz3!rPG#g;bBZv%nI~{F0 zm%!3!AQ1EvGKe^&c6~7+N{<91=rM~W?2y_e1OS*mB@F&DJtA-80F5m`D#~$V({|Tt zkPjKR*das6HGWlj9%uX#RD)dfwt~C)tA^rVDh~m-5oe)C|E2d76L6rWM+z+v2A zJq!6z0n`idB+~v4gI~N{?n7;`4P?u2ru7*`2W)UHY-@KbI3gg=0v{%Z&6J)p=)bfw z+W`Q7iEILDgjBqpFnY?82Ix@jjs4OFo?Zy5CuT$a0C*F{(0?o*~YIB4O9Nn!|~&`x|$^q$OhH%(sp`!!`>mDdKm-) z&am4z4_8}XM8LK3ee;c(4G;YDT1UwFE_&=K|2$*G?a_E<*K|~KJ3QnN(vS@g$sdLu z42?Eq%tmb0Had<#%2r0t-!L@@4GNV7P9LwbJMKLi{Y_bXILSpFvj!|7FR zl-Mwl^yuloQeikc3Z& zP*CToD<F~|JzD+|@YdZp5 z#(!Jj8mWMY$Zw5mV+9ux`DJ2@04INy2R2OXjrhVhk&`Qs99=y#>)lpXSZnj$w%9!u z*xeRbYYS^j%pS}x3p1>Rg@ug;7K^dMV6fO-*4E}$))rQKcI`B@w%N1C#@fnukGTZ~ zi?P61+wMW{!tUOKwcfSc%EHooH^zFG8P?L$eAg~B3u`Ra%E}Ckwy?A^v#`J#TVgDC z?Xt$0VeBy0yUna@%&aXid#x?8dv;+gt#)C-9|p4vZMEAB<7{niZj7}yHOE?F(8gf3 zCgxy18%qqv!rao*8iO^*fTb+3XhTyAOEAuA*DgaNuvtqpU3~*9upXoy(%jq}-D?K{ zWV`?V6g{vg&DrsaMxK86q;sv#5_YljP;TM8&aJ>P5?~Lt1%Qhuf1Xrmde|CAS@_WV zY&tpo<##Ppac~hAP+xaZBy9(7yWM2H5ahZTqH~I2-3QcvB ze)=wPOB68hXvP*3AAI!amCp3omxJ#*#3REAQf^LWX81;@#+=@Rh;Jw7R+IYYVtT%P zMZ8hkX%h4H@UAL`i|m(go2JOVSmD9bu7+83Q;p-joNtm_((LyRi*e@`%02_y#Xxbk zteAa$T+$9Iab3pfB9rY|wH}S6wtMo4SW$MMAEeU4^mz1@4k1i@_~%}6#%;){;P%?m zOHp-9G?Gsd#|tR+s|iDKZkuYkc;Pulgg;#?sJvH0Vl2qFZm?W3uJUG^eWt0>d@ruZ zbbCfwLDaN?|MjFgL8pLx;)pV}C*Y{&`0nk8_WeDJKGQ9D&@SiT1Wb`^=^{6Lh;%m~FP+e|Sef0^BYwYH?rW<9?lvLL zrb8m(w@`UZT%FFh{g225p&MZ7KaBMtPr=fXabtuG4^dCEQ}(iA(pBB(i@Kf6nDU!y z>w+trvDzd&oqI-K)Oub`T;X*BP*8L21HS>3wgki2Y)vzHo@ zpLA@w^rp$0brEqm@7d#C*EdIQ`>0U_1+as>N8gzbi+I%jdO9^-Jkc@6MFh=$*9V|B; z4OJZKkRPw~)2T=ubF=es8p`r+Okv%vU5d&jI?)Atxz>v(4~TuM+s$0|q*cegkChxC z&uC*R!oK8&U3eN@`a-9CCDnr$j?Io@c`dT}Y)>YUg(XlMd7aD)KMoR16{w93g8GO? z{7neP$XtSbVE5)oP0quVFX);~*b^P!F3B)4)f`GY+0vWXLoGdH%s=u zd-r$tbwrsL&rw8$!4GB#4~9n=8}J~(o#&O*n^;cwW4Np3?rgR)w*B^~2CEE}@3qUH ze$+KFel`kA+*f7a<9+VC(Lm6Q4d(TW&uL-8&sr`l6j|b+X(DUJ(!ytA&J&Q-Mv+9F z?0twe%)-fIGhYY?YZkOIvKKYXgUmbT6#&ls8?Bnmwm^e7MneA3(c$=TXHTtjk@k(}8S zc~h$M24>4ssGF!6-c74LE~CWVr@}mumAzO?mUEFm>L9KC0^`(RCs;~CK2;u@H-cB* zdxy&F4~jJ(-8)|H;&{J$t~&8+zGF|s{Y$sA7^_LmO9|l%mOERAYGPfxs90;|%lGQW zg1TyBUyhv}mGV}Rh#3F7m*cZ}o_#NBR;CN^)=K(}Tk^f+73?+$clf?slD+rsmn|MH z_k-jS>Po9@$e3y+5iq?mjknyPa6<}}#2a@r)~c_lwl2BEDss<2Ah8Pk)ydA&DaNOx zjrJ9tTU_p5TjYw<+$A|d(}P0f0hRP%Ny+TBn97mz3`{;}7DYv?Ntxjt6fa2RUh5E?F=G790rd?m#EjZZ1lsF^y^UTHakCAs$jw%oK za;684EAW$u4(nTM-;(~ILPE~l04)cah9eLDej1>?WS?b-hs3#Y>)Di_7u}XF&qnbm zSmpj#MYO_|*PTV~%18H0rpQl)`brBArW`UcI1LHDx|ZWw1XEH`%5hviVO7N?lDzme zUXI3VgwJ};S3aZTi9Tn$vHW{`f^8cm27+$sVqR-r`%R?pA%x_efi4Z!#*EO%QoXQI zD+5J!w3tRg{k=WH?;<8$w53@~NwYwU|BNF1*z_G%3H4O_=_<|+FBybZ-MPp`;(d2I zGlu3(st;gZT4ukSy>>j%`wslQbB{Z-+WHs(%H3UIe^h%ry!2hFqT346Wn3#;kKCU9 zP1sn9kih&h z*C2~7q;biJnwDItmEpfa?&8XjkVaAZ%Hr`qRd&S63ysm`9#~p`I%ZzNrYP!rRLM8^ z-xjlxe3{Ht?0`(9Sv=OsQ6j^#mTKS+8UzUK>@9;D#iLKov8!TEdmPy5%EOD^52?0* z+NWiRRT7+{Q+wMU=_PW+vL#1bi%?$nxujO4;==cr-1*hs>nWOVZ}wX2pWp4Yz@obH zC||ow8@QdoRA^Iita-5K`C7u@OvbRz?ee0n#x3N|Ltc}PJ^EAydO~STO2T=Qi?Z0i zkn5LxnB6XCy9M>F#MHM!?7$}UVq@57CNBM?e@xZ@ZVN+$gI@KOH#5xQ7vk&OPu~^r&4Tu7^^g4dk8?9t-u&9rW9rS1#r1iD?d&xnJ&*A&1D$ zqt*MDxTmKe9<0#pK~kYvLjFx z18E6lVrxWUJ%{Pbsfsp_bZUp?Gxi&jjoH*@IVw{r;!z9wOiVyrSI-0WpT|2-PDU6A z*KkCqLT6$z@j4G^1}f4KhT5&0lTvq|&!J<6I}5sqJ*xV$^PEz0BFb9}QEa z9=l34`y8u-O2@a1J$<7E>T?F+u}5UaE4L~(ua{%C)H61l*&po!w-Igrs&}ofEJk_T z2mEtEM^!B=cR9(-nikdXW5j`g3Z2%F-xk4EDc4ZU>tL0ONFv6#-I(JTWr4+`OQKS; zio1DUymSecmvYfJ^`?gURW=?yCr@r5`lb!~WjNq6wRI~Ud<{aKA{wSe+Kc?HEfuO_ zT3Jr6H;mWL6+Tt|aVjKDW6r(DX&053Btb+hHHeNq{`JNAojv`~h;gX}#{C2r16qZ^R8`V~C zV&jHc%Q2PLTSJNIb4gVRUPLDa`7PohPa`J`_v&Q4sSolJlD!N9O3f!91G;$XH;f(0FC`>oGI^r(-$2m$(rfp<+WX zBh6e^kI~%g8+ep71b=m=lOLHkHIn$l?&I>LOBbC-VN-Kf)HwdWtf6U#kd{n3Hh(|* z5{#oHR=Jwk6x;>R+TVr^>QweQTPM9>_pIz%i^w_O?2k?6d}8PAkbNeKjUFbYKm*Y! zDE1}Cgz*oJDf(>ZBI~)yiKnq-pB)cKd_QU_HROyif?^>vZ$BKJRZ*H;O5nQ8eqzQj z>r^;_zLy4*SJ5vA4=aouYFzX0J+n9ZxE5w&$2D9Z+N?KS!`#RmdBmT~+FQJsFw5XK zROn)gP*C#xUd{m9>emJ7`i~rzOkLlNGNM@a>hU&3*el zJ(ngEjxn6vnOA-&A34sLXb>b}`FJP&ewj<$v!w|Fp z-F5HdWFCsQ1o}$c=#}y|G7t?46yp(`Ax?D~=E5ZEeMSU&KLLN=U65^FghJWXSxuat zA|~tZY3VTDJr>mTJXXhe{5LUTCyQ;$;fU6D%|+2z$!bh0%=%aq%X*wP%=OW#awqW; z`f1(Go`uCmZ2zW5u@77$yF9LdT5B85BGOv8()$**?CnQ3HfHE}Pn?Nqoh|HqGP-p7p3=^aPy6SP=naEa?!(td z?-QPX?p^5?tjf|xJ8e|NE|x=E)2}6nM1)DrX_td=kjc~+Q$(awzoPq zt}^TnV7dIxRpR-Nm5oV;3YOUlxtvX;D)XmHA`QMxbX3wr8M(G}aN2eOd6TGa*OEn< zcG&s7BBoK<;e+!oBrT>MFV5l#VgDrZs46Aws_xZ+JwPf3(%|pp(z4|&^MR-A>!AgP z=soFSMpE9e7HIc&M?JZG@cQl}&7ebGKt1^O&Cj2U$wfMN-cka#%Ds_yv^I=U0}LGS z9TD~iTrVq?uB9s8;Oh7tu9ad8$C#n{=UBRKu&(sBB|lqmXQQ6iiQ2bluE6}@N?>uB z#6CPd?T2VFVVYZiQIRg+y}sBuY$r+J=3s-}oPC$f>GQ7qqc0-S)-KmPRxe$i=09)g z-$N~(SoP!t-ir3Et{wS@+#wI9^+wjgR9<<0dN|oyQ0ECQiE||vf4*ba7hg~P4BTR_ zMtZ4==Hs{{>pW!Rkew0`x|FCozE}SB$w(j3w zl0aiTP8@x0+HtV?s7djsEcPF*Cw75aWorUWhn4ZSSPRirGv9h8iS92Eyb|2ArZ+1s zEt`{Z?k~RQ9CN+cyRXWFqC!25%y2p(`d405-x5Nq!NWGXQB-DjS*VgId6p}icRuQw zr$2czA_-=jWIVo-^|xz);(%{lT3MTp^yV-&A&e$()2Ixe;sC&ZAB#2t6{ZBuMUR z+4ip3zc=`M;acTU7zd&3icbFW&OxU&M)2V9Tou}rdiC*Kw&krSEEX8mjjmF!8o%?W zCSR28D`|>3zcrvGb8F?D{O@|Wj<`V)3^YB%He0o-+If;fs#`KIsry7%9~;wWTn23n zrsF3*M8Au3z=`r=OZxO{-PXT@VfTkQliQ@+rrMrq7#m|29})%2lSIlre|kMP+dmik z=E;6*TEl9&I!T_iE>h`x>mFC`83!9vS`8g-lhowsPiizU)pOnH6P+?Lfx6Nz@cN}R~Cq40-;&SH#mt6b{ z>}BUun};uac(+*oXYu^I5ag6IsKq9+)J_Vs1Dzaf0{s{-ut=f#yC#z5x9R`{L>y@D z-EsusJ>xSs3(jo7dwnih6OoA%<|$WGGLQPb-x3(b z{(E!PCG%T0pG{i)A4V@mJRrTMZT>#i7wVrq|JlC2mW-zQW5KQ0+m7<{sD8wq$7=l2 zhLpNyOFWC}5YTW!yXAoIU7@dAukj^a{cQFO^@uw&ih}&r+!XNps=Ar5{nR3()^kp; zYCe}dFh?wqzv|L^hJF94xm3eEl+lI7&JF@hmS>#qMMp91`!!w||jn^kL)Yf%&R0fyq+ak@~2?{UlV z=>0VF*`VQTEFDA84kBoGf>c&kZ$!c2bI#Cy#rxo5GSCl45osSbzH!*7n4#x zM$%O|JKAa#G*4hYXT6g~QqLkAFH5ikrx`=#!mi!_P@^F?+4(Y!T7~WeYFAap9{%I69G4|PL=$JEtemzh%K1CHVL(b;R-bzjnP#Nk$s+2 zGk!gj%f>%)0X>r7Ok6_aO?In)`t-Q#EH&Fz1Jn~tgy*@aPI&1U2+@u)?uAO&Y7}^T zc6#;U1;knRW)Ev5wiPExsQ8-s^iOSj>rK_K!VHD7MQovCWIa^not92t38@H^*Ftr6 zH@2n*mE|tTZ6Rm#skCL!F0Ax$o`w{$sK@J@%AT`|L`rAOROrCA@xYueorUkQFL5oS z6K=9n!U{4xz}ZUK*jgFy@?nC?cA3phV2|4l_v=;FiSRdlA?~7k?XCsJ<~L;3IKQ)Z zLsq30!tWI8J(Zf8gz?&HvYB>RB8j)29p(D-{`SjNtA8JGN?PBUY5C;ZlMOh8F*J=2 zk;)3g=Fg#H(ke|wPGOYI`RqA&FFor%)^j@ckE(E5XxOHK z1GjZ-ByYLVUEn==$p-?GQVF!miokqTP$RNv5_ho;KRv1nX>Xw(T$L70Gkd*!$x01tGy%eT? zezjLv*57@R;-KOfd|ZPQL`b_aJ!C*e>DdOY1S?7!PD94UYSL^F2jZmb5-j;_y`%ou z8vCsKJPt*aEqJDThtix%ST!2b#JAWaIvf z;?+;CdOvpWYh}2Q;0Bz{*BmPB;rK-u8-xn$E|z!yCL@iyGe|eL<5C5FFTP;sJZe|j zq}G_TO^o4$?@sdHamoCu7-2p|xGkF_T+DT-55@`zeUWIl2$darUb;J!&m4ir-}=(` z2Eiu{w|+S0f?tY19Y^KY(hrrNQ32fvgF}7>etE&-TO!(@o9wrRNywg!LpL!}%)!N1 zpI+p?s2F!HGUyQHkfk>LlZ8doWs|TWheMz#N2p{a0RlcDK*Zw{Fnln1Ybf2yc?LB3IL zUJP6(X-K{w9&zh+q$PgR(bWgFkF;YybLlzzL*8)ECR_CGY+x*iB!Y>b zk1M;$f`SU>LK|nRoy|?LpxikLTiB}`?flMS#=IvyJ^k%cf_}B7YkkOG}8#&bD`X)EcBW-&6hPZxRg=2!;@?wWvP7dzlNi&ifAs#*TceC`iQ#T4Y zpoHEwsl3vrdH@x=bv)2ldaX*`OB6GBGe)UGNEgZAOOVNfWuNQoHEV^0&~vQfT%2HO z1_X2kg~xPe-Aj&Cih)qyYNUIB(Nq$;QSzRYjIA44>(m@*X$iVpA2uF&a+NCRq&7z# zd2;#w9H>+N@#)c@&LA`@HWmta2CdWu=?G^Fg(!(OvzeGP=`fxrpIqW|*?EcWnMu>A zwx8cFt*$V6@S4Fby7GLR)G`U;7n~-d$ssf4YBFP^4N9>Pf9S1C9d4(^Y&`XI%RY28 zu1=a$ab}!$yY;n|0Xd)G(Vf04P@UH z9d8@?O?a*$|Ju{h$4Up682=W< z5F_xu^Z9e0l7GR^?>~iu%P^jgLVY_xv}j&us0c)hlrGEyhcg=_V$EgDeA}ajvx0@{ zvM@DXbIw<%3Zg7C(T^P(D`K2j6SGb3C26{k!u3=%jLu!XM=-Yu)Dm2jjV5lk`hsidc2^*f|F4QrwS|Yu5@2dU|(*5c_jf(xm_S+9D8T zd(9YbDGHSk>SuZrTeA27lX1G+#cauYdmq2B`?X8gQj!YwbJZJtrBTDwp=>!v$W(aQ zepHg_w^^x9$&r}w>(A@tJ%qY!U@}lyEW(ZsIwI**TqFJ}tzbP`#ZGbCUVYQ^Q8)LD zh58xiTaRJRhYh1Xq85Z2MQZKkw3U%d_JZ#1At$eLCq1d)31sdPdNN7Csx8T*wgNh| zWD#(UVSsKvzw^Q65)oIQo2+TcaCD6HxvXV2f3Zn-sg#9-b25WOu5zikyYIe`AJFPj z8ibhZi!(x;4PEF;Y=*CaXqKr`K^x_qrGM)7oAcQYhCq}jZp%4F3LAgc{CT_j2qN3z z_R;rw);~4rph@=*2e5;D#|JU@0#F7K!Idv1{j_Ura-mU9nsK+X*4R~O{P~vqty)Xy zD#tErz|V9F7C-oD-;pr@l!ieN{CoVH7>y1Jjq9WilcAV38{_2}CPUwFEog5_aa3-7 zj<2u8lKIY`bG+XlP&O!sU|549P` z1&!J`<2d7UHY?u(-<_2C^y&U*OcGqDdg4*|j3=g|_VI6GG$aZUt5Z(eyX!K>x*Ik1xRkN!OQbO}#{- zg326`bLP}!l9iTIVv4tyTk%)@s8v$^HpO>|SR_ATwi@J&B50w~hC2*Xdpp=$pRGn)-iuicEyZMWDXaB&eK=NZP9pYX|8*^a^+S4+!(ZSM|2PpYI9Xw23p%tWJef z$!o-YHu>hGQVJd@z%vgsZy&N9#EHE@Lk3OHA%gm7RTP#WL1)#wvbDGusv#}@pny+1 zEU+?P7=R#qOj^0YQ>meFW4GqHT)252liRJmfy>cSqd=^#GolBL=OMs|^~FgFfeM=O zAdWW|3cs}tRI41pW#s*=)MzBUKT`dmxAVMEfyZ8$h}l$Ih%r?5h+8x)>jyz}J{@Sx zt6nlVuxU+ZG`lI{6fSMk)XNbd(w4*jO$-ga#ENb3LfP4nTRJQoyugrF>VDrtLKrG% z|Fi$}$1~y9yY=nb#m1f+Z-e*imfs24jY{&Ay>AsHB*EAeq?{#;(16x|ec$B1G@0aO z_0?jh!b5#56SoUi^%V-VJo1LX9&{cK5Vi5WZ?|Aj6C?{8W=-d4B7HtI5i34xSq3D+ zmD)28oqg53m5~s!3A8yM4<+CGnihO?%YxaVN<=4gUT$Q>v3|!V$)nek?7HSIr5q|` z@az-&=eoI(SJii*%&VI~W=Vp(wib9;=4`yqknGm+%A=K|&+AgR%ZSPe>)Q^8PhxUOV2hC*8E`tXmVr27qCW=SS2UV6G2kg|<*iU0r;GGu?dj(=6D=+N01~nplEkNOrL2wyr zxrw#pO;^^x{(wm5()DS+XD-DQ>Qav3A(h@UXq)7=WBy@0;MvVLjA5c;tU0I6LYd`l zBbrwa!nGv&X&p6B1!jS}AhPS3r$C{2oOSN{RtP6_Iy~f>ty>n={H02?*x?Qh7!N#C z+Y@2N{K{8sb?1F_JIg@Y2jKgxd3&2{ag@pQAKyw_Q$J^DPKB0jMkTf9(WE*dBSuLw z2b~o&=0oJ{J})20Odduk8{75p80u9u)V|GU{aOsnrVv4XYdKE9z|%KT@VD^?Vvm^R zf3j#c7$O1=92hS={B_EGhBA}Lr7C|u7>n(BR+nTw+9uU`RYH8Uk8) z1Z0iZ<&c!@yWLh?c8cUcBew8f=wx zO+36K)$|lRst3*@n{FPu#EfZN(%~<WKMe3Fa%MZ` z{2dj;Vlu_j}_q%ySS@cneQ((5gQ{ACwl`gKMFacE?H_mKn5-Z z75uFr+$$3Qyh2g_ZtC`752sBi2OE69cfeeC!0PLVqt{M;@005}_9piD@xW2HN9v-W zlY2PzueyK83c_@&mVx))7Ddz4&(J2@`|@mB_lC;o$MfxAbY?;YI3LU$ey063u&(;d=b0)WIE+{m zfmHhX$_8EI(xlmt?g2rkb(w%k5M$x@etYH z$~eEA^coX+#zjTR116`W1lnJnGUH^wh>jU(M0*QpA{Byvv#8>|myb|>TDUAjB@BYt z(=zd9-ACfY>ldz9|J<6Lvn5o|4JHn0IN(bNzKdVZ)K*|TYS9|=kj?OS<8l5zRIEOS zK+NfIi52dmeVdt#pIcwi?SA4tt723E&Ttku6_3GB-=vgWJsk%(kh~{UKy-keLnV+0 zBb}YLXsgL@QxWS$s-?Vic@w8c^-<;@=vW(xxdcu`pU7p?^s*HR{E6^3T;82ZTM(SQ zg-Ucdz^G71I(Sy8lhjIzUwt7^k47(|sp609wj;825TI%V$dRqL{)?QZK*oiLQj*ej zapLEGmR#E&xJ)w3G8OIrMmeI}z-DW;+a7*2b!rOmQ z39iWb_{H7scDXG)s<(0818#lAK{b& zg4&JuQ=r8U*alf8wH=0toLZZ{>3-G^t7DJP(-ebU)QEBxP`sEERGGM95lwH(v4mzP zt5cd&?~`FK)V2x3WjBWamD4dm{+!!kaz6yL2JVE{?3K`+wvm!+5lhvCQ|V3>@BVx* zp}y2m(Y^H1X36n-Pa>~S-a;S5m|hNI4E<5j@xhfKriC07mvamWS?Di8S1~4&FRsly z^vuNw6b080-mZQ``#iMPwXbWgnyLia0p^3rI|I%K&p;QhuDDMWX+L%LXvVil0&=uXf8GoL{flX9{z{O-!sVW29NR4%V|EcU#>P) z<00J3%IgBJUQwVfM}qyB3Co{D1iU3eM`DUBloVpkA)KLo76gQ)uF-re-b9gkdh zI%>wo&#F^rF8^`*pjbvsoqCSDuuYDmP>X-NC}>nCdACjrfu~a}Er$lT3Q35hvC4q# zIbcWj8Dm}N>`)i*C~JJS{?8B20VS+0&;GKr!Z!GBz(e=Y!-E^}5aV@d3ADUJgX7=w z;sk?01#PCs%T;epGd~#q@hadI6@7~p5+ry2#?*$Y|5)XaG4Uk)?U{-o9n+^$FsH6^ z9e6fnlFg-ay&I`r4PGo-ObYG8g5dpE;P=(M zfJ_aU`o%rBBKxdalq>Q%Bbm8k)BYs6or#wkZ5$z+COP10_?+pCX{P@}qGb=~LL!9h zVZs2Zzbl2|GW#-az@QILvE<7$ZJGtl)W@`+B%Y!Is9(6k`^(!tBn1pk-^+;0JC&LS z$@X{CPpX^LKpeELN|HG?nVI_`z?fZN+TcwxhWD3MO|g(-ATZLobW=h^-YxA}&?bn7 z(q&i+jYLiZ2p06Xvv1Zj^f%4mty#R4@Iqv& zR+56f{{A|5#(TDV_V-v(Te2=N$$=)g-_kX3=2@uKw`ttdsYTY<1Sxx0)C#4Ru}M|L zoWjm;$DK6S9m&QI5E+iXEQNa>kr{OVNvYP3LJy79I&(MD3D=&I$ecP$g8rb{m3w;~ zAlV2gq%v?ioqYGx^FeiauWJ>GUB$qNM}N8lsQ9mTlR&?xtBJLGj%%TYkq(TTfVIX} zF(^g(XWxJSc6ANJpl1k}_?K}H{-GZi$_b!@rinswhAU;9dQq0FDSt+%C=!-CN~)?O ztS#>R1TC|8xkp6(gbZiiABZqgJxGo-Oa;-5oqJ6cVs#+KcrOaL6P;ORx~P!8?@0JS zYDCiY^uC9EnH){Y&}jhAx$4Pi4D|YS5wvWQ<2p^*TM0I&M4Fd0bTt^W)Wc*uyK@Py zGIrVX#M#2?!Jh*^f-k-MIkiWo^1+Pq;;V{(2q#R@Mh$D6)%N)I-T4$`A3Nah&Xwqa z%|OoSjX^Yqzj~%yqLv<~Ze$`1=uQK$3T0n}l<+LB2l?R6m7<>>4z+?^$K8ROs3&(` ziNK`ZS8+N$fX(yra;HDoq2^e!GkYHR2E6vU@E`*UAjlbxGbuKE_SSlKt54kbI9`iR zuPmDu@rGS_=QJ4^XtQW9*iQMOZ}S6Yo$&VwM8cP>H=CYf>c&E+xkH$H5hl?~AZFvr zC{BZxINKaIn5!me^QpY2tJexlL*MRGddy!dkyRcTGJ~zHNrOV~D=~y=0iA7wDCyUB zb~s4HDRQ=G=31P14u@Oc>~&?`x?xsb`{Boezm{LAxf1 zLj`x`-i3Lkc1W*?(U8$@-2w~Wac{-W!xji{sHRA{7&NIrJw2U|Qj4BYbe&}gC>1y} zDvu#V+|akbEdym+nHP38-&p_qvh)_kQ7Mk=RhAQw3Z^EA)-YKqU*3h0NG11LzTeNc zxu5TG-*xW$w!tc)7=PQJn}BcHqBh@OjIxkHey3i{YbnTvtCY?j@K!+W6q-;J%+He} z;$*se4vLuDhy@9&cmMs?0Q^&>Cx z45bDP46hOx7_4S6Fo@?*ia+WGRLfc55n0T@z;_sg8IR|$NMT@LY|jjdD2ed(u}aR* z)k{ptPfFFR$SnY>W?-r5%(GR0zk9#BLS~Asdbp{tfp39xYDT6< zRZ(him0w75Rd%vvin_fWFPBY)70`s-)RIJnirk#MVyg;UC9uI(KsHENU&+p5x%`iy`YJEv&8p8g(VrVb`14JJrqi?8Z0CF;jZRKB-nF@3T$Vxjy8?Zcz zn2kQjAxI9hgNOkA3S_}U1{6&2&`r$)25C7k>~yBg;08uXji-xaNQC>_sT&Jh3YFvCN9PC;B>koj5HL^N)CGcM9*@c_6>dWx>z*`f%jam#*PvIFO;Xr@lt@t@p#J`Zlv(c)qzT?7r;79nK$q{xVY! zISVb2ezM!MKC6M{^ezV5IlFnk96mEWui&9TAoJpxd-`2g83^VqTDNwZckt&_h67tA zFVz0a`PM#b+Jm#wz6zp7(q8S|k2RRff+lg!wb%7 literal 202 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBufiR<}hF1enFy7O}F~q|E?j%P(20vK0Bf1TIzW0BOE z7i;#gs{VWJbnp9RW22WQ%mvv4FO#rGaLoNUS diff --git a/src/main/resources/assets/szar/textures/item/bullet/defno/pistolrounds_incendiary.png b/src/main/resources/assets/szar/textures/item/bullet/defno/pistolrounds_incendiary.png new file mode 100644 index 0000000000000000000000000000000000000000..18c5fe71726960a721a7bd89968f89b032f5c552 GIT binary patch literal 1579 zcmV+`2Gse9P)(_`g8%^e{{R4h=>PzAFaQARU;qF*m;eA5Z<1fd zMgRZ>u}MThRCwCNmQ8G2R~5&9_kGNG#^b5MapEtWmJ*s+lr&9Ku?d7!stQy<3gTmd zC=vo?6(m%t0`aw}QWYsg0;(>GkRk+4*|30=MWUwAib4c52^14sIF4Pi9?*ATPjNw*>#VwA$0leRS-$a+rm|Fs{{KN-Larz$Y z+s3H<@Dpas0S5OSLAWJ^?J%(G;MP{)wPVx9s*E6Eu72+P9A2$QD>r-)tMu{8kazcOWnu+XuOPD6C;gHZ^##BUy*==&H} zPCRI$%P*LC_Pp_5eENnwXQRYa8M3tntWp)7h6txXR-47hkWBX{Tz>z~i6+mP(;7hp%V!QMMc*wq0jx}bA(H>R@^urwdMY5(bGKW0XNY;_)cXcV3J z*CD)aL^DzxIkh7C?tvr;kbaYrv7tNwMqwgJ8i%BDbi>}C|7gE?@WbzA`J&AqUcbh^ ziB+uslIkRyC0}js7RXf6Tx%l37-R+tvLqu(6^Z;$7d~@*x4CCe39r2dM-H*n$vOY8 zm{z3lQ%yZkv|`N{o~w!f)!48CS(eiAa|Q<;+(H3kAdVzql#`@AfFFEkm)Sd0q0?1p zzl%1K$s-5(=joSNXh%#BJGd5n@%g&AnZ||yN*k00go8{Kd9I0~oNgeg4p}_;_Ud~!OC5|PwWjOQVns__2+7Q69EV4`!MJdYIq@ku07!p~eOiWf7n~;o+OUA}?D%B#w9t28&0EQs%f-ZCRT!{xBI=Q)9U3}IfF36-!oLG2% zM8`K=zM}c|@mKrnfotEIG4K4;lQ_fUSmj}`TrdjdHOSjbD8EkLTtxXbF4iRXH7dMA z8CI9O#L~i;675cg=PSZQ@Y?Gc-#anapA*i0eW#iH>~ZX&QADAP>Nd!mi{$Mkblf3t zUBf7ekukZq0>B&dEjlKkzN$#1jR96xGcNrjVy&I?)8}jbIpHfur_9VJzlI80y*~^Z zy-_UkFj;~QTd1&ijwVm3c`=Ppv3PYAktL+5&EiVN+(MV9Pc4gn#7T9q-=ck6 d@m9pY2LSz~B?&KK_jUjP002ovPDHLkV1l#p@aO;l literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/szar/textures/item/bullet/defno/riflerounds_incendiary.png b/src/main/resources/assets/szar/textures/item/bullet/defno/riflerounds_incendiary.png new file mode 100644 index 0000000000000000000000000000000000000000..addffae1f72431aad0c1ac3ae5a76c79e7cab8a8 GIT binary patch literal 1512 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/szar/textures/item/bullet/defno/sniperrounds_incendiary.png b/src/main/resources/assets/szar/textures/item/bullet/defno/sniperrounds_incendiary.png new file mode 100644 index 0000000000000000000000000000000000000000..eea6c05e5d833e16ad0dfc12f63530e9e6253803 GIT binary patch literal 1699 zcmV;U23+}xP)(_`g8%^e{{R4h=>PzAFaQARU;qF*m;eA5Z<1fd zMgRZ?DM>^@RCwCNmu+km*A<4JJG-+VvtHY4V7=aG${YsKpOJs(^eVkjp0-qHMZ$=9{CBd2>fJCvtX6Sww(M13=N)_nH~&X#WE*okYL8?muJhS|BxE!Q<~#g2FL;c$-r z$?KK5DZnG&KP66g#hD1tfL4xHy@uB9HFUoE-=+A=(FbI0eSj5JIb4MxJ*At-8nEkk z|Ed0kgBzu2>tJf&Jx*N=adlGiog;a%U?=Q&;-Uym*x+!1dl}2?meBUaDvtiTMIL|i zVd>Ed)Rt$tbm|lX{nrp?k^^rW0^r4iO>)Ju5;iwE=oCA+Fltlg6N|UvNDRovA=3+% zO<9GPwg&=eWiB>+wwAu0G-tYET)rA(U40P%Fa4}p8hVC%?=ne__v3fXqTb)cmtN9u zAP@^_Mw1s>rPpKP^=qgV8brpXr!(DKzYBC9JHx`mm_f^gt<3+if%ky7E{&o7I89cyLX>QWxu7NC%u zVK|f|95wjip>8qXx19^M*nwdKX&E?OQv_5O!Xa2$taPVxL0&U2ew5CkYOv84c^i z6BZr&KMez~|F&ss*a6+ysYncr|TNXNNff zKK#c{nHM@+>I4IQIl@t!>7+yg!H`9X-$Hc?oN578HIY(Bb>=877CiF!8L=3EIrqT8 z_zc^(c}PS}#v?Z2NsFv5P+e{!(E=B)=p<7n$z+zyFNQ@>4jq60>l2ir^Q(-DmAQqn`nX(v*Smg3xm|&U`kH)+Z{L zRx%!u#HKA)EH9>Gf0sz4-6T^53Z|2S>122;&*=+kRF|LNQ2Le%h{fIw5C3$dT(!c( zmmfXx(eL*1^Xui^t4fH(Eb;}7(m*kx@i=>)Iw?MNfSbine%vTmuB@iKyp;ZdYwUUY ty@mOKl=4%1esO5CT(_`g8%^e{{R4h=>PzAFaQARU;qF*m;eA5Z<1fd zMgRZ>vq?ljRCwCNmrraP#}&qZGrLRf>c6ZcvY^CiWLQX*7LFaLfZZ4oz_LtM3S9WM&e4=AKD^CiXu(!?#%0fyCYJP zW$Mx{Fj#VCcHj5D?|U;lN<{d7UjAX7SFc``D2jUelv1wwzK`d5c%J8e2SGrgP;htO z_X&aktuh(I;uU}XDW2yZNT)A>ZCMPEef`EK151hZu_k92IClMcaHSMM5V)-KAcaDqr**RwMG@oU4J?3A0 ziStv_RKEV&>36}EjZQK>cb3id z5{sYRVPNJJCxJaK0HqWKPZQ`pIa0Cw`20Ha7aoI2_{hdA7K_xDZ*eL78=tRTqPAV7 zS=(l_US;;hQ<%(0a)bm20Qi2VE6|!iYfQEP8G+KqI+Tl`eJZ;}O8@+XpG^2Cu&L zHo?$v&(eJ?0L5alvmYD+A_yY3%4HsH#cY=vtZrJq5k+EQcyfa8pF2f)XA_2oT?HK* zKp2Jx78dE41CzGcsE$xB&NFmI^V7>!UVh~vBV#FHI1bcU-}npf--*x@(+A&kh%5&H z3=9ka(8{zIx0@;Kb3bD6d%xh+=qXl84R#*F zH%!yCKMxcN1)?Y-Hr8b^^x9b-eRY>q3!bw0gAq@{0^{@N7<_341vFFRcEa3z#&*E8 zjYVrstJQiofFKB%n3&*VX_;oTnNetwu>cvJz*>v77Gn&ivW9uQ;xg+#$Vj#YiwMPH zkzizmYPI@o0G{VDJUr~YAkxwA?%lf>W0;+tB~4S7mX=7U3n!^Rk_wIoU6TD#pQj$`*fpJT0c!1vA=mPVt&jT<*q fUjY7>*MA29LDfABsC literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/szar/textures/item/bullet/pistolrounds.png b/src/main/resources/assets/szar/textures/item/bullet/pistolrounds.png new file mode 100644 index 0000000000000000000000000000000000000000..fb3d56692e10085793f54969b73afa548ebb5da6 GIT binary patch literal 1595 zcmV-B2E_S^P)(_`g8%^e{{R4h=>PzAFaQARU;qF*m;eA5Z<1fd zMgRZ>!AV3xRCwCNmRpQnRT+T4z1KeH%sF%Ev>n^&%#?PN(lTn=M#dXxL?S_oiEjqu z1z*${2_(i8V?ZTFAPv<93u(N@N)!a5JP4Jv5}%+VUfR&XX%Pz3&YU@yeP4U8z1Lbk z%*2F%dZwD`|NQ^^|FZsneS109S}ta|T;%8(;K=N&_GDVxivsYS!;jgm6XQ%&1^4~t z*#8y6>m}(OSGBg|Y5-%GOj7Y&Ne}e zkJu9u`>HJLAO10Kdp?1(Eaq3Z>6l&9n@LNB%reR{q{t#v9P>;%^QJX7-~M&`&a1Ac)m%Wz zl(H<5NrFrg!cLpk`4s?c99m@OWF0Zo2ek^A5)(;+^D(cTiQka_@Q?P`hS*ATeu4g> zHDpqfNl950#DPy51svZ0ZKr2|EQ?WLo4OUy=mV>sM}iEEl|0l-D;x}390}MMOKjInoOC0RtCujp{ zW(gz3`r!%{PcS#1;&~p`s!Oh*<7dQ4gyZZVj(;#)jCoZBx!~aHBt$F zSkmzgT3d1j#+2kLrQ?^hx;auRgll=?>6Y_9{R>>zr6>$(nxm~CPYgk9$yAMwA0x8@ ztu2|dxT2sw=rT3Y&!&kDT(Wt9KOeu|u5UDW;%J92+;Z$qVVwW;CVc4r-F9kQl_XBk zwnnM@SoAHStP!PxvGD;$#}uQR6r-C;28L=lq93RO4loF11g62!V|A{%?!d}!f$Iny z1cnNs*oj%Yo1tyn8E^;bzI2?cuX+n3BeTFOKnUc30;|lN(C{v4R`DY){gC=f2e_QLFFaQu)@zC{T-kG)K&)i=Yhs@RlE#S0SaIM7)Hwl z#>Yoiwga*;O|tdNREIC4E?}L2AwczcWK(bF?B8d2?)f=B^no1c0D9?@T7gnfI#^dz z_t6-xu};9c<%2aqqM;}qHg4I$Z=d=-?|*lLs!q^B0JaLH zL!ksRbMeEJAhevEHQaIcv%T%W?S~$;H+=HbOsw%35lf8=0}D!X-cRU6DT|$e!1tM% zZPQ)c!CGx;&P7P&Vr`vnP~eA}By;%dse*5P_jGS2{K~zD?8iTI6B`FT23(j|hWSoN zYcU|na@wsnMwgUDK@|8{x1V!oIs`Ump{dD~zyjx+1t(@wTHTVL{%XEA6MpH=efFcD z_$*1BFwyuGV)w-_I$zVmm?lHJm>WC zTzegWl9H2uI*v9LDN|II0Txeq2qB2WkR*)~dy$$Gkwgh6UWi#(%=q!c^A0PB zH;CxQoA+8rcvNbA7_FBmJr5x~jL{flz*FF1TsWDqfBF=K!ufDm8OjXyO0>002ovPDHLkV1map_%Z+h literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/szar/textures/item/bullet/pistolrounds_fahh.png b/src/main/resources/assets/szar/textures/item/bullet/pistolrounds_fahh.png new file mode 100644 index 0000000000000000000000000000000000000000..a32a256c414681f1040d4de6d5018c0adae4bb06 GIT binary patch literal 905 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=k0Y$sR$z3=CDO3=9p;3=BX21L>Cx z45bDP46hOx7_4S6Fo@?*ia+WGRLfc55n0T@z;_sg8IR|$NMT@LY|jjdD2ed(u}aR* z)k{ptPfFFR$SnY>W?-r5%(GR0zk9#BLS~Asdbp{tfp39xYDT6< zRZ(him0w75Rd%vvin_fWFPBY)70`s-)RIJnirk#MVyg;UC9uI(KsHENU&+p5x%`iy`YJEv&8p8g(VrVb`14JJrqi?8Z0CF;jZRKB-nF@3T$Vxjy8?Zcz zn2kQjAxI9hgNOkA3S_}U1{6&2&`r$)25C7k>~yBg;08uXji-xaNQC>_sT&Jh3YFvCN9PC;B>koj5HL^N)CGcM9*@c_6>dWx>z*`f%jam#*PvIFO;Xr@lt@t@p#J`Zlv(c)qzT?7r;79nK$q{xVY! zISVb2ezM!MKC6M{^ezV5IlFnk96mEWui&9TAoJpxd-`2g83^VqTDNwZckt&_h67tA zFVz0a`PM#b+Jm#wz6zp7(q8S|k2RRff+lg!wb%7 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/szar/textures/item/bullet/riflerounds.png b/src/main/resources/assets/szar/textures/item/bullet/riflerounds.png new file mode 100644 index 0000000000000000000000000000000000000000..624858f1c56fc49c0d405a913b09211b0263321c GIT binary patch literal 1530 zcmV(_`g8%^e{{R4h=>PzAFaQARU;qF*m;eA5Z<1fd zMgRZ>fJsC_RCwCN*IkTUWgW-y@AI7VoSm67GdnvwyW8DmrEE#JwJ%ZxZDO?2P!sh6 z5@G?Vi8n^!rVG5*cfG-wc!QAyjD{E?F+oHKv{2aXY^U>f=H;C8 zym8UG8j@P;j`F{I{^v=~C(rLW&yyp(_k5Hk`H1VffQP<%_jQ-(!3U4~{|VsKLwEaA zUq8tMA9}&VkKD68USI!)Kl+(F_}Zxxe&PTb1l)edZA{Npw|kF2@lAi<$uD#N$-6wj z{9=P+$B#13^2x72wN_@Fc8SY{?cUPz9JBK^a$^9<^#BoMH0Ea}4`?(hbbFVG%f;

R+`jKh=DX)EbN{^+l8ZHdI(TDp5&Z1Q zBfdW8D90mq-;}d{dd)xe#9`lPq*QB~kMF&La%N1W^geU5ZT7Azp83HMKM_EyZ#Z`R zAVf>7?pwqd&p5U0KXePI-F*7aJ$(0(yEiyd76-X_huSYsF@2HQ`-q#y)y^>BiBfeZjoo@tEr zIP0-q0kf3iY2sL6Eo{EAfo-0HQ9=|r&OEy2cOC%(D1$LL;{b{G;IAIJ#%coTQK97A zyB--=p%fEWVxmY+U=QHIfzO6yV~s~5gun?23=zUGGhIL_$y?`BtPx-=!sX0Vqe<)m z58i+_K!^|$DFs>VeLgiXhjHAP8tS z$E2+uHrJG6c>Fv2{f+?MdCV}w7{PF4vBnZ9Nk8$BYK*Z+VKK&W=7+C~*WVhj)$A}% za|9m0(~~gQj$~lzCSx`>J7l>f2qfKZMn2FCdzvKalWPaSg$+ZylToQEMk5FVw^IPT zx0%xF7&e+ia&1weppyuCJxi}=5JF>B@ z=p4S{2~AF8p~zedv~gVSST?sTxeh=?So@E2As`ue!Z5=+L9H6x7~ttAPxx=0{uDvv z0Dbi$azM;yzi1is9p}%DsMm6oaHQiDAGf*Kw|sy7fG?F5LMe<@M3JIVmp2AjT#U%a z=b7>$BCrV2hoAid=(b~Lss^m^;ufJyNr}z2g1;z3%MXf3+6(edh6>2jvajk*~LE3~sI;_zIah0G@ zhoAsq0n8>Y?IX*dBh3!+;vZk*;GsSAhdrKu?oa&X zBUYBH%*`sKut;gq`H(^(WOlYnWx7JKK236|g-(Yo+ND0uK6PKjVh&bi9s?X%M5X)K|h=2cYjV<+5IsP z9`8NHVi6%A&ozH|{$R literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/szar/textures/item/bullet/rifleroundsstack.png b/src/main/resources/assets/szar/textures/item/bullet/rifleroundsstack.png new file mode 100644 index 0000000000000000000000000000000000000000..049301ad59467813bce73a5391ae32400d2748b4 GIT binary patch literal 2331 zcmV+$3FP*PP)(_`g8%^e{{R4h=>PzAFaQARU;qF*m;eA5Z<1fd zMgRZ^p-DtRRCwCtms^ZpRTam7`&_^KW$x2yXLz(NLqtG(-(vK&hqF(!vy`w`n`muk+1!znuHo+lOiA>o74P zzVP6FJ8Q4A&Ts$s+WV{}lv2E(L*soO{}tfr=N?oq{Qi4t&;DoLvqX>o^nqo*&;IJ+ zWwxiEe@HC@c>4KosmC7w>f%J9m?e=+5Xo@ahaP$C9`)!??pqT0+uy%i<@0%--?ejz zJ&{N*d%sX9ELUJ?C_^S|FHR_BbL{90)oPu)@4aP7(4pZXp6f3@KeY1>HCL)|c=8yY z=X3uzZd>%PRqM+D9LHG>kj>{=vu*-_M}K^u3d4vqvt?@42AZ~1#Z<;z66Dl$iBf5v z)2GhTX?IB^OaSis^3AH%>MVKpyFa*F)f@HY0JZrF#bS<~KfFtA*tnWjt3~;271wd$ zUAyReA#vO@R_7b2SkY;9Xf->Cb5RW;5i;PG&tAFcoXy#ULCo!+zg__t=O;3vM6H(N z1D8zT`2nHt(5_eL%uRt?SpsnK$UBs0d$!Q2VJ1z|Nr8x3SZ0zh-Fdy*zQN+MOC3&3 zMvJ~8tWcV%6S)g2ECOsEpX0!pJi3-;t~5(ll~^&H~vh;6*O1mFvw(%5&Pr@&}m z!0;e6TOO_Q5psnA#s@r{W{qa00kXB|d;PT`VasIK@7&%N?EKC(DnDS7wd;hQL*TSH zetecry~OmHfE63AT>>D(7BcJw)pdobOA@xAnCh~5b%XwNl}yfHa5%$ov3HV22Q*T4 zgl$AUfLm`eunU6m371v5S#G~UXVXPGNjt)hj?rv7{NlN9E-rasY?%H+?+P&u1uDe% z0_H1SGy=v(Ol073YI>f5V$U}>I)QG)4D^ZK7OX9}1f?_Bj!D6iSdq?Uo6?*qrBI!d zR4P8n{u@&%y4TOM3E25AyC>GPyTP^k>wlAbzHi|#?}QY%2KYi2_pf*Kwuy=gHAVK>R1ii z(uksk<0@EKt!-Nvx&=Z<2-yP=x`|;ZjFgE=q;aZkGP)pXC?-}WDCD}lIaOirzXG;h zw3@Bk3S74~!-k8SH-TrIHwS3OkWP(=Rv$ zLN|$(j$s;@=^~CJh^j4gp|N^=kS!YrFb$1r&Eeo=9aB>fM�h&)wL^jn@ql$AU1F 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 T00000NkvXXu0mjfK7~Dd literal 0 HcmV?d00001 diff --git a/src/main/resources/data/minecraft/tags/blocks/beacon_base_blocks.json b/src/main/resources/data/minecraft/tags/blocks/beacon_base_blocks.json index 63f275a..c268bc7 100644 --- a/src/main/resources/data/minecraft/tags/blocks/beacon_base_blocks.json +++ b/src/main/resources/data/minecraft/tags/blocks/beacon_base_blocks.json @@ -1,7 +1,8 @@ { "replace": false, "values": [ - "szar:niggerite_block" + "szar:niggerite_block", + "szar:cigany" ] } \ No newline at end of file diff --git a/src/main/resources/data/szar/loot_tables/chests/island.json b/src/main/resources/data/szar/loot_tables/chests/island.json new file mode 100644 index 0000000..598d667 --- /dev/null +++ b/src/main/resources/data/szar/loot_tables/chests/island.json @@ -0,0 +1,61 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "szar:epstein_files" + } + ] + }, + { + "rolls": 26, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:gold_ingot", + "weight": 40, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:binomial", + "n": 1, + "p": 0.2 + }, + "add": true + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:diamond", + "weight": 30, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:binomial", + "n": 1, + "p": 0.2 + }, + "add": true + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:gold_block", + "weight": 20 + }, + { + "type": "minecraft:item", + "name": "minecraft:diamond_block", + "weight": 10 + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/szar/recipes/debug.json b/src/main/resources/data/szar/recipes/debug.json new file mode 100644 index 0000000..5c27689 --- /dev/null +++ b/src/main/resources/data/szar/recipes/debug.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "DDD", + "DDD", + "DDD" + ], + "key": { + "D": { + "item": "minecraft:debug_stick" + } + }, + "result": { + "item": "szar:cigany", + "count": 1 + } +} diff --git a/src/main/resources/data/szar/structures/island.nbt b/src/main/resources/data/szar/structures/island.nbt new file mode 100644 index 0000000000000000000000000000000000000000..2cac7f16c144e3188142639061cb98b632cf96e0 GIT binary patch literal 33962 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