Wizy
有什么办法能在一个没有参数的重写方法内让ICommandsender类的对象适配为entity或者entityplayer的对象, 或者说在没有参数的重写方法中怎么检测指令输入者, 来执行另一个套在这个方法里面的有参方法(比如像图片里面这种)
感谢!


Thehrz
你这是覆写了什么类?

Wizy
Thehrz 发表于 2022-8-20 10:08
你这是覆写了什么类?

重写了EntityMob里面的onkillCommand

Thehrz
Wizy 发表于 2022-8-20 10:12
重写了EntityMob里面的onkillCommand

那执行者不就是 this 吗?

Wizy
Thehrz 发表于 2022-8-20 10:18
那执行者不就是 this 吗?

但是这样执行没有用,是不是什么地方写错了
  1. protected void execute(ICommandSender sender) throws CommandException {

  2.             EntityPlayer entityplayer = getCommandSenderAsPlayer(sender);
  3.         if (sender instanceof EntityPlayer) {
  4.             ProcedureBigBroOnKillCommand.executeProcedure(entityplayer);
  5.         }
  6.     }

  7.     @Override
  8.     public void onKillCommand() {
  9.         MinecraftServer server = this.getServer();
  10.         World worldIn = this.getEntityWorld();
  11.         try {
  12.             EntityPlayer entityPlayer = getCommandSenderAsPlayer(this);
  13.         } catch (PlayerNotFoundException e) {
  14.             e.printStackTrace();
  15.         }
  16.         try {
  17.             execute(this);
  18.         } catch (CommandException e) {
  19.             e.printStackTrace();
  20.         }
  21.     }
复制代码



另一个类:
  1.     public static void executeProcedure(EntityPlayer player) {
  2.         player.setDead();
  3.     }
复制代码

Thehrz
Wizy 发表于 2022-8-20 10:25
但是这样执行没有用,是不是什么地方写错了

我没仔细看代码 Sorry 这个 this 其实是被 Kill 的实体

不能从这里获取到 Sender

这个 onKillCommand 就是直接杀死实体

Entity
  1. public void onKillCommand() {
  2.     this.remove();
  3. }
复制代码


只能从 CommandKill#processCommand() 获取执行Kill命令的执行者

Wizy
本帖最后由 Wizy 于 2022-8-20 10:37 编辑
Thehrz 发表于 2022-8-20 10:30
我没仔细看代码 Sorry 这个 this 其实是被 Kill 的实体

不能从这里获取到 Sender

不能类似写传送指令的方法来获取指令执行者吗(      貌似需要通过execute方法里面的ICommandSender参数

Thehrz
Wizy 发表于 2022-8-20 10:35
不能类似写传送指令的方法来获取指令执行者吗(      貌似需要通过execute方法里面的ICommandSender参数
...

? 那是怎样的

总之就是不能通过onKillCommand 来获取执行者

在后来的MCP名中

这个 onKillCommand 直接变成了 kill 所以说它和命令其实关系不大


Wizy
本帖最后由 Wizy 于 2022-8-20 10:44 编辑
Thehrz 发表于 2022-8-20 10:41
? 那是怎样的

总之就是不能通过onKillCommand 来获取执行者

哦哦, 我意思其实是被onkill的时候执行另一个动作, 而不是被杀死, 直接作用在实体身上的是可以实现的, 但是我想实现反过来作用在玩家身上, 或者能获取范围玩家也行

Thehrz
Wizy 发表于 2022-8-20 10:43
哦哦, 我意思其实是被onkill的时候执行另一个动作, 而不是被杀死, 直接作用在实体身上的是可以实现的, 但 ...

那为什么不监听 LivingDeathEvent 事件?

Wizy
Thehrz 发表于 2022-8-20 11:21
那为什么不监听 LivingDeathEvent 事件?

这个条件需要对象死亡吗

Thehrz
Wizy 发表于 2022-8-20 11:50
这个条件需要对象死亡吗



事件可以 setCancelled

最简单就是监听事件 或者写 CoreMod 注入到 processCommand

Wizy
Thehrz 发表于 2022-8-20 12:09


事件可以 setCancelled

监听LivingDeath的话怎么套用到onkill方法里面呢, onkill里面没有参数而且不能在里面获取玩家的话LivingDeath事件还是不能适用于onkill里面阿

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