From a8a8d4961a5187fdcdca69d8fa4dbb6631d5935c Mon Sep 17 00:00:00 2001 From: Ty Sayers Date: Sat, 16 May 2015 12:58:58 -0400 Subject: [PATCH] Add remaining bow and armor based attributes, include base implementation of Legendary weapons. Fix smelting bug. --- .../game/clans/clans/ClansManager.java | 4 +- .../game/clans/items/GearManager.java | 5 + .../clans/items/attributes/ItemAttribute.java | 2 + .../attributes/armor/EscapeAttribute.java | 24 +++++ .../armor/FlatReductionAttribute.java | 23 +++++ .../items/attributes/armor/LavaAttribute.java | 26 ++++++ .../attributes/armor/PaddedAttribute.java | 25 +++++ .../armor/PercentReductionAttribute.java | 22 +++++ .../attributes/armor/ProtectionAttribute.java | 27 ++++++ .../attributes/armor/ReductionAttribute.java | 41 +++++++++ .../attributes/armor/ReductionConfig.java | 46 ++++++++++ .../attributes/armor/ReinforcedAttribute.java | 24 +++++ .../items/attributes/armor/SeaAttribute.java | 24 +++++ .../attributes/armor/SlantedAttribute.java | 25 +++++ .../{ => weapon}/AttackAttribute.java | 4 +- .../{ => weapon}/ConqueringAttribute.java | 4 +- .../{ => weapon}/DamageAttribute.java | 5 +- .../{ => weapon}/FlamingAttribute.java | 4 +- .../{ => weapon}/FrostedAttribute.java | 5 +- .../{ => weapon}/HasteAttribute.java | 4 +- .../{ => weapon}/HeavyAttribute.java | 5 +- .../{ => weapon}/JaggedAttribute.java | 4 +- .../{ => weapon}/SharpAttribute.java | 4 +- .../{ => weapon}/SmashingAttribute.java | 5 +- .../{ => weapon}/SwiftAttribute.java | 5 +- .../{ => weapon}/VampiricAttribute.java | 5 +- .../ValueDistribution.java | 2 +- .../items/legendaries/AlligatorsTooth.java | 51 ++++++++++ .../items/legendaries/GiantsBroadsword.java | 44 +++++++++ .../clans/items/legendaries/HyperBlade.java | 49 ++++++++++ .../items/legendaries/LegendaryItem.java | 74 +++++++++++++++ .../items/legendaries/MagneticBlade.java | 38 ++++++++ .../clans/items/legendaries/MeteorBow.java | 40 ++++++++ .../clans/items/legendaries/WindBlade.java | 40 ++++++++ .../game/clans/items/smelting/Smelter.java | 92 +++++++++++++++++++ .../items/smelting/SmeltingListener.java | 34 +++++++ 36 files changed, 822 insertions(+), 14 deletions(-) create mode 100644 Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/EscapeAttribute.java create mode 100644 Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/FlatReductionAttribute.java create mode 100644 Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/LavaAttribute.java create mode 100644 Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/PaddedAttribute.java create mode 100644 Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/PercentReductionAttribute.java create mode 100644 Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/ProtectionAttribute.java create mode 100644 Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/ReductionAttribute.java create mode 100644 Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/ReductionConfig.java create mode 100644 Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/ReinforcedAttribute.java create mode 100644 Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/SeaAttribute.java create mode 100644 Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/SlantedAttribute.java rename Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/{ => weapon}/AttackAttribute.java (87%) rename Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/{ => weapon}/ConqueringAttribute.java (83%) rename Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/{ => weapon}/DamageAttribute.java (75%) rename Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/{ => weapon}/FlamingAttribute.java (85%) rename Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/{ => weapon}/FrostedAttribute.java (89%) rename Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/{ => weapon}/HasteAttribute.java (91%) rename Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/{ => weapon}/HeavyAttribute.java (69%) rename Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/{ => weapon}/JaggedAttribute.java (82%) rename Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/{ => weapon}/SharpAttribute.java (80%) rename Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/{ => weapon}/SmashingAttribute.java (69%) rename Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/{ => weapon}/SwiftAttribute.java (69%) rename Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/{ => weapon}/VampiricAttribute.java (83%) rename Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/{attributes => generation}/ValueDistribution.java (96%) create mode 100644 Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/AlligatorsTooth.java create mode 100644 Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/GiantsBroadsword.java create mode 100644 Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/HyperBlade.java create mode 100644 Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/LegendaryItem.java create mode 100644 Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/MagneticBlade.java create mode 100644 Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/MeteorBow.java create mode 100644 Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/WindBlade.java create mode 100644 Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/smelting/Smelter.java create mode 100644 Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/smelting/SmeltingListener.java diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansManager.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansManager.java index 61753ea16..96191b126 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansManager.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansManager.java @@ -101,6 +101,7 @@ public class ClansManager extends MiniClientPlugin implements IRelat _clientManager = clientManager; _combatManager = new CombatManager(plugin); + _blockRestore = blockRestore; _teleport = teleport; @@ -113,7 +114,8 @@ public class ClansManager extends MiniClientPlugin implements IRelat Energy energy = new Energy(plugin); PacketHandler packetHandler = new PacketHandler(plugin); - new CustomTagFix(plugin, packetHandler); + // TODO: Re-enable customtagfix with NCP update? + //new CustomTagFix(plugin, packetHandler); DisguiseManager disguiseManager = new DisguiseManager(plugin, packetHandler); _condition = new SkillConditionManager(plugin); Creature creature = new Creature(plugin); diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/GearManager.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/GearManager.java index 7260fb095..267288b11 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/GearManager.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/GearManager.java @@ -12,6 +12,7 @@ import mineplex.game.clans.items.commands.GearCommand; import mineplex.game.clans.items.generation.Weight; import mineplex.game.clans.items.generation.WeightSet; import mineplex.serverdata.Region; +import mineplex.serverdata.Utility; import mineplex.serverdata.commands.ServerCommandManager; import mineplex.serverdata.commands.TransferCommand; import mineplex.serverdata.servers.ServerManager; @@ -29,6 +30,7 @@ import org.bukkit.plugin.java.JavaPlugin; */ public class GearManager extends MiniPlugin { + private static GearManager _instance; // Singleton instance private Map playerGears; // Mapping of player names (key) to cached gear set (value). @@ -46,6 +48,9 @@ public class GearManager extends MiniPlugin _attributeWeights = new WeightSet(new Weight(3, 3), new Weight(20, 2), new Weight(77, 1)); _itemWeights = new WeightSet(new Weight(90, true), new Weight(10, false)); _itemWeights = new WeightSet(new Weight(50, true), new Weight(50, false)); + + System.out.println("-Testting-testing"); + System.out.println(Utility.currentTimeSeconds()); } @Override diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/ItemAttribute.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/ItemAttribute.java index 3ef33e372..e44ce1dd0 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/ItemAttribute.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/ItemAttribute.java @@ -1,5 +1,7 @@ package mineplex.game.clans.items.attributes; +import mineplex.game.clans.items.generation.ValueDistribution; + import org.bukkit.event.entity.EntityDamageByEntityEvent; import org.bukkit.event.player.PlayerInteractEvent; diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/EscapeAttribute.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/EscapeAttribute.java new file mode 100644 index 000000000..5e79f4679 --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/EscapeAttribute.java @@ -0,0 +1,24 @@ +package mineplex.game.clans.items.attributes.armor; + +import mineplex.game.clans.items.attributes.ItemAttribute; +import mineplex.game.clans.items.generation.ValueDistribution; + +public class EscapeAttribute extends ItemAttribute +{ + // TODO: Replace with your generators + private static ValueDistribution healGen = generateDistribution(4, 12); // Value generator for heal amount + + private int _healPercent; + + public EscapeAttribute() + { + _healPercent = healGen.generateIntValue(); + } + + @Override + public String getDisplayName() + { + return ""; // TODO: Fill in name + } + +} diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/FlatReductionAttribute.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/FlatReductionAttribute.java new file mode 100644 index 000000000..f9b05e295 --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/FlatReductionAttribute.java @@ -0,0 +1,23 @@ +package mineplex.game.clans.items.attributes.armor; + +import mineplex.game.clans.items.generation.ValueDistribution; + +public abstract class FlatReductionAttribute extends ReductionAttribute +{ + + private double _reduction; + + public FlatReductionAttribute(ValueDistribution reductionGen, ReductionConfig config) + { + super(config); + + _reduction = reductionGen.generateValue(); + } + + @Override + public double getDamageReduction(double originalDamage) + { + return _reduction; + } + +} diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/LavaAttribute.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/LavaAttribute.java new file mode 100644 index 000000000..bdeb36575 --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/LavaAttribute.java @@ -0,0 +1,26 @@ +package mineplex.game.clans.items.attributes.armor; + +import org.bukkit.event.entity.EntityDamageEvent.DamageCause; + +import mineplex.game.clans.items.attributes.ItemAttribute; +import mineplex.game.clans.items.generation.ValueDistribution; + +public class LavaAttribute extends PercentReductionAttribute +{ + // TODO: Replace with your generators + private static ValueDistribution reductionGen = generateDistribution(0.2d, 1.0d); // Value generator for heal amount + private static ReductionConfig lavaConfig = new ReductionConfig(DamageCause.FIRE, DamageCause.LAVA, DamageCause.FIRE_TICK); + + public LavaAttribute() + { + + super(reductionGen, lavaConfig); + } + + @Override + public String getDisplayName() + { + return "Lava Forged"; + } + +} \ No newline at end of file diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/PaddedAttribute.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/PaddedAttribute.java new file mode 100644 index 000000000..7f05bbcea --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/PaddedAttribute.java @@ -0,0 +1,25 @@ +package mineplex.game.clans.items.attributes.armor; + +import org.bukkit.event.entity.EntityDamageEvent.DamageCause; + +import mineplex.game.clans.items.attributes.ItemAttribute; +import mineplex.game.clans.items.generation.ValueDistribution; + +public class PaddedAttribute extends FlatReductionAttribute +{ + // TODO: Replace with your generators + private static ValueDistribution reductionGen = generateDistribution(1.0d, 4.0d); + private static ReductionConfig config = new ReductionConfig(DamageCause.FALL); + + public PaddedAttribute() + { + super(reductionGen, config); + } + + @Override + public String getDisplayName() + { + return "Padded"; + } + +} diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/PercentReductionAttribute.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/PercentReductionAttribute.java new file mode 100644 index 000000000..fdcc6ad61 --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/PercentReductionAttribute.java @@ -0,0 +1,22 @@ +package mineplex.game.clans.items.attributes.armor; + +import mineplex.game.clans.items.generation.ValueDistribution; + +public abstract class PercentReductionAttribute extends ReductionAttribute +{ + + private double _reductionPercent; + + public PercentReductionAttribute(ValueDistribution reductionGen, ReductionConfig config) + { + super(config); + _reductionPercent = reductionGen.generateValue(); + } + + @Override + public double getDamageReduction(double originalDamage) + { + return originalDamage * _reductionPercent; + } + +} diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/ProtectionAttribute.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/ProtectionAttribute.java new file mode 100644 index 000000000..ff3995157 --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/ProtectionAttribute.java @@ -0,0 +1,27 @@ +package mineplex.game.clans.items.attributes.armor; + +import org.bukkit.entity.EntityType; +import org.bukkit.event.entity.EntityDamageEvent.DamageCause; + +import mineplex.game.clans.items.attributes.ItemAttribute; +import mineplex.game.clans.items.generation.ValueDistribution; + +// A.K.A Conquering for Armor +public class ProtectionAttribute extends FlatReductionAttribute +{ + // TODO: Replace with your generators + private static ValueDistribution reductionGen = generateDistribution(1.0d, 4.0d); + private static ReductionConfig config = new ReductionConfig(EntityType.values()); + + public ProtectionAttribute() + { + super(reductionGen, config); + } + + @Override + public String getDisplayName() + { + return "Protection"; + } + +} diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/ReductionAttribute.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/ReductionAttribute.java new file mode 100644 index 000000000..897adb14b --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/ReductionAttribute.java @@ -0,0 +1,41 @@ +package mineplex.game.clans.items.attributes.armor; + +import java.util.HashSet; +import java.util.Set; + +import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; +import org.bukkit.event.entity.EntityDamageByEntityEvent; +import org.bukkit.event.entity.EntityDamageEvent.DamageCause; + +import mineplex.game.clans.items.attributes.ItemAttribute; +import mineplex.game.clans.items.generation.ValueDistribution; + +public abstract class ReductionAttribute extends ItemAttribute +{ + + private ReductionConfig _config; + + public ReductionAttribute(ReductionConfig config) + { + _config = config; + } + + @Override + public void onAttacked(EntityDamageByEntityEvent event) + { + DamageCause cause = event.getCause(); + Entity attacker = event.getDamager(); + + if (_config.reducesDamage(cause, attacker)) + { + double damage = event.getDamage(); + double reduction = getDamageReduction(damage); + double reducedDamage = Math.max(0, damage - reduction); + + event.setDamage(reducedDamage); + } + } + + public abstract double getDamageReduction(double originalDamage); +} diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/ReductionConfig.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/ReductionConfig.java new file mode 100644 index 000000000..629f70285 --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/ReductionConfig.java @@ -0,0 +1,46 @@ +package mineplex.game.clans.items.attributes.armor; + +import java.util.HashSet; +import java.util.Set; + +import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; +import org.bukkit.event.entity.EntityDamageEvent.DamageCause; + +public class ReductionConfig +{ + + private Set _reducedAttackers; // EntityTypes whose attacks are reduced by this attribute + private Set _reducedCauses; // DamageCauses that are reduced by this attribute + + public ReductionConfig() + { + _reducedAttackers = new HashSet(); + _reducedCauses = new HashSet(); + } + + public ReductionConfig(DamageCause... reducedCauses) + { + this(); + + for (DamageCause cause : reducedCauses) + { + _reducedCauses.add(cause); + } + } + + public ReductionConfig(EntityType... reducedAttackers) + { + this(); + + for (EntityType attacker : reducedAttackers) + { + _reducedAttackers.add(attacker); + } + } + + public boolean reducesDamage(DamageCause cause, Entity attacker) + { + return _reducedCauses.contains(cause) || _reducedAttackers.contains(attacker.getType()); + } +} diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/ReinforcedAttribute.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/ReinforcedAttribute.java new file mode 100644 index 000000000..177b9a42a --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/ReinforcedAttribute.java @@ -0,0 +1,24 @@ +package mineplex.game.clans.items.attributes.armor; + +import org.bukkit.event.entity.EntityDamageEvent.DamageCause; + +import mineplex.game.clans.items.generation.ValueDistribution; + +public class ReinforcedAttribute extends FlatReductionAttribute +{ + // TODO: Replace with your generators + private static ValueDistribution reductionGen = generateDistribution(0.5d, 1.0d); + private static ReductionConfig config = new ReductionConfig(DamageCause.ENTITY_ATTACK); + + public ReinforcedAttribute() + { + super(reductionGen, config); + } + + @Override + public String getDisplayName() + { + return "Reinforced"; + } + +} diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/SeaAttribute.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/SeaAttribute.java new file mode 100644 index 000000000..3b90c71d6 --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/SeaAttribute.java @@ -0,0 +1,24 @@ +package mineplex.game.clans.items.attributes.armor; + +import mineplex.game.clans.items.attributes.ItemAttribute; +import mineplex.game.clans.items.generation.ValueDistribution; + +public class SeaAttribute extends ItemAttribute +{ + // TODO: Replace with your generators + private static ValueDistribution healGen = generateDistribution(4, 12); // Value generator for heal amount + + private int _healPercent; + + public SeaAttribute() + { + _healPercent = healGen.generateIntValue(); + } + + @Override + public String getDisplayName() + { + return ""; // TODO: Fill in name + } + +} diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/SlantedAttribute.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/SlantedAttribute.java new file mode 100644 index 000000000..f3e93f4f3 --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/armor/SlantedAttribute.java @@ -0,0 +1,25 @@ +package mineplex.game.clans.items.attributes.armor; + +import org.bukkit.event.entity.EntityDamageEvent.DamageCause; + +import mineplex.game.clans.items.attributes.ItemAttribute; +import mineplex.game.clans.items.generation.ValueDistribution; + +public class SlantedAttribute extends FlatReductionAttribute +{ + // TODO: Replace with your generators + private static ValueDistribution reductionGen = generateDistribution(0.5d, 1.5d); + private static ReductionConfig config = new ReductionConfig(DamageCause.PROJECTILE); + + public SlantedAttribute() + { + super(reductionGen, config); + } + + @Override + public String getDisplayName() + { + return "Slanted"; + } + +} diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/AttackAttribute.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/AttackAttribute.java similarity index 87% rename from Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/AttackAttribute.java rename to Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/AttackAttribute.java index 057fad619..3d98b1634 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/AttackAttribute.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/AttackAttribute.java @@ -1,4 +1,6 @@ -package mineplex.game.clans.items.attributes; +package mineplex.game.clans.items.attributes.weapon; + +import mineplex.game.clans.items.attributes.ItemAttribute; import org.bukkit.entity.Entity; import org.bukkit.event.entity.EntityDamageByEntityEvent; diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/ConqueringAttribute.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/ConqueringAttribute.java similarity index 83% rename from Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/ConqueringAttribute.java rename to Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/ConqueringAttribute.java index 56b8710ef..7e61aa5ef 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/ConqueringAttribute.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/ConqueringAttribute.java @@ -1,4 +1,6 @@ -package mineplex.game.clans.items.attributes; +package mineplex.game.clans.items.attributes.weapon; + +import mineplex.game.clans.items.generation.ValueDistribution; import org.bukkit.entity.Entity; import org.bukkit.entity.Player; diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/DamageAttribute.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/DamageAttribute.java similarity index 75% rename from Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/DamageAttribute.java rename to Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/DamageAttribute.java index 0346b26eb..2387c206d 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/DamageAttribute.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/DamageAttribute.java @@ -1,4 +1,7 @@ -package mineplex.game.clans.items.attributes; +package mineplex.game.clans.items.attributes.weapon; + +import mineplex.game.clans.items.attributes.ItemAttribute; +import mineplex.game.clans.items.generation.ValueDistribution; import org.bukkit.entity.Entity; import org.bukkit.event.entity.EntityDamageByEntityEvent; diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/FlamingAttribute.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/FlamingAttribute.java similarity index 85% rename from Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/FlamingAttribute.java rename to Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/FlamingAttribute.java index 04d34e56d..9a7b5f84c 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/FlamingAttribute.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/FlamingAttribute.java @@ -1,4 +1,6 @@ -package mineplex.game.clans.items.attributes; +package mineplex.game.clans.items.attributes.weapon; + +import mineplex.game.clans.items.generation.ValueDistribution; import org.bukkit.entity.Entity; diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/FrostedAttribute.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/FrostedAttribute.java similarity index 89% rename from Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/FrostedAttribute.java rename to Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/FrostedAttribute.java index 99e4685a7..a1a6a70e9 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/FrostedAttribute.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/FrostedAttribute.java @@ -1,4 +1,7 @@ -package mineplex.game.clans.items.attributes; +package mineplex.game.clans.items.attributes.weapon; + +import mineplex.game.clans.items.attributes.ItemAttribute; +import mineplex.game.clans.items.generation.ValueDistribution; import org.bukkit.entity.Player; import org.bukkit.event.entity.EntityDamageByEntityEvent; diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/HasteAttribute.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/HasteAttribute.java similarity index 91% rename from Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/HasteAttribute.java rename to Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/HasteAttribute.java index d8844bf50..a23f7fe68 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/HasteAttribute.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/HasteAttribute.java @@ -1,4 +1,6 @@ -package mineplex.game.clans.items.attributes; +package mineplex.game.clans.items.attributes.weapon; + +import mineplex.game.clans.items.generation.ValueDistribution; import org.bukkit.entity.Entity; import org.bukkit.entity.Player; diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/HeavyAttribute.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/HeavyAttribute.java similarity index 69% rename from Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/HeavyAttribute.java rename to Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/HeavyAttribute.java index 78e7ccdeb..04d8c9758 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/HeavyAttribute.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/HeavyAttribute.java @@ -1,4 +1,7 @@ -package mineplex.game.clans.items.attributes; +package mineplex.game.clans.items.attributes.weapon; + +import mineplex.game.clans.items.attributes.ItemAttribute; +import mineplex.game.clans.items.generation.ValueDistribution; public class HeavyAttribute extends ItemAttribute { diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/JaggedAttribute.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/JaggedAttribute.java similarity index 82% rename from Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/JaggedAttribute.java rename to Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/JaggedAttribute.java index 45ce2a6d0..51fc7c03b 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/JaggedAttribute.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/JaggedAttribute.java @@ -1,4 +1,6 @@ -package mineplex.game.clans.items.attributes; +package mineplex.game.clans.items.attributes.weapon; + +import mineplex.game.clans.items.generation.ValueDistribution; import org.bukkit.entity.Entity; import org.bukkit.util.Vector; diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/SharpAttribute.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/SharpAttribute.java similarity index 80% rename from Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/SharpAttribute.java rename to Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/SharpAttribute.java index e01089477..c03aec7a1 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/SharpAttribute.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/SharpAttribute.java @@ -1,4 +1,6 @@ -package mineplex.game.clans.items.attributes; +package mineplex.game.clans.items.attributes.weapon; + +import mineplex.game.clans.items.generation.ValueDistribution; import org.bukkit.entity.Entity; diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/SmashingAttribute.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/SmashingAttribute.java similarity index 69% rename from Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/SmashingAttribute.java rename to Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/SmashingAttribute.java index 4d823fd01..0a50290aa 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/SmashingAttribute.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/SmashingAttribute.java @@ -1,4 +1,7 @@ -package mineplex.game.clans.items.attributes; +package mineplex.game.clans.items.attributes.weapon; + +import mineplex.game.clans.items.attributes.ItemAttribute; +import mineplex.game.clans.items.generation.ValueDistribution; public class SmashingAttribute extends ItemAttribute { diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/SwiftAttribute.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/SwiftAttribute.java similarity index 69% rename from Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/SwiftAttribute.java rename to Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/SwiftAttribute.java index 1ea2a236d..1cfce1379 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/SwiftAttribute.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/SwiftAttribute.java @@ -1,4 +1,7 @@ -package mineplex.game.clans.items.attributes; +package mineplex.game.clans.items.attributes.weapon; + +import mineplex.game.clans.items.attributes.ItemAttribute; +import mineplex.game.clans.items.generation.ValueDistribution; public class SwiftAttribute extends ItemAttribute { diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/VampiricAttribute.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/VampiricAttribute.java similarity index 83% rename from Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/VampiricAttribute.java rename to Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/VampiricAttribute.java index 2246429ad..d8fabe2a2 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/VampiricAttribute.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/weapon/VampiricAttribute.java @@ -1,4 +1,7 @@ -package mineplex.game.clans.items.attributes; +package mineplex.game.clans.items.attributes.weapon; + +import mineplex.game.clans.items.attributes.ItemAttribute; +import mineplex.game.clans.items.generation.ValueDistribution; import org.bukkit.entity.Player; import org.bukkit.event.entity.EntityDamageByEntityEvent; diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/ValueDistribution.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/generation/ValueDistribution.java similarity index 96% rename from Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/ValueDistribution.java rename to Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/generation/ValueDistribution.java index 242f21427..15d13691c 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/ValueDistribution.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/generation/ValueDistribution.java @@ -1,4 +1,4 @@ -package mineplex.game.clans.items.attributes; +package mineplex.game.clans.items.generation; import java.util.Random; diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/AlligatorsTooth.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/AlligatorsTooth.java new file mode 100644 index 000000000..c8767a955 --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/AlligatorsTooth.java @@ -0,0 +1,51 @@ +package mineplex.game.clans.items.legendaries; + +import mineplex.game.clans.items.attributes.ItemAttribute; +import mineplex.game.clans.items.generation.ValueDistribution; + +import org.bukkit.entity.Player; +import org.bukkit.event.entity.EntityDamageByEntityEvent; + +public class AlligatorsTooth extends LegendaryItem +{ + + private static ValueDistribution damageGen = generateDistribution(1.0d, 5.0d); + + private double _damageBonus; + + public AlligatorsTooth() + { + _damageBonus = damageGen.generateValue(); + } + + @Override + public void update(Player wielder) + { + if (isHoldingRightClick() && isInWater(wielder)) + { + propelPlayer(wielder); + } + } + + @Override + public void onAttack(EntityDamageByEntityEvent event, Player wielder) + { + if (isInWater(wielder)) + { + double newDamage = event.getDamage() + _damageBonus; + event.setDamage(newDamage); + } + + super.onAttack(event); + } + + private void propelPlayer(Player player) + { + // TODO: Propel player forward with 0.6 to 1.2 velocity + } + + private boolean isInWater(Player player) + { + return true; // TODO: Determine whether player is submerged in water + } +} diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/GiantsBroadsword.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/GiantsBroadsword.java new file mode 100644 index 000000000..33306ab82 --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/GiantsBroadsword.java @@ -0,0 +1,44 @@ +package mineplex.game.clans.items.legendaries; + +import java.util.HashSet; +import java.util.Set; + +import org.bukkit.entity.Player; +import org.bukkit.event.entity.EntityDamageByEntityEvent; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; + +public class GiantsBroadsword extends LegendaryItem +{ + + @Override + public void update(Player wielder) + { + if (isHoldingRightClick()) + { + buffPlayer(wielder); + } + } + + @Override + public void onAttack(EntityDamageByEntityEvent event, Player wielder) + { + // TODO: Buff knockback and damage values (What are specific values?) + } + + private void buffPlayer(Player player) + { + player.addPotionEffects(generateBlockBuff()); + } + + private Set generateBlockBuff() + { + Set potions = new HashSet(); + + // Slow 5 and Regen 1 for 5 ticks + potions.add(new PotionEffect(PotionEffectType.SLOW, 4, 5)); + potions.add(new PotionEffect(PotionEffectType.REGENERATION, 0, 5)); + + return potions; + } +} diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/HyperBlade.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/HyperBlade.java new file mode 100644 index 000000000..b7584c0ef --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/HyperBlade.java @@ -0,0 +1,49 @@ +package mineplex.game.clans.items.legendaries; + +import mineplex.game.clans.items.generation.ValueDistribution; + +import org.bukkit.entity.Player; +import org.bukkit.event.entity.EntityDamageByEntityEvent; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; + +public class HyperBlade extends LegendaryItem +{ + private static ValueDistribution amountGen = generateDistribution(0, 3); // [1, 4] speed amount + private static ValueDistribution durationGen = generateDistribution(80, 320); // [4, 16] seconds speed duration + + private int _speedAmount; + private int _speedDuration; + + public HyperBlade() + { + _speedAmount = amountGen.generateIntValue(); + _speedDuration = durationGen.generateIntValue(); + } + + @Override + public void update(Player wielder) + { + if (isHoldingRightClick() && canBuff()) + { + buffPlayer(wielder); + } + } + + @Override + public void onAttack(EntityDamageByEntityEvent event, Player wielder) + { + // TODO: Reduce after-attack cooldown against players to 100ms (instead of 400ms) + } + + private void buffPlayer(Player wielder) + { + // Give player speed buff + wielder.addPotionEffect(new PotionEffect(PotionEffectType.SPEED, _speedAmount, _speedDuration)); + } + + private boolean canBuff() + { + return true; // TODO: Implement cooldown? (None specified in docs, sounds OP) + } +} diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/LegendaryItem.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/LegendaryItem.java new file mode 100644 index 000000000..559273ff4 --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/LegendaryItem.java @@ -0,0 +1,74 @@ +package mineplex.game.clans.items.legendaries; + +import org.bukkit.entity.Player; +import org.bukkit.event.block.Action; +import org.bukkit.event.entity.EntityDamageByEntityEvent; +import org.bukkit.event.player.PlayerInteractEvent; + +import mineplex.game.clans.items.CustomItem; +import mineplex.game.clans.items.generation.ValueDistribution; + +public class LegendaryItem extends CustomItem +{ + + public final long BLOCK_COOLDOWN = 200l; // Right clicking activates right click for 200ms + + private long _lastBlock; // Timestamp of last block from wielder + public long timeSinceLastBlock() { return System.currentTimeMillis() - _lastBlock; } + + + public LegendaryItem() + { + _lastBlock = 0l; + } + + public void update(Player wielder) + { + // Leave implementation to potential subtypes + } + + public void onAttack(EntityDamageByEntityEvent event, Player wielder) + { + // Leave implementation to potential subtypes + } + + @Override + public void onAttack(EntityDamageByEntityEvent event) + { + if (event.getDamager() instanceof Player) + { + Player wielder = (Player) event.getDamager(); + + onAttack(event, wielder); + } + + super.onAttack(event); + } + + public void onInteract(PlayerInteractEvent event) + { + Action action = event.getAction(); + + if (action == Action.RIGHT_CLICK_AIR || action == Action.RIGHT_CLICK_BLOCK) + { + _lastBlock = System.currentTimeMillis(); + } + + super.onInteract(event); + } + + public boolean isHoldingRightClick() + { + return timeSinceLastBlock() <= BLOCK_COOLDOWN; + } + + /** + * @param minValue - the minimum value for attribute value range + * @param maxValue - the maximum value for attribute value range + * @return newly instantiated {@link ValueDistribution} for attribute values in range [{@code minValue}. {@code maxValue}]. + */ + public static ValueDistribution generateDistribution(double minValue, double maxValue) + { + return new ValueDistribution(minValue, maxValue); + } +} diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/MagneticBlade.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/MagneticBlade.java new file mode 100644 index 000000000..5f7fca155 --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/MagneticBlade.java @@ -0,0 +1,38 @@ +package mineplex.game.clans.items.legendaries; + +import org.bukkit.entity.Player; +import org.bukkit.event.entity.EntityDamageByEntityEvent; + +public class MagneticBlade extends LegendaryItem +{ + + public MagneticBlade() + { + + } + + @Override + public void update(Player wielder) + { + if (isHoldingRightClick() && canPull()) + { + pullPlayers(wielder); + } + } + + @Override + public void onAttack(EntityDamageByEntityEvent event, Player wielder) + { + // TODO: Apply negative knockback with [???] velocity/power to victims of attacks + } + + private void pullPlayers(Player player) + { + // TODO: Grab all players in line of sight and pull towards player with ??? velocity + } + + private boolean canPull() + { + return true; // TODO: Implement cooldown? (Sounds OP without one) + } +} diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/MeteorBow.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/MeteorBow.java new file mode 100644 index 000000000..67c00cfe3 --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/MeteorBow.java @@ -0,0 +1,40 @@ +package mineplex.game.clans.items.legendaries; + +import mineplex.game.clans.items.attributes.ItemAttribute; +import mineplex.game.clans.items.generation.ValueDistribution; + +import org.bukkit.entity.Player; +import org.bukkit.event.entity.EntityDamageByEntityEvent; + +public class MeteorBow extends LegendaryItem +{ + + public static final int MAX_FLIGHT_TIME = 80; // Max flight of 80 ticks + + private long _flightTime; // Time (in ticks) since last touching ground and flying + + public MeteorBow() + { + _flightTime = 0; + } + + @Override + public void update(Player wielder) + { + if (isHoldingRightClick() && canPropel()) + { + propelPlayer(wielder); + } + } + + private void propelPlayer(Player player) + { + _flightTime++; + // TODO: Propel player forward with ??? velocity + } + + private boolean canPropel() + { + return _flightTime <= MAX_FLIGHT_TIME; + } +} diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/WindBlade.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/WindBlade.java new file mode 100644 index 000000000..16ef9ee7d --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/legendaries/WindBlade.java @@ -0,0 +1,40 @@ +package mineplex.game.clans.items.legendaries; + +import mineplex.game.clans.items.attributes.ItemAttribute; +import mineplex.game.clans.items.generation.ValueDistribution; + +import org.bukkit.entity.Player; +import org.bukkit.event.entity.EntityDamageByEntityEvent; + +public class WindBlade extends LegendaryItem +{ + + public static final int MAX_FLIGHT_TIME = 80; // Max flight of 80 ticks + + private long _flightTime; // Time (in ticks) since last touching ground and flying + + public WindBlade() + { + _flightTime = 0; + } + + @Override + public void update(Player wielder) + { + if (isHoldingRightClick() && canPropel()) + { + propelPlayer(wielder); + } + } + + private void propelPlayer(Player player) + { + _flightTime++; + // TODO: Propel player forward with ??? velocity + } + + private boolean canPropel() + { + return _flightTime <= MAX_FLIGHT_TIME; + } +} diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/smelting/Smelter.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/smelting/Smelter.java new file mode 100644 index 000000000..92976abc6 --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/smelting/Smelter.java @@ -0,0 +1,92 @@ +package mineplex.game.clans.items.smelting; + +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; + +public class Smelter +{ + + public static void smeltItemInHand(Player player) + { + // Smelt item in hand for player + ItemStack item = player.getInventory().getItemInHand(); + + if (item != null) + { + ItemStack returns = smeltItem(item); + player.getInventory().setItemInHand(returns); + } + } + + public static ItemStack smeltItem(ItemStack item) + { + Material material = getSmeltedType(item.getType()); + int maxAmount = getSmeltAmount(item.getType()); + int amount = maxAmount; // TODO: Determine proportional return on smelt depending on type/durability + return new ItemStack(material, amount); + } + + private static int getSmeltAmount(Material itemType) + { + switch (itemType) + { + case IRON_BOOTS: + case DIAMOND_BOOTS: + case GOLD_BOOTS: + return 4; + case IRON_HELMET: + case DIAMOND_HELMET: + case GOLD_HELMET: + return 5; + case IRON_LEGGINGS: + case DIAMOND_LEGGINGS: + case GOLD_LEGGINGS: + return 7; + case IRON_CHESTPLATE: + case DIAMOND_CHESTPLATE: + case GOLD_CHESTPLATE: + return 8; + case IRON_SWORD: + case DIAMOND_SWORD: + case GOLD_SWORD: + return 2; + case IRON_AXE: + case DIAMOND_AXE: + case GOLD_AXE: + return 3; + default: + return 0; + } + } + + private static Material getSmeltedType(Material itemType) + { + switch (itemType) + { + case IRON_BOOTS: + case IRON_LEGGINGS: + case IRON_CHESTPLATE: + case IRON_HELMET: + case IRON_SWORD: + case IRON_AXE: + return Material.IRON_ORE; + case DIAMOND_BOOTS: + case DIAMOND_LEGGINGS: + case DIAMOND_CHESTPLATE: + case DIAMOND_HELMET: + case DIAMOND_SWORD: + case DIAMOND_AXE: + return Material.DIAMOND_ORE; + case GOLD_BOOTS: + case GOLD_LEGGINGS: + case GOLD_CHESTPLATE: + case GOLD_HELMET: + case GOLD_SWORD: + case GOLD_AXE: + return Material.GOLD_ORE; + default: + return null; + } + } +} diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/smelting/SmeltingListener.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/smelting/SmeltingListener.java new file mode 100644 index 000000000..afa056e00 --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/smelting/SmeltingListener.java @@ -0,0 +1,34 @@ +package mineplex.game.clans.items.smelting; + +import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.block.Action; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.inventory.ItemStack; + +/** + * Listens for smelting related events triggered by players to carry out + * item smelting for base resources and ores. + * @author MrTwiggy + * + */ +public class SmeltingListener implements Listener +{ + + @EventHandler + public void onPlayerInteract(PlayerInteractEvent event) + { + if (event.getAction() == Action.LEFT_CLICK_BLOCK) + { + Block clicked = event.getClickedBlock(); + + if (clicked.getType() == Material.FURNACE) + { + Smelter.smeltItemInHand(event.getPlayer()); + } + } + } +}