Search in sources :

Example 1 with ItemSerializer

use of me.deecaad.core.file.serializers.ItemSerializer in project MechanicsMain by WeaponMechanics.

the class ProjectileSettings method serialize.

@Override
@Nonnull
public ProjectileSettings serialize(SerializeData data) throws SerializerException {
    String type = data.of("Type").assertExists().get().toString().trim().toUpperCase(Locale.ROOT);
    boolean isInvisible = type.equals("INVISIBLE");
    Object disguiseData = null;
    EntityType projectileType = null;
    if (!isInvisible) {
        projectileType = data.of("Type").assertExists().getEnum(EntityType.class);
        ItemStack projectileItem = data.of("Projectile_Item_Or_Block").serializeNonStandardSerializer(new ItemSerializer());
        if ((projectileType == EntityType.DROPPED_ITEM || projectileType == EntityType.FALLING_BLOCK) && projectileItem == null) {
            throw data.exception(null, "When using " + projectileType + ", you MUST use Projectile_Item_Or_Block");
        }
        if (projectileItem != null) {
            if (projectileType == EntityType.FIREWORK && !(projectileItem.getItemMeta() instanceof FireworkMeta)) {
                throw data.exception(null, "When using " + projectileType + ", the item must be a firework", SerializerException.forValue(projectileItem));
            }
            if (projectileType == EntityType.FALLING_BLOCK) {
                disguiseData = projectileItem.getType();
            } else {
                disguiseData = projectileItem;
            }
        }
    }
    double gravity = data.of("Gravity").getDouble(0.05);
    // -1 so that CustomProjectile#tick() can understand that minimum or maximum speed isn't used
    double minimumSpeed = data.of("Minimum.Speed").assertPositive().getDouble(-20.0) / 20.0;
    boolean removeAtMinimumSpeed = data.of("Minimum.Remove_Projectile_On_Speed_Reached").getBool(false);
    double maximumSpeed = data.of("Maximum.Speed").assertPositive().getDouble(-20.0) / 20.0;
    boolean removeAtMaximumSpeed = data.of("Maximum.Remove_Projectile_On_Speed_Reached").getBool(false);
    double decrease = data.of("Drag.Base").assertRange(0.0, 3.0).getDouble(0.99);
    double decreaseInWater = data.of("Drag.In_Water").assertRange(0.0, 3.0).getDouble(0.96);
    double decreaseWhenRainingOrSnowing = data.of("Drag.When_Raining_Or_Snowing").assertRange(0.0, 3.0).getDouble(0.98);
    boolean disableEntityCollisions = data.of("Disable_Entity_Collisions").getBool(false);
    int maximumAliveTicks = data.of("Maximum_Alive_Ticks").assertPositive().getInt(600);
    double maximumTravelDistance = data.of("Maximum_Travel_Distance").assertPositive().getDouble(-1);
    return new ProjectileSettings(projectileType, disguiseData, gravity, removeAtMinimumSpeed, minimumSpeed, removeAtMaximumSpeed, maximumSpeed, decrease, decreaseInWater, decreaseWhenRainingOrSnowing, disableEntityCollisions, maximumAliveTicks, maximumTravelDistance);
}
Also used : EntityType(org.bukkit.entity.EntityType) ItemSerializer(me.deecaad.core.file.serializers.ItemSerializer) FireworkMeta(org.bukkit.inventory.meta.FireworkMeta) ItemStack(org.bukkit.inventory.ItemStack) Nonnull(javax.annotation.Nonnull)

Example 2 with ItemSerializer

use of me.deecaad.core.file.serializers.ItemSerializer in project MechanicsMain by WeaponMechanics.

the class AmmoTypes method serialize.

