Don't remove player entities

This commit is contained in:
mathiascode 2020-01-05 22:11:57 +02:00
parent 03b66ccb2c
commit 00e7494dce
5 changed files with 99 additions and 31 deletions

View file

@ -8,6 +8,7 @@ import java.util.UUID;
import javax.net.ssl.HttpsURLConnection; import javax.net.ssl.HttpsURLConnection;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.scheduler.BukkitRunnable; import org.bukkit.scheduler.BukkitRunnable;

View file

@ -55,7 +55,7 @@ public class EntitySpawn implements Listener {
private boolean checkEntityLimits(EntityType entityType, Chunk chunk, World world, boolean isAddToWorldEvent) { private boolean checkEntityLimits(EntityType entityType, Chunk chunk, World world, boolean isAddToWorldEvent) {
final int chunkEntityCount = chunk.getEntities().length; final int chunkEntityCount = chunk.getEntities().length;
final int chunkEntityCountLimit = 50; final int chunkEntityCountLimit = 30;
final int worldDragonCount = world.getEntitiesByClass(EnderDragon.class).size(); final int worldDragonCount = world.getEntitiesByClass(EnderDragon.class).size();
final int worldDragonCountLimit = 24; final int worldDragonCountLimit = 24;
@ -214,7 +214,8 @@ public class EntitySpawn implements Listener {
final EntityType entityType = entity.getType(); final EntityType entityType = entity.getType();
final boolean isAddToWorldEvent = true; final boolean isAddToWorldEvent = true;
if (checkEntityLimits(entityType, chunk, world, isAddToWorldEvent)) { if (checkEntityLimits(entityType, chunk, world, isAddToWorldEvent)
&& entity.getType() != EntityType.PLAYER) {
entity.remove(); entity.remove();
return; return;
} }

View file

@ -1,5 +1,9 @@
package pw.kaboom.extras.modules.player; package pw.kaboom.extras.modules.player;
import com.destroystokyo.paper.profile.PlayerProfile;
import com.destroystokyo.paper.profile.ProfileProperty;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.Chunk; import org.bukkit.Chunk;
import org.bukkit.World; import org.bukkit.World;
@ -8,19 +12,27 @@ import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import org.bukkit.event.inventory.InventoryCloseEvent; import org.bukkit.event.inventory.InventoryCloseEvent;
import org.bukkit.event.player.AsyncPlayerPreLoginEvent; import org.bukkit.event.player.*;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerKickEvent;
import org.bukkit.event.player.PlayerLoginEvent;
import org.bukkit.event.player.PlayerLoginEvent.Result; import org.bukkit.event.player.PlayerLoginEvent.Result;
import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.scheduler.BukkitRunnable;
import pw.kaboom.extras.Main; import pw.kaboom.extras.Main;
import pw.kaboom.extras.helpers.SkinDownloader; import pw.kaboom.extras.helpers.SkinDownloader;
import javax.net.ssl.HttpsURLConnection;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
public final class PlayerConnection implements Listener { public final class PlayerConnection implements Listener {
private PlayerProfile profile;
private String texture;
private String signature;
/*public static boolean isIllegalItem(ItemStack item) { /*public static boolean isIllegalItem(ItemStack item) {
//try { //try {
if (item != null && if (item != null &&
@ -45,6 +57,15 @@ public final class PlayerConnection implements Listener {
event.disallow(AsyncPlayerPreLoginEvent.Result.KICK_OTHER, "A player with that username is already logged in"); event.disallow(AsyncPlayerPreLoginEvent.Result.KICK_OTHER, "A player with that username is already logged in");
} }
} }
try {
profile = event.getPlayerProfile();
profile.clearProperties();
fetchSkinData(event.getName());
profile.setProperty(new ProfileProperty("textures", texture, signature));
} catch (Exception ignored) {
}
} }
} }
@ -57,6 +78,13 @@ public final class PlayerConnection implements Listener {
} }
}*/ }*/
@EventHandler
void onPlayerCommandSend(final PlayerCommandSendEvent event) {
if (event.getPlayer().isOnline()) {
event.getCommands().clear();
}
}
@EventHandler @EventHandler
void onPlayerJoin(final PlayerJoinEvent event) { void onPlayerJoin(final PlayerJoinEvent event) {
final Player player = event.getPlayer(); final Player player = event.getPlayer();
@ -93,8 +121,6 @@ public final class PlayerConnection implements Listener {
return; return;
} }
final Player player = event.getPlayer();
if (!JavaPlugin.getPlugin(Main.class).getConfig().getBoolean("enableJoinRestrictions")) { if (!JavaPlugin.getPlugin(Main.class).getConfig().getBoolean("enableJoinRestrictions")) {
event.allow(); event.allow();
} }
@ -104,16 +130,18 @@ public final class PlayerConnection implements Listener {
event.allow(); event.allow();
} }
if (JavaPlugin.getPlugin(Main.class).getConfig().getBoolean("opOnJoin")) { final Player player = event.getPlayer();
player.setOp(true);
try {
player.setPlayerProfile(profile);
profile = null;
} catch (Exception ignored) {
} }
final String name = player.getName(); if (JavaPlugin.getPlugin(Main.class).getConfig().getBoolean("opOnJoin")
final boolean shouldChangeUsername = false; && !player.isOp()) {
final boolean shouldSendMessage = false; player.setOp(true);
}
SkinDownloader skinDownloader = new SkinDownloader();
skinDownloader.applySkin(player, name, shouldChangeUsername, shouldSendMessage);
} }
@SuppressWarnings("deprecation") @SuppressWarnings("deprecation")
@ -140,4 +168,19 @@ public final class PlayerConnection implements Listener {
} }
}*/ }*/
} }
private void fetchSkinData(final String playerName) throws IOException {
final URL skinUrl = new URL("https://api.ashcon.app/mojang/v2/user/" + playerName);
HttpsURLConnection skinConnection = (HttpsURLConnection) skinUrl.openConnection();
skinConnection.setConnectTimeout(0);
InputStreamReader skinStream = new InputStreamReader(skinConnection.getInputStream());
final JsonObject responseJson = new JsonParser().parse(skinStream).getAsJsonObject();
final JsonObject rawSkin = responseJson.getAsJsonObject("textures").getAsJsonObject("raw");
texture = rawSkin.get("value").getAsString();
signature = rawSkin.get("signature").getAsString();
skinStream.close();
skinConnection.disconnect();
}
} }

