From 1cf3b06f59b531c422470a312f6373734ec40fbd Mon Sep 17 00:00:00 2001 From: TGdoesCode Date: Thu, 29 Jan 2026 10:32:29 +0100 Subject: [PATCH] extended police and items --- gradle.properties | 2 +- .../java/dev/tggamesyt/szar/Arrestable.java | 6 ++ .../dev/tggamesyt/szar/ArrestedEffect.java | 47 +++++++---- .../java/dev/tggamesyt/szar/GypsyEntity.java | 6 +- .../java/dev/tggamesyt/szar/HandcuffItem.java | 26 ++++++ .../dev/tggamesyt/szar/IslamTerrorist.java | 6 +- src/main/java/dev/tggamesyt/szar/KeyItem.java | 79 ++++++++++++++++++ .../java/dev/tggamesyt/szar/NiggerEntity.java | 7 +- .../dev/tggamesyt/szar/PoliceArrestGoal.java | 77 ++++++++++------- .../java/dev/tggamesyt/szar/PoliceEntity.java | 7 +- src/main/java/dev/tggamesyt/szar/Szar.java | 40 ++++++++- .../szar/mixin/PlayerEntityMixin.java | 18 ++++ .../resources/assets/szar/lang/en_us.json | 5 +- .../szar/models/item/police_handcuff.json | 6 ++ .../assets/szar/models/item/police_key.json | 6 ++ .../assets/szar/textures/item/handcuffs.png | Bin 0 -> 25549 bytes .../szar/textures/item/police_handcuff.png | Bin 0 -> 805 bytes .../assets/szar/textures/item/police_key.png | Bin 0 -> 565 bytes .../szar/textures/item/police_key_og.png | Bin 0 -> 525 bytes .../szar/textures/mob_effect/arrested.png | Bin 267 -> 805 bytes .../data/szar/recipes/police_key.json | 19 +++++ src/main/resources/szar.mixins.json | 1 + 22 files changed, 302 insertions(+), 56 deletions(-) create mode 100644 src/main/java/dev/tggamesyt/szar/Arrestable.java create mode 100644 src/main/java/dev/tggamesyt/szar/HandcuffItem.java create mode 100644 src/main/java/dev/tggamesyt/szar/KeyItem.java create mode 100644 src/main/java/dev/tggamesyt/szar/mixin/PlayerEntityMixin.java create mode 100644 src/main/resources/assets/szar/models/item/police_handcuff.json create mode 100644 src/main/resources/assets/szar/models/item/police_key.json create mode 100644 src/main/resources/assets/szar/textures/item/handcuffs.png create mode 100644 src/main/resources/assets/szar/textures/item/police_handcuff.png create mode 100644 src/main/resources/assets/szar/textures/item/police_key.png create mode 100644 src/main/resources/assets/szar/textures/item/police_key_og.png create mode 100644 src/main/resources/data/szar/recipes/police_key.json diff --git a/gradle.properties b/gradle.properties index ce5b9c4..816dd0d 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=1.0.10 +mod_version=1.0.11 maven_group=dev.tggamesyt archives_base_name=szar # Dependencies diff --git a/src/main/java/dev/tggamesyt/szar/Arrestable.java b/src/main/java/dev/tggamesyt/szar/Arrestable.java new file mode 100644 index 0000000..8ae4880 --- /dev/null +++ b/src/main/java/dev/tggamesyt/szar/Arrestable.java @@ -0,0 +1,6 @@ +package dev.tggamesyt.szar; + +public interface Arrestable { + boolean isArrestable(); +} + diff --git a/src/main/java/dev/tggamesyt/szar/ArrestedEffect.java b/src/main/java/dev/tggamesyt/szar/ArrestedEffect.java index 73b9719..388b651 100644 --- a/src/main/java/dev/tggamesyt/szar/ArrestedEffect.java +++ b/src/main/java/dev/tggamesyt/szar/ArrestedEffect.java @@ -2,50 +2,65 @@ package dev.tggamesyt.szar; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.attribute.AttributeContainer; +import net.minecraft.entity.attribute.EntityAttributeModifier; import net.minecraft.entity.attribute.EntityAttributes; import net.minecraft.entity.effect.StatusEffect; import net.minecraft.entity.effect.StatusEffectCategory; import net.minecraft.entity.mob.MobEntity; +import java.util.UUID; + public class ArrestedEffect extends StatusEffect { - private static double originalspeed; + private static final UUID SPEED_MODIFIER_ID = + UUID.fromString("b2c7c2b8-0e55-4c9f-9e8d-8c5fdd7b9c11"); + public ArrestedEffect() { - // BENEFICIAL = false because it's like a debuff - super(StatusEffectCategory.HARMFUL, 0xA0A0A0); // gray color + super(StatusEffectCategory.HARMFUL, 0xA0A0A0); } @Override public void applyUpdateEffect(LivingEntity entity, int amplifier) { - // This method is called every tick while the effect is active if (!entity.getWorld().isClient) { - // Stop movement completely - entity.setVelocity(0, entity.getVelocity().y, 0); // keep Y velocity (falling) if you want + // Freeze horizontal movement + entity.setVelocity(0, entity.getVelocity().y, 0); entity.velocityModified = true; - // Stop AI for mobs + // Stop mob AI if (entity instanceof MobEntity mob) { mob.getNavigation().stop(); mob.setTarget(null); } - - // Optional: reset movement speed to 0 - originalspeed = entity.getAttributeInstance(EntityAttributes.GENERIC_MOVEMENT_SPEED).getValue(); - entity.getAttributeInstance(EntityAttributes.GENERIC_MOVEMENT_SPEED) - .setBaseValue(0.0D); } } @Override public boolean canApplyUpdateEffect(int duration, int amplifier) { - // Run every tick return true; } + @Override + public void onApplied(LivingEntity entity, AttributeContainer attributes, int amplifier) { + var speed = entity.getAttributeInstance(EntityAttributes.GENERIC_MOVEMENT_SPEED); + if (speed == null) return; + + // Check by UUID manually (1.20.1-safe) + if (speed.getModifier(SPEED_MODIFIER_ID) == null) { + speed.addPersistentModifier(new EntityAttributeModifier( + SPEED_MODIFIER_ID, + "Arrested speed reduction", + -1.0D, + EntityAttributeModifier.Operation.MULTIPLY_TOTAL + )); + } + } + + @Override public void onRemoved(LivingEntity entity, AttributeContainer attributes, int amplifier) { - // Reset movement speed when effect ends - entity.getAttributeInstance(EntityAttributes.GENERIC_MOVEMENT_SPEED) - .setBaseValue(originalspeed); // default walking speed for mobs + var speed = entity.getAttributeInstance(EntityAttributes.GENERIC_MOVEMENT_SPEED); + if (speed != null) { + speed.removeModifier(SPEED_MODIFIER_ID); + } } } diff --git a/src/main/java/dev/tggamesyt/szar/GypsyEntity.java b/src/main/java/dev/tggamesyt/szar/GypsyEntity.java index ed9c9ce..3588668 100644 --- a/src/main/java/dev/tggamesyt/szar/GypsyEntity.java +++ b/src/main/java/dev/tggamesyt/szar/GypsyEntity.java @@ -18,7 +18,7 @@ import net.minecraft.world.World; import java.util.*; -public class GypsyEntity extends PathAwareEntity { +public class GypsyEntity extends PathAwareEntity implements Arrestable{ public static boolean arrestable = false; @@ -285,4 +285,8 @@ public class GypsyEntity extends PathAwareEntity { return best; } } + @Override + public boolean isArrestable() { + return arrestable; + } } diff --git a/src/main/java/dev/tggamesyt/szar/HandcuffItem.java b/src/main/java/dev/tggamesyt/szar/HandcuffItem.java new file mode 100644 index 0000000..01bc56c --- /dev/null +++ b/src/main/java/dev/tggamesyt/szar/HandcuffItem.java @@ -0,0 +1,26 @@ +package dev.tggamesyt.szar; + +import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.effect.StatusEffectInstance; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ActionResult; +import net.minecraft.util.Hand; + +public class HandcuffItem extends Item { + + public HandcuffItem(Item.Settings settings) { + super(settings); + } + + /** + * Called when the player right-clicks an entity with this item. + */ + @Override + public ActionResult useOnEntity(ItemStack stack, PlayerEntity user, LivingEntity entity, Hand hand) { + entity.addStatusEffect(new StatusEffectInstance(Szar.ARRESTED, 2400, 1)); + stack.decrement(1); + return ActionResult.SUCCESS; + } +} diff --git a/src/main/java/dev/tggamesyt/szar/IslamTerrorist.java b/src/main/java/dev/tggamesyt/szar/IslamTerrorist.java index 66d8c4f..fafbd08 100644 --- a/src/main/java/dev/tggamesyt/szar/IslamTerrorist.java +++ b/src/main/java/dev/tggamesyt/szar/IslamTerrorist.java @@ -20,7 +20,7 @@ import net.minecraft.world.World; import java.util.*; -public class IslamTerrorist extends PathAwareEntity { +public class IslamTerrorist extends PathAwareEntity implements Arrestable{ public static boolean arrestable = false; private int BlowUpCooldown = 0; @@ -223,4 +223,8 @@ public class IslamTerrorist extends PathAwareEntity { return best; } } + @Override + public boolean isArrestable() { + return arrestable; + } } diff --git a/src/main/java/dev/tggamesyt/szar/KeyItem.java b/src/main/java/dev/tggamesyt/szar/KeyItem.java new file mode 100644 index 0000000..42d7f0d --- /dev/null +++ b/src/main/java/dev/tggamesyt/szar/KeyItem.java @@ -0,0 +1,79 @@ +package dev.tggamesyt.szar; + +import net.minecraft.entity.LivingEntity; +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.ActionResult; +import net.minecraft.util.Hand; +import net.minecraft.util.TypedActionResult; +import net.minecraft.world.World; + +public class KeyItem extends Item { + + public KeyItem(Settings settings) { + super(settings.maxDamage(3)); // max durability 3 + } + + // Right-click on entity → lose 1 durability + @Override + public ActionResult useOnEntity(ItemStack stack, PlayerEntity player, LivingEntity target, Hand hand) { + if (!player.getWorld().isClient) { + if (target.hasStatusEffect(Szar.ARRESTED)) { + target.removeStatusEffect(Szar.ARRESTED); + + // Play sound to indicate effect removed + player.getWorld().playSound(null, target.getBlockPos(), + SoundEvents.BLOCK_ANVIL_USE, SoundCategory.PLAYERS, 1.0F, 1.0F); + + // Use 1 durability + stack.damage(1, player, p -> p.sendToolBreakStatus(hand)); + } + } + return ActionResult.SUCCESS; + } + + // Hold right-click to use on self → lose 3 durability + @Override + public TypedActionResult use(World world, PlayerEntity user, Hand hand) { + ItemStack stack = user.getStackInHand(hand); + + if (!world.isClient) { + if (user.hasStatusEffect(Szar.ARRESTED)) { + user.removeStatusEffect(Szar.ARRESTED); + + world.playSound(null, user.getBlockPos(), + SoundEvents.BLOCK_ANVIL_USE, SoundCategory.PLAYERS, 1.0F, 1.0F); + + // Use 3 durability + stack.damage(3, user, p -> p.sendToolBreakStatus(hand)); + } + } + + // Start hold animation + return TypedActionResult.consume(stack); + } + + // Make it holdable like a bow + @Override + public int getMaxUseTime(ItemStack stack) { + return 72000; + } + + // Continuous usage tick + @Override + public void usageTick(World world, LivingEntity user, ItemStack stack, int remainingUseTicks) { + if (!world.isClient && user instanceof PlayerEntity player) { + if (player.hasStatusEffect(Szar.ARRESTED)) { + player.removeStatusEffect(Szar.ARRESTED); + world.playSound(null, player.getBlockPos(), + SoundEvents.BLOCK_ANVIL_USE, SoundCategory.PLAYERS, 1.0F, 1.0F); + + // Remove full 3 durability if held + stack.damage(3, player, p -> p.sendToolBreakStatus(player.getActiveHand())); + } + } + } +} diff --git a/src/main/java/dev/tggamesyt/szar/NiggerEntity.java b/src/main/java/dev/tggamesyt/szar/NiggerEntity.java index dfc812f..b907137 100644 --- a/src/main/java/dev/tggamesyt/szar/NiggerEntity.java +++ b/src/main/java/dev/tggamesyt/szar/NiggerEntity.java @@ -16,7 +16,7 @@ import net.minecraft.world.World; import java.util.List; -public class NiggerEntity extends PathAwareEntity { +public class NiggerEntity extends PathAwareEntity implements Arrestable{ public static boolean arrestable = true; @@ -45,4 +45,9 @@ public class NiggerEntity extends PathAwareEntity { protected void dropLoot(DamageSource source, boolean causedByPlayer) { this.dropItem(Szar.NIGGERITE_INGOT); } + + @Override + public boolean isArrestable() { + return arrestable; + } } diff --git a/src/main/java/dev/tggamesyt/szar/PoliceArrestGoal.java b/src/main/java/dev/tggamesyt/szar/PoliceArrestGoal.java index 2b65baa..e6b6ef0 100644 --- a/src/main/java/dev/tggamesyt/szar/PoliceArrestGoal.java +++ b/src/main/java/dev/tggamesyt/szar/PoliceArrestGoal.java @@ -25,35 +25,55 @@ public class PoliceArrestGoal extends Goal { @Override public boolean canStart() { - // 1️⃣ Find nearest arrestable mob - List nearby = police.getWorld().getEntitiesByClass( + target = null; + + // 1️⃣ Find nearest arrestable mob (NOT police) + List arrestables = police.getWorld().getEntitiesByClass( MobEntity.class, police.getBoundingBox().expand(16), - mob -> isArrestable(mob) + mob -> mob != police && isArrestable(mob) ); - if (!nearby.isEmpty()) { - target = nearby.get(0); - return true; + if (!arrestables.isEmpty()) { + target = police.getWorld().getClosestEntity( + arrestables, + TargetPredicate.DEFAULT, + police, + police.getX(), + police.getY(), + police.getZ() + ); + return target != null; } - // 2️⃣ Find entities attacking villagers or police - List possibleTargets = police.getWorld().getEntitiesByClass( + // 2️⃣ Find actual criminals (players or mobs attacking protected entities) + List criminals = police.getWorld().getEntitiesByClass( LivingEntity.class, police.getBoundingBox().expand(16), - entity -> isAttackingProtected(entity) + entity -> entity != police && isAttackingProtected(entity) ); - if (!possibleTargets.isEmpty()) { - target = possibleTargets.get(0); - return true; + if (!criminals.isEmpty()) { + target = police.getWorld().getClosestEntity( + criminals, + TargetPredicate.DEFAULT, + police, + police.getX(), + police.getY(), + police.getZ() + ); + return target != null; } return false; } + @Override public void start() { + if (target == null || !target.isAlive()) { + return; + } police.getNavigation().startMovingTo(target, 1.2D); } @@ -93,28 +113,25 @@ public class PoliceArrestGoal extends Goal { } private boolean isArrestable(MobEntity mob) { - try { - return mob.getClass().getField("arrestable").getBoolean(null); - } catch (NoSuchFieldException | IllegalAccessException e) { - return false; - } + if (mob == police) return false; + return mob instanceof Arrestable arrestable && arrestable.isArrestable(); } + private boolean isAttackingProtected(LivingEntity entity) { - // Check if entity is currently attacking a villager or police - if (entity instanceof MobEntity mob) { - LivingEntity targetEntity = mob.getTarget(); - if (targetEntity instanceof PlayerEntity player) { - return false; // optional: ignore if player attacking non-protected - } - return targetEntity instanceof MobEntity protectedEntity && - (protectedEntity instanceof PathAwareEntity p && p.getClass() == police.getClass() - || protectedEntity.getType().getSpawnGroup().isPeaceful()); - } else if (entity instanceof PlayerEntity) { - // Check if player recently attacked villager or police - // You may need to track recent attacks in an event listener - return false; // placeholder, can be implemented via attack events + if (entity == police) return false; + if (entity instanceof PlayerEntity player) { + long lastCrime = player.getDataTracker().get(Szar.LAST_CRIME_TICK); + return police.getWorld().getTime() - lastCrime < 200; // 10 sec window } + + if (entity instanceof MobEntity mob) { + LivingEntity target = mob.getTarget(); + return target instanceof PoliceEntity + || target != null && target.getType().getSpawnGroup().isPeaceful(); + } + return false; } + } diff --git a/src/main/java/dev/tggamesyt/szar/PoliceEntity.java b/src/main/java/dev/tggamesyt/szar/PoliceEntity.java index d058d68..5a3ae95 100644 --- a/src/main/java/dev/tggamesyt/szar/PoliceEntity.java +++ b/src/main/java/dev/tggamesyt/szar/PoliceEntity.java @@ -49,6 +49,11 @@ public class PoliceEntity extends PathAwareEntity { @Override protected void dropLoot(DamageSource source, boolean causedByPlayer) { - this.dropItem(Items.DEBUG_STICK); + this.dropItem(Szar.KEY_ITEM); + int randomnum = this.random.nextInt(20); + if (randomnum == 6 || randomnum == 7) { // SIX OR SEVEENNN (1 in 10) + this.dropItem(Items.DEBUG_STICK); + } } + } diff --git a/src/main/java/dev/tggamesyt/szar/Szar.java b/src/main/java/dev/tggamesyt/szar/Szar.java index 368587a..593ca33 100644 --- a/src/main/java/dev/tggamesyt/szar/Szar.java +++ b/src/main/java/dev/tggamesyt/szar/Szar.java @@ -5,6 +5,7 @@ import net.fabricmc.api.ModInitializer; import net.fabricmc.fabric.api.biome.v1.BiomeModifications; import net.fabricmc.fabric.api.biome.v1.BiomeSelectors; import net.fabricmc.fabric.api.event.lifecycle.v1.ServerTickEvents; +import net.fabricmc.fabric.api.event.player.AttackEntityCallback; import net.fabricmc.fabric.api.event.registry.DynamicRegistrySetupCallback; import net.fabricmc.fabric.api.item.v1.FabricItemSettings; import net.fabricmc.fabric.api.itemgroup.v1.FabricItemGroup; @@ -16,17 +17,20 @@ import net.fabricmc.fabric.api.object.builder.v1.trade.TradeOfferHelper; import net.fabricmc.fabric.api.object.builder.v1.world.poi.PointOfInterestHelper; import net.minecraft.advancement.Advancement; import net.minecraft.block.*; -import net.minecraft.entity.EntityDimensions; -import net.minecraft.entity.EntityType; -import net.minecraft.entity.SpawnGroup; -import net.minecraft.entity.SpawnRestriction; +import net.minecraft.entity.*; +import net.minecraft.entity.data.DataTracker; +import net.minecraft.entity.data.TrackedData; +import net.minecraft.entity.data.TrackedDataHandlerRegistry; import net.minecraft.entity.effect.StatusEffect; +import net.minecraft.entity.passive.VillagerEntity; +import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.*; import net.minecraft.registry.*; import net.minecraft.registry.tag.BiomeTags; import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.sound.SoundEvents; import net.minecraft.text.Text; +import net.minecraft.util.ActionResult; import net.minecraft.util.Formatting; import net.minecraft.util.Identifier; import net.minecraft.util.collection.DataPool; @@ -59,6 +63,8 @@ public class Szar implements ModInitializer { public static final Logger LOGGER = LogManager.getLogger(MOD_ID); public static final Block SZAR_BLOCK = new SzarBlock(); + public static final TrackedData LAST_CRIME_TICK = + DataTracker.registerData(PlayerEntity.class, TrackedDataHandlerRegistry.LONG); public static final Block NIGGERITEBLOCK = new Block(AbstractBlock.Settings.copy(Blocks.NETHERITE_BLOCK)); public static final Block FASZ_BLOCK = @@ -133,6 +139,8 @@ public class Szar implements ModInitializer { entries.add(Szar.GYPSY_SPAWNEGG); entries.add(Szar.TERRORIST_SPAWNEGG); entries.add(Szar.POLICE_SPAWNEGG); + entries.add(Szar.KEY_ITEM); + entries.add(Szar.HANDCUFF_ITEM); entries.add(Szar.CANNABIS_ITEM); entries.add(Szar.WEED_ITEM); entries.add(Szar.WEED_JOINT_ITEM); @@ -355,6 +363,20 @@ public class Szar implements ModInitializer { new Identifier("szar", "cannabis_patch") ) ); + AttackEntityCallback.EVENT.register((player, world, hand, entity, hitResult) -> { + if (!world.isClient && entity instanceof LivingEntity victim) { + + // Villagers or police are protected + if (victim instanceof PoliceEntity || victim instanceof VillagerEntity) { + + player.getDataTracker().set( + Szar.LAST_CRIME_TICK, + world.getTime() + ); + } + } + return ActionResult.PASS; + }); } public static final Feature CANNABIS_PATCH = @@ -399,6 +421,16 @@ public class Szar implements ModInitializer { new Item.Settings() ) ); + public static final Item KEY_ITEM = Registry.register( + Registries.ITEM, + new Identifier(MOD_ID, "police_key"), + new KeyItem(new Item.Settings()) + ); + public static final Item HANDCUFF_ITEM = Registry.register( + Registries.ITEM, + new Identifier(MOD_ID, "police_handcuff"), + new HandcuffItem(new Item.Settings()) + ); public static final Item NIGGERITE_INGOT = Registry.register( Registries.ITEM, new Identifier(MOD_ID, "niggerite_ingot"), diff --git a/src/main/java/dev/tggamesyt/szar/mixin/PlayerEntityMixin.java b/src/main/java/dev/tggamesyt/szar/mixin/PlayerEntityMixin.java new file mode 100644 index 0000000..6a5f5c5 --- /dev/null +++ b/src/main/java/dev/tggamesyt/szar/mixin/PlayerEntityMixin.java @@ -0,0 +1,18 @@ +package dev.tggamesyt.szar.mixin; + +import dev.tggamesyt.szar.Szar; +import net.minecraft.entity.player.PlayerEntity; +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(PlayerEntity.class) +public abstract class PlayerEntityMixin { + + @Inject(method = "initDataTracker", at = @At("TAIL")) + private void szar$initTracker(CallbackInfo ci) { + PlayerEntity player = (PlayerEntity) (Object) this; + player.getDataTracker().startTracking(Szar.LAST_CRIME_TICK, 0L); + } +} diff --git a/src/main/resources/assets/szar/lang/en_us.json b/src/main/resources/assets/szar/lang/en_us.json index 410c1e4..59839e1 100644 --- a/src/main/resources/assets/szar/lang/en_us.json +++ b/src/main/resources/assets/szar/lang/en_us.json @@ -29,5 +29,8 @@ "item.szar.terrorist_spawn_egg": "Islam Terrorist Spawn Egg", "entity.szar.police": "Police Man", "item.szar.police_spawn_egg": "Police Man Spawn Egg", - "effect.szar.arrested": "Arrested" + "effect.szar.arrested": "Arrested", + "item.szar.police_key": "Police Key", + "item.szar.police_handcuff": "Police Handcuff", + "entity.szar.gypsy": "Cigány" } diff --git a/src/main/resources/assets/szar/models/item/police_handcuff.json b/src/main/resources/assets/szar/models/item/police_handcuff.json new file mode 100644 index 0000000..6fcd128 --- /dev/null +++ b/src/main/resources/assets/szar/models/item/police_handcuff.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "szar:item/police_handcuff" + } +} diff --git a/src/main/resources/assets/szar/models/item/police_key.json b/src/main/resources/assets/szar/models/item/police_key.json new file mode 100644 index 0000000..8047735 --- /dev/null +++ b/src/main/resources/assets/szar/models/item/police_key.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "szar:item/police_key" + } +} diff --git a/src/main/resources/assets/szar/textures/item/handcuffs.png b/src/main/resources/assets/szar/textures/item/handcuffs.png new file mode 100644 index 0000000000000000000000000000000000000000..c8110a57b5614b08e3fb7b3d5398c2b30e12102b GIT binary patch literal 25549 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
}(IVOM7Vpubyy^8YteKc4! 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�u%{`DCbw zV|l7!whxm&ell%0r(o4uNgi>zQDkm)Q!*>@As!UzT_Ey0Z81POiw?r&;Hxm76|jR6 z^1e&ET)zdzA*Zhr#yn2N(a;7faNx^%N}h$q@qh_AA7&0FGfbDX62XR}ijygSQskG) z!scHEGL)A&uHmk^eEM{*}NUcdMr>7G|_{VtB* y!25dMSC%xyb{&5y2iDn1^Ek literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/szar/textures/item/police_handcuff.png b/src/main/resources/assets/szar/textures/item/police_handcuff.png new file mode 100644 index 0000000000000000000000000000000000000000..aaf50d4ecca617fd4f53b3c1c68b3767b194672c GIT binary patch literal 805 zcmV+=1KRwFP)004R> z004l5008;`004mK004C`008P>0026e000+ooVrmw00009a7bBm000ia000ia0czHX z2><{90b)x>Li%CR5RCr$PmfLRIFc3uL zeqHj=+5uX`ND3sM)&h0lA_a2kL;H7%hvqUAMJ`F*90PLznvx+ccZN%f4IzXOLI@#* z5JCu_vn@$zsD!rFUs!s-d>%)5|%W;&HmHNzou>5#@?TF zNt~ntuGW{$pNF5O5@5n9jhNbiDiOEWTVsM4vH5a=zf&=)VwW=2CS(#rS%cNeg_Voe zit7OrfVVFgo?rjlt0O_|$u`fL3XmD-H6(|IvPKKa+96^gPFjdOBQavJ5A<@dt(p=i zO<*Ju14;S3{Czh4`t!#0_H$>-I}q%u!}hWS3}OW0Nh}cF`^Z=xS$(+&4!V!|g+gN# zB&Ut%jIgt;B1VG|W9kV>>4Av5j*^5ysR>#<5&mocZa|3tes0Xv9uO0cAkn6o10-p0 z{l+l=OU1=NoP+R{6(7w7&Ce$@rgQYi5{riY05!zIL2=aU*&{R&iw z2iZ!#e@4F-q@MfrpV6wRW-7!x}0iU|Y7_ed>;WCc{teiDB+OJibJPwniLWGAF& zKv;eQ=nM)WxGxmnOV}DQYW6kMJzxqv;l%uBG0gDnEAcu_X0pd(> zU$xX8q*j1EmEq?cjW7qR9I3U|I}fBBjF5G`f}ycGr%LTzwF2--to$sFJxC?7aZ4(( zBR+>}K;%Fo%ORFXNBjh{4?5=p#RQjEC_a~mmY@?PRp6W9CkAE^?-MiE0ns3w^^!bt zNw(j&b;r^f#0y5HZ^YM|JJYAieF_6WtmHK25HGk~d?P?u6_#u+b0#}C;l!M?7D5Oi jgb+dqA%qaJ5KZ$2xqf^g!$IB600000NkvXXu0mjf@%~fA literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/szar/textures/item/police_key.png b/src/main/resources/assets/szar/textures/item/police_key.png new file mode 100644 index 0000000000000000000000000000000000000000..4743f1cb8c1cd47324917a9b0899741fdd49582d GIT binary patch literal 565 zcmV-50?Pe~P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!2kdb!2!6DYwZ940m?~4K~#8N?U-AR zgD?z5>FkR?_J!CNe=KZ9w=z}4lsrrl+u$QbDN=>FN49wkj^jAagL%<@#xLzDQs+@i zQouaV^z%Q{G!5f8(veLGKeV%0*LB#ojgGRbMHQC>0P7Mi3jmfSR1pBIN~k6PSd>sz z0I(*Zx&UBFLK6YNiiBnYfCULn1pw_5SnmR{$Kx}!J~pQ+02g{(EVNca^A-rvD50wW zpiM$|0YH-kPEX%zFmfs&9Ekg3p`j8)S|CJPg17)6DM5t*ASHp_zXw_k#$4DrY6Z-`Fb3LtU6o))z#)9dB?;DAp!#jwhal~brMm!bzeZkfi@pFIsoql=yf2vh zSo}?3>|FH!)0`3lK$rJ|RCsXP8IThmNL2u6Rt34?fusOXT|!BCAT0n?lTaESXb=EC zw=%8_PI#b2z)q0}3cbV1qD??Z?gNhI436VCni+;aT-(m@G2*Q*00000NkvXXu0mjf D1YO+u literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/szar/textures/item/police_key_og.png b/src/main/resources/assets/szar/textures/item/police_key_og.png new file mode 100644 index 0000000000000000000000000000000000000000..b6d67171b518d99d6b8d5226e7237909d17e468d GIT binary patch literal 525 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=3dtTpz6=aiY77hwEes65fI?NMQuI#TE**Ms_4z-{11WFfsx;TbZ#J#=#u&dcXfFwth+pC=~widjbSJzur9L7-}0y5;L#nX{g}Id9Qdw5`baTF?Qh zJKS@HrY5GXUD)8-EYF)eQK_ubTR(yKzwd_`p-v}RW2EA8y*0Kr=sXOKaq47E;a$I_ zC4}*w-0Z8e4@JE;aB-}DC;X0!KaBCT0Z-AbwjB-64mFE?SoLAk0oFJ(kq^f{w9CKU z*ZASX&2wB=Pj8H@T{SZ-flXz(J9pf6-hb7CQagR6FNcLS+tH~Lv>3j~FZ?=pb8>(W=MK+%)eKBaoaV?jFDjFL z?^Jww=BDD~JQv-+oMf_zl%HHttF@KkM9`tKLcN^~JGQjsR%q;H*s+8~+vZ9D!y4{q zGnG^_vn@$ zzsD!rFUs!s-d>%)5|%W;&HmHNzou>5#@?TFNt~ntuGW8-&7X&#rV?PnDUF!gfGQEU z*IQ$P7_s?sfxlBRs$!Qi)h1*TLs^5>%7vAS){5%^6M(lb7@lAM+p8l%?8!FInhKB^ z=rtsVhO$Nr%Gx1fAx>I|JR>n;u@Cfeu&tUBCrw}^5d%s2y!?GO{rdC9^!9US$~zG3 zs>AlO1Pp&-1ma075Z?R9SRPq@xd#rqkNJf{V-zH(jpvN8v#cUUgArru2}$XJh`WxG zgh8nZT09Z{YyWOQi2r_W%+wwb6OSO#rkMjIX>a|;F#k)%#Xy{c@Rb!G%>~WRCo`sb zA;cY6K*6jDo%d2G@j9l5i1@=L#8l^#8dv=aREU2E*-FSE;{Ejv28ahm`Gf`(&7#5> z6FTpT2?NFVNG*kA1ys&{5`Q*JV`5iN?d+9gC!}XUSbhWO3<@E*FBIQP*cvfv_BGT! zU}K;%Fo%ORFXNBjh{4?5=p z#RQjEC_a~mmY@?PRp6W9CkAE^?-MiE0ns3w^^!btNw(j&b;r^f#0y5HZ^YM|JJYAi zeF_6WtmHK25HGk~d?P?u6_#u+b0#}C;lw7Kvlc=KA%qY@2qAV!Z07*qoM6N<$f|j;L8UO$Q delta 192 zcmZ3=*3G2Y8Q|y6%O%Cdz`(%k>ERLtqy<2jgAGW^fBv61QPG_1AOi#6LB<^uv)@ik zQmSVt^mK6yvG9L8;WY071s>