mirror of
https://github.com/Auxilor/EcoEnchants.git
synced 2025-02-11 03:41:23 +01:00
Optimised Infernal Touch
This commit is contained in:
parent
0de24f775a
commit
228df89bf2
@ -1,10 +1,10 @@
|
|||||||
package com.willfp.ecoenchants.enchantments.ecoenchants.normal;
|
package com.willfp.ecoenchants.enchantments.ecoenchants.normal;
|
||||||
|
|
||||||
import com.willfp.ecoenchants.enchantments.EcoEnchant;
|
import com.willfp.ecoenchants.enchantments.EcoEnchant;
|
||||||
import com.willfp.ecoenchants.enchantments.EcoEnchants;
|
|
||||||
import com.willfp.ecoenchants.enchantments.util.EnchantChecks;
|
import com.willfp.ecoenchants.enchantments.util.EnchantChecks;
|
||||||
import com.willfp.ecoenchants.integrations.antigrief.AntigriefManager;
|
import com.willfp.ecoenchants.integrations.antigrief.AntigriefManager;
|
||||||
import com.willfp.ecoenchants.queue.DropQueue;
|
import com.willfp.ecoenchants.queue.DropQueue;
|
||||||
|
import com.willfp.ecoenchants.util.tuplets.Pair;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.GameMode;
|
import org.bukkit.GameMode;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
@ -18,10 +18,9 @@ import org.bukkit.inventory.FurnaceRecipe;
|
|||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
import org.bukkit.inventory.Recipe;
|
import org.bukkit.inventory.Recipe;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.*;
|
||||||
import java.util.Collection;
|
import java.util.concurrent.atomic.AtomicInteger;
|
||||||
import java.util.Iterator;
|
|
||||||
import java.util.List;
|
|
||||||
public final class InfernalTouch extends EcoEnchant {
|
public final class InfernalTouch extends EcoEnchant {
|
||||||
public InfernalTouch() {
|
public InfernalTouch() {
|
||||||
super(
|
super(
|
||||||
@ -29,6 +28,26 @@ public final class InfernalTouch extends EcoEnchant {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static final HashMap<Material, Pair<Material, Integer>> recipes = new HashMap<>();
|
||||||
|
private static final Set<Material> allowsFortune = new HashSet<>(Arrays.asList(Material.GOLD_INGOT, Material.IRON_INGOT));
|
||||||
|
|
||||||
|
static {
|
||||||
|
Iterator<Recipe> iterator = Bukkit.recipeIterator();
|
||||||
|
while (iterator.hasNext()) {
|
||||||
|
Recipe recipe = iterator.next();
|
||||||
|
if (!(recipe instanceof FurnaceRecipe)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
FurnaceRecipe furnaceRecipe = (FurnaceRecipe) recipe;
|
||||||
|
recipes.put(furnaceRecipe.getInput().getType(), new Pair<>(furnaceRecipe.getResult().getType(), (int) furnaceRecipe.getExperience()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static Pair<Material, Integer> getOutput(Material input) {
|
||||||
|
Optional<Pair<Material, Integer>> matching = recipes.entrySet().parallelStream().filter(materialPairEntry -> materialPairEntry.getKey().equals(input)).map(Map.Entry::getValue).findFirst();
|
||||||
|
return matching.orElse(new Pair<>(input, 0));
|
||||||
|
}
|
||||||
|
|
||||||
// START OF LISTENERS
|
// START OF LISTENERS
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
@ -49,62 +68,30 @@ public final class InfernalTouch extends EcoEnchant {
|
|||||||
|
|
||||||
if (!AntigriefManager.canBreakBlock(player, block)) return;
|
if (!AntigriefManager.canBreakBlock(player, block)) return;
|
||||||
|
|
||||||
|
|
||||||
Collection<ItemStack> drops = new ArrayList<>();
|
Collection<ItemStack> drops = new ArrayList<>();
|
||||||
event.getItems().forEach((item -> {
|
event.getItems().forEach((item -> {
|
||||||
drops.add(item.getItemStack());
|
drops.add(item.getItemStack());
|
||||||
}));
|
}));
|
||||||
|
|
||||||
List<ItemStack> newDrops = new ArrayList<ItemStack>();
|
AtomicInteger experience = new AtomicInteger(0);
|
||||||
int experience = 0;
|
int fortune = EnchantChecks.getMainhandLevel(player, Enchantment.LOOT_BONUS_BLOCKS);
|
||||||
|
|
||||||
for (ItemStack drop : drops) {
|
|
||||||
if (!this.getConfig().getBool(EcoEnchants.CONFIG_LOCATION + "smelt-cobblestone")) {
|
|
||||||
if (drop.getType().equals(Material.COBBLESTONE)) {
|
|
||||||
newDrops.add(drop);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Iterator<Recipe> iterator = Bukkit.recipeIterator();
|
drops.forEach(itemStack -> {
|
||||||
boolean couldSmelt = false;
|
itemStack.setType(getOutput(itemStack.getType()).getFirst());
|
||||||
Recipe recipe = null;
|
experience.addAndGet(getOutput(itemStack.getType()).getSecond());
|
||||||
while (iterator.hasNext()) {
|
|
||||||
recipe = iterator.next();
|
|
||||||
if (!(recipe instanceof FurnaceRecipe)) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if (((FurnaceRecipe) recipe).getInput().getType() == drop.getType()) {
|
|
||||||
couldSmelt = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (couldSmelt) {
|
|
||||||
drop.setType(recipe.getResult().getType());
|
|
||||||
experience += (int) ((FurnaceRecipe) recipe).getExperience();
|
|
||||||
|
|
||||||
if(drop.getType().equals(Material.IRON_INGOT)) {
|
if(fortune > 0 && allowsFortune.contains(itemStack.getType())) {
|
||||||
experience += 1;
|
itemStack.setAmount((int) Math.ceil(1/((double) fortune + 2) + ((double) fortune + 1)/2));
|
||||||
if(EnchantChecks.mainhand(player, Enchantment.LOOT_BONUS_BLOCKS)) {
|
|
||||||
int level = EnchantChecks.getMainhandLevel(player, LOOT_BONUS_BLOCKS);
|
|
||||||
drop.setAmount((int) Math.ceil(1/((double) level + 2) + ((double) level + 1)/2));
|
|
||||||
}
|
|
||||||
} else if(drop.getType().equals(Material.GOLD_INGOT)) {
|
|
||||||
if(EnchantChecks.mainhand(player, Enchantment.LOOT_BONUS_BLOCKS)) {
|
|
||||||
int level = EnchantChecks.getMainhandLevel(player, LOOT_BONUS_BLOCKS);
|
|
||||||
drop.setAmount((int) Math.ceil(1/((double) level + 2) + ((double) level + 1)/2));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
newDrops.add(drop);
|
});
|
||||||
}
|
|
||||||
|
|
||||||
event.getItems().clear();
|
event.getItems().clear();
|
||||||
|
|
||||||
new DropQueue(player)
|
new DropQueue(player)
|
||||||
.setLocation(block.getLocation())
|
.setLocation(block.getLocation())
|
||||||
.addItems(newDrops)
|
.addItems(drops)
|
||||||
.addXP(experience)
|
.addXP(experience.get())
|
||||||
.push();
|
.push();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -21,4 +21,4 @@ general-config:
|
|||||||
- stone_switcher
|
- stone_switcher
|
||||||
|
|
||||||
config:
|
config:
|
||||||
smelt-cobblestone: true #Smelt cobblestone into stone
|
# No config is available for this enchantment
|
Loading…
Reference in New Issue
Block a user