From 3b71262f21b298b718457999f78cc4db28a694c2 Mon Sep 17 00:00:00 2001 From: Aikar Date: Wed, 20 Aug 2014 18:12:32 -0400 Subject: [PATCH] Limit TNT Detonations per tick This gives a per-world control on how much TNT will be processed per-tick, preventing a massive TNT detonation from lagging out the server. diff --git a/src/main/java/net/minecraft/server/EntityTNTPrimed.java b/src/main/java/net/minecraft/server/EntityTNTPrimed.java index ff6783cad..b448467a9 100644 --- a/src/main/java/net/minecraft/server/EntityTNTPrimed.java +++ b/src/main/java/net/minecraft/server/EntityTNTPrimed.java @@ -48,6 +48,7 @@ public class EntityTNTPrimed extends Entity { @Override public void tick() { + if (world.spigotConfig.currentPrimedTnt++ > world.spigotConfig.maxTntTicksPerTick) { return; } // Spigot if (!this.isNoGravity()) { this.setMot(this.getMot().add(0.0D, -0.04D, 0.0D)); } diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java index da0c3ed28..b87b7de2e 100644 --- a/src/main/java/net/minecraft/server/World.java +++ b/src/main/java/net/minecraft/server/World.java @@ -695,6 +695,7 @@ public abstract class World implements GeneratorAccess, AutoCloseable { timings.tileEntityPending.stopTiming(); // Spigot gameprofilerfiller.exit(); + spigotConfig.currentPrimedTnt = 0; // Spigot } public void a(Consumer consumer, Entity entity) { diff --git a/src/main/java/org/spigotmc/SpigotWorldConfig.java b/src/main/java/org/spigotmc/SpigotWorldConfig.java index 848a06605..0043a13a0 100644 --- a/src/main/java/org/spigotmc/SpigotWorldConfig.java +++ b/src/main/java/org/spigotmc/SpigotWorldConfig.java @@ -333,4 +333,15 @@ public class SpigotWorldConfig sprintMultiplier = (float) getDouble( "hunger.sprint-multiplier", 0.1 ); otherMultiplier = (float) getDouble( "hunger.other-multiplier", 0.0 ); } + + public int currentPrimedTnt = 0; + public int maxTntTicksPerTick; + private void maxTntPerTick() { + if ( SpigotConfig.version < 7 ) + { + set( "max-tnt-per-tick", 100 ); + } + maxTntTicksPerTick = getInt( "max-tnt-per-tick", 100 ); + log( "Max TNT Explosions: " + maxTntTicksPerTick ); + } } -- 2.25.1