Allow preventing bed and respawn anchor explosions in EssentialsProtect

This commit is contained in:
pop4959 2020-07-05 18:45:32 -07:00
parent 1be3daf0b5
commit e7d9dbfbcf
6 changed files with 70 additions and 5 deletions

View File

@ -839,6 +839,8 @@ protect:
enderdragon-blockdamage: true
enderman-pickup: false
villager-death: false
bed-explosion: false
respawn-anchor-explosion: false
# Monsters won't follow players.
# permission essentials.protect.entitytarget.bypass disables this.
entitytarget: false

View File

@ -1,6 +1,5 @@
package com.earth2me.essentials.protect;
import com.earth2me.essentials.metrics.Metrics;
import com.earth2me.essentials.metrics.MetricsWrapper;
import com.earth2me.essentials.utils.VersionUtil;
import org.bukkit.Material;
@ -33,7 +32,7 @@ public class EssentialsProtect extends JavaPlugin implements IProtect {
enableEmergencyMode(pm);
return;
}
initialize(pm, essPlugin);
if (metrics == null) {
@ -52,7 +51,7 @@ public class EssentialsProtect extends JavaPlugin implements IProtect {
pm.registerEvents(entityListener, this);
if (VersionUtil.getServerBukkitVersion().isHigherThan(VersionUtil.v1_13_2_R01)) {
final EssentialsProtectEntityListener1_13_2_R1 entityListener1_13_2_r1 = new EssentialsProtectEntityListener1_13_2_R1(this);
final EssentialsProtectEntityListener_1_13_R1 entityListener1_13_2_r1 = new EssentialsProtectEntityListener_1_13_R1(this);
pm.registerEvents(entityListener1_13_2_r1, this);
}
if (VersionUtil.getServerBukkitVersion().isHigherThan(VersionUtil.v1_14_R01)) {
@ -60,6 +59,11 @@ public class EssentialsProtect extends JavaPlugin implements IProtect {
pm.registerEvents(entityListener_1_14_r1, this);
}
if (VersionUtil.getServerBukkitVersion().isHigherThanOrEqualTo(VersionUtil.v1_16_1_R01)) {
final EssentialsProtectBlockListener_1_16_R1 blockListener_1_16_r1 = new EssentialsProtectBlockListener_1_16_R1(this);
pm.registerEvents(blockListener_1_16_r1, this);
}
final EssentialsProtectWeatherListener weatherListener = new EssentialsProtectWeatherListener(this);
pm.registerEvents(weatherListener, this);
}

View File

@ -2,7 +2,9 @@ package com.earth2me.essentials.protect;
import com.earth2me.essentials.utils.EnumUtil;
import com.earth2me.essentials.utils.MaterialUtil;
import org.bukkit.Material;
import org.bukkit.World;
import org.bukkit.block.Block;
import org.bukkit.block.BlockFace;
import org.bukkit.entity.*;
@ -10,11 +12,13 @@ import org.bukkit.entity.minecart.ExplosiveMinecart;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.block.Action;
import org.bukkit.event.block.BlockBurnEvent;
import org.bukkit.event.block.BlockFromToEvent;
import org.bukkit.event.block.BlockIgniteEvent;
import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.event.world.PortalCreateEvent;
import java.util.Set;
@ -125,4 +129,19 @@ public class EssentialsProtectBlockListener implements Listener {
event.setCancelled(prot.getSettingBool(ProtectConfig.prevent_portal_creation));
}
}
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
public void onPlayerInteract(final PlayerInteractEvent event) {
if (!event.getAction().equals(Action.RIGHT_CLICK_BLOCK)) {
return;
}
Block block = event.getClickedBlock();
if (block == null) {
return;
}
World.Environment environment = block.getWorld().getEnvironment();
if (MaterialUtil.isBed(block.getType()) && !environment.equals(World.Environment.NORMAL)) {
event.setCancelled(prot.getSettingBool(ProtectConfig.prevent_bed_explosion));
}
}
}

View File

@ -0,0 +1,38 @@
package com.earth2me.essentials.protect;
import org.bukkit.Material;
import org.bukkit.World;
import org.bukkit.block.Block;
import org.bukkit.block.data.type.RespawnAnchor;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.block.Action;
import org.bukkit.event.player.PlayerInteractEvent;
public class EssentialsProtectBlockListener_1_16_R1 implements Listener {
final private IProtect prot;
EssentialsProtectBlockListener_1_16_R1(final IProtect parent) {
this.prot = parent;
}
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
public void onPlayerInteract(final PlayerInteractEvent event) {
if (!event.getAction().equals(Action.RIGHT_CLICK_BLOCK)) {
return;
}
Block block = event.getClickedBlock();
if (block == null) {
return;
}
World.Environment environment = block.getWorld().getEnvironment();
if (block.getType() == Material.RESPAWN_ANCHOR && !environment.equals(World.Environment.NETHER)) {
RespawnAnchor respawnAnchor = (RespawnAnchor) block.getBlockData();
if (respawnAnchor.getCharges() == respawnAnchor.getMaximumCharges()) {
event.setCancelled(prot.getSettingBool(ProtectConfig.prevent_respawn_anchor_explosion));
}
}
}
}

View File

@ -11,11 +11,11 @@ import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.EntityTransformEvent;
public class EssentialsProtectEntityListener1_13_2_R1 implements Listener {
public class EssentialsProtectEntityListener_1_13_R1 implements Listener {
private final IProtect prot;
private final IEssentials ess;
EssentialsProtectEntityListener1_13_2_R1(final IProtect prot) {
EssentialsProtectEntityListener_1_13_R1(final IProtect prot) {
this.prot = prot;
this.ess = prot.getEssentialsConnect().getEssentials();
}

View File

@ -47,6 +47,8 @@ public enum ProtectConfig {
prevent_ender_crystal_explosion("protect.prevent.ender-crystal-explosion", false),
prevent_enderman_pickup("protect.prevent.enderman-pickup", false),
prevent_villager_death("protect.prevent.villager-death", false),
prevent_bed_explosion("protect.prevent.bed-explosion", false),
prevent_respawn_anchor_explosion("protect.prevent.respawn-anchor-explosion", false),
prevent_enderdragon_blockdmg("protect.prevent.enderdragon-blockdamage", true),
prevent_entitytarget("protect.prevent.entitytarget", false),
enderdragon_fakeexplosions("protect.enderdragon-fakeexplosions", false),