本帖最后由 卿歌 于 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"));
 
-             }
 
-         }
 
- }
 
 
 
