Files
Purpur/patches/server/0043-Cat-spawning-options.patch
William Blake Galbreath 67be68c780 Updated Upstream (Tuinity)
Upstream has released updates that appears to apply and compile correctly

Tuinity Changes:
3b008f5 Optimisations
200f825 Actually unload POI data
db64f14 Make sure to despawn entities if they are outside the player general
89276ac Fix villagers aggressively looking at people
8830cef Remove streams for poi searching in some zombie pathfinding
a17dc2c Attempt to fix incorrect nearest village distance tracker updating
ef8cd34 Fix NPE
3e45700Do not return complex parts for entity by class lookup
2110847 Rewrite getClosestEntity
460581d Fix getClosestEntity not working
2cb36ca Optimise non-flush packet sending
784b838 Some fixes
e2dcdd1 Correct return value for ChunkCache#getCubes
968512b Add Velocity natives for encryption and compression (#188)
102d60b Rebuild patches
57fed71 Fix decompression with Velocity natives
442890b Fix decompression with Velocity natives (#191)
0179ea8 Re-Add region manager and notify patch
cbffdcc Do not mark entities in unloaded chunks as being in blocks
f2eef4a Fixup dev branch patches and store reverted patches in revert folder
2020-11-05 18:14:13 -06: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 9643dffc59..d9e6e78b15 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 5e17868a76..6d0ebd8afe 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 3c9668c9c3..f460e76ea7 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 a5718af9b6..b6b4c8c491 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 8366d36300..0b3a605a2f 100644
--- a/src/main/java/net/minecraft/server/WorldServer.java
+++ b/src/main/java/net/minecraft/server/WorldServer.java
@@ -2561,6 +2561,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 f01c74a2ea..b32f4d74a0 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);