View file

@ -12,6 +12,7 @@ import org.bukkit.block.BlockFace;
import org.bukkit.entity.EntityType; import org.bukkit.entity.EntityType;
import org.bukkit.entity.ExperienceOrb; import org.bukkit.entity.ExperienceOrb;
import org.bukkit.entity.HumanEntity;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
@ -19,6 +20,8 @@ import org.bukkit.event.Listener;
import org.bukkit.event.entity.EntityDamageEvent; import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.event.entity.EntityDamageEvent.DamageCause; import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
import org.bukkit.event.entity.EntityRegainHealthEvent;
import org.bukkit.event.entity.FoodLevelChangeEvent;
import org.bukkit.event.entity.PlayerDeathEvent; import org.bukkit.event.entity.PlayerDeathEvent;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
@ -34,6 +37,24 @@ public final class PlayerDamage implements Listener {
} }
} }
@EventHandler
void onEntityRegainHealth(final EntityRegainHealthEvent event) {
if (event.getAmount() < 0) {
event.setCancelled(true);
}
}
@EventHandler
void onFoodLevelChange(final FoodLevelChangeEvent event) {
final HumanEntity player = event.getEntity();
if (player.getMaxHealth() <= 0) {
player.setMaxHealth(Double.POSITIVE_INFINITY);
player.setHealth(20);
player.setMaxHealth(20);
}
}
@EventHandler @EventHandler
void onPlayerDeath(final PlayerDeathEvent event) { void onPlayerDeath(final PlayerDeathEvent event) {
final Player player = event.getEntity(); final Player player = event.getEntity();
@ -43,20 +64,20 @@ public final class PlayerDamage implements Listener {
onlinePlayer.sendMessage(event.getDeathMessage()); onlinePlayer.sendMessage(event.getDeathMessage());
} }
if (!event.getKeepInventory()) {
player.getInventory().clear();
for (ItemStack item : event.getDrops()) {
player.getWorld().dropItemNaturally(player.getLocation(), item);
}
}
if (event.getDroppedExp() > 0) {
ExperienceOrb xp = player.getWorld().spawn(player.getLocation(), ExperienceOrb.class);
xp.setExperience(event.getDroppedExp());
}
try { try {
if (!event.getKeepInventory()) {
player.getInventory().clear();
for (ItemStack item : event.getDrops()) {
player.getWorld().dropItemNaturally(player.getLocation(), item);
}
}
if (event.getDroppedExp() > 0) {
ExperienceOrb xp = player.getWorld().spawn(player.getLocation(), ExperienceOrb.class);
xp.setExperience(event.getDroppedExp());
}
maxHealth.setBaseValue(20); maxHealth.setBaseValue(20);
player.setHealth(20); player.setHealth(20);

View file

@ -36,8 +36,10 @@ public final class ServerCommand implements Listener {
|| "fill".equalsIgnoreCase(arr[i + 1]) || "fill".equalsIgnoreCase(arr[i + 1])
|| "particle".equalsIgnoreCase(arr[i + 1]) || "particle".equalsIgnoreCase(arr[i + 1])
|| "save-off".equalsIgnoreCase(arr[i + 1]) || "save-off".equalsIgnoreCase(arr[i + 1])
|| "say".equalsIgnoreCase(arr[i + 1])
|| "spreadplayers".equalsIgnoreCase(arr[i + 1]) || "spreadplayers".equalsIgnoreCase(arr[i + 1])
|| "stop".equalsIgnoreCase(arr[i + 1])) { || "stop".equalsIgnoreCase(arr[i + 1])
|| "tellraw".equalsIgnoreCase(arr[i + 1])) {
Command.broadcastCommandMessage(sender, "Forbidden execute command detected"); Command.broadcastCommandMessage(sender, "Forbidden execute command detected");
return "cancel"; return "cancel";
} else if (i + 3 < arr.length } else if (i + 3 < arr.length