Zentutorial
  • 首页
  • Zenscript
  • 简单运用
    • 局部变量
    • 尖括号调用
    • 工作台合成
      • 添加配方
      • 移除配方
      • Metadata
      • NBT
    • 熔炉配方
    • 矿物词典(Ore Dictionaries)
    • 物品名称修改
    • tooltips
      • 样式代码
    • 物品条件
    • 物品转换器
    • 掉落物
      • 打草掉落物
      • 生物掉落物
      • Dropt - 导言
        • Dropt - 方法速查
        • Dropt - 使用示例
    • 战利品表 : 导论
      • 战利品表修改(LootTableTweaker)
      • 战利品表修改(LootTweaker-基础)
    • 循环语句(foreach循环) / 普通数组
  • 高级运用
    • 概论
      • 基本类
      • ZenGetter
      • ZenSetter
      • ZenMethod(方法)
    • 常见错误
    • 基本运算
    • 数组与集合
    • 循环与遍历
    • 全局函数
    • Math包
    • if
    • in/has 操作符
    • 战利品表修改(LootTweaker-进阶)
    • 三元操作符
    • 预处理器
    • 全局和静态变量
    • 跨脚本引用
    • 关联数组(映射)
    • IItemStack类型的重新认识
    • IIngredient接口
    • IItemDefinition & IBlockDefinition
    • IData 类型
      • DataMap
    • 穷举与遍历
    • 自定义函数
    • 配方函数与配方事件
      • 配方函数
      • 配方事件
    • 事件概论
      • 一些忠告
    • ZenClass
  • ContentTweaker
    • ContentTweaker
    • 指令
    • 原版加工厂
      • 概论
      • 物品
      • 方块
      • 流体
      • 创造标签
      • 食物
    • 材料系统
      • 基础用法
        • 材料
        • 部件
        • 注册材料部件
        • 材料部件信息
      • 高级运用
        • 自定义部件类型
        • 注册自定义部件
        • 自定义材料部件信息
    • 高级运用
    • 更多鸡联动
    • 匠魂联动
      • 材料引导
        • 材料
        • 构建材料
      • 特性引导
        • 特性
        • 构建特性
        • 特性数据
      • 高级运用
  • 实战
    • 配方
      • 数据驱动合成修改
    • 事件
      • 修改方块掉落物
      • 禁止开创造
由 GitBook 提供支持
在本页

这有帮助吗?

  1. 实战
  2. 事件

修改方块掉落物

看似简单的修改,实则事件运用

import crafttweaker.events.IEventManager;
import crafttweaker.event.BlockHarvestDropsEvent;
import crafttweaker.block.IBlock;
import mods.ctutils.utils.Math;

events.onBlockHarvestDrops(function(event as BlockHarvestDropsEvent) {
    // 该事件由方块破坏满足挖掘等级,将有掉落物时触发
    // event.drops为WeightedItemStack数组 ZenGetter & ZenSetter,修改其即可修改掉落物。
    // WeightedItemStack有stack ZenGetter 返回 IItemStack
    // 可用event.player获取挖掘的玩家对象
    // 可用event.isPlayer检测是否为玩家挖掘方块触发该事件,而不是TNT啥的。
    if (!event.world.remote) { // world.remote
        // 跳过挖方块无掉落和精准的情况
        if (event.drops.length == 0 || event.silkTouch) {
            return; 
        }
        val block as IBlock = event.block; // 获取所挖的方块
        if (block.definition.id == "minecraft:wool" && block.meta == 13) { // 检测方块ID与metadata
            event.drops = [<item:minecraft:apple> % 100]; // 修改方块掉落物
            event.addItem(<item:minecraft:arrow> * 2 % 20); // 添加方块掉落物
        } else if (<ore:oreIron> in event.drops[0].stack) { // 若所挖的方块符合一个矿辞,要求该方块原来是掉落其本身
            val fortune as int = event.fortuneLevel; // 时运附魔等级
            if (fortune == 0) {
                event.drops = [<item:minecraft:iron_ingot> % 100];
            } else {
                // 时运支持,这里的例子为掉落物品数量为1 ~ 附魔等级,你可以按照你想要的通过获取的附魔等级参数修改逻辑
                event.drops = [<item:minecraft:iron_ingot> * Math.ceil(Math.random() * fortune) % 100];
            }
        } /* else if(...) {
            ...  继续修改
        } */
    }
});
上一页事件下一页禁止开创造

最后更新于3年前

这有帮助吗?