Skip to content

Commit

Permalink
enumで散らばったNBTタグを集中管理
Browse files Browse the repository at this point in the history
  • Loading branch information
Quarri6343 committed Sep 1, 2023
1 parent 12136f1 commit 83a4a57
Show file tree
Hide file tree
Showing 11 changed files with 59 additions and 26 deletions.
7 changes: 3 additions & 4 deletions src/main/java/net/riblab/tradecore/entity/mob/MobUtils.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package net.riblab.tradecore.entity.mob;

import de.tr7zw.nbtapi.NBTEntity;
import net.riblab.tradecore.general.NBTTagNames;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.block.Block;
Expand All @@ -20,8 +21,6 @@
*/
public final class MobUtils {

private static final String lootableTag = "lootable";

private MobUtils() {

}
Expand Down Expand Up @@ -71,7 +70,7 @@ private static Location findSafeLocationToSpawn(Block block, int radius) {
@ParametersAreNonnullByDefault
public static void setLootableTag(Mob mob, boolean flag) {
NBTEntity nbtEntity = new NBTEntity(mob);
nbtEntity.getPersistentDataContainer().setBoolean(lootableTag, flag);
nbtEntity.getPersistentDataContainer().setBoolean(NBTTagNames.MOB_ISLOOTABLE.get(), flag);
}

/**
Expand All @@ -80,7 +79,7 @@ public static void setLootableTag(Mob mob, boolean flag) {
@ParametersAreNonnullByDefault
public static boolean isLootable(Mob mob) {
NBTEntity nbtEntity = new NBTEntity(mob);
return nbtEntity.getPersistentDataContainer().getBoolean(lootableTag);
return nbtEntity.getPersistentDataContainer().getBoolean(NBTTagNames.MOB_ISLOOTABLE.get());
}

/**
Expand Down
5 changes: 3 additions & 2 deletions src/main/java/net/riblab/tradecore/entity/mob/TCMob.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import me.gamercoder215.mobchip.bukkit.BukkitBrain;
import net.kyori.adventure.text.Component;
import net.riblab.tradecore.TradeCore;
import net.riblab.tradecore.general.NBTTagNames;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Mob;
import org.bukkit.inventory.ItemStack;
Expand Down Expand Up @@ -63,7 +64,7 @@ public void spawn(Mob mob) {
mob.setCustomNameVisible(false);

NBTEntity nbtEntity = new NBTEntity(mob);
nbtEntity.getPersistentDataContainer().setString("TCID", internalName);
nbtEntity.getPersistentDataContainer().setString(NBTTagNames.MOBID.get(), internalName);

EntityBrain brain = BukkitBrain.getBrain(mob);
//TODO:AIを持ったモブ
Expand Down Expand Up @@ -106,7 +107,7 @@ public boolean isSimilar(Mob mob) {
return false;

NBTEntity nbtEntity = new NBTEntity(mob);
String ID = nbtEntity.getPersistentDataContainer().getString("TCID");
String ID = nbtEntity.getPersistentDataContainer().getString(NBTTagNames.MOBID.get());

if (ID == null)
return false;
Expand Down
3 changes: 2 additions & 1 deletion src/main/java/net/riblab/tradecore/entity/mob/TCMobs.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import dev.jorel.commandapi.arguments.CustomArgument;
import dev.jorel.commandapi.arguments.StringArgument;
import net.kyori.adventure.text.Component;
import net.riblab.tradecore.general.NBTTagNames;
import net.riblab.tradecore.item.base.TCItems;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Mob;
Expand Down Expand Up @@ -47,7 +48,7 @@ public static ITCMob toTCMob(@Nullable Mob mob) {
return null;

NBTEntity nbtEntity = new NBTEntity(mob);
String ID = nbtEntity.getPersistentDataContainer().getString("TCID");
String ID = nbtEntity.getPersistentDataContainer().getString(NBTTagNames.MOBID.get());

TCMobs itcMob = Arrays.stream(TCMobs.values()).filter(e -> e.get().getInternalName().equals(ID)).findFirst().orElse(null);
return itcMob == null ? null : itcMob.get();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import de.tr7zw.nbtapi.NBTEntity;
import lombok.Getter;
import net.riblab.tradecore.general.NBTTagNames;
import org.bukkit.entity.Projectile;

public class TCProjectile implements ITCProjectile {
Expand All @@ -26,8 +27,8 @@ public TCProjectile(Class<? extends Projectile> baseClass, String internalName)
@Override
public void onSpawn(Projectile projectile, double damage) {
NBTEntity nbtEntity = new NBTEntity(projectile);
nbtEntity.getPersistentDataContainer().setString("TCID", internalName);
nbtEntity.getPersistentDataContainer().setDouble("ProjectileDamage", damage);
nbtEntity.getPersistentDataContainer().setString(NBTTagNames.PROJECTILEID.get(), internalName);
nbtEntity.getPersistentDataContainer().setDouble(NBTTagNames.PROJECTILEDAMAGE.get(), damage);
}

@Override
Expand All @@ -36,7 +37,7 @@ public boolean isSimilar(Projectile projectile) {
return false;

NBTEntity nbtEntity = new NBTEntity(projectile);
String ID = nbtEntity.getPersistentDataContainer().getString("TCID");
String ID = nbtEntity.getPersistentDataContainer().getString(NBTTagNames.PROJECTILEID.get());

if (ID == null)
return false;
Expand All @@ -47,6 +48,6 @@ public boolean isSimilar(Projectile projectile) {
@Override
public double getDamage(Projectile projectile) {
NBTEntity nbtEntity = new NBTEntity(projectile);
return nbtEntity.getPersistentDataContainer().getDouble("ProjectileDamage");
return nbtEntity.getPersistentDataContainer().getDouble(NBTTagNames.PROJECTILEDAMAGE.get());
}
}
28 changes: 28 additions & 0 deletions src/main/java/net/riblab/tradecore/general/NBTTagNames.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package net.riblab.tradecore.general;

/**
* このプラグインで使われているNBTタグの名前を集約したもの
* 安易にいじるとデータが全部飛ぶ
*/
public enum NBTTagNames {
ITEMID("TCID"),
MOBID("TCMobID"),
MOB_ISLOOTABLE("Lootable"),
ARMOR_TRIM("Trim"),
ARMOR_MATERIAL("material"),
ARMOR_PATTERN("pattern"),
ARMOR_HIDEFLAGS("HideFlags"),
PROJECTILEID("TCProjectileID"),
PROJECTILEDAMAGE("ProjectileDamage"),
DURABILITY("durability");

private final String name;

NBTTagNames(String name) {
this.name = name;
}

public String get(){
return name;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,6 @@
*/
public interface IHasDurability {

String durabilityTag = "durability";

/**
* ツールの基礎耐久値。-1で無限
*/
Expand Down
9 changes: 5 additions & 4 deletions src/main/java/net/riblab/tradecore/item/base/TCEquipment.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import net.kyori.adventure.text.TextComponent;
import net.kyori.adventure.text.format.NamedTextColor;
import net.kyori.adventure.text.format.TextDecoration;
import net.riblab.tradecore.general.NBTTagNames;
import net.riblab.tradecore.item.ItemCreator;
import net.riblab.tradecore.item.mod.IItemMod;
import org.bukkit.Material;
Expand Down Expand Up @@ -46,10 +47,10 @@ class TCEquipment extends TCItem implements ITCEquipment {
.setIntNBT(durabilityTag, baseDurability)
.setLores(getLore(baseDurability)).create();
NBTItem item = new NBTItem(itemStack);
item.setInteger("HideFlags", 135);//hideattribute + hidearmorupgrade
NBTCompound nbtList = item.getOrCreateCompound("Trim");
nbtList.setString("material", "minecraft:" + trimName);
nbtList.setString("pattern", "minecraft:" + trimName);
item.setInteger(NBTTagNames.ARMOR_HIDEFLAGS.get(), 135);//hideattribute + hidearmorupgrade
NBTCompound nbtList = item.getOrCreateCompound(NBTTagNames.ARMOR_TRIM.get());
nbtList.setString(NBTTagNames.ARMOR_MATERIAL.get(), "minecraft:" + trimName);
nbtList.setString(NBTTagNames.ARMOR_PATTERN.get(), "minecraft:" + trimName);
itemStack = item.getItem();
return new ItemCreator(itemStack);
}
Expand Down
5 changes: 3 additions & 2 deletions src/main/java/net/riblab/tradecore/item/base/TCItem.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import net.kyori.adventure.text.TextComponent;
import net.kyori.adventure.text.format.NamedTextColor;
import net.kyori.adventure.text.format.TextDecoration;
import net.riblab.tradecore.general.NBTTagNames;
import net.riblab.tradecore.item.ItemCreator;
import org.bukkit.Material;
import org.bukkit.command.CommandSender;
Expand Down Expand Up @@ -70,7 +71,7 @@ public TCItem(TextComponent name, Material material, String internalName, int cu
protected @Nonnull ItemCreator createItem() {
return new ItemCreator(material)
.setName(name.decoration(TextDecoration.ITALIC, false).color(NamedTextColor.WHITE))
.setStrNBT("TCID", internalName)
.setStrNBT(NBTTagNames.ITEMID.get(), internalName)
.hideEnchantment()
.setCustomModelData(customModelData)
.setUnbreakable(false)
Expand All @@ -96,7 +97,7 @@ public boolean isSimilar(@Nullable ItemStack itemStack) {
if (itemStack == null || itemStack.getType().equals(Material.AIR))
return false;

String ID = new ItemCreator(itemStack).getStrNBT("TCID");
String ID = new ItemCreator(itemStack).getStrNBT(NBTTagNames.ITEMID.get());

if (ID == null)
return false;
Expand Down
3 changes: 2 additions & 1 deletion src/main/java/net/riblab/tradecore/item/base/TCItems.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import dev.jorel.commandapi.arguments.StringArgument;
import net.kyori.adventure.text.Component;
import net.riblab.tradecore.dungeon.DungeonNames;
import net.riblab.tradecore.general.NBTTagNames;
import net.riblab.tradecore.item.ItemCreator;
import net.riblab.tradecore.item.impl.*;
import net.riblab.tradecore.item.mod.*;
Expand Down Expand Up @@ -137,7 +138,7 @@ public static ITCItem toTCItem(ItemStack itemStack) {
if (itemStack == null || itemStack.getType() == Material.AIR)
return null;

String id = new ItemCreator(itemStack).getStrNBT("TCID");
String id = new ItemCreator(itemStack).getStrNBT(NBTTagNames.ITEMID.get());
TCItems itcItem = Arrays.stream(TCItems.values()).filter(e -> e.get().isSimilar(id)).findFirst().orElse(null);
return itcItem == null ? null : itcItem.get();
}
Expand Down
7 changes: 4 additions & 3 deletions src/main/java/net/riblab/tradecore/item/base/TCTool.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import net.kyori.adventure.text.TextComponent;
import net.kyori.adventure.text.format.NamedTextColor;
import net.kyori.adventure.text.format.TextDecoration;
import net.riblab.tradecore.general.NBTTagNames;
import net.riblab.tradecore.item.ItemCreator;
import net.riblab.tradecore.item.mod.IItemMod;
import org.bukkit.Material;
Expand Down Expand Up @@ -48,7 +49,7 @@ public TCTool(TextComponent name, Material material, String internalName, int cu

@Override
protected ItemCreator createItem() {
return super.createItem().setIntNBT(durabilityTag, baseDurability)
return super.createItem().setIntNBT(NBTTagNames.DURABILITY.get(), baseDurability)
.setLores(getLore(baseDurability));
}

Expand Down Expand Up @@ -78,7 +79,7 @@ public ItemStack reduceDurability(ItemStack instance, int amount) {
if (!isSimilar(instance))
return null;

int durability = new ItemCreator(instance).getIntNBT(durabilityTag);
int durability = new ItemCreator(instance).getIntNBT(NBTTagNames.DURABILITY.get());

if (durability == -1) //耐久無限
return instance;
Expand All @@ -93,6 +94,6 @@ public ItemStack reduceDurability(ItemStack instance, int amount) {

int damageToSet = (int) (instance.getType().getMaxDurability() * ((float) durability / (float) baseDurability));
int damageToDeal = (instance.getType().getMaxDurability() - instance.getDurability()) - damageToSet;
return new ItemCreator(instance).setLores(getLore(durability)).damage(damageToDeal).setIntNBT(durabilityTag, durability).create();
return new ItemCreator(instance).setLores(getLore(durability)).damage(damageToDeal).setIntNBT(NBTTagNames.DURABILITY.get(), durability).create();
}
}
7 changes: 4 additions & 3 deletions src/main/java/net/riblab/tradecore/item/impl/TCWeapon.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import net.kyori.adventure.text.TextComponent;
import net.kyori.adventure.text.format.NamedTextColor;
import net.kyori.adventure.text.format.TextDecoration;
import net.riblab.tradecore.general.NBTTagNames;
import net.riblab.tradecore.item.ItemCreator;
import net.riblab.tradecore.item.base.ITCWeapon;
import net.riblab.tradecore.item.base.IWeaponAttribute;
Expand Down Expand Up @@ -39,7 +40,7 @@ public TCWeapon(TextComponent name, Material material, String internalName, int

@Override
protected ItemCreator createItem() {
return super.createItem().setIntNBT(durabilityTag, baseDurability)
return super.createItem().setIntNBT(NBTTagNames.DURABILITY.get(), baseDurability)
.setLores(getLore(baseDurability)).setAttackSpeed(attribute.getAttackSpeed());
}

Expand Down Expand Up @@ -69,7 +70,7 @@ public ItemStack reduceDurability(ItemStack instance, int amount) {
if (!isSimilar(instance))
return null;

int durability = new ItemCreator(instance).getIntNBT(durabilityTag);
int durability = new ItemCreator(instance).getIntNBT(NBTTagNames.DURABILITY.get());

if (durability == -1) //耐久無限
return instance;
Expand All @@ -84,6 +85,6 @@ public ItemStack reduceDurability(ItemStack instance, int amount) {

int damageToSet = (int) (instance.getType().getMaxDurability() * ((float) durability / (float) baseDurability));
int damageToDeal = (instance.getType().getMaxDurability() - instance.getDurability()) - damageToSet;
return new ItemCreator(instance).setLores(getLore(durability)).damage(damageToDeal).setIntNBT(durabilityTag, durability).create();
return new ItemCreator(instance).setLores(getLore(durability)).damage(damageToDeal).setIntNBT(NBTTagNames.DURABILITY.get(), durability).create();
}
}

0 comments on commit 83a4a57

Please sign in to comment.