2021-01-04 19:45:19 +01:00
|
|
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
|
|
From: Ivan Pekov <ivan@mrivanplays.com>
|
|
|
|
Date: Mon, 4 Jan 2021 20:12:36 +0200
|
|
|
|
Subject: [PATCH] Optimised hallowen checker
|
|
|
|
|
|
|
|
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/EntityBat.java b/src/main/java/net/minecraft/server/EntityBat.java
|
|
|
|
index 0a59e02d762a096cb3de62e0f8105cc5a5fab8d4..bdcbdc21f986852277dcc41a2b0f385f8caeb9f7 100644
|
|
|
|
--- a/src/main/java/net/minecraft/server/EntityBat.java
|
|
|
|
+++ b/src/main/java/net/minecraft/server/EntityBat.java
|
|
|
|
@@ -222,11 +222,16 @@ public class EntityBat extends EntityAmbient {
|
|
|
|
}
|
|
|
|
|
|
|
|
private static boolean eJ() {
|
|
|
|
+ // Yatopia start - optimised halloween checker
|
|
|
|
+ /*
|
|
|
|
LocalDate localdate = LocalDate.now();
|
|
|
|
int i = localdate.get(ChronoField.DAY_OF_MONTH);
|
|
|
|
int j = localdate.get(ChronoField.MONTH_OF_YEAR);
|
|
|
|
|
|
|
|
return j == 10 && i >= 20 || j == 11 && i <= 3;
|
|
|
|
+ */
|
|
|
|
+ return org.yatopiamc.yatopia.server.entity.HalloweenChecker.isHalloweenSeason();
|
|
|
|
+ // Yatopia end
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/EntitySkeletonAbstract.java b/src/main/java/net/minecraft/server/EntitySkeletonAbstract.java
|
|
|
|
index f73304240a626f3f7d9355e6e5f2963a06c4bb7d..3ca3280d4a4d3cd8e0b4aff8431d8fe5904d23a4 100644
|
|
|
|
--- a/src/main/java/net/minecraft/server/EntitySkeletonAbstract.java
|
|
|
|
+++ b/src/main/java/net/minecraft/server/EntitySkeletonAbstract.java
|
|
|
|
@@ -109,11 +109,15 @@ public abstract class EntitySkeletonAbstract extends EntityMonster implements IR
|
|
|
|
this.eL();
|
|
|
|
this.setCanPickupLoot(this.world.paperConfig.skeletonsAlwaysCanPickUpLoot || this.random.nextFloat() < 0.55F * difficultydamagescaler.d()); // Paper
|
|
|
|
if (this.getEquipment(EnumItemSlot.HEAD).isEmpty()) {
|
|
|
|
+ /* // Yatopia start - optimised halloween checker
|
|
|
|
LocalDate localdate = LocalDate.now();
|
|
|
|
int i = localdate.get(ChronoField.DAY_OF_MONTH);
|
|
|
|
int j = localdate.get(ChronoField.MONTH_OF_YEAR);
|
|
|
|
|
|
|
|
if (j == 10 && i == 31 && this.random.nextFloat() < 0.25F) {
|
|
|
|
+ */
|
|
|
|
+ if (org.yatopiamc.yatopia.server.entity.HalloweenChecker.isHalloweenDay() && this.random.nextFloat() < 0.25F) {
|
|
|
|
+ // Yatopia end
|
|
|
|
this.setSlot(EnumItemSlot.HEAD, new ItemStack(this.random.nextFloat() < 0.1F ? Blocks.JACK_O_LANTERN : Blocks.CARVED_PUMPKIN));
|
|
|
|
this.dropChanceArmor[EnumItemSlot.HEAD.b()] = 0.0F;
|
|
|
|
}
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/EntityZombie.java b/src/main/java/net/minecraft/server/EntityZombie.java
|
|
|
|
index 62d202ff871cf3f3deea69931fbee84131bdda8b..0475feb6e50c6d4a1f2813b028bbaef4ed710a7d 100644
|
|
|
|
--- a/src/main/java/net/minecraft/server/EntityZombie.java
|
|
|
|
+++ b/src/main/java/net/minecraft/server/EntityZombie.java
|
|
|
|
@@ -471,11 +471,15 @@ public class EntityZombie extends EntityMonster {
|
|
|
|
}
|
|
|
|
|
|
|
|
if (this.getEquipment(EnumItemSlot.HEAD).isEmpty()) {
|
|
|
|
+ /* // Yatopia start - optimised halloween checker
|
|
|
|
LocalDate localdate = LocalDate.now();
|
|
|
|
int i = localdate.get(ChronoField.DAY_OF_MONTH);
|
|
|
|
int j = localdate.get(ChronoField.MONTH_OF_YEAR);
|
|
|
|
|
|
|
|
if (j == 10 && i == 31 && this.random.nextFloat() < 0.25F) {
|
|
|
|
+ */
|
|
|
|
+ if (org.yatopiamc.yatopia.server.entity.HalloweenChecker.isHalloweenDay() && this.random.nextFloat() < 0.25F) {
|
|
|
|
+ // Yatopia end
|
|
|
|
this.setSlot(EnumItemSlot.HEAD, new ItemStack(this.random.nextFloat() < 0.1F ? Blocks.JACK_O_LANTERN : Blocks.CARVED_PUMPKIN));
|
|
|
|
this.dropChanceArmor[EnumItemSlot.HEAD.b()] = 0.0F;
|
|
|
|
}
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
|
|
|
|
index 0d23591fffcda1f8121e7bc7a6aa00d088b6e80b..7b326635aac5b1e7fb6e3933d133d7e181b7541c 100644
|
|
|
|
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
|
|
|
|
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
|
|
|
|
@@ -1335,6 +1335,7 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant<TickTas
|
|
|
|
// Paper end
|
|
|
|
|
|
|
|
com.tuinity.tuinity.util.CachedLists.reset(); // Tuinity
|
|
|
|
+ org.yatopiamc.yatopia.server.entity.HalloweenChecker.tick(); // Yatopia
|
|
|
|
|
|
|
|
// Paper start
|
|
|
|
long endTime = System.nanoTime();
|
|
|
|
diff --git a/src/main/java/org/yatopiamc/yatopia/server/entity/HalloweenChecker.java b/src/main/java/org/yatopiamc/yatopia/server/entity/HalloweenChecker.java
|
|
|
|
new file mode 100644
|
2021-01-05 18:21:38 +01:00
|
|
|
index 0000000000000000000000000000000000000000..b9e8c25fa4c4cc088a12c2b865887751c8cdbcd8
|
2021-01-04 19:45:19 +01:00
|
|
|
--- /dev/null
|
|
|
|
+++ b/src/main/java/org/yatopiamc/yatopia/server/entity/HalloweenChecker.java
|
|
|
|
@@ -0,0 +1,59 @@
|
2021-01-05 18:21:38 +01:00
|
|
|
+package org.yatopiamc.yatopia.server.entity;
|
|
|
|
+
|
|
|
|
+import java.time.LocalDate;
|
|
|
|
+import java.time.temporal.ChronoField;
|
|
|
|
+import net.minecraft.server.MinecraftServer;
|
|
|
|
+
|
|
|
|
+/**
|
|
|
|
+ * Entity halloween checker
|
|
|
|
+ * <p>
|
|
|
|
+ * Checks whether or not it is halloween at a specific rate rather than every time when
|
|
|
|
+ * a entity is being spawned.
|
|
|
|
+ * <p>
|
|
|
|
+ * The rate changes depending on how much TPS the server has. By default, the rate is every
|
|
|
|
+ * 2 hours, or every 144k ticks (if the server has _that_ much uptime)
|
|
|
|
+ *
|
|
|
|
+ * @author MrIvanPlays
|
|
|
|
+ */
|
|
|
|
+public class HalloweenChecker {
|
|
|
|
+
|
|
|
|
+ private static boolean halloweenSeason = false;
|
|
|
|
+ private static boolean halloweenDay = false;
|
|
|
|
+
|
|
|
|
+ private static int delay = (20 * 60 * 60) * 2;
|
|
|
|
+ private static int lastCheckTick = -delay;
|
|
|
|
+
|
|
|
|
+ public static void tick() {
|
|
|
|
+ if (MinecraftServer.currentTick % 100 == 0) {
|
|
|
|
+ // update the delay every 100 ticks
|
|
|
|
+ if (MinecraftServer.TPS >= 20) {
|
|
|
|
+ delay = (20 * 60 * 60) * 2;
|
|
|
|
+ }
|
|
|
|
+ if (MinecraftServer.TPS < 15) {
|
|
|
|
+ delay = delay + (20 * 60 * 15);
|
|
|
|
+ }
|
|
|
|
+ if (MinecraftServer.TPS < 10) {
|
|
|
|
+ delay = delay + (20 * 60 * 30);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ if (MinecraftServer.currentTick - lastCheckTick > delay) {
|
|
|
|
+ LocalDate now = LocalDate.now();
|
|
|
|
+ int day = now.getDayOfMonth();
|
|
|
|
+ int month = now.get(ChronoField.MONTH_OF_YEAR);
|
|
|
|
+
|
|
|
|
+ halloweenDay = (month == 10) && (day == 31);
|
|
|
|
+ halloweenSeason = ((month == 10) && (day >= 20)) || ((month == 11) && (day <= 3));
|
|
|
|
+
|
|
|
|
+ lastCheckTick = MinecraftServer.currentTick;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public static boolean isHalloweenSeason() {
|
|
|
|
+ return halloweenSeason;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public static boolean isHalloweenDay() {
|
|
|
|
+ return halloweenDay;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+}
|