From 93e1d30a40b07e2ad92e0692346fae611089c1b9 Mon Sep 17 00:00:00 2001 From: RONiN <69498033+RealRONiN@users.noreply.github.com> Date: Fri, 22 Jul 2022 17:00:37 +0530 Subject: [PATCH 1/6] feat: config and language file entries --- src/main/resources/config.yml | 23 +++++++- src/main/resources/language.yml | 101 ++++++++++++++++++-------------- 2 files changed, 77 insertions(+), 47 deletions(-) diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 3cc92d7..59b7cd7 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -1,4 +1,4 @@ -Version: 5 +Version: 6 Clean-Console: false @@ -14,6 +14,25 @@ DefaultHealth: 20 DisableTotem: true DisableMilkCure: true +# Put [] to disable any of these. +Disabled-Worlds: + Heart-Craft: + - 'world_nether' + - 'world_the_end' + Heart-Withdraw: + - 'world_nether' + - 'world_the_end' + Heart-Drops: + Player-Kill: + - 'world_nether' + - 'world_the_end' + Other: + - 'world_nether' + - 'world_the_end' + Heart-Consume: + - 'world_nether' + - 'world_the_end' + Heart: Properties: ItemType: 'PAPER' @@ -26,7 +45,7 @@ Heart: - 'blessed or cursed heart after crafting.' - '══════════════════════════════════════' ModelData: 123456 -#Heart item recipe, it is a shaped recipe. + #Heart item recipe, it is a shaped recipe. Recipe: A: 'DIAMOND' B: 'GOLD_INGOT' diff --git a/src/main/resources/language.yml b/src/main/resources/language.yml index 3c59692..c53a26e 100644 --- a/src/main/resources/language.yml +++ b/src/main/resources/language.yml @@ -1,51 +1,62 @@ -Version: 3 +Version: 4 Messages: - LifestealLoad: LifeSteal enabled successfully! - ConfigLoad: config.yml loaded gracefully. - HeartConfigLoad: hearts.yml also loaded gracefully, maybe... - DatabaseLoad: Database seems to be loaded just fine... - ProfilesLoad: Profiles are loaded, I hope. - ListenersLoad: All the listeners are active now, and they're better at listeneing than you were. - CommandsLoad: Commands are registered, go get em commander! - CommandsAsyncLoad: Commands are registered asynchronously, get em gracefully commander! - HeartWithdraw: You've withdrawn x hearts. + LifestealLoad: "LifeSteal enabled successfully!" + ConfigLoad: "config.yml loaded gracefully." + HeartConfigLoad: "hearts.yml also loaded gracefully, maybe..." + DatabaseLoad: "Database seems to be loaded just fine..." + ProfilesLoad: "Profiles are loaded, I hope." + ListenersLoad: "All the listeners are active now, and they're better at listeneing than you were." + CommandsLoad: "Commands are registered, go get em commander!" + CommandsAsyncLoad: "Commands are registered asynchronously, get em gracefully commander!" + HeartWithdraw: "You've withdrawn x hearts." Elimination: - ByCommand: has been eliminated by . - ByPlayer: has been eliminated by . - ByDamagingBlocks: Forces beyond our understanding has eliminated . - ByMob: has been eliminated by a monster. - ByProjectile: has been caught midst firing, thus, eliminated. - BySuffocation: has been suffocated to elimination. - ByFallDamage: fell to their elimination. - ByBurn: has been burnt to elimination. - ByLava: discovered the floor is lava, instant elimination HAH! - ByDrowning: has been drowned to elimination. - ByExplosion: has been blessed blasted for elimination. - ByCreeper: has been blasted blessed by a Creeper for elimination. - BySuicide: has lost will to live and gave up into elimination. - ByVoid: fell into infinite void of elimination D: - ByLightning: Lord Zeus''s wrath has declared ''s elimination. - ByStarvation: has starved to elimination, rough times D: - ByPoison: chose wrong pill and got eliminated. - ByMagic: The Witch has cursed to elimination. - ByWither: were withered away into the void of elimination. - ByFallingBlock: Ya''ll know what's diffrence between Newton and ? one of them wasn''t eliminated by a falling entity xD - ByThorns: ''s attacks were reppeled towards them, resulting elimination. - ByDragonBreath: Goddamnit, the Dragon needs to brush regularly, it''s breath eliminated . - ByKineticEnergy: got a good physics lecture on how kinetic energy is converted into potential energy, sadly they got eliminated midst demonstration. - ByMagmaBlock: discovered the floor is lavamagma, instant elimination HAH! - ByCramming: tried catching a Mumbai local, thus, eliminated. - ByFreeze: freezed to elimination. - Other: got eliminated. + ByCommand: " has been eliminated by ." + ByPlayer: " has been eliminated by ." + ByDamagingBlocks: "Forces beyond our understanding has eliminated ." + ByMob: " has been eliminated by a monster." + ByProjectile: " has been caught midst firing, thus, eliminated." + BySuffocation: " has been suffocated to elimination." + ByFallDamage: " fell to their elimination." + ByBurn: " has been burnt to elimination." + ByLava: " discovered the floor is lava, instant elimination HAH!" + ByDrowning: " has been drowned to elimination." + ByExplosion: " has been blessed blasted for elimination." + ByCreeper: " has been blasted blessed by a Creeper for elimination." + BySuicide: " has lost will to live and gave up into elimination." + ByVoid: " fell into infinite void of elimination D:" + ByLightning: "Lord Zeus''s wrath has declared ''s elimination." + ByStarvation: " has starved to elimination, rough times D:" + ByPoison: " chose wrong pill and got eliminated." + ByMagic: "The Witch has cursed to elimination." + ByWither: " were withered away into the void of elimination." + ByFallingBlock: "Ya''ll know what's diffrence between Newton and ? one of them wasn''t eliminated by a falling entity xD" + ByThorns: "''s attacks were reppeled towards them, resulting elimination." + ByDragonBreath: "Goddamnit, the Dragon needs to brush regularly, it''s breath eliminated ." + ByKineticEnergy: " got a good physics lecture on how kinetic energy is converted into potential energy, sadly they got eliminated midst demonstration." + ByMagmaBlock: " discovered the floor is lavamagma, instant elimination HAH!" + ByCramming: " tried catching a Mumbai local, thus, eliminated." + ByFreeze: " freezed to elimination." + Other: " got eliminated." + + ConfigLoadError: "Error(s) occured while loading config.yml" + HeartConfigLoadError: "Error(s) occured while loading hearts.yml" + DatabaseLoadError: "Error(s) occured while connecting to database, blame Infinity#1392 :p" + ProfilesLoadError: "Error(s) occured while loading profiles, blame Infinity#1392 :p" + NotEnoughHearts: "You don't have enough hearts to withdraw." + + DisabledWorld: + Heart-Craft: "You''re not allowed to craft hearts in this realm." + Heart-Withdraw: "You''re not allowed to withdraw hearts in this realm." + Heart-Drops: + Player-Kill: + Killer: "You can't steal lives in this realm." + Victim: "You won't loose lives in this realm." + Other: "You won't loose lives in this realm." + Heart-Consume: "You''re not allowed to consume hearts in this realm." - ConfigLoadError: Error(s) occured while loading config.yml - HeartConfigLoadError: Error(s) occured while loading hearts.yml - DatabaseLoadError: Error(s) occured while connecting to database, blame Infinity#1392 :p - ProfilesLoadError: Error(s) occured while loading profiles, blame Infinity#1392 :p - NotEnoughHearts: You don't have enough hearts to withdraw. Sounds: - Error: entity.villager.ambient - Success: block.bell.use - HeartWithdraw: block.anvil.use \ No newline at end of file + Error: 'entity.villager.ambient' + Success: 'block.bell.use' + HeartWithdraw: 'block.anvil.use' \ No newline at end of file From b8b7c9ff45d48e2427a63aea20a7c241458ae154 Mon Sep 17 00:00:00 2001 From: RONiN <69498033+RealRONiN@users.noreply.github.com> Date: Fri, 22 Jul 2022 17:02:18 +0530 Subject: [PATCH 2/6] feat: disabled world feature --- .../lifesteal/commands/Withdraw.java | 39 +++++++++++------- .../listeners/HeartConsumeListener.java | 27 +++++++----- .../listeners/HeartCraftListener.java | 30 ++++++++++---- .../listeners/PlayerClickListener.java | 28 ++++++++----- .../listeners/PlayerKillListener.java | 41 +++++++++++++------ 5 files changed, 110 insertions(+), 55 deletions(-) diff --git a/src/main/java/in/arcadelabs/lifesteal/commands/Withdraw.java b/src/main/java/in/arcadelabs/lifesteal/commands/Withdraw.java index cd1bb91..840c2ab 100644 --- a/src/main/java/in/arcadelabs/lifesteal/commands/Withdraw.java +++ b/src/main/java/in/arcadelabs/lifesteal/commands/Withdraw.java @@ -29,6 +29,7 @@ import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; +import java.util.List; import java.util.Map; import java.util.logging.Level; @@ -39,6 +40,7 @@ public class Withdraw extends BaseCommand { private final LifeSteal lifeSteal = LifeStealPlugin.getLifeSteal(); private HeartItemManager heartItemManager; private ItemStack replacementHeart; + private List disabledWorlds; /** * On withdraw command. @@ -49,23 +51,30 @@ public class Withdraw extends BaseCommand { @Subcommand("withdraw") public void onWithdraw(final CommandSender sender, final int hearts) { final Player player = (Player) sender; - if (hearts * 2 >= lifeSteal.getUtils().getPlayerBaseHealth(player)) { - lifeSteal.getMessenger().sendMessage(player, "Chutiye, aukat hai tera itna?"); - } else { - lifeSteal.getUtils().setPlayerBaseHealth(player, lifeSteal.getUtils().getPlayerBaseHealth(player) - hearts * 2); - heartItemManager = new HeartItemManager(HeartItemManager.Mode.valueOf(lifeSteal.getHeartConfig().getString("Hearts.Mode.OnWithdraw"))) - .prepareIngedients() - .cookHeart(hearts * 2); - replacementHeart = heartItemManager.getHeartItem(); + if (lifeSteal.getConfig().getStringList("Disabled-Worlds.Heart-Withdraw").size() != 0) { + disabledWorlds = lifeSteal.getConfig().getStringList("Disabled-Worlds.Heart-Withdraw"); + } + if (!(disabledWorlds.contains(player.getWorld().toString().toLowerCase()))) { + if (hearts * 2 >= lifeSteal.getUtils().getPlayerBaseHealth(player)) { + lifeSteal.getMessenger().sendMessage(player, "Chutiye, aukat hai tera itna?"); + } else { + lifeSteal.getUtils().setPlayerBaseHealth(player, lifeSteal.getUtils().getPlayerBaseHealth(player) - hearts * 2); + heartItemManager = new HeartItemManager(HeartItemManager.Mode.valueOf(lifeSteal.getHeartConfig().getString("Hearts.Mode.OnWithdraw"))) + .prepareIngedients() + .cookHeart(hearts * 2); + replacementHeart = heartItemManager.getHeartItem(); - final Map items = player.getInventory().addItem(replacementHeart); - for (final Map.Entry leftovers : items.entrySet()) { - player.getWorld().dropItemNaturally(player.getLocation(), leftovers.getValue()); + final Map items = player.getInventory().addItem(replacementHeart); + for (final Map.Entry leftovers : items.entrySet()) { + player.getWorld().dropItemNaturally(player.getLocation(), leftovers.getValue()); + } + lifeSteal.getUtils().spawnParticles(player, "soul"); + lifeSteal.getInteraction().retuurn(Level.FINE, + lifeSteal.getUtils().formatString(lifeSteal.getI18n().getKey("Messages.HeartWithdraw"), "hearts", hearts), player, + lifeSteal.getI18n().getKey("Sounds.HeartWithdraw")); } - lifeSteal.getUtils().spawnParticles(player, "soul"); - lifeSteal.getInteraction().retuurn(Level.FINE, - lifeSteal.getUtils().formatString(lifeSteal.getI18n().getKey("Messages.HeartWithdraw"), "hearts", hearts), player, - lifeSteal.getI18n().getKey("Sounds.HeartWithdraw")); + } else { + lifeSteal.getMessenger().sendMessage(player, lifeSteal.getI18n().getKey("Messages.DisabledWorld.Heart-Withdraw")); } } } \ No newline at end of file diff --git a/src/main/java/in/arcadelabs/lifesteal/listeners/HeartConsumeListener.java b/src/main/java/in/arcadelabs/lifesteal/listeners/HeartConsumeListener.java index ee32192..5631f58 100644 --- a/src/main/java/in/arcadelabs/lifesteal/listeners/HeartConsumeListener.java +++ b/src/main/java/in/arcadelabs/lifesteal/listeners/HeartConsumeListener.java @@ -20,7 +20,9 @@ import in.arcadelabs.lifesteal.LifeSteal; import in.arcadelabs.lifesteal.LifeStealPlugin; +import org.bukkit.Bukkit; import org.bukkit.NamespacedKey; +import org.bukkit.attribute.Attribute; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; @@ -36,6 +38,7 @@ public class HeartConsumeListener implements Listener { private final LifeSteal lifeSteal = LifeStealPlugin.getLifeSteal(); private final LifeStealPlugin instance = LifeStealPlugin.getInstance(); + private List disabledWorlds; @EventHandler public void onPlayerEat(final PlayerItemConsumeEvent event) { @@ -47,16 +50,20 @@ public void onPlayerEat(final PlayerItemConsumeEvent event) { if (!(heartMeta != null && heartMeta.getPersistentDataContainer() .has(new NamespacedKey(instance, "lifesteal_heart_item"), PersistentDataType.STRING))) return; - final double healthPoints = Objects.requireNonNull(heartMeta.getPersistentDataContainer().get - (new NamespacedKey(instance, "lifesteal_heart_healthpoints"), PersistentDataType.DOUBLE)); - final String type = heartMeta.getPersistentDataContainer().get - (new NamespacedKey(instance, "lifesteal_heart_itemtype"), PersistentDataType.STRING); - final String index = heartMeta.getPersistentDataContainer().get - (new NamespacedKey(instance, "lifesteal_heart_itemindex"), PersistentDataType.STRING); - final String consumeSound = Objects.requireNonNull(heartMeta.getPersistentDataContainer().get - (new NamespacedKey(instance, "lifesteal_heart_consumesound"), PersistentDataType.STRING)); - final List consumeMessages = lifeSteal.getHeartConfig().getStringList - ("Hearts.Types." + type + "." + index + ".Properties.ConsumeMessage"); + if (lifeSteal.getConfig().getStringList("Disabled-Worlds.Heart-Consume").size() != 0) { + disabledWorlds = lifeSteal.getConfig().getStringList("Disabled-Worlds.Heart-Consume"); + } + if (!(disabledWorlds.contains(player.getWorld().toString().toLowerCase()))) { + final double healthPoints = Objects.requireNonNull(heartMeta.getPersistentDataContainer().get + (new NamespacedKey(instance, "lifesteal_heart_healthpoints"), PersistentDataType.DOUBLE)); + final String type = heartMeta.getPersistentDataContainer().get + (new NamespacedKey(instance, "lifesteal_heart_itemtype"), PersistentDataType.STRING); + final String index = heartMeta.getPersistentDataContainer().get + (new NamespacedKey(instance, "lifesteal_heart_itemindex"), PersistentDataType.STRING); + final String consumeSound = Objects.requireNonNull(heartMeta.getPersistentDataContainer().get + (new NamespacedKey(instance, "lifesteal_heart_consumesound"), PersistentDataType.STRING)); + final List consumeMessages = lifeSteal.getHeartConfig().getStringList + ("Hearts.Types." + type + "." + index + ".Properties.ConsumeMessage"); lifeSteal.getUtils().setPlayerBaseHealth(player, lifeSteal.getUtils().getPlayerBaseHealth(player) + healthPoints); diff --git a/src/main/java/in/arcadelabs/lifesteal/listeners/HeartCraftListener.java b/src/main/java/in/arcadelabs/lifesteal/listeners/HeartCraftListener.java index e68bf0c..c4c93e5 100644 --- a/src/main/java/in/arcadelabs/lifesteal/listeners/HeartCraftListener.java +++ b/src/main/java/in/arcadelabs/lifesteal/listeners/HeartCraftListener.java @@ -18,29 +18,45 @@ package in.arcadelabs.lifesteal.listeners; +import in.arcadelabs.lifesteal.LifeSteal; import in.arcadelabs.lifesteal.LifeStealPlugin; import in.arcadelabs.lifesteal.hearts.HeartItemManager; +import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; import org.bukkit.event.inventory.CraftItemEvent; import org.bukkit.inventory.ItemStack; +import java.util.List; import java.util.Objects; public class HeartCraftListener implements Listener { + + private final LifeSteal lifeSteal = LifeStealPlugin.getLifeSteal(); + private final LifeStealPlugin instance = LifeStealPlugin.getInstance(); private HeartItemManager heartItemManager; private ItemStack replacementHeart; + private List disabledWorlds; @EventHandler(priority = EventPriority.HIGHEST) public void onCraftEvent(final CraftItemEvent event) { if (!(Objects.equals(event.getRecipe().getResult(), LifeStealPlugin.getLifeSteal().getPlaceholderHeart()))) return; - if (event.isShiftClick()) event.setCancelled(true); - heartItemManager = new HeartItemManager(HeartItemManager.Mode.valueOf(LifeStealPlugin.getLifeSteal() - .getHeartConfig().getString("Hearts.Mode.OnCraft"))) - .prepareIngedients() - .cookHeart(); - replacementHeart = heartItemManager.getHeartItem(); - event.getInventory().setResult(replacementHeart); + Player player = event.getWhoClicked().getKiller(); + if (lifeSteal.getConfig().getStringList("Disabled-Worlds.Heart-Craft").size() != 0) { + disabledWorlds = lifeSteal.getConfig().getStringList("Disabled-Worlds.Heart-Craft"); + } + if (!(disabledWorlds.contains(player.getWorld().toString().toLowerCase()))) { + if (event.isShiftClick()) event.setCancelled(true); + heartItemManager = new HeartItemManager(HeartItemManager.Mode.valueOf(LifeStealPlugin.getLifeSteal() + .getHeartConfig().getString("Hearts.Mode.OnCraft"))) + .prepareIngedients() + .cookHeart(); + replacementHeart = heartItemManager.getHeartItem(); + event.getInventory().setResult(replacementHeart); + } else { + event.setCancelled(true); + lifeSteal.getMessenger().sendMessage(player, lifeSteal.getI18n().getKey("Messages.DisabledWorld.Heart-Craft")); + } } } \ No newline at end of file diff --git a/src/main/java/in/arcadelabs/lifesteal/listeners/PlayerClickListener.java b/src/main/java/in/arcadelabs/lifesteal/listeners/PlayerClickListener.java index c752611..c485f68 100644 --- a/src/main/java/in/arcadelabs/lifesteal/listeners/PlayerClickListener.java +++ b/src/main/java/in/arcadelabs/lifesteal/listeners/PlayerClickListener.java @@ -20,7 +20,9 @@ import in.arcadelabs.lifesteal.LifeSteal; import in.arcadelabs.lifesteal.LifeStealPlugin; +import org.bukkit.Bukkit; import org.bukkit.NamespacedKey; +import org.bukkit.attribute.Attribute; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; @@ -37,6 +39,7 @@ public class PlayerClickListener implements Listener { private final LifeSteal lifeSteal = LifeStealPlugin.getLifeSteal(); private final LifeStealPlugin instance = LifeStealPlugin.getInstance(); + private List disabledWorlds; @EventHandler public void onPlayerClick(final PlayerInteractEvent event) { @@ -52,17 +55,20 @@ public void onPlayerClick(final PlayerInteractEvent event) { if (player.getFoodLevel() == 20) player.setFoodLevel(19); instance.getServer().getScheduler().scheduleSyncDelayedTask(instance, () -> player.setFoodLevel(20), 1L); } else { - - final double healthPoints = Objects.requireNonNull(heartMeta.getPersistentDataContainer().get - (new NamespacedKey(instance, "lifesteal_heart_healthpoints"), PersistentDataType.DOUBLE)); - final String type = heartMeta.getPersistentDataContainer().get - (new NamespacedKey(instance, "lifesteal_heart_itemtype"), PersistentDataType.STRING); - final String index = heartMeta.getPersistentDataContainer().get - (new NamespacedKey(instance, "lifesteal_heart_itemindex"), PersistentDataType.STRING); - final String consumeSound = Objects.requireNonNull(heartMeta.getPersistentDataContainer().get - (new NamespacedKey(instance, "lifesteal_heart_consumesound"), PersistentDataType.STRING)); - final List consumeMessages = lifeSteal.getHeartConfig().getStringList - ("Hearts.Types." + type + "." + index + ".Properties.ConsumeMessage"); + if (lifeSteal.getConfig().getStringList("Disabled-Worlds.Heart-Consume").size() != 0) { + disabledWorlds = lifeSteal.getConfig().getStringList("Disabled-Worlds.Heart-Consume"); + } + if (!(disabledWorlds.contains(player.getWorld().toString().toLowerCase()))) { + final double healthPoints = Objects.requireNonNull(heartMeta.getPersistentDataContainer().get + (new NamespacedKey(instance, "lifesteal_heart_healthpoints"), PersistentDataType.DOUBLE)); + final String type = heartMeta.getPersistentDataContainer().get + (new NamespacedKey(instance, "lifesteal_heart_itemtype"), PersistentDataType.STRING); + final String index = heartMeta.getPersistentDataContainer().get + (new NamespacedKey(instance, "lifesteal_heart_itemindex"), PersistentDataType.STRING); + final String consumeSound = Objects.requireNonNull(heartMeta.getPersistentDataContainer().get + (new NamespacedKey(instance, "lifesteal_heart_consumesound"), PersistentDataType.STRING)); + final List consumeMessages = lifeSteal.getHeartConfig().getStringList + ("Hearts.Types." + type + "." + index + ".Properties.ConsumeMessage"); lifeSteal.getUtils().setPlayerBaseHealth(player, lifeSteal.getUtils().getPlayerBaseHealth(player) diff --git a/src/main/java/in/arcadelabs/lifesteal/listeners/PlayerKillListener.java b/src/main/java/in/arcadelabs/lifesteal/listeners/PlayerKillListener.java index 93ea51b..d21f558 100644 --- a/src/main/java/in/arcadelabs/lifesteal/listeners/PlayerKillListener.java +++ b/src/main/java/in/arcadelabs/lifesteal/listeners/PlayerKillListener.java @@ -29,6 +29,7 @@ import org.bukkit.inventory.ItemStack; import java.sql.SQLException; +import java.util.List; import java.util.logging.Level; public class PlayerKillListener implements Listener { @@ -36,6 +37,7 @@ public class PlayerKillListener implements Listener { private final LifeSteal lifeSteal = LifeStealPlugin.getLifeSteal(); private HeartItemManager heartItemManager; private ItemStack replacementHeart; + private List disabledWorlds, disabledWorldsNatural; @EventHandler public void onPlayerKilled(final PlayerDeathEvent event) { @@ -52,20 +54,35 @@ public void onPlayerKilled(final PlayerDeathEvent event) { lifeSteal.getUtils().handleElimination(victim); } else { if (victim.getKiller() == null) { - heartItemManager = new HeartItemManager(HeartItemManager.Mode.valueOf(lifeSteal.getHeartConfig().getString("Hearts.Mode.OnDeath"))) - .prepareIngedients() - .cookHeart(); - replacementHeart = heartItemManager.getHeartItem(); - lifeSteal.getUtils().setPlayerBaseHealth(victim, lifeSteal.getUtils().getPlayerBaseHealth(victim) - lostHearts); - try { - Profile victimProfile = lifeSteal.getProfileManager().getProfile(victim.getUniqueId()); - victimProfile.setLostHearts(victimProfile.getLostHearts() - 1); - } catch (SQLException e) { - lifeSteal.getInstance().getLogger().log(Level.WARNING, e.toString()); + if (lifeSteal.getConfig().getStringList("Disabled-Worlds.Heart-Drops.Other").size() != 0) { + disabledWorlds = lifeSteal.getConfig().getStringList("Disabled-Worlds.Heart-Drops.Other"); + } + if (!(disabledWorlds.contains(victim.getWorld().toString().toLowerCase()))) { + heartItemManager = new HeartItemManager(HeartItemManager.Mode.valueOf(lifeSteal.getHeartConfig().getString("Hearts.Mode.OnDeath"))) + .prepareIngedients() + .cookHeart(); + replacementHeart = heartItemManager.getHeartItem(); + lifeSteal.getUtils().setPlayerBaseHealth(victim, lifeSteal.getUtils().getPlayerBaseHealth(victim) - lostHearts); + try { + Profile victimProfile = lifeSteal.getProfileManager().getProfile(victim.getUniqueId()); + victimProfile.setLostHearts(victimProfile.getLostHearts() - 1); + } catch (SQLException e) { + lifeSteal.getInstance().getLogger().log(Level.WARNING, e.toString()); + } + victim.getWorld().dropItemNaturally(victim.getLocation(), replacementHeart); + } else { + lifeSteal.getMessenger().sendMessage(victim, lifeSteal.getI18n().getKey("Messages.DisabledWorld.Heart-Drops.Other")); } - victim.getWorld().dropItemNaturally(victim.getLocation(), replacementHeart); } else { - lifeSteal.getUtils().transferHealth(victim, victim.getKiller()); + if (lifeSteal.getConfig().getStringList("Disabled-Worlds.Heart-Drops.Player-Kill").size() != 0) { + disabledWorldsNatural = lifeSteal.getConfig().getStringList("Disabled-Worlds.Heart-Drops.Player-Kill"); + } + if (!(disabledWorldsNatural.contains(victim.getWorld().toString().toLowerCase()))) { + lifeSteal.getUtils().transferHealth(victim, victim.getKiller()); + } else { + lifeSteal.getMessenger().sendMessage(victim.getKiller(), lifeSteal.getI18n().getKey("Messages.DisabledWorld.Heart-Drops.Player-Kill.Killer")); + lifeSteal.getMessenger().sendMessage(victim, lifeSteal.getI18n().getKey("Messages.DisabledWorld.Heart-Drops.Player-Kill.Victim")); + } } } } From 9c9961d14028f108940b350055384edf55e9aa1e Mon Sep 17 00:00:00 2001 From: RONiN <69498033+RealRONiN@users.noreply.github.com> Date: Fri, 22 Jul 2022 17:03:57 +0530 Subject: [PATCH 3/6] fix: fixed health out of bounds error --- .../listeners/HeartConsumeListener.java | 17 +++++++++++----- .../listeners/PlayerClickListener.java | 20 ++++++++++++------- 2 files changed, 25 insertions(+), 12 deletions(-) diff --git a/src/main/java/in/arcadelabs/lifesteal/listeners/HeartConsumeListener.java b/src/main/java/in/arcadelabs/lifesteal/listeners/HeartConsumeListener.java index 5631f58..096622b 100644 --- a/src/main/java/in/arcadelabs/lifesteal/listeners/HeartConsumeListener.java +++ b/src/main/java/in/arcadelabs/lifesteal/listeners/HeartConsumeListener.java @@ -65,10 +65,17 @@ public void onPlayerEat(final PlayerItemConsumeEvent event) { final List consumeMessages = lifeSteal.getHeartConfig().getStringList ("Hearts.Types." + type + "." + index + ".Properties.ConsumeMessage"); - lifeSteal.getUtils().setPlayerBaseHealth(player, lifeSteal.getUtils().getPlayerBaseHealth(player) - + healthPoints); - player.setHealth(player.getHealth() + healthPoints); - lifeSteal.getUtils().giveHeartEffects(player, heartMeta, instance); - lifeSteal.getInteraction().retuurn(Level.INFO, consumeMessages, player, consumeSound); + lifeSteal.getUtils().setPlayerBaseHealth(player, lifeSteal.getUtils().getPlayerBaseHealth(player) + + healthPoints); + lifeSteal.getUtils().giveHeartEffects(player, heartMeta, instance); + lifeSteal.getInteraction().retuurn(Level.INFO, consumeMessages, player, consumeSound); + + Bukkit.getScheduler().scheduleSyncDelayedTask(instance, () -> + player.setHealth(Math.min(player.getHealth() + + healthPoints, player.getAttribute(Attribute.GENERIC_MAX_HEALTH).getValue())), 20L); + } else { + event.setCancelled(true); + lifeSteal.getMessenger().sendMessage(player, lifeSteal.getI18n().getKey("Messages.DisabledWorld.Heart-Consume")); + } } } \ No newline at end of file diff --git a/src/main/java/in/arcadelabs/lifesteal/listeners/PlayerClickListener.java b/src/main/java/in/arcadelabs/lifesteal/listeners/PlayerClickListener.java index c485f68..bd05601 100644 --- a/src/main/java/in/arcadelabs/lifesteal/listeners/PlayerClickListener.java +++ b/src/main/java/in/arcadelabs/lifesteal/listeners/PlayerClickListener.java @@ -70,14 +70,20 @@ public void onPlayerClick(final PlayerInteractEvent event) { final List consumeMessages = lifeSteal.getHeartConfig().getStringList ("Hearts.Types." + type + "." + index + ".Properties.ConsumeMessage"); + lifeSteal.getUtils().setPlayerBaseHealth(player, lifeSteal.getUtils().getPlayerBaseHealth(player) + + healthPoints); + player.getInventory().getItemInMainHand().setAmount(player.getInventory().getItemInMainHand().getAmount() - 1); + lifeSteal.getUtils().spawnParticles(player, "heart"); + lifeSteal.getUtils().giveHeartEffects(player, heartMeta, instance); + lifeSteal.getInteraction().retuurn(Level.INFO, consumeMessages, player, consumeSound); - lifeSteal.getUtils().setPlayerBaseHealth(player, lifeSteal.getUtils().getPlayerBaseHealth(player) - + healthPoints); - player.setHealth(player.getHealth() + healthPoints); - player.getInventory().getItemInMainHand().setAmount(player.getInventory().getItemInMainHand().getAmount() - 1); - lifeSteal.getUtils().spawnParticles(player, "heart"); - lifeSteal.getUtils().giveHeartEffects(player, heartMeta, instance); - lifeSteal.getInteraction().retuurn(Level.INFO, consumeMessages, player, consumeSound); + Bukkit.getScheduler().scheduleSyncDelayedTask(instance, () -> + player.setHealth(Math.min(player.getHealth() + + healthPoints, player.getAttribute(Attribute.GENERIC_MAX_HEALTH).getValue())), 20L); + } else { + event.setCancelled(true); + lifeSteal.getMessenger().sendMessage(player, lifeSteal.getI18n().getKey("Messages.DisabledWorld.Heart-Consume")); + } } } } \ No newline at end of file From 68ac1ade024491accc3fa45f36a21f18a40e42c4 Mon Sep 17 00:00:00 2001 From: RONiN <69498033+RealRONiN@users.noreply.github.com> Date: Fri, 22 Jul 2022 17:04:27 +0530 Subject: [PATCH 4/6] build: bumped version to 1.3 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index ab1e249..be3d091 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ in.arcadelabs LifeSteal - 1.2 + 1.3 jar LifeSteal From 5f7aa3fe99ef3e1bf51c56d74c9e7de36ca654a6 Mon Sep 17 00:00:00 2001 From: RONiN <69498033+RealRONiN@users.noreply.github.com> Date: Fri, 22 Jul 2022 17:06:54 +0530 Subject: [PATCH 5/6] docs: Updated readme --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 13ac221..18cbba7 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ Lifesteal is a survival gamemode concept made by some MCYT content creators, whe Original LifeSteal SMP : https://twitter.com/TheLifeStealSMP ## Features, -![Progress](https://progress-bar.dev/40/?title=done&width=220&color=f72585&suffix=%%20almost%20there...) +![Progress](https://progress-bar.dev/50/?title=done&width=220&color=f72585&suffix=%%20almost%20there...) - [x] HEX support! gradients etc, it all works! use [Web UI](https://webui.adventure.kyori.net) to edit the messages, and yes, this is the most important feature, I don't care your players spent diamonds and wither stars to craft an heart that doesn't work as long as it shows the errors in gradients. - [x] Customizable heart recipe. - [x] Blessed, normal and cursed heart types. @@ -27,6 +27,7 @@ Original LifeSteal SMP : https://twitter.com/TheLifeStealSMP - [x] Milk cures negetive effects can be disabled. - [x] Hearts can have custom texture model ID which resource packs will use to replace the textures. - [x] 100% Customizable messages and sounds. +- [x] Very configurable per world feature toggle. - [ ] Heart consume animations and particle effects (work in progress, don't expect proper functionality.) ![GitHub labels](https://img.shields.io/github/labels/arcadelabs/LifeSteal/WIP) - [ ] Profile system (statistics etc.) ![GitHub labels](https://img.shields.io/github/labels/arcadelabs/LifeSteal/WIP) - [ ] MySQL and SQLite database support. ![GitHub labels](https://img.shields.io/github/labels/arcadelabs/LifeSteal/WIP) From b0d1a58276dd93d5340987af1b9f67a039ea3a9d Mon Sep 17 00:00:00 2001 From: RONiN <69498033+RealRONiN@users.noreply.github.com> Date: Fri, 22 Jul 2022 17:17:39 +0530 Subject: [PATCH 6/6] chore: codefactor's a bitch --- .../arcadelabs/lifesteal/utils/LSUtils.java | 102 +++++------------- src/main/resources/language.yml | 2 - 2 files changed, 27 insertions(+), 77 deletions(-) diff --git a/src/main/java/in/arcadelabs/lifesteal/utils/LSUtils.java b/src/main/java/in/arcadelabs/lifesteal/utils/LSUtils.java index 4601530..f2360c6 100644 --- a/src/main/java/in/arcadelabs/lifesteal/utils/LSUtils.java +++ b/src/main/java/in/arcadelabs/lifesteal/utils/LSUtils.java @@ -251,82 +251,34 @@ public void handleElimination(final Player player) { } public String getEliminationMessage(final EntityDamageEvent.DamageCause damageCause) { + final String tt; switch (damageCause) { - case CONTACT -> { - return "Messages.Elimination.ByDamagingBlocks"; - } - case ENTITY_ATTACK, ENTITY_SWEEP_ATTACK -> { - return "Messages.Elimination.ByMob"; - } - case PROJECTILE -> { - return "Messages.Elimination.ByProjectile"; - } - case SUFFOCATION -> { - return "Messages.Elimination.BySuffocation"; - } - case FALL -> { - return "Messages.Elimination.ByFallDamage"; - } - case FIRE, FIRE_TICK -> { - return "Messages.Elimination.ByBurn"; - } - case LAVA -> { - return "Messages.Elimination.ByLava"; - } - case DROWNING -> { - return "Messages.Elimination.ByDrowning"; - } - case BLOCK_EXPLOSION -> { - return "Messages.Elimination.ByExplosion"; - } - case ENTITY_EXPLOSION -> { - return "Messages.Elimination.ByCreeper"; - } - case SUICIDE -> { - return "Messages.Elimination.BySuicide"; - } - case VOID -> { - return "Messages.Elimination.ByVoid"; - } - case LIGHTNING -> { - return "Messages.Elimination.ByLightning"; - } - case STARVATION -> { - return "Messages.Elimination.ByStarvation"; - } - case POISON -> { - return "Messages.Elimination.ByPoison"; - } - case MAGIC -> { - return "Messages.Elimination.ByMagic"; - } - case WITHER -> { - return "Messages.Elimination.ByWither"; - } - case FALLING_BLOCK -> { - return "Messages.Elimination.ByFallingBlock"; - } - case THORNS -> { - return "Messages.Elimination.ByThorns"; - } - case DRAGON_BREATH -> { - return "Messages.Elimination.ByDragonBreath"; - } - case FLY_INTO_WALL -> { - return "Messages.Elimination.ByKineticEnergy"; - } - case HOT_FLOOR -> { - return "Messages.Elimination.ByMagmaBlock"; - } - case CRAMMING -> { - return "Messages.Elimination.ByCramming"; - } - case FREEZE -> { - return "Messages.Elimination.ByFreeze"; - } - default -> { - return "Messages.Elimination.Other"; - } + case CONTACT -> tt = "Messages.Elimination.ByDamagingBlocks"; + case ENTITY_ATTACK, ENTITY_SWEEP_ATTACK -> tt = "Messages.Elimination.ByMob"; + case PROJECTILE -> tt = "Messages.Elimination.ByProjectile"; + case SUFFOCATION -> tt = "Messages.Elimination.BySuffocation"; + case FALL -> tt = "Messages.Elimination.ByFallDamage"; + case FIRE, FIRE_TICK -> tt = "Messages.Elimination.ByBurn"; + case LAVA -> tt = "Messages.Elimination.ByLava"; + case DROWNING -> tt = "Messages.Elimination.ByDrowning"; + case BLOCK_EXPLOSION -> tt = "Messages.Elimination.ByExplosion"; + case ENTITY_EXPLOSION -> tt = "Messages.Elimination.ByCreeper"; + case SUICIDE -> tt = "Messages.Elimination.BySuicide"; + case VOID -> tt = "Messages.Elimination.ByVoid"; + case LIGHTNING -> tt = "Messages.Elimination.ByLightning"; + case STARVATION -> tt = "Messages.Elimination.ByStarvation"; + case POISON -> tt = "Messages.Elimination.ByPoison"; + case MAGIC -> tt = "Messages.Elimination.ByMagic"; + case WITHER -> tt = "Messages.Elimination.ByWither"; + case FALLING_BLOCK -> tt = "Messages.Elimination.ByFallingBlock"; + case THORNS -> tt = "Messages.Elimination.ByThorns"; + case DRAGON_BREATH -> tt = "Messages.Elimination.ByDragonBreath"; + case FLY_INTO_WALL -> tt = "Messages.Elimination.ByKineticEnergy"; + case HOT_FLOOR -> tt = "Messages.Elimination.ByMagmaBlock"; + case CRAMMING -> tt = "Messages.Elimination.ByCramming"; + case FREEZE -> tt = "Messages.Elimination.ByFreeze"; + default -> tt = "Messages.Elimination.Other"; } + return tt; } } \ No newline at end of file diff --git a/src/main/resources/language.yml b/src/main/resources/language.yml index c53a26e..e8fa3ff 100644 --- a/src/main/resources/language.yml +++ b/src/main/resources/language.yml @@ -44,7 +44,6 @@ Messages: DatabaseLoadError: "Error(s) occured while connecting to database, blame Infinity#1392 :p" ProfilesLoadError: "Error(s) occured while loading profiles, blame Infinity#1392 :p" NotEnoughHearts: "You don't have enough hearts to withdraw." - DisabledWorld: Heart-Craft: "You''re not allowed to craft hearts in this realm." Heart-Withdraw: "You''re not allowed to withdraw hearts in this realm." @@ -55,7 +54,6 @@ Messages: Other: "You won't loose lives in this realm." Heart-Consume: "You''re not allowed to consume hearts in this realm." - Sounds: Error: 'entity.villager.ambient' Success: 'block.bell.use'