В моде CraftTwekaer используется язык программирования zenScript, так что знания классов Вам будут очень полезны для написания профессионального рода скриптов!
Создадим класс, который будет отвечать за данные entity
Пример
publicclassEntityData{}
Также нужно создать конструктор, который позволит динамически создавать класс, который не будет постоянно храниться в памяти. В любой другом ЯП мы бы писали следующим образом - public EntityData(){}, но в zenScript стоит писать public this(){}.
Пример
publicclassEntityData{publicthis(){}}
Следует ещё добавить в класс наше существо или же Entity. Необходимо импортировать его так - import crafttweaker.api.entity.Entity;. Кроме этого, нужно хранить данные или же IData. Импортируем - import crafttweaker.api.data.IData.
Пример
importcrafttweaker.api.entity.Entity;importcrafttweaker.api.data.IData;publicclassEntityData{public val entity as Entity;public val data as IData;publicthis(entityasEntit,dataasIDatay){this.entity= entity;this.data= data;}}
Теперь нам важно создать метод, который будет проверять, есть ли у существа или же Entity соответствующие данные. Поможет в этом customData, так как в data мы записать ничего не сможем. Ключевое слово in аналогично contains & includes.
Таким образом, у нас есть метод, который позволит проверить, есть ли у игрока нужные нам данные. После этого создадим нужно класс, который сможет записать в игрока новые данные.
Пример
Теперь нас есть всё необходимое. Остаётся только применить данный класс. crafttweaker.api.event.entity.player.ItemPickupEvent.
Пример
При подборе любого предмета в игрока будут внесены новые данные в customData. Вы можете задаться вопросом, как же мы передали player в наш класс, если в его параметрах Entity? Всё потому, что игрок наследуется от EntityLiving, а он, в свою очередь, от Entity.
public isHaveData() as bool {
if (this.data in this.entity.customData) return true;
else return false;
}
public sendData() as bool {
if (isHaveData()) return false;
else this.entity.updateCustomData(this.data);
}
import crafttweaker.api.events.CTEventManager;
import crafttweaker.api.event.entity.player.ItemPickupEvent;
CTEventManager.register<crafttweaker.api.event.entity.player.ItemPickupEvent>((event) => {
var player = event.player;
if (player.level.isClientSide) return;
var myData as EntityData = new EntityData(player, {"firstPickUp" : true});
myData.sendData();
});
import crafttweaker.api.entity.Entity;
import crafttweaker.api.data.IData;
public class EntityData {
public val entity as Entity;
public val data as IData;
public this (entity as Entit, data as IDatay) {
this.entity = entity;
this.data = data;
}
public isHaveData() as bool {
if (this.data in this.entity.customData) return true;
else return false;
}
public sendData() as bool {
if (isHaveData()) return false;
else this.entity.updateCustomData(this.data);
}
}