From 80ec71f23604a12aac75eacdfbf7e5cc16b58a2f Mon Sep 17 00:00:00 2001 From: Brian Neumann-Fopiano Date: Fri, 28 Oct 2022 13:07:23 -0700 Subject: [PATCH 1/8] V+ --- build.gradle | 2 +- .../content/adaptation/excavation/ExcavationOmniTool.java | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index 34505b4c..be91ad92 100644 --- a/build.gradle +++ b/build.gradle @@ -23,7 +23,7 @@ plugins { id "de.undercouch.download" version "5.0.1" } -version '1.4.10-1.19.2' +version '1.4.12-1.19.2' def nmsVersion = "1.19.2" //[NMS] def apiVersion = '1.19' def specialSourceVersion = '1.11.0' //[NMS] diff --git a/src/main/java/com/volmit/adapt/content/adaptation/excavation/ExcavationOmniTool.java b/src/main/java/com/volmit/adapt/content/adaptation/excavation/ExcavationOmniTool.java index 7e4fa68a..0709cacf 100644 --- a/src/main/java/com/volmit/adapt/content/adaptation/excavation/ExcavationOmniTool.java +++ b/src/main/java/com/volmit/adapt/content/adaptation/excavation/ExcavationOmniTool.java @@ -307,7 +307,9 @@ private void itemDelegate(BlockDamageEvent e, ItemStack hand, Damageable imHand) } private boolean validateTool(ItemStack item) { - return (item.getItemMeta() != null && item.getItemMeta().getLore() != null && item.getItemMeta().getLore().get(0) != null && item.getItemMeta().getLore().get(0).contains("Leatherman")); + return (item.getItemMeta() != null + && item.getItemMeta().getLore() != null + && item.getItemMeta().getLore().toString().contains("Leatherman")); } private double getSlots(double level) { From 7731486912d656242e3b6b40fec9d1d5b13f85cc Mon Sep 17 00:00:00 2001 From: Brian Neumann-Fopiano Date: Fri, 28 Oct 2022 13:10:51 -0700 Subject: [PATCH 2/8] Correction --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index be91ad92..dc465807 100644 --- a/build.gradle +++ b/build.gradle @@ -23,7 +23,7 @@ plugins { id "de.undercouch.download" version "5.0.1" } -version '1.4.12-1.19.2' +version '1.4.11-1.19.2' def nmsVersion = "1.19.2" //[NMS] def apiVersion = '1.19' def specialSourceVersion = '1.11.0' //[NMS] From 08d2b81fff49c8315e2a8a7d612d9fb9dc27394a Mon Sep 17 00:00:00 2001 From: Brian Neumann-Fopiano Date: Fri, 28 Oct 2022 13:20:59 -0700 Subject: [PATCH 3/8] Choke --- build.gradle | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/build.gradle b/build.gradle index dc465807..75e592f6 100644 --- a/build.gradle +++ b/build.gradle @@ -288,7 +288,7 @@ task adapt(type: Copy) from ssJar into buildDir rename { String fileName -> - fileName.replace('Adapt-' + version + '-rma.jar', "Adapt-" + version + ".jar") + fileName.replace('Adapt-' + version + '-rma.jar', "Adapt.jar") } dependsOn(specialSourceRemap) } @@ -302,10 +302,10 @@ def registerCustomOutputTask(name, path) { group('development') outputs.upToDateWhen { false } dependsOn(adapt) - from(new File(buildDir, "Adapt-" + version + ".jar")) + from(new File(buildDir, "Adapt.jar")) into(file(path)) rename { String fileName -> - fileName.replace("Adapt-" + version + ".jar", "Adapt-" + version + ".jar") + fileName.replace("Adapt-" + version + ".jar", "Adapt.jar") } } } @@ -319,10 +319,10 @@ def registerCustomOutputTaskUnix(name, path) { group('development') outputs.upToDateWhen { false } dependsOn(adapt) - from(new File(buildDir, "Adapt-" + version + ".jar")) + from(new File(buildDir, "Adapt.jar")) into(file(path)) rename { String fileName -> - fileName.replace("Adapt-" + version + ".jar", "Adapt-" + version + ".jar") + fileName.replace("Adapt-" + version + ".jar", "Adapt.jar") } } } From 2aa6a54274c076ff767fd38ab4a8296b26d99e35 Mon Sep 17 00:00:00 2001 From: Brian Neumann-Fopiano Date: Fri, 28 Oct 2022 19:17:03 -0700 Subject: [PATCH 4/8] Nolonger cap skills at 100 --> 10000 --- .../com/volmit/adapt/api/xp/NewtonCurve.java | 4 +-- .../architect/ArchitectWirelessRedstone.java | 25 ++++++++++--------- 2 files changed, 15 insertions(+), 14 deletions(-) diff --git a/src/main/java/com/volmit/adapt/api/xp/NewtonCurve.java b/src/main/java/com/volmit/adapt/api/xp/NewtonCurve.java index f9bfd084..c1b8f62c 100644 --- a/src/main/java/com/volmit/adapt/api/xp/NewtonCurve.java +++ b/src/main/java/com/volmit/adapt/api/xp/NewtonCurve.java @@ -25,12 +25,12 @@ public interface NewtonCurve { default double computeLevelForXP(double xp, double maxError) { double div = 2; int iterations = 0; - double jumpSize = 100; + double jumpSize = 1000; double cursor = 0; double test; boolean last = false; - while (jumpSize > maxError && iterations < 100) { + while (jumpSize > maxError && iterations < 1000) { iterations++; test = getXPForLevel(cursor); if (test < xp) { diff --git a/src/main/java/com/volmit/adapt/content/adaptation/architect/ArchitectWirelessRedstone.java b/src/main/java/com/volmit/adapt/content/adaptation/architect/ArchitectWirelessRedstone.java index febacbcb..68f5cf75 100644 --- a/src/main/java/com/volmit/adapt/content/adaptation/architect/ArchitectWirelessRedstone.java +++ b/src/main/java/com/volmit/adapt/content/adaptation/architect/ArchitectWirelessRedstone.java @@ -68,6 +68,19 @@ public void addStats(int level, Element v) { v.addLore(C.GREEN + Localizer.dLocalize("architect", "wirelessredstone", "lore1")); } + @EventHandler + public void on(PlayerItemHeldEvent e) { + Player p = e.getPlayer(); + ItemStack hand = p.getInventory().getItemInMainHand(); + ItemStack offhand = p.getInventory().getItemInOffHand(); + + if (isBound(hand)) { + p.setCooldown(Material.REDSTONE_TORCH, 50000); + } else { + p.setCooldown(Material.REDSTONE_TORCH, 0); + } + } + @EventHandler public void on(PlayerInteractEvent e) { Player p = e.getPlayer(); @@ -171,18 +184,6 @@ public boolean isEnabled() { return getConfig().enabled; } - @EventHandler - public void on(PlayerItemHeldEvent e) { - Player p = e.getPlayer(); - ItemStack hand = p.getInventory().getItemInMainHand(); - ItemStack offhand = p.getInventory().getItemInOffHand(); - - if (isBound(hand)) { - p.setCooldown(Material.REDSTONE_TORCH, 50000); - } else { - p.setCooldown(Material.REDSTONE_TORCH, 0); - } - } @Override public void onTick() { From 18a29f1ef77fcc8c280ff8cf1ae37cf216044e83 Mon Sep 17 00:00:00 2001 From: Brian Neumann-Fopiano Date: Fri, 28 Oct 2022 21:45:23 -0700 Subject: [PATCH 5/8] Binding checks --- .../com/volmit/adapt/content/item/BoundEnderPearl.java | 7 +++++++ .../com/volmit/adapt/content/item/BoundEyeOfEnder.java | 7 +++++++ .../com/volmit/adapt/content/item/BoundRedstoneTorch.java | 7 +++++++ 3 files changed, 21 insertions(+) diff --git a/src/main/java/com/volmit/adapt/content/item/BoundEnderPearl.java b/src/main/java/com/volmit/adapt/content/item/BoundEnderPearl.java index 23149c75..15f7f1be 100644 --- a/src/main/java/com/volmit/adapt/content/item/BoundEnderPearl.java +++ b/src/main/java/com/volmit/adapt/content/item/BoundEnderPearl.java @@ -53,6 +53,13 @@ public static ItemStack withData(Block t) { return io.withData(new Data(t)); } + public static boolean isBindableItem(ItemStack t) { + if (t.getItemMeta() == null || t.getItemMeta().getLore() == null) { + return false; + } + return t.getItemMeta().getLore().contains(Localizer.dLocalize("items", "boundenderperal", "name")); + } + @Override public Material getMaterial() { return Material.ENDER_PEARL; diff --git a/src/main/java/com/volmit/adapt/content/item/BoundEyeOfEnder.java b/src/main/java/com/volmit/adapt/content/item/BoundEyeOfEnder.java index 2f598f00..a2cc736b 100644 --- a/src/main/java/com/volmit/adapt/content/item/BoundEyeOfEnder.java +++ b/src/main/java/com/volmit/adapt/content/item/BoundEyeOfEnder.java @@ -53,6 +53,13 @@ public static ItemStack withData(Location t) { return io.withData(new Data(t)); } + public static boolean isBindableItem(ItemStack t) { + if (t.getItemMeta() == null || t.getItemMeta().getLore() == null) { + return false; + } + return t.getItemMeta().getLore().contains(Localizer.dLocalize("items", "boundeyeofender", "name")); + } + @Override public Material getMaterial() { return Material.ENDER_EYE; diff --git a/src/main/java/com/volmit/adapt/content/item/BoundRedstoneTorch.java b/src/main/java/com/volmit/adapt/content/item/BoundRedstoneTorch.java index f8ffef13..06be642e 100644 --- a/src/main/java/com/volmit/adapt/content/item/BoundRedstoneTorch.java +++ b/src/main/java/com/volmit/adapt/content/item/BoundRedstoneTorch.java @@ -53,6 +53,13 @@ public static ItemStack withData(Location t) { return io.withData(new Data(t)); } + public static boolean isBindableItem(ItemStack t) { + if (t.getItemMeta() == null || t.getItemMeta().getLore() == null) { + return false; + } + return t.getItemMeta().getLore().contains(Localizer.dLocalize("items", "boundredstonetorch", "name")); + } + @Override public Material getMaterial() { return Material.REDSTONE_TORCH; From 288dc9a25d8dd03c9f0fe742957a6c3f731e4c81 Mon Sep 17 00:00:00 2001 From: Brian Neumann-Fopiano Date: Fri, 28 Oct 2022 21:56:36 -0700 Subject: [PATCH 6/8] Skill fixes --- .../adapt/api/adaptation/Adaptation.java | 4 ++ .../com/volmit/adapt/api/xp/NewtonCurve.java | 6 +- .../architect/ArchitectWirelessRedstone.java | 59 +++++++++---------- .../content/adaptation/rift/RiftAccess.java | 52 ++++++++-------- .../content/adaptation/rift/RiftGate.java | 50 ++++++++-------- .../adapt/content/item/BoundEnderPearl.java | 14 ++++- .../adapt/content/item/BoundEyeOfEnder.java | 14 ++++- .../content/item/BoundRedstoneTorch.java | 14 ++++- .../adapt/content/skill/SkillArchitect.java | 22 ++++++- .../volmit/adapt/content/skill/SkillAxes.java | 24 ++++++++ .../adapt/content/skill/SkillBrewing.java | 19 +++++- .../adapt/content/skill/SkillCrafting.java | 1 - .../adapt/content/skill/SkillEnchanting.java | 20 ++++++- .../adapt/content/skill/SkillExcavation.java | 26 +++++++- .../adapt/content/skill/SkillHunter.java | 45 +++++++++++++- .../adapt/content/skill/SkillPickaxes.java | 26 +++++++- .../adapt/content/skill/SkillRanged.java | 25 +++++++- .../adapt/content/skill/SkillStealth.java | 6 ++ .../adapt/content/skill/SkillSwords.java | 15 +++++ .../adapt/content/skill/SkillTaming.java | 23 ++++++++ .../adapt/content/skill/SkillTragOul.java | 15 +++++ 21 files changed, 376 insertions(+), 104 deletions(-) diff --git a/src/main/java/com/volmit/adapt/api/adaptation/Adaptation.java b/src/main/java/com/volmit/adapt/api/adaptation/Adaptation.java index 3e4ac272..67e182fd 100644 --- a/src/main/java/com/volmit/adapt/api/adaptation/Adaptation.java +++ b/src/main/java/com/volmit/adapt/api/adaptation/Adaptation.java @@ -187,15 +187,19 @@ private boolean hasBypass(Player p, Location l) { default boolean hasAdaptation(Player p) { try { if (!this.getSkill().isEnabled()) { + Adapt.verbose("Skill " + this.getSkill().getName() + " is disabled. Skipping adaptation " + this.getName()); this.unregister(); } if (p.getClass().getSimpleName().equals("PlayerNPC") || !p.getClass().getSimpleName().equals("CraftPlayer")) { + Adapt.verbose("Player " + p.getName() + " is not a player. Skipping adaptation " + this.getName()); return false; } if (AdaptConfig.get().blacklistedWorlds.contains(p.getWorld().getName())) { + Adapt.verbose("Player " + p.getName() + " is in a blacklisted world. Skipping adaptation " + this.getName()); return false; } if (p.getGameMode().equals(GameMode.CREATIVE) || p.getGameMode().equals(GameMode.SPECTATOR)) { + Adapt.verbose("Player " + p.getName() + " is in creative or spectator mode. Skipping adaptation " + this.getName()); return false; } if ((Bukkit.getServer().getPluginManager().getPlugin("WorldGuard") != null && Bukkit.getServer().getPluginManager().getPlugin("WorldGuard").isEnabled()) diff --git a/src/main/java/com/volmit/adapt/api/xp/NewtonCurve.java b/src/main/java/com/volmit/adapt/api/xp/NewtonCurve.java index c1b8f62c..8c10b175 100644 --- a/src/main/java/com/volmit/adapt/api/xp/NewtonCurve.java +++ b/src/main/java/com/volmit/adapt/api/xp/NewtonCurve.java @@ -25,19 +25,18 @@ public interface NewtonCurve { default double computeLevelForXP(double xp, double maxError) { double div = 2; int iterations = 0; - double jumpSize = 1000; + double jumpSize = 100; double cursor = 0; double test; boolean last = false; - while (jumpSize > maxError && iterations < 1000) { + while (jumpSize > maxError && iterations < 100) { iterations++; test = getXPForLevel(cursor); if (test < xp) { if (last) { jumpSize /= div; } - last = false; cursor += jumpSize; } else { @@ -49,7 +48,6 @@ default double computeLevelForXP(double xp, double maxError) { cursor -= jumpSize; } } - return cursor; } } diff --git a/src/main/java/com/volmit/adapt/content/adaptation/architect/ArchitectWirelessRedstone.java b/src/main/java/com/volmit/adapt/content/adaptation/architect/ArchitectWirelessRedstone.java index 68f5cf75..32634039 100644 --- a/src/main/java/com/volmit/adapt/content/adaptation/architect/ArchitectWirelessRedstone.java +++ b/src/main/java/com/volmit/adapt/content/adaptation/architect/ArchitectWirelessRedstone.java @@ -18,6 +18,7 @@ package com.volmit.adapt.content.adaptation.architect; +import com.volmit.adapt.Adapt; import com.volmit.adapt.api.adaptation.SimpleAdaptation; import com.volmit.adapt.api.recipe.AdaptRecipe; import com.volmit.adapt.content.item.BoundRedstoneTorch; @@ -72,7 +73,6 @@ public void addStats(int level, Element v) { public void on(PlayerItemHeldEvent e) { Player p = e.getPlayer(); ItemStack hand = p.getInventory().getItemInMainHand(); - ItemStack offhand = p.getInventory().getItemInOffHand(); if (isBound(hand)) { p.setCooldown(Material.REDSTONE_TORCH, 50000); @@ -85,35 +85,37 @@ public void on(PlayerItemHeldEvent e) { public void on(PlayerInteractEvent e) { Player p = e.getPlayer(); ItemStack hand = p.getInventory().getItemInMainHand(); - if (hand.getItemMeta() == null || hand.getItemMeta().getLore() == null || !isBound(hand)) { - return; - } - if (!hasAdaptation(p)) { - return; - } - switch (e.getAction()) { - case LEFT_CLICK_BLOCK -> { - if (p.isSneaking()) { - - Location location; - if (e.getClickedBlock() == null) { - p.playSound(p.getLocation(), Sound.BLOCK_REDSTONE_TORCH_BURNOUT, 0.1f, 0.9f); - return; + if (BoundRedstoneTorch.isBindableItem(hand)) { + if (!hasAdaptation(p)) { + return; + } + Adapt.verbose("Player " + p.getName() + " is holding a bound redstone torch"); + switch (e.getAction()) { + case LEFT_CLICK_BLOCK -> { + Adapt.verbose("Player " + p.getName() + " is left clicking a block"); + if (p.isSneaking()) { + Location location; + if (e.getClickedBlock() == null) { + p.playSound(p.getLocation(), Sound.BLOCK_REDSTONE_TORCH_BURNOUT, 0.1f, 0.9f); + return; + } else { + location = new Location(e.getClickedBlock().getWorld(), e.getClickedBlock().getX(), e.getClickedBlock().getY(), e.getClickedBlock().getZ()); + } + e.setCancelled(true); + linkTorch(p, location); } else { - location = new Location(e.getClickedBlock().getWorld(), e.getClickedBlock().getX(), e.getClickedBlock().getY(), e.getClickedBlock().getZ()); + e.setCancelled(false); } - e.setCancelled(true); - linkTorch(p, location); - } else { - e.setCancelled(false); } - } - case RIGHT_CLICK_AIR, RIGHT_CLICK_BLOCK -> { - - if (!hasCooldown(p)) { - cooldowns.put(p, System.currentTimeMillis() + getConfig().cooldown); - triggerPulse(p); - e.setCancelled(true); + case RIGHT_CLICK_AIR, RIGHT_CLICK_BLOCK -> { + Adapt.verbose("Player " + p.getName() + " is right clicking a block"); + if (hasCooldown(p)) { + p.playSound(p.getLocation(), Sound.BLOCK_REDSTONE_TORCH_BURNOUT, 0.1f, 0.9f); + } else { + cooldowns.put(p, System.currentTimeMillis() + getConfig().cooldown); + triggerPulse(p); + e.setCancelled(true); + } } } } @@ -151,9 +153,6 @@ private void linkTorch(Player p, Location l) { private void triggerPulse(Player p) { - if (!hasAdaptation(p)) { - return; - } Location l = BoundRedstoneTorch.getLocation(p.getInventory().getItemInMainHand()); if (isBound(p.getInventory().getItemInMainHand()) && l != null) { loadChunkAsync(l, chunk -> { diff --git a/src/main/java/com/volmit/adapt/content/adaptation/rift/RiftAccess.java b/src/main/java/com/volmit/adapt/content/adaptation/rift/RiftAccess.java index c2dddf78..20089d20 100644 --- a/src/main/java/com/volmit/adapt/content/adaptation/rift/RiftAccess.java +++ b/src/main/java/com/volmit/adapt/content/adaptation/rift/RiftAccess.java @@ -83,40 +83,34 @@ public void on(PlayerInteractEvent e) { ItemStack hand = p.getInventory().getItemInMainHand(); ItemMeta handMeta = hand.getItemMeta(); Block block = e.getClickedBlock(); - if (handMeta == null || !hand.hasItemMeta() || !isBound(hand)) { - return; - } - e.setCancelled(true); - if (!hasAdaptation(p)) { - p.playSound(p.getLocation(), Sound.ENTITY_ENDER_EYE_DEATH, 0.50f, 0.01f); - return; - } - - switch (e.getAction()) { - case LEFT_CLICK_BLOCK -> { - if (block != null && isStorage(block.getBlockData())) { // Ensure its a container - if (p.isSneaking()) { // Binding (Sneak Container) - linkPearl(p, block); + if (BoundEnderPearl.isBindableItem(hand)&& hasAdaptation(p)) { + e.setCancelled(true); + switch (e.getAction()) { + case LEFT_CLICK_BLOCK -> { + if (block != null && isStorage(block.getBlockData())) { // Ensure its a container + if (p.isSneaking()) { // Binding (Sneak Container) + linkPearl(p, block); + } + } else if (block != null && !isStorage(block.getBlockData())) { + if (p.isSneaking()) { //(Sneak NOT Container) + Adapt.messagePlayer(p, C.LIGHT_PURPLE + Localizer.dLocalize("rift", "remoteaccess", "notcontainer")); + } else if (!p.isSneaking() && isBound(hand)) { + openPearl(p); + } } - } else if (block != null && !isStorage(block.getBlockData())) { - if (p.isSneaking()) { //(Sneak NOT Container) - Adapt.messagePlayer(p, C.LIGHT_PURPLE + Localizer.dLocalize("rift", "remoteaccess", "notcontainer")); - } else if (!p.isSneaking() && isBound(hand)) { + } + case RIGHT_CLICK_AIR, RIGHT_CLICK_BLOCK -> { + if (p.hasCooldown(hand.getType())) { + return; + } else { + NMS.get().sendCooldown(p, Material.ENDER_PEARL, 100); + p.setCooldown(Material.ENDER_PEARL, 100); + } + if (isBound(hand)) { openPearl(p); } } } - case RIGHT_CLICK_AIR, RIGHT_CLICK_BLOCK -> { - if (p.hasCooldown(hand.getType())) { - return; - } else { - NMS.get().sendCooldown(p, Material.ENDER_PEARL, 100); - p.setCooldown(Material.ENDER_PEARL, 100); - } - if (isBound(hand)) { - openPearl(p); - } - } } } diff --git a/src/main/java/com/volmit/adapt/content/adaptation/rift/RiftGate.java b/src/main/java/com/volmit/adapt/content/adaptation/rift/RiftGate.java index 7db9cfa9..8c50fa97 100644 --- a/src/main/java/com/volmit/adapt/content/adaptation/rift/RiftGate.java +++ b/src/main/java/com/volmit/adapt/content/adaptation/rift/RiftGate.java @@ -74,36 +74,32 @@ public void on(PlayerInteractEvent e) { Player p = e.getPlayer(); ItemStack hand = p.getInventory().getItemInMainHand(); Location location; - if (hand.getItemMeta() == null || hand.getItemMeta().getLore() == null) { - return; - } - if (!hand.getItemMeta().getLore().contains("Ocular Anchor") && !hand.getType().equals(Material.ENDER_EYE)) { - return; - } - e.setCancelled(true); - if (!hasAdaptation(p)) { - return; - } - if (e.getClickedBlock() == null) { - location = p.getLocation(); - } else { - location = new Location(e.getClickedBlock().getLocation().getWorld(), e.getClickedBlock().getLocation().getX() + 0.5, e.getClickedBlock().getLocation().getY() + 1, e.getClickedBlock().getLocation().getZ() + 0.5); - } - switch (e.getAction()) { - case LEFT_CLICK_BLOCK -> { - if (p.isSneaking()) { - linkEye(p, location); - } + if (BoundEyeOfEnder.isBindableItem(hand) && hasAdaptation(p)) { + e.setCancelled(true); + if (!hasAdaptation(p)) { + return; + } + if (e.getClickedBlock() == null) { + location = p.getLocation(); + } else { + location = new Location(e.getClickedBlock().getLocation().getWorld(), e.getClickedBlock().getLocation().getX() + 0.5, e.getClickedBlock().getLocation().getY() + 1, e.getClickedBlock().getLocation().getZ() + 0.5); } - case LEFT_CLICK_AIR -> { - if (p.isSneaking() && isBound(hand)) { - unlinkEye(p); - } else if (p.isSneaking() && !isBound(hand)) { - linkEye(p, location); + switch (e.getAction()) { + case LEFT_CLICK_BLOCK -> { + if (p.isSneaking()) { + linkEye(p, location); + } + } + case LEFT_CLICK_AIR -> { + if (p.isSneaking() && isBound(hand)) { + unlinkEye(p); + } else if (p.isSneaking() && !isBound(hand)) { + linkEye(p, location); + } } + case RIGHT_CLICK_AIR, RIGHT_CLICK_BLOCK -> // use + openEye(p); } - case RIGHT_CLICK_AIR, RIGHT_CLICK_BLOCK -> // use - openEye(p); } } diff --git a/src/main/java/com/volmit/adapt/content/item/BoundEnderPearl.java b/src/main/java/com/volmit/adapt/content/item/BoundEnderPearl.java index 15f7f1be..970e060c 100644 --- a/src/main/java/com/volmit/adapt/content/item/BoundEnderPearl.java +++ b/src/main/java/com/volmit/adapt/content/item/BoundEnderPearl.java @@ -18,6 +18,7 @@ package com.volmit.adapt.content.item; +import com.volmit.adapt.Adapt; import com.volmit.adapt.api.item.DataItem; import com.volmit.adapt.util.C; import com.volmit.adapt.util.Localizer; @@ -54,10 +55,21 @@ public static ItemStack withData(Block t) { } public static boolean isBindableItem(ItemStack t) { + if (!t.getType().equals(Material.ENDER_PEARL)) { + return false; + } + Adapt.verbose("Checking if item is bindable: " + t.getType().name()); if (t.getItemMeta() == null || t.getItemMeta().getLore() == null) { + Adapt.verbose("Item is not bindable: " + t.getType().name()); + return false; + } + if (t.getItemMeta().getLore().get(0).contains(Localizer.dLocalize("items", "boundenderperal", "name"))) { + Adapt.verbose("Item is bindable: " + t.getType().name()); + return true; + } else { + Adapt.verbose("Item is not bindable: " + t.getType().name()); return false; } - return t.getItemMeta().getLore().contains(Localizer.dLocalize("items", "boundenderperal", "name")); } @Override diff --git a/src/main/java/com/volmit/adapt/content/item/BoundEyeOfEnder.java b/src/main/java/com/volmit/adapt/content/item/BoundEyeOfEnder.java index a2cc736b..ce98ce17 100644 --- a/src/main/java/com/volmit/adapt/content/item/BoundEyeOfEnder.java +++ b/src/main/java/com/volmit/adapt/content/item/BoundEyeOfEnder.java @@ -18,6 +18,7 @@ package com.volmit.adapt.content.item; +import com.volmit.adapt.Adapt; import com.volmit.adapt.api.item.DataItem; import com.volmit.adapt.util.C; import com.volmit.adapt.util.Localizer; @@ -54,10 +55,21 @@ public static ItemStack withData(Location t) { } public static boolean isBindableItem(ItemStack t) { + if (!t.getType().equals(Material.ENDER_EYE)) { + return false; + } + Adapt.verbose("Checking if item is bindable: " + t.getType().name()); if (t.getItemMeta() == null || t.getItemMeta().getLore() == null) { + Adapt.verbose("Item is not bindable: " + t.getType().name()); + return false; + } + if (t.getItemMeta().getLore().get(0).contains(Localizer.dLocalize("items", "boundeyeofender", "name"))) { + Adapt.verbose("Item is bindable: " + t.getType().name()); + return true; + } else { + Adapt.verbose("Item is not bindable: " + t.getType().name()); return false; } - return t.getItemMeta().getLore().contains(Localizer.dLocalize("items", "boundeyeofender", "name")); } @Override diff --git a/src/main/java/com/volmit/adapt/content/item/BoundRedstoneTorch.java b/src/main/java/com/volmit/adapt/content/item/BoundRedstoneTorch.java index 06be642e..9e1f2ebe 100644 --- a/src/main/java/com/volmit/adapt/content/item/BoundRedstoneTorch.java +++ b/src/main/java/com/volmit/adapt/content/item/BoundRedstoneTorch.java @@ -18,6 +18,7 @@ package com.volmit.adapt.content.item; +import com.volmit.adapt.Adapt; import com.volmit.adapt.api.item.DataItem; import com.volmit.adapt.util.C; import com.volmit.adapt.util.Localizer; @@ -54,10 +55,21 @@ public static ItemStack withData(Location t) { } public static boolean isBindableItem(ItemStack t) { + if (!t.getType().equals(Material.REDSTONE_TORCH)) { + return false; + } + Adapt.verbose("Checking if item is bindable: " + t.getType().name()); if (t.getItemMeta() == null || t.getItemMeta().getLore() == null) { + Adapt.verbose("Item is not bindable: " + t.getType().name()); + return false; + } + if (t.getItemMeta().getLore().get(0).contains(Localizer.dLocalize("items", "boundredstonetorch", "name"))) { + Adapt.verbose("Item is bindable: " + t.getType().name()); + return true; + } else { + Adapt.verbose("Item is not bindable: " + t.getType().name()); return false; } - return t.getItemMeta().getLore().contains(Localizer.dLocalize("items", "boundredstonetorch", "name")); } @Override diff --git a/src/main/java/com/volmit/adapt/content/skill/SkillArchitect.java b/src/main/java/com/volmit/adapt/content/skill/SkillArchitect.java index af79851f..16b87b2d 100644 --- a/src/main/java/com/volmit/adapt/content/skill/SkillArchitect.java +++ b/src/main/java/com/volmit/adapt/content/skill/SkillArchitect.java @@ -22,6 +22,7 @@ import com.volmit.adapt.AdaptConfig; import com.volmit.adapt.api.advancement.AdaptAdvancement; import com.volmit.adapt.api.skill.SimpleSkill; +import com.volmit.adapt.api.value.MaterialValue; import com.volmit.adapt.api.world.AdaptStatTracker; import com.volmit.adapt.content.adaptation.architect.ArchitectFoundation; import com.volmit.adapt.content.adaptation.architect.ArchitectGlass; @@ -42,7 +43,12 @@ import org.bukkit.event.block.BlockBreakEvent; import org.bukkit.event.block.BlockPlaceEvent; +import java.util.HashMap; +import java.util.Map; + public class SkillArchitect extends SimpleSkill { + private final Map cooldowns; + public SkillArchitect() { super("architect", Localizer.dLocalize("skill", "architect", "icon")); registerConfiguration(Config.class); @@ -51,6 +57,7 @@ public SkillArchitect() { setDisplayName(Localizer.dLocalize("skill", "architect", "name")); setInterval(3100); setIcon(Material.IRON_BARS); + cooldowns = new HashMap<>(); registerAdvancement(AdaptAdvancement.builder() .icon(Material.BRICK).key("challenge_place_1k") .title(Localizer.dLocalize("advancement", "challenge_place_1k", "title")) @@ -114,13 +121,23 @@ public void on(BlockPlaceEvent e) { return; } double v = getValue(e.getBlock()) * getConfig().xpValueMultiplier; + getPlayer(p).getData().addStat("blocks.placed", 1); + getPlayer(p).getData().addStat("blocks.placed.value", v); + MaterialValue.debugValue(e.getBlock().getType()); + if (cooldowns.containsKey(p)) { + if (cooldowns.get(p) + getConfig().cooldownDelay > System.currentTimeMillis()) { + return; + } else { + cooldowns.remove(p); + } + } + cooldowns.put(p, System.currentTimeMillis()); try { J.a(() -> xp(p, e.getBlock().getLocation().clone().add(0.5, 0.5, 0.5), blockXP(e.getBlock(), getConfig().xpBase + v))); } catch (Exception ignored) { Adapt.verbose("Failed to give XP to " + p.getName() + " for placing " + e.getBlock().getType().name()); } - getPlayer(p).getData().addStat("blocks.placed", 1); - getPlayer(p).getData().addStat("blocks.placed.value", v); + } @@ -162,6 +179,7 @@ protected static class Config { boolean enabled = true; double challengePlace1kReward = 1750; double xpValueMultiplier = 1; + long cooldownDelay = 1250; double xpBase = 1; } } diff --git a/src/main/java/com/volmit/adapt/content/skill/SkillAxes.java b/src/main/java/com/volmit/adapt/content/skill/SkillAxes.java index fec58c29..78f5e3cf 100644 --- a/src/main/java/com/volmit/adapt/content/skill/SkillAxes.java +++ b/src/main/java/com/volmit/adapt/content/skill/SkillAxes.java @@ -39,7 +39,12 @@ import org.bukkit.event.entity.EntityDamageByEntityEvent; import org.bukkit.inventory.ItemStack; +import java.util.HashMap; +import java.util.Map; + public class SkillAxes extends SimpleSkill { + private final Map cooldowns; + public SkillAxes() { super("axes", Localizer.dLocalize("skill", "axes", "icon")); registerConfiguration(Config.class); @@ -48,6 +53,7 @@ public SkillAxes() { setDisplayName(Localizer.dLocalize("skill", "axes", "name")); setInterval(5251); setIcon(Material.GOLDEN_AXE); + cooldowns = new HashMap<>(); registerAdaptation(new AxeGroundSmash()); registerAdaptation(new AxeChop()); registerAdaptation(new AxeDropToInventory()); @@ -120,6 +126,14 @@ public void on(EntityDamageByEntityEvent e) { ItemStack hand = a.getPlayer().getInventory().getItemInMainHand(); if (isAxe(hand)) { + if (cooldowns.containsKey(p)) { + if (cooldowns.get(p) + getConfig().cooldownDelay > System.currentTimeMillis()) { + return; + } else { + cooldowns.remove(p); + } + } + cooldowns.put(p, System.currentTimeMillis()); getPlayer(p).getData().addStat("axes.swings", 1); getPlayer(p).getData().addStat("axes.damage", e.getDamage()); xp(a.getPlayer(), e.getEntity().getLocation(), getConfig().axeDamageXPMultiplier * e.getDamage()); @@ -148,6 +162,15 @@ public void on(BlockBreakEvent e) { double v = getValue(e.getBlock().getType()); getPlayer(p).getData().addStat("axes.blocks.broken", 1); getPlayer(p).getData().addStat("axes.blocks.value", getValue(e.getBlock().getBlockData())); + if (cooldowns.containsKey(p)) { + if (cooldowns.get(p) + getConfig().cooldownDelay > System.currentTimeMillis()) { + return; + } else { + cooldowns.remove(p); + } + } + cooldowns.put(p, System.currentTimeMillis()); + J.a(() -> xp(p, e.getBlock().getLocation().clone().add(0.5, 0.5, 0.5), blockXP(e.getBlock(), v))); } } @@ -186,6 +209,7 @@ protected static class Config { double challengeChopReward = 1750; double logOrWoodXPMultiplier = 2.67; double leavesMultiplier = 1.11; + long cooldownDelay = 2250; double valueXPMultiplier = 0.225; double axeDamageXPMultiplier = 13.26; } diff --git a/src/main/java/com/volmit/adapt/content/skill/SkillBrewing.java b/src/main/java/com/volmit/adapt/content/skill/SkillBrewing.java index de00e006..97dc1241 100644 --- a/src/main/java/com/volmit/adapt/content/skill/SkillBrewing.java +++ b/src/main/java/com/volmit/adapt/content/skill/SkillBrewing.java @@ -45,7 +45,12 @@ import org.bukkit.event.player.PlayerItemConsumeEvent; import org.bukkit.inventory.meta.PotionMeta; +import java.util.HashMap; +import java.util.Map; + public class SkillBrewing extends SimpleSkill { + private final Map cooldowns; + public SkillBrewing() { super("brewing", Localizer.dLocalize("skill", "brewing", "icon")); registerConfiguration(Config.class); @@ -54,9 +59,9 @@ public SkillBrewing() { setDisplayName(Localizer.dLocalize("skill", "brewing", "name")); setInterval(5851); setIcon(Material.LINGERING_POTION); + cooldowns = new HashMap<>(); registerAdaptation(new BrewingLingering()); // Features registerAdaptation(new BrewingSuperHeated()); - registerAdaptation(new BrewingAbsorption()); // Brews registerAdaptation(new BrewingBlindness()); registerAdaptation(new BrewingDarkness()); @@ -175,11 +180,20 @@ public void on(PlayerItemConsumeEvent e) { && !e.getItem().toString().contains("potion-type=minecraft:mundane") && !e.getItem().toString().contains("potion-type=minecraft:thick") && !e.getItem().toString().contains("potion-type=minecraft:awkward")) { + getPlayer(p).getData().addStat("brewing.consumed", 1); + if (cooldowns.containsKey(p)) { + if (cooldowns.get(p) + getConfig().cooldownDelay > System.currentTimeMillis()) { + return; + } else { + cooldowns.remove(p); + } + } + cooldowns.put(p, System.currentTimeMillis()); xp(p, p.getLocation(), getConfig().splashXP + (getConfig().splashMultiplier * o.getCustomEffects().stream().mapToDouble(i -> (i.getAmplifier() + 1) * (i.getDuration() / 20D)).sum()) + (getConfig().splashMultiplier * (o.getBasePotionData().isUpgraded() ? 50 : 25))); - getPlayer(p).getData().addStat("brewing.consumed", 1); + } } @@ -264,6 +278,7 @@ protected static class Config { double challengeBrew1k = 1000; double challengeBrewSplash1k = 1000; double splashXP = 100; + long cooldownDelay = 3250; double splashMultiplier = 0.25; } } diff --git a/src/main/java/com/volmit/adapt/content/skill/SkillCrafting.java b/src/main/java/com/volmit/adapt/content/skill/SkillCrafting.java index cd1fccd0..35ad08ac 100644 --- a/src/main/java/com/volmit/adapt/content/skill/SkillCrafting.java +++ b/src/main/java/com/volmit/adapt/content/skill/SkillCrafting.java @@ -46,7 +46,6 @@ public class SkillCrafting extends SimpleSkill { private final Map cooldowns; - public SkillCrafting() { super("crafting", Localizer.dLocalize("skill", "crafting", "icon")); registerConfiguration(Config.class); diff --git a/src/main/java/com/volmit/adapt/content/skill/SkillEnchanting.java b/src/main/java/com/volmit/adapt/content/skill/SkillEnchanting.java index db28fbe8..41d58103 100644 --- a/src/main/java/com/volmit/adapt/content/skill/SkillEnchanting.java +++ b/src/main/java/com/volmit/adapt/content/skill/SkillEnchanting.java @@ -32,11 +32,17 @@ import lombok.NoArgsConstructor; import org.bukkit.GameMode; import org.bukkit.Material; +import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.enchantment.EnchantItemEvent; +import java.util.HashMap; +import java.util.Map; + public class SkillEnchanting extends SimpleSkill { + private final Map cooldowns; + public SkillEnchanting() { super("enchanting", Localizer.dLocalize("skill", "enchanting", "icon")); registerConfiguration(Config.class); @@ -45,6 +51,7 @@ public SkillEnchanting() { setDisplayName(Localizer.dLocalize("skill", "enchanting", "name")); setInterval(3909); setIcon(Material.KNOWLEDGE_BOOK); + cooldowns = new HashMap<>(); registerAdaptation(new EnchantingQuickEnchant()); registerAdaptation(new EnchantingLapisReturn()); registerAdaptation(new EnchantingXPReturn()); // @@ -104,10 +111,20 @@ public void on(EnchantItemEvent e) { if (!AdaptConfig.get().isXpInCreative() && (e.getEnchanter().getGameMode().equals(GameMode.CREATIVE) || e.getEnchanter().getGameMode().equals(GameMode.SPECTATOR))) { return; } - xp(e.getEnchanter(), getConfig().enchantPowerXPMultiplier * e.getEnchantsToAdd().values().stream().mapToInt((i) -> i).sum()); + Player p = e.getEnchanter(); getPlayer(e.getEnchanter()).getData().addStat("enchanted.items", 1); getPlayer(e.getEnchanter()).getData().addStat("enchanted.power", e.getEnchantsToAdd().values().stream().mapToInt(i -> i).sum()); getPlayer(e.getEnchanter()).getData().addStat("enchanted.levels.spent", e.getExpLevelCost()); + if (cooldowns.containsKey(p)) { + if (cooldowns.get(p) + getConfig().cooldownDelay > System.currentTimeMillis()) { + return; + } else { + cooldowns.remove(p); + } + } + cooldowns.put(p, System.currentTimeMillis()); + xp(e.getEnchanter(), getConfig().enchantPowerXPMultiplier * e.getEnchantsToAdd().values().stream().mapToInt((i) -> i).sum()); + } @Override @@ -124,6 +141,7 @@ public boolean isEnabled() { protected static class Config { boolean enabled = true; double enchantPowerXPMultiplier = 70; + long cooldownDelay = 5250; double challengeEnchantReward = 2500; } } diff --git a/src/main/java/com/volmit/adapt/content/skill/SkillExcavation.java b/src/main/java/com/volmit/adapt/content/skill/SkillExcavation.java index 4b2602aa..630a48b0 100644 --- a/src/main/java/com/volmit/adapt/content/skill/SkillExcavation.java +++ b/src/main/java/com/volmit/adapt/content/skill/SkillExcavation.java @@ -41,7 +41,12 @@ import org.bukkit.event.entity.EntityDamageByEntityEvent; import org.bukkit.inventory.ItemStack; +import java.util.HashMap; +import java.util.Map; + public class SkillExcavation extends SimpleSkill { + private final Map cooldowns; + public SkillExcavation() { super("excavation", Localizer.dLocalize("skill", "excavation", "icon")); registerConfiguration(Config.class); @@ -50,6 +55,7 @@ public SkillExcavation() { setColor(C.YELLOW); setInterval(5953); setIcon(Material.DIAMOND_SHOVEL); + cooldowns = new HashMap<>(); registerAdaptation(new ExcavationHaste()); registerAdaptation(new ExcavationOmniTool()); registerAdaptation(new ExcavationDropToInventory()); @@ -114,6 +120,14 @@ public void on(EntityDamageByEntityEvent e) { AdaptPlayer a = getPlayer((Player) e.getDamager()); ItemStack hand = a.getPlayer().getInventory().getItemInMainHand(); if (isShovel(hand)) { + if (cooldowns.containsKey(p)) { + if (cooldowns.get(p) + getConfig().cooldownDelay > System.currentTimeMillis()) { + return; + } else { + cooldowns.remove(p); + } + } + cooldowns.put(p, System.currentTimeMillis()); getPlayer(p).getData().addStat("excavation.swings", 1); getPlayer(p).getData().addStat("excavation.damage", e.getDamage()); xp(a.getPlayer(), e.getEntity().getLocation(), getConfig().axeDamageXPMultiplier * e.getDamage()); @@ -136,9 +150,18 @@ public void on(BlockBreakEvent e) { return; } if (isShovel(p.getInventory().getItemInMainHand())) { - double v = getValue(e.getBlock().getType()); getPlayer(p).getData().addStat("excavation.blocks.broken", 1); getPlayer(p).getData().addStat("excavation.blocks.value", getValue(e.getBlock().getBlockData())); + if (cooldowns.containsKey(p)) { + if (cooldowns.get(p) + getConfig().cooldownDelay > System.currentTimeMillis()) { + return; + } else { + cooldowns.remove(p); + } + } + cooldowns.put(p, System.currentTimeMillis()); + double v = getValue(e.getBlock().getType()); + J.a(() -> xp(p, e.getBlock().getLocation().clone().add(0.5, 0.5, 0.5), blockXP(e.getBlock(), v))); } } @@ -169,6 +192,7 @@ protected static class Config { double maxBlastResistanceBonus = 10; double challengeExcavationReward = 1200; double valueXPMultiplier = 0.825; + long cooldownDelay = 1250; double axeDamageXPMultiplier = 6.5; } } diff --git a/src/main/java/com/volmit/adapt/content/skill/SkillHunter.java b/src/main/java/com/volmit/adapt/content/skill/SkillHunter.java index c6c5ab71..c269788f 100644 --- a/src/main/java/com/volmit/adapt/content/skill/SkillHunter.java +++ b/src/main/java/com/volmit/adapt/content/skill/SkillHunter.java @@ -38,7 +38,12 @@ import org.bukkit.event.entity.EntityDeathEvent; import org.bukkit.event.player.PlayerInteractEvent; +import java.util.HashMap; +import java.util.Map; + public class SkillHunter extends SimpleSkill { + private final Map cooldowns; + public SkillHunter() { super("hunter", Localizer.dLocalize("skill", "hunter", "icon")); registerConfiguration(Config.class); @@ -47,6 +52,7 @@ public SkillHunter() { setDisplayName(Localizer.dLocalize("skill", "hunter", "name")); setInterval(4150); setIcon(Material.BONE); + cooldowns = new HashMap<>(); registerAdaptation(new HunterAdrenaline()); registerAdaptation(new HunterRegen()); registerAdaptation(new HunterInvis()); @@ -74,6 +80,14 @@ public void on(BlockBreakEvent e) { return; } if (e.getBlock().getType().equals(Material.TURTLE_EGG)) { + if (cooldowns.containsKey(p)) { + if (cooldowns.get(p) + getConfig().cooldownDelay > System.currentTimeMillis()) { + return; + } else { + cooldowns.remove(p); + } + } + cooldowns.put(p, System.currentTimeMillis()); xp(e.getBlock().getLocation(), getConfig().turtleEggKillXP, getConfig().turtleEggSpatialRadius, getConfig().turtleEggSpatialDuration); getPlayer(p).getData().addStat("killed.tutleeggs", 1); } @@ -93,6 +107,14 @@ public void on(PlayerInteractEvent e) { return; } if (e.getAction().equals(Action.PHYSICAL) && e.getClickedBlock() != null && e.getClickedBlock().getType().equals(Material.TURTLE_EGG)) { + if (cooldowns.containsKey(p)) { + if (cooldowns.get(p) + getConfig().cooldownDelay > System.currentTimeMillis()) { + return; + } else { + cooldowns.remove(p); + } + } + cooldowns.put(p, System.currentTimeMillis()); xp(e.getClickedBlock().getLocation(), getConfig().turtleEggKillXP, getConfig().turtleEggSpatialRadius, getConfig().turtleEggSpatialDuration); getPlayer(p).getData().addStat("killed.tutleeggs", 1); } @@ -113,14 +135,32 @@ public void on(EntityDeathEvent e) { double cmult = e.getEntity().getType().equals(EntityType.CREEPER) ? getConfig().creeperKillMultiplier : 1; if (e.getEntity().getAttribute(Attribute.GENERIC_MAX_HEALTH) != null) { if (e.getEntity().getPortalCooldown() > 0) { + Player p = e.getEntity().getKiller(); + if (cooldowns.containsKey(p)) { + if (cooldowns.get(p) + getConfig().cooldownDelay > System.currentTimeMillis()) { + return; + } else { + cooldowns.remove(p); + } + } + getPlayer(e.getEntity().getKiller()).getData().addStat("killed.kills", 1); + cooldowns.put(p, System.currentTimeMillis()); xp(e.getEntity().getLocation(), getConfig().spawnerMobReductionXpMultiplier * (e.getEntity().getAttribute(Attribute.GENERIC_MAX_HEALTH).getValue() * getConfig().killMaxHealthSpatialXPMultiplier * cmult), getConfig().killSpatialRadius, getConfig().killSpatialDuration); xp(e.getEntity().getKiller(), e.getEntity().getLocation(), getConfig().spawnerMobReductionXpMultiplier * (e.getEntity().getAttribute(Attribute.GENERIC_MAX_HEALTH).getValue() * getConfig().killMaxHealthXPMultiplier * cmult)); - getPlayer(e.getEntity().getKiller()).getData().addStat("killed.kills", 1); } else { + Player p = e.getEntity().getKiller(); + if (cooldowns.containsKey(p)) { + if (cooldowns.get(p) + getConfig().cooldownDelay > System.currentTimeMillis()) { + return; + } else { + cooldowns.remove(p); + } + } + getPlayer(e.getEntity().getKiller()).getData().addStat("killed.kills", 1); + cooldowns.put(p, System.currentTimeMillis()); xp(e.getEntity().getLocation(), e.getEntity().getAttribute(Attribute.GENERIC_MAX_HEALTH).getValue() * getConfig().killMaxHealthSpatialXPMultiplier * cmult, getConfig().killSpatialRadius, getConfig().killSpatialDuration); xp(e.getEntity().getKiller(), e.getEntity().getLocation(), e.getEntity().getAttribute(Attribute.GENERIC_MAX_HEALTH).getValue() * getConfig().killMaxHealthXPMultiplier * cmult); - getPlayer(e.getEntity().getKiller()).getData().addStat("killed.kills", 1); } } } @@ -160,6 +200,7 @@ protected static class Config { double killMaxHealthSpatialXPMultiplier = 3; double killMaxHealthXPMultiplier = 4; int killSpatialRadius = 25; + long cooldownDelay = 1000; long killSpatialDuration = 10000; double spawnerMobReductionXpMultiplier = 0.5; } diff --git a/src/main/java/com/volmit/adapt/content/skill/SkillPickaxes.java b/src/main/java/com/volmit/adapt/content/skill/SkillPickaxes.java index 07a4a11a..0a2644bd 100644 --- a/src/main/java/com/volmit/adapt/content/skill/SkillPickaxes.java +++ b/src/main/java/com/volmit/adapt/content/skill/SkillPickaxes.java @@ -39,7 +39,12 @@ import org.bukkit.event.entity.EntityDamageByEntityEvent; import org.bukkit.inventory.ItemStack; +import java.util.HashMap; +import java.util.Map; + public class SkillPickaxes extends SimpleSkill { + private final Map cooldowns; + public SkillPickaxes() { super("pickaxe", Localizer.dLocalize("skill", "pickaxe", "icon")); registerConfiguration(Config.class); @@ -48,6 +53,7 @@ public SkillPickaxes() { setColor(C.GOLD); setInterval(2750); setIcon(Material.NETHERITE_PICKAXE); + cooldowns = new HashMap<>(); registerAdaptation(new PickaxeChisel()); registerAdaptation(new PickaxeVeinminer()); registerAdaptation(new PickaxeAutosmelt()); @@ -70,9 +76,18 @@ public void on(EntityDamageByEntityEvent e) { AdaptPlayer a = getPlayer((Player) e.getDamager()); ItemStack hand = a.getPlayer().getInventory().getItemInMainHand(); if (isPickaxe(hand)) { - xp(a.getPlayer(), e.getEntity().getLocation(), getConfig().damageXPMultiplier * e.getDamage()); getPlayer(a.getPlayer()).getData().addStat("pickaxe.swings", 1); getPlayer(a.getPlayer()).getData().addStat("pickaxe.damage", e.getDamage()); + if (cooldowns.containsKey(p)) { + if (cooldowns.get(p) + getConfig().cooldownDelay > System.currentTimeMillis()) { + return; + } else { + cooldowns.remove(p); + } + } + cooldowns.put(p, System.currentTimeMillis()); + xp(a.getPlayer(), e.getEntity().getLocation(), getConfig().damageXPMultiplier * e.getDamage()); + } } } @@ -101,6 +116,14 @@ public void on(BlockBreakEvent e) { } getPlayer(p).getData().addStat("pickaxe.blocks.broken", 1); getPlayer(p).getData().addStat("pickaxe.blocks.value", getValue(e.getBlock().getBlockData())); + if (cooldowns.containsKey(p)) { + if (cooldowns.get(p) + getConfig().cooldownDelay > System.currentTimeMillis()) { + return; + } else { + cooldowns.remove(p); + } + } + cooldowns.put(p, System.currentTimeMillis()); J.a(() -> xp(p, e.getBlock().getLocation().clone().add(0.5, 0.5, 0.5), blockXP(e.getBlock(), v))); } } @@ -158,6 +181,7 @@ protected static class Config { double copperBonus = 30; double goldBonus = 50; double lapisBonus = 105; + long cooldownDelay = 1250; double diamondBonus = 250; double emeraldBonus = 300; double netherGoldBonus = 150; diff --git a/src/main/java/com/volmit/adapt/content/skill/SkillRanged.java b/src/main/java/com/volmit/adapt/content/skill/SkillRanged.java index a6fb764a..b9a5141a 100644 --- a/src/main/java/com/volmit/adapt/content/skill/SkillRanged.java +++ b/src/main/java/com/volmit/adapt/content/skill/SkillRanged.java @@ -37,9 +37,13 @@ import org.bukkit.event.entity.EntityDamageByEntityEvent; import org.bukkit.event.entity.ProjectileLaunchEvent; +import java.util.HashMap; import java.util.Locale; +import java.util.Map; public class SkillRanged extends SimpleSkill { + private final Map cooldowns; + public SkillRanged() { super("ranged", Localizer.dLocalize("skill", "ranged", "icon")); registerConfiguration(Config.class); @@ -52,6 +56,7 @@ public SkillRanged() { registerAdaptation(new RangedArrowRecovery()); registerAdaptation(new RangedLungeShot()); setIcon(Material.CROSSBOW); + cooldowns = new HashMap<>(); } @EventHandler(priority = EventPriority.HIGHEST) @@ -72,9 +77,18 @@ public void on(ProjectileLaunchEvent e) { if (e.getEntity() instanceof Snowball) { return; // Ignore snowballs } - xp(p, getConfig().shootXP); getPlayer(p).getData().addStat("ranged.shotsfired", 1); getPlayer(p).getData().addStat("ranged.shotsfired." + e.getEntity().getType().name().toLowerCase(Locale.ROOT), 1); + if (cooldowns.containsKey(p)) { + if (cooldowns.get(p) + getConfig().cooldownDelay > System.currentTimeMillis()) { + return; + } else { + cooldowns.remove(p); + } + } + cooldowns.put(p, System.currentTimeMillis()); + xp(p, getConfig().shootXP); + } } @@ -100,6 +114,14 @@ public void on(EntityDamageByEntityEvent e) { getPlayer(p).getData().addStat("ranged.distance", e.getEntity().getLocation().distance(p.getLocation())); getPlayer(p).getData().addStat("ranged.damage." + e.getDamager().getType().name().toLowerCase(Locale.ROOT), e.getDamage()); getPlayer(p).getData().addStat("ranged.distance." + e.getDamager().getType().name().toLowerCase(Locale.ROOT), e.getEntity().getLocation().distance(p.getLocation())); + if (cooldowns.containsKey(p)) { + if (cooldowns.get(p) + getConfig().cooldownDelay > System.currentTimeMillis()) { + return; + } else { + cooldowns.remove(p); + } + } + cooldowns.put(p, System.currentTimeMillis()); xp(p, e.getEntity().getLocation(), (getConfig().hitDamageXPMultiplier * e.getDamage()) + (e.getEntity().getLocation().distance(p.getLocation()) * getConfig().hitDistanceXPMultiplier)); } } @@ -118,6 +140,7 @@ public boolean isEnabled() { protected static class Config { boolean enabled = true; double shootXP = 5; + long cooldownDelay = 1250; double hitDamageXPMultiplier = 2.125; double hitDistanceXPMultiplier = 1.7; } diff --git a/src/main/java/com/volmit/adapt/content/skill/SkillStealth.java b/src/main/java/com/volmit/adapt/content/skill/SkillStealth.java index e4263773..484ce3f1 100644 --- a/src/main/java/com/volmit/adapt/content/skill/SkillStealth.java +++ b/src/main/java/com/volmit/adapt/content/skill/SkillStealth.java @@ -36,13 +36,19 @@ import org.bukkit.Material; import org.bukkit.entity.Player; +import java.util.HashMap; +import java.util.Map; + public class SkillStealth extends SimpleSkill { + private final Map cooldowns; + public SkillStealth() { super("stealth", Localizer.dLocalize("skill", "stealth", "icon")); registerConfiguration(Config.class); setColor(C.DARK_GRAY); setInterval(1412); setIcon(Material.WITHER_ROSE); + cooldowns = new HashMap<>(); setDescription(Localizer.dLocalize("skill", "stealth", "description")); setDisplayName(Localizer.dLocalize("skill", "stealth", "name")); registerAdaptation(new StealthSpeed()); diff --git a/src/main/java/com/volmit/adapt/content/skill/SkillSwords.java b/src/main/java/com/volmit/adapt/content/skill/SkillSwords.java index d7675264..c7f4cdca 100644 --- a/src/main/java/com/volmit/adapt/content/skill/SkillSwords.java +++ b/src/main/java/com/volmit/adapt/content/skill/SkillSwords.java @@ -35,7 +35,12 @@ import org.bukkit.event.entity.EntityDamageByEntityEvent; import org.bukkit.inventory.ItemStack; +import java.util.HashMap; +import java.util.Map; + public class SkillSwords extends SimpleSkill { + private final Map cooldowns; + public SkillSwords() { super("swords", Localizer.dLocalize("skill", "swords", "icon")); registerConfiguration(Config.class); @@ -44,6 +49,7 @@ public SkillSwords() { setDisplayName(Localizer.dLocalize("skill", "swords", "name")); setInterval(2150); setIcon(Material.DIAMOND_SWORD); + cooldowns = new HashMap<>(); registerAdaptation(new SwordsMachete()); registerAdaptation(new SwordsPoisonedBlade()); registerAdaptation(new SwordsBloodyBlade()); @@ -72,6 +78,14 @@ public void on(EntityDamageByEntityEvent e) { if (isSword(hand)) { getPlayer(p).getData().addStat("sword.hits", 1); getPlayer(p).getData().addStat("sword.damage", e.getDamage()); + if (cooldowns.containsKey(p)) { + if (cooldowns.get(p) + getConfig().cooldownDelay > System.currentTimeMillis()) { + return; + } else { + cooldowns.remove(p); + } + } + cooldowns.put(p, System.currentTimeMillis()); xp(a.getPlayer(), e.getEntity().getLocation(), getConfig().damageXPMultiplier * e.getDamage()); } } @@ -91,6 +105,7 @@ public boolean isEnabled() { @NoArgsConstructor protected static class Config { boolean enabled = true; + long cooldownDelay = 1250; double damageXPMultiplier = 7.26; } } diff --git a/src/main/java/com/volmit/adapt/content/skill/SkillTaming.java b/src/main/java/com/volmit/adapt/content/skill/SkillTaming.java index cbdcbbc9..5767d80f 100644 --- a/src/main/java/com/volmit/adapt/content/skill/SkillTaming.java +++ b/src/main/java/com/volmit/adapt/content/skill/SkillTaming.java @@ -36,7 +36,12 @@ import org.bukkit.event.entity.EntityBreedEvent; import org.bukkit.event.entity.EntityDamageByEntityEvent; +import java.util.HashMap; +import java.util.Map; + public class SkillTaming extends SimpleSkill { + private final Map cooldowns; + public SkillTaming() { super("taming", Localizer.dLocalize("skill", "taming", "icon")); registerConfiguration(Config.class); @@ -45,6 +50,7 @@ public SkillTaming() { setColor(C.GOLD); setInterval(3480); setIcon(Material.LEAD); + cooldowns = new HashMap<>(); registerAdaptation(new TamingHealthBoost()); registerAdaptation(new TamingDamage()); registerAdaptation(new TamingHealthRegeneration()); @@ -67,6 +73,14 @@ public void on(EntityBreedEvent e) { } if ((p.getWorld() == e.getEntity().getWorld()) // Fixed Cannot measure distance between world_nether and world etc... && p.getLocation().distance(e.getEntity().getLocation()) <= 15) { + if (cooldowns.containsKey(p)) { + if (cooldowns.get(p) + getConfig().cooldownDelay > System.currentTimeMillis()) { + return; + } else { + cooldowns.remove(p); + } + } + cooldowns.put(p, System.currentTimeMillis()); xp(p, getConfig().tameXpBase); } } @@ -89,6 +103,14 @@ public void on(EntityDamageByEntityEvent e) { if (!AdaptConfig.get().isXpInCreative() && (p.getGameMode().equals(GameMode.CREATIVE) || p.getGameMode().equals(GameMode.SPECTATOR))) { return; } else { + if (cooldowns.containsKey(p)) { + if (cooldowns.get(p) + getConfig().cooldownDelay > System.currentTimeMillis()) { + return; + } else { + cooldowns.remove(p); + } + } + cooldowns.put(p, System.currentTimeMillis()); xp(p, e.getEntity().getLocation(), e.getDamage() * getConfig().tameDamageXPMultiplier); } } @@ -107,6 +129,7 @@ public boolean isEnabled() { protected static class Config { boolean enabled = true; double tameXpBase = 30; + long cooldownDelay = 2250; double tameDamageXPMultiplier = 7.85; } } diff --git a/src/main/java/com/volmit/adapt/content/skill/SkillTragOul.java b/src/main/java/com/volmit/adapt/content/skill/SkillTragOul.java index 0f534dce..20c1d8cd 100644 --- a/src/main/java/com/volmit/adapt/content/skill/SkillTragOul.java +++ b/src/main/java/com/volmit/adapt/content/skill/SkillTragOul.java @@ -35,7 +35,12 @@ import org.bukkit.event.entity.EntityDamageByEntityEvent; import org.bukkit.event.entity.PlayerDeathEvent; +import java.util.HashMap; +import java.util.Map; + public class SkillTragOul extends SimpleSkill { + private final Map cooldowns; + public SkillTragOul() { super("tragoul", Localizer.dLocalize("skill", "tragoul", "icon")); registerConfiguration(Config.class); @@ -44,6 +49,7 @@ public SkillTragOul() { setDisplayName(Localizer.dLocalize("skill", "tragoul", "name")); setInterval(2755); setIcon(Material.CRIMSON_ROOTS); + cooldowns = new HashMap<>(); registerAdaptation(new TragoulThorns()); } @@ -76,6 +82,14 @@ public void on(EntityDamageByEntityEvent e) { AdaptPlayer a = getPlayer(p); getPlayer(p).getData().addStat("trag.hitsrecieved", 1); getPlayer(p).getData().addStat("trag.damage", e.getDamage()); + if (cooldowns.containsKey(p)) { + if (cooldowns.get(p) + getConfig().cooldownDelay > System.currentTimeMillis()) { + return; + } else { + cooldowns.remove(p); + } + } + cooldowns.put(p, System.currentTimeMillis()); xp(a.getPlayer(), getConfig().damageReceivedXpMultiplier * e.getDamage()); } } @@ -159,6 +173,7 @@ protected static class Config { boolean takeAwaySkillsOnDeath = false; boolean enabled = true; boolean showParticles = true; + long cooldownDelay = 1000; double damageReceivedXpMultiplier = 2.26; } } From 633ebf0cc8a4599426eb3efc0a7f887526c31366 Mon Sep 17 00:00:00 2001 From: Brian Neumann-Fopiano Date: Fri, 28 Oct 2022 23:00:49 -0700 Subject: [PATCH 7/8] XP system --- .../java/com/volmit/adapt/AdaptConfig.java | 5 ++- .../java/com/volmit/adapt/api/Component.java | 5 ++- .../volmit/adapt/api/skill/SimpleSkill.java | 1 + .../volmit/adapt/api/value/MaterialValue.java | 45 +++++++++---------- .../crafting/CraftingDeconstruction.java | 2 + 5 files changed, 29 insertions(+), 29 deletions(-) diff --git a/src/main/java/com/volmit/adapt/AdaptConfig.java b/src/main/java/com/volmit/adapt/AdaptConfig.java index 23e8d796..3abe4ca3 100644 --- a/src/main/java/com/volmit/adapt/AdaptConfig.java +++ b/src/main/java/com/volmit/adapt/AdaptConfig.java @@ -60,6 +60,7 @@ public class AdaptConfig { private boolean escClosesAllGuis = false; private boolean guiBackButton = false; private int learnUnlearnButtonDelayTicks = 14; + private int maxRecipeListPrecaution = 25; private boolean actionbarNotifyXp = true; private boolean actionbarNotifyLevel = true; private boolean unlearnAllButton = false; @@ -109,9 +110,9 @@ public static class SqlSettings { @Getter public static class ValueConfig { private double baseValue = 1; - private Map valueMutlipliers = defaultValueMultipliers(); + private Map valueMutlipliers = defaultValueMultipliersOverrides(); - private Map defaultValueMultipliers() { + private Map defaultValueMultipliersOverrides() { Map f = new HashMap<>(); f.put(Material.BLAZE_ROD.name(), 50D); f.put(Material.ENDER_PEARL.name(), 75D); diff --git a/src/main/java/com/volmit/adapt/api/Component.java b/src/main/java/com/volmit/adapt/api/Component.java index a9046b3e..7e25240e 100644 --- a/src/main/java/com/volmit/adapt/api/Component.java +++ b/src/main/java/com/volmit/adapt/api/Component.java @@ -212,7 +212,7 @@ default void potion(Player p, PotionEffectType type, int power, int duration) { default double blockXP(Block block, double xp) { try { - return Math.round(xp * getBlockMultiplier(block)); + return Math.round(xp * getBlockMultiplier(block)); } catch (Exception e) { Adapt.verbose("Error in blockXP: " + e.getMessage()); } @@ -284,7 +284,8 @@ default boolean safeGiveItem(Player player, Item droppedItemEntity, ItemStack is droppedItemEntity.remove(); if (!player.getInventory().addItem(is).isEmpty()) { player.getWorld().dropItem(player.getLocation(), is); - } return true; + } + return true; } else { return false; } diff --git a/src/main/java/com/volmit/adapt/api/skill/SimpleSkill.java b/src/main/java/com/volmit/adapt/api/skill/SimpleSkill.java index bb23ee0e..8e664365 100644 --- a/src/main/java/com/volmit/adapt/api/skill/SimpleSkill.java +++ b/src/main/java/com/volmit/adapt/api/skill/SimpleSkill.java @@ -154,6 +154,7 @@ public boolean checkValidEntity(EntityType e) { Adapt.verbose("EntityType " + e.name() + "wasChecked"); return !e.isAlive() || !ItemListings.getInvalidDamageableEntities().contains(e); } + @Override public String getDisplayName() { return displayName == null ? Skill.super.getDisplayName() : (C.RESET + "" + C.BOLD + getColor().toString() + getEmojiName() + " " + displayName); diff --git a/src/main/java/com/volmit/adapt/api/value/MaterialValue.java b/src/main/java/com/volmit/adapt/api/value/MaterialValue.java index 8090d3a4..64d91ede 100644 --- a/src/main/java/com/volmit/adapt/api/value/MaterialValue.java +++ b/src/main/java/com/volmit/adapt/api/value/MaterialValue.java @@ -21,6 +21,7 @@ import com.google.gson.Gson; import com.volmit.adapt.Adapt; import com.volmit.adapt.AdaptConfig; +import com.volmit.adapt.api.recipe.AdaptRecipe; import com.volmit.adapt.util.Form; import com.volmit.adapt.util.IO; import com.volmit.adapt.util.JSONObject; @@ -43,10 +44,7 @@ public class MaterialValue { AdaptConfig.get().getValue().getValueMutlipliers().forEach((k, v) -> { try { Material m = Material.valueOf(k.toUpperCase()); - - if (m != null) { - valueMultipliers.put(m, v); - } + valueMultipliers.put(m, v); } catch (Exception e) { Adapt.verbose("Invalid material value multiplier: " + k); } @@ -100,7 +98,7 @@ public static void debugValue(Material m) { private static void debugValue(Material m, int ind, int x, Set ignore) { PrecisionStopwatch p = PrecisionStopwatch.start(); - Adapt.info(Form.repeat(" ", ind) + m.name() + ": " + getValue(m) + (x == 1 ? "" : " (x" + x + ")")); + Adapt.verbose(Form.repeat(" ", ind) + m.name() + ": " + getValue(m) + (x == 1 ? "" : " (x" + x + ")")); int r = 0; for (MaterialRecipe i : getRecipes(m)) { @@ -109,9 +107,13 @@ private static void debugValue(Material m, int ind, int x, Set i } ignore.add(i); + if (ignore.size() > AdaptConfig.get().getMaxRecipeListPrecaution()) { + Adapt.verbose("Avoiding infinite loop"); + return; + } int o = i.getOutput().getAmount(); - Adapt.info(Form.repeat(" ", ind) + "# Recipe [" + ind + "x" + r + (o == 1 ? "]" : "] (x" + o + ")")); + Adapt.verbose(Form.repeat(" ", ind) + "# Recipe [" + ind + "x" + r + (o == 1 ? "]" : "] (x" + o + ") ")); for (MaterialCount j : i.getInput()) { debugValue(j.getMaterial(), ind + 1, j.getAmount(), ignore); @@ -119,12 +121,11 @@ private static void debugValue(Material m, int ind, int x, Set i r++; } - Adapt.info(Form.repeat(" ", ind) + " took " + Form.duration(p.getMilliseconds(), 0)); + Adapt.verbose(Form.repeat(" ", ind) + " took " + Form.duration(p.getMilliseconds(), 0)); } private static double getMultiplier(Material m) { Double d = AdaptConfig.get().getValue().getValueMutlipliers().get(m); - return d == null ? 1 : d; } @@ -136,56 +137,51 @@ private static double getValue(Material m, Set ignore) { if (get().value.containsKey(m)) { return get().value.get(m); } - double v = AdaptConfig.get().getValue().getBaseValue(); - List recipes = getRecipes(m); - if (recipes.isEmpty()) { - get().value.put(m, v * getMultiplier(m)); + get().value.put(m, v * getMultiplier(m)); // No recipes, just use base value, if no base value then 1 } else { List d = new ArrayList<>(); for (MaterialRecipe i : recipes) { if (ignore.contains(i)) { continue; } - ignore.add(i); - double vx = v; - for (MaterialCount j : i.getInput()) { vx += getValue(j.getMaterial(), ignore); } - d.add(vx / i.getOutput().getAmount()); } - if (d.size() > 0) { v += d.stream().mapToDouble(i -> i).average().getAsDouble(); } + if (v > AdaptConfig.get().getMaxRecipeListPrecaution()) { + get().value.put(m,(v/10 + 1) * getMultiplier(m)); + } else { + get().value.put(m, v); + } - get().value.put(m, v); } - return get().value.get(m); } private static List getRecipes(Material mat) { List r = new ArrayList<>(); - try { ItemStack is = new ItemStack(mat); - try { is.setDurability((short) -1); } catch (Throwable e) { Adapt.verbose("Failed to set durability of " + mat.name()); } - Bukkit.getRecipesFor(is).forEach(i -> { + if (i instanceof AdaptRecipe) { + Adapt.verbose("Skipping Adapt Recipe to prevent duplicates, " + mat.name() + " -> " + ((AdaptRecipe) i).getKey() + ""); + return; + } MaterialRecipe rx = toMaterial(i); - if (rx != null) { r.add(rx); } @@ -193,7 +189,6 @@ private static List getRecipes(Material mat) { } catch (Throwable e) { Adapt.verbose("Failed to get recipes for " + mat.name()); } - return r; } @@ -211,7 +206,7 @@ private static MaterialRecipe toMaterial(Recipe r) { .build(); Map f = new HashMap<>(); for (ItemStack i : recipe.getIngredientMap().values()) { - if (i == null || i.getType() == null || i.getType().isAir()) { + if (i == null || i.getType().isAir()) { continue; } diff --git a/src/main/java/com/volmit/adapt/content/adaptation/crafting/CraftingDeconstruction.java b/src/main/java/com/volmit/adapt/content/adaptation/crafting/CraftingDeconstruction.java index 5c28b666..7f677e70 100644 --- a/src/main/java/com/volmit/adapt/content/adaptation/crafting/CraftingDeconstruction.java +++ b/src/main/java/com/volmit/adapt/content/adaptation/crafting/CraftingDeconstruction.java @@ -18,7 +18,9 @@ package com.volmit.adapt.content.adaptation.crafting; +import com.volmit.adapt.Adapt; import com.volmit.adapt.api.adaptation.SimpleAdaptation; +import com.volmit.adapt.api.recipe.AdaptRecipe; import com.volmit.adapt.util.C; import com.volmit.adapt.util.Element; import com.volmit.adapt.util.J; From 3a9eae42d979041f2c50144d0d72c48e068069df Mon Sep 17 00:00:00 2001 From: Brian Neumann-Fopiano Date: Sat, 29 Oct 2022 00:28:13 -0700 Subject: [PATCH 8/8] Many Fixes --- build.gradle | 2 +- .../java/com/volmit/adapt/api/adaptation/Adaptation.java | 3 +++ src/main/java/com/volmit/adapt/api/skill/Skill.java | 1 + .../java/com/volmit/adapt/api/world/AdaptComponent.java | 5 ++++- .../content/adaptation/architect/ArchitectGlass.java | 1 - .../content/adaptation/discovery/DiscoveryArmor.java | 3 +++ .../adaptation/excavation/ExcavationOmniTool.java | 9 +++++---- .../content/adaptation/pickaxe/PickaxeVeinminer.java | 1 - .../com/volmit/adapt/content/skill/SkillArchitect.java | 1 - .../java/com/volmit/adapt/content/skill/SkillAxes.java | 2 +- .../com/volmit/adapt/content/skill/SkillExcavation.java | 4 ++-- .../java/com/volmit/adapt/content/skill/SkillHunter.java | 4 +++- .../com/volmit/adapt/content/skill/SkillPickaxes.java | 9 +++++---- 13 files changed, 28 insertions(+), 17 deletions(-) diff --git a/build.gradle b/build.gradle index 75e592f6..973315c6 100644 --- a/build.gradle +++ b/build.gradle @@ -23,7 +23,7 @@ plugins { id "de.undercouch.download" version "5.0.1" } -version '1.4.11-1.19.2' +version '1.4.12-1.19.2' def nmsVersion = "1.19.2" //[NMS] def apiVersion = '1.19' def specialSourceVersion = '1.11.0' //[NMS] diff --git a/src/main/java/com/volmit/adapt/api/adaptation/Adaptation.java b/src/main/java/com/volmit/adapt/api/adaptation/Adaptation.java index 67e182fd..52b72d77 100644 --- a/src/main/java/com/volmit/adapt/api/adaptation/Adaptation.java +++ b/src/main/java/com/volmit/adapt/api/adaptation/Adaptation.java @@ -186,6 +186,9 @@ private boolean hasBypass(Player p, Location l) { default boolean hasAdaptation(Player p) { try { + if (p == null) { + return false; + } if (!this.getSkill().isEnabled()) { Adapt.verbose("Skill " + this.getSkill().getName() + " is disabled. Skipping adaptation " + this.getName()); this.unregister(); diff --git a/src/main/java/com/volmit/adapt/api/skill/Skill.java b/src/main/java/com/volmit/adapt/api/skill/Skill.java index a2586440..8e551d34 100644 --- a/src/main/java/com/volmit/adapt/api/skill/Skill.java +++ b/src/main/java/com/volmit/adapt/api/skill/Skill.java @@ -129,6 +129,7 @@ default void xp(Player p, Location at, double xp) { if (xp > 50) { vfxXP(p, at, (int) xp); } + Adapt.verbose("Gave " + p.getName() + " " + xp + " xp in " + getName() + " " + this.getClass() ); } catch (Exception e) { Adapt.verbose("Failed to give xp to " + p.getName() + " for " + getName() + " (" + xp + ")"); } diff --git a/src/main/java/com/volmit/adapt/api/world/AdaptComponent.java b/src/main/java/com/volmit/adapt/api/world/AdaptComponent.java index 0f6223af..1c5ef7c9 100644 --- a/src/main/java/com/volmit/adapt/api/world/AdaptComponent.java +++ b/src/main/java/com/volmit/adapt/api/world/AdaptComponent.java @@ -45,6 +45,10 @@ default boolean isMelee(ItemStack is) { return isTool(is); } + default boolean isXpBlock(Material material) { + return material.equals(Material.EXPERIENCE_BOTTLE); + } + default boolean isRanged(ItemStack it) { if (isItem(it)) { return switch (it.getType()) { @@ -108,7 +112,6 @@ default boolean isShovel(ItemStack it) { default -> false; }; } - return false; } diff --git a/src/main/java/com/volmit/adapt/content/adaptation/architect/ArchitectGlass.java b/src/main/java/com/volmit/adapt/content/adaptation/architect/ArchitectGlass.java index bed2d31e..47fa4329 100644 --- a/src/main/java/com/volmit/adapt/content/adaptation/architect/ArchitectGlass.java +++ b/src/main/java/com/volmit/adapt/content/adaptation/architect/ArchitectGlass.java @@ -70,7 +70,6 @@ public void on(BlockBreakEvent e) { J.a(() -> vfxSingleCubeOutline(e.getBlock(), Particle.REVERSE_PORTAL)); } e.getBlock().breakNaturally(); - xp(p, 3); } } } diff --git a/src/main/java/com/volmit/adapt/content/adaptation/discovery/DiscoveryArmor.java b/src/main/java/com/volmit/adapt/content/adaptation/discovery/DiscoveryArmor.java index d550fb2c..10f01ec4 100644 --- a/src/main/java/com/volmit/adapt/content/adaptation/discovery/DiscoveryArmor.java +++ b/src/main/java/com/volmit/adapt/content/adaptation/discovery/DiscoveryArmor.java @@ -106,6 +106,9 @@ private double getStrength(double factor) { @Override public void onTick() { for (Player p : Bukkit.getOnlinePlayers()) { + if (p == null || !p.isOnline()) { + continue; + } if (!hasAdaptation(p)) { Collection c = p.getAttribute(Attribute.GENERIC_ARMOR).getModifiers(); for (AttributeModifier i : new ArrayList<>(c)) { diff --git a/src/main/java/com/volmit/adapt/content/adaptation/excavation/ExcavationOmniTool.java b/src/main/java/com/volmit/adapt/content/adaptation/excavation/ExcavationOmniTool.java index 0709cacf..af524d20 100644 --- a/src/main/java/com/volmit/adapt/content/adaptation/excavation/ExcavationOmniTool.java +++ b/src/main/java/com/volmit/adapt/content/adaptation/excavation/ExcavationOmniTool.java @@ -125,11 +125,12 @@ public void on(EntityDamageByEntityEvent e) { @EventHandler(priority = EventPriority.HIGH) public void on(BlockBreakEvent e) { Player p = e.getPlayer(); - if (!hasAdaptation(p) && validateTool(p.getInventory().getItemInMainHand())) { - e.setCancelled(true); - return; + if (validateTool(p.getInventory().getItemInMainHand())) { + if (!hasAdaptation(p)) { + e.setCancelled(true); + return; + } } - xp(p, 3); } @EventHandler(priority = EventPriority.HIGH) diff --git a/src/main/java/com/volmit/adapt/content/adaptation/pickaxe/PickaxeVeinminer.java b/src/main/java/com/volmit/adapt/content/adaptation/pickaxe/PickaxeVeinminer.java index 65e289af..aa7ae350 100644 --- a/src/main/java/com/volmit/adapt/content/adaptation/pickaxe/PickaxeVeinminer.java +++ b/src/main/java/com/volmit/adapt/content/adaptation/pickaxe/PickaxeVeinminer.java @@ -99,7 +99,6 @@ public void on(BlockBreakEvent e) { J.s(() -> { for (Location l : blockMap.keySet()) { Block b = e.getBlock().getWorld().getBlockAt(l); - xp(p, 3); if (getPlayer(p).getData().getSkillLines() != null && getPlayer(p).getData().getSkillLines().get("pickaxe").getAdaptations() != null && getPlayer(p).getData().getSkillLines().get("pickaxe").getAdaptations().get("pickaxe-autosmelt") != null && getPlayer(p).getData().getSkillLines().get("pickaxe").getAdaptations().get("pickaxe-autosmelt").getLevel() > 0) { if (getPlayer(p).getData().getSkillLines() != null && getPlayer(p).getData().getSkillLines().get("pickaxe").getAdaptations() != null && getPlayer(p).getData().getSkillLines().get("pickaxe").getAdaptations().get("pickaxe-drop-to-inventory") != null && getPlayer(p).getData().getSkillLines().get("pickaxe").getAdaptations().get("pickaxe-drop-to-inventory").getLevel() > 0) { PickaxeAutosmelt.autosmeltBlockDTI(b, p); diff --git a/src/main/java/com/volmit/adapt/content/skill/SkillArchitect.java b/src/main/java/com/volmit/adapt/content/skill/SkillArchitect.java index 16b87b2d..9841e0e8 100644 --- a/src/main/java/com/volmit/adapt/content/skill/SkillArchitect.java +++ b/src/main/java/com/volmit/adapt/content/skill/SkillArchitect.java @@ -123,7 +123,6 @@ public void on(BlockPlaceEvent e) { double v = getValue(e.getBlock()) * getConfig().xpValueMultiplier; getPlayer(p).getData().addStat("blocks.placed", 1); getPlayer(p).getData().addStat("blocks.placed.value", v); - MaterialValue.debugValue(e.getBlock().getType()); if (cooldowns.containsKey(p)) { if (cooldowns.get(p) + getConfig().cooldownDelay > System.currentTimeMillis()) { return; diff --git a/src/main/java/com/volmit/adapt/content/skill/SkillAxes.java b/src/main/java/com/volmit/adapt/content/skill/SkillAxes.java index 78f5e3cf..d0cbdb02 100644 --- a/src/main/java/com/volmit/adapt/content/skill/SkillAxes.java +++ b/src/main/java/com/volmit/adapt/content/skill/SkillAxes.java @@ -171,7 +171,7 @@ public void on(BlockBreakEvent e) { } cooldowns.put(p, System.currentTimeMillis()); - J.a(() -> xp(p, e.getBlock().getLocation().clone().add(0.5, 0.5, 0.5), blockXP(e.getBlock(), v))); + xp(p, e.getBlock().getLocation().clone().add(0.5, 0.5, 0.5), blockXP(e.getBlock(), v)); } } diff --git a/src/main/java/com/volmit/adapt/content/skill/SkillExcavation.java b/src/main/java/com/volmit/adapt/content/skill/SkillExcavation.java index 630a48b0..f8d46d76 100644 --- a/src/main/java/com/volmit/adapt/content/skill/SkillExcavation.java +++ b/src/main/java/com/volmit/adapt/content/skill/SkillExcavation.java @@ -18,6 +18,7 @@ package com.volmit.adapt.content.skill; +import com.volmit.adapt.Adapt; import com.volmit.adapt.AdaptConfig; import com.volmit.adapt.api.advancement.AdaptAdvancement; import com.volmit.adapt.api.skill.SimpleSkill; @@ -161,8 +162,7 @@ public void on(BlockBreakEvent e) { } cooldowns.put(p, System.currentTimeMillis()); double v = getValue(e.getBlock().getType()); - - J.a(() -> xp(p, e.getBlock().getLocation().clone().add(0.5, 0.5, 0.5), blockXP(e.getBlock(), v))); + xp(p, e.getBlock().getLocation().clone().add(0.5, 0.5, 0.5), blockXP(e.getBlock(), v)); } } } diff --git a/src/main/java/com/volmit/adapt/content/skill/SkillHunter.java b/src/main/java/com/volmit/adapt/content/skill/SkillHunter.java index c269788f..5c1a5044 100644 --- a/src/main/java/com/volmit/adapt/content/skill/SkillHunter.java +++ b/src/main/java/com/volmit/adapt/content/skill/SkillHunter.java @@ -102,7 +102,6 @@ public void on(PlayerInteractEvent e) { if (AdaptConfig.get().blacklistedWorlds.contains(p.getWorld().getName())) { return; } - if (!AdaptConfig.get().isXpInCreative() && (p.getGameMode().equals(GameMode.CREATIVE) || p.getGameMode().equals(GameMode.SPECTATOR))) { return; } @@ -122,6 +121,9 @@ public void on(PlayerInteractEvent e) { @EventHandler(priority = EventPriority.HIGHEST) public void on(EntityDeathEvent e) { + if (e.getEntity().getKiller() == null) { + return; + } if (!this.isEnabled()) { return; } diff --git a/src/main/java/com/volmit/adapt/content/skill/SkillPickaxes.java b/src/main/java/com/volmit/adapt/content/skill/SkillPickaxes.java index 0a2644bd..db7b3207 100644 --- a/src/main/java/com/volmit/adapt/content/skill/SkillPickaxes.java +++ b/src/main/java/com/volmit/adapt/content/skill/SkillPickaxes.java @@ -18,6 +18,7 @@ package com.volmit.adapt.content.skill; +import com.volmit.adapt.Adapt; import com.volmit.adapt.AdaptConfig; import com.volmit.adapt.api.skill.SimpleSkill; import com.volmit.adapt.api.world.AdaptPlayer; @@ -110,10 +111,6 @@ public void on(BlockBreakEvent e) { } if (isPickaxe(p.getInventory().getItemInMainHand())) { double v = getValue(e.getBlock().getType()); - if (p.getInventory().getItemInMainHand().getEnchantments().containsKey(Enchantment.SILK_TOUCH)) { - xp(p, 5); - return; - } getPlayer(p).getData().addStat("pickaxe.blocks.broken", 1); getPlayer(p).getData().addStat("pickaxe.blocks.value", getValue(e.getBlock().getBlockData())); if (cooldowns.containsKey(p)) { @@ -124,6 +121,10 @@ public void on(BlockBreakEvent e) { } } cooldowns.put(p, System.currentTimeMillis()); + if (p.getInventory().getItemInMainHand().getEnchantments().containsKey(Enchantment.SILK_TOUCH)) { + xp(p, 5); + return; + } J.a(() -> xp(p, e.getBlock().getLocation().clone().add(0.5, 0.5, 0.5), blockXP(e.getBlock(), v))); } }