本篇教程由作者设定使用 CC BY-NC 协议。

本教程适用于对crt有一定了解的作者,更基础一些的知识请移步其他教程学习~

CoT Expansion

DirectionalBlock

mods.contenttweaker.VanillaFactory.createDirectionalBlock(unlocalizedName as string, blockMaterial as BlockMaterial, directions as string, planeRotatable as bool = false, placingOpposite as bool = false);

可以创建一个可旋转的方块。unlocalizedName是方块未本地化名称。blockMaterial是方块材料。directions是转向种类:"ALL"代表6个方向都可旋转,"HORIZONTAL"代表只能东西南北四个方向旋转,"VERTICAL"代表只能上下两个方向旋转。planeRotatable表示能否水平旋转。placingOpposite表示放置时是否正面总对着玩家。

示例:

val blockA=mods.contenttweaker.VanillaFactory.createDirectionalBlock("block_a",<blockmaterial:glass>,"ALL",true,true);
blockA.blockHardness=0.1;
blockA.blockResistance=1.0;
blockA.blockSoundType=<soundtype:glass>;
blockA.toolClass="pickaxe";
blockA.toolLevel=1;
blockA.register();


ExpandItem

mods.contenttweaker.VanillaFactory.createExpandItem(unlocalizedName as string);

可创建一个物品。ExpandItem 扩展了 ItemRepresentation。这意味着所有可用于 Items 的 Methods 和 ZenProperties 也可用于 expand items!

ZenProperties


属性名称
类型必填默认值描述/注释
maxItemUseDuration
int
0物品最大使用时间
attackSpeed
float
攻击速度
attackDamagefloat
攻击伤害
destroySpeedfloat
挖掘速度
enchantabilityint
附魔能力


示例:

val swordA=mods.contenttweaker.VanillaFactory.createExpandItem("sword_a");
swordA.maxStackSize=1;
swordA.creativeTab=<creativetab:decorations>;
swordA.maxDamage=1200;
swordA.toolClass="sword";
swordA.attackSpeed=-2.4f;
swordA.attackDamage=50.0f;
swordA.register();


EnergyStorage

EnergyStorage是一个能量容器,可以更改容器内的能量。

获取实例:

mutableItemStack.energyStorage//从物品上获取
world.getEnergyStorage(pos as IBlockPos, facing as IFacing = null)//从实体容器中获取

ZenGetters:

ZenGetter类型描述/注释

maxEnergyStored

int最大能量存储
energyStoredint目前能量存储

canReceive

bool能否接收能量

canExtract

bool能否抽出能量


ZenMethods:

int receiveEnergy(energy as int, simulate as bool)

向能量容器内输入能量。energy是能量数量。simulate表示是否为模拟输入。返回int,代表最终输入能量的数量。

int extractEnergy(energy as int, simulate as bool)

从能量容器内抽出能量。energy是能量数量。simulate表示是否为模拟抽出。返回int,代表最终抽出能量的数量。

示例:

events.onPlayerLeftClickBlock(function(event as crafttweaker.event.PlayerLeftClickBlockEvent){
    val w=event.world;
    val p=event.player;
    val i=event.item;
    if(!w.remote&&!isNull(i)&&!p.fake){
        if(!isNull(i.mutable().energyStorage)){//如果这个物品是一个能量容器
            val e=i.mutable().energyStorage;
            print(e.canExtract);
            print(e.canReceive);
            print(e.energyStored);
            print(e.maxEnergyStored);
            e.receiveEnergy(514,false);//输入514RF
            e.extractEnergy(114,false);//抽出114RF
        }
    }
});

events.onPlayerLeftClickBlock(function(event as crafttweaker.event.PlayerLeftClickBlockEvent){
    val w=event.world;
    val p=event.player;
    val pos=event.position;
    if(!w.remote&&!p.fake){
        if(!isNull(w.getEnergyStorage(pos,event.face))){//如果这个方块是一个能量容器
            val e=w.getEnergyStorage(pos,event.face);
            print(e.canExtract);
            print(e.canReceive);
            print(e.energyStored);
            print(e.maxEnergyStored);
            e.receiveEnergy(514,false);//输入514RF
            e.extractEnergy(114,false);//抽出114RF
        }
    }
});

NetworkHandler

其他教程已经讲解过啦,请查看[1.12.2]简单NBT的操纵与物品动态信息展示(基本完结)的3.4.1:ZenUtils的NetWorkHandler!