Skip to content

Commit

Permalink
- moved to operating on persistent item metadata instead of reading l…
Browse files Browse the repository at this point in the history
…ore strings from items
  • Loading branch information
Grzybol committed Jul 16, 2024
1 parent da22fdd commit 652167c
Show file tree
Hide file tree
Showing 5 changed files with 202 additions and 88 deletions.
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>betterbox.mine.game</groupId>
<artifactId>BetterElo</artifactId>
<version>4.6.24-SNAPSHOT</version>
<version>4.6.26-SNAPSHOT</version>
<packaging>jar</packaging>

<name>BetterElo</name>
Expand Down
87 changes: 87 additions & 0 deletions src/main/java/betterbox/mine/game/betterelo/BetterElo.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@
import net.kyori.adventure.text.Component;
import net.kyori.adventure.title.Title;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.persistence.PersistentDataContainer;
import org.bukkit.persistence.PersistentDataType;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.scheduler.BukkitRunnable;
import org.bukkit.scheduler.BukkitTask;
Expand Down Expand Up @@ -62,6 +64,7 @@ public final class BetterElo extends JavaPlugin {
//public static final Flag<StateFlag.State> NO_ELO_FLAG = new StateFlag("noElo", false);
public static StateFlag IS_ELO_ALLOWED;
private String folderPath;
private NamespacedKey mobDefenseKey,mobDamageKey,averageDamageKey;
@Override
public void onLoad() {
getLogger().info("Registering custom WorldGuard flags.");
Expand All @@ -78,6 +81,9 @@ public void onLoad() {

@Override
public void onEnable() {
this.mobDefenseKey = new NamespacedKey(this, "mob_defense");
this.mobDamageKey = new NamespacedKey(this, "mob_damage");
this.averageDamageKey = new NamespacedKey(this, "average_damage");
instance = this;
createPluginFolders();
createExampleDropTablesFiles();
Expand Down Expand Up @@ -827,5 +833,86 @@ public void run() {
}
}.runTaskTimer(this, 0L, 20L * 10); // Uruchom co 1 minutę (20 ticków = 1 sekunda)
}
public void addMobDefenseAttribute(ItemStack item, int value){
pluginLogger.log(PluginLogger.LogLevel.DEBUG, "BetterElo.addMobDefenseAttribute called with value: "+value);
if (item != null && item.hasItemMeta()) {
ItemMeta meta = item.getItemMeta();
PersistentDataContainer dataContainer = meta.getPersistentDataContainer();
dataContainer.set(mobDefenseKey, PersistentDataType.INTEGER, value);
item.setItemMeta(meta);
pluginLogger.log(PluginLogger.LogLevel.DEBUG, "BetterElo.addMobDefenseAttribute value "+value+" was added to the item "+item);
}else{
pluginLogger.log(PluginLogger.LogLevel.WARNING, "BetterElo.addMobDefenseAttribute null item!"+item);
}
}
public void addMobDamageAttribute(ItemStack item, String value){
pluginLogger.log(PluginLogger.LogLevel.DEBUG, "BetterElo.addMobDamageAttribute called with value: "+value);
if (item != null && item.hasItemMeta()) {
ItemMeta meta = item.getItemMeta();
PersistentDataContainer dataContainer = meta.getPersistentDataContainer();
dataContainer.set(mobDamageKey, PersistentDataType.STRING, value);
item.setItemMeta(meta);
pluginLogger.log(PluginLogger.LogLevel.DEBUG, "BetterElo.addMobDamageAttribute value "+value+" was added to the item "+item);
}else{
pluginLogger.log(PluginLogger.LogLevel.WARNING, "BetterElo.addMobDamageAttribute null item!"+item);
}
}
public void addAverageDamageAttribute(ItemStack item, int value){
pluginLogger.log(PluginLogger.LogLevel.DEBUG, "BetterElo.addAverageDamageAttribute called with value: "+value);
if (item != null && item.hasItemMeta()) {
ItemMeta meta = item.getItemMeta();
PersistentDataContainer dataContainer = meta.getPersistentDataContainer();
dataContainer.set(averageDamageKey, PersistentDataType.INTEGER, value);
item.setItemMeta(meta);
pluginLogger.log(PluginLogger.LogLevel.DEBUG, "BetterElo.addAverageDamageAttribute value "+value+" was added to the item "+item);
}else{
pluginLogger.log(PluginLogger.LogLevel.WARNING, "BetterElo.addAverageDamageAttribute null item!"+item);
}
}
public int[] getMobDamageAttribute(ItemStack item) {
if (item != null && item.hasItemMeta()) {
ItemMeta meta = item.getItemMeta();
PersistentDataContainer dataContainer = meta.getPersistentDataContainer();
if (dataContainer.has(mobDamageKey, PersistentDataType.STRING)) {
String damageRange = dataContainer.get(mobDamageKey, PersistentDataType.STRING);
String[] parts = damageRange.split("-");
int minDamage = Integer.parseInt(parts[0]);
int maxDamage = Integer.parseInt(parts[1]);
return new int[]{minDamage, maxDamage};
}
}
return new int[]{0, 0};
}
public int getMobDefenseAttribute(List<ItemStack> wornItems) {
int totalDefense = 0;

for (ItemStack item : wornItems) {
if (item != null && item.hasItemMeta()) {
ItemMeta meta = item.getItemMeta();
PersistentDataContainer dataContainer = meta.getPersistentDataContainer();
if (dataContainer.has(mobDefenseKey, PersistentDataType.INTEGER)) {
totalDefense += dataContainer.get(mobDefenseKey, PersistentDataType.INTEGER);
}
}
}

return totalDefense;
}

public int getAverageDamageAttribute(List<ItemStack> wornItems) {
int totalDamage = 0;

for (ItemStack item : wornItems) {
if (item != null && item.hasItemMeta()) {
ItemMeta meta = item.getItemMeta();
PersistentDataContainer dataContainer = meta.getPersistentDataContainer();
if (dataContainer.has(averageDamageKey, PersistentDataType.INTEGER)) {
totalDamage += dataContainer.get(averageDamageKey, PersistentDataType.INTEGER);
}
}
}

return totalDamage;
}

}
137 changes: 74 additions & 63 deletions src/main/java/betterbox/mine/game/betterelo/BetterEloCommand.java
Original file line number Diff line number Diff line change
Expand Up @@ -384,71 +384,82 @@ public boolean onCommand(CommandSender sender, Command command, String label, St
}

case 3:
if (sender.isOp()&& Objects.equals(args[0], "spawnmob")){
pluginLogger.log(PluginLogger.LogLevel.CUSTOM_MOBS,"BetterEloCommand.OnCommand calling handleCustomMobsCommands(sender)");
try{
handleCustomMobsCommands(sender, args[1], Integer.parseInt(args[2]));
}catch (Exception e){
pluginLogger.log(PluginLogger.LogLevel.ERROR,"BetterEloCommand.OnCommand spawnmob command generated exception: "+e);
}
if (sender.isOp()) {
switch (args[0]) {
case "spawnmob":
pluginLogger.log(PluginLogger.LogLevel.CUSTOM_MOBS, "BetterEloCommand.OnCommand calling handleCustomMobsCommands(sender)");
try {
handleCustomMobsCommands(sender, args[1], Integer.parseInt(args[2]));
} catch (Exception e) {
pluginLogger.log(PluginLogger.LogLevel.ERROR, "BetterEloCommand.OnCommand spawnmob command generated exception: " + e);
}
break;

}
if ((sender.hasPermission("betterelo.flamethrower") || sender.isOp()) && sender instanceof Player && Objects.equals(args[0], "flamethrower")) {
Player player = ((Player) sender).getPlayer();
assert player != null;
ItemStack itemInHand = player.getInventory().getItemInMainHand();
if (itemInHand.getType().isAir()) {
sender.sendMessage(ChatColor.GOLD + "" + ChatColor.BOLD + "[BetterElo]" + ChatColor.DARK_RED + "You must hold an item in your hand to add Antyweb lore!");
return true;
}
int radius;
int distance;
try {
// Spróbuj przekonwertować argument na liczbę
radius = Integer.parseInt(args[1]);
} catch (NumberFormatException e) {
sender.sendMessage(ChatColor.GOLD + "" + ChatColor.BOLD + "[BetterElo]" + ChatColor.DARK_RED +"Invalid radius! Please provide a number.");
return true;
}
try {
// Spróbuj przekonwertować argument na liczbę
distance = Integer.parseInt(args[2]);
} catch (NumberFormatException e) {
sender.sendMessage(ChatColor.GOLD + "" + ChatColor.BOLD + "[BetterElo]" + ChatColor.DARK_RED +"Invalid radius! Please provide a number.");
return true;
}
addFlamethrowerLore(player, itemInHand, radius, distance);
}
if (sender.isOp()&& Objects.equals(args[0], "holo")&& Objects.equals(args[1], "delete")&&args[2].equals("event")){
hologramEvent.delete();
//hologramEvent.isDeleted();
sender.sendMessage(ChatColor.GOLD + "" + ChatColor.BOLD + "[BetterElo]" + ChatColor.AQUA + "Holo for Event removed! " + hologramEvent.isDeleted());
eventHoloTask.cancel();
}
if (sender.isOp()&& Objects.equals(args[0], "startevent")){
int eventDuration = Integer.parseInt(args[1]);
String eventUnit = args[2];
pluginLogger.log(PluginLogger.LogLevel.DEBUG,"BetterEloCommand.onCommand.event called. Duration:"+args[1]+" timeUnit:"+args[2]);
betterElo.eventDuration= Integer.parseInt(args[1]);
betterElo.eventUnit=args[2];
betterElo.isEventEnabled=true;
pluginLogger.log(PluginLogger.LogLevel.DEBUG,"BetterElo: onEnable: Planowanie nagród event...");
long periodMillis =0;
if(Objects.equals(eventUnit, "h")) {
periodMillis = TimeUnit.HOURS.toMillis(eventDuration);
}else if(Objects.equals(eventUnit, "m")){
periodMillis = TimeUnit.MINUTES.toMillis(eventDuration);
}else{
pluginLogger.log(PluginLogger.LogLevel.ERROR,"BetterEloCommand.onCommand.event: eventUnit: "+eventUnit);
case "startevent":
int eventDuration;
try {
eventDuration = Integer.parseInt(args[1]);
} catch (NumberFormatException e) {
pluginLogger.log(PluginLogger.LogLevel.ERROR, "Invalid event duration: " + args[1]);
sender.sendMessage(ChatColor.GOLD + "" + ChatColor.BOLD + "[BetterElo]" + ChatColor.DARK_RED + " Invalid event duration!");
return true;
}

String eventUnit = args[2];
pluginLogger.log(PluginLogger.LogLevel.DEBUG, "BetterEloCommand.onCommand.event called. Duration:" + args[1] + " timeUnit:" + args[2]);
betterElo.eventDuration = eventDuration;
betterElo.eventUnit = eventUnit;
betterElo.isEventEnabled = true;
pluginLogger.log(PluginLogger.LogLevel.DEBUG, "BetterElo: onEnable: Planowanie nagród event...");

long periodMillis = 0;
switch (eventUnit) {
case "h":
periodMillis = TimeUnit.HOURS.toMillis(eventDuration);
break;
case "m":
periodMillis = TimeUnit.MINUTES.toMillis(eventDuration);
break;
default:
pluginLogger.log(PluginLogger.LogLevel.ERROR, "BetterEloCommand.onCommand.event: eventUnit: " + eventUnit);
sender.sendMessage(ChatColor.GOLD + "" + ChatColor.BOLD + "[BetterElo]" + ChatColor.DARK_RED + " Invalid time unit!");
return true;
}

pluginLogger.log(PluginLogger.LogLevel.DEBUG, "BetterEloCommand.onCommand.event: scheduling event rewards periodMillis:" + periodMillis);
betterElo.scheduleRewards("event", periodMillis, false);
betterElo.rewardStates.put("event", true);
betterElo.loadRewards();
pluginLogger.log(PluginLogger.LogLevel.DEBUG, "BetterEloCommand.onCommand.event: calling betterElo.updateLastScheduledTime(event)");
betterElo.updateLastScheduledTime("event");
sender.sendMessage(ChatColor.GOLD + "" + ChatColor.BOLD + "[BetterElo]" + ChatColor.AQUA + " Event started! Duration " + eventDuration + " " + eventUnit);
break;

case "setattribute":
Player player = (Player) sender;
ItemStack item = player.getInventory().getItemInMainHand();
if(item!=null&&!item.getType().equals("AIR")){
switch (args[1]){
case "mobdefense":
betterElo.addMobDefenseAttribute(item, Integer.parseInt(args[2]));
sender.sendMessage(ChatColor.GOLD + "" + ChatColor.BOLD + "[BetterElo]" + ChatColor.AQUA + " MobDefense attribute set with value "+args[2]);
break;
case "mobdamage":
betterElo.addMobDamageAttribute(item, args[2]);
sender.sendMessage(ChatColor.GOLD + "" + ChatColor.BOLD + "[BetterElo]" + ChatColor.AQUA + " mobdamage attribute set with value "+args[2]);
break;
case "averagedamage":
betterElo.addAverageDamageAttribute(item, Integer.parseInt(args[2]));
sender.sendMessage(ChatColor.GOLD + "" + ChatColor.BOLD + "[BetterElo]" + ChatColor.AQUA + " averagedamage attribute set with value "+args[2]);
break;
}
}

default:
sender.sendMessage(ChatColor.GOLD + "" + ChatColor.BOLD + "[BetterElo]" + ChatColor.DARK_RED + " You don't have permission to use that command!");
break;
}
pluginLogger.log(PluginLogger.LogLevel.DEBUG,"BetterEloCommand.onCommand.event: scheduling event rewards periodMillis:"+periodMillis);
betterElo.scheduleRewards("event", periodMillis, false);
betterElo.rewardStates.put("event", true);
betterElo.loadRewards();
pluginLogger.log(PluginLogger.LogLevel.DEBUG,"BetterEloCommand.onCommand.event: calling betterElo.updateLastScheduledTime(event)");
betterElo.updateLastScheduledTime("event");
sender.sendMessage(ChatColor.GOLD + "" + ChatColor.BOLD + "[BetterElo]" + ChatColor.AQUA + " Event started! Duration "+eventDuration+" "+eventUnit);
}else{
} else {
sender.sendMessage(ChatColor.GOLD + "" + ChatColor.BOLD + "[BetterElo]" + ChatColor.DARK_RED + " You don't have permission to use that command!");
return true;
}
Expand Down
4 changes: 4 additions & 0 deletions src/main/java/betterbox/mine/game/betterelo/CustomMobs.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.metadata.FixedMetadataValue;
import org.bukkit.metadata.MetadataValue;
import org.bukkit.persistence.PersistentDataContainer;
import org.bukkit.persistence.PersistentDataType;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.scheduler.BukkitRunnable;
import org.bukkit.scheduler.BukkitTask;
Expand All @@ -27,6 +29,7 @@

public class CustomMobs {
private Map<String, CustomMob> customMobsMap = new HashMap<>();

private final PluginLogger pluginLogger;
private final JavaPlugin plugin;
private final BetterElo betterElo;
Expand Down Expand Up @@ -627,4 +630,5 @@ public void spawnCustomMob(Location location, String mobName) {




}
Loading

0 comments on commit 652167c

Please sign in to comment.