mirror of
https://github.com/kaboomserver/extras.git
synced 2024-06-01 01:41:22 +00:00
Improve boundary limits
This commit is contained in:
parent
4fca7c8c80
commit
c246fb9b27
|
@ -28,6 +28,7 @@ import org.bukkit.entity.LivingEntity;
|
||||||
import org.bukkit.entity.MagmaCube;
|
import org.bukkit.entity.MagmaCube;
|
||||||
import org.bukkit.entity.Slime;
|
import org.bukkit.entity.Slime;
|
||||||
import org.bukkit.entity.TNTPrimed;
|
import org.bukkit.entity.TNTPrimed;
|
||||||
|
import org.bukkit.entity.Vehicle;
|
||||||
|
|
||||||
import org.bukkit.event.block.BlockDispenseEvent;
|
import org.bukkit.event.block.BlockDispenseEvent;
|
||||||
|
|
||||||
|
@ -39,6 +40,8 @@ import org.bukkit.event.entity.SpawnerSpawnEvent;
|
||||||
|
|
||||||
import org.bukkit.event.player.PlayerDropItemEvent;
|
import org.bukkit.event.player.PlayerDropItemEvent;
|
||||||
|
|
||||||
|
import org.bukkit.event.vehicle.VehicleCreateEvent;
|
||||||
|
|
||||||
import org.bukkit.inventory.Inventory;
|
import org.bukkit.inventory.Inventory;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
import org.bukkit.inventory.meta.BannerMeta;
|
import org.bukkit.inventory.meta.BannerMeta;
|
||||||
|
@ -67,7 +70,6 @@ class EntitySpawn implements Listener {
|
||||||
if (entity instanceof LivingEntity) {
|
if (entity instanceof LivingEntity) {
|
||||||
final LivingEntity mob = (LivingEntity) entity;
|
final LivingEntity mob = (LivingEntity) entity;
|
||||||
|
|
||||||
//checkIllegalEquipment(mob);
|
|
||||||
limitFollowAttribute(mob);
|
limitFollowAttribute(mob);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -102,42 +104,6 @@ class EntitySpawn implements Listener {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*private void checkIllegalEquipment(LivingEntity mob) {
|
|
||||||
try {
|
|
||||||
for (ItemStack item : mob.getEquipment().getArmorContents()) {
|
|
||||||
if (isIllegalItem(item)) {
|
|
||||||
mob.getEquipment().setArmorContents(
|
|
||||||
new ItemStack[] {null, null, null, null}
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} catch (Exception exception) {
|
|
||||||
mob.getEquipment().setArmorContents(
|
|
||||||
new ItemStack[] {null, null, null, null}
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
ItemStack item = mob.getEquipment().getItemInMainHand();
|
|
||||||
|
|
||||||
if (isIllegalItem(item)) {
|
|
||||||
mob.getEquipment().setItemInMainHand(null);
|
|
||||||
}
|
|
||||||
} catch (Exception exception) {
|
|
||||||
mob.getEquipment().setItemInMainHand(null);
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
ItemStack item = mob.getEquipment().getItemInOffHand();
|
|
||||||
|
|
||||||
if (isIllegalItem(item)) {
|
|
||||||
mob.getEquipment().setItemInOffHand(null);
|
|
||||||
}
|
|
||||||
} catch (Exception exception) {
|
|
||||||
mob.getEquipment().setItemInOffHand(null);
|
|
||||||
}
|
|
||||||
}*/
|
|
||||||
|
|
||||||
private boolean checkShouldRemoveEntities(World world) {
|
private boolean checkShouldRemoveEntities(World world) {
|
||||||
final int worldEntityCount = world.getEntities().size();
|
final int worldEntityCount = world.getEntities().size();
|
||||||
|
|
||||||
|
@ -170,39 +136,20 @@ class EntitySpawn implements Listener {
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean isOutsideBoundaries(double X, double Y, double Z) {
|
private boolean isOutsideBoundaries(double X, double Y, double Z) {
|
||||||
int roundedX = (int) Math.round(X);
|
int maxValue = 30000000;
|
||||||
int roundedY = (int) Math.round(Y);
|
int minValue = -30000000;
|
||||||
int roundedZ = (int) Math.round(Z);
|
|
||||||
|
|
||||||
if (X != roundedX ||
|
if (X > maxValue ||
|
||||||
Y != roundedY ||
|
X < minValue ||
|
||||||
Z != roundedZ) {
|
Y > maxValue ||
|
||||||
|
Y < minValue ||
|
||||||
|
Z > maxValue ||
|
||||||
|
Z < minValue) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*public static boolean isIllegalItem(ItemStack item) {
|
|
||||||
try {
|
|
||||||
if (item != null &&
|
|
||||||
item.hasItemMeta()) {
|
|
||||||
if (item.getItemMeta() instanceof BannerMeta) {
|
|
||||||
final BannerMeta banner = (BannerMeta) item.getItemMeta();
|
|
||||||
|
|
||||||
for (Pattern pattern : banner.getPatterns()) {
|
|
||||||
if (pattern.getPattern() == null ||
|
|
||||||
pattern.getColor() == null) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} catch (Exception | StackOverflowError exception) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}*/
|
|
||||||
|
|
||||||
private void limitAreaEffectCloudRadius(AreaEffectCloud cloud) {
|
private void limitAreaEffectCloudRadius(AreaEffectCloud cloud) {
|
||||||
if (cloud.getRadius() > 40) {
|
if (cloud.getRadius() > 40) {
|
||||||
cloud.setRadius(40);
|
cloud.setRadius(40);
|
||||||
|
@ -225,6 +172,34 @@ class EntitySpawn implements Listener {
|
||||||
followAttribute.setBaseValue(40);
|
followAttribute.setBaseValue(40);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static Location limitLocation(Location location) {
|
||||||
|
double X = location.getX();
|
||||||
|
double Y = location.getY();
|
||||||
|
double Z = location.getZ();
|
||||||
|
|
||||||
|
int maxValue = 30000000;
|
||||||
|
int minValue = -30000000;
|
||||||
|
|
||||||
|
if (X > maxValue)
|
||||||
|
X = maxValue;
|
||||||
|
if (X < minValue)
|
||||||
|
X = minValue;
|
||||||
|
if (Y > maxValue)
|
||||||
|
Y = maxValue;
|
||||||
|
if (Y < minValue)
|
||||||
|
Y = minValue;
|
||||||
|
if (Z > maxValue)
|
||||||
|
Z = maxValue;
|
||||||
|
if (Z < minValue)
|
||||||
|
Z = minValue;
|
||||||
|
|
||||||
|
System.out.println(X);
|
||||||
|
System.out.println(Y);
|
||||||
|
System.out.println(Z);
|
||||||
|
|
||||||
|
return new Location(location.getWorld(), X, Y, Z);
|
||||||
|
}
|
||||||
|
|
||||||
private void limitSlimeSize(Slime slime) {
|
private void limitSlimeSize(Slime slime) {
|
||||||
if (slime.getSize() > 50) {
|
if (slime.getSize() > 50) {
|
||||||
|
@ -257,22 +232,12 @@ class EntitySpawn implements Listener {
|
||||||
limitAreaEffectCloudRadius(event.getEntity());
|
limitAreaEffectCloudRadius(event.getEntity());
|
||||||
}
|
}
|
||||||
|
|
||||||
/*@EventHandler
|
|
||||||
void onBlockDispense(BlockDispenseEvent event) {
|
|
||||||
try {
|
|
||||||
event.getBlock().getState();
|
|
||||||
event.getItem().getItemMeta();
|
|
||||||
} catch (Exception exception) {
|
|
||||||
event.setCancelled(true);
|
|
||||||
}
|
|
||||||
}*/
|
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
void onEntityAddToWorld(EntityAddToWorldEvent event) {
|
void onEntityAddToWorld(EntityAddToWorldEvent event) {
|
||||||
final Entity entity = event.getEntity();
|
final Entity entity = event.getEntity();
|
||||||
double X = entity.getLocation().getX();
|
final double X = entity.getLocation().getX();
|
||||||
double Y = entity.getLocation().getY();
|
final double Y = entity.getLocation().getY();
|
||||||
double Z = entity.getLocation().getZ();
|
final double Z = entity.getLocation().getZ();
|
||||||
|
|
||||||
if (isOutsideBoundaries(X, Y, Z)) {
|
if (isOutsideBoundaries(X, Y, Z)) {
|
||||||
entity.remove();
|
entity.remove();
|
||||||
|
@ -298,30 +263,12 @@ class EntitySpawn implements Listener {
|
||||||
checkShouldRemoveEntities(world);
|
checkShouldRemoveEntities(world);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*@EventHandler
|
|
||||||
void onEntityAirChangeEvent(EntityAirChangeEvent event) {
|
|
||||||
final Entity entity = event.getEntity();
|
|
||||||
double X = entity.getLocation().getX();
|
|
||||||
double Y = entity.getLocation().getY();
|
|
||||||
double Z = entity.getLocation().getZ();
|
|
||||||
|
|
||||||
System.out.println(X);
|
|
||||||
System.out.println(Y);
|
|
||||||
System.out.println(Z);
|
|
||||||
System.out.println(entity.getChunk().getX());
|
|
||||||
System.out.println(entity.getChunk().getZ());
|
|
||||||
|
|
||||||
if (isOutsideBoundaries(X, Y, Z)) {
|
|
||||||
entity.remove();
|
|
||||||
}
|
|
||||||
}*/
|
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
void onEntitySpawn(EntitySpawnEvent event) {
|
void onEntitySpawn(EntitySpawnEvent event) {
|
||||||
double X = event.getLocation().getX();
|
final double X = event.getLocation().getX();
|
||||||
double Y = event.getLocation().getY();
|
final double Y = event.getLocation().getY();
|
||||||
double Z = event.getLocation().getZ();
|
final double Z = event.getLocation().getZ();
|
||||||
|
|
||||||
if (isOutsideBoundaries(X, Y, Z)) {
|
if (isOutsideBoundaries(X, Y, Z)) {
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
|
@ -342,26 +289,6 @@ class EntitySpawn implements Listener {
|
||||||
applyEntityChanges(entity);
|
applyEntityChanges(entity);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*@EventHandler
|
|
||||||
void onItemSpawn(ItemSpawnEvent event) {
|
|
||||||
final ItemStack item = event.getEntity().getItemStack();
|
|
||||||
|
|
||||||
if (isIllegalItem(item)) {
|
|
||||||
event.setCancelled(true);
|
|
||||||
}
|
|
||||||
}*/
|
|
||||||
|
|
||||||
/*@EventHandler
|
|
||||||
void onPlayerDropItem(PlayerDropItemEvent event) {
|
|
||||||
final Inventory inventory = event.getPlayer().getInventory();
|
|
||||||
|
|
||||||
for (ItemStack item : inventory.getContents()) {
|
|
||||||
if (isIllegalItem(item)) {
|
|
||||||
inventory.clear();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}*/
|
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
void onPreCreatureSpawn(PreCreatureSpawnEvent event) {
|
void onPreCreatureSpawn(PreCreatureSpawnEvent event) {
|
||||||
final EntityType mobType = event.getType();
|
final EntityType mobType = event.getType();
|
||||||
|
@ -409,4 +336,27 @@ class EntitySpawn implements Listener {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
void onVehicleCreate(VehicleCreateEvent event) {
|
||||||
|
final Vehicle vehicle = event.getVehicle();
|
||||||
|
final double X = vehicle.getLocation().getX();
|
||||||
|
final double Y = vehicle.getLocation().getY();
|
||||||
|
final double Z = vehicle.getLocation().getZ();
|
||||||
|
|
||||||
|
if (isOutsideBoundaries(X, Y, Z)) {
|
||||||
|
event.setCancelled(true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
final EntityType entityType = vehicle.getType();
|
||||||
|
final Chunk chunk = vehicle.getChunk();
|
||||||
|
final World world = vehicle.getWorld();
|
||||||
|
final boolean isAddToWorldEvent = false;
|
||||||
|
|
||||||
|
if (checkEntityLimits(entityType, chunk, world, isAddToWorldEvent)) {
|
||||||
|
event.setCancelled(true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,8 +1,5 @@
|
||||||
package pw.kaboom.extras;
|
package pw.kaboom.extras;
|
||||||
|
|
||||||
import org.bukkit.Location;
|
|
||||||
import org.bukkit.World;
|
|
||||||
|
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.Listener;
|
import org.bukkit.event.Listener;
|
||||||
|
|
||||||
|
@ -11,13 +8,6 @@ import org.bukkit.event.entity.EntityTeleportEvent;
|
||||||
class EntityTeleport implements Listener {
|
class EntityTeleport implements Listener {
|
||||||
@EventHandler
|
@EventHandler
|
||||||
void onEntityTeleport(EntityTeleportEvent event) {
|
void onEntityTeleport(EntityTeleportEvent event) {
|
||||||
final World world = event.getTo().getWorld();
|
event.setTo(EntitySpawn.limitLocation(event.getTo()));
|
||||||
int X = (int) Math.round(event.getTo().getX());
|
|
||||||
int Y = (int) Math.round(event.getTo().getY());
|
|
||||||
int Z = (int) Math.round(event.getTo().getZ());
|
|
||||||
|
|
||||||
event.setTo(
|
|
||||||
new Location(world, X, Y, Z)
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,8 +1,5 @@
|
||||||
package pw.kaboom.extras;
|
package pw.kaboom.extras;
|
||||||
|
|
||||||
import org.bukkit.Location;
|
|
||||||
import org.bukkit.World;
|
|
||||||
|
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.Listener;
|
import org.bukkit.event.Listener;
|
||||||
|
|
||||||
|
@ -11,13 +8,6 @@ import org.bukkit.event.player.PlayerTeleportEvent;
|
||||||
class PlayerTeleport implements Listener {
|
class PlayerTeleport implements Listener {
|
||||||
@EventHandler
|
@EventHandler
|
||||||
void onPlayerTeleport(PlayerTeleportEvent event) {
|
void onPlayerTeleport(PlayerTeleportEvent event) {
|
||||||
final World world = event.getTo().getWorld();
|
event.setTo(EntitySpawn.limitLocation(event.getTo()));
|
||||||
int X = (int) Math.round(event.getTo().getX());
|
|
||||||
int Y = (int) Math.round(event.getTo().getY());
|
|
||||||
int Z = (int) Math.round(event.getTo().getZ());
|
|
||||||
|
|
||||||
event.setTo(
|
|
||||||
new Location(world, X, Y, Z)
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue