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

首先声明本教程所有解释权归作者所有,本教程诞生的原因为刀哥要)没错,仅此而已

以下每个一级标题均称为该模块,请自行对应


Baubles Integration(饰品)

该模块部分依赖于COT存在



Player Expansion(玩家扩展)

Method:  baublesInventory

返回这个玩家的IBaublesInventory;


Method: isBaubleEquipped(IItemStack bauble)

返回饰品的插槽号,若未寻找到则返回-1


IBaublesInventory(饰品栏背包)


导包

import mods.ctintegration.baubles.IBaubleInventory;


Method: isItemValidForSlot(int slot, IItemStack item, IEntityLivingBase living)

返回布尔值,作用为检测某个实体的某个槽位是否是某个饰品

Method: isItemValid(int slot, IItemStack item)

返回布尔值,作用为某个槽位是否是某个饰品

Method: getSlotCount()

返回int,作用为获取插槽数量(饰品栏添加了7个,若有其他模组添加了,则获取的数量会发生变化)

Method: getStackInSlot(int slot)

返回IItemStack,作用为获取某个插槽的饰品


Creating a bauble item(自定义饰品)

需要cot

BaubleItemRepresentation扩展了ItemRepresentation,因此所有可用于contenttweaker物品构建的方法也可用于它。


提供了以下方法:

方法名称函数的表示描述
String baubleType必须是“AMULET”护身符、“RING”指环、“BELT”腰带、“TRINKET”任意、“HEAD”头部、“BODY”身体、“CHARM”坠饰之一。如果未设置,则默认为TRINKET
BaubleEventHandler.CanEquip canEquipfunction(IItemStack bauble, IEntityLivingBase wearer)确定饰品是否可以装备
BaubleEventHandler.CanUnequip canUnequipfunction(IItemStack bauble, IEntityLivingBase wearer)确定饰品是否不可以装备
BaubleEventHandler.OnWornTick onWornTickfunction(IItemStack bauble, IEntityLivingBase wearer)佩戴饰品时每t调用
BaubleEventHandler.OnEquipped onEquippedfunction(IItemStack bauble, IEntityLivingBase wearer)当饰品装备时调用(注意只会触发一次!)
BaubleEventHandler.OnUnequipped onUnequippedfunction(IItemStack bauble, IEntityLivingBase wearer)当饰品未装备时调用(也就是从饰品栏中拿下来)(注意只会触发一次!)
BaubleEventHandler.WillAutoSync willAutoSyncfunction(IItemStack bauble, IEntityLivingBase wearer)暂且未知
BaubleEventHandler.GetBaubleType getBaubleTypefunction(IItemStack bauble)注意:这优先于 baubleType 属性,如果设置了这个属性,baubleType 将被忽略!(简称没啥用)



事例

事实上跟物品没啥区别,毕竟饰品也是物品

#loader contenttweaker
import mods.contenttweaker.VanillaFactory;
import mods.ctintegration.baubles.IBaubleInventory;
import crafttweaker.player.IPlayer;


var baubleTest = VanillaFactory.createBaubleItem("test_bauble");
baubleTest.rarity = "rare";//设置物品珍惜度
baubleTest.onWornTick = function(bauble, wearer) {//佩戴饰品时每t调用
    if(wearer instanceof IPlayer) {
        var player as IPlayer = wearer;
        player.xp + 1;
    }
};
baubleTest.onUnequipped = function(bauble, wearer) {//当饰品未装备时调用(也就是从饰品栏中拿下来)
    if(wearer instanceof IPlayer) {
        var player as IPlayer = wearer;
        player.xp - 1;
            if(player.baublesInventory.getStackInSlot(5).definition.id == "asasasa:lalalala"){//判断其他槽位的饰品
                player.xp + 5;//能做出类似穿戴两个特定饰品,获得更强效果
            }
    }
};
baubleTest.onEquipped = function(bauble, wearer) {//当饰品装备时调用
    if(wearer instanceof IPlayer) {
        var player as IPlayer = wearer;
        player.xp + 1;
    }
};
baubleTest.baubleType = "TRINKET";//饰品类型
baubleTest.register();



FTBMoney Integration(ftbq任务)


Player Expansion(玩家扩展)

获取返回类型设置设置参数描述
ftbMoneylongftbMoneylong获取玩家的ftb货币


事例


print(player.ftbMoney);//就打印货币的数量,我相信很好理解



BloodMagic Integration(血魔法2)


Soul Network(意志网络/灵魂网络)

使用soulNetwork以在IPlayer上调用

方法描述
public void add(int amount, int maximum)增加意志(在地狱魂石)
public void add(ITextComponent description, int amount, int maximum)增加意志(在地狱魂石)
public void syphon(ITextComponent description, int amount, @Optional boolean skipEvent)吸取意志
public void hurtPlayer(IPlayer player, float syphon)不懂
public IPlayer getCachedPlayer()不懂
public void clear()删除所有意志



获取返回类型设置设置参数描述
orbTierintorbTierint
currentEssenceintcurrentEssenceintLP(气血宝珠里的)


事例


player.soulNetwork.currentEssence -= 5;//玩家的LP减5
player.soulNetwork.clear() -= 5;//玩家的所有意志清零



ProjectE Integration(等价交换)


导包

import mods.ctintegration.projecte.EMCManager;


Methods


方法描述
static void mapEMC()ProjectE 通常在服务器启动时映射 emc 值,这比 CraftTweaker 注册其配方时要晚得多。如果要在事件之外获取 EMC 值,则必须首先调用此方法以强制 ProjectE 映射 EMC 值。否则,每件物品将获得 0 EMC。确保不要多次使用它,因为映射 EMC 需要很长时间,尤其是在大型模组包上。
static long getEMC(IItemStack item)获取物品的EMC。如果要在事件之外使用它,则必须先调用mapEMC。
static long getEMCSellValue(IItemStack item)获取物品的卖出的EMC,具体取决于 ProjectE 配置。也与上面一样,请先调用 mapEMC。
static boolean isEMCSet(IItemStack item)如果已设置物品的 EMC 值,则返回true,反之false
static void setEMC(IItemStack item, long value)设置项目的 EMC。注意: 如果在设置同一物品的EMC值后获得该值,则仍会获得旧值,除非您在设置该物品的EMC之后和获取之前再次调用 mapEMC()。
static void setEMC(IIngredient ingredient, long value)为IIngredient中的所有项目设置 EMC


IItemStack expansion


方法返回类型设置设置参数描述
emclongemclong买多少
emcSellValuelong--卖多少


Player Expansion(玩家扩展)



获取返回类型设置设置参数描述
personalEMClongpersonalEMClong获取和设置玩家的EMC




事例

1.

print("emc: " + <minecraft:gold_ingot>.emc); //打印 0
<minecraft:gold_ingot>.emc = 6666;
print("emc: " + <minecraft:gold_ingot>.emc); //打印 0,但会在进入世界的时候将EMC设置为6666

2.

EMCManager.mapEMC();
print("emc: " + <minecraft:gold_ingot>.emc); //打印 2048,因为原本就是2048
<minecraft:gold_ingot>.emc = 6666;
print("emc: " + <minecraft:gold_ingot>.emc); //打印 2048,但会在进入世界的时候将EMC设置为6666

3.

EMCManager.mapEMC();
print("emc: " + <minecraft:gold_ingot>.emc); //打印 2048,因为原本就是2048
<minecraft:gold_ingot>.emc = 6666;
EMCManager.mapEMC(); //记住不要用太多!!!
print("emc: " + <minecraft:gold_ingot>.emc); //打印 6666



ScalingHealth Integration(难度模组扩展)


导包

import mods.ctintegration.scalinghealth.DifficultyManager;


Methods