@Override
@Nonnull
public AmmoTypes serialize(SerializeData data) throws SerializerException {
    List<IAmmoType> ammoTypes = new ArrayList<>();
    for (String ammoName : data.config.getConfigurationSection(data.key).getKeys(false)) {
        SerializeData move = data.move(ammoName);
        String symbol = move.of("Symbol").assertType(String.class).get(null);
        // Experience
        int experienceAsAmmoCost = move.of("Experience_As_Ammo_Cost").assertPositive().getInt(-1);
        if (experienceAsAmmoCost != -1) {
            ammoTypes.add(new ExperienceAmmo(ammoName, symbol, experienceAsAmmoCost));
            continue;
        }
        // Money
        int moneyAsAmmoCost = move.of("Money_As_Ammo_Cost").assertPositive().getInt(-1);
        if (moneyAsAmmoCost != -1) {
            ammoTypes.add(new MoneyAmmo(ammoName, symbol, moneyAsAmmoCost));
            continue;
        }
        // Item
        ItemStack bulletItem = move.of("Item_Ammo.Bullet_Item").serializeNonStandardSerializer(new ItemSerializer());
        ItemStack magazineItem = move.of("Item_Ammo.Magazine_Item").serializeNonStandardSerializer(new ItemSerializer());
        if (magazineItem == null && bulletItem == null) {
            throw move.exception(null, "Tried to use ammo without any options? You should use at least one of the ammo types!");
        }
        if (bulletItem != null) {
            CustomTag.AMMO_NAME.setString(bulletItem, ammoName);
        }
        // Not else if since both of these can be used at same time
        if (magazineItem != null) {
            CustomTag.AMMO_NAME.setString(magazineItem, ammoName);
            // Set to indicate that this item is magazine
            CustomTag.AMMO_MAGAZINE.setInteger(magazineItem, 1);
        }
        AmmoConverter ammoConverter = (AmmoConverter) move.of("Item_Ammo.Ammo_Converter_Check").serialize(new AmmoConverter());
        ammoTypes.add(new ItemAmmo(ammoName, symbol, bulletItem, magazineItem, ammoConverter));
    }
    return new AmmoTypes(ammoTypes);
}
Also used : ItemSerializer(me.deecaad.core.file.serializers.ItemSerializer) ArrayList(java.util.ArrayList) SerializeData(me.deecaad.core.file.SerializeData) ItemStack(org.bukkit.inventory.ItemStack) Nonnull(javax.annotation.Nonnull)

Example 3 with ItemSerializer

use of me.deecaad.core.file.serializers.ItemSerializer in project MechanicsMain by WeaponMechanics.

the class FireworkMechanic method serialize.

@Override
@Nonnull
public FireworkMechanic serialize(SerializeData data) throws SerializerException {
    ItemStack fireworkItem = data.of("Item").assertExists().serializeNonStandardSerializer(new ItemSerializer());
    if (!(fireworkItem.getItemMeta() instanceof FireworkMeta)) {
        throw data.exception(null, "Item Type should be a firework when using a Firework Mechanic");
    }
    LocationAdjuster locationAdjuster = data.of("Location_Adjuster").serialize(LocationAdjuster.class);
    return new FireworkMechanic(locationAdjuster, fireworkItem);
}
Also used : ItemSerializer(me.deecaad.core.file.serializers.ItemSerializer) FireworkMeta(org.bukkit.inventory.meta.FireworkMeta) LocationAdjuster(me.deecaad.core.file.serializers.LocationAdjuster) ItemStack(org.bukkit.inventory.ItemStack) Nonnull(javax.annotation.Nonnull)

Aggregations

Nonnull (javax.annotation.Nonnull)3 ItemSerializer (me.deecaad.core.file.serializers.ItemSerializer)3 ItemStack (org.bukkit.inventory.ItemStack)3 FireworkMeta (org.bukkit.inventory.meta.FireworkMeta)2 ArrayList (java.util.ArrayList)1 SerializeData (me.deecaad.core.file.SerializeData)1 LocationAdjuster (me.deecaad.core.file.serializers.LocationAdjuster)1 EntityType (org.bukkit.entity.EntityType)1