mirror of
https://github.com/EngineHub/WorldGuard.git
synced 2024-06-26 14:34:53 +02:00
entity-armor-stand-destroy flag is added.
This commit is contained in:
parent
bc63119373
commit
52ca80b793
|
@ -66,20 +66,7 @@
|
||||||
import org.bukkit.block.data.BlockData;
|
import org.bukkit.block.data.BlockData;
|
||||||
import org.bukkit.block.data.Waterlogged;
|
import org.bukkit.block.data.Waterlogged;
|
||||||
import org.bukkit.block.data.type.Dispenser;
|
import org.bukkit.block.data.type.Dispenser;
|
||||||
import org.bukkit.entity.AreaEffectCloud;
|
import org.bukkit.entity.*;
|
||||||
import org.bukkit.entity.Creeper;
|
|
||||||
import org.bukkit.entity.Entity;
|
|
||||||
import org.bukkit.entity.EntityType;
|
|
||||||
import org.bukkit.entity.FallingBlock;
|
|
||||||
import org.bukkit.entity.Firework;
|
|
||||||
import org.bukkit.entity.Item;
|
|
||||||
import org.bukkit.entity.ItemFrame;
|
|
||||||
import org.bukkit.entity.LivingEntity;
|
|
||||||
import org.bukkit.entity.Mob;
|
|
||||||
import org.bukkit.entity.Painting;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
import org.bukkit.entity.Tameable;
|
|
||||||
import org.bukkit.entity.ThrownPotion;
|
|
||||||
import org.bukkit.entity.minecart.HopperMinecart;
|
import org.bukkit.entity.minecart.HopperMinecart;
|
||||||
import org.bukkit.event.Cancellable;
|
import org.bukkit.event.Cancellable;
|
||||||
import org.bukkit.event.Event;
|
import org.bukkit.event.Event;
|
||||||
|
@ -762,6 +749,8 @@ public void onHangingBreak(HangingBreakEvent event) {
|
||||||
destroyEntityEvent.getRelevantFlags().add(Flags.ENTITY_ITEM_FRAME_DESTROY);
|
destroyEntityEvent.getRelevantFlags().add(Flags.ENTITY_ITEM_FRAME_DESTROY);
|
||||||
} else if (event.getEntity() instanceof Painting) {
|
} else if (event.getEntity() instanceof Painting) {
|
||||||
destroyEntityEvent.getRelevantFlags().add(Flags.ENTITY_PAINTING_DESTROY);
|
destroyEntityEvent.getRelevantFlags().add(Flags.ENTITY_PAINTING_DESTROY);
|
||||||
|
} else if (event.getEntity() instanceof ArmorStand) {
|
||||||
|
destroyEntityEvent.getRelevantFlags().add(Flags.ENTITY_ARMOR_STAND_DESTROY);
|
||||||
}
|
}
|
||||||
Events.fireToCancel(event, destroyEntityEvent);
|
Events.fireToCancel(event, destroyEntityEvent);
|
||||||
}
|
}
|
||||||
|
|
|
@ -208,8 +208,8 @@ private void onEntityDamageByEntity(EntityDamageByEntityEvent event) {
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
} else if (defender instanceof ArmorStand && !(attacker instanceof Player)) {
|
} else if (defender instanceof ArmorStand) {
|
||||||
if (wcfg.blockEntityArmorStandDestroy) {
|
if (checkArmorStandProtection(attacker, (ArmorStand) defender)) {
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -334,9 +334,10 @@ private void onEntityDamageByProjectile(EntityDamageByEntityEvent event) {
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
} else if (defender instanceof ArmorStand && Entities.isNonPlayerCreature(attacker)) {
|
} else if (defender instanceof ArmorStand) {
|
||||||
if (wcfg.blockEntityArmorStandDestroy) {
|
if (checkArmorStandProtection(attacker, (ArmorStand) defender)) {
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -851,4 +852,27 @@ private boolean checkItemFrameProtection(Entity attacker, ItemFrame defender) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks regions and config settings to protect items from being knocked
|
||||||
|
* out of armor stand.
|
||||||
|
* @param attacker attacking entity
|
||||||
|
* @param defender armor stand being damaged
|
||||||
|
* @return true if the event should be cancelled
|
||||||
|
*/
|
||||||
|
private boolean checkArmorStandProtection(Entity attacker, ArmorStand defender) {
|
||||||
|
World world = defender.getWorld();
|
||||||
|
WorldConfiguration wcfg = getWorldConfig(world);
|
||||||
|
if (wcfg.useRegions) {
|
||||||
|
// bukkit throws this event when a player attempts to remove an item from a frame
|
||||||
|
if (!(attacker instanceof Player)) {
|
||||||
|
if (!StateFlag.test(WorldGuard.getInstance().getPlatform().getRegionContainer().createQuery().queryState(BukkitAdapter.adapt(defender.getLocation()), (RegionAssociable) null, Flags.ENTITY_ARMOR_STAND_DESTROY))) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (wcfg.blockEntityArmorStandDestroy && !(attacker instanceof Player)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,14 +27,7 @@
|
||||||
import com.sk89q.worldguard.protection.flags.Flags;
|
import com.sk89q.worldguard.protection.flags.Flags;
|
||||||
import com.sk89q.worldguard.protection.flags.StateFlag;
|
import com.sk89q.worldguard.protection.flags.StateFlag;
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
import org.bukkit.entity.Creeper;
|
import org.bukkit.entity.*;
|
||||||
import org.bukkit.entity.Entity;
|
|
||||||
import org.bukkit.entity.Hanging;
|
|
||||||
import org.bukkit.entity.ItemFrame;
|
|
||||||
import org.bukkit.entity.LivingEntity;
|
|
||||||
import org.bukkit.entity.Painting;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
import org.bukkit.entity.Projectile;
|
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.EventPriority;
|
import org.bukkit.event.EventPriority;
|
||||||
import org.bukkit.event.hanging.HangingBreakByEntityEvent;
|
import org.bukkit.event.hanging.HangingBreakByEntityEvent;
|
||||||
|
@ -90,6 +83,11 @@ public void onHangingBreak(HangingBreakEvent event) {
|
||||||
|| (wcfg.useRegions
|
|| (wcfg.useRegions
|
||||||
&& !StateFlag.test(WorldGuard.getInstance().getPlatform().getRegionContainer().createQuery().queryState(BukkitAdapter.adapt(hanging.getLocation()), (RegionAssociable) null, Flags.ENTITY_ITEM_FRAME_DESTROY))))) {
|
&& !StateFlag.test(WorldGuard.getInstance().getPlatform().getRegionContainer().createQuery().queryState(BukkitAdapter.adapt(hanging.getLocation()), (RegionAssociable) null, Flags.ENTITY_ITEM_FRAME_DESTROY))))) {
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
|
} else if (hanging instanceof ArmorStand
|
||||||
|
&& (wcfg.blockEntityArmorStandDestroy
|
||||||
|
|| (wcfg.useRegions
|
||||||
|
&& !StateFlag.test(WorldGuard.getInstance().getPlatform().getRegionContainer().createQuery().queryState(BukkitAdapter.adapt(hanging.getLocation()), (RegionAssociable) null, Flags.ENTITY_ARMOR_STAND_DESTROY))))) {
|
||||||
|
event.setCancelled(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -99,6 +99,7 @@ public final class Flags {
|
||||||
public static final StateFlag RAVAGER_RAVAGE = register(new StateFlag("ravager-grief", true));
|
public static final StateFlag RAVAGER_RAVAGE = register(new StateFlag("ravager-grief", true));
|
||||||
public static final StateFlag ENTITY_PAINTING_DESTROY = register(new StateFlag("entity-painting-destroy", true));
|
public static final StateFlag ENTITY_PAINTING_DESTROY = register(new StateFlag("entity-painting-destroy", true));
|
||||||
public static final StateFlag ENTITY_ITEM_FRAME_DESTROY = register(new StateFlag("entity-item-frame-destroy", true));
|
public static final StateFlag ENTITY_ITEM_FRAME_DESTROY = register(new StateFlag("entity-item-frame-destroy", true));
|
||||||
|
public static final StateFlag ENTITY_ARMOR_STAND_DESTROY = register(new StateFlag("entity-armor-stand-destroy", true));
|
||||||
|
|
||||||
// mob spawning related
|
// mob spawning related
|
||||||
public static final StateFlag MOB_SPAWNING = register(new StateFlag("mob-spawning", true));
|
public static final StateFlag MOB_SPAWNING = register(new StateFlag("mob-spawning", true));
|
||||||
|
|
Loading…
Reference in New Issue
Block a user