魔法巨猫
本帖最后由 卿歌 于 2022-4-6 01:47 编辑

问题写在下面的代码里了。我是萌新,只是为了满足小需求。但是研究了很久,所以来像各位大佬请教了。
最好是判定是否在某个worldguard区域内
  1.     @EventHandler
  2. public void onDynamaxEvent(ForgeEvent e) {
  3. if (e.getForgeEvent() instanceof DynamaxEvent.BattleEvolve) {
  4. DynamaxEvent.BattleEvolve event = (DynamaxEvent.BattleEvolve) e.getForgeEvent();
  5. Player player = Bukkit.getPlayer(event.pw.getOwnerName());
  6. if () {    #问题在这,如何判定玩家在 X-10 ~ X-20 Z-10 ~ Z-20 Y-0 ~Y-255 这个范围内
  7. event.setCanceled(false);
  8. }
  9. if (this.Adpwn.contains(player.getWorld().getName())) {
  10. event.setCanceled(true);
  11. player.sendMessage(this.getConfig().getString("Adp-msg"));
  12. }
  13. }
  14. }
复制代码



JiangZeOvO
游戏的这个能取到的值我不太清楚 但是如果可以的话 应该判定 玩家坐标x < -10 and 玩家坐标x > -20 and 玩家坐标z <-10 and 玩家坐标z > -20  and 玩家坐标y >= 0 and 玩家坐标y <=255

‮tcejorPoiK
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/

魔法巨猫
本帖最后由 卿歌 于 2022-4-6 09:45 编辑
‮tcejorPoiK 发表于 2022-4-6 07:39
worldguard有API

获取名为“spawn”的区域

可以整个完整的吗?就是套入我上面的代码里。整了半天发现有或多或少的问题。
因为我处于学习阶段,所以能给个保姆型教材不。这样我就可以分析问题下次就能解决它了。昨晚就已经研究过了所以....

‮tcejorPoiK
本帖最后由 ‮tcejorPoiK 于 2022-4-6 09:54 编辑
卿歌 发表于 2022-4-6 09:30
可以整个完整的吗?就是套入我上面的代码里。整了半天发现有或多或少的问题。
因为我处于学习阶段 ...

把WG导入你的项目依赖,然后
  1. @EventHandler
  2. public void onDynamaxEvent(ForgeEvent e) {
  3.         if (e.getForgeEvent() instanceof DynamaxEvent.BattleEvolve) {
  4.                 DynamaxEvent.BattleEvolve event = (DynamaxEvent.BattleEvolve) e.getForgeEvent();
  5.                 Player player = Bukkit.getPlayer(event.pw.getOwnerName());
  6.                 World world = player.getWorld();
  7.                 Location location = player.getLocation();
  8.                 RegionContainer container = WorldGuard.getInstance().getPlatform().getRegionContainer();
  9.                 RegionManager regions = container.get(world);
  10.                 Region region = regions.getRegion("你的WG区域名字");
  11.                 if (region.contains(location)) {
  12.                         #问题在这,如何判定玩家在 X-10 ~ X-20 Z-10 ~ Z-20 Y-0 ~Y-255 这个范围内
  13.                         event.setCanceled(false);
  14.                 }
  15.                 if (this.Adpwn.contains(player.getWorld().getName())) {
  16.                         event.setCanceled(true);
  17.                         player.sendMessage(this.getConfig().getString("Adp-msg"));
  18.                 }
  19.         }
  20. }
复制代码

纯手打可能有些细节会出错,如果出错了可以把你IDE显示出错的地方发出来我再看看

魔法巨猫
‮tcejorPoiK 发表于 2022-4-6 09:52
把WG导入你的项目依赖,然后

纯手打可能有些细节会出错,如果出错了可以把你IDE显示出错的地方发出来我再 ...



‮tcejorPoiK

import了没,鼠标移动到红色字体上,点击导入类

魔法巨猫
本帖最后由 卿歌 于 2022-4-6 10:27 编辑
‮tcejorPoiK 发表于 2022-4-6 10:23
import了没,鼠标移动到红色字体上,点击导入类

import 了












‮tcejorPoiK
本帖最后由 ‮tcejorPoiK 于 2022-4-6 10:33 编辑

我自己试了一下,还需要把worldedit也导入项目依赖

WG的方法不支持Bukkit的对象,代码还需要改为这样
  1.     @EventHandler
  2.     public void onDynamaxEvent(ForgeEvent e) {
  3.         if (e.getForgeEvent() instanceof DynamaxEvent.BattleEvolve) {
  4.             DynamaxEvent.BattleEvolve event = (DynamaxEvent.BattleEvolve) e.getForgeEvent();
  5.             Player player = Bukkit.getPlayer(event.pw.getOwnerName());
  6.             World world = player.getWorld();
  7.             Location location = player.getLocation();
  8.             RegionContainer container = WorldGuard.getInstance().getPlatform().getRegionContainer();
  9.             RegionManager regions = container.get(BukkitAdapter.adapt(world));
  10.             ProtectedRegion region = regions.getRegion("你的WG区域名字");
  11.             if (region.contains(BlockVector3.at(location.getX(), location.getY(), location.getZ()))) {
  12.                                                                                                                                                                                                                                           
  13.                 event.setCanceled(false);
  14.             }
  15.             if (this.Adpwn.contains(player.getWorld().getName())) {
  16.                 event.setCanceled(true);
  17.                 player.sendMessage(this.getConfig().getString("Adp-msg"));
  18.             }
  19.         }
  20.     }
复制代码
包含 import 的是这样的


魔法巨猫
好的谢谢,我吃完饭就试。

魔法巨猫
‮tcejorPoiK 发表于 2022-4-6 10:30
我自己试了一下,还需要把worldedit也导入项目依赖

WG的方法不支持Bukkit的对象,代码还需要改为这样

是不是版本的原因,我这边还是红的。 import项有一些是没有的。
服务器版本是 catserver-1.12.2

‮tcejorPoiK
卿歌 发表于 2022-4-6 11:40
是不是版本的原因,我这边还是红的。 import项有一些是没有的。
服务器版本是 catserver-1.12.2 ...

确实版本的问题,1.12.2要这样写
  1. @EventHandler
  2.     public void onDynamaxEvent(ForgeEvent e) {
  3.         if (e.getForgeEvent() instanceof DynamaxEvent.BattleEvolve) {
  4.             DynamaxEvent.BattleEvolve event = (DynamaxEvent.BattleEvolve) e.getForgeEvent();
  5.             Player player = Bukkit.getPlayer(event.pw.getOwnerName());
  6.             World world = player.getWorld();
  7.             Location location = player.getLocation();
  8.             RegionContainer container = WorldGuardPlugin.inst().getRegionContainer();
  9.             RegionManager regions = container.get(world);
  10.             ProtectedRegion region = regions.getRegion("你的WG区域名字");
  11.             if (region.contains(location.getBlockX(), location.getBlockY(),location.getBlockZ())) {

  12.                 event.setCanceled(false);
  13.             }
  14.             if (this.Adpwn.contains(player.getWorld().getName())) {
  15.                 event.setCanceled(true);
  16.                 player.sendMessage(this.getConfig().getString("Adp-msg"));
  17.             }
  18.         }
  19.     }
复制代码

第一页 上一页 下一页 最后一页