diff --git a/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/Reforges.java b/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/Reforges.java index a668d10..3504037 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/Reforges.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/Reforges.java @@ -6,13 +6,17 @@ import com.google.common.collect.ImmutableSet; import com.willfp.eco.core.config.updating.ConfigUpdater; import com.willfp.reforges.reforges.reforges.ReforgeAerobic; import com.willfp.reforges.reforges.reforges.ReforgeDynamic; +import com.willfp.reforges.reforges.reforges.ReforgeEvasive; import com.willfp.reforges.reforges.reforges.ReforgeGravitated; import com.willfp.reforges.reforges.reforges.ReforgeLight; import com.willfp.reforges.reforges.reforges.ReforgeLucky; +import com.willfp.reforges.reforges.reforges.ReforgeReinforced; import com.willfp.reforges.reforges.reforges.ReforgeRich; import com.willfp.reforges.reforges.reforges.ReforgeSharp; import com.willfp.reforges.reforges.reforges.ReforgeStreamlined; import com.willfp.reforges.reforges.reforges.ReforgeStrong; +import com.willfp.reforges.reforges.reforges.ReforgeThin; +import com.willfp.reforges.reforges.reforges.ReforgeTough; import com.willfp.reforges.reforges.reforges.ReforgeWealthy; import com.willfp.reforges.reforges.reforges.ReforgeWise; import lombok.experimental.UtilityClass; @@ -40,6 +44,10 @@ public class Reforges { public static final Reforge LUCKY = new ReforgeLucky(); public static final Reforge AEROBIC = new ReforgeAerobic(); public static final Reforge STREAMLINED = new ReforgeStreamlined(); + public static final Reforge THIN = new ReforgeThin(); + public static final Reforge TOUGH = new ReforgeTough(); + public static final Reforge REINFORCED = new ReforgeReinforced(); + public static final Reforge EVASIVE = new ReforgeEvasive(); /** * Get all registered {@link Reforge}s. diff --git a/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/reforges/ReforgeEvasive.java b/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/reforges/ReforgeEvasive.java new file mode 100644 index 0000000..f3d0b43 --- /dev/null +++ b/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/reforges/ReforgeEvasive.java @@ -0,0 +1,28 @@ +package com.willfp.reforges.reforges.reforges; + +import com.willfp.eco.util.NumberUtils; +import com.willfp.reforges.reforges.Reforge; +import com.willfp.reforges.reforges.Reforges; +import com.willfp.reforges.reforges.meta.ReforgeTarget; +import org.bukkit.entity.LivingEntity; +import org.bukkit.event.entity.EntityDamageEvent; +import org.jetbrains.annotations.NotNull; + +public class ReforgeEvasive extends Reforge { + public ReforgeEvasive() { + super("evasive"); + } + + @Override + public ReforgeTarget getTarget() { + return ReforgeTarget.ARMOR; + } + + @Override + public void onDamageWearingArmor(@NotNull final LivingEntity victim, + @NotNull final EntityDamageEvent event) { + if (NumberUtils.randFloat(0, 100) < this.getConfig().getDouble(Reforges.CONFIG_LOCATION + "chance")) { + event.setCancelled(true); + } + } +} diff --git a/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/reforges/ReforgeReinforced.java b/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/reforges/ReforgeReinforced.java new file mode 100644 index 0000000..728b431 --- /dev/null +++ b/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/reforges/ReforgeReinforced.java @@ -0,0 +1,25 @@ +package com.willfp.reforges.reforges.reforges; + +import com.willfp.reforges.reforges.Reforge; +import com.willfp.reforges.reforges.Reforges; +import com.willfp.reforges.reforges.meta.ReforgeTarget; +import org.bukkit.entity.LivingEntity; +import org.bukkit.event.entity.EntityDamageEvent; +import org.jetbrains.annotations.NotNull; + +public class ReforgeReinforced extends Reforge { + public ReforgeReinforced() { + super("reinforced"); + } + + @Override + public ReforgeTarget getTarget() { + return ReforgeTarget.ARMOR; + } + + @Override + public void onDamageWearingArmor(@NotNull final LivingEntity victim, + @NotNull final EntityDamageEvent event) { + event.setDamage(event.getDamage() * this.getConfig().getDouble(Reforges.CONFIG_LOCATION + "multiplier")); + } +} diff --git a/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/reforges/ReforgeThin.java b/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/reforges/ReforgeThin.java new file mode 100644 index 0000000..0efe105 --- /dev/null +++ b/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/reforges/ReforgeThin.java @@ -0,0 +1,63 @@ +package com.willfp.reforges.reforges.reforges; + +import com.willfp.reforges.reforges.Reforge; +import com.willfp.reforges.reforges.Reforges; +import com.willfp.reforges.reforges.meta.ReforgeTarget; +import org.bukkit.attribute.Attribute; +import org.bukkit.attribute.AttributeModifier; +import org.bukkit.entity.LivingEntity; +import org.bukkit.event.entity.EntityDamageEvent; +import org.bukkit.inventory.ItemFlag; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; +import org.jetbrains.annotations.NotNull; + +import java.util.UUID; + +public class ReforgeThin extends Reforge { + private AttributeModifier speedModifier; + + public ReforgeThin() { + super("thin"); + } + + @Override + protected void postUpdate() { + this.speedModifier = new AttributeModifier( + UUID.nameUUIDFromBytes("thin-speed".getBytes()), + "thin-speed", + this.getConfig().getDouble(Reforges.CONFIG_LOCATION + "speed-multiplier") - 1, + AttributeModifier.Operation.MULTIPLY_SCALAR_1 + ); + } + + @Override + public ReforgeTarget getTarget() { + return ReforgeTarget.ARMOR; + } + + @Override + public void onDamageWearingArmor(@NotNull final LivingEntity victim, + @NotNull final EntityDamageEvent event) { + event.setDamage(event.getDamage() * this.getConfig().getDouble(Reforges.CONFIG_LOCATION + "multiplier")); + } + + @Override + public void handleApplication(@NotNull final ItemStack itemStack) { + ItemMeta meta = itemStack.getItemMeta(); + assert meta != null; + + meta.addAttributeModifier(Attribute.GENERIC_MOVEMENT_SPEED, speedModifier); + meta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES); + itemStack.setItemMeta(meta); + } + + @Override + public void handleRemoval(@NotNull final ItemStack itemStack) { + ItemMeta meta = itemStack.getItemMeta(); + assert meta != null; + + meta.removeAttributeModifier(Attribute.GENERIC_MOVEMENT_SPEED, speedModifier); + itemStack.setItemMeta(meta); + } +} diff --git a/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/reforges/ReforgeTough.java b/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/reforges/ReforgeTough.java new file mode 100644 index 0000000..3d32469 --- /dev/null +++ b/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/reforges/ReforgeTough.java @@ -0,0 +1,63 @@ +package com.willfp.reforges.reforges.reforges; + +import com.willfp.reforges.reforges.Reforge; +import com.willfp.reforges.reforges.Reforges; +import com.willfp.reforges.reforges.meta.ReforgeTarget; +import org.bukkit.attribute.Attribute; +import org.bukkit.attribute.AttributeModifier; +import org.bukkit.entity.LivingEntity; +import org.bukkit.event.entity.EntityDamageEvent; +import org.bukkit.inventory.ItemFlag; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; +import org.jetbrains.annotations.NotNull; + +import java.util.UUID; + +public class ReforgeTough extends Reforge { + private AttributeModifier speedModifier; + + public ReforgeTough() { + super("tough"); + } + + @Override + protected void postUpdate() { + this.speedModifier = new AttributeModifier( + UUID.nameUUIDFromBytes("tough-speed".getBytes()), + "tough-speed", + this.getConfig().getDouble(Reforges.CONFIG_LOCATION + "speed-multiplier") - 1, + AttributeModifier.Operation.MULTIPLY_SCALAR_1 + ); + } + + @Override + public ReforgeTarget getTarget() { + return ReforgeTarget.ARMOR; + } + + @Override + public void onDamageWearingArmor(@NotNull final LivingEntity victim, + @NotNull final EntityDamageEvent event) { + event.setDamage(event.getDamage() * this.getConfig().getDouble(Reforges.CONFIG_LOCATION + "multiplier")); + } + + @Override + public void handleApplication(@NotNull final ItemStack itemStack) { + ItemMeta meta = itemStack.getItemMeta(); + assert meta != null; + + meta.addAttributeModifier(Attribute.GENERIC_MOVEMENT_SPEED, speedModifier); + meta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES); + itemStack.setItemMeta(meta); + } + + @Override + public void handleRemoval(@NotNull final ItemStack itemStack) { + ItemMeta meta = itemStack.getItemMeta(); + assert meta != null; + + meta.removeAttributeModifier(Attribute.GENERIC_MOVEMENT_SPEED, speedModifier); + itemStack.setItemMeta(meta); + } +} diff --git a/eco-core/core-plugin/src/main/resources/reforges/evasive.yml b/eco-core/core-plugin/src/main/resources/reforges/evasive.yml new file mode 100644 index 0000000..2ace773 --- /dev/null +++ b/eco-core/core-plugin/src/main/resources/reforges/evasive.yml @@ -0,0 +1,16 @@ +# +# Evasive Reforge +# + +name: "Evasive" +enabled: true +description: "&a2%&r chance to ignore damage" + +stone-config: + requires-stone: false + texture: '' + craftable: false + recipe: [] + +config: + chance: 2 \ No newline at end of file diff --git a/eco-core/core-plugin/src/main/resources/reforges/reinforced.yml b/eco-core/core-plugin/src/main/resources/reforges/reinforced.yml new file mode 100644 index 0000000..3f8f55b --- /dev/null +++ b/eco-core/core-plugin/src/main/resources/reforges/reinforced.yml @@ -0,0 +1,16 @@ +# +# Reinforced Reforge +# + +name: "Reinforced" +enabled: true +description: "Take &a4%&r less damage" + +stone-config: + requires-stone: false + texture: '' + craftable: false + recipe: [] + +config: + multiplier: 0.96 # Damage taken multiplier \ No newline at end of file diff --git a/eco-core/core-plugin/src/main/resources/reforges/thin.yml b/eco-core/core-plugin/src/main/resources/reforges/thin.yml new file mode 100644 index 0000000..9024fe4 --- /dev/null +++ b/eco-core/core-plugin/src/main/resources/reforges/thin.yml @@ -0,0 +1,17 @@ +# +# Thin Reforge +# + +name: "Thin" +enabled: true +description: "Take &a5%&r more damage but move &a2.5%&r faster" + +stone-config: + requires-stone: false + texture: '' + craftable: false + recipe: [] + +config: + multiplier: 1.05 # Damage taken multiplier + speed-multiplier: 1.025 \ No newline at end of file diff --git a/eco-core/core-plugin/src/main/resources/reforges/tough.yml b/eco-core/core-plugin/src/main/resources/reforges/tough.yml new file mode 100644 index 0000000..d256a2f --- /dev/null +++ b/eco-core/core-plugin/src/main/resources/reforges/tough.yml @@ -0,0 +1,17 @@ +# +# Tough Reforge +# + +name: "Tough" +enabled: true +description: "Take &a8%&r less damage but move &a5%&r slower" + +stone-config: + requires-stone: false + texture: '' + craftable: false + recipe: [] + +config: + multiplier: 0.92 # Damage taken multiplier + speed-multiplier: 0.95 \ No newline at end of file