From 6fe4e56a7f512fde699f5c85fe15acbad168430c Mon Sep 17 00:00:00 2001 From: mathiascode Date: Tue, 21 Apr 2020 16:44:24 +0300 Subject: [PATCH] Prevent server from half-crashing --- .../extras/modules/block/BlockPhysics.java | 54 +++++++++++-------- .../modules/player/PlayerConnection.java | 34 +++++------- .../extras/modules/player/PlayerInteract.java | 10 ++-- 3 files changed, 50 insertions(+), 48 deletions(-) diff --git a/src/main/java/pw/kaboom/extras/modules/block/BlockPhysics.java b/src/main/java/pw/kaboom/extras/modules/block/BlockPhysics.java index f73defc..d3ec90f 100644 --- a/src/main/java/pw/kaboom/extras/modules/block/BlockPhysics.java +++ b/src/main/java/pw/kaboom/extras/modules/block/BlockPhysics.java @@ -40,7 +40,7 @@ public final class BlockPhysics implements Listener { } } } - } catch (Exception e) { + } catch (Exception | StackOverflowError e) { event.setCancelled(true); } } @@ -52,44 +52,52 @@ public final class BlockPhysics implements Listener { event.getBlock().setType(Material.AIR, false); event.setCancelled(true); } - } catch (Exception e) { + } catch (Exception | StackOverflowError e) { event.setCancelled(true); } } @EventHandler void onBlockForm(final BlockFormEvent event) { - if (event.getBlock().getType() == Material.LAVA - || event.getBlock().getType() == Material.WATER) { - for (BlockFace face : getBlockFaces()) { - if (event.getBlock().getRelative(face).getType() != Material.LAVA - && event.getBlock().getRelative(face).getType() != Material.WATER) { - return; + try { + if (event.getBlock().getType() == Material.LAVA + || event.getBlock().getType() == Material.WATER) { + for (BlockFace face : getBlockFaces()) { + if (event.getBlock().getRelative(face).getType() != Material.LAVA + && event.getBlock().getRelative(face).getType() != Material.WATER) { + return; + } + event.setCancelled(true); } - event.setCancelled(true); } + } catch (Exception | StackOverflowError e) { + event.setCancelled(true); } } @EventHandler void onBlockFromTo(final BlockFromToEvent event) { - if (event.getBlock().getType() == Material.LAVA - || event.getBlock().getType() == Material.WATER) { - boolean lavaFound = false; - boolean waterFound = false; + try { + if (event.getBlock().getType() == Material.LAVA + || event.getBlock().getType() == Material.WATER) { + boolean lavaFound = false; + boolean waterFound = false; - for (BlockFace face : getBlockFaces()) { - if (event.getBlock().getRelative(face).getType() == Material.LAVA && !lavaFound) { - lavaFound = true; - } else if (event.getBlock().getRelative(face).getType() == Material.WATER && !waterFound) { - waterFound = true; - } + for (BlockFace face : getBlockFaces()) { + if (event.getBlock().getRelative(face).getType() == Material.LAVA && !lavaFound) { + lavaFound = true; + } else if (event.getBlock().getRelative(face).getType() == Material.WATER && !waterFound) { + waterFound = true; + } - if (lavaFound && waterFound) { - event.setCancelled(true); - return; + if (lavaFound && waterFound) { + event.setCancelled(true); + return; + } } } + } catch (Exception | StackOverflowError e) { + event.setCancelled(true); } } @@ -121,7 +129,7 @@ public final class BlockPhysics implements Listener { default: break; } - } catch (Exception e) { + } catch (Exception | StackOverflowError e) { event.setCancelled(true); } } diff --git a/src/main/java/pw/kaboom/extras/modules/player/PlayerConnection.java b/src/main/java/pw/kaboom/extras/modules/player/PlayerConnection.java index 0e65fc8..b67e3fd 100644 --- a/src/main/java/pw/kaboom/extras/modules/player/PlayerConnection.java +++ b/src/main/java/pw/kaboom/extras/modules/player/PlayerConnection.java @@ -27,27 +27,21 @@ import pw.kaboom.extras.Main; public final class PlayerConnection implements Listener { @EventHandler void onAsyncPlayerPreLogin(final AsyncPlayerPreLoginEvent event) { - if (event.getName().length() > 16) { - event.disallow(AsyncPlayerPreLoginEvent.Result.KICK_OTHER, "Your username can't be longer than 16 characters"); - } else { - for (Player player : Bukkit.getOnlinePlayers()) { - if (event.getName().equals(player.getName())) { - event.disallow(AsyncPlayerPreLoginEvent.Result.KICK_OTHER, "A player with that username is already logged in"); - } - } - - /*try { - final PlayerProfile profile = event.getPlayerProfile(); - - UUID offlineUUID = UUID.nameUUIDFromBytes(("OfflinePlayer:" + event.getName()).getBytes(Charsets.UTF_8)); - - profile.setId(offlineUUID); - - SkinDownloader skinDownloader = new SkinDownloader(); - skinDownloader.fillJoinProfile(profile, event.getName(), event.getUniqueId()); - } catch (Exception ignored) { - }*/ + if (Bukkit.getPlayer(event.getName()) != null) { + event.disallow(AsyncPlayerPreLoginEvent.Result.KICK_OTHER, "A player with that username is already logged in"); } + + /*try { + final PlayerProfile profile = event.getPlayerProfile(); + + UUID offlineUUID = UUID.nameUUIDFromBytes(("OfflinePlayer:" + event.getName()).getBytes(Charsets.UTF_8)); + + profile.setId(offlineUUID); + + SkinDownloader skinDownloader = new SkinDownloader(); + skinDownloader.fillJoinProfile(profile, event.getName(), event.getUniqueId()); + } catch (Exception ignored) { + }*/ } @EventHandler diff --git a/src/main/java/pw/kaboom/extras/modules/player/PlayerInteract.java b/src/main/java/pw/kaboom/extras/modules/player/PlayerInteract.java index 99294c7..c19a423 100644 --- a/src/main/java/pw/kaboom/extras/modules/player/PlayerInteract.java +++ b/src/main/java/pw/kaboom/extras/modules/player/PlayerInteract.java @@ -1,7 +1,8 @@ package pw.kaboom.extras.modules.player; import org.bukkit.Material; -import org.bukkit.block.Block; +import org.bukkit.block.BlockState; +import org.bukkit.block.Sign; import org.bukkit.enchantments.Enchantment; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; @@ -48,11 +49,10 @@ public final class PlayerInteract implements Listener { } if (event.getAction() == Action.RIGHT_CLICK_BLOCK) { - final Block clickedBlock = event.getClickedBlock(); + final BlockState clickedBlock = event.getClickedBlock().getState(); - if (clickedBlock.getType() == Material.SIGN - || clickedBlock.getType() == Material.WALL_SIGN) { - clickedBlock.getState().update(); + if (clickedBlock instanceof Sign) { + clickedBlock.update(); } } }