mirror of
https://github.com/ColdeZhang/Dominion.git
synced 2025-02-05 01:39:29 +08:00
修复了床/重生锚爆炸可对领地造成破坏的漏洞 #4
This commit is contained in:
parent
0b15d34bdd
commit
aa9065eafe
@ -4,7 +4,7 @@ plugins {
|
||||
}
|
||||
|
||||
group = "cn.lunadeer"
|
||||
version = "2.3.7-beta"
|
||||
version = "2.3.8-beta"
|
||||
|
||||
java {
|
||||
toolchain.languageVersion.set(JavaLanguageVersion.of(21))
|
||||
|
@ -13,7 +13,7 @@ import java.util.Comparator;
|
||||
import java.util.List;
|
||||
|
||||
public enum Flag {
|
||||
ANCHOR("anchor", "重生锚", "是否允许设置重生锚", false, false, true),
|
||||
ANCHOR("anchor", "重生锚", "是否允许设置/使用重生锚", false, false, true),
|
||||
ANIMAL_KILLING("animal_killing", "对动物造成伤害", "是否允许对动物造成伤害", false, false, true),
|
||||
ANIMAL_SPAWN("animal_spawn", "动物生成(繁殖)", "是否允许动物生成(包括繁殖)", true, true, false),
|
||||
ANVIL("anvil", "使用铁砧", "是否允许使用铁砧", false, false, true),
|
||||
@ -26,7 +26,7 @@ public enum Flag {
|
||||
CONTAINER("container", "一般容器", "包含:箱子/木桶/潜影盒/盔甲架/展示框", false, false, true),
|
||||
CRAFT("craft", "使用工作台", "是否可以使用工作台", false, false, true),
|
||||
CRAFTER("crafter", "合成器", "是否可以修改自动合成器", false, false, true),
|
||||
CREEPER_EXPLODE("creeper_explode", "生物破坏", "包含:苦力怕/凋零头颅/末影水晶/火球爆炸等", false, true, true),
|
||||
CREEPER_EXPLODE("creeper_explode", "生物破坏/非TNT爆炸", "包含:苦力怕/凋零头颅/末影水晶/火球/床/重生锚爆炸等", false, true, true),
|
||||
COMPARER("comparer", "比较器交互", "是否可以修改比较器状态", false, false, true),
|
||||
DOOR("door", "门交互", "是否可以使用各种材质的门(包括活板门)", false, false, true),
|
||||
DRAGON_BREAK_BLOCK("dragon_break_block", "末影龙破坏方块", "末影龙冲撞是否可以破坏方块", false, true, true),
|
||||
|
@ -8,14 +8,12 @@ import org.bukkit.Location;
|
||||
import org.bukkit.Tag;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.block.BlockFace;
|
||||
import org.bukkit.block.BlockState;
|
||||
import org.bukkit.entity.*;
|
||||
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.BlockFromToEvent;
|
||||
import org.bukkit.event.block.BlockIgniteEvent;
|
||||
import org.bukkit.event.block.BlockPistonExtendEvent;
|
||||
import org.bukkit.event.block.*;
|
||||
import org.bukkit.event.entity.*;
|
||||
import org.bukkit.event.hanging.HangingBreakByEntityEvent;
|
||||
import org.bukkit.event.hanging.HangingBreakEvent;
|
||||
@ -43,6 +41,18 @@ public class EnvironmentEvents implements Listener {
|
||||
});
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGHEST) // creeper_explode - bed anchor
|
||||
public void onBedAnchorExplosion(BlockExplodeEvent event) {
|
||||
BlockState block = event.getExplodedBlockState();
|
||||
if (block == null) {
|
||||
return;
|
||||
}
|
||||
event.blockList().removeIf(blockState -> {
|
||||
DominionDTO dom = Cache.instance.getDominionByLoc(blockState.getLocation());
|
||||
return !checkFlag(dom, Flag.CREEPER_EXPLODE, null);
|
||||
});
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGHEST) // creeper_explode - item frame
|
||||
public void onItemFrameExploded(HangingBreakByEntityEvent event) {
|
||||
Entity entity = event.getEntity();
|
||||
|
@ -63,6 +63,24 @@ public class PlayerEvents implements Listener {
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGHEST) // anchor
|
||||
public void onAnchorInteractive(PlayerInteractEvent event) {
|
||||
if (event.getAction() != Action.RIGHT_CLICK_BLOCK) {
|
||||
return;
|
||||
}
|
||||
Block block = event.getClickedBlock();
|
||||
if (block == null) {
|
||||
return;
|
||||
}
|
||||
Material clicked = block.getType();
|
||||
if (clicked != Material.RESPAWN_ANCHOR) {
|
||||
return;
|
||||
}
|
||||
Player player = event.getPlayer();
|
||||
DominionDTO dom = Cache.instance.getDominionByLoc(block.getLocation());
|
||||
checkFlag(dom, Flag.ANCHOR, player, event);
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGHEST) // animal_killing
|
||||
public void onAnimalKilling(EntityDamageByEntityEvent event) {
|
||||
if (!(event.getDamager() instanceof Player bukkitPlayer)) {
|
||||
|
@ -8,14 +8,12 @@ import org.bukkit.Location;
|
||||
import org.bukkit.Tag;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.block.BlockFace;
|
||||
import org.bukkit.block.BlockState;
|
||||
import org.bukkit.entity.*;
|
||||
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.BlockFromToEvent;
|
||||
import org.bukkit.event.block.BlockIgniteEvent;
|
||||
import org.bukkit.event.block.BlockPistonExtendEvent;
|
||||
import org.bukkit.event.block.*;
|
||||
import org.bukkit.event.entity.*;
|
||||
import org.bukkit.event.hanging.HangingBreakByEntityEvent;
|
||||
import org.bukkit.event.hanging.HangingBreakEvent;
|
||||
@ -43,6 +41,18 @@ public class EnvironmentEvents implements Listener {
|
||||
});
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGHEST) // creeper_explode - bed anchor
|
||||
public void onBedAnchorExplosion(BlockExplodeEvent event) {
|
||||
BlockState block = event.getExplodedBlockState();
|
||||
if (block == null) {
|
||||
return;
|
||||
}
|
||||
event.blockList().removeIf(blockState -> {
|
||||
DominionDTO dom = Cache.instance.getDominionByLoc(blockState.getLocation());
|
||||
return !checkFlag(dom, Flag.CREEPER_EXPLODE, null);
|
||||
});
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGHEST) // creeper_explode - item frame
|
||||
public void onItemFrameExploded(HangingBreakByEntityEvent event) {
|
||||
Entity entity = event.getEntity();
|
||||
|
@ -63,6 +63,24 @@ public class PlayerEvents implements Listener {
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGHEST) // anchor
|
||||
public void onAnchorInteractive(PlayerInteractEvent event) {
|
||||
if (event.getAction() != Action.RIGHT_CLICK_BLOCK) {
|
||||
return;
|
||||
}
|
||||
Block block = event.getClickedBlock();
|
||||
if (block == null) {
|
||||
return;
|
||||
}
|
||||
Material clicked = block.getType();
|
||||
if (clicked != Material.RESPAWN_ANCHOR) {
|
||||
return;
|
||||
}
|
||||
Player player = event.getPlayer();
|
||||
DominionDTO dom = Cache.instance.getDominionByLoc(block.getLocation());
|
||||
checkFlag(dom, Flag.ANCHOR, player, event);
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGHEST) // animal_killing
|
||||
public void onAnimalKilling(EntityDamageByEntityEvent event) {
|
||||
if (!(event.getDamager() instanceof Player bukkitPlayer)) {
|
||||
|
Loading…
Reference in New Issue
Block a user