自定义扩展时装
前言
本次扩展时装种类, 在玩家副手位置生成一个装饰时装 学习下面教程,你必须掌握
javakonlin其中一门语言
次
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
}
}