From 07a91dd0325a0ceed608cef2200285fc138b83a9 Mon Sep 17 00:00:00 2001 From: TGdoesCode Date: Tue, 27 Jan 2026 09:42:46 +0100 Subject: [PATCH] terrorist --- gradle.properties | 4 +- .../dev/tggamesyt/szar/client/SzarClient.java | 8 + .../szar/client/TerroristEntityRenderer.java | 28 +++ .../dev/tggamesyt/szar/CannabisBlock.java | 53 +++++ .../dev/tggamesyt/szar/IslamTerrorist.java | 224 ++++++++++++++++++ src/main/java/dev/tggamesyt/szar/Szar.java | 113 ++++++--- .../assets/szar/blockstates/cannabis.json | 3 +- .../szar/blockstates/tall_cannabis.json | 6 + .../resources/assets/szar/lang/en_us.json | 4 +- .../szar/models/block/tall_cannabis.json | 6 + .../szar/models/item/terrorist_spawn_egg.json | 3 + .../assets/szar/textures/block/cannabis.png | Bin 453 -> 935 bytes .../szar/textures/block/cannabis_bottom.png | Bin 508 -> 1008 bytes .../szar/textures/entity/islam_terrorist.png | Bin 0 -> 2303 bytes .../textures/entity/villager/drog_dealer.png | Bin 0 -> 1899 bytes .../entity/villager/drog_dealer_white.png | Bin 0 -> 1394 bytes .../villager/profession/drog_dealer.png | Bin 1053 -> 1235 bytes .../szar/loot_tables/blocks/cannabis.json | 41 ++-- .../loot_tables/blocks/tall_cannabis.json | 33 +++ 19 files changed, 462 insertions(+), 64 deletions(-) create mode 100644 src/client/java/dev/tggamesyt/szar/client/TerroristEntityRenderer.java create mode 100644 src/main/java/dev/tggamesyt/szar/CannabisBlock.java create mode 100644 src/main/java/dev/tggamesyt/szar/IslamTerrorist.java create mode 100644 src/main/resources/assets/szar/blockstates/tall_cannabis.json create mode 100644 src/main/resources/assets/szar/models/block/tall_cannabis.json create mode 100644 src/main/resources/assets/szar/models/item/terrorist_spawn_egg.json create mode 100644 src/main/resources/assets/szar/textures/entity/islam_terrorist.png create mode 100644 src/main/resources/assets/szar/textures/entity/villager/drog_dealer.png create mode 100644 src/main/resources/assets/szar/textures/entity/villager/drog_dealer_white.png create mode 100644 src/main/resources/data/szar/loot_tables/blocks/tall_cannabis.json diff --git a/gradle.properties b/gradle.properties index 4bf7966..ec9e37a 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ -# Done to increase the memory available to gradle. +# Done to increase the memory available to Gradle. org.gradle.jvmargs=-Xmx1G # Fabric Properties # check these on https://modmuss50.me/fabric.html @@ -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.7 +mod_version=1.0.8 maven_group=dev.tggamesyt archives_base_name=szar # Dependencies diff --git a/src/client/java/dev/tggamesyt/szar/client/SzarClient.java b/src/client/java/dev/tggamesyt/szar/client/SzarClient.java index 6de9b0b..32572d4 100644 --- a/src/client/java/dev/tggamesyt/szar/client/SzarClient.java +++ b/src/client/java/dev/tggamesyt/szar/client/SzarClient.java @@ -41,11 +41,19 @@ public class SzarClient implements ClientModInitializer { Szar.NiggerEntityType, NiggerEntityRenderer::new ); + EntityRendererRegistry.register( + Szar.TERRORIST_ENTITY_TYPE, + TerroristEntityRenderer::new + ); EntityRendererRegistry.register( Szar.GYPSY_ENTITY_TYPE, GypsyEntityRenderer::new ); + BlockRenderLayerMap.INSTANCE.putBlock( + Szar.TALL_CANNABIS_BLOCK, + RenderLayer.getCutout() + ); BlockRenderLayerMap.INSTANCE.putBlock( Szar.CANNABIS_BLOCK, RenderLayer.getCutout() diff --git a/src/client/java/dev/tggamesyt/szar/client/TerroristEntityRenderer.java b/src/client/java/dev/tggamesyt/szar/client/TerroristEntityRenderer.java new file mode 100644 index 0000000..725f070 --- /dev/null +++ b/src/client/java/dev/tggamesyt/szar/client/TerroristEntityRenderer.java @@ -0,0 +1,28 @@ +package dev.tggamesyt.szar.client; + +import com.google.common.collect.ImmutableSortedMap; +import dev.tggamesyt.szar.GypsyEntity; +import dev.tggamesyt.szar.IslamTerrorist; +import net.minecraft.client.render.entity.EntityRendererFactory; +import net.minecraft.client.render.entity.MobEntityRenderer; +import net.minecraft.client.render.entity.model.BipedEntityModel; +import net.minecraft.client.render.entity.model.EntityModelLayers; +import net.minecraft.util.Identifier; + +public class TerroristEntityRenderer + extends MobEntityRenderer> { + + public TerroristEntityRenderer(EntityRendererFactory.Context context) { + super( + context, + new BipedEntityModel<>(context.getPart(EntityModelLayers.PLAYER)), + 0.5F + ); + } + + @Override + public Identifier getTexture(IslamTerrorist entity) { + return new Identifier("szar", "textures/entity/islam_terrorist.png"); + } +} + diff --git a/src/main/java/dev/tggamesyt/szar/CannabisBlock.java b/src/main/java/dev/tggamesyt/szar/CannabisBlock.java new file mode 100644 index 0000000..fb7df4f --- /dev/null +++ b/src/main/java/dev/tggamesyt/szar/CannabisBlock.java @@ -0,0 +1,53 @@ +package dev.tggamesyt.szar; + +import net.minecraft.block.BlockState; +import net.minecraft.block.Fertilizable; +import net.minecraft.block.PlantBlock; +import net.minecraft.block.TallPlantBlock; +import net.minecraft.block.enums.DoubleBlockHalf; +import net.minecraft.server.world.ServerWorld; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.random.Random; +import net.minecraft.world.World; +import net.minecraft.world.WorldView; + +public class CannabisBlock extends PlantBlock implements Fertilizable { + + public CannabisBlock(Settings settings) { + super(settings); + } + + @Override + public void randomTick(BlockState state, ServerWorld world, BlockPos pos, Random random) { + if (!world.isClient && random.nextInt(5) == 0) { // 20% chance + BlockPos above = pos.up(); + + if (world.isAir(above)) { + world.setBlockState(pos, Szar.TALL_CANNABIS_BLOCK.getDefaultState() + .with(TallPlantBlock.HALF, DoubleBlockHalf.LOWER)); + + world.setBlockState(above, Szar.TALL_CANNABIS_BLOCK.getDefaultState() + .with(TallPlantBlock.HALF, DoubleBlockHalf.UPPER)); + } + } + } + @Override + public boolean isFertilizable(WorldView world, BlockPos pos, BlockState state, boolean isClient) { + return world.getBlockState(pos.up()).isAir(); + } + + @Override + public boolean canGrow(World world, Random random, BlockPos pos, BlockState state) { + return true; + } + + @Override + public void grow(ServerWorld world, Random random, BlockPos pos, BlockState state) { + BlockPos above = pos.up(); + + world.setBlockState(pos, Szar.TALL_CANNABIS_BLOCK.getDefaultState() + .with(TallPlantBlock.HALF, DoubleBlockHalf.LOWER)); + world.setBlockState(above, Szar.TALL_CANNABIS_BLOCK.getDefaultState() + .with(TallPlantBlock.HALF, DoubleBlockHalf.UPPER)); + } +} diff --git a/src/main/java/dev/tggamesyt/szar/IslamTerrorist.java b/src/main/java/dev/tggamesyt/szar/IslamTerrorist.java new file mode 100644 index 0000000..4371334 --- /dev/null +++ b/src/main/java/dev/tggamesyt/szar/IslamTerrorist.java @@ -0,0 +1,224 @@ +package dev.tggamesyt.szar; + +import net.minecraft.entity.EntityType; +import net.minecraft.entity.EquipmentSlot; +import net.minecraft.entity.ItemEntity; +import net.minecraft.entity.TntEntity; +import net.minecraft.entity.ai.TargetPredicate; +import net.minecraft.entity.ai.goal.Goal; +import net.minecraft.entity.ai.goal.LookAroundGoal; +import net.minecraft.entity.ai.goal.WanderAroundFarGoal; +import net.minecraft.entity.attribute.DefaultAttributeContainer; +import net.minecraft.entity.attribute.EntityAttributes; +import net.minecraft.entity.damage.DamageSource; +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.util.math.Vec3d; +import net.minecraft.world.World; + +import java.util.*; + +public class IslamTerrorist extends PathAwareEntity { + + private int BlowUpCooldown = 0; + private int panicTicks = 0; + private UUID fleeingFrom = null; + + public IslamTerrorist(EntityType type, World world) { + super(type, world); + this.setCanPickUpLoot(true); + } + + // ================= ATTRIBUTES ================= + public static DefaultAttributeContainer.Builder createAttributes() { + return MobEntity.createMobAttributes() + .add(EntityAttributes.GENERIC_MAX_HEALTH, 20.0) + .add(EntityAttributes.GENERIC_MOVEMENT_SPEED, 0.25) + .add(EntityAttributes.GENERIC_ATTACK_DAMAGE, 1.0); + } + + // ================= GOALS ================= + @Override + protected void initGoals() { + this.goalSelector.add(0, new PanicRandomlyGoal(this)); + this.goalSelector.add(1, new FleeSpecificPlayerGoal(this)); + this.goalSelector.add(3, new SneakBehindPlayerGoal(this)); + this.goalSelector.add(4, new BiasedWanderGoal(this, 0.6)); + this.goalSelector.add(5, new LookAroundGoal(this)); + } + + // ================= TICK ================= + @Override + public void tick() { + super.tick(); + + if (BlowUpCooldown > 0) BlowUpCooldown--; + } + + // ================= VISIBILITY ================= + private boolean isOnPlayerScreen(PlayerEntity player) { + Vec3d look = player.getRotationVec(1.0F).normalize(); + Vec3d toEntity = this.getPos().subtract(player.getEyePos()).normalize(); + return look.dotProduct(toEntity) > 0.55; + } + + // ================= STEALING ================= + private void triggerExposion(PlayerEntity player) { + if (this.getWorld().isClient) return; + + // Spawn primed TNT + TntEntity tnt = new TntEntity( + this.getWorld(), + this.getX(), + this.getY(), + this.getZ(), + this + ); + + tnt.setFuse(40); // 2 seconds (80 = normal TNT) + this.getWorld().spawnEntity(tnt); + + // Panic + flee + this.fleeingFrom = player.getUuid(); + this.panicTicks = 100; + this.BlowUpCooldown = 20*10; + + // Immediate movement impulse away from player + Vec3d runDir = this.getPos() + .subtract(player.getPos()) + .normalize() + .multiply(1.2); + + this.addVelocity(runDir.x, 0.3, runDir.z); + this.velocityDirty = true; + } + + + // ================= DAMAGE ================= + + // ================= GOALS ================= + + private static class PanicRandomlyGoal extends Goal { + private final IslamTerrorist mob; + PanicRandomlyGoal(IslamTerrorist mob) { this.mob = mob; this.setControls(EnumSet.of(Control.MOVE)); } + @Override public boolean canStart() { return mob.panicTicks > 0; } + @Override + public void tick() { + mob.panicTicks--; + if (mob.getNavigation().isIdle()) { + Vec3d dest = mob.getPos().add( + mob.random.nextGaussian() * 8, + 0, + mob.random.nextGaussian() * 8 + ); + mob.getNavigation().startMovingTo(dest.x, dest.y, dest.z, 1.5); + } + } + } + + // 🔴 Flee from only specific victim, hide behind others + private static class FleeSpecificPlayerGoal extends Goal { + private final IslamTerrorist mob; + private PlayerEntity threat; + + FleeSpecificPlayerGoal(IslamTerrorist mob) { + this.mob = mob; + this.setControls(EnumSet.of(Control.MOVE)); + } + + @Override + public boolean canStart() { + if (mob.fleeingFrom == null) return false; + PlayerEntity p = mob.getWorld().getPlayerByUuid(mob.fleeingFrom); + if (p == null || !mob.canSee(p) || !mob.isOnPlayerScreen(p)) return false; + threat = p; + return true; + } + + @Override + public void tick() { + TargetPredicate predicate = TargetPredicate.createNonAttackable() + .setBaseMaxDistance(16) + .setPredicate(player -> !player.getUuid().equals(mob.fleeingFrom)); + + PlayerEntity shield = mob.getWorld().getClosestPlayer(predicate, mob); + + Vec3d dest; + if (shield != null && !shield.isCreative()) { + dest = shield.getPos(); // hide behind other players + } else { + dest = mob.getPos().subtract(threat.getPos()).normalize().multiply(10).add(mob.getPos()); + } + + mob.getNavigation().startMovingTo(dest.x, dest.y, dest.z, 1.3); + } + } + + // 🟡 Sneak steal + private static class SneakBehindPlayerGoal extends Goal { + private final IslamTerrorist mob; + private PlayerEntity target; + private int cooldown = 0; + + SneakBehindPlayerGoal(IslamTerrorist mob) { + this.mob = mob; + this.setControls(EnumSet.of(Control.MOVE)); + } + + @Override + public boolean canStart() { + target = mob.getWorld().getClosestPlayer(mob, 10); + return target != null + && mob.BlowUpCooldown == 0 + && !mob.isOnPlayerScreen(target) + && !target.isCreative(); + } + + @Override + public void tick() { + if (cooldown-- > 0) return; + cooldown = 5; + + Vec3d behind = target.getPos().subtract(target.getRotationVec(1.0F).normalize()); + mob.getNavigation().startMovingTo(behind.x, behind.y, behind.z, 1.15); + + if (mob.distanceTo(target) < 1.3) { + mob.triggerExposion(target); + } + } + } + + // 🟢 Biased wander toward players when not guilty + private static class BiasedWanderGoal extends WanderAroundFarGoal { + private final IslamTerrorist mob; + + BiasedWanderGoal(IslamTerrorist mob, double speed) { + super(mob, speed); + this.mob = mob; + } + + @Override + protected Vec3d getWanderTarget() { + Vec3d base = super.getWanderTarget(); + PlayerEntity player = mob.getWorld().getClosestPlayer(mob, 10); + + if (player == null || base == null || mob.fleeingFrom != null) return base; + + Vec3d best = base; + double bestDist = base.squaredDistanceTo(player.getPos()); + + for (int i = 0; i < 4; i++) { + Vec3d c = super.getWanderTarget(); + if (c == null) continue; + double d = c.squaredDistanceTo(player.getPos()); + if (d < bestDist) { // bias toward player + best = c; + bestDist = d; + } + } + return best; + } + } +} diff --git a/src/main/java/dev/tggamesyt/szar/Szar.java b/src/main/java/dev/tggamesyt/szar/Szar.java index 5bbdf03..1ea6264 100644 --- a/src/main/java/dev/tggamesyt/szar/Szar.java +++ b/src/main/java/dev/tggamesyt/szar/Szar.java @@ -2,6 +2,8 @@ package dev.tggamesyt.szar; import com.google.common.collect.ImmutableSet; 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.item.v1.FabricItemSettings; import net.fabricmc.fabric.api.itemgroup.v1.FabricItemGroup; @@ -12,10 +14,7 @@ import net.fabricmc.fabric.api.object.builder.v1.entity.FabricEntityTypeBuilder; 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.AbstractBlock; -import net.minecraft.block.Block; -import net.minecraft.block.Blocks; -import net.minecraft.block.TallPlantBlock; +import net.minecraft.block.*; import net.minecraft.entity.EntityDimensions; import net.minecraft.entity.EntityType; import net.minecraft.entity.SpawnGroup; @@ -32,6 +31,7 @@ import net.minecraft.util.Formatting; import net.minecraft.util.Identifier; import net.minecraft.village.TradeOffer; import net.minecraft.village.VillagerProfession; +import net.minecraft.world.biome.BiomeKeys; import net.minecraft.world.poi.PointOfInterestType; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -73,6 +73,33 @@ public class Szar implements ModInitializer { SoundEvents.ENTITY_VILLAGER_WORK_CLERIC ) ); + public static final EntityType NiggerEntityType = + Registry.register( + Registries.ENTITY_TYPE, + new Identifier(MOD_ID, "nigger"), + FabricEntityTypeBuilder + .create(SpawnGroup.CREATURE, NiggerEntity::new) + .dimensions(EntityDimensions.fixed(0.6F, 1.8F)) // player-sized + .build() + ); + public static final EntityType GYPSY_ENTITY_TYPE = + Registry.register( + Registries.ENTITY_TYPE, + new Identifier(MOD_ID, "gypsy"), + FabricEntityTypeBuilder + .create(SpawnGroup.CREATURE, GypsyEntity::new) + .dimensions(EntityDimensions.fixed(0.6F, 1.8F)) // player-sized + .build() + ); + public static final EntityType TERRORIST_ENTITY_TYPE = + Registry.register( + Registries.ENTITY_TYPE, + new Identifier(MOD_ID, "islam_terrorist"), + FabricEntityTypeBuilder + .create(SpawnGroup.CREATURE, IslamTerrorist::new) + .dimensions(EntityDimensions.fixed(0.6F, 1.8F)) // player-sized + .build() + ); public static final ItemGroup SZAR_GROUP = Registry.register( Registries.ITEM_GROUP, new Identifier(MOD_ID, "szar_group"), @@ -85,6 +112,7 @@ public class Szar implements ModInitializer { entries.add(Szar.NWORD_PASS); entries.add(Szar.NIGGER_SPAWNEGG); entries.add(Szar.GYPSY_SPAWNEGG); + entries.add(Szar.TERRORIST_SPAWNEGG); entries.add(Szar.CANNABIS_ITEM); entries.add(Szar.WEED_ITEM); entries.add(Szar.WEED_JOINT_ITEM); @@ -152,7 +180,7 @@ public class Szar implements ModInitializer { new TradeOffer( new ItemStack(Items.SUGAR_CANE, 6), new ItemStack(Items.EMERALD, 1), - 12, // max uses + 10, // max uses 2, // villager XP 0.05f // price multiplier ) @@ -167,8 +195,8 @@ public class Szar implements ModInitializer { new TradeOffer( new ItemStack(Items.EMERALD, 10), new ItemStack(CANNABIS_ITEM, 1), - 12, // max uses - 2, // villager XP + 20, // max uses + 4, // villager XP 0.05f // price multiplier ) ); @@ -182,8 +210,8 @@ public class Szar implements ModInitializer { new TradeOffer( new ItemStack(Items.EMERALD, 15), new ItemStack(WEED_ITEM, 1), - 12, // max uses - 2, // villager XP + 16, // max uses + 8, // villager XP 0.05f // price multiplier ) ); @@ -197,8 +225,8 @@ public class Szar implements ModInitializer { new TradeOffer( new ItemStack(Items.EMERALD, 64), new ItemStack(WEED_JOINT_ITEM, 1), - 12, // max uses - 2, // villager XP + 5, // max uses + 12, // villager XP 0.05f // price multiplier ) ); @@ -212,8 +240,8 @@ public class Szar implements ModInitializer { new TradeOffer( new ItemStack(Items.EMERALD, 4), new ItemStack(Items.CAMPFIRE, 1), - 12, // max uses - 2, // villager XP + 16, // max uses + 10, // villager XP 0.05f // price multiplier ) ); @@ -247,7 +275,25 @@ public class Szar implements ModInitializer { GYPSY_ENTITY_TYPE, GypsyEntity.createAttributes() ); + /*FabricDefaultAttributeRegistry.register( + TERRORIST_ENTITY_TYPE, + IslamTerrorist.createAttributes() + );*/ ServerTickEvents.END_SERVER_TICK.register(PlayerValueTimer::onServerTick); + BiomeModifications.addSpawn( + BiomeSelectors.includeByKey( + BiomeKeys.DESERT, + BiomeKeys.BADLANDS, + BiomeKeys.ERODED_BADLANDS, + BiomeKeys.WOODED_BADLANDS + ), + SpawnGroup.MONSTER, + TERRORIST_ENTITY_TYPE, + 20, // weight (lower = rarer) + 1, // min group size + 1 // max group size + ); + } public static final Map PLAYER_JOINT_LEVEL = new HashMap<>(); public static final Map PLAYER_ADDICTION_LEVEL = new HashMap<>(); @@ -261,11 +307,19 @@ public class Szar implements ModInitializer { new Identifier(MOD_ID, "chemical_workbench"), new BlockItem(CHEMICAL_WORKBENCH, new FabricItemSettings()) ); + public static final Block TALL_CANNABIS_BLOCK = Registry.register( + Registries.BLOCK, + new Identifier(MOD_ID, "tall_cannabis"), + new TallPlantBlock( + FabricBlockSettings.copyOf(Blocks.LARGE_FERN) + ) + ); public static final Block CANNABIS_BLOCK = Registry.register( Registries.BLOCK, new Identifier(MOD_ID, "cannabis"), - new TallPlantBlock( - FabricBlockSettings.copyOf(Blocks.LARGE_FERN) + new CannabisBlock( + FabricBlockSettings.copyOf(Blocks.FERN) + .ticksRandomly() ) ); public static final Item CANNABIS_ITEM = Registry.register( @@ -397,24 +451,6 @@ public class Szar implements ModInitializer { new Identifier(MOD_ID, "nwordpass"), new NwordPassItem(new Item.Settings()) ); - public static final EntityType NiggerEntityType = - Registry.register( - Registries.ENTITY_TYPE, - new Identifier(MOD_ID, "nigger"), - FabricEntityTypeBuilder - .create(SpawnGroup.CREATURE, NiggerEntity::new) - .dimensions(EntityDimensions.fixed(0.6F, 1.8F)) // player-sized - .build() - ); - public static final EntityType GYPSY_ENTITY_TYPE = - Registry.register( - Registries.ENTITY_TYPE, - new Identifier(MOD_ID, "gypsy"), - FabricEntityTypeBuilder - .create(SpawnGroup.CREATURE, GypsyEntity::new) - .dimensions(EntityDimensions.fixed(0.6F, 1.8F)) // player-sized - .build() - ); public static final Item NIGGER_SPAWNEGG = Registry.register( Registries.ITEM, new Identifier(MOD_ID, "nigger_spawn_egg"), @@ -435,7 +471,16 @@ public class Szar implements ModInitializer { new Item.Settings() ) ); - + public static final Item TERRORIST_SPAWNEGG = Registry.register( + Registries.ITEM, + new Identifier(MOD_ID, "terrorist_spawn_egg"), + new SpawnEggItem( + TERRORIST_ENTITY_TYPE, + 0xFF0000, + 0x8B0000, + new Item.Settings() + ) + ); private static final List FORBIDDEN_WORDS = List.of( "nigger", "niger", diff --git a/src/main/resources/assets/szar/blockstates/cannabis.json b/src/main/resources/assets/szar/blockstates/cannabis.json index a9f2159..2d687f8 100644 --- a/src/main/resources/assets/szar/blockstates/cannabis.json +++ b/src/main/resources/assets/szar/blockstates/cannabis.json @@ -1,6 +1,5 @@ { "variants": { - "half=lower": { "model": "szar:block/cannabis_bottom" }, - "half=upper": { "model": "szar:block/cannabis" } + "": { "model": "szar:block/cannabis" } } } diff --git a/src/main/resources/assets/szar/blockstates/tall_cannabis.json b/src/main/resources/assets/szar/blockstates/tall_cannabis.json new file mode 100644 index 0000000..3b73f9f --- /dev/null +++ b/src/main/resources/assets/szar/blockstates/tall_cannabis.json @@ -0,0 +1,6 @@ +{ + "variants": { + "half=lower": { "model": "szar:block/cannabis_bottom" }, + "half=upper": { "model": "szar:block/tall_cannabis" } + } +} diff --git a/src/main/resources/assets/szar/lang/en_us.json b/src/main/resources/assets/szar/lang/en_us.json index e6771da..3d47bce 100644 --- a/src/main/resources/assets/szar/lang/en_us.json +++ b/src/main/resources/assets/szar/lang/en_us.json @@ -24,5 +24,7 @@ "death.attack.heart_attack": "%1$s got a heart attack", "death.attack.drog_overdose": "%1$s got a drog overdose", "block.szar.chemical_workbench": "Chemical Workbench", - "entity.minecraft.villager.drog_dealer": "Drog dealer" + "entity.minecraft.villager.drog_dealer": "Drog dealer", + "entity.szar.islam_terrorist": "Islam Terrorist", + "item.szar.terrorist_spawn_egg": "Islam Terrorist Spawn Egg" } diff --git a/src/main/resources/assets/szar/models/block/tall_cannabis.json b/src/main/resources/assets/szar/models/block/tall_cannabis.json new file mode 100644 index 0000000..3d16f6f --- /dev/null +++ b/src/main/resources/assets/szar/models/block/tall_cannabis.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cross", + "textures": { + "cross": "szar:block/cannabis" + } +} diff --git a/src/main/resources/assets/szar/models/item/terrorist_spawn_egg.json b/src/main/resources/assets/szar/models/item/terrorist_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/szar/models/item/terrorist_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/szar/textures/block/cannabis.png b/src/main/resources/assets/szar/textures/block/cannabis.png index 4424dfe81daae19ca4a9acb802e481121a1cdb08..32dec603ba682bc8abbe769894179eae647e3cc4 100644 GIT binary patch literal 935 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBuf-vKbiP>*~8rm~MB1$5BeXNr6bM+Ea@{>~aDsl^esu>t; z>?;Zqle1Gx6p~WYGxKcK-|yb9u8^5xs~&FZYv5bpoSKp8QB{;0T;&&%T$P<{nWAoQ z$IE3?VFffHH?<^Dp&~aYuh^=>Rtapd6_5=Q)>pE#DN0GR3UYCSssQqAl`=|73as?? z%gf94%8m8%i_-NCEiEne4UF`SjC6r2bc-wVN)jt{^NN+B2DqdaCl_TFlw{`TDS!-2 zOv*1Uu~jN9%}lXMOH4CON=Y%*O-eLQ(KR$oNz_eDF*ejqF*Z&yH#M{{N;6DSf?8ja znTD`GuNWE(zyQ$)$>>wgQzXDnC zkO2h~Jakj@fI(Ug3_G1EGq{0KveMJVF~q|E>?FhN+W{i2`_(51cNF?qweW4!II1!; z$w(yGsO&Z{AY*unTV zO(Ej9$+fxBdw1oSGhZxZX8YL0y;{w`-}}yeyCn;6PL0~T>&yDZ_1YzO7)~25O?Ou^ zRNWvG{LMYN?*E_eboWC=J~s=Q8B9(arWyrZ=iew3Y_=+O-tvt?Lib+YiQ#R1I%Cu8 zc7`pp8!v29JKyJ`q-JsB?xDYiPd99HzBb24iD6ⅇvl2#kKR68&3Y&<+jzQ-XzT^ zeqzS=?feq%zhCB-{1up(dFHSmdKI;Vst03~K??EnA( delta 389 zcmV;00eb$Y2gL)BNq@os01m*~8rm~MB1$5BeXNr6bM+Ea@{>~aDsl^esu>t; z>?;Zqle1Gx6p~WYGxKcK-|yb9u8^5xs~&FZYv5bpoSKp8QB{;0T;&&%T$P<{nWAoQ z$IE3?VFffHH?<^Dp&~aYuh^=>Rtapd6_5=Q)>pE#DN0GR3UYCSssQqAl`=|73as?? z%gf94%8m8%i_-NCEiEne4UF`SjC6r2bc-wVN)jt{^NN+B2DqdaCl_TFlw{`TDS!-2 zOv*1Uu~jN9%}lXMOH4CON=Y%*O-eLQ(KR$oNz_eDF*ejqF*Z&yH#M{{N;6DSf?8ja znTD`GuNWE(zyQ$)$>>wgQzXDnC zkO2h~Jakj@fI(Ug3_G1EGq{0K^2yW1F~q|E>}11ksX&p|{pvGBWnwl)2CY#t+Oe!N zqO&C=+DG}C<~9$}X@A*&GX85!Z;(`w!;b$lXYD+pG^AknAP{R=(5}s{D;qLT-lX+ zGrPJaWZ}&MgIwn_9seJXj}{6X*ur~L-uLH^f84UCg@G#54l^pG+-h4BF3Wh~)y^5) z6t!LF9=5R%EL2Za>f{9~2s_WZAg;7!$G+1iyaMg{wpHm(UF279vUGy?C3#<M3U=Gl{iLL_sC6~p0@t~Yl9+`t1tT^SFUgYGFF9IX9=JqHjnbP!0lC| z)%~~Lq$}jNkC(mk%m2yxumnnnHHrWzMpqQyzkD%<6K)!y08|Uct(Gbaq7gFO= zEL3G@tI8NW3V)z80&JiF=SR2snV8@x07Ugj0P4YO9RWo1{3eixo9okexCo!~hp3F_^4Ju%iVg@d|GWrkR%`|5<9mo^d{T6{Xf&X_s` z^#*hgN5iWB1jMWdf(JAZeq&bvL)0Hi=kob9%oTNTVKxZ>5b-~0TOBD8bKr-M4gm#( nl9S)^d@;!QVdSTSEF$s;YVYMe+i)<%RqkRH|_L z;XTm$FbpBA*JJfTZ4uhr^U&O!1AlD>8s%xIFPGr;;$wLE>>*t3e+8>weqj}qkFSzX zHNJI%MQ;@7!|PG=Vc`bhuwIWb!K8uG!-j{-^1`jSTqRzVrhhZo+VbefZC`4f8^3k#x$%8-aLF29m^*axo z0MLyuL-7k%N)_50ThLrx2fw@mjpr|*zOkLjmyoZzHBRD+RhrQYx*x7z% z71GFnvAnjusm{63HHNzYU1RdE=f%Fa$1<|Q-NMJ0@)^d+Wc=ppdSuPJOhC=IH@4v9 z_y~eZ6~Zu-_4IEhYtT|sGr+db-*$bbX!KKt1_z)tISxaE128)^A-AZZ!2u|Gqj1~x zLI_cs9GBZ7)|V#7B{;hFnbfQHQM%6uxjeMD=OL&q!qwX)xO%%J4>v)j3eDB^$R>E6 zavyftr*-4w1Wdbtsvi5tdfoUD0Bj!(YKsum7U7XM0`2X2D0-t%njDAHvc&1RVF#d+&Y zy3{+{uVAnCM)rksu>yb^!49#pYT{gw;POKH_c$5a9uG?RE{zB9$)mvd;Jch9)Lxvo z&SYF+ul5EG5B8G-z!{(#kWU;Z)VaQjY0HJ;{C(O+H9?g;6eJa+XunnfRMgT8(d_9+uM2+m8uG+EP5&<_AEAbfHLs5E3Vh&l$SK;V;gnY^nFPyyg<18}QC z-=C(j@DxaWfkt^ccEE9EfC?;^_vvI*=L9r>{6Qd`0lFv00G&p4AefdH%10H1>_kOja)xH65Cq-4 z0pKYJ@l@c8&CNL(=WA}xNz{Ydq6C3vfvA(C(l^Y0e`V(FcOF1}X&D-Kz1Wg-1^_Lt6t?Tn(|R2sm?dV3&RF~IXQe=x zdDh)QGRYlOs&II)4~^$9V6XND{PIdH4DJkoP2;NX2pEmOQvigBGerl0Ou$@UDRYx9 z^83Rc_~n(GOmxzvp`y5L31B@YP*|6sdOm*qI4Oh>zx>py%D%k9O=1(D@FsrmB0uIR znyc&4)x9L!Ef0zH6Aw_(O$mTW4nBEY=dSZ;uC9YW?7_+LQL^(v+IWCQNbr3heBTEl z1pG5SZ3m#x%LG>j2q6U80<;6p0Hlov=m1z)Sb&9v1;EcX0Hi!<0|>Z$2_jqZJ9>ux zum{bNyn8T2h;;D)4gFIAfFNLk76G6(Ne6%s(YEXy456KK4^9U}&l0#L0PudHYn#4{ zE?}Ya(0IM3+r&n&N3QNNNH@FxaY?!hq%L^g7vd&Jf882Xq}N+*13! zUw{B4WdM4DnHkW;@c;$@4WOoFfC~V9F~H>Q3DM)##okw)6e$4wXpI2j!}I&PYc%}0 zj=2F9fHns7{6~q(+cN<`;|03ovI+p|c;UM|zpqM{Cjr2<1iAc8dzJf3zjFX$?y%wD zglBRJ06$czZkX^RIR}7dhx!FT2y&g?6!H=x(l}*=ZV7NOC<|2D55v%!-`C|9vH&19 z8SPo046a+pY1*5To43sXAw+r#XR!o$qEmHO3E$_*(M%a&qA>n$(tbbfvtR%RgS*3g ziO1pvI(Jv4S=~Bz0Ylf`mfv@=0X6_sHcbLx5?D1M{+*xoX=WC)x-`AbQ}C+1KEF4} z?+4K3lIarQlT&4HIS~Br08O9cL+>Eay9KHX81#Cr3P7I9PYpoYLhlandj%*szk@(8 zV9?w?0!LY7x*za*@o{zl(2Ec_m=N(efvVsH=!CI7`Vj~M)jt1sTkbW|y8!%tK$f?| Z{{`<4zoKko$3y@C002ovPDHLkV1msbNl5?z literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/szar/textures/entity/villager/drog_dealer.png b/src/main/resources/assets/szar/textures/entity/villager/drog_dealer.png new file mode 100644 index 0000000000000000000000000000000000000000..fe76c3ca448f1af19c0c3017094eb13fd19dba2c GIT binary patch literal 1899 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 AKmY&$ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/szar/textures/entity/villager/profession/drog_dealer.png b/src/main/resources/assets/szar/textures/entity/villager/profession/drog_dealer.png index f9d99f99da145282b2ddc259edf36faae53db2a2..adb5f29a50c00b0a24184776a41b55008b84b900 100644 GIT binary patch delta 1216 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