Prevent server from half-crashing

This commit is contained in:
mathiascode 2020-04-21 16:44:24 +03:00
parent 92d9e4ad64
commit 6fe4e56a7f
3 changed files with 50 additions and 48 deletions

View file

@ -40,7 +40,7 @@ public final class BlockPhysics implements Listener {
} }
} }
} }
} catch (Exception e) { } catch (Exception | StackOverflowError e) {
event.setCancelled(true); event.setCancelled(true);
} }
} }
@ -52,44 +52,52 @@ public final class BlockPhysics implements Listener {
event.getBlock().setType(Material.AIR, false); event.getBlock().setType(Material.AIR, false);
event.setCancelled(true); event.setCancelled(true);
} }
} catch (Exception e) { } catch (Exception | StackOverflowError e) {
event.setCancelled(true); event.setCancelled(true);
} }
} }
@EventHandler @EventHandler
void onBlockForm(final BlockFormEvent event) { void onBlockForm(final BlockFormEvent event) {
if (event.getBlock().getType() == Material.LAVA try {
|| event.getBlock().getType() == Material.WATER) { if (event.getBlock().getType() == Material.LAVA
for (BlockFace face : getBlockFaces()) { || event.getBlock().getType() == Material.WATER) {
if (event.getBlock().getRelative(face).getType() != Material.LAVA for (BlockFace face : getBlockFaces()) {
&& event.getBlock().getRelative(face).getType() != Material.WATER) { if (event.getBlock().getRelative(face).getType() != Material.LAVA
return; && event.getBlock().getRelative(face).getType() != Material.WATER) {
return;
}
event.setCancelled(true);
} }
event.setCancelled(true);
} }
} catch (Exception | StackOverflowError e) {
event.setCancelled(true);
} }
} }
@EventHandler @EventHandler
void onBlockFromTo(final BlockFromToEvent event) { void onBlockFromTo(final BlockFromToEvent event) {
if (event.getBlock().getType() == Material.LAVA try {
|| event.getBlock().getType() == Material.WATER) { if (event.getBlock().getType() == Material.LAVA
boolean lavaFound = false; || event.getBlock().getType() == Material.WATER) {
boolean waterFound = false; boolean lavaFound = false;
boolean waterFound = false;
for (BlockFace face : getBlockFaces()) { for (BlockFace face : getBlockFaces()) {
if (event.getBlock().getRelative(face).getType() == Material.LAVA && !lavaFound) { if (event.getBlock().getRelative(face).getType() == Material.LAVA && !lavaFound) {
lavaFound = true; lavaFound = true;
} else if (event.getBlock().getRelative(face).getType() == Material.WATER && !waterFound) { } else if (event.getBlock().getRelative(face).getType() == Material.WATER && !waterFound) {
waterFound = true; waterFound = true;
} }
if (lavaFound && waterFound) { if (lavaFound && waterFound) {
event.setCancelled(true); event.setCancelled(true);
return; return;
}
} }
} }
} catch (Exception | StackOverflowError e) {
event.setCancelled(true);
} }
} }
@ -121,7 +129,7 @@ public final class BlockPhysics implements Listener {
default: default:
break; break;
} }
} catch (Exception e) { } catch (Exception | StackOverflowError e) {
event.setCancelled(true); event.setCancelled(true);
} }
} }

View file

@ -27,27 +27,21 @@ import pw.kaboom.extras.Main;
public final class PlayerConnection implements Listener { public final class PlayerConnection implements Listener {
@EventHandler @EventHandler
void onAsyncPlayerPreLogin(final AsyncPlayerPreLoginEvent event) { void onAsyncPlayerPreLogin(final AsyncPlayerPreLoginEvent event) {
if (event.getName().length() > 16) { if (Bukkit.getPlayer(event.getName()) != null) {
event.disallow(AsyncPlayerPreLoginEvent.Result.KICK_OTHER, "Your username can't be longer than 16 characters"); event.disallow(AsyncPlayerPreLoginEvent.Result.KICK_OTHER, "A player with that username is already logged in");
} 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) {
}*/
} }
/*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 @EventHandler

View file

@ -1,7 +1,8 @@
package pw.kaboom.extras.modules.player; package pw.kaboom.extras.modules.player;
import org.bukkit.Material; 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.enchantments.Enchantment;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
@ -48,11 +49,10 @@ public final class PlayerInteract implements Listener {
} }
if (event.getAction() == Action.RIGHT_CLICK_BLOCK) { if (event.getAction() == Action.RIGHT_CLICK_BLOCK) {
final Block clickedBlock = event.getClickedBlock(); final BlockState clickedBlock = event.getClickedBlock().getState();
if (clickedBlock.getType() == Material.SIGN if (clickedBlock instanceof Sign) {
|| clickedBlock.getType() == Material.WALL_SIGN) { clickedBlock.update();
clickedBlock.getState().update();
} }
} }
} }