跳到主要内容

自定义扩展时装

前言

本次扩展时装种类, 在玩家副手位置生成一个装饰时装 学习下面教程,你必须掌握 java konlin 其中一门语言



API 允许你无限制的扩展时装种类,以此实现更多类型的时装

需要实现的抽象类

import me.geek.cos.api.carrier.CarrierAbstractEntity;
import me.geek.cos.api.carrier.CarrierBuilderProvider;

时装构成器-例子

/**
* GeekCosmetics-Example
* me.neon.example
*
* @author 老廖
* @since 2023/12/14 15:47
*/
public class ExampleBuilder extends CarrierBuilderProvider {

@Override
public String getDisplayName() {
return "副手饰品";
}

@Override
public Plugin getPlugin() {
return your.plugin;
}

@Override
public String getProviderType() {
return "OFF";
}

@Override
public CarrierAbstractEntity parseCarrier(Player player, Cosmetic cosmetic, CosmeticConfig cosmeticConfig) {
ItemStack itemStack = parseItemSource(parseColor(cosmetic.getColor()), cosmeticConfig);
return new ExampleCarrier(cosmeticConfig, player, new SourceComponent(cosmeticConfig.getNode(), cosmeticConfig.getProviderType(), cosmetic.getColor(), itemStack));
}
}

时装实现类-例子

/**
* GeekCosmetics-Example
* me.neon.example
*
* @author 老廖
* @since 2023/12/14 15:48
*/
public class ExampleCarrier extends CarrierAbstractEntity {
private final Player player;

private final SourceComponent sourceComponent;

private int npcID;

private boolean isNpc;

public ExampleCarrier(CosmeticConfig config, Player player, SourceComponent sourceComponent) {
super(config);
this.player = player;
this.sourceComponent = sourceComponent;
}

@Override
public Player getOwnerPlayer() {
return player;
}

@Override
public SourceComponent getSourceComponent() {
return sourceComponent;
}

@Override
public void deleteByNPC() {
this.removeByPlayer(this.player);
}

@Override
public void eval(List<? extends Player> list, Location location) {}
@Override
public void evalByNpc(List<? extends Player> list, Location location) {}

@Override
public int getMountEntityID() {
return 0;
}
@Override
public boolean isMount() {
return false;
}

@Override
public CarrierAbstractEntity spawn(Player player, Location location) {
isNpc = false;
this.setCustomEquip(player, this.player.getEntityId(), EquipmentSlot.OFF_HAND, sourceComponent.getItemStack());
return this;
}

@Override
public void spawnByNPC(int i, Location location) {
npcID = i;
isNpc = true;
this.setCustomEquip(player, npcID, EquipmentSlot.OFF_HAND, sourceComponent.getItemStack());
}

@Override
public void removeByPlayer(Player view) {
if (getViewPlayer().remove(view.getName())) {
ItemStack itemStack = player.getInventory().getItemInOffHand();
int id;
if (isNpc) {
id = npcID;
} else id = player.getEntityId();

if (itemStack.getType() != Material.AIR) {
setCustomEquip(view, id, EquipmentSlot.OFF_HAND, new ItemStack(Material.AIR));
} else {
setCustomEquip(view, id, EquipmentSlot.OFF_HAND, itemStack);
}
}
}
}

启动时注册时装

public final class GeekCosmeticsExample extends JavaPlugin {

public static GeekCosmeticsExample plugin;

@Override
public void onEnable() {
plugin = this;
// Plugin startup logic
new ExampleBuilder().register();
}

@Override
public void onDisable() {
// Plugin shutdown logic
}

}