等枫亭丶烟雨阁
本帖最后由 等枫亭丶烟雨阁 于 2022-4-5 04:43 编辑

服务端核心为1.16.5LoliServer,服务器加入了地皮和领地插件,但对于流体的放置却有问题,不论是地皮还是领地,即使没有任何权限也可以正常的使用水桶、岩浆桶而不会被阻止放置/收回,请问各位大佬这种情况该如何解决
——已确定不是插件和mod的问题,且也有其他人遇到了相同的情况

无敌三脚猫
也不好说是谁的问题,说是forge的问题吧,毕竟forge要统筹规划所有mod的桶和流体,可不管插件怎样
说是插件的问题吧,插件也没有义务配合forge
所以万恶之源就是forge和bukkit融合出的服务端,我就不同意它俩的婚事
还是用cnpc的forge脚本吧,本来这次可以写简单点的,可是我翻来覆去了看了cnpc的代码,发现它根本没注册“使用桶”的事件,而“右键物品”或者“右键方块”这些事件在forge里都发生在“使用桶”之后,那没办法,又得自己注册事件了
  1. var IEventListener=Java.type("net.minecraftforge.eventbus.api.IEventListener")
  2. var EventPriority=Java.type("net.minecraftforge.eventbus.api.EventPriority")
  3. var MinecraftForge=Java.type("net.minecraftforge.common.MinecraftForge")
  4. var BlockEvent=Java.type("net.minecraftforge.event.world.BlockEvent")
  5. function listenEvent(eventType,listener){
  6. var Event=Java.type(eventType)
  7. var event=new Event()
  8. var EventListener=Java.extend(IEventListener,{
  9.   invoke:listener
  10. })
  11. listener=new EventListener();
  12. var busID=MinecraftForge.EVENT_BUS.class.getDeclaredField("busID");
  13. busID.setAccessible(true);
  14. busID=busID.getInt(MinecraftForge.EVENT_BUS);
  15. event.getListenerList().register(busID,EventPriority.HIGH,listener);
  16. }
  17. listenEvent("net.minecraftforge.event.entity.player.FillBucketEvent",function(event){
  18. if(event.getTarget().func_216346_c().ordinal()==1){
  19. var player=event.getPlayer()
  20. var pos=event.getTarget().func_216350_a()
  21. if(MinecraftForge.EVENT_BUS.post(new BlockEvent.BreakEvent(player.func_130014_f_(),pos,player.func_130014_f_().func_180495_p(pos),player)))
  22. event.setCanceled(true)
  23. }
  24. })
复制代码
另外你这个问题我简单说一下
1、如果你寻求的是普适的方法,那就不是金粒的问题了,我建议你拿钱直接去跟Noppes谈,他还不一定会同意呢
如果是就事论事,比如说拿弓,那把npc的动作设成“瞄准”就行了
2、3、4、5、如果这几个问题你还想问的话就另开一贴

等枫亭丶烟雨阁
无敌三脚猫 发表于 2022-4-5 20:55
也不好说是谁的问题,说是forge的问题吧,毕竟forge要统筹规划所有mod的桶和流体,可不管插件怎样
说是插件 ...

感谢你对那个帖子的解答,让npc使用物品我现在几乎是放弃了,也感谢你对本帖问题的解决,几乎是完美的解决方法,虽然在领地那里放置完后会有一点小瑕疵,但估计不会有人闲的在领地里一直放置/收起流体,相比于领地,地皮的处理就非常完美,没有领地的那个小瑕疵,感谢大佬的帮助,算是解决了一大难题

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