Files
Purpur/patches/server/0047-Cat-spawning-options.patch
William Blake Galbreath 949a9956ab Updated Upstream (Paper)
Upstream has released updates that appears to apply and compile correctly

Paper Changes:
b8372fc0 Improve handling of indestructable blocks
a2a06640 Add moon phase API
47f71aea Fix SpawnChangeEvent not firing for all use-cases
b6c860f2 Don't require FACING data
0c1716a1 Add #setMaxPlayers API
02aed275 [CI-SKIP] Require dependencies script (#4172)
1ccc1c67 Add smithing item helpers
20d9ec6b Fix MC-197271
e9287056 [CI-SKIP] Update issue templates with notices
2020-08-23 16:09:37 -05:00

129 lines
7.0 KiB
Diff

From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: William Blake Galbreath <Blake.Galbreath@GMail.com>
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 <T extends Entity> List<T> getEntitiesInAABB(Class<? extends T> oclass, AxisAlignedBB axisalignedbb) { return a(oclass, axisalignedbb); } // Purpur - OBFHELPER
default <T extends Entity> List<T> a(Class<? extends T> 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<EntityCat> 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<EntityCat> 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<EntityCat> 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<EntityCat> 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> {
((VillagePlaceSection) this.e(SectionPosition.a(blockposition).s())).a(blockposition);
}
+ public long count(Predicate<VillagePlaceType> predicate, BlockPosition blockposition, int i, VillagePlace.Occupancy villageplace_occupancy) { return a(predicate, blockposition, i, villageplace_occupancy); } // Purpur - OBFHELPER
public long a(Predicate<VillagePlaceType> 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<VillagePlaceType> predicate() { return c(); } // Purpur - OBFHELPER
public Predicate<VillagePlaceType> 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 b41d4959c..55e609cc1 100644
--- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
+++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
@@ -111,6 +111,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);