diff --git a/gradle.properties b/gradle.properties index 7ae01a0..164737e 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.4.13 +mod_version=26.4.13.1 maven_group=dev.tggamesyt archives_base_name=szar # Dependencies diff --git a/src/client/java/dev/tggamesyt/szar/client/OrbanEntityRenderer.java b/src/client/java/dev/tggamesyt/szar/client/OrbanEntityRenderer.java new file mode 100644 index 0000000..916957b --- /dev/null +++ b/src/client/java/dev/tggamesyt/szar/client/OrbanEntityRenderer.java @@ -0,0 +1,26 @@ +package dev.tggamesyt.szar.client; + +import dev.tggamesyt.szar.OrbanEntity; +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 OrbanEntityRenderer + extends MobEntityRenderer> { + + public OrbanEntityRenderer(EntityRendererFactory.Context context) { + super( + context, + new BipedEntityModel<>(context.getPart(EntityModelLayers.PLAYER)), + 0.5F + ); + } + + @Override + public Identifier getTexture(OrbanEntity entity) { + return new Identifier("szar", "textures/entity/orban.png"); + } +} + diff --git a/src/client/java/dev/tggamesyt/szar/client/SzarClient.java b/src/client/java/dev/tggamesyt/szar/client/SzarClient.java index c614530..0b82cc2 100644 --- a/src/client/java/dev/tggamesyt/szar/client/SzarClient.java +++ b/src/client/java/dev/tggamesyt/szar/client/SzarClient.java @@ -548,6 +548,10 @@ public class SzarClient implements ClientModInitializer { Szar.HitterEntityType, HitterEntityRenderer::new ); + EntityRendererRegistry.register( + OrbanEntityType, + OrbanEntityRenderer::new + ); EntityRendererRegistry.register( Szar.StalinEntityType, StalinEntityRenderer::new diff --git a/src/main/java/dev/tggamesyt/szar/AttackEnemyTeamGoal.java b/src/main/java/dev/tggamesyt/szar/AttackEnemyHunGoal.java similarity index 65% rename from src/main/java/dev/tggamesyt/szar/AttackEnemyTeamGoal.java rename to src/main/java/dev/tggamesyt/szar/AttackEnemyHunGoal.java index cf7b2a4..3dd2d93 100644 --- a/src/main/java/dev/tggamesyt/szar/AttackEnemyTeamGoal.java +++ b/src/main/java/dev/tggamesyt/szar/AttackEnemyHunGoal.java @@ -5,11 +5,11 @@ import net.minecraft.entity.LivingEntity; import net.minecraft.entity.ai.goal.ActiveTargetGoal; import net.minecraft.entity.mob.PathAwareEntity; -public class AttackEnemyTeamGoal extends ActiveTargetGoal { +public class AttackEnemyHunGoal extends ActiveTargetGoal { - public AttackEnemyTeamGoal(PathAwareEntity mob, String myTeam) { + public AttackEnemyHunGoal(PathAwareEntity mob, String myTeam) { super(mob, LivingEntity.class, true, target -> { - if (target instanceof TeamMember other) { + if (target instanceof HunPartie other) { return !other.getTeam().equals(myTeam); } return false; diff --git a/src/main/java/dev/tggamesyt/szar/AttackEnemyWarGoal.java b/src/main/java/dev/tggamesyt/szar/AttackEnemyWarGoal.java new file mode 100644 index 0000000..2cee51e --- /dev/null +++ b/src/main/java/dev/tggamesyt/szar/AttackEnemyWarGoal.java @@ -0,0 +1,18 @@ +// AttackEnemyTeamGoal.java +package dev.tggamesyt.szar; + +import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.ai.goal.ActiveTargetGoal; +import net.minecraft.entity.mob.PathAwareEntity; + +public class AttackEnemyWarGoal extends ActiveTargetGoal { + + public AttackEnemyWarGoal(PathAwareEntity mob, String myTeam) { + super(mob, LivingEntity.class, true, target -> { + if (target instanceof WarParticipant other) { + return !other.getTeam().equals(myTeam); + } + return false; + }); + } +} \ No newline at end of file diff --git a/src/main/java/dev/tggamesyt/szar/CommunistEntity.java b/src/main/java/dev/tggamesyt/szar/CommunistEntity.java index 2c6c714..feac905 100644 --- a/src/main/java/dev/tggamesyt/szar/CommunistEntity.java +++ b/src/main/java/dev/tggamesyt/szar/CommunistEntity.java @@ -21,7 +21,7 @@ import net.minecraft.world.ServerWorldAccess; import net.minecraft.world.World; import org.jetbrains.annotations.Nullable; -public class CommunistEntity extends PathAwareEntity implements Arrestable, TeamMember { +public class CommunistEntity extends PathAwareEntity implements Arrestable, WarParticipant { public static boolean arrestable = false; @Nullable @@ -38,7 +38,7 @@ public class CommunistEntity extends PathAwareEntity implements Arrestable, Team this.goalSelector.add(1, new AK47AttackGoal(this, 16.0F, 2)); this.targetSelector.add(1, new AggroOnHitRevengeGoal(this)); - this.targetSelector.add(2, new AttackEnemyTeamGoal(this, "communist")); + this.targetSelector.add(2, new AttackEnemyWarGoal(this, "communist")); } diff --git a/src/main/java/dev/tggamesyt/szar/HitterEntity.java b/src/main/java/dev/tggamesyt/szar/HitterEntity.java index d601f2e..c9037b8 100644 --- a/src/main/java/dev/tggamesyt/szar/HitterEntity.java +++ b/src/main/java/dev/tggamesyt/szar/HitterEntity.java @@ -20,12 +20,11 @@ import net.minecraft.world.ServerWorldAccess; import net.minecraft.world.World; import org.jetbrains.annotations.Nullable; -import java.util.ArrayList; import java.util.List; import static dev.tggamesyt.szar.Szar.NaziEntityType; -public class HitterEntity extends PathAwareEntity implements Arrestable, TeamMember { +public class HitterEntity extends PathAwareEntity implements Arrestable, WarParticipant { public static boolean arrestable = true; @@ -40,7 +39,7 @@ public class HitterEntity extends PathAwareEntity implements Arrestable, TeamMem this.goalSelector.add(3, new LookAroundGoal(this)); this.targetSelector.add(1, new AggroOnHitRevengeGoal(this)); - this.targetSelector.add(2, new AttackEnemyTeamGoal(this, "nazi")); + this.targetSelector.add(2, new AttackEnemyWarGoal(this, "nazi")); } diff --git a/src/main/java/dev/tggamesyt/szar/HunPartie.java b/src/main/java/dev/tggamesyt/szar/HunPartie.java new file mode 100644 index 0000000..bf36079 --- /dev/null +++ b/src/main/java/dev/tggamesyt/szar/HunPartie.java @@ -0,0 +1,5 @@ +package dev.tggamesyt.szar; + +public interface HunPartie { + String getTeam(); +} \ No newline at end of file diff --git a/src/main/java/dev/tggamesyt/szar/ModItemTagProvider.java b/src/main/java/dev/tggamesyt/szar/ModItemTagProvider.java index bfcb84f..5cf5b2c 100644 --- a/src/main/java/dev/tggamesyt/szar/ModItemTagProvider.java +++ b/src/main/java/dev/tggamesyt/szar/ModItemTagProvider.java @@ -21,5 +21,6 @@ public class ModItemTagProvider extends FabricTagProvider.ItemTagProvider { getOrCreateTagBuilder(ItemTags.MUSIC_DISCS).add(Szar.HELLO_DISC); getOrCreateTagBuilder(ItemTags.MUSIC_DISCS).add(Szar.ERIKA_DISC); getOrCreateTagBuilder(ItemTags.MUSIC_DISCS).add(Szar.USSR_DISC); + getOrCreateTagBuilder(ItemTags.MUSIC_DISCS).add(Szar.HUN_DISC); } } \ No newline at end of file diff --git a/src/main/java/dev/tggamesyt/szar/NaziEntity.java b/src/main/java/dev/tggamesyt/szar/NaziEntity.java index d8aaf94..717652e 100644 --- a/src/main/java/dev/tggamesyt/szar/NaziEntity.java +++ b/src/main/java/dev/tggamesyt/szar/NaziEntity.java @@ -21,7 +21,7 @@ import net.minecraft.world.ServerWorldAccess; import net.minecraft.world.World; import org.jetbrains.annotations.Nullable; -public class NaziEntity extends PathAwareEntity implements Arrestable, TeamMember { +public class NaziEntity extends PathAwareEntity implements Arrestable, WarParticipant { private boolean hithandPlaying = false; private int hithandTimer = 0; // ticks remaining @@ -91,7 +91,7 @@ public class NaziEntity extends PathAwareEntity implements Arrestable, TeamMembe this.goalSelector.add(1, new AK47AttackGoal(this, 16.0F, 2)); this.targetSelector.add(1, new AggroOnHitRevengeGoal(this)); - this.targetSelector.add(2, new AttackEnemyTeamGoal(this, "nazi")); + this.targetSelector.add(2, new AttackEnemyWarGoal(this, "nazi")); } diff --git a/src/main/java/dev/tggamesyt/szar/OrbanEntity.java b/src/main/java/dev/tggamesyt/szar/OrbanEntity.java new file mode 100644 index 0000000..a2a9b10 --- /dev/null +++ b/src/main/java/dev/tggamesyt/szar/OrbanEntity.java @@ -0,0 +1,67 @@ +package dev.tggamesyt.szar; + +import net.minecraft.entity.EntityData; +import net.minecraft.entity.EntityType; +import net.minecraft.entity.SpawnReason; +import net.minecraft.entity.ai.goal.MeleeAttackGoal; +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.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.world.LocalDifficulty; +import net.minecraft.world.ServerWorldAccess; +import net.minecraft.world.World; +import org.jetbrains.annotations.Nullable; + +public class OrbanEntity extends PathAwareEntity implements Arrestable, HunPartie { + + public static boolean arrestable = false; + + public OrbanEntity(EntityType type, World world) { + super(type, world); + } + + @Override + protected void initGoals() { + this.goalSelector.add(2, new FollowLeaderWanderGoal(this, 1.0D, 6.0F)); + this.goalSelector.add(3, new WanderAroundFarGoal(this, 0.8D)); + this.goalSelector.add(1, new MeleeAttackGoal(this, 1.0, true)); + + this.targetSelector.add(1, new AggroOnHitRevengeGoal(this)); + this.targetSelector.add(2, new AttackEnemyHunGoal(this, "fidesz")); + } + + + 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, 2); + } + + @Override + protected void dropLoot(DamageSource source, boolean causedByPlayer) { + var rand = this.getRandom(); + if (rand.nextFloat() < 0.01F) { + this.dropItem(Szar.HUN_DISC); + } + } + + @Override + public boolean isArrestable() { + return arrestable; + } + + @Override + public String getTeam() { + return "fidesz"; + } +} diff --git a/src/main/java/dev/tggamesyt/szar/StalinEntity.java b/src/main/java/dev/tggamesyt/szar/StalinEntity.java index 2b98a59..3fa97fc 100644 --- a/src/main/java/dev/tggamesyt/szar/StalinEntity.java +++ b/src/main/java/dev/tggamesyt/szar/StalinEntity.java @@ -26,7 +26,7 @@ import java.util.List; import static dev.tggamesyt.szar.Szar.CommunistEntityType; -public class StalinEntity extends PathAwareEntity implements Arrestable, TeamMember { +public class StalinEntity extends PathAwareEntity implements Arrestable, WarParticipant { public static boolean arrestable = true; @@ -41,7 +41,7 @@ public class StalinEntity extends PathAwareEntity implements Arrestable, TeamMem this.goalSelector.add(3, new LookAroundGoal(this)); this.targetSelector.add(1, new AggroOnHitRevengeGoal(this)); - this.targetSelector.add(2, new AttackEnemyTeamGoal(this, "communist")); + this.targetSelector.add(2, new AttackEnemyWarGoal(this, "communist")); } diff --git a/src/main/java/dev/tggamesyt/szar/Szar.java b/src/main/java/dev/tggamesyt/szar/Szar.java index f4e89b1..5cd0b8f 100644 --- a/src/main/java/dev/tggamesyt/szar/Szar.java +++ b/src/main/java/dev/tggamesyt/szar/Szar.java @@ -286,6 +286,15 @@ public class Szar implements ModInitializer { .dimensions(EntityDimensions.fixed(0.6F, 1.8F)) // player-sized .build() ); + public static final EntityType OrbanEntityType = + Registry.register( + Registries.ENTITY_TYPE, + new Identifier(MOD_ID, "orban"), + FabricEntityTypeBuilder + .create(SpawnGroup.CREATURE, OrbanEntity::new) + .dimensions(EntityDimensions.fixed(0.6F, 1.8F)) + .build() + ); public static final EntityType StalinEntityType = Registry.register( Registries.ENTITY_TYPE, @@ -443,6 +452,9 @@ public class Szar implements ModInitializer { entries.add(Szar.COMMUNIST_SPAWNEGG); entries.add(Szar.ERIKA_DISC); entries.add(Szar.USSR_DISC); + // politics + entries.add(Szar.ORBAN_SPAWNEGG); + entries.add(Szar.HUN_DISC); // racism if (showRacist) { entries.add(Szar.CIGANYBLOCK); @@ -837,6 +849,10 @@ public class Szar implements ModInitializer { HitterEntityType, HitterEntity.createAttributes() ); + FabricDefaultAttributeRegistry.register( + OrbanEntityType, + OrbanEntity.createAttributes() + ); FabricDefaultAttributeRegistry.register( CommunistEntityType, CommunistEntity.createAttributes() @@ -905,7 +921,12 @@ public class Szar implements ModInitializer { 1, // min group size 2 // max group size ); - + BiomeModifications.addSpawn( + BiomeSelectors.includeByKey(BiomeKeys.PLAINS, BiomeKeys.FLOWER_FOREST, BiomeKeys.FOREST), + SpawnGroup.MONSTER, + OrbanEntityType, + 1, 1, 1 + ); BiomeModifications.addSpawn( BiomeSelectors.includeByKey(BiomeKeys.WINDSWEPT_HILLS, BiomeKeys.WINDSWEPT_GRAVELLY_HILLS, BiomeKeys.STONY_PEAKS), SpawnGroup.MONSTER, @@ -2261,6 +2282,13 @@ public class Szar implements ModInitializer { new Identifier(MOD_ID, "baiter"), new MusicDiscItem(12, BAITER, new Item.Settings().maxCount(1).rarity(Rarity.RARE), 172) ); + public static final SoundEvent HUN_ANTHEM = + SoundEvent.of(new Identifier(MOD_ID, "hun_anthem")); + public static final Item HUN_DISC = Registry.register( + Registries.ITEM, + new Identifier(MOD_ID, "hun_disc"), + new MusicDiscItem(8, HUN_ANTHEM, new Item.Settings().maxCount(1).rarity(Rarity.RARE), 120) + ); public static final SoundEvent ERIKA = SoundEvent.of(new Identifier(MOD_ID, "erika")); public static final Item ERIKA_DISC = Registry.register( @@ -2319,6 +2347,16 @@ public class Szar implements ModInitializer { new Item.Settings() ) ); + public static final Item ORBAN_SPAWNEGG = Registry.register( + Registries.ITEM, + new Identifier(MOD_ID, "orban_spawn_egg"), + new SpawnEggItem( + OrbanEntityType, + 0xFD8100, + 0xFFFFFF, + new Item.Settings() + ) + ); public static final Item HITTER_SPAWNEGG = Registry.register( Registries.ITEM, new Identifier(MOD_ID, "hitler_spawn_egg"), diff --git a/src/main/java/dev/tggamesyt/szar/TeamMember.java b/src/main/java/dev/tggamesyt/szar/TeamMember.java deleted file mode 100644 index a93daf1..0000000 --- a/src/main/java/dev/tggamesyt/szar/TeamMember.java +++ /dev/null @@ -1,5 +0,0 @@ -package dev.tggamesyt.szar; - -public interface TeamMember { - String getTeam(); // returns "communist" or "tsarist" (or whatever your 2nd team is) -} \ No newline at end of file diff --git a/src/main/java/dev/tggamesyt/szar/WarParticipant.java b/src/main/java/dev/tggamesyt/szar/WarParticipant.java new file mode 100644 index 0000000..9cd1e63 --- /dev/null +++ b/src/main/java/dev/tggamesyt/szar/WarParticipant.java @@ -0,0 +1,5 @@ +package dev.tggamesyt.szar; + +public interface WarParticipant { + String getTeam(); +} \ No newline at end of file diff --git a/src/main/resources/assets/szar/lang/en_us.json b/src/main/resources/assets/szar/lang/en_us.json index 216c646..c73c12f 100644 --- a/src/main/resources/assets/szar/lang/en_us.json +++ b/src/main/resources/assets/szar/lang/en_us.json @@ -209,5 +209,11 @@ "item.szar.ender_ingot": "Ender Ingot", "advancement.szar.april_game_beaten.title": "We are so back", - "advancement.szar.april_game_beaten.description": "Beat the game on april 1st to flip the game back." + "advancement.szar.april_game_beaten.description": "Beat the game on april 1st to flip the game back.", + + "entity.szar.orban": "Orbán Viktor", + "entity.szar.magyar": "Magyar Péter", + "item.szar.hun_disc": "Music Disc", + "item.szar.hun_disc.desc": "Kölcsey Ferenc - Hungarian Anthem", + "item.szar.orban_spawn_egg": "Orbán Spawn Egg" } diff --git a/src/main/resources/assets/szar/models/item/hun_disc.json b/src/main/resources/assets/szar/models/item/hun_disc.json new file mode 100644 index 0000000..76e75d6 --- /dev/null +++ b/src/main/resources/assets/szar/models/item/hun_disc.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "szar:item/hun_disc" + } +} diff --git a/src/main/resources/assets/szar/models/item/orban_spawn_egg.json b/src/main/resources/assets/szar/models/item/orban_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/szar/models/item/orban_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/szar/sounds.json b/src/main/resources/assets/szar/sounds.json index 46cfb6e..77b6028 100644 --- a/src/main/resources/assets/szar/sounds.json +++ b/src/main/resources/assets/szar/sounds.json @@ -242,5 +242,13 @@ "stream": true } ] + }, + "hun_anthem": { + "sounds": [ + { + "name": "szar:hun_anthem", + "stream": true + } + ] } } diff --git a/src/main/resources/assets/szar/sounds/hun_anthem.ogg b/src/main/resources/assets/szar/sounds/hun_anthem.ogg new file mode 100644 index 0000000..14ccaee Binary files /dev/null and b/src/main/resources/assets/szar/sounds/hun_anthem.ogg differ diff --git a/src/main/resources/assets/szar/textures/entity/magyar.png b/src/main/resources/assets/szar/textures/entity/magyar.png new file mode 100644 index 0000000..8e9a57c Binary files /dev/null and b/src/main/resources/assets/szar/textures/entity/magyar.png differ diff --git a/src/main/resources/assets/szar/textures/entity/orban.png b/src/main/resources/assets/szar/textures/entity/orban.png new file mode 100644 index 0000000..fde93a9 Binary files /dev/null and b/src/main/resources/assets/szar/textures/entity/orban.png differ diff --git a/src/main/resources/assets/szar/textures/item/baiter.png b/src/main/resources/assets/szar/textures/item/baiter.png index 4d5cc73..52bae81 100644 Binary files a/src/main/resources/assets/szar/textures/item/baiter.png and b/src/main/resources/assets/szar/textures/item/baiter.png differ diff --git a/src/main/resources/assets/szar/textures/item/hun_disc.png b/src/main/resources/assets/szar/textures/item/hun_disc.png new file mode 100644 index 0000000..4d5cc73 Binary files /dev/null and b/src/main/resources/assets/szar/textures/item/hun_disc.png differ