diff --git a/Plugins/Mineplex.Core/src/mineplex/core/BookRateLimiter.java b/Plugins/Mineplex.Core/src/mineplex/core/BookRateLimiter.java new file mode 100644 index 000000000..e1a5c8e97 --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/BookRateLimiter.java @@ -0,0 +1,54 @@ +package mineplex.core; + +import java.util.UUID; +import java.util.concurrent.TimeUnit; + +import net.minecraft.server.v1_8_R3.PacketPlayInCustomPayload; + +import com.google.common.cache.Cache; +import com.google.common.cache.CacheBuilder; + +import mineplex.core.packethandler.PacketHandler; +import mineplex.core.packethandler.PacketHandler.ListenerPriority; + +/** + * A temporary fix for book-related crashes. Adds a rate limit to book/sign edits. + *

+ * See: + * https://hub.spigotmc.org/stash/projects/SPIGOT/repos/craftbukkit/commits/1c3428e534283395dd1b85641a96a6f16842fc1e + * https://hub.spigotmc.org/stash/projects/SPIGOT/repos/craftbukkit/commits/4acd0f49e07e0912096e79494472535baf0db2ab + */ +public class BookRateLimiter extends MiniPlugin +{ + + private final PacketHandler _packetHandler = require(PacketHandler.class); + private final Cache _cache = CacheBuilder.newBuilder() + .expireAfterWrite(1, TimeUnit.SECONDS) + .build(); + + public BookRateLimiter() + { + super("PacketRateLimiter"); + + _packetHandler.addPacketHandler(info -> + { + PacketPlayInCustomPayload packet = (PacketPlayInCustomPayload) info.getPacket(); + String s = packet.a(); + if (!s.equals("MC|BEdit") && !s.equals("MC|BSign")) + { + return; + } + + if (_cache.asMap().containsKey(info.getPlayer().getUniqueId())) + { + info.setCancelled(true); + + return; + } + + _cache.put(info.getPlayer().getUniqueId(), 0); + + }, ListenerPriority.LOW, true, PacketPlayInCustomPayload.class); + } + +} diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/BookRateLimiter.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/BookRateLimiter.java new file mode 100644 index 000000000..49cdd7509 --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/BookRateLimiter.java @@ -0,0 +1,55 @@ +package mineplex.game.clans; + +import java.util.UUID; +import java.util.concurrent.TimeUnit; + +import net.minecraft.server.v1_8_R3.PacketPlayInCustomPayload; + +import com.google.common.cache.Cache; +import com.google.common.cache.CacheBuilder; + +import mineplex.core.MiniPlugin; +import mineplex.core.packethandler.PacketHandler; +import mineplex.core.packethandler.PacketHandler.ListenerPriority; + +/** + * A temporary fix for book-related crashes. Adds a rate limit to book/sign edits. + *

+ * See: + * https://hub.spigotmc.org/stash/projects/SPIGOT/repos/craftbukkit/commits/1c3428e534283395dd1b85641a96a6f16842fc1e + * https://hub.spigotmc.org/stash/projects/SPIGOT/repos/craftbukkit/commits/4acd0f49e07e0912096e79494472535baf0db2ab + */ +public class BookRateLimiter extends MiniPlugin +{ + + private final PacketHandler _packetHandler = require(PacketHandler.class); + private final Cache _cache = CacheBuilder.newBuilder() + .expireAfterWrite(1, TimeUnit.SECONDS) + .build(); + + public BookRateLimiter() + { + super("PacketRateLimiter"); + + _packetHandler.addPacketHandler(info -> + { + PacketPlayInCustomPayload packet = (PacketPlayInCustomPayload) info.getPacket(); + String s = packet.a(); + if (!s.equals("MC|BEdit") && !s.equals("MC|BSign")) + { + return; + } + + if (_cache.asMap().containsKey(info.getPlayer().getUniqueId())) + { + info.setCancelled(true); + + return; + } + + _cache.put(info.getPlayer().getUniqueId(), 0); + + }, ListenerPriority.LOW, true, PacketPlayInCustomPayload.class); + } + +} diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/Clans.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/Clans.java index 8bddf656b..4cb014d4a 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/Clans.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/Clans.java @@ -280,6 +280,9 @@ public class Clans extends JavaPlugin MinecraftServer.getServer().getPropertyManager().setProperty("debug", false); SpigotConfig.debug = false; + + // TODO temporary fix for book related crashes. + new BookRateLimiter(); } public static String prettifyName(Material material) diff --git a/Plugins/Mineplex.Hub.Clans/src/mineplex/clanshub/ClansHub.java b/Plugins/Mineplex.Hub.Clans/src/mineplex/clanshub/ClansHub.java index e0997337b..d7a93e3f8 100644 --- a/Plugins/Mineplex.Hub.Clans/src/mineplex/clanshub/ClansHub.java +++ b/Plugins/Mineplex.Hub.Clans/src/mineplex/clanshub/ClansHub.java @@ -1,9 +1,12 @@ package mineplex.clanshub; +import static mineplex.core.Managers.require; + import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.plugin.java.JavaPlugin; +import mineplex.core.BookRateLimiter; import mineplex.core.CustomTagFix; import mineplex.core.PacketsInteractionFix; import mineplex.core.account.CoreClientManager; @@ -65,8 +68,6 @@ import mineplex.minecraft.game.core.combat.CombatManager; import mineplex.minecraft.game.core.condition.ConditionManager; import mineplex.minecraft.game.core.damage.DamageManager; -import static mineplex.core.Managers.require; - /** * Main class for clans hub */ @@ -183,6 +184,9 @@ public class ClansHub extends JavaPlugin require(Titles.class); require(TwoFactorAuth.class); new WebsiteLinkManager(this, clientManager); + + // TODO temporary fix for book related crashes. + new BookRateLimiter(); } @Override diff --git a/Plugins/Mineplex.Hub/src/mineplex/hub/Hub.java b/Plugins/Mineplex.Hub/src/mineplex/hub/Hub.java index 05b80b2e6..c1b7a822b 100644 --- a/Plugins/Mineplex.Hub/src/mineplex/hub/Hub.java +++ b/Plugins/Mineplex.Hub/src/mineplex/hub/Hub.java @@ -2,13 +2,13 @@ package mineplex.hub; import static mineplex.core.Managers.require; -import mineplex.hub.modules.AprilFoolsTreasureHunt; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.entity.Player; import org.bukkit.plugin.java.JavaPlugin; import mineplex.core.CustomTagFix; +import mineplex.core.BookRateLimiter; import mineplex.core.PacketsInteractionFix; import mineplex.core.TwitchIntegrationFix; import mineplex.core.account.CoreClientManager; @@ -79,6 +79,7 @@ import mineplex.core.updater.Updater; import mineplex.core.velocity.VelocityFix; import mineplex.core.visibility.VisibilityManager; import mineplex.core.website.WebsiteLinkManager; +import mineplex.hub.modules.AprilFoolsTreasureHunt; import mineplex.hub.modules.BillboardManager; import mineplex.hub.queue.QueueManager; import mineplex.hub.server.ServerManager; @@ -244,6 +245,9 @@ public class Hub extends JavaPlugin implements IRelation require(AprilFoolsTreasureHunt.class); } require(TwitchIntegrationFix.class); + + // TODO temporary fix for book related crashes. + new BookRateLimiter(); } @Override diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/Arcade.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/Arcade.java index 26a762345..0a699a9f6 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/Arcade.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/Arcade.java @@ -1,9 +1,10 @@ package nautilus.game.arcade; +import static mineplex.core.Managers.require; + import java.io.File; import java.util.HashMap; -import mineplex.core.aprilfools.AprilFoolsManager; import net.minecraft.server.v1_8_R3.MinecraftServer; import org.bukkit.Bukkit; @@ -16,6 +17,7 @@ import org.spigotmc.SpigotConfig; import mineplex.core.CustomTagFix; import mineplex.core.FoodDupeFix; +import mineplex.core.BookRateLimiter; import mineplex.core.PacketsInteractionFix; import mineplex.core.TimingsFix; import mineplex.core.TwitchIntegrationFix; @@ -24,6 +26,7 @@ import mineplex.core.achievement.AchievementManager; import mineplex.core.antihack.AntiHack; import mineplex.core.antihack.RelationProvider; import mineplex.core.antihack.logging.AntihackLogger; +import mineplex.core.aprilfools.AprilFoolsManager; import mineplex.core.blockrestore.BlockRestore; import mineplex.core.blood.Blood; import mineplex.core.boosters.BoosterManager; @@ -86,7 +89,6 @@ import mineplex.minecraft.game.core.damage.DamageManager; import nautilus.game.arcade.anticheatmetadata.GameInfoMetadata; import nautilus.game.arcade.game.Game; import nautilus.game.arcade.game.GameServerConfig; -import static mineplex.core.Managers.require; public class Arcade extends JavaPlugin { @@ -237,6 +239,9 @@ public class Arcade extends JavaPlugin MinecraftServer.getServer().getPropertyManager().setProperty("debug", false); SpigotConfig.debug = false; + + // TODO temporary fix for book related crashes. + new BookRateLimiter(); } @Override diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/Game.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/Game.java index 01136f60d..c898c7370 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/Game.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/Game.java @@ -254,7 +254,7 @@ public abstract class Game extends ListenerComponent implements Lifetimed public long PrepareTime = 9000; public boolean PlaySoundGameStart = true; - public double XpMult = 1; + public double XpMult = 2; public boolean SpeedMeasurement = false;