Skip to content

Commit 90e3e66

Browse files
committed
1.7 - Rework SortSystem, fixing some bugs with DoubleChest sorting and block accessing issues.
Inventory Holders are more efficiently organized with this update, as a lot of logic was rather over-engineered. Only top-level change with this update is that the sort command now gives feedback when sorting has been completed.
1 parent 3e9be4e commit 90e3e66

File tree

12 files changed

+231
-304
lines changed

12 files changed

+231
-304
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>me.setloth</groupId>
88
<artifactId>ModificationMaster</artifactId>
9-
<version>1.6</version>
9+
<version>1.7</version>
1010
<packaging>jar</packaging>
1111

1212
<name>ModificationMaster</name>

src/main/java/me/setloth/modificationMaster/ModificationMaster.java

Lines changed: 18 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,18 @@ public final class ModificationMaster extends JavaPlugin {
1818

1919
static ModificationMaster INSTANCE;
2020

21+
public static Plugin instance() {
22+
return INSTANCE;
23+
}
24+
25+
public static void log(String msg) {
26+
log(msg, Level.INFO);
27+
}
28+
29+
public static void log(String msg, Level level) {
30+
INSTANCE.getLogger().log(level, msg);
31+
}
32+
2133
@Override
2234
@SuppressWarnings("all")
2335
public void onEnable() {
@@ -27,11 +39,12 @@ public void onEnable() {
2739
String ver = this.getPluginMeta().getVersion();
2840
String latestVer = VersionChecker.latestVersion();
2941

30-
log("Initializing plugin version "+ver);
42+
log("Initializing plugin version " + ver);
3143
if (!ver.equals(latestVer)) {
32-
log("\n\nPlugin is outdated!\nYour Version: "+ver+"\nLatest Version: "+latestVer+"\n\nFetch" +
33-
" " +
34-
"updates at https://github.com/Setloth/ModificationMaster\n\n", Level.WARNING);
44+
log("\n\nPlugin is outdated!\nYour Version: " + ver + "\nLatest Version: " + latestVer + "\n\nFetch" +
45+
" updates at https://github.com/Setloth/ModificationMaster\n\n", Level.WARNING);
46+
} else {
47+
log("\n\nPlugin is up to date at " + latestVer + "\n\nFetch updates at https://github.com/Setloth/ModificationMaster\n\n");
3548
}
3649

3750
// Plugin startup logic
@@ -46,24 +59,12 @@ public void onEnable() {
4659
Objects.requireNonNull(getServer().getPluginCommand("craft")).setExecutor(new Craft());
4760
Objects.requireNonNull(getServer().getPluginCommand("veintoggle")).setExecutor(new VeinToggle());
4861

49-
log("Done! Took: "+(System.currentTimeMillis()-start)+" ms");
62+
log("Done! Took: " + (System.currentTimeMillis() - start) + " ms");
5063
}
5164

5265
@Override
5366
public void onDisable() {
5467
// Plugin shutdown logic
5568
log("Goodbye :(");
5669
}
57-
58-
public static Plugin instance() {
59-
return INSTANCE;
60-
}
61-
62-
public static void log(String msg) {
63-
log(msg, Level.INFO);
64-
}
65-
66-
public static void log(String msg, Level level) {
67-
INSTANCE.getLogger().log(level, msg);
68-
}
6970
}

src/main/java/me/setloth/modificationMaster/commands/Sort.java

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
package me.setloth.modificationMaster.commands;
22

3-
import me.setloth.modificationMaster.util.Utility;
3+
import me.setloth.modificationMaster.util.SortSystem;
4+
import net.kyori.adventure.text.Component;
45
import org.bukkit.block.Block;
56
import org.bukkit.block.BlockState;
7+
import org.bukkit.block.DoubleChest;
68
import org.bukkit.command.Command;
79
import org.bukkit.command.CommandExecutor;
810
import org.bukkit.command.CommandSender;
@@ -31,11 +33,17 @@ public boolean onCommand(@NotNull CommandSender commandSender, @NotNull Command
3133

3234
BlockState bs = b.getState();
3335

34-
if (!(bs instanceof InventoryHolder ih)) return false;
35-
inv = ih.getInventory();
36+
if (bs instanceof InventoryHolder ih) {
37+
if (ih instanceof DoubleChest dc) {
38+
inv = dc.getInventory();
39+
} else inv = ih.getInventory();
40+
41+
} else return false;
3642
}
3743

38-
Utility.sort(inv);
44+
SortSystem.sort(inv);
45+
p.sendMessage(inv.getType().defaultTitle().appendSpace().append(Component.text("has been " +
46+
"sorted")));
3947

4048
return true;
4149
}
Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package me.setloth.modificationMaster.commands;
22

3-
import me.setloth.modificationMaster.util.VeinToggled;
3+
import me.setloth.modificationMaster.util.VeinSystem;
44
import org.bukkit.command.Command;
55
import org.bukkit.command.CommandExecutor;
66
import org.bukkit.command.CommandSender;
@@ -11,9 +11,9 @@ public class VeinToggle implements CommandExecutor {
1111
public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) {
1212
if (!(sender instanceof Player p)) return true;
1313

14-
VeinToggled.toggleVeinPlayer(p);
14+
VeinSystem.toggleVeinPlayer(p);
15+
VeinSystem.statusMessage(p);
1516

16-
VeinToggled.statusMessage(p);
1717
return true;
1818
}
1919
}
Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package me.setloth.modificationMaster.listeners;
22

