本篇教程由作者设定使用 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 | 非 | 攻击速度 | |
attackDamage | float | 非 | 攻击伤害 | |
destroySpeed | float | 非 | 挖掘速度 | |
enchantability | int | 非 | 附魔能力 |
示例:
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 | 最大能量存储 |
energyStored | int | 目前能量存储 |
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!