Skip to content

Commit 917f174

Browse files
committed
Autosmelt optimizations
1 parent 3b0d3e8 commit 917f174

File tree

5 files changed

+93
-64
lines changed

5 files changed

+93
-64
lines changed

src/main/java/us/thezircon/play/autopickup/AutoPickup.java

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
11
package us.thezircon.play.autopickup;
22

33
import org.bukkit.Bukkit;
4+
import org.bukkit.Material;
45
import org.bukkit.configuration.InvalidConfigurationException;
56
import org.bukkit.configuration.file.FileConfiguration;
67
import org.bukkit.configuration.file.YamlConfiguration;
8+
import org.bukkit.entity.Entity;
79
import org.bukkit.entity.Player;
10+
import org.bukkit.inventory.FurnaceRecipe;
811
import org.bukkit.plugin.java.JavaPlugin;
912
import org.bukkit.scheduler.BukkitRunnable;
1013
import us.thezircon.play.autopickup.commands.AutoDrops;
@@ -49,8 +52,11 @@ public final class AutoPickup extends JavaPlugin {
4952
public static HashMap<String, PickupObjective> customItemPatch = new HashMap<>();
5053
public static HashSet<UUID> droppedItems = new HashSet<>();
5154

55+
// Cache smeling recipie list
56+
public static final Map<Material, FurnaceRecipe> smeltRecipeCache = new HashMap<>();
57+
5258
// Notification Cooldown
53-
public static HashMap<UUID, Long> lastInvFullNotification = new HashMap<>();
59+
public static WeakHashMap<UUID, Long> lastInvFullNotification = new WeakHashMap<>();
5460

5561
private static AutoPickup instance;
5662

@@ -179,12 +185,17 @@ public void run() {
179185
@Override
180186
public void run() {
181187
try {
182-
droppedItems.removeIf(uuid -> (Bukkit.getEntity(uuid))==null);
183-
droppedItems.removeIf(uuid -> (Bukkit.getEntity(uuid)).isDead()); ///////
188+
droppedItems.removeIf(uuid -> {
189+
Entity entity = Bukkit.getEntity(uuid);
190+
return entity == null || entity.isDead();
191+
});
184192
} catch (NullPointerException ignored) {}
185193
}
186194
}.runTaskTimer(this, 6000L, 6000L); // 5 min
187195

196+
// Load auto smelt cache
197+
AutoSmeltUtils.loadFurnaceRecipes(smeltRecipeCache);
198+
188199
}
189200

190201

src/main/java/us/thezircon/play/autopickup/listeners/BlockDropItemEventListener.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
import org.bukkit.event.block.BlockDropItemEvent;
1111
import org.bukkit.inventory.ItemStack;
1212
import us.thezircon.play.autopickup.AutoPickup;
13-
import us.thezircon.play.autopickup.utils.AutoSmelt;
13+
import us.thezircon.play.autopickup.utils.AutoSmeltUtils;
1414
import us.thezircon.play.autopickup.utils.HexFormat;
1515

1616
import java.util.HashMap;
@@ -64,7 +64,7 @@ public void onDrop(BlockDropItemEvent e) {
6464
}
6565

6666
if (doSmelt) {
67-
drop = AutoSmelt.smelt(drop, player);
67+
drop = AutoSmeltUtils.smelt(drop, player);
6868
}
6969

7070
HashMap<Integer, ItemStack> leftOver = player.getInventory().addItem(drop);

src/main/java/us/thezircon/play/autopickup/listeners/PlayerJoinEventListener.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import org.bukkit.event.EventHandler;
1212
import org.bukkit.event.Listener;
1313
import org.bukkit.event.player.PlayerJoinEvent;
14+
import org.bukkit.event.player.PlayerQuitEvent;
1415
import us.thezircon.play.autopickup.AutoPickup;
1516
import us.thezircon.play.autopickup.utils.PickupPlayer;
1617
import us.thezircon.play.autopickup.utils.VersionChk;
@@ -84,4 +85,16 @@ public void onJoin(PlayerJoinEvent e) {
8485
}
8586
}
8687

88+
@EventHandler
89+
public void onQuit(PlayerQuitEvent e) {
90+
91+
Player player = e.getPlayer();
92+
93+
PLUGIN.autopickup_list.remove(player);
94+
PLUGIN.auto_smelt_blocks.remove(player);
95+
PLUGIN.autopickup_list_mobs.remove(player);
96+
AutoPickup.lastInvFullNotification.remove(player.getUniqueId());
97+
98+
}
99+
87100
}

src/main/java/us/thezircon/play/autopickup/utils/AutoSmelt.java

Lines changed: 0 additions & 59 deletions
This file was deleted.
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
package us.thezircon.play.autopickup.utils;
2+
3+
import org.bukkit.Bukkit;
4+
import org.bukkit.Material;
5+
import org.bukkit.Tag;
6+
import org.bukkit.entity.Player;
7+
import org.bukkit.inventory.*;
8+
import us.thezircon.play.autopickup.AutoPickup;
9+
10+
import java.util.*;
11+
12+
import static us.thezircon.play.autopickup.AutoPickup.smeltRecipeCache;
13+
14+
public class AutoSmeltUtils {
15+
16+
private static final AutoPickup PLUGIN = AutoPickup.getPlugin(AutoPickup.class);
17+
18+
public boolean isAutoSmeltEnabled = false;
19+
public static Material[] ignore = {Material.COAL_ORE, Material.REDSTONE_ORE, Material.DIAMOND_ORE, Material.EMERALD_ORE, Material.LAPIS_ORE, Material.NETHER_QUARTZ_ORE};
20+
public static List<Material> ignoreMaterials = Collections.unmodifiableList(Arrays.asList(ignore));
21+
22+
public boolean isEnabled() {
23+
return isAutoSmeltEnabled;
24+
}
25+
26+
public static void loadFurnaceRecipes(Map<Material, FurnaceRecipe> smeltRecipeCache) {
27+
Iterator<Recipe> iter = Bukkit.recipeIterator();
28+
while (iter.hasNext()) {
29+
Recipe recipe = iter.next();
30+
if (recipe instanceof FurnaceRecipe) {
31+
FurnaceRecipe furnaceRecipe = (FurnaceRecipe) recipe;
32+
Material inputType = furnaceRecipe.getInput().getType();
33+
// Only cache the first found recipe per material
34+
smeltRecipeCache.putIfAbsent(inputType, furnaceRecipe);
35+
}
36+
}
37+
}
38+
39+
40+
public static ItemStack smelt(ItemStack itemStack, Player player) {
41+
List<String> blacklist = PLUGIN.getBlacklistConf().getStringList("AutoSmeltBlacklist");
42+
43+
if (ignoreMaterials.contains(itemStack.getType()) || blacklist.contains(itemStack.getType().toString())) {
44+
return itemStack;
45+
}
46+
47+
// Special case: logs into charcoal
48+
if (Tag.LOGS_THAT_BURN.isTagged(itemStack.getType())) {
49+
player.giveExp(0); // Adjust XP if needed
50+
return new ItemStack(Material.CHARCOAL, itemStack.getAmount());
51+
}
52+
53+
FurnaceRecipe recipe = smeltRecipeCache.get(itemStack.getType());
54+
if (recipe != null) {
55+
ItemStack result = recipe.getResult().clone();
56+
result.setAmount(itemStack.getAmount());
57+
player.giveExp((int) (recipe.getExperience() * itemStack.getAmount()));
58+
return result;
59+
}
60+
61+
return itemStack;
62+
}
63+
64+
}

0 commit comments

Comments
 (0)