3-
import me.setloth.modificationMaster.util.Utility;
4-
import me.setloth.modificationMaster.util.VeinToggled;
3+
import me.setloth.modificationMaster.util.VeinSystem;
54
import org.bukkit.block.Block;
65
import org.bukkit.entity.Player;
76
import org.bukkit.event.EventHandler;
@@ -16,28 +15,24 @@ public class BlockBreaking implements Listener {
1615
public void onBlockBreak(BlockBreakEvent event) {
1716
Player p = event.getPlayer();
1817

19-
if (!VeinToggled.isVeinToggled(p)) return;
18+
if (!VeinSystem.isVeinToggled(p)) return;
2019

2120
Block b = event.getBlock();
2221
ItemStack stack = p.getInventory().getItemInMainHand();
2322

2423
if (!b.isPreferredTool(stack)) return;
2524

26-
VeinToggled.toggleVeinPlayer(p);
25+
VeinSystem.toggleVeinPlayer(p);
2726

28-
if (Utility.isWood(b.getType())) {
29-
Utility.destroyBranch(p, b, false);
27+
if (VeinSystem.isWood(b.getType())) {
28+
VeinSystem.destroyBranch(p, b, false);
3029
}
31-
if (Utility.isVeinBlock(b.getType())) {
32-
Utility.destroyBranch(p, b, true);
30+
if (VeinSystem.isOreBlock(b.getType())) {
31+
VeinSystem.destroyBranch(p, b, true);
3332
}
3433

35-
VeinToggled.toggleVeinPlayer(p);
34+
VeinSystem.toggleVeinPlayer(p);
3635
}
3736

3837

39-
40-
41-
42-
4338
}

src/main/java/me/setloth/modificationMaster/listeners/RightClickToggle.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package me.setloth.modificationMaster.listeners;
22

3-
import me.setloth.modificationMaster.util.Utility;
4-
import me.setloth.modificationMaster.util.VeinToggled;
3+
import me.setloth.modificationMaster.util.VeinSystem;
54
import org.bukkit.block.Block;
65
import org.bukkit.entity.Player;
76
import org.bukkit.event.EventHandler;
@@ -28,11 +27,11 @@ public void onRightClick(PlayerInteractEvent event) {
2827
ItemStack stack = p.getInventory().getItemInMainHand();
2928
if (tb == null || !tb.isPreferredTool(stack)) return;
3029

31-
if (Utility.isWood(tb.getType()) || Utility.isVeinBlock(tb.getType())) { // only apply for
30+
if (VeinSystem.isWood(tb.getType()) || VeinSystem.isOreBlock(tb.getType())) { // only apply for
3231
// vein-mine able blocks
3332
event.setCancelled(true); // prevent action consequence
34-
VeinToggled.toggleVeinPlayer(event.getPlayer());
35-
VeinToggled.statusMessage(event.getPlayer());
33+
VeinSystem.toggleVeinPlayer(event.getPlayer());
34+
VeinSystem.statusMessage(event.getPlayer());
3635
}
3736

3837

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
package me.setloth.modificationMaster.util;
2+
3+
import org.bukkit.inventory.Inventory;
4+
import org.bukkit.inventory.ItemStack;
5+
import org.bukkit.inventory.PlayerInventory;
6+
7+
import java.util.*;
8+
9+
public class SortSystem {
10+
11+
12+
public static ItemStack[] combine(ItemStack[] items) {
13+
14+
ArrayList<ItemStack> combined = new ArrayList<>();
15+
16+
for (ItemStack item : items) {
17+
if (item == null || item.getAmount() == 0) continue;
18+
19+
boolean added = false;
20+
21+
for (ItemStack combinedItem : combined) {
22+
if (combinedItem.isSimilar(item)) {
23+
int maxStack = combinedItem.getMaxStackSize();
24+
int combinedAmount = combinedItem.getAmount() + item.getAmount();
25+
26+
if (combinedAmount <= maxStack) {
27+
combinedItem.setAmount(combinedAmount);
28+
added = true;
29+
30+
} else {
31+
combinedItem.setAmount(maxStack);
32+
item.setAmount(combinedAmount - maxStack);
33+
}
34+
}
35+
}
36+
37+
if (!added) combined.add(item);
38+
39+
}
40+
41+
ArrayList<ItemStack> sorted = new ArrayList<>();
42+
for (ItemStack item : combined) {
43+
if (sorted.contains(item)) continue;
44+
List<ItemStack> similar = combined.stream().filter(i -> i.isSimilar(item)).toList();
45+
sorted.addAll(similar);
46+
}
47+
48+
return sorted.toArray(new ItemStack[0]);
49+
}
50+
51+
52+
public static void sort(Inventory inv) {
53+
ItemStack[] contents = inv.getContents();
54+
if (inv instanceof PlayerInventory pi) {
55+
ItemStack[] storageContents = pi.getStorageContents();
56+
ItemStack[] hotBar = new ItemStack[9];
57+
System.arraycopy(storageContents, 0, hotBar, 0, 9);
58+
59+
ItemStack[] mainInventory = new ItemStack[storageContents.length - 9];
60+
System.arraycopy(storageContents, 9, mainInventory, 0, storageContents.length - 9);
61+
62+
ItemStack[] sortedMain = combine(mainInventory);
63+
64+
ItemStack[] combinedContents = new ItemStack[storageContents.length];
65+
66+
System.arraycopy(hotBar, 0, combinedContents, 0, 9);
67+
System.arraycopy(sortedMain, 0, combinedContents, 9, sortedMain.length);
68+
69+
pi.setStorageContents(combinedContents);
70+
} else {
71+
72+
inv.clear();
73+
inv.setContents(combine(contents));
74+
75+
}
76+
77+
}
78+
}

0 commit comments

Comments
 (0)