方法描述
static void setDifficulty(IPlayer player, double value)为玩家设置难度
static void addDifficulty(IPlayer player, double value)为玩家增加难度
static void addDifficulty(IPlayer player, double value, boolean affectWorldDifficulty)为玩家设置难度,布尔值决定是否影响世界难度
static double getDifficulty(IPlayer player)获取玩家难度
static double getWorldDifficulty(IWorld world)获取世界难度
static void setWorldDifficulty(IWorld world, double value)设置世界难度
static void addWorldDifficulty(IWorld world, double value)增加世界难度
static IDate getLastTimePlayed(IPlayer player)获取玩家日期
static float getMaxHealth(IPlayer player)获取玩家最大生命
static void setMaxHealth(IPlayer player, float value)设置玩家最大生命
static void addMaxHealth(IPlayer player, float value)增加玩家最大生命
static double getAreaDifficulty(IPlayer player)获取区块难度
static double getAreaDifficulty(IWorld world, IBlockPos pos)获取区块难度


Player Expansion(玩家扩展)


获取返回类型设置设置参数描述
scalingHealthMaxHealthdoublescalingHealthMaxHealthdouble获取或设定玩家的最大生命
difficultydoubledifficultydouble获取或设定玩家的难度
areaDifficultydouble--获取玩家所在区块的难度
lastTimePlayeddouble--获取玩家日期



IWorld Expansion(世界扩展)


获取返回类型设置设置参数描述
worldDifficultydoubleworldDifficultydouble世界难度



Energy Storage(储能)

本接口允许您操作能量(FE或RF)存储的物品。 您可以通过调用IItemStack#energy来获取它的实例。在执行此操作之前,请务必检查它是否是储能!


方法描述
int receiveEnergy(int maxReceive, @Optional boolean simulate)为存储的物品增加能量。返回增加的能量的量(比如你给A这个物品增加100RF,那么也会返回100)。
int extractEnergy(int maxExtract, @Optional boolean simulate)从存储的物品中减少能量。返回已移除的能量的量(比如你给B这个物品减少10086RF,那么也会返回10086)。
int getEnergyStored()返回当前存储的物品的能量的量。好绕。。。
int getMaxEnergyStored()返回当前存储的物品的最大能量的量。
boolean canExtract()如果此存储的物品可以提取能量,则返回true,反之false
boolean canReceive()如果此存储的物品可以接收能量,则返回true,反之false



Vanilla Expansion(原版扩展)


Player Expansion(玩家扩展)


方法描述
void addExperience(int amount)增加经验点数,而不是等级
void removeExperience(int amount)移除经验点数
int getTotalXP()返回玩家拥有的总经验值
void playSound(String soundResourceLocation, float volume, float pitch)注意:客户端和服务器播放器具有不同的行为。有关详细信息,请参阅forge如何处理声音事件。检查世界是否为服务端,以确定它在哪一边播放。
sendPlaySoundPacket(String soundResourceLocation, String soundCategory, Position3f pos, float volume, float pitch)使玩家在其客户端上播放声音
boolean isPlayerMP()如果 IPlayer 的内部对象是 EntityPlayerMP(服务端玩家)的实例,则返回 true。
IAdvancementProgress getAdvancementProgress(IAdvancement advancement)获取升级的进度。请注意,玩家必须是 EntityPlayerMP 的实例,否则将返回 null。


EntityPlayerMP保证!world.remote就行了


IWorld Expansion(世界扩展)


方法描述
void setOrCreateGameRule(String key, String value)有关更多游戏规则操作,请安装CraftTweaker Utils,这只是其中缺少的功能
void playSound(String soundResourceLocation, String soundCategory, Position3f location, float volume, float pitch, @Optional boolean distanceDelay)播放声音


IItemStack Expansion(物品扩展)


方法描述
IData asData(IItemStack itemStack) (Also a ZenCaster)将 ItemStack 序列化为其 NBT 形式
IItemStack fromData(IData data)从 NBT 反序列化
boolean isEnergyStorage(IItemStack itemStack)如果物品能够存储能量,则返回 true


获取返回类型描述
energyIEnergyStorage从项目堆栈中获取 IEnergyStorage 实例。如果物品不是能量容器,将产生错误。


IServer Expansion(服务器扩展)



获取返回类型描述
playersIPlayer[]返回服务器上的所有玩家
playerCountint返回服务器上的玩家数量
maxPlayersint返回服务器的最大玩家数量



后记

我尽量不断更,缓慢的补全