From 9d7056191ee66d3fafece0fbdc2b7ebe4b285a48 Mon Sep 17 00:00:00 2001 From: Cola Date: Sun, 21 Aug 2022 21:09:24 +0100 Subject: [PATCH 1/3] Working first version --- .../simpleadminhacks/hacks/basic/Autopot.java | 103 ++++++++++++++++++ paper/src/main/resources/config.yml | 2 + 2 files changed, 105 insertions(+) create mode 100644 paper/src/main/java/com/programmerdan/minecraft/simpleadminhacks/hacks/basic/Autopot.java diff --git a/paper/src/main/java/com/programmerdan/minecraft/simpleadminhacks/hacks/basic/Autopot.java b/paper/src/main/java/com/programmerdan/minecraft/simpleadminhacks/hacks/basic/Autopot.java new file mode 100644 index 00000000..d9ab5b0a --- /dev/null +++ b/paper/src/main/java/com/programmerdan/minecraft/simpleadminhacks/hacks/basic/Autopot.java @@ -0,0 +1,103 @@ +package com.programmerdan.minecraft.simpleadminhacks.hacks.basic; + +import com.programmerdan.minecraft.simpleadminhacks.SimpleAdminHacks; +import com.programmerdan.minecraft.simpleadminhacks.framework.BasicHack; +import com.programmerdan.minecraft.simpleadminhacks.framework.BasicHackConfig; +import java.util.UUID; +import org.bukkit.Color; +import org.bukkit.Effect; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.entity.EntityDamageEvent; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.PotionMeta; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; +import org.bukkit.potion.PotionType; +import vg.civcraft.mc.civmodcore.players.settings.PlayerSettingAPI; +import vg.civcraft.mc.civmodcore.players.settings.impl.DoubleSetting; + +public class Autopot extends BasicHack { + + private DoubleSetting doubleSetting; + public Autopot(SimpleAdminHacks plugin, BasicHackConfig config) { + super(plugin, config); + this.doubleSetting = new DoubleSetting(this.plugin, + 10.0D, + "Auto pot threshold", + "SAHAutopotThreshold", + new ItemStack(Material.SPLASH_POTION), + "When below this amount of health, autopot will run. Remember that full health is 20"); + } + + @Override + public void onEnable() { + super.onEnable(); + registerSettings(); + } + + @EventHandler + public void onTakingDamage(EntityDamageEvent event) { + if (!(event.getEntity() instanceof Player player)) { + return; + } + if (!((player.getHealth() - event.getFinalDamage()) < getDoubleSetting(player.getUniqueId()))) { + return; + } + HealthType type = checkForHealthPotionAndType(player.getInventory()); + if (type == null) { + return; + } + Integer amplifer = type.getValue(); + if (amplifer == null) { + return; + } + player.addPotionEffect(new PotionEffect(PotionEffectType.HEAL, 1, amplifer, true, true, true)); + player.getWorld().playEffect(player.getLocation(), Effect.INSTANT_POTION_BREAK, Color.RED); + } + + public void registerSettings() { + PlayerSettingAPI.registerSetting(doubleSetting, this.plugin.getSettingManager().getMainMenu()); + } + + public Double getDoubleSetting(UUID uuid) { + return doubleSetting.getValue(uuid); + } + + public HealthType checkForHealthPotionAndType(Inventory inventory){ + if (inventory == null) { + return null; + } + for (ItemStack is : inventory.getContents()) { + if (is == null) { + continue; + } + if (is.getType() != Material.SPLASH_POTION) { + continue; + } + PotionMeta meta = (PotionMeta) is.getItemMeta(); + if (meta.getBasePotionData().getType() != PotionType.INSTANT_HEAL) { + continue; + } + is.setAmount(is.getAmount() - 1); + return meta.getBasePotionData().isUpgraded() ? HealthType.HEALTH_2 : HealthType.HEALTH_1; + } + return null; + } + + private enum HealthType { + HEALTH_1(1), + HEALTH_2(2); + + private Integer value; + + HealthType(Integer integer){ + this.value = integer; + } + public Integer getValue(){ + return value; + } + } +} diff --git a/paper/src/main/resources/config.yml b/paper/src/main/resources/config.yml index aa6ff371..289cb70b 100644 --- a/paper/src/main/resources/config.yml +++ b/paper/src/main/resources/config.yml @@ -64,6 +64,8 @@ hacks: hideHealth: true # Limit player ping in the tablist to the same 6 values vanilla clients can discern visually roundPlayerListPing: true + Autopot: + enabled: false AutoRespawn: enabled: true # Delay in MS From 15699218d9ccd2bf6164a575b62ee7d5609fb9d8 Mon Sep 17 00:00:00 2001 From: Cola Date: Wed, 31 Aug 2022 01:49:51 +0100 Subject: [PATCH 2/3] Add AOE pots as config option --- .../simpleadminhacks/hacks/basic/Autopot.java | 21 ++++++++++++++++++- paper/src/main/resources/config.yml | 2 ++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/paper/src/main/java/com/programmerdan/minecraft/simpleadminhacks/hacks/basic/Autopot.java b/paper/src/main/java/com/programmerdan/minecraft/simpleadminhacks/hacks/basic/Autopot.java index d9ab5b0a..413059c3 100644 --- a/paper/src/main/java/com/programmerdan/minecraft/simpleadminhacks/hacks/basic/Autopot.java +++ b/paper/src/main/java/com/programmerdan/minecraft/simpleadminhacks/hacks/basic/Autopot.java @@ -3,11 +3,14 @@ import com.programmerdan.minecraft.simpleadminhacks.SimpleAdminHacks; import com.programmerdan.minecraft.simpleadminhacks.framework.BasicHack; import com.programmerdan.minecraft.simpleadminhacks.framework.BasicHackConfig; +import com.programmerdan.minecraft.simpleadminhacks.framework.autoload.AutoLoad; import java.util.UUID; import org.bukkit.Color; import org.bukkit.Effect; import org.bukkit.Material; +import org.bukkit.entity.EntityType; import org.bukkit.entity.Player; +import org.bukkit.entity.ThrownPotion; import org.bukkit.event.EventHandler; import org.bukkit.event.entity.EntityDamageEvent; import org.bukkit.inventory.Inventory; @@ -21,6 +24,9 @@ public class Autopot extends BasicHack { + @AutoLoad + private boolean should_pots_have_aoe; + private DoubleSetting doubleSetting; public Autopot(SimpleAdminHacks plugin, BasicHackConfig config) { super(plugin, config); @@ -54,7 +60,20 @@ public void onTakingDamage(EntityDamageEvent event) { if (amplifer == null) { return; } - player.addPotionEffect(new PotionEffect(PotionEffectType.HEAL, 1, amplifer, true, true, true)); + PotionEffect effect = new PotionEffect(PotionEffectType.HEAL, 1, amplifer, true, true, true); + if (should_pots_have_aoe) { + ItemStack itemStack = new ItemStack(Material.SPLASH_POTION); + PotionMeta potionMeta = (PotionMeta) itemStack.getItemMeta(); + + potionMeta.addCustomEffect(new PotionEffect(PotionEffectType.HEAL, 1, amplifer), true); + + itemStack.setItemMeta(potionMeta); + + ThrownPotion thrownPotion = (ThrownPotion) player.getWorld().spawnEntity(player.getLocation(), EntityType.SPLASH_POTION); + thrownPotion.setItem(itemStack); + return; + } + player.addPotionEffect(effect); player.getWorld().playEffect(player.getLocation(), Effect.INSTANT_POTION_BREAK, Color.RED); } diff --git a/paper/src/main/resources/config.yml b/paper/src/main/resources/config.yml index 289cb70b..bbe4ff42 100644 --- a/paper/src/main/resources/config.yml +++ b/paper/src/main/resources/config.yml @@ -66,6 +66,8 @@ hacks: roundPlayerListPing: true Autopot: enabled: false + #Should an actual potion be spawned in the world to affect other players? + should_pots_have_aoe: false AutoRespawn: enabled: true # Delay in MS From cde0d88ba3ac5e83707a23ee9a4aeea085dbabc0 Mon Sep 17 00:00:00 2001 From: Cola Date: Tue, 11 Oct 2022 15:57:51 +0100 Subject: [PATCH 3/3] Make autopot leave hotbar til last --- .../minecraft/simpleadminhacks/hacks/basic/Autopot.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/paper/src/main/java/com/programmerdan/minecraft/simpleadminhacks/hacks/basic/Autopot.java b/paper/src/main/java/com/programmerdan/minecraft/simpleadminhacks/hacks/basic/Autopot.java index 413059c3..73d948e4 100644 --- a/paper/src/main/java/com/programmerdan/minecraft/simpleadminhacks/hacks/basic/Autopot.java +++ b/paper/src/main/java/com/programmerdan/minecraft/simpleadminhacks/hacks/basic/Autopot.java @@ -89,7 +89,8 @@ public HealthType checkForHealthPotionAndType(Inventory inventory){ if (inventory == null) { return null; } - for (ItemStack is : inventory.getContents()) { + for (int i = inventory.getSize(); i >= 0; i--) { + ItemStack is = inventory.getItem(i); if (is == null) { continue; }