Skip to content

Commit e8da0cd

Browse files
authoredOct 26, 2019
Merge pull request Civcraft#13 from okx-code/civ14
refactoring and minor improvements
2 parents 933cacf + 38f70ea commit e8da0cd

35 files changed

+230
-253
lines changed
 

‎src/main/java/vg/civcraft/mc/civmodcore/CoreConfigManager.java

+5-5
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
package vg.civcraft.mc.civmodcore;
22

3-
import java.util.LinkedList;
3+
import org.bukkit.configuration.ConfigurationSection;
4+
import org.bukkit.configuration.file.FileConfiguration;
5+
6+
import java.util.ArrayList;
47
import java.util.List;
58
import java.util.function.Function;
69
import java.util.logging.Logger;
710

8-
import org.bukkit.configuration.ConfigurationSection;
9-
import org.bukkit.configuration.file.FileConfiguration;
10-
1111
public abstract class CoreConfigManager {
1212

1313
protected ACivMod plugin;
@@ -52,7 +52,7 @@ protected static <T> List<T> parseList(ConfigurationSection config, String key,
5252
if (!config.isList(key)) {
5353
return null;
5454
}
55-
List<T> result = new LinkedList<>();
55+
List<T> result = new ArrayList<>();
5656
for (String entry : config.getStringList(key)) {
5757
T item = function.apply(entry);
5858
if (item != null) {

‎src/main/java/vg/civcraft/mc/civmodcore/chatDialog/Dialog.java

+5-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package vg.civcraft.mc.civmodcore.chatDialog;
22

3-
import java.util.List;
4-
3+
import org.bukkit.Bukkit;
54
import org.bukkit.conversations.Conversation;
65
import org.bukkit.conversations.ConversationContext;
76
import org.bukkit.conversations.ConversationFactory;
@@ -10,6 +9,8 @@
109
import org.bukkit.entity.Player;
1110
import org.bukkit.plugin.java.JavaPlugin;
1211

12+
import java.util.List;
13+
1314
public abstract class Dialog {
1415

1516
protected Player player;
@@ -24,6 +25,8 @@ public Dialog(Player player, JavaPlugin plugin, final String toDisplay) {
2425
DialogManager.registerDialog(player, this);
2526
this.player = player;
2627

28+
Bukkit.getScheduler().runTask(plugin, player::closeInventory);
29+
2730
convo = new ConversationFactory(plugin).withModality(false).withLocalEcho(false)
2831
.withFirstPrompt(new StringPrompt() {
2932

‎src/main/java/vg/civcraft/mc/civmodcore/command/CommandHandler.java

+6-7
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,17 @@
11
package vg.civcraft.mc.civmodcore.command;
22

3-
import java.util.HashMap;
4-
import java.util.LinkedList;
5-
import java.util.List;
6-
import java.util.Map;
7-
83
import org.bukkit.Bukkit;
94
import org.bukkit.ChatColor;
105
import org.bukkit.command.CommandSender;
116
import org.bukkit.entity.Player;
12-
137
import vg.civcraft.mc.civmodcore.ratelimiting.RateLimiter;
148
import vg.civcraft.mc.civmodcore.util.TextUtil;
159

10+
import java.util.ArrayList;
11+
import java.util.HashMap;
12+
import java.util.List;
13+
import java.util.Map;
14+
1615
@Deprecated
1716
public abstract class CommandHandler {
1817

@@ -83,7 +82,7 @@ public List<String> complete(CommandSender sender, org.bukkit.command.Command cm
8382
completeArg = args[args.length - 1].toLowerCase();
8483
}
8584
if (completes == null) {
86-
completes = new LinkedList<String>();
85+
completes = new ArrayList<>();
8786
for (Player p : Bukkit.getOnlinePlayers()) {
8887
if (p.getName().toLowerCase().startsWith(completeArg)) {
8988
completes.add(p.getName());

‎src/main/java/vg/civcraft/mc/civmodcore/command/StandaloneCommand.java

+6-7
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,14 @@
11
package vg.civcraft.mc.civmodcore.command;
22

3-
import java.util.Collection;
4-
import java.util.LinkedList;
5-
import java.util.List;
6-
import java.util.function.Function;
7-
83
import org.bukkit.command.CommandSender;
94
import org.bukkit.entity.Player;
10-
115
import vg.civcraft.mc.civmodcore.ratelimiting.RateLimiter;
126

7+
import java.util.ArrayList;
8+
import java.util.Collection;
9+
import java.util.List;
10+
import java.util.function.Function;
11+
1312
public abstract class StandaloneCommand {
1413

1514
protected int minArgs = 0;
@@ -91,7 +90,7 @@ protected static List<String> doTabComplete(String arg, Collection<String> candi
9190
}
9291

9392
protected static <T> List<String> doTabComplete(String arg, Collection<T> suppliers, Function<T, String> function, boolean caseSensitive) {
94-
List<String> result = new LinkedList<>();
93+
List<String> result = new ArrayList<>();
9594
if (!caseSensitive) {
9695
arg = arg.toLowerCase();
9796
}

‎src/main/java/vg/civcraft/mc/civmodcore/command/StandaloneCommandHandler.java

+20-21
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,5 @@
11
package vg.civcraft.mc.civmodcore.command;
22

3-
import java.io.BufferedReader;
4-
import java.io.File;
5-
import java.io.IOException;
6-
import java.io.InputStream;
7-
import java.io.InputStreamReader;
8-
import java.lang.reflect.Field;
9-
import java.lang.reflect.InvocationTargetException;
10-
import java.lang.reflect.Method;
11-
import java.util.HashMap;
12-
import java.util.LinkedList;
13-
import java.util.List;
14-
import java.util.Map;
15-
import java.util.jar.JarEntry;
16-
import java.util.jar.JarFile;
17-
183
import org.bukkit.Bukkit;
194
import org.bukkit.ChatColor;
205
import org.bukkit.command.CommandSender;
@@ -25,19 +10,33 @@
2510
import org.bukkit.plugin.SimplePluginManager;
2611
import org.bukkit.plugin.java.JavaPlugin;
2712
import org.bukkit.plugin.java.JavaPluginLoader;
28-
2913
import vg.civcraft.mc.civmodcore.ratelimiting.RateLimiter;
3014
import vg.civcraft.mc.civmodcore.ratelimiting.RateLimiting;
3115
import vg.civcraft.mc.civmodcore.util.ConfigParsing;
3216

17+
import java.io.BufferedReader;
18+
import java.io.File;
19+
import java.io.IOException;
20+
import java.io.InputStream;
21+
import java.io.InputStreamReader;
22+
import java.lang.reflect.Field;
23+
import java.lang.reflect.InvocationTargetException;
24+
import java.lang.reflect.Method;
25+
import java.util.Collections;
26+
import java.util.HashMap;
27+
import java.util.List;
28+
import java.util.Map;
29+
import java.util.jar.JarEntry;
30+
import java.util.jar.JarFile;
31+
3332
public class StandaloneCommandHandler {
3433

3534
private JavaPlugin plugin;
3635
private Map<String, StandaloneCommand> commands;
3736

3837
public StandaloneCommandHandler(JavaPlugin plugin) {
3938
this.plugin = plugin;
40-
this.commands = new HashMap<String, StandaloneCommand>();
39+
this.commands = new HashMap<>();
4140
loadAll();
4241
}
4342

@@ -99,23 +98,23 @@ public List<String> tabCompleteCommand(CommandSender sender, org.bukkit.command.
9998
if (command == null) {
10099
plugin.getLogger().warning(
101100
"Could not tab complete command " + cmd.getName() + ", no implementation was provided");
102-
return new LinkedList<String>();
101+
return Collections.emptyList();
103102
}
104103
if (sender instanceof Player) {
105104
if (!command.canBeRunByPlayers()) {
106105
sender.sendMessage(ChatColor.RED + "This command can only be used from console");
107-
return new LinkedList<String>();
106+
return Collections.emptyList();
108107
}
109108
if (command.isRateLimitedToTabComplete((Player) sender)) {
110109
sender.sendMessage(ChatColor.RED
111110
+ "You are rate limited and have to wait before tab completing this command again");
112-
return new LinkedList<String>();
111+
return Collections.emptyList();
113112
}
114113
} else {
115114
// console
116115
if (!command.canBeRunByConsole()) {
117116
sender.sendMessage(ChatColor.RED + "This command can only be used by players");
118-
return new LinkedList<String>();
117+
return Collections.emptyList();
119118
}
120119
}
121120
return command.tabComplete(sender, args);

‎src/main/java/vg/civcraft/mc/civmodcore/dao/ConnectionPool.java

+10-10
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,29 @@
11
package vg.civcraft.mc.civmodcore.dao;
22

3+
import com.zaxxer.hikari.HikariConfig;
4+
import com.zaxxer.hikari.HikariDataSource;
5+
36
import java.sql.Connection;
47
import java.sql.SQLException;
58
import java.sql.Statement;
69
import java.util.logging.Level;
710
import java.util.logging.Logger;
811

9-
import com.zaxxer.hikari.HikariConfig;
10-
import com.zaxxer.hikari.HikariDataSource;
11-
1212
/**
1313
* Handy Connection Pool / Database wrapper for use by all plugins.
14-
*
14+
*
1515
* @author ProgrammerDan
1616
*
1717
*/
1818
public class ConnectionPool {
1919

2020
private HikariDataSource datasource;
2121

22-
private Logger logger;
22+
private final Logger logger;
2323

2424
/**
2525
* Creates the Database connection pool backed by HikariCP.
26-
*
26+
*
2727
* @param log
2828
* The logger to use
2929
* @param user
@@ -74,7 +74,7 @@ public ConnectionPool(Logger log, String user, String pass, String host, int por
7474

7575
/**
7676
* Gets a single connection from the pool for use. Checks for null database first.
77-
*
77+
*
7878
* @return A new Connection
7979
* @throws SQLException
8080
*/
@@ -85,7 +85,7 @@ public Connection getConnection() throws SQLException {
8585

8686
/**
8787
* Closes all connections and this connection pool.
88-
*
88+
*
8989
* @throws SQLException
9090
*/
9191
public void close() throws SQLException {
@@ -96,7 +96,7 @@ public void close() throws SQLException {
9696

9797
/**
9898
* Quick test; either ends or throws an exception if data source isn't configured.
99-
*
99+
*
100100
* @throws SQLException
101101
*/
102102
public void available() throws SQLException {
@@ -107,7 +107,7 @@ public void available() throws SQLException {
107107

108108
/**
109109
* Available for direct use within this package, use the provided public methods for anything else
110-
*
110+
*
111111
* @return DataSource being used
112112
*/
113113
HikariDataSource getHikariDataSource() {

‎src/main/java/vg/civcraft/mc/civmodcore/dao/ManagedDatasource.java

+7-6
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,10 @@
66
import java.sql.SQLException;
77
import java.sql.SQLWarning;
88
import java.sql.Statement;
9+
import java.util.ArrayList;
910
import java.util.Arrays;
1011
import java.util.HashMap;
11-
import java.util.LinkedList;
12+
import java.util.List;
1213
import java.util.Map;
1314
import java.util.NavigableMap;
1415
import java.util.TreeMap;
@@ -69,8 +70,8 @@
6970
*/
7071
public class ManagedDatasource implements ConfigurationSerializable {
7172

72-
private static final long MAX_WAIT_FOR_LOCK = 600000l;
73-
private static final long WAIT_PERIOD = 500l;
73+
private static final long MAX_WAIT_FOR_LOCK = 600000L;
74+
private static final long WAIT_PERIOD = 500L;
7475

7576
private ConnectionPool connections;
7677
private Logger logger;
@@ -364,7 +365,7 @@ private boolean doMigrations(NavigableMap<Integer, Migration> newApply) {
364365

365366
}
366367

367-
private boolean doMigration(Integer migration, LinkedList<String> queries, boolean ignoreErrors,
368+
private boolean doMigration(Integer migration, List<String> queries, boolean ignoreErrors,
368369
Callable<Boolean> post) {
369370
try (Connection connection = getConnection();) {
370371
for (String query : queries) {
@@ -546,12 +547,12 @@ public void close() throws SQLException {
546547
}
547548

548549
private static class Migration {
549-
public LinkedList<String> migrations;
550+
public List<String> migrations;
550551
public boolean ignoreErrors;
551552
public Callable<Boolean> postMigration;
552553

553554
public Migration(boolean ignoreErrors, Callable<Boolean> postMigration, String... migrations) {
554-
this.migrations = new LinkedList<>(Arrays.asList(migrations));
555+
this.migrations = new ArrayList<>(Arrays.asList(migrations));
555556
this.ignoreErrors = ignoreErrors;
556557
this.postMigration = postMigration;
557558
}

‎src/main/java/vg/civcraft/mc/civmodcore/dao/package-info.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,10 @@
33
*
44
* Wraps HikariCP for easy connection pooling.
55
*
6-
* Plugins should use the {@link ManagedDatasource} class.
6+
* Plugins should use the {@link vg.civcraft.mc.civmodcore.dao.ManagedDatasource} class.
77
*
88
* If you know what you're doing and know that the Managed class isn't fit for you,
9-
* you can directly leverage {@link ConnectionPool}.
9+
* you can directly leverage {@link vg.civcraft.mc.civmodcore.dao.ConnectionPool}.
1010
*
1111
* @author ProgrammerDan
1212
*

‎src/main/java/vg/civcraft/mc/civmodcore/inventorygui/ClickableInventory.java

+8-8
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,19 @@
11
package vg.civcraft.mc.civmodcore.inventorygui;
22

3-
import java.util.HashMap;
4-
import java.util.LinkedList;
5-
import java.util.List;
6-
import java.util.Map;
7-
import java.util.UUID;
8-
import java.util.logging.Logger;
9-
103
import org.bukkit.Bukkit;
114
import org.bukkit.entity.Player;
125
import org.bukkit.event.inventory.InventoryType;
136
import org.bukkit.inventory.Inventory;
147
import org.bukkit.inventory.ItemStack;
158
import org.bukkit.scheduler.BukkitTask;
169

10+
import java.util.ArrayList;
11+
import java.util.HashMap;
12+
import java.util.List;
13+
import java.util.Map;
14+
import java.util.UUID;
15+
import java.util.logging.Logger;
16+
1717
/**
1818
* Represents an inventory filled with Clickables. Whenever one of those is clicked by a player, the clickables specific
1919
* action is executed. To use those, either extend your main plugin class from ACivMod or register
@@ -76,7 +76,7 @@ private ClickableInventory(String name) {
7676
log.warning("ClickableInventory title exceeds Bukkit limits: " + name);
7777
name = name.substring(0, 32);
7878
}
79-
this.runnables = new LinkedList<>();
79+
this.runnables = new ArrayList<>();
8080
}
8181

8282
/**

‎src/main/java/vg/civcraft/mc/civmodcore/inventorygui/ClickableInventoryListener.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ public void inventoryClick(InventoryClickEvent e) {
3131
@EventHandler
3232
public void inventoryClose(InventoryCloseEvent e) {
3333
// for some reason getPlayer apparently isnt always a player here, but
34-
// just a LivingEntity
34+
// just a HumanEntity
3535
if (!(e.getPlayer() instanceof Player)) {
3636
return;
3737
}

‎src/main/java/vg/civcraft/mc/civmodcore/inventorygui/MultiPageView.java

+4-5
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
package vg.civcraft.mc.civmodcore.inventorygui;
22

3-
import java.util.List;
4-
53
import org.bukkit.ChatColor;
64
import org.bukkit.Material;
75
import org.bukkit.entity.Player;
86
import org.bukkit.inventory.ItemStack;
97
import vg.civcraft.mc.civmodcore.api.ItemAPI;
108

9+
import java.util.List;
10+
1111
/**
1212
* Utility to automate creating views, which have multiple pages and automatically adjust their size
1313
*
@@ -81,10 +81,9 @@ public void clicked(Player arg0) {
8181
}
8282
int extraSlot = getContentSize() + 2;
8383
for (IClickable click : extraMenuItems) {
84-
if (click == null) {
85-
continue;
84+
if (click != null) {
85+
ci.setSlot(click, extraSlot++);
8686
}
87-
ci.setSlot(click, extraSlot++);
8887
}
8988
return ci;
9089
}

‎src/main/java/vg/civcraft/mc/civmodcore/itemHandling/ItemMap.java

+17-17
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,7 @@
11
package vg.civcraft.mc.civmodcore.itemHandling;
22

3-
import java.util.Collection;
4-
import java.util.HashMap;
5-
import java.util.LinkedList;
6-
import java.util.List;
7-
import java.util.Map;
8-
import java.util.Map.Entry;
9-
import java.util.Set;
10-
import java.util.logging.Logger;
11-
3+
import net.minecraft.server.v1_14_R1.NBTTagCompound;
4+
import net.minecraft.server.v1_14_R1.NBTTagList;
125
import org.bukkit.Bukkit;
136
import org.bukkit.ChatColor;
147
import org.bukkit.Material;
@@ -17,11 +10,17 @@
1710
import org.bukkit.inventory.Inventory;
1811
import org.bukkit.inventory.ItemStack;
1912
import org.bukkit.inventory.PlayerInventory;
20-
21-
import net.minecraft.server.v1_14_R1.NBTTagCompound;
22-
import net.minecraft.server.v1_14_R1.NBTTagList;
2313
import vg.civcraft.mc.civmodcore.api.ItemAPI;
2414

15+
import java.util.ArrayList;
16+
import java.util.Collection;
17+
import java.util.HashMap;
18+
import java.util.List;
19+
import java.util.Map;
20+
import java.util.Map.Entry;
21+
import java.util.Set;
22+
import java.util.logging.Logger;
23+
2524
/**
2625
* Allows the storage and comparison of itemstacks while ignoring their maximum possible stack sizes. This offers
2726
* various tools to compare inventories, to store recipe costs or to specify setupcosts. Take great care when dealing
@@ -273,7 +272,7 @@ public ItemMap getStacksByMaterialEnchants(ItemStack is) {
273272
return getStacksByMaterialEnchants(is.getType(), is.getItemMeta()
274273
.getEnchants());
275274
} else {
276-
return getStacksByMaterialEnchants(is.getType(), new HashMap<Enchantment, Integer>());
275+
return getStacksByMaterialEnchants(is.getType(), new HashMap<>());
277276
}
278277
}
279278

@@ -426,8 +425,8 @@ public void multiplyContent(double multiplier) {
426425
*
427426
* @return List of stacksize conform ItemStacks
428427
*/
429-
public LinkedList<ItemStack> getItemStackRepresentation() {
430-
LinkedList<ItemStack> result = new LinkedList<>();
428+
public List<ItemStack> getItemStackRepresentation() {
429+
List<ItemStack> result = new ArrayList<>();
431430
for (Entry<ItemStack, Integer> entry : getEntrySet()) {
432431
ItemStack is = entry.getKey();
433432
Integer amount = entry.getValue();
@@ -485,8 +484,9 @@ public boolean fitsIn(Inventory i) {
485484
* @return UI representation of large ItemMap
486485
*/
487486
public List<ItemStack> getLoredItemCountRepresentation() {
488-
List<ItemStack> items = new LinkedList<>();
489-
for (Entry<ItemStack, Integer> entry : getEntrySet()) {
487+
Set<Entry<ItemStack, Integer>> entrySet = getEntrySet();
488+
List<ItemStack> items = new ArrayList<>(entrySet.size());
489+
for (Entry<ItemStack, Integer> entry : entrySet) {
490490
ItemStack is = entry.getKey().clone();
491491
ItemAPI.addLore(is, ChatColor.GOLD + "Total item count: " + entry.getValue());
492492
if (entry.getValue() > entry.getKey().getType().getMaxStackSize()) {

‎src/main/java/vg/civcraft/mc/civmodcore/itemHandling/TagManager.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,7 @@ public void setIntList(String key, List<Integer> list) {
145145
@Deprecated
146146
public List<Short> getShortList(String key) {
147147
NBTTagList tagList = this.tag.getList(key, 2);
148-
List<Short> list = new ArrayList<Short>();
148+
List<Short> list = new ArrayList<>();
149149

150150
for (int i = 0; i < tagList.size(); ++i) {
151151
list.add(tagList.d(i));

‎src/main/java/vg/civcraft/mc/civmodcore/locations/chunkmeta/ChunkCoord.java

+4-6
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,15 @@
11
package vg.civcraft.mc.civmodcore.locations.chunkmeta;
22

3+
import org.bukkit.World;
4+
import vg.civcraft.mc.civmodcore.CivModCorePlugin;
5+
36
import java.util.Map;
47
import java.util.Map.Entry;
58
import java.util.Objects;
69
import java.util.TreeMap;
710
import java.util.function.Supplier;
811
import java.util.logging.Level;
912

10-
import org.bukkit.World;
11-
12-
import vg.civcraft.mc.civmodcore.CivModCorePlugin;
13-
1413
public class ChunkCoord implements Comparable<ChunkCoord> {
1514

1615
/**
@@ -76,8 +75,7 @@ public boolean equals(Object o) {
7675

7776
/**
7877
* Writes all data held by this instance to the datavase
79-
*
80-
* @param dao DAO to write to
78+
*
8179
* @pa boolean isFullyLoaded() { return isFullyLoaded; }ram worldID ID of the
8280
* world this instance is in
8381
*/

‎src/main/java/vg/civcraft/mc/civmodcore/locations/chunkmeta/ChunkMetaListener.java

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,5 @@
11
package vg.civcraft.mc.civmodcore.locations.chunkmeta;
22

3-
import java.util.LinkedList;
4-
import java.util.Queue;
5-
63
import org.bukkit.Chunk;
74
import org.bukkit.event.EventHandler;
85
import org.bukkit.event.EventPriority;
@@ -11,6 +8,9 @@
118
import org.bukkit.event.world.ChunkUnloadEvent;
129
import org.bukkit.event.world.WorldLoadEvent;
1310

11+
import java.util.Queue;
12+
import java.util.concurrent.LinkedBlockingQueue;
13+
1414
public class ChunkMetaListener implements Listener {
1515

1616
private GlobalChunkMetaManager manager;
@@ -26,7 +26,7 @@ public class ChunkMetaListener implements Listener {
2626

2727
public ChunkMetaListener(GlobalChunkMetaManager manager) {
2828
this.manager = manager;
29-
this.unloadQueue = new LinkedList<>();
29+
this.unloadQueue = new LinkedBlockingQueue<>();
3030
unloadConsumer = new Thread(() -> {
3131
while (true) {
3232
synchronized (unloadQueue) {

‎src/main/java/vg/civcraft/mc/civmodcore/locations/chunkmeta/GlobalChunkMetaManager.java

+5-6
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,15 @@
11
package vg.civcraft.mc.civmodcore.locations.chunkmeta;
22

3-
import java.util.Map;
4-
import java.util.TreeMap;
5-
import java.util.UUID;
6-
import java.util.function.Supplier;
7-
83
import org.bukkit.Bukkit;
94
import org.bukkit.Chunk;
105
import org.bukkit.World;
11-
126
import vg.civcraft.mc.civmodcore.CivModCorePlugin;
137

8+
import java.util.Map;
9+
import java.util.TreeMap;
10+
import java.util.UUID;
11+
import java.util.function.Supplier;
12+
1413
public class GlobalChunkMetaManager {
1514

1615
private Map<UUID, Short> uuidToInternalID;

‎src/main/java/vg/civcraft/mc/civmodcore/locations/chunkmeta/WorldChunkMetaManager.java

+5-5
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,20 @@
11
package vg.civcraft.mc.civmodcore.locations.chunkmeta;
22

3+
import org.bukkit.World;
4+
35
import java.util.Collections;
46
import java.util.HashMap;
57
import java.util.Iterator;
6-
import java.util.LinkedList;
78
import java.util.Map;
89
import java.util.Queue;
910
import java.util.Set;
1011
import java.util.TreeSet;
1112
import java.util.concurrent.Executors;
13+
import java.util.concurrent.LinkedBlockingQueue;
1214
import java.util.concurrent.ScheduledExecutorService;
1315
import java.util.concurrent.TimeUnit;
1416
import java.util.function.Supplier;
1517

16-
import org.bukkit.World;
17-
1818
/**
1919
* Stores Chunk metadata for all plugins for one specific world. Metadata is
2020
* kept in a cache, into which is inserted when a chunk is loaded. When a chunk
@@ -49,7 +49,7 @@ public WorldChunkMetaManager(World world, short worldID) {
4949
this.worldID = worldID;
5050
this.world = world;
5151
this.metas = new HashMap<>();
52-
this.unloadingQueue = Collections.synchronizedSet(new TreeSet<ChunkCoord>((a, b) -> {
52+
this.unloadingQueue = Collections.synchronizedSet(new TreeSet<>((a, b) -> {
5353
return Math.toIntExact(a.getLastMCUnloadingTime() - b.getLastMCUnloadingTime());
5454
}));
5555
registerUnloadRunnable();
@@ -196,7 +196,7 @@ private void registerUnloadRunnable() {
196196
}
197197

198198
private void startChunkLoadingConsumer() {
199-
this.chunkLoadingQueue = new LinkedList<>();
199+
this.chunkLoadingQueue = new LinkedBlockingQueue<>();
200200
chunkLoadingConsumer = new Thread(() -> {
201201
while (true) {
202202
ChunkCoord coord;

‎src/main/java/vg/civcraft/mc/civmodcore/locations/chunkmeta/api/ChunkMetaAPI.java

+8-9
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,6 @@
11
package vg.civcraft.mc.civmodcore.locations.chunkmeta.api;
22

3-
import java.util.HashMap;
4-
import java.util.LinkedList;
5-
import java.util.List;
6-
import java.util.Map;
7-
import java.util.function.Supplier;
8-
import java.util.logging.Level;
9-
103
import org.bukkit.plugin.java.JavaPlugin;
11-
124
import vg.civcraft.mc.civmodcore.CivModCorePlugin;
135
import vg.civcraft.mc.civmodcore.locations.chunkmeta.ChunkDAO;
146
import vg.civcraft.mc.civmodcore.locations.chunkmeta.ChunkMeta;
@@ -18,6 +10,13 @@
1810
import vg.civcraft.mc.civmodcore.locations.chunkmeta.block.BlockDataObject;
1911
import vg.civcraft.mc.civmodcore.locations.chunkmeta.block.StorageEngine;
2012

13+
import java.util.ArrayList;
14+
import java.util.HashMap;
15+
import java.util.List;
16+
import java.util.Map;
17+
import java.util.function.Supplier;
18+
import java.util.logging.Level;
19+
2120
public class ChunkMetaAPI {
2221

2322
private static Map<String, ChunkMetaView<?>> existingViews = new HashMap<>();
@@ -70,7 +69,7 @@ static void removePlugin(JavaPlugin plugin) {
7069
*/
7170
public static void saveAll() {
7271
// copy keys so we can iterate safely
73-
List<String> keys = new LinkedList<>(existingViews.keySet());
72+
List<String> keys = new ArrayList<>(existingViews.keySet());
7473
for (String key : keys) {
7574
ChunkMetaView<?> view = existingViews.get(key);
7675
if (view != null) {
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,13 @@
11
package vg.civcraft.mc.civmodcore.playersettings;
22

3-
import java.util.LinkedList;
4-
import java.util.List;
5-
63
import org.bukkit.ChatColor;
74
import org.bukkit.entity.Player;
8-
95
import vg.civcraft.mc.civmodcore.chatDialog.Dialog;
106
import vg.civcraft.mc.civmodcore.playersettings.gui.MenuSection;
117

8+
import java.util.Collections;
9+
import java.util.List;
10+
1211
public class MenuDialog extends Dialog {
1312

1413
private PlayerSetting<?> setting;
@@ -24,18 +23,7 @@ public MenuDialog(Player player, PlayerSetting<?> setting, MenuSection menu, Str
2423

2524
@Override
2625
public void onReply(String[] message) {
27-
StringBuilder sb = new StringBuilder();
28-
for(String part : message) {
29-
sb.append(part);
30-
sb.append(" ");
31-
}
32-
String result;
33-
if (sb.length() == 0) {
34-
result = "";
35-
}
36-
else {
37-
result = sb.substring(0, sb.length() - 1);
38-
}
26+
String result = String.join(" ", message);
3927
if (!setting.isValidValue(result)) {
4028
player.sendMessage(ChatColor.RED + errorMsg);
4129
menu.showScreen(player);
@@ -48,7 +36,7 @@ public void onReply(String[] message) {
4836

4937
@Override
5038
public List<String> onTabComplete(String wordCompleted, String[] fullMessage) {
51-
return new LinkedList<>();
39+
return Collections.emptyList();
5240
}
5341

5442
}

‎src/main/java/vg/civcraft/mc/civmodcore/playersettings/PlayerSetting.java

+12-11
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,21 @@
11
package vg.civcraft.mc.civmodcore.playersettings;
22

3-
import java.util.HashMap;
4-
import java.util.LinkedList;
5-
import java.util.List;
6-
import java.util.Map;
7-
import java.util.Map.Entry;
8-
import java.util.TreeMap;
9-
import java.util.UUID;
10-
3+
import com.google.common.base.Preconditions;
114
import org.bukkit.ChatColor;
125
import org.bukkit.entity.Player;
136
import org.bukkit.inventory.ItemStack;
147
import org.bukkit.plugin.java.JavaPlugin;
15-
168
import vg.civcraft.mc.civmodcore.api.ItemAPI;
17-
import vg.civcraft.mc.civmodcore.playersettings.gui.MenuItem;
189
import vg.civcraft.mc.civmodcore.playersettings.gui.MenuSection;
1910

11+
import java.util.ArrayList;
12+
import java.util.HashMap;
13+
import java.util.List;
14+
import java.util.Map;
15+
import java.util.Map.Entry;
16+
import java.util.TreeMap;
17+
import java.util.UUID;
18+
2019
/**
2120
* Contains a value for every players for one setting
2221
*/
@@ -33,6 +32,8 @@ public abstract class PlayerSetting<T> {
3332

3433
public PlayerSetting(JavaPlugin owningPlugin, T defaultValue, String niceName, String identifier, ItemStack gui,
3534
String description) {
35+
Preconditions.checkNotNull(gui, "GUI ItemStack can not be null.");
36+
3637
values = new TreeMap<>();
3738
this.defaultValue = defaultValue;
3839
this.owningPlugin = owningPlugin;
@@ -199,7 +200,7 @@ public String getIdentifier() {
199200
*/
200201
public void registerListener(SettingChangeListener<T> listener) {
201202
if (this.listeners == null) {
202-
this.listeners = new LinkedList<>();
203+
this.listeners = new ArrayList<>();
203204
}
204205
this.listeners.add(listener);
205206
}

‎src/main/java/vg/civcraft/mc/civmodcore/playersettings/PlayerSettingAPI.java

+11-16
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,27 @@
11
package vg.civcraft.mc.civmodcore.playersettings;
22

3+
import org.bukkit.configuration.ConfigurationSection;
4+
import org.bukkit.configuration.file.YamlConfiguration;
5+
import vg.civcraft.mc.civmodcore.CivModCorePlugin;
6+
import vg.civcraft.mc.civmodcore.playersettings.gui.MenuOption;
7+
import vg.civcraft.mc.civmodcore.playersettings.gui.MenuSection;
8+
39
import java.io.File;
410
import java.io.IOException;
11+
import java.util.ArrayList;
512
import java.util.HashMap;
6-
import java.util.LinkedList;
713
import java.util.List;
814
import java.util.Map;
915
import java.util.Map.Entry;
1016

11-
import org.bukkit.configuration.ConfigurationSection;
12-
import org.bukkit.configuration.file.YamlConfiguration;
13-
14-
import vg.civcraft.mc.civmodcore.CivModCorePlugin;
15-
import vg.civcraft.mc.civmodcore.playersettings.gui.MenuOption;
16-
import vg.civcraft.mc.civmodcore.playersettings.gui.MenuSection;
17-
1817
/**
1918
* Allows creating settings, which will automatically be available in players
2019
* configuration GUI
2120
*
2221
*/
2322
public class PlayerSettingAPI {
2423

25-
private static final String fileName = "civ-player-settings.yml";
24+
private static final String FILE_NAME = "civ-player-settings.yml";
2625

2726
private static Map<String, PlayerSetting<?>> settingsByIdentifier = new HashMap<>();
2827
private static Map<String, List<PlayerSetting<?>>> settingsByPlugin = new HashMap<>();
@@ -51,7 +50,7 @@ private static void loadValues(PlayerSetting<?> setting) {
5150
if (!folder.isDirectory()) {
5251
return;
5352
}
54-
File file = new File(folder, fileName);
53+
File file = new File(folder, FILE_NAME);
5554
if (!file.isFile()) {
5655
return;
5756
}
@@ -78,11 +77,7 @@ private static void loadValues(PlayerSetting<?> setting) {
7877
public static void registerSetting(PlayerSetting<?> setting, MenuSection menu) {
7978
loadValues(setting);
8079
settingsByIdentifier.put(setting.getIdentifier(), setting);
81-
List<PlayerSetting<?>> specificList = settingsByPlugin.get(setting.getOwningPlugin().getName());
82-
if (specificList == null) {
83-
specificList = new LinkedList<>();
84-
settingsByPlugin.put(setting.getOwningPlugin().getName(), specificList);
85-
}
80+
List<PlayerSetting<?>> specificList = settingsByPlugin.computeIfAbsent(setting.getOwningPlugin().getName(), k -> new ArrayList<>());
8681
if (specificList.contains(setting)) {
8782
throw new IllegalArgumentException("You can not register a setting twice");
8883
}
@@ -102,7 +97,7 @@ public static void saveAll() {
10297
if (!folder.isDirectory()) {
10398
folder.mkdirs();
10499
}
105-
File file = new File(folder, fileName);
100+
File file = new File(folder, FILE_NAME);
106101
YamlConfiguration config;
107102
if (file.isFile()) {
108103
config = YamlConfiguration.loadConfiguration(file);

‎src/main/java/vg/civcraft/mc/civmodcore/playersettings/SettingChangeListener.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,6 @@
77
*/
88
public interface SettingChangeListener<T> {
99

10-
public void handle(UUID player, PlayerSetting<T> setting, T oldValue, T newValue);
10+
void handle(UUID player, PlayerSetting<T> setting, T oldValue, T newValue);
1111

1212
}

‎src/main/java/vg/civcraft/mc/civmodcore/playersettings/gui/ConfigCommand.java

+4-5
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,14 @@
11
package vg.civcraft.mc.civmodcore.playersettings.gui;
22

3-
import java.util.LinkedList;
4-
import java.util.List;
5-
63
import org.bukkit.ChatColor;
74
import org.bukkit.command.CommandSender;
85
import org.bukkit.entity.Player;
9-
106
import vg.civcraft.mc.civmodcore.command.StandaloneCommand;
117
import vg.civcraft.mc.civmodcore.playersettings.PlayerSettingAPI;
128

9+
import java.util.Collections;
10+
import java.util.List;
11+
1312
public class ConfigCommand extends StandaloneCommand {
1413

1514
@Override
@@ -24,7 +23,7 @@ public boolean execute(CommandSender sender, String[] args) {
2423

2524
@Override
2625
public List<String> tabComplete(CommandSender sender, String[] args) {
27-
return new LinkedList<>();
26+
return Collections.emptyList();
2827
}
2928

3029
@Override

‎src/main/java/vg/civcraft/mc/civmodcore/playersettings/gui/MenuSection.java

+6-7
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,19 @@
11
package vg.civcraft.mc.civmodcore.playersettings.gui;
22

3-
import java.util.LinkedList;
4-
import java.util.List;
5-
import java.util.Map;
6-
import java.util.TreeMap;
7-
83
import org.bukkit.ChatColor;
94
import org.bukkit.Material;
105
import org.bukkit.entity.Player;
116
import org.bukkit.inventory.ItemStack;
12-
137
import vg.civcraft.mc.civmodcore.api.ItemAPI;
148
import vg.civcraft.mc.civmodcore.inventorygui.Clickable;
159
import vg.civcraft.mc.civmodcore.inventorygui.IClickable;
1610
import vg.civcraft.mc.civmodcore.inventorygui.MultiPageView;
1711

12+
import java.util.ArrayList;
13+
import java.util.List;
14+
import java.util.Map;
15+
import java.util.TreeMap;
16+
1817
public class MenuSection extends MenuItem {
1918

2019
private Map<String, MenuItem> content;
@@ -54,7 +53,7 @@ public void clicked(Player p) {
5453
}
5554

5655
public void showScreen(Player player) {
57-
List<IClickable> clickables = new LinkedList<>();
56+
List<IClickable> clickables = new ArrayList<>(content.size());
5857
for (MenuItem item : content.values()) {
5958
clickables.add(item.getMenuRepresentation(player));
6059
}

‎src/main/java/vg/civcraft/mc/civmodcore/playersettings/impl/BooleanSetting.java

+29-21
Original file line numberDiff line numberDiff line change
@@ -13,23 +13,27 @@
1313
public class BooleanSetting extends PlayerSetting<Boolean> {
1414

1515
public BooleanSetting(JavaPlugin owningPlugin, Boolean defaultValue, String name, String identifier,
16-
String description) {
16+
String description) {
1717
super(owningPlugin, defaultValue, name, identifier, new ItemStack(Material.STONE), description);
1818
}
1919

2020
@Override
2121
public Boolean deserialize(String serial) {
2222
switch (serial.toLowerCase()) {
23-
case "1":
24-
case "true":
25-
case "t":
26-
return true;
27-
case "0":
28-
case "false":
29-
case "f":
30-
return false;
31-
case "null":
32-
return null;
23+
case "1":
24+
case "true":
25+
case "t":
26+
case "y":
27+
case "yes":
28+
return true;
29+
case "0":
30+
case "false":
31+
case "f":
32+
case "n":
33+
case "no":
34+
return false;
35+
case "null":
36+
return null;
3337
}
3438
throw new IllegalArgumentException(serial + " is not a valid boolean value");
3539
}
@@ -69,16 +73,20 @@ public String toText(Boolean value) {
6973
@Override
7074
public boolean isValidValue(String input) {
7175
switch (input.toLowerCase()) {
72-
case "1":
73-
case "true":
74-
case "t":
75-
case "0":
76-
case "false":
77-
case "f":
78-
case "null":
79-
return true;
80-
default:
81-
return false;
76+
case "1":
77+
case "true":
78+
case "t":
79+
case "y":
80+
case "yes":
81+
case "0":
82+
case "false":
83+
case "f":
84+
case "n":
85+
case "no":
86+
case "null":
87+
return true;
88+
default:
89+
return false;
8290
}
8391
}
8492
}

‎src/main/java/vg/civcraft/mc/civmodcore/playersettings/impl/BoundedIntegerSetting.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ public boolean isValidValue(String input) {
3636
public ItemStack getGuiRepresentation(UUID player) {
3737
ItemStack stack = super.getGuiRepresentation(player);
3838
ItemAPI.addLore(stack,
39-
String.format("%sMust be at least %d and at maximum %d", ChatColor.GOLD, lowerBound, upperBound));
39+
String.format("%sMust be at least %d and at most %d", ChatColor.GOLD, lowerBound, upperBound));
4040
return stack;
4141
}
4242

Original file line numberDiff line numberDiff line change
@@ -1,26 +1,27 @@
11
package vg.civcraft.mc.civmodcore.playersettings.impl;
22

3+
import org.bukkit.inventory.ItemStack;
4+
import org.bukkit.plugin.java.JavaPlugin;
5+
36
import java.util.Collection;
47
import java.util.HashSet;
58
import java.util.Set;
69

7-
import org.bukkit.inventory.ItemStack;
8-
import org.bukkit.plugin.java.JavaPlugin;
9-
1010
public abstract class LimitedStringSetting extends StringSetting {
1111

1212
private Set<String> validValues;
1313
private boolean caseSensitive;
1414

1515
public LimitedStringSetting(JavaPlugin plugin, String defaultValue, String name, String identifier, ItemStack gui,
16-
String description, Collection<String> validValues, boolean caseSensitive) {
16+
String description, Collection<String> validValues, boolean caseSensitive) {
1717
super(plugin, defaultValue, name, identifier, gui, description);
18-
this.validValues = new HashSet<>();
18+
this.validValues = new HashSet<>(validValues.size());
1919
for(String s : validValues) {
20-
if (!caseSensitive) {
21-
s = s.toLowerCase();
20+
if (caseSensitive) {
21+
this.validValues.add(s);
22+
} else {
23+
this.validValues.add(s.toLowerCase());
2224
}
23-
this.validValues.add(s);
2425
}
2526
this.caseSensitive = caseSensitive;
2627
}
@@ -30,7 +31,11 @@ public boolean isValidValue(String val) {
3031
if (!super.isValidValue(val)) {
3132
return false;
3233
}
33-
return validValues.contains(caseSensitive ? val : val.toLowerCase());
34+
if (caseSensitive) {
35+
return validValues.contains(val);
36+
} else {
37+
return validValues.contains(val.toLowerCase());
38+
}
3439
}
3540

3641
}

‎src/main/java/vg/civcraft/mc/civmodcore/playersettings/impl/collection/AbstractCollectionSetting.java

+16-26
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,10 @@
11
package vg.civcraft.mc.civmodcore.playersettings.impl.collection;
22

3-
import java.util.Collection;
4-
import java.util.Iterator;
5-
import java.util.LinkedList;
6-
import java.util.List;
7-
import java.util.UUID;
8-
import java.util.function.Function;
9-
103
import org.bukkit.ChatColor;
114
import org.bukkit.Material;
125
import org.bukkit.entity.Player;
136
import org.bukkit.inventory.ItemStack;
147
import org.bukkit.plugin.java.JavaPlugin;
15-
16-
import vg.civcraft.mc.civmodcore.CivModCorePlugin;
178
import vg.civcraft.mc.civmodcore.api.ItemAPI;
189
import vg.civcraft.mc.civmodcore.chatDialog.Dialog;
1910
import vg.civcraft.mc.civmodcore.inventorygui.Clickable;
@@ -23,7 +14,14 @@
2314
import vg.civcraft.mc.civmodcore.playersettings.SettingTypeManager;
2415
import vg.civcraft.mc.civmodcore.playersettings.gui.MenuSection;
2516

26-
public class AbstractCollectionSetting<C extends Collection<T>, T> extends PlayerSetting<C> {
17+
import java.util.ArrayList;
18+
import java.util.Collection;
19+
import java.util.Iterator;
20+
import java.util.List;
21+
import java.util.UUID;
22+
import java.util.function.Function;
23+
24+
public abstract class AbstractCollectionSetting<C extends Collection<T>, T> extends PlayerSetting<C> {
2725

2826
private static final char SEPARATOR = ',';
2927
private static final String SEPARATOR_STRING = String.valueOf(SEPARATOR);
@@ -39,9 +37,6 @@ public AbstractCollectionSetting(JavaPlugin owningPlugin, C defaultValue, String
3937
ItemStack gui, String description, Class<T> elementClass, Function<C, C> newFunction) {
4038
super(owningPlugin, defaultValue, name, identifier, gui, description);
4139
this.newFunction = newFunction;
42-
if (defaultValue == null) {
43-
defaultValue = newFunction.apply(null);
44-
}
4540
elementSetting = SettingTypeManager.getSetting(elementClass);
4641
if (elementSetting == null) {
4742
throw new IllegalArgumentException("Can not keep " + elementClass.getName()
@@ -98,7 +93,7 @@ public boolean isValidValue(String input) {
9893
}
9994
}
10095
// final element not checked by the loop, because there's no comma after it
101-
return elementSetting.isValidValue(input.substring(startingIndex, input.length()));
96+
return elementSetting.isValidValue(input.substring(startingIndex));
10297
}
10398

10499
@Override
@@ -123,12 +118,12 @@ public C deserialize(String serial) {
123118
}
124119
}
125120
// final element not checked by the loop, because there's no comma after it
126-
result.add(elementSetting.deserialize(removeEscapes(serial.substring(startingIndex, serial.length()))));
121+
result.add(elementSetting.deserialize(removeEscapes(serial.substring(startingIndex))));
127122
return result;
128123
}
129124

130125
private static String removeEscapes(String val) {
131-
return val.replaceAll(SEPARATOR_REPLACE, SEPARATOR_REPLACE).replaceAll(ESCAPE_REPLACE, ESCAPE_STRING);
126+
return val.replaceAll(SEPARATOR_REPLACE, SEPARATOR_STRING).replaceAll(ESCAPE_REPLACE, ESCAPE_STRING);
132127
}
133128

134129
private static String escape(String val) {
@@ -166,8 +161,9 @@ public String toText(C value) {
166161

167162
@Override
168163
public void handleMenuClick(Player player, MenuSection menu) {
169-
List<IClickable> clickables = new LinkedList<>();
170-
for (T element : getValue(player)) {
164+
C value = getValue(player);
165+
List<IClickable> clickables = new ArrayList<>(value.size());
166+
for (T element : value) {
171167
elementSetting.setValue(player, element);
172168
ItemStack is = elementSetting.getGuiRepresentation(player.getUniqueId());
173169
ItemAPI.setDisplayName(is, ChatColor.GOLD + elementSetting.toText(element));
@@ -198,7 +194,7 @@ public void clicked(Player p) {
198194

199195
@Override
200196
public void clicked(Player p) {
201-
new Dialog(p, CivModCorePlugin.getInstance(), ChatColor.GOLD + "Enter the name of the entry to add") {
197+
new Dialog(p, getOwningPlugin(), ChatColor.GOLD + "Enter the name of the entry to add") {
202198

203199
@Override
204200
public List<String> onTabComplete(String wordCompleted, String[] fullMessage) {
@@ -207,13 +203,7 @@ public List<String> onTabComplete(String wordCompleted, String[] fullMessage) {
207203

208204
@Override
209205
public void onReply(String[] message) {
210-
StringBuilder sb = new StringBuilder();
211-
for (int i = 0; i < message.length - 1; i++) {
212-
sb.append(message[i]);
213-
sb.append(' ');
214-
}
215-
sb.append(message[message.length - 1]);
216-
String full = sb.toString();
206+
String full = String.join(" ", message);
217207
if (!elementSetting.isValidValue(full)) {
218208
p.sendMessage(ChatColor.RED + "You entered an invalid value");
219209
} else {

‎src/main/java/vg/civcraft/mc/civmodcore/ratelimiting/RateLimiter.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ public class RateLimiter {
2323
* @param refillIntervall How often buckets are refilled in milli seconds
2424
*/
2525
RateLimiter(int initialCapacity, int maxTokens, int refillAmount, long refillIntervall) {
26-
this.buckets = new TreeMap<UUID, TokenBucket>();
26+
this.buckets = new TreeMap<>();
2727
this.initialCapacity = initialCapacity;
2828
this.maximumTokens = maxTokens;
2929
this.refillIntervall = refillIntervall;

‎src/main/java/vg/civcraft/mc/civmodcore/util/BiasedRandomPicker.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ public BiasedRandomPicker(Map<E, Double> chances) {
3737
}
3838
this.originalChances = chances;
3939
this.rng = new Random();
40-
this.chances = new TreeMap<Double, E>();
40+
this.chances = new TreeMap<>();
4141
double totalChance = 0.0;
4242
for (Entry<E, Double> entry : chances.entrySet()) {
4343
if (entry.getValue() == null) {

‎src/main/java/vg/civcraft/mc/civmodcore/util/BukkitComparators.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
package vg.civcraft.mc.civmodcore.util;
22

3-
import java.util.Comparator;
4-
53
import org.bukkit.Location;
64

5+
import java.util.Comparator;
6+
77
public class BukkitComparators {
88

99
private BukkitComparators() {

‎src/main/java/vg/civcraft/mc/civmodcore/util/TextUtil.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
import org.bukkit.entity.Player;
1313

1414
public class TextUtil {
15-
private static Map<String, String> tags = new HashMap<String, String>();
15+
private static Map<String, String> tags = new HashMap<>();
1616

1717
static {
1818
tags.put("g", TextUtil.parseColor("<lime>")); // good
@@ -216,7 +216,7 @@ public static String titleize(String colorCode, String str) {
216216
}
217217

218218
public static ArrayList<String> getPage(List<String> lines, int pageHumanBased, String title) {
219-
ArrayList<String> ret = new ArrayList<String>();
219+
ArrayList<String> ret = new ArrayList<>();
220220
int pageZeroBased = pageHumanBased - 1;
221221
int pageheight = 9;
222222
int pagecount = (lines.size() / pageheight) + 1;

‎src/main/java/vg/civcraft/mc/civmodcore/util/cooldowns/TickCoolDownHandler.java

+2-6
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,8 @@ public class TickCoolDownHandler<E> implements ICoolDownHandler<E> {
2626
public TickCoolDownHandler(JavaPlugin executingPlugin, long cooldown) {
2727
this.cooldown = cooldown;
2828
cds = new HashMap<>();
29-
Bukkit.getScheduler().scheduleSyncRepeatingTask(executingPlugin, new Runnable() {
30-
31-
@Override
32-
public void run() {
33-
tickCounter++; // increment every tick
34-
}
29+
Bukkit.getScheduler().scheduleSyncRepeatingTask(executingPlugin, () -> {
30+
tickCounter++; // increment every tick
3531
}, 1L, 1L);
3632
}
3733

‎src/main/java/vg/civcraft/mc/civmodcore/util/progress/ProgressTrackable.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
public interface ProgressTrackable extends Comparable<ProgressTrackable> {
44

5-
public long getNextUpdate();
5+
long getNextUpdate();
66

77
void updateInternalProgressTime(long update);
88

‎src/main/java/vg/civcraft/mc/civmodcore/util/progress/ProgressTracker.java

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package vg.civcraft.mc.civmodcore.util.progress;
22

3+
import java.util.ArrayList;
34
import java.util.Iterator;
4-
import java.util.LinkedList;
55
import java.util.List;
66
import java.util.TreeSet;
77

@@ -29,7 +29,7 @@ public long processItems() {
2929
long nextOne = Long.MAX_VALUE;
3030
long time = System.currentTimeMillis();
3131
Iterator<T> iter = queueItems.iterator();
32-
List<T> toReadd = new LinkedList<>();
32+
List<T> toReAdd = new ArrayList<>();
3333
while (iter.hasNext()) {
3434
T item = iter.next();
3535
if (item.getNextUpdate() > time) {
@@ -39,10 +39,10 @@ public long processItems() {
3939
iter.remove();
4040
item.updateState();
4141
if (item.getNextUpdate() > 0) {
42-
toReadd.add(item);
42+
toReAdd.add(item);
4343
}
4444
}
45-
for (T item : toReadd) {
45+
for (T item : toReAdd) {
4646
nextOne = Math.min(nextOne, item.getNextUpdate());
4747
addItem(item);
4848
}

0 commit comments

Comments
 (0)
Please sign in to comment.