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);
}
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);
}
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);
}
Aggregations