本帖最后由 卿歌 于 2022-4-6 01:47 编辑
问题写在下面的代码里了。我是萌新,只是为了满足小需求。但是研究了很久,所以来像各位大佬请教了。
最好是判定是否在某个worldguard区域内
复制代码
问题写在下面的代码里了。我是萌新,只是为了满足小需求。但是研究了很久,所以来像各位大佬请教了。

最好是判定是否在某个worldguard区域内
- @EventHandler
- public void onDynamaxEvent(ForgeEvent e) {
- if (e.getForgeEvent() instanceof DynamaxEvent.BattleEvolve) {
- DynamaxEvent.BattleEvolve event = (DynamaxEvent.BattleEvolve) e.getForgeEvent();
- Player player = Bukkit.getPlayer(event.pw.getOwnerName());
- if () { #问题在这,如何判定玩家在 X-10 ~ X-20 Z-10 ~ Z-20 Y-0 ~Y-255 这个范围内
- event.setCanceled(false);
- }
- if (this.Adpwn.contains(player.getWorld().getName())) {
- event.setCanceled(true);
- player.sendMessage(this.getConfig().getString("Adp-msg"));
- }
- }
- }
游戏的这个能取到的值我不太清楚 但是如果可以的话 应该判定 玩家坐标x < -10 and 玩家坐标x > -20 and 玩家坐标z <-10 and 玩家坐标z > -20 and 玩家坐标y >= 0 and 玩家坐标y <=255
worldguard有API
获取名为“spawn”的区域
RegionContainer container = WorldGuard.getInstance().getPlatform().getRegionContainer();
RegionManager regions = container.get(world);
Region region = regions.getRegion("spawn");
判断玩家是否在此
region.contains(player.getLocation());
更多内容请看它的文档
https://worldguard.enginehub.org/en/latest/developer/
获取名为“spawn”的区域
RegionContainer container = WorldGuard.getInstance().getPlatform().getRegionContainer();
RegionManager regions = container.get(world);
Region region = regions.getRegion("spawn");
判断玩家是否在此
region.contains(player.getLocation());
更多内容请看它的文档
https://worldguard.enginehub.org/en/latest/developer/
本帖最后由 卿歌 于 2022-4-6 09:45 编辑
可以整个完整的吗?就是套入我上面的代码里。整了半天发现有或多或少的问题。
因为我处于学习阶段,所以能给个保姆型教材不。这样我就可以分析问题下次就能解决它了。昨晚就已经研究过了所以....
tcejorPoiK 发表于 2022-4-6 07:39
worldguard有API
获取名为“spawn”的区域
可以整个完整的吗?就是套入我上面的代码里。整了半天发现有或多或少的问题。

因为我处于学习阶段,所以能给个保姆型教材不。这样我就可以分析问题下次就能解决它了。昨晚就已经研究过了所以....

本帖最后由 tcejorPoiK 于 2022-4-6 09:54 编辑
把WG导入你的项目依赖,然后
复制代码
纯手打可能有些细节会出错,如果出错了可以把你IDE显示出错的地方发出来我再看看
卿歌 发表于 2022-4-6 09:30
可以整个完整的吗?就是套入我上面的代码里。整了半天发现有或多或少的问题。
因为我处于学习阶段 ...
把WG导入你的项目依赖,然后
- @EventHandler
- public void onDynamaxEvent(ForgeEvent e) {
- if (e.getForgeEvent() instanceof DynamaxEvent.BattleEvolve) {
- DynamaxEvent.BattleEvolve event = (DynamaxEvent.BattleEvolve) e.getForgeEvent();
- Player player = Bukkit.getPlayer(event.pw.getOwnerName());
- World world = player.getWorld();
- Location location = player.getLocation();
- RegionContainer container = WorldGuard.getInstance().getPlatform().getRegionContainer();
- RegionManager regions = container.get(world);
- Region region = regions.getRegion("你的WG区域名字");
- if (region.contains(location)) {
- #问题在这,如何判定玩家在 X-10 ~ X-20 Z-10 ~ Z-20 Y-0 ~Y-255 这个范围内
- event.setCanceled(false);
- }
- if (this.Adpwn.contains(player.getWorld().getName())) {
- event.setCanceled(true);
- player.sendMessage(this.getConfig().getString("Adp-msg"));
- }
- }
- }
纯手打可能有些细节会出错,如果出错了可以把你IDE显示出错的地方发出来我再看看
import了没,鼠标移动到红色字体上,点击导入类
本帖最后由 tcejorPoiK 于 2022-4-6 10:33 编辑
我自己试了一下,还需要把worldedit也导入项目依赖
WG的方法不支持Bukkit的对象,代码还需要改为这样
复制代码包含 import 的是这样的
卿歌 发表于 2022-4-6 10:25
import 了
我自己试了一下,还需要把worldedit也导入项目依赖
WG的方法不支持Bukkit的对象,代码还需要改为这样
- @EventHandler
- public void onDynamaxEvent(ForgeEvent e) {
- if (e.getForgeEvent() instanceof DynamaxEvent.BattleEvolve) {
- DynamaxEvent.BattleEvolve event = (DynamaxEvent.BattleEvolve) e.getForgeEvent();
- Player player = Bukkit.getPlayer(event.pw.getOwnerName());
- World world = player.getWorld();
- Location location = player.getLocation();
- RegionContainer container = WorldGuard.getInstance().getPlatform().getRegionContainer();
- RegionManager regions = container.get(BukkitAdapter.adapt(world));
- ProtectedRegion region = regions.getRegion("你的WG区域名字");
- if (region.contains(BlockVector3.at(location.getX(), location.getY(), location.getZ()))) {
-
- event.setCanceled(false);
- }
- if (this.Adpwn.contains(player.getWorld().getName())) {
- event.setCanceled(true);
- player.sendMessage(this.getConfig().getString("Adp-msg"));
- }
- }
- }

好的谢谢,我吃完饭就试。

tcejorPoiK 发表于 2022-4-6 10:30
我自己试了一下,还需要把worldedit也导入项目依赖
WG的方法不支持Bukkit的对象,代码还需要改为这样
是不是版本的原因,我这边还是红的。 import项有一些是没有的。
服务器版本是 catserver-1.12.2
卿歌 发表于 2022-4-6 11:40
是不是版本的原因,我这边还是红的。 import项有一些是没有的。
服务器版本是 catserver-1.12.2 ...
确实版本的问题,1.12.2要这样写
- @EventHandler
- public void onDynamaxEvent(ForgeEvent e) {
- if (e.getForgeEvent() instanceof DynamaxEvent.BattleEvolve) {
- DynamaxEvent.BattleEvolve event = (DynamaxEvent.BattleEvolve) e.getForgeEvent();
- Player player = Bukkit.getPlayer(event.pw.getOwnerName());
- World world = player.getWorld();
- Location location = player.getLocation();
- RegionContainer container = WorldGuardPlugin.inst().getRegionContainer();
- RegionManager regions = container.get(world);
- ProtectedRegion region = regions.getRegion("你的WG区域名字");
- if (region.contains(location.getBlockX(), location.getBlockY(),location.getBlockZ())) {
- event.setCanceled(false);
- }
- if (this.Adpwn.contains(player.getWorld().getName())) {
- event.setCanceled(true);
- player.sendMessage(this.getConfig().getString("Adp-msg"));
- }
- }
- }