mirror of
https://github.com/zDevelopers/ImageOnMap.git
synced 2025-02-20 13:21:22 +01:00
Image are now protected against creeper explosion, arrows, and other unwanted events that could grief maps
This commit is contained in:
parent
52ba80ab70
commit
7ef03a0eae
@ -56,10 +56,12 @@ import org.bukkit.entity.ItemFrame;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.entity.EntityDamageByBlockEvent;
|
||||
import org.bukkit.event.entity.EntityDamageByEntityEvent;
|
||||
import org.bukkit.event.entity.EntityPickupItemEvent;
|
||||
import org.bukkit.event.hanging.HangingBreakEvent;
|
||||
import org.bukkit.event.inventory.InventoryClickEvent;
|
||||
import org.bukkit.event.player.PlayerItemHeldEvent;
|
||||
import org.bukkit.event.world.ChunkEvent;
|
||||
import org.bukkit.event.world.ChunkLoadEvent;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.map.MapView;
|
||||
@ -145,6 +147,80 @@ public class MapInitEvent implements Listener {
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onEntityDamageByEntityEvent(EntityDamageByEntityEvent event) {
|
||||
//Negate entity interaction with item frame containing IoM maps.
|
||||
|
||||
Entity entity = event.getEntity();
|
||||
if (!(entity instanceof ItemFrame)) {
|
||||
return;
|
||||
}
|
||||
Entity damager = event.getDamager();
|
||||
if (damager instanceof Player) {
|
||||
//can solve the dup with the map here by doing a better handling
|
||||
return;
|
||||
}
|
||||
ItemStack item = ((ItemFrame) entity).getItem();
|
||||
if (item.getType() == Material.FILLED_MAP) {
|
||||
//if the map exist we canceled the event
|
||||
if (MapManager.getMap(item) != null) {
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onEntityDamageByBlockEvent(EntityDamageByBlockEvent event) {
|
||||
//Negate damage done to IoM maps by some blocks
|
||||
|
||||
Entity entity = event.getEntity();
|
||||
if (!(entity instanceof ItemFrame)) {
|
||||
return;
|
||||
}
|
||||
ItemStack item = ((ItemFrame) entity).getItem();
|
||||
if (item.getType() == Material.FILLED_MAP) {
|
||||
//if the map exist we canceled the event
|
||||
if (MapManager.getMap(item) != null) {
|
||||
switch (event.getCause()) {
|
||||
case MAGIC:
|
||||
case ENTITY_EXPLOSION:
|
||||
case FIRE_TICK:
|
||||
case LIGHTNING:
|
||||
case CRAMMING:
|
||||
case WITHER:
|
||||
case SUFFOCATION:
|
||||
case DROWNING:
|
||||
case BLOCK_EXPLOSION:
|
||||
event.setCancelled(true);
|
||||
break;
|
||||
default:
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@EventHandler
|
||||
public void onHangingBreakEvent(HangingBreakEvent event) {
|
||||
Entity entity = event.getEntity();
|
||||
PluginLogger.info("entity " + entity.toString());
|
||||
if (!(entity instanceof ItemFrame)) {
|
||||
return;
|
||||
}
|
||||
|
||||
ItemStack item = ((ItemFrame) entity).getItem();
|
||||
if (item.getType() == Material.FILLED_MAP) {
|
||||
//if the map exist we canceled the event
|
||||
if (MapManager.getMap(item) != null) {
|
||||
if (event.getCause() == HangingBreakEvent.RemoveCause.EXPLOSION) {
|
||||
//creeper goes boom
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
protected static final class EntitiesLoadListener implements Listener {
|
||||
@FutureEventHandler(event = "world.EntitiesLoadEvent")
|
||||
public void onEntitiesLoad(WrappedEvent event) {
|
||||
|
Loading…
Reference in New Issue
Block a user