From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Thu, 26 Dec 2019 18:52:55 -0600 Subject: [PATCH] Cat spawning options diff --git a/src/main/java/net/minecraft/server/IEntityAccess.java b/src/main/java/net/minecraft/server/IEntityAccess.java index 90c37e4a8..7a42feb16 100644 --- a/src/main/java/net/minecraft/server/IEntityAccess.java +++ b/src/main/java/net/minecraft/server/IEntityAccess.java @@ -44,6 +44,7 @@ public interface IEntityAccess { } } + default List getEntitiesInAABB(Class oclass, AxisAlignedBB axisalignedbb) { return a(oclass, axisalignedbb); } // Purpur - OBFHELPER default List a(Class oclass, AxisAlignedBB axisalignedbb) { return this.a(oclass, axisalignedbb, IEntitySelector.g); } diff --git a/src/main/java/net/minecraft/server/MobSpawnerCat.java b/src/main/java/net/minecraft/server/MobSpawnerCat.java index 5e17868a7..6d0ebd8af 100644 --- a/src/main/java/net/minecraft/server/MobSpawnerCat.java +++ b/src/main/java/net/minecraft/server/MobSpawnerCat.java @@ -16,7 +16,7 @@ public class MobSpawnerCat implements MobSpawner { if (this.a > 0) { return 0; } else { - this.a = 1200; + this.a = worldserver.purpurConfig.catSpawnDelay; // Purpur; EntityPlayer entityplayer = worldserver.q_(); if (entityplayer == null) { @@ -50,10 +50,12 @@ public class MobSpawnerCat implements MobSpawner { } private int a(WorldServer worldserver, BlockPosition blockposition) { - boolean flag = true; - - if (worldserver.y().a(VillagePlaceType.r.c(), blockposition, 48, VillagePlace.Occupancy.IS_OCCUPIED) > 4L) { - List list = worldserver.a(EntityCat.class, (new AxisAlignedBB(blockposition)).grow(48.0D, 8.0D, 48.0D)); + // Purpur start + int range = worldserver.purpurConfig.catSpawnVillageScanRange; + if (range <= 0) return 0; + if (worldserver.getVillagePlace().count(VillagePlaceType.home().predicate(), blockposition, range, VillagePlace.Occupancy.IS_OCCUPIED) > 4L) { + List list = worldserver.getEntitiesInAABB(EntityCat.class, (new AxisAlignedBB(blockposition)).grow(range, 8.0D, range)); + // Purpur end if (list.size() < 5) { return this.a(blockposition, worldserver); @@ -64,9 +66,11 @@ public class MobSpawnerCat implements MobSpawner { } private int b(WorldServer worldserver, BlockPosition blockposition) { - boolean flag = true; - List list = worldserver.a(EntityCat.class, (new AxisAlignedBB(blockposition)).grow(16.0D, 8.0D, 16.0D)); - + // Purpur start + int range = worldserver.purpurConfig.catSpawnSwampHutScanRange; + if (range <= 0) return 0; + List list = worldserver.getEntitiesInAABB(EntityCat.class, (new AxisAlignedBB(blockposition)).grow(range, 8.0D, range)); + // Purpur end return list.size() < 1 ? this.a(blockposition, worldserver) : 0; } diff --git a/src/main/java/net/minecraft/server/VillagePlace.java b/src/main/java/net/minecraft/server/VillagePlace.java index adacfce6f..21e401acd 100644 --- a/src/main/java/net/minecraft/server/VillagePlace.java +++ b/src/main/java/net/minecraft/server/VillagePlace.java @@ -45,6 +45,7 @@ public class VillagePlace extends RegionFileSection { ((VillagePlaceSection) this.e(SectionPosition.a(blockposition).s())).a(blockposition); } + public long count(Predicate predicate, BlockPosition blockposition, int i, VillagePlace.Occupancy villageplace_occupancy) { return a(predicate, blockposition, i, villageplace_occupancy); } // Purpur - OBFHELPER public long a(Predicate predicate, BlockPosition blockposition, int i, VillagePlace.Occupancy villageplace_occupancy) { return this.c(predicate, blockposition, i, villageplace_occupancy).count(); } diff --git a/src/main/java/net/minecraft/server/VillagePlaceType.java b/src/main/java/net/minecraft/server/VillagePlaceType.java index a5718af9b..b6b4c8c49 100644 --- a/src/main/java/net/minecraft/server/VillagePlaceType.java +++ b/src/main/java/net/minecraft/server/VillagePlaceType.java @@ -44,7 +44,7 @@ public class VillagePlaceType { public static final VillagePlaceType o = a("shepherd", a(Blocks.LOOM), 1, 1); public static final VillagePlaceType p = a("toolsmith", a(Blocks.SMITHING_TABLE), 1, 1); public static final VillagePlaceType q = a("weaponsmith", a(Blocks.GRINDSTONE), 1, 1); - public static final VillagePlaceType r = a("home", VillagePlaceType.z, 1, 1); + public static final VillagePlaceType r = a("home", VillagePlaceType.z, 1, 1); public static VillagePlaceType home() { return r; } // Purpur - OBFHELPER public static final VillagePlaceType s = a("meeting", a(Blocks.BELL), 32, 6); public static final VillagePlaceType t = a("beehive", a(Blocks.BEEHIVE), 0, 1); public static final VillagePlaceType u = a("bee_nest", a(Blocks.BEE_NEST), 0, 1); @@ -83,6 +83,7 @@ public class VillagePlaceType { return this.D; } + public Predicate predicate() { return c(); } // Purpur - OBFHELPER public Predicate c() { return this.E; } diff --git a/src/main/java/net/minecraft/server/WorldServer.java b/src/main/java/net/minecraft/server/WorldServer.java index 646f9180f..53ab03a29 100644 --- a/src/main/java/net/minecraft/server/WorldServer.java +++ b/src/main/java/net/minecraft/server/WorldServer.java @@ -2536,6 +2536,7 @@ public class WorldServer extends World implements GeneratorAccessSeed { } } + public VillagePlace getVillagePlace() { return y(); } // Purpur - OBFHELPER public VillagePlace y() { return this.getChunkProvider().j(); } diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java index f01c74a2e..b32f4d74a 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -118,6 +118,15 @@ public class PurpurWorldConfig { turtleEggsBreakFromMinecarts = getBoolean("blocks.turtle_egg.break-from-minecarts", turtleEggsBreakFromMinecarts); } + public int catSpawnDelay = 1200; + public int catSpawnSwampHutScanRange = 16; + public int catSpawnVillageScanRange = 48; + private void catSettings() { + catSpawnDelay = getInt("mobs.cat.spawn-delay", catSpawnDelay); + catSpawnSwampHutScanRange = getInt("mobs.cat.scan-range-for-other-cats.swamp-hut", catSpawnSwampHutScanRange); + catSpawnVillageScanRange = getInt("mobs.cat.scan-range-for-other-cats.village", catSpawnVillageScanRange); + } + public boolean chickenRetaliate = false; private void chickenSettings() { chickenRetaliate = getBoolean("mobs.chicken.retaliate", chickenRetaliate);