yaoraoxiaosa
上次@无敌三脚猫 大佬给我写了一份crt的使用物品触发指令的脚本,但是使用后不消耗物品,我现在需要一个使用后消耗物品的代码,需要在这个代码的基础上作出修改
  1. import crafttweaker.api.world.ServerLevel;
  2. import crafttweaker.api.events.CTEventManager;
  3. import crafttweaker.api.data.MapData;
  4. import crafttweaker.api.event.entity.player.interact.PlayerInteractEvent;
  5. import crafttweaker.api.event.entity.player.interact.RightClickItemEvent;
  6. import crafttweaker.api.event.entity.player.interact.RightClickBlockEvent;

  7. public function itemInteract(e:PlayerInteractEvent):void{
  8.         val player=e.player;
  9.         val world=player.level;
  10.         val item=e.itemStack;
  11.         if(!world.isClientSide&&item.definition==<item:minecraft:fern>.definition&&item.hoverName.contents=="我是个苹果"){
  12.                 val tag=new MapData(item.tag.getAt("display").asMap());
  13.                 if(tag.contains("Lore")&&"我真的是苹果" in tag.getAt("Lore").getString()){
  14.                         (world as ServerLevel).server.executeCommand("give "+player.name.contents+" apple",true);
  15.                         e.cancellationResult=<constant:minecraft:world/interactionresult:success>;
  16.                         e.cancel();
  17.                 }
  18.         }
  19. }

  20. CTEventManager.register<RightClickItemEvent>((e)=>{itemInteract(e);});
  21. CTEventManager.register<RightClickBlockEvent>((e)=>{itemInteract(e);});
复制代码



无敌三脚猫
在上次的帖子里你就可以问的
在e.cancel();的后面(前面也可以)加一行
  1. player.setItemInHand(e.hand,item.shrink(1));
复制代码
就好

yaoraoxiaosa
无敌三脚猫 发表于 2023-4-3 19:13
在上次的帖子里你就可以问的
在e.cancel();的后面(前面也可以)加一行就好

谢谢大佬

yaoraoxiaosa
无敌三脚猫 发表于 2023-4-3 13:10
在上次的帖子里你就可以问的
在e.cancel();的后面(前面也可以)加一行就好
  1. import crafttweaker.api.world.ServerLevel;
  2. import crafttweaker.api.events.CTEventManager;
  3. import crafttweaker.api.data.MapData;
  4. import crafttweaker.api.event.entity.player.interact.PlayerInteractEvent;
  5. import crafttweaker.api.event.entity.player.interact.RightClickItemEvent;
  6. import crafttweaker.api.event.entity.player.interact.RightClickBlockEvent;

  7. public function itemInteract(e:PlayerInteractEvent):void{
  8.         val player=e.player;
  9.         val world=player.level;
  10.         val item=e.itemStack;
  11.         if(!world.isClientSide&&item.definition==<item:minecraft:fern>.definition&&item.hoverName.contents=="我是个苹果"){
  12.                 val tag=new MapData(item.tag.getAt("display").asMap());
  13.                 if(tag.contains("Lore")&&"我真的是苹果" in tag.getAt("Lore").getString()){
  14.                         (world as ServerLevel).server.executeCommand("give "+player.name.contents+" apple",true);
  15.                         e.cancellationResult=<constant:minecraft:world/interactionresult:success>;
  16.                         e.cancel();
复制代码
  1. import crafttweaker.api.world.ServerLevel;
  2. import crafttweaker.api.events.CTEventManager;
  3. import crafttweaker.api.data.MapData;
  4. import crafttweaker.api.event.entity.player.interact.PlayerInteractEvent;
  5. import crafttweaker.api.event.entity.player.interact.RightClickItemEvent;
  6. import crafttweaker.api.event.entity.player.interact.RightClickBlockEvent;

  7. public function itemInteract(e:PlayerInteractEvent):void{
  8.         val player=e.player;
  9.         val world=player.level;
  10.         val item=e.itemStack;
  11.         if(!world.isClientSide&&item.definition==<item:minecraft:fern>.definition&&item.hoverName.contents=="我是个玻璃"){
  12.                 val tag=new MapData(item.tag.getAt("display").asMap());
  13.                 if(tag.contains("Lore")&&"我真的是玻璃" in tag.getAt("Lore").getString()){
  14.                         (world as ServerLevel).server.executeCommand("give "+player.name.contents+" glass",true);
  15.                         e.cancellationResult=<constant:minecraft:world/interactionresult:success>;
  16.                         e.cancel();
复制代码
大佬,我想添加另一个,新开了一个zs脚本,结果前一个就失效了,是不是得把他俩写在一起啊,应该怎么写啊

无敌三脚猫
yaoraoxiaosa 发表于 2023-4-12 13:00
大佬,我想添加另一个,新开了一个zs脚本,但是前一个就失效了,是不是应该写在一起啊,怎么写啊?谢谢大佬 ...

我不知道你那是怎么回事
不过这样写太繁杂了,可以考虑不依赖lore和名字,而是靠别的单独的nbt,像是这样
  1. import crafttweaker.api.world.ServerLevel;
  2. import crafttweaker.api.events.CTEventManager;
  3. import crafttweaker.api.event.entity.player.interact.PlayerInteractEvent;
  4. import crafttweaker.api.event.entity.player.interact.RightClickItemEvent;
  5. import crafttweaker.api.event.entity.player.interact.RightClickBlockEvent;

  6. public function itemInteract(e:PlayerInteractEvent):void{
  7.         val player=e.player;
  8.         val world=player.level;
  9.         val item=e.itemStack;
  10.         if(!world.isClientSide&&item.definition==<item:minecraft:fern>.definition&&item.tag!=null){
  11.                 val tag=item.tag;
  12.                 if(tag.contains("give")){
  13.                         (world as ServerLevel).server.executeCommand("give "+player.name.contents+" "+tag.getAt("give").getString(),true);
  14.                         e.cancellationResult=<constant:minecraft:world/interactionresult:success>;
  15.                         e.cancel();
  16.                         player.setItemInHand(e.hand,item.shrink(1));
  17.                 }
  18.         }
  19. }

  20. CTEventManager.register<RightClickItemEvent>((e)=>{itemInteract(e);});
  21. CTEventManager.register<RightClickBlockEvent>((e)=>{itemInteract(e);});
复制代码
如果物品的nbt里写了give就依据写的内容来给物品,比如你可以这样拿到一个能变苹果的蕨
  1. /give @s fern{display:{Name:'{"text":"我是个苹果","italic":false,"color":"gold"}',Lore:['{"text":"我真的是苹果","italic":"false","color":"gold"}']},give:"apple"}
复制代码
或者这样拿到一个能变玻璃的蕨
  1. /give @s fern{display:{Name:'{"text":"我是个玻璃","italic":false,"color":"gold"}',Lore:['{"text":"我真的是玻璃","italic":"false","color":"gold"}']},give:"glass"}
复制代码

yaoraoxiaosa
无敌三脚猫 发表于 2023-4-12 13:55
我不知道你那是怎么回事
不过这样写太繁杂了,可以考虑不依赖lore和名字,而是靠别的单独的nbt,像是这样 ...

还是大佬牛,我刚开始学这个,还不知道能这么写呢,谢谢大佬

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