Skip to content

Commit

Permalink
Merge pull request #21 from arcadelabs/feature/disabled-worlds
Browse files Browse the repository at this point in the history
Feature/disabled worlds
  • Loading branch information
RealRONiN authored Jul 22, 2022
2 parents 78a9a4d + b0d1a58 commit f741ad6
Show file tree
Hide file tree
Showing 10 changed files with 240 additions and 191 deletions.
3 changes: 2 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand All @@ -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)
Expand Down
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

<groupId>in.arcadelabs</groupId>
<artifactId>LifeSteal</artifactId>
<version>1.2</version>
<version>1.3</version>
<packaging>jar</packaging>

<name>LifeSteal</name>
Expand Down
39 changes: 24 additions & 15 deletions src/main/java/in/arcadelabs/lifesteal/commands/Withdraw.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand All @@ -39,6 +40,7 @@ public class Withdraw extends BaseCommand {
private final LifeSteal lifeSteal = LifeStealPlugin.getLifeSteal();
private HeartItemManager heartItemManager;
private ItemStack replacementHeart;
private List<String> disabledWorlds;

/**
* On withdraw command.
Expand All @@ -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<Integer, ItemStack> items = player.getInventory().addItem(replacementHeart);
for (final Map.Entry<Integer, ItemStack> leftovers : items.entrySet()) {
player.getWorld().dropItemNaturally(player.getLocation(), leftovers.getValue());
final Map<Integer, ItemStack> items = player.getInventory().addItem(replacementHeart);
for (final Map.Entry<Integer, ItemStack> 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"));
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -36,6 +38,7 @@ public class HeartConsumeListener implements Listener {

private final LifeSteal lifeSteal = LifeStealPlugin.getLifeSteal();
private final LifeStealPlugin instance = LifeStealPlugin.getInstance();
private List<String> disabledWorlds;

@EventHandler
public void onPlayerEat(final PlayerItemConsumeEvent event) {
Expand All @@ -47,21 +50,32 @@ 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<String> 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<String> 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"));
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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<String> 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"));
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -37,6 +39,7 @@ public class PlayerClickListener implements Listener {

private final LifeSteal lifeSteal = LifeStealPlugin.getLifeSteal();
private final LifeStealPlugin instance = LifeStealPlugin.getInstance();
private List<String> disabledWorlds;

@EventHandler
public void onPlayerClick(final PlayerInteractEvent event) {
Expand All @@ -52,26 +55,35 @@ public void onPlayerClick(final PlayerInteractEvent event) {
if (player.getFoodLevel() == 20) player.setFoodLevel(19);
instance.getServer().getScheduler().scheduleSyncDelayedTask(instance, () -> player.setFoodLevel(20), 1L);
} else {
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<String> consumeMessages = lifeSteal.getHeartConfig().getStringList
("Hearts.Types." + type + "." + index + ".Properties.ConsumeMessage");

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<String> 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"));
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -29,13 +29,15 @@
import org.bukkit.inventory.ItemStack;

import java.sql.SQLException;
import java.util.List;
import java.util.logging.Level;

public class PlayerKillListener implements Listener {

private final LifeSteal lifeSteal = LifeStealPlugin.getLifeSteal();
private HeartItemManager heartItemManager;
private ItemStack replacementHeart;
private List<String> disabledWorlds, disabledWorldsNatural;

@EventHandler
public void onPlayerKilled(final PlayerDeathEvent event) {
Expand All @@ -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"));
}
}
}
}
Expand Down
Loading

0 comments on commit f741ad6

Please sign in to comment.