Skip to content

Commit 19974e0

Browse files
committed
Merge branch 'master' into feature/autofish
2 parents cdf1aa4 + 442dace commit 19974e0

File tree

7 files changed

+131
-98
lines changed

7 files changed

+131
-98
lines changed

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
<groupId>us.thezircon.play</groupId>
88
<artifactId>AutoPickup</artifactId>
9-
<version>1.4.7-DEVBUILD.2</version>
9+
<version>1.4.7-DEVBUILD.4</version>
1010
<packaging>jar</packaging>
1111

1212
<name>AutoPickup</name>

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;
@@ -51,8 +54,11 @@ public final class AutoPickup extends JavaPlugin {
5154
public static HashMap<String, PickupObjective> customItemPatch = new HashMap<>();
5255
public static HashSet<UUID> droppedItems = new HashSet<>();
5356

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

5763
private static AutoPickup instance;
5864

@@ -183,12 +189,17 @@ public void run() {
183189
@Override
184190
public void run() {
185191
try {
186-
droppedItems.removeIf(uuid -> (Bukkit.getEntity(uuid))==null);
187-
droppedItems.removeIf(uuid -> (Bukkit.getEntity(uuid)).isDead()); ///////
192+
droppedItems.removeIf(uuid -> {
193+
Entity entity = Bukkit.getEntity(uuid);
194+
return entity == null || entity.isDead();
195+
});
188196
} catch (NullPointerException ignored) {}
189197
}
190198
}.runTaskTimer(this, 6000L, 6000L); // 5 min
191199

200+
// Load auto smelt cache
201+
AutoSmeltUtils.loadFurnaceRecipes(smeltRecipeCache);
202+
192203
}
193204

194205

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/EntityDropItemEventListener.java

Lines changed: 37 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -34,44 +34,48 @@ public void onDrop(EntityDropItemEvent e) {
3434
}
3535

3636
UUID sheep = e.getEntity().getUniqueId();
37-
if (player_sheep_map.containsKey(sheep)) {
38-
Player player = Bukkit.getPlayer(player_sheep_map.get(sheep));
39-
if (!PLUGIN.autopickup_list.contains(player)) {
40-
return;
41-
}
37+
UUID playerUUID = player_sheep_map.remove(sheep); // Avoid duplicate lookups
38+
if (playerUUID == null) return;
39+
40+
Player player = Bukkit.getPlayer(playerUUID);
41+
if (player == null) return;
42+
43+
if (!PLUGIN.autopickup_list.contains(player)) {
44+
return;
45+
}
4246

43-
// Drops
44-
ItemStack drops = e.getItemDrop().getItemStack();
45-
e.getItemDrop().remove();
46-
HashMap<Integer, ItemStack> leftOver = player.getInventory().addItem(drops);
47-
if (leftOver.keySet().size()>0) {
48-
for (ItemStack item : leftOver.values()) {
49-
player.getWorld().dropItemNaturally(e.getItemDrop().getLocation(), item);
47+
// Drops
48+
ItemStack drops = e.getItemDrop().getItemStack();
49+
e.getItemDrop().remove();
50+
HashMap<Integer, ItemStack> leftOver = player.getInventory().addItem(drops);
51+
if (leftOver.keySet().size()>0) {
52+
for (ItemStack item : leftOver.values()) {
53+
player.getWorld().dropItemNaturally(e.getItemDrop().getLocation(), item);
54+
}
55+
if (doFullInvMSG) {
56+
long secondsLeft;
57+
long cooldown = 15000; // 15 sec
58+
if (AutoPickup.lastInvFullNotification.containsKey(player.getUniqueId())) {
59+
secondsLeft = (AutoPickup.lastInvFullNotification.get(player.getUniqueId())/1000)+ cooldown/1000 - (System.currentTimeMillis()/1000);
60+
} else {
61+
secondsLeft = 0;
5062
}
51-
if (doFullInvMSG) {
52-
long secondsLeft;
53-
long cooldown = 15000; // 15 sec
54-
if (AutoPickup.lastInvFullNotification.containsKey(player.getUniqueId())) {
55-
secondsLeft = (AutoPickup.lastInvFullNotification.get(player.getUniqueId())/1000)+ cooldown/1000 - (System.currentTimeMillis()/1000);
56-
} else {
57-
secondsLeft = 0;
58-
}
59-
if (secondsLeft<=0) {
60-
player.sendMessage(PLUGIN.getMsg().getPrefix() + " " + PLUGIN.getMsg().getFullInventory());
61-
AutoPickup.lastInvFullNotification.put(player.getUniqueId(), System.currentTimeMillis());
62-
}
63+
if (secondsLeft<=0) {
64+
player.sendMessage(PLUGIN.getMsg().getPrefix() + " " + PLUGIN.getMsg().getFullInventory());
65+
AutoPickup.lastInvFullNotification.put(player.getUniqueId(), System.currentTimeMillis());
6366
}
6467
}
68+
}
6569

66-
Bukkit.getScheduler().runTaskAsynchronously(PLUGIN, new Runnable() {
67-
@Override
68-
public void run() {
69-
if (!player.hasPermission("autopickup.pickup.mined")) {
70-
PLUGIN.autopickup_list.remove(player);
71-
}
70+
Bukkit.getScheduler().runTaskAsynchronously(PLUGIN, new Runnable() {
71+
@Override
72+
public void run() {
73+
if (!player.hasPermission("autopickup.pickup.mined")) {
74+
PLUGIN.autopickup_list.remove(player);
7275
}
73-
});
74-
}
76+
}
77+
});
7578
}
76-
7779
}
80+
81+

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;
@@ -96,4 +97,16 @@ public void onJoin(PlayerJoinEvent e) {
9697
}
9798
}
9899

100+
@EventHandler
101+
public void onQuit(PlayerQuitEvent e) {
102+
103+
Player player = e.getPlayer();
104+
105+
PLUGIN.autopickup_list.remove(player);
106+
PLUGIN.auto_smelt_blocks.remove(player);
107+
PLUGIN.autopickup_list_mobs.remove(player);
108+
AutoPickup.lastInvFullNotification.remove(player.getUniqueId());
109+
110+
}
111+
99112
}

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)