From 3536bdc856c1db474e3cb686207a09624a98f43e Mon Sep 17 00:00:00 2001 From: LeoDog896 Date: Fri, 15 Jan 2021 11:08:11 -0500 Subject: [PATCH] Microoptimization cleanup Just some small microoptimizations including preferring fastutils, Removing unnecessary checks already dealt with using @NotNull, all since I had extra unplanned free time. --- .gitignore | 3 +++ .../java/net/minestom/server/map/PaletteGenerator.java | 5 ++++- src/main/java/net/minestom/server/MinecraftServer.java | 2 -- src/main/java/net/minestom/server/UpdateManager.java | 1 - .../net/minestom/server/advancements/AdvancementTab.java | 1 - src/main/java/net/minestom/server/chat/RichMessage.java | 2 -- .../java/net/minestom/server/command/CommandManager.java | 2 -- src/main/java/net/minestom/server/entity/Entity.java | 7 ------- src/main/java/net/minestom/server/entity/LivingEntity.java | 1 - src/main/java/net/minestom/server/entity/Player.java | 5 ----- .../server/entity/pathfinding/NavigableEntity.java | 1 - .../net/minestom/server/event/handler/EventHandler.java | 5 ----- .../java/net/minestom/server/instance/BlockModifier.java | 5 ----- src/main/java/net/minestom/server/instance/Chunk.java | 3 ++- .../java/net/minestom/server/instance/DynamicChunk.java | 2 +- .../net/minestom/server/instance/InstanceContainer.java | 2 -- .../server/inventory/click/InventoryClickProcessor.java | 4 ++-- src/main/java/net/minestom/server/item/ItemStack.java | 2 -- .../net/minestom/server/registry/ResourceGatherer.java | 3 ++- .../net/minestom/server/resourcepack/ResourcePack.java | 1 - .../java/net/minestom/server/storage/StorageManager.java | 1 - 21 files changed, 14 insertions(+), 44 deletions(-) diff --git a/.gitignore b/.gitignore index b1a8308b6..be3b46bfa 100644 --- a/.gitignore +++ b/.gitignore @@ -53,3 +53,6 @@ gradle-app.setting # When running the demo we generate the extensions folder /extensions/ + +# When compiling we get a docs folder +/docs \ No newline at end of file diff --git a/src/lwjgl/java/net/minestom/server/map/PaletteGenerator.java b/src/lwjgl/java/net/minestom/server/map/PaletteGenerator.java index 9f6e2f413..cb3de987b 100644 --- a/src/lwjgl/java/net/minestom/server/map/PaletteGenerator.java +++ b/src/lwjgl/java/net/minestom/server/map/PaletteGenerator.java @@ -1,5 +1,8 @@ package net.minestom.server.map; +import it.unimi.dsi.fastutil.ints.Int2IntMap; +import it.unimi.dsi.fastutil.ints.Int2IntOpenHashMap; + import javax.imageio.ImageIO; import java.awt.image.BufferedImage; import java.io.File; @@ -10,7 +13,7 @@ import java.util.Map; public class PaletteGenerator { public static void main(String[] args) { - Map colors = new HashMap<>(); + Int2IntMap colors = new Int2IntOpenHashMap(); int highestIndex = 0; for(MapColors c : MapColors.values()) { if (c == MapColors.NONE) diff --git a/src/main/java/net/minestom/server/MinecraftServer.java b/src/main/java/net/minestom/server/MinecraftServer.java index 553c6095f..4c63b7535 100644 --- a/src/main/java/net/minestom/server/MinecraftServer.java +++ b/src/main/java/net/minestom/server/MinecraftServer.java @@ -217,7 +217,6 @@ public final class MinecraftServer { * @throws NullPointerException if {@code brandName} is null */ public static void setBrandName(@NotNull String brandName) { - Check.notNull(brandName, "The brand name cannot be null"); MinecraftServer.brandName = brandName; PacketUtils.sendGroupedPacket(connectionManager.getOnlinePlayers(), PluginMessagePacket.getBrandPacket()); @@ -275,7 +274,6 @@ public final class MinecraftServer { * @param difficulty the new server difficulty */ public static void setDifficulty(@NotNull Difficulty difficulty) { - Check.notNull(difficulty, "The server difficulty cannot be null."); MinecraftServer.difficulty = difficulty; // Send the packet to all online players diff --git a/src/main/java/net/minestom/server/UpdateManager.java b/src/main/java/net/minestom/server/UpdateManager.java index 6b546efca..ef22e6987 100644 --- a/src/main/java/net/minestom/server/UpdateManager.java +++ b/src/main/java/net/minestom/server/UpdateManager.java @@ -140,7 +140,6 @@ public final class UpdateManager { * @throws NullPointerException if threadProvider is null */ public synchronized void setThreadProvider(ThreadProvider threadProvider) { - Check.notNull(threadProvider, "The thread provider cannot be null"); this.threadProvider = threadProvider; } diff --git a/src/main/java/net/minestom/server/advancements/AdvancementTab.java b/src/main/java/net/minestom/server/advancements/AdvancementTab.java index 67515f0c6..5bc96795b 100644 --- a/src/main/java/net/minestom/server/advancements/AdvancementTab.java +++ b/src/main/java/net/minestom/server/advancements/AdvancementTab.java @@ -73,7 +73,6 @@ public class AdvancementTab implements Viewable { * @param parent the parent of this advancement, it cannot be null */ public void createAdvancement(@NotNull String identifier, @NotNull Advancement advancement, @NotNull Advancement parent) { - Check.argCondition(identifier == null, "the advancement identifier cannot be null"); Check.stateCondition(!advancementMap.containsKey(parent), "You tried to set a parent which doesn't exist or isn't registered"); cacheAdvancement(identifier, advancement, parent); diff --git a/src/main/java/net/minestom/server/chat/RichMessage.java b/src/main/java/net/minestom/server/chat/RichMessage.java index b260208a1..97a3e4d0a 100644 --- a/src/main/java/net/minestom/server/chat/RichMessage.java +++ b/src/main/java/net/minestom/server/chat/RichMessage.java @@ -37,7 +37,6 @@ public class RichMessage extends JsonMessage { * @return the created rich message object */ public static RichMessage of(@NotNull ColoredText coloredText) { - Check.notNull(coloredText, "ColoredText cannot be null"); RichMessage richMessage = new RichMessage(); appendText(richMessage, coloredText); @@ -58,7 +57,6 @@ public class RichMessage extends JsonMessage { * @return the rich message */ public RichMessage append(@NotNull ColoredText coloredText) { - Check.notNull(coloredText, "ColoredText cannot be null"); appendText(this, coloredText); return this; diff --git a/src/main/java/net/minestom/server/command/CommandManager.java b/src/main/java/net/minestom/server/command/CommandManager.java index 4fe28836c..e42bbd0d9 100644 --- a/src/main/java/net/minestom/server/command/CommandManager.java +++ b/src/main/java/net/minestom/server/command/CommandManager.java @@ -185,8 +185,6 @@ public final class CommandManager { * @return true if the command hadn't been cancelled and has been successful */ public boolean execute(@NotNull CommandSender sender, @NotNull String command) { - Check.notNull(sender, "Source cannot be null"); - Check.notNull(command, "Command string cannot be null"); // Command event if (sender instanceof Player) { diff --git a/src/main/java/net/minestom/server/entity/Entity.java b/src/main/java/net/minestom/server/entity/Entity.java index 910ebb26c..0f817882c 100644 --- a/src/main/java/net/minestom/server/entity/Entity.java +++ b/src/main/java/net/minestom/server/entity/Entity.java @@ -242,7 +242,6 @@ public abstract class Entity implements Viewable, EventHandler, DataContainer, P * @throws IllegalStateException if you try to teleport an entity before settings its instance */ public void teleport(@NotNull Position position, @Nullable long[] chunks, @Nullable Runnable callback) { - Check.notNull(position, "Teleport position cannot be null"); Check.stateCondition(instance == null, "You need to use Entity#setInstance before teleporting an entity!"); final ChunkCallback endCallback = (chunk) -> { @@ -329,7 +328,6 @@ public abstract class Entity implements Viewable, EventHandler, DataContainer, P @Override public boolean addViewer(@NotNull Player player) { - Check.notNull(player, "Viewer cannot be null"); boolean result = this.viewers.add(player); if (!result) return false; @@ -339,7 +337,6 @@ public abstract class Entity implements Viewable, EventHandler, DataContainer, P @Override public boolean removeViewer(@NotNull Player player) { - Check.notNull(player, "Viewer cannot be null"); if (!viewers.remove(player)) return false; @@ -757,7 +754,6 @@ public abstract class Entity implements Viewable, EventHandler, DataContainer, P * @throws IllegalStateException if {@code instance} has not been registered in {@link InstanceManager} */ public void setInstance(@NotNull Instance instance) { - Check.notNull(instance, "instance cannot be null!"); Check.stateCondition(!instance.isRegistered(), "Instances need to be registered, please use InstanceManager#registerInstance or InstanceManager#registerSharedInstance"); @@ -866,7 +862,6 @@ public abstract class Entity implements Viewable, EventHandler, DataContainer, P * @return the distance between this and {@code entity} */ public float getDistance(@NotNull Entity entity) { - Check.notNull(entity, "Entity cannot be null"); return getPosition().getDistance(entity.getPosition()); } @@ -888,7 +883,6 @@ public abstract class Entity implements Viewable, EventHandler, DataContainer, P * @throws IllegalStateException if {@link #getInstance()} returns null */ public void addPassenger(@NotNull Entity entity) { - Check.notNull(entity, "Passenger cannot be null"); Check.stateCondition(instance == null, "You need to set an instance using Entity#setInstance"); if (entity.getVehicle() != null) { @@ -909,7 +903,6 @@ public abstract class Entity implements Viewable, EventHandler, DataContainer, P * @throws IllegalStateException if {@link #getInstance()} returns null */ public void removePassenger(@NotNull Entity entity) { - Check.notNull(entity, "Passenger cannot be null"); Check.stateCondition(instance == null, "You need to set an instance using Entity#setInstance"); if (!passengers.remove(entity)) diff --git a/src/main/java/net/minestom/server/entity/LivingEntity.java b/src/main/java/net/minestom/server/entity/LivingEntity.java index 8ace0671d..82d8e4bf6 100644 --- a/src/main/java/net/minestom/server/entity/LivingEntity.java +++ b/src/main/java/net/minestom/server/entity/LivingEntity.java @@ -272,7 +272,6 @@ public abstract class LivingEntity extends Entity implements EquipmentHandler { * @return true if damage has been applied, false if it didn't */ public boolean damage(@NotNull DamageType type, float value) { - Check.notNull(type, "The damage type cannot be null!"); if (isDead()) return false; if (isInvulnerable() || isImmune(type)) { diff --git a/src/main/java/net/minestom/server/entity/Player.java b/src/main/java/net/minestom/server/entity/Player.java index 4925ced5c..43ba66023 100644 --- a/src/main/java/net/minestom/server/entity/Player.java +++ b/src/main/java/net/minestom/server/entity/Player.java @@ -670,7 +670,6 @@ public class Player extends LivingEntity implements CommandSender { * @param spawnPosition the new position of the player */ public void setInstance(@NotNull Instance instance, @NotNull Position spawnPosition) { - Check.notNull(instance, "instance cannot be null!"); Check.argCondition(this.instance == instance, "Instance should be different than the current one"); // true if the chunks need to be sent to the client, can be false if the instances share the same chunks (eg SharedInstance) @@ -1364,7 +1363,6 @@ public class Player extends LivingEntity implements CommandSender { * @param resourcePack the resource pack */ public void setResourcePack(@NotNull ResourcePack resourcePack) { - Check.notNull(resourcePack, "The resource pack cannot be null"); final String url = resourcePack.getUrl(); final String hash = resourcePack.getHash(); @@ -1737,7 +1735,6 @@ public class Player extends LivingEntity implements CommandSender { * @param gameMode the new player GameMode */ public void setGameMode(@NotNull GameMode gameMode) { - Check.notNull(gameMode, "GameMode cannot be null"); this.gameMode = gameMode; // Condition to prevent sending the packets before spawning the player @@ -1766,7 +1763,6 @@ public class Player extends LivingEntity implements CommandSender { * @param dimensionType the new player dimension */ protected void sendDimension(@NotNull DimensionType dimensionType) { - Check.notNull(dimensionType, "Dimension cannot be null!"); Check.argCondition(dimensionType.equals(getDimensionType()), "The dimension needs to be different than the current one!"); this.dimensionType = dimensionType; @@ -1900,7 +1896,6 @@ public class Player extends LivingEntity implements CommandSender { * @return true if the inventory has been opened/sent to the player, false otherwise (cancelled by event) */ public boolean openInventory(@NotNull Inventory inventory) { - Check.notNull(inventory, "Inventory cannot be null, use Player#closeInventory() to close current"); InventoryOpenEvent inventoryOpenEvent = new InventoryOpenEvent(inventory, this); diff --git a/src/main/java/net/minestom/server/entity/pathfinding/NavigableEntity.java b/src/main/java/net/minestom/server/entity/pathfinding/NavigableEntity.java index 5e0b21145..0b8f62d16 100644 --- a/src/main/java/net/minestom/server/entity/pathfinding/NavigableEntity.java +++ b/src/main/java/net/minestom/server/entity/pathfinding/NavigableEntity.java @@ -30,7 +30,6 @@ public interface NavigableEntity { * @param speed define how far the entity will move */ default void moveTowards(@NotNull Position direction, float speed) { - Check.notNull(direction, "The direction cannot be null"); final Position position = getNavigableEntity().getPosition(); diff --git a/src/main/java/net/minestom/server/event/handler/EventHandler.java b/src/main/java/net/minestom/server/event/handler/EventHandler.java index eaec31f87..73a583ff4 100644 --- a/src/main/java/net/minestom/server/event/handler/EventHandler.java +++ b/src/main/java/net/minestom/server/event/handler/EventHandler.java @@ -37,8 +37,6 @@ public interface EventHandler { * @return true if the callback collection changed as a result of the call */ default boolean addEventCallback(@NotNull Class eventClass, @NotNull EventCallback eventCallback) { - Check.notNull(eventClass, "Event class cannot be null"); - Check.notNull(eventCallback, "Event callback cannot be null"); Collection callbacks = getEventCallbacks(eventClass); return callbacks.add(eventCallback); } @@ -52,8 +50,6 @@ public interface EventHandler { * @return true if the callback was removed as a result of this call */ default boolean removeEventCallback(@NotNull Class eventClass, @NotNull EventCallback eventCallback) { - Check.notNull(eventClass, "Event class cannot be null"); - Check.notNull(eventCallback, "Event callback cannot be null"); Collection callbacks = getEventCallbacks(eventClass); return callbacks.remove(eventCallback); } @@ -67,7 +63,6 @@ public interface EventHandler { */ @NotNull default Collection getEventCallbacks(@NotNull Class eventClass) { - Check.notNull(eventClass, "Event class cannot be null"); return getEventCallbacksMap().computeIfAbsent(eventClass, clazz -> new CopyOnWriteArraySet<>()); } diff --git a/src/main/java/net/minestom/server/instance/BlockModifier.java b/src/main/java/net/minestom/server/instance/BlockModifier.java index 3cfb2b852..c5a7fdfe2 100644 --- a/src/main/java/net/minestom/server/instance/BlockModifier.java +++ b/src/main/java/net/minestom/server/instance/BlockModifier.java @@ -71,13 +71,10 @@ public interface BlockModifier { } default void setBlock(@NotNull BlockPosition blockPosition, @NotNull Block block) { - Check.notNull(blockPosition, "The block position cannot be null"); - Check.notNull(block, "The block cannot be null"); setBlock(blockPosition.getX(), blockPosition.getY(), blockPosition.getZ(), block); } default void setBlockStateId(@NotNull BlockPosition blockPosition, short blockStateId) { - Check.notNull(blockPosition, "The block position cannot be null"); setBlockStateId(blockPosition.getX(), blockPosition.getY(), blockPosition.getZ(), blockStateId); } @@ -97,7 +94,6 @@ public interface BlockModifier { } default void setCustomBlock(@NotNull BlockPosition blockPosition, @NotNull String customBlockId) { - Check.notNull(blockPosition, "The block position cannot be null"); setCustomBlock(blockPosition.getX(), blockPosition.getY(), blockPosition.getZ(), customBlockId); } @@ -106,7 +102,6 @@ public interface BlockModifier { } default void setSeparateBlocks(@NotNull BlockPosition blockPosition, short blockStateId, short customBlockId) { - Check.notNull(blockPosition, "The block position cannot be null"); setSeparateBlocks(blockPosition.getX(), blockPosition.getY(), blockPosition.getZ(), blockStateId, customBlockId, null); } diff --git a/src/main/java/net/minestom/server/instance/Chunk.java b/src/main/java/net/minestom/server/instance/Chunk.java index 736091c18..3c79c545a 100644 --- a/src/main/java/net/minestom/server/instance/Chunk.java +++ b/src/main/java/net/minestom/server/instance/Chunk.java @@ -1,5 +1,6 @@ package net.minestom.server.instance; +import it.unimi.dsi.fastutil.ints.IntSet; import net.minestom.server.MinecraftServer; import net.minestom.server.Viewable; import net.minestom.server.data.Data; @@ -196,7 +197,7 @@ public abstract class Chunk implements Viewable, DataContainer { * @return the block entities in this chunk */ @NotNull - public abstract Set getBlockEntities(); + public abstract IntSet getBlockEntities(); /** * Gets the last time that this chunk changed. diff --git a/src/main/java/net/minestom/server/instance/DynamicChunk.java b/src/main/java/net/minestom/server/instance/DynamicChunk.java index a6bf60385..9a13ee1cc 100644 --- a/src/main/java/net/minestom/server/instance/DynamicChunk.java +++ b/src/main/java/net/minestom/server/instance/DynamicChunk.java @@ -193,7 +193,7 @@ public class DynamicChunk extends Chunk { @NotNull @Override - public Set getBlockEntities() { + public IntSet getBlockEntities() { return blockEntities; } diff --git a/src/main/java/net/minestom/server/instance/InstanceContainer.java b/src/main/java/net/minestom/server/instance/InstanceContainer.java index 652f79d9f..f1ca1d782 100644 --- a/src/main/java/net/minestom/server/instance/InstanceContainer.java +++ b/src/main/java/net/minestom/server/instance/InstanceContainer.java @@ -508,7 +508,6 @@ public class InstanceContainer extends Instance { @Override public ChunkBatch createChunkBatch(@NotNull Chunk chunk) { - Check.notNull(chunk, "The chunk of a ChunkBatch cannot be null"); return new ChunkBatch(this, chunk, false); } @@ -587,7 +586,6 @@ public class InstanceContainer extends Instance { * @throws NullPointerException if {@code chunkSupplier} is null */ public void setChunkSupplier(@NotNull ChunkSupplier chunkSupplier) { - Check.notNull(chunkSupplier, "The chunk supplier cannot be null!"); this.chunkSupplier = chunkSupplier; } diff --git a/src/main/java/net/minestom/server/inventory/click/InventoryClickProcessor.java b/src/main/java/net/minestom/server/inventory/click/InventoryClickProcessor.java index 5eeb7d930..5a663b997 100644 --- a/src/main/java/net/minestom/server/inventory/click/InventoryClickProcessor.java +++ b/src/main/java/net/minestom/server/inventory/click/InventoryClickProcessor.java @@ -322,12 +322,12 @@ public class InventoryClickProcessor { // End right if (!rightDraggingMap.containsKey(player)) return null; - final Set slots = rightDraggingMap.get(player); + final IntSet slots = rightDraggingMap.get(player); final int size = slots.size(); int cursorAmount = stackingRule.getAmount(cursor); if (size > cursorAmount) return null; - for (Integer s : slots) { + for (int s : slots) { ItemStack draggedItem = cursor.clone(); ItemStack slotItem = itemGetter.apply(s); diff --git a/src/main/java/net/minestom/server/item/ItemStack.java b/src/main/java/net/minestom/server/item/ItemStack.java index 400339743..696d81c71 100644 --- a/src/main/java/net/minestom/server/item/ItemStack.java +++ b/src/main/java/net/minestom/server/item/ItemStack.java @@ -117,7 +117,6 @@ public class ItemStack implements DataContainer, PublicCloneable { * @throws NullPointerException if {@code defaultStackingRule} is null */ public static void setDefaultStackingRule(@NotNull StackingRule defaultStackingRule) { - Check.notNull(defaultStackingRule, "StackingRule cannot be null!"); ItemStack.defaultStackingRule = defaultStackingRule; } @@ -635,7 +634,6 @@ public class ItemStack implements DataContainer, PublicCloneable { * @throws NullPointerException if {@code stackingRule} is null */ public void setStackingRule(@NotNull StackingRule stackingRule) { - Check.notNull(stackingRule, "The stacking rule cannot be null!"); this.stackingRule = stackingRule; } diff --git a/src/main/java/net/minestom/server/registry/ResourceGatherer.java b/src/main/java/net/minestom/server/registry/ResourceGatherer.java index c93165c0e..7af935d5b 100644 --- a/src/main/java/net/minestom/server/registry/ResourceGatherer.java +++ b/src/main/java/net/minestom/server/registry/ResourceGatherer.java @@ -4,6 +4,7 @@ import com.google.gson.Gson; import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; +import it.unimi.dsi.fastutil.io.FastBufferedInputStream; import org.apache.commons.codec.digest.DigestUtils; import org.apache.commons.lang3.StringUtils; import org.jetbrains.annotations.NotNull; @@ -169,7 +170,7 @@ public class ResourceGatherer { private static File download(@NotNull String version, @NotNull String url, @NotNull String sha1Source) throws IOException { File target = new File(TMP_FOLDER, "server_" + version + ".jar"); // Download - try (BufferedInputStream in = new BufferedInputStream(new URL(url).openStream())) { + try (FastBufferedInputStream in = new FastBufferedInputStream(new URL(url).openStream())) { Files.copy(in, target.toPath(), StandardCopyOption.REPLACE_EXISTING); } catch (IOException e) { throw new IOException("Failed to download Minecraft server jar.", e); diff --git a/src/main/java/net/minestom/server/resourcepack/ResourcePack.java b/src/main/java/net/minestom/server/resourcepack/ResourcePack.java index 18c2f3faf..f0837c540 100644 --- a/src/main/java/net/minestom/server/resourcepack/ResourcePack.java +++ b/src/main/java/net/minestom/server/resourcepack/ResourcePack.java @@ -14,7 +14,6 @@ public class ResourcePack { private final String hash; public ResourcePack(@NotNull String url, @Nullable String hash) { - Check.notNull(url, "The resource pack url cannot be null"); this.url = url; // Optional, set to empty if null this.hash = hash == null ? "" : hash; diff --git a/src/main/java/net/minestom/server/storage/StorageManager.java b/src/main/java/net/minestom/server/storage/StorageManager.java index f5888a580..4e3bd718a 100644 --- a/src/main/java/net/minestom/server/storage/StorageManager.java +++ b/src/main/java/net/minestom/server/storage/StorageManager.java @@ -36,7 +36,6 @@ public final class StorageManager { * @return the specified {@link StorageLocation} */ public StorageLocation getLocation(@NotNull String location, @NotNull StorageOptions storageOptions, @NotNull StorageSystem storageSystem) { - Check.notNull(storageOptions, "The storage option cannot be null"); return locationMap.computeIfAbsent(location, s -> new StorageLocation(storageSystem, location, storageOptions)); }