use of br.net.fabiozumbi12.RedProtect.Sponge.listeners.RPGlobalListener in project RedProtect by FabioZumbi12.
the class RPGlobalListener method onPlayerInteract.
@Listener(order = Order.FIRST, beforeModifications = true)
public void onPlayerInteract(InteractEvent e, @Root Player p) {
RedProtect.get().logger.debug("default", "RPGlobalListener - Is InteractEvent event! Cancelled? " + e.isCancelled());
if (!e.getInteractionPoint().isPresent()) {
return;
}
BlockSnapshot b = p.getWorld().createSnapshot(e.getInteractionPoint().get().toInt());
String bname = b.getState().getName().toLowerCase();
Location<World> loc = new Location<>(p.getWorld(), e.getInteractionPoint().get());
// Temporary fix until this event return wrong location
if (new Location<>(p.getWorld(), e.getInteractionPoint().get()).getBlockY() <= 2) {
loc = p.getLocation();
}
Region r = RedProtect.get().rm.getTopRegion(loc);
if (!canInteract(p, r)) {
e.setCancelled(true);
}
if (r != null) {
return;
}
if (bname.contains("rail") || bname.contains("water")) {
if (!RedProtect.get().cfgs.getGlobalFlag(p.getWorld().getName(), "use-minecart") && !p.hasPermission("redprotect.world.bypass")) {
e.setCancelled(true);
}
} else {
if (!RedProtect.get().cfgs.getGlobalFlag(p.getWorld().getName(), "interact") && !p.hasPermission("redprotect.world.bypass")) {
e.setCancelled(true);
return;
}
if (!RedProtect.get().cfgs.getGlobalFlag(p.getWorld().getName(), "build") && !p.hasPermission("redprotect.world.bypass") && bname.contains("leaves")) {
e.setCancelled(true);
}
}
}
use of br.net.fabiozumbi12.RedProtect.Sponge.listeners.RPGlobalListener in project RedProtect by FabioZumbi12.
the class RPGlobalListener method onEntityDamageEntity.
@Listener(order = Order.FIRST, beforeModifications = true)
public void onEntityDamageEntity(DamageEntityEvent e) {
Entity e1 = e.getTargetEntity();
Entity e2;
RedProtect.get().logger.debug("entity", "RPGlobalListener: DamageEntityEvent - e1: " + e1.getType().getName());
Region r = RedProtect.get().rm.getTopRegion(e1.getLocation());
if (e1 instanceof Living && !(e1 instanceof Monster)) {
if (r == null && RedProtect.get().cfgs.getGlobalFlag(e1.getWorld().getName(), "invincible")) {
e.setCancelled(true);
}
}
if (e.getCause().first(Living.class).isPresent()) {
e2 = e.getCause().first(Living.class).get();
RedProtect.get().logger.debug("entity", "RPGlobalListener: DamageEntityEvent - Is DamageEntityEvent event. Damager " + e2.getType().getName());
} else {
return;
}
RedProtect.get().logger.debug("entity", "RPGlobalListener: DamageEntityEvent - e1: " + e1.getType().getName() + " - e2: " + e2.getType().getName());
Location<World> loc = e1.getLocation();
Region r1 = RedProtect.get().rm.getTopRegion(loc);
if (r1 != null) {
return;
}
if (e2 instanceof Projectile) {
Projectile proj = (Projectile) e2;
if (proj.getShooter() instanceof Entity) {
e2 = (Entity) proj.getShooter();
}
if (!(e2 instanceof Player)) {
if (e1 instanceof Hanging || e1 instanceof ArmorStand) {
if (!RedProtect.get().cfgs.getGlobalFlag(e1.getWorld().getName(), "entity-block-damage")) {
e.setCancelled(true);
return;
}
}
}
}
if (e2 instanceof Creeper || e2 instanceof PrimedTNT || e2 instanceof TNTMinecart) {
if (e1 instanceof Player) {
if (!RedProtect.get().cfgs.getGlobalFlag(e1.getWorld().getName(), "explosion-entity-damage")) {
e.setCancelled(true);
return;
}
}
if (e1 instanceof Animal || e1 instanceof Villager || e1 instanceof Golem || e1 instanceof Ambient) {
if (!RedProtect.get().cfgs.getGlobalFlag(e1.getWorld().getName(), "explosion-entity-damage")) {
e.setCancelled(true);
return;
}
}
if (e1 instanceof Monster) {
if (!RedProtect.get().cfgs.getGlobalFlag(e1.getWorld().getName(), "explosion-entity-damage")) {
e.setCancelled(true);
return;
}
}
if (e1 instanceof Hanging || e1 instanceof ArmorStand) {
if (!RedProtect.get().cfgs.getGlobalFlag(e1.getWorld().getName(), "entity-block-damage")) {
e.setCancelled(true);
return;
}
}
}
if (e2 instanceof Player) {
Player p = (Player) e2;
if (e1 instanceof Player) {
if (!e1.equals(e2) && !RedProtect.get().cfgs.getGlobalFlag(e1.getWorld().getName(), "pvp") && !p.hasPermission("redprotect.world.bypass")) {
e.setCancelled(true);
return;
}
}
if (e1 instanceof Animal || e1 instanceof Villager || e1 instanceof Golem || e1 instanceof Ambient) {
if (!RedProtect.get().cfgs.getGlobalFlag(e1.getWorld().getName(), "player-hurt-passives") && !p.hasPermission("redprotect.world.bypass")) {
e.setCancelled(true);
return;
}
}
if (e1 instanceof Monster) {
if (!RedProtect.get().cfgs.getGlobalFlag(e1.getWorld().getName(), "player-hurt-monsters") && !p.hasPermission("redprotect.world.bypass")) {
e.setCancelled(true);
return;
}
}
if (e1 instanceof Boat || e1 instanceof Minecart) {
if (!RedProtect.get().cfgs.getGlobalFlag(e1.getWorld().getName(), "use-minecart") && !p.hasPermission("redprotect.world.bypass")) {
e.setCancelled(true);
return;
}
}
if (e1 instanceof Hanging || e1 instanceof ArmorStand) {
if (!RedProtect.get().cfgs.getGlobalFlag(e1.getWorld().getName(), "entity-block-damage") && !p.hasPermission("redprotect.world.bypass")) {
e.setCancelled(true);
return;
}
}
}
}
use of br.net.fabiozumbi12.RedProtect.Sponge.listeners.RPGlobalListener in project RedProtect by FabioZumbi12.
the class RedProtect method onServerStart.
@Listener
public void onServerStart(GameStartedServerEvent event) {
try {
String v = Sponge.getGame().getPlatform().getContainer(Component.API).getVersion().get();
instance = this;
if (v.startsWith("5") || v.startsWith("6")) {
pvhelp = (RPVHelper) Class.forName("br.net.fabiozumbi12.RedProtect.Sponge.RPVHelper56").newInstance();
}
if (v.startsWith("7")) {
pvhelp = (RPVHelper) Class.forName("br.net.fabiozumbi12.RedProtect.Sponge.RPVHelper7").newInstance();
}
initVars();
OnlineMode = serv.getOnlineMode();
cmdService.register(container, new RPCommands(), Arrays.asList("redprotect", "rp", "regionp", "regp"));
game.getEventManager().registerListeners(container, new RPGlobalListener());
game.getEventManager().registerListeners(container, new RPBlockListener());
game.getEventManager().registerListeners(container, new RPPlayerListener());
game.getEventManager().registerListeners(container, new RPEntityListener());
game.getEventManager().registerListeners(container, new RPWorldListener());
game.getEventManager().registerListeners(container, new RPMine18());
game.getEventManager().registerListeners(container, new RPAddProtection());
loadRegions();
logger.info("Loading API...");
this.rpAPI = new RedProtectAPI();
logger.info("API Loaded!");
logger.clear("&4 _ _ _ &c _ _ _ _ _ _ _ _ _ __");
logger.clear("&4|_| |_ | \\ &c|_| |_| | | | |_ | | / ");
logger.clear("&4| \\ |_ |_/ &c| | \\ |_| | |_ |_ | /");
logger.clear("&a¯ Redprotect " + container.getVersion().get() + " enabled");
logger.clear("");
} catch (Exception e) {
e.printStackTrace();
logger.severe("Error enabling RedProtect, plugin will shut down.");
}
}
Aggregations