608 lines
37 KiB
Diff
608 lines
37 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Simon Gardling <titaniumtown@gmail.com>
|
|
Date: Tue, 9 Nov 2021 16:53:39 -0500
|
|
Subject: [PATCH] reduce allocs
|
|
|
|
This patch includes code from the lithium project under the GNU Lesser General Public License v3.0: https://github.com/CaffeineMC/lithium-fabric/ but also original code created by your's truly
|
|
|
|
Original code by Titaniumtown, licensed under GNU General Public License v3.0
|
|
You can find the original code on https://gitlab.com/Titaniumtown/JettPack
|
|
|
|
diff --git a/src/main/java/com/destroystokyo/paper/PaperCommand.java b/src/main/java/com/destroystokyo/paper/PaperCommand.java
|
|
index 76d27205b2bd08ba2b3530b46f0d9b4e2315d82e..d0b6b17b8edf80b1c0ca60b8f9eb4f9fb18ca159 100644
|
|
--- a/src/main/java/com/destroystokyo/paper/PaperCommand.java
|
|
+++ b/src/main/java/com/destroystokyo/paper/PaperCommand.java
|
|
@@ -214,7 +214,7 @@ public class PaperCommand extends Command {
|
|
case "version":
|
|
Command ver = MinecraftServer.getServer().server.getCommandMap().getCommand("version");
|
|
if (ver != null) {
|
|
- ver.execute(sender, commandLabel, new String[0]);
|
|
+ ver.execute(sender, commandLabel, me.titaniumtown.Constants.EMPTY_string_arr); // JettPack
|
|
break;
|
|
}
|
|
// else - fall through to default
|
|
diff --git a/src/main/java/com/destroystokyo/paper/util/maplist/EntityList.java b/src/main/java/com/destroystokyo/paper/util/maplist/EntityList.java
|
|
index 0133ea6feb1ab88f021f66855669f58367e7420b..cd5499e750764eaa5e361e73eb581bfce7f9f7c1 100644
|
|
--- a/src/main/java/com/destroystokyo/paper/util/maplist/EntityList.java
|
|
+++ b/src/main/java/com/destroystokyo/paper/util/maplist/EntityList.java
|
|
@@ -17,9 +17,9 @@ public final class EntityList implements Iterable<Entity> {
|
|
this.entityToIndex.defaultReturnValue(Integer.MIN_VALUE);
|
|
}
|
|
|
|
- protected static final Entity[] EMPTY_LIST = new Entity[0];
|
|
+ // protected static final Entity[] EMPTY_LIST = new Entity[0]; // JettPack
|
|
|
|
- protected Entity[] entities = EMPTY_LIST;
|
|
+ protected Entity[] entities = me.titaniumtown.Constants.EMPTY_entity_arr; // JettPack
|
|
protected int count;
|
|
|
|
public int size() {
|
|
diff --git a/src/main/java/com/destroystokyo/paper/util/maplist/IBlockDataList.java b/src/main/java/com/destroystokyo/paper/util/maplist/IBlockDataList.java
|
|
index 277cfd9d1e8fff5d9b5e534b75c3c5162d58b0b7..afd194c5e63f4f8e2220c5b382138e96ecb14c1b 100644
|
|
--- a/src/main/java/com/destroystokyo/paper/util/maplist/IBlockDataList.java
|
|
+++ b/src/main/java/com/destroystokyo/paper/util/maplist/IBlockDataList.java
|
|
@@ -20,9 +20,7 @@ public final class IBlockDataList {
|
|
this.map.defaultReturnValue(Long.MAX_VALUE);
|
|
}
|
|
|
|
- private static final long[] EMPTY_LIST = new long[0];
|
|
-
|
|
- private long[] byIndex = EMPTY_LIST;
|
|
+ private long[] byIndex = me.titaniumtown.Constants.EMPTY_long_arr; // JettPack
|
|
private int size;
|
|
|
|
public static int getLocationKey(final int x, final int y, final int z) {
|
|
diff --git a/src/main/java/io/papermc/paper/world/ChunkEntitySlices.java b/src/main/java/io/papermc/paper/world/ChunkEntitySlices.java
|
|
index 47b5f75d9f27cf3ab947fd1f69cbd609fb9f2749..a919e8a2aa10ba01d7f389985591a0681c1b4426 100644
|
|
--- a/src/main/java/io/papermc/paper/world/ChunkEntitySlices.java
|
|
+++ b/src/main/java/io/papermc/paper/world/ChunkEntitySlices.java
|
|
@@ -63,7 +63,7 @@ public final class ChunkEntitySlices {
|
|
}
|
|
}
|
|
|
|
- return ret.toArray(new org.bukkit.entity.Entity[0]);
|
|
+ return ret.toArray(me.titaniumtown.Constants.EMPTY_bukkit_entity_arr); // JettPack
|
|
}
|
|
// Paper end - optimise CraftChunk#getEntities
|
|
|
|
@@ -189,7 +189,7 @@ public final class ChunkEntitySlices {
|
|
|
|
protected static final class BasicEntityList<E extends Entity> {
|
|
|
|
- protected static final Entity[] EMPTY = new Entity[0];
|
|
+ // protected static final Entity[] EMPTY = new Entity[0]; // JettPack
|
|
protected static final int DEFAULT_CAPACITY = 4;
|
|
|
|
protected E[] storage;
|
|
@@ -200,7 +200,7 @@ public final class ChunkEntitySlices {
|
|
}
|
|
|
|
public BasicEntityList(final int cap) {
|
|
- this.storage = (E[])(cap <= 0 ? EMPTY : new Entity[cap]);
|
|
+ this.storage = (E[])(cap <= 0 ? me.titaniumtown.Constants.EMPTY_entity_arr : new Entity[cap]); // JettPack
|
|
}
|
|
|
|
public boolean isEmpty() {
|
|
@@ -212,7 +212,7 @@ public final class ChunkEntitySlices {
|
|
}
|
|
|
|
private void resize() {
|
|
- if (this.storage == EMPTY) {
|
|
+ if (this.storage == me.titaniumtown.Constants.EMPTY_entity_arr) { // JettPack
|
|
this.storage = (E[])new Entity[DEFAULT_CAPACITY];
|
|
} else {
|
|
this.storage = Arrays.copyOf(this.storage, this.storage.length * 2);
|
|
diff --git a/src/main/java/me/titaniumtown/Constants.java b/src/main/java/me/titaniumtown/Constants.java
|
|
new file mode 100644
|
|
index 0000000000000000000000000000000000000000..dd37ade3801561a2da0fe859a127c811c54003ea
|
|
--- /dev/null
|
|
+++ b/src/main/java/me/titaniumtown/Constants.java
|
|
@@ -0,0 +1,14 @@
|
|
+package me.titaniumtown;
|
|
+
|
|
+import net.minecraft.core.BlockPos;
|
|
+
|
|
+public final class Constants {
|
|
+ public static final Object[] EMPTY_object_arr = new Object[0];
|
|
+ public static final int[] EMPTY_int_arr = new int[0];
|
|
+ public static final int[] ZERO_int_arr = new int[]{0};
|
|
+ public static final byte[] EMPTY_byte_arr = new byte[0];
|
|
+ public static final String[] EMPTY_string_arr = new String[0];
|
|
+ public static final long[] EMPTY_long_arr = new long[0];
|
|
+ public static final org.bukkit.entity.Entity[] EMPTY_bukkit_entity_arr = new org.bukkit.entity.Entity[0];
|
|
+ public static final net.minecraft.world.entity.Entity[] EMPTY_entity_arr = new net.minecraft.world.entity.Entity[0];
|
|
+}
|
|
diff --git a/src/main/java/net/minecraft/nbt/ByteArrayTag.java b/src/main/java/net/minecraft/nbt/ByteArrayTag.java
|
|
index 3dd8a189c26f41759c59c3b9d0e5282038989a9f..147beddf8ef369cdae4b1ed2dcd0d7b2fd865315 100644
|
|
--- a/src/main/java/net/minecraft/nbt/ByteArrayTag.java
|
|
+++ b/src/main/java/net/minecraft/nbt/ByteArrayTag.java
|
|
@@ -170,7 +170,7 @@ public class ByteArrayTag extends CollectionTag<ByteTag> {
|
|
}
|
|
|
|
public void clear() {
|
|
- this.data = new byte[0];
|
|
+ this.data = me.titaniumtown.Constants.EMPTY_byte_arr; // JettPack
|
|
}
|
|
|
|
@Override
|
|
diff --git a/src/main/java/net/minecraft/nbt/CompoundTag.java b/src/main/java/net/minecraft/nbt/CompoundTag.java
|
|
index 210f81e380cb38c2d5d69849e593d2fdb54e8856..bf2faf02785689e2296f9bae146f8865fc105c66 100644
|
|
--- a/src/main/java/net/minecraft/nbt/CompoundTag.java
|
|
+++ b/src/main/java/net/minecraft/nbt/CompoundTag.java
|
|
@@ -365,7 +365,7 @@ public class CompoundTag implements Tag {
|
|
throw new ReportedException(this.createReport(key, ByteArrayTag.TYPE, var3));
|
|
}
|
|
|
|
- return new byte[0];
|
|
+ return me.titaniumtown.Constants.EMPTY_byte_arr; // JettPack
|
|
}
|
|
|
|
public int[] getIntArray(String key) {
|
|
@@ -377,7 +377,7 @@ public class CompoundTag implements Tag {
|
|
throw new ReportedException(this.createReport(key, IntArrayTag.TYPE, var3));
|
|
}
|
|
|
|
- return new int[0];
|
|
+ return me.titaniumtown.Constants.EMPTY_int_arr; // JettPack
|
|
}
|
|
|
|
public long[] getLongArray(String key) {
|
|
@@ -389,7 +389,7 @@ public class CompoundTag implements Tag {
|
|
throw new ReportedException(this.createReport(key, LongArrayTag.TYPE, var3));
|
|
}
|
|
|
|
- return new long[0];
|
|
+ return me.titaniumtown.Constants.EMPTY_long_arr; // JettPack
|
|
}
|
|
|
|
public CompoundTag getCompound(String key) {
|
|
diff --git a/src/main/java/net/minecraft/nbt/IntArrayTag.java b/src/main/java/net/minecraft/nbt/IntArrayTag.java
|
|
index a14b01cee7a8d7022c4fa7264d349a76be143ba5..44f441d6c102fa5bd50071cae991a8a6ba0ec713 100644
|
|
--- a/src/main/java/net/minecraft/nbt/IntArrayTag.java
|
|
+++ b/src/main/java/net/minecraft/nbt/IntArrayTag.java
|
|
@@ -184,7 +184,7 @@ public class IntArrayTag extends CollectionTag<IntTag> {
|
|
}
|
|
|
|
public void clear() {
|
|
- this.data = new int[0];
|
|
+ this.data = me.titaniumtown.Constants.EMPTY_int_arr; // JettPack
|
|
}
|
|
|
|
@Override
|
|
diff --git a/src/main/java/net/minecraft/nbt/ListTag.java b/src/main/java/net/minecraft/nbt/ListTag.java
|
|
index ea68b26e506e48d8238b7ee4266e61b211d52bd2..5d7d160a1e575903999c00da9faf5359949ce1cb 100644
|
|
--- a/src/main/java/net/minecraft/nbt/ListTag.java
|
|
+++ b/src/main/java/net/minecraft/nbt/ListTag.java
|
|
@@ -221,7 +221,7 @@ public class ListTag extends CollectionTag<Tag> {
|
|
}
|
|
}
|
|
|
|
- return new int[0];
|
|
+ return me.titaniumtown.Constants.EMPTY_int_arr; // JettPack
|
|
}
|
|
|
|
public long[] getLongArray(int index) {
|
|
@@ -232,7 +232,7 @@ public class ListTag extends CollectionTag<Tag> {
|
|
}
|
|
}
|
|
|
|
- return new long[0];
|
|
+ return me.titaniumtown.Constants.EMPTY_long_arr; // JettPack
|
|
}
|
|
|
|
public double getDouble(int index) {
|
|
diff --git a/src/main/java/net/minecraft/network/Connection.java b/src/main/java/net/minecraft/network/Connection.java
|
|
index 7b8f9cf06833860d0fc02399822e6aea214883ed..1caa987e2f03203379fb2f798d38d2240665fa00 100644
|
|
--- a/src/main/java/net/minecraft/network/Connection.java
|
|
+++ b/src/main/java/net/minecraft/network/Connection.java
|
|
@@ -304,7 +304,7 @@ public class Connection extends SimpleChannelInboundHandler<Packet<?>> {
|
|
}
|
|
|
|
public void setListener(PacketListener listener) {
|
|
- Validate.notNull(listener, "packetListener", new Object[0]);
|
|
+ Validate.notNull(listener, "packetListener", me.titaniumtown.Constants.EMPTY_object_arr);
|
|
this.packetListener = listener;
|
|
}
|
|
// Paper start
|
|
diff --git a/src/main/java/net/minecraft/server/Main.java b/src/main/java/net/minecraft/server/Main.java
|
|
index e2c8f716af55ebb7e4233c2a3d6515f8f4a239fa..2f5c021b6849acb81064d55418707921424b649b 100644
|
|
--- a/src/main/java/net/minecraft/server/Main.java
|
|
+++ b/src/main/java/net/minecraft/server/Main.java
|
|
@@ -76,7 +76,7 @@ public class Main {
|
|
OptionSpec<Void> optionspec6 = optionparser.accepts("safeMode", "Loads level with vanilla datapack only");
|
|
OptionSpec<Void> optionspec7 = optionparser.accepts("help").forHelp();
|
|
OptionSpec<String> optionspec8 = optionparser.accepts("singleplayer").withRequiredArg();
|
|
- OptionSpec<String> optionspec9 = optionparser.accepts("universe").withRequiredArg().defaultsTo(".", new String[0]);
|
|
+ OptionSpec<String> optionspec9 = optionparser.accepts("universe").withRequiredArg().defaultsTo(".", me.titaniumtown.Constants.EMPTY_string_arr); // JettPack
|
|
OptionSpec<String> optionspec10 = optionparser.accepts("world").withRequiredArg();
|
|
OptionSpec<Integer> optionspec11 = optionparser.accepts("port").withRequiredArg().ofType(Integer.class).defaultsTo(-1, new Integer[0]);
|
|
OptionSpec<String> optionspec12 = optionparser.accepts("serverId").withRequiredArg();
|
|
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
|
|
index 4c5ee8ab215e8fedf65d2e28ac8dd5621a860385..f499eb2d3d3982dbcb9ff54896f91e2b556f087a 100644
|
|
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
|
|
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
|
|
@@ -1427,8 +1427,8 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
|
|
try {
|
|
BufferedImage bufferedimage = ImageIO.read(file);
|
|
|
|
- Validate.validState(bufferedimage.getWidth() == 64, "Must be 64 pixels wide", new Object[0]);
|
|
- Validate.validState(bufferedimage.getHeight() == 64, "Must be 64 pixels high", new Object[0]);
|
|
+ Validate.validState(bufferedimage.getWidth() == 64, "Must be 64 pixels wide", me.titaniumtown.Constants.EMPTY_object_arr);
|
|
+ Validate.validState(bufferedimage.getHeight() == 64, "Must be 64 pixels high", me.titaniumtown.Constants.EMPTY_object_arr);
|
|
ByteArrayOutputStream bytearrayoutputstream = new ByteArrayOutputStream();
|
|
|
|
ImageIO.write(bufferedimage, "PNG", bytearrayoutputstream);
|
|
diff --git a/src/main/java/net/minecraft/server/level/ServerEntity.java b/src/main/java/net/minecraft/server/level/ServerEntity.java
|
|
index e80176708db486190dd527e3ade5fc690ceb39f7..eeb8bf5c04661ed7232aa0ba3eb7be4d10e9254a 100644
|
|
--- a/src/main/java/net/minecraft/server/level/ServerEntity.java
|
|
+++ b/src/main/java/net/minecraft/server/level/ServerEntity.java
|
|
@@ -313,7 +313,7 @@ public class ServerEntity {
|
|
|
|
if (this.entity instanceof LivingEntity) {
|
|
List<Pair<EquipmentSlot, ItemStack>> list = Lists.newArrayList();
|
|
- EquipmentSlot[] aenumitemslot = EquipmentSlot.values();
|
|
+ EquipmentSlot[] aenumitemslot = EquipmentSlot.VALUES; // JettPack
|
|
int i = aenumitemslot.length;
|
|
|
|
for (int j = 0; j < i; ++j) {
|
|
diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java
|
|
index 740e1d7b299e78668bff5b176bbe54f478c73fd3..11d4a0ae6ee18c64bcb406093505f6e7f66dd334 100644
|
|
--- a/src/main/java/net/minecraft/server/level/ServerLevel.java
|
|
+++ b/src/main/java/net/minecraft/server/level/ServerLevel.java
|
|
@@ -849,7 +849,7 @@ public class ServerLevel extends Level implements WorldGenLevel {
|
|
BlockPos blockposition2 = blockposition.set(j + randomX, randomY, k + randomZ);
|
|
BlockState iblockdata = com.destroystokyo.paper.util.maplist.IBlockDataList.getBlockDataFromRaw(raw);
|
|
|
|
- iblockdata.randomTick(this, blockposition2, this.randomTickRandom);
|
|
+ iblockdata.randomTick(this, blockposition2.immutable(), this.randomTickRandom); // JettPack - reduce allocs
|
|
// We drop the fluid tick since LAVA is ALREADY TICKED by the above method (See LiquidBlock).
|
|
// TODO CHECK ON UPDATE
|
|
}
|
|
@@ -1102,7 +1102,7 @@ public class ServerLevel extends Level implements WorldGenLevel {
|
|
|
|
public static List<Entity> getCurrentlyTickingEntities() {
|
|
Entity ticking = currentlyTickingEntity.get();
|
|
- List<Entity> ret = java.util.Arrays.asList(ticking == null ? new Entity[0] : new Entity[] { ticking });
|
|
+ List<Entity> ret = java.util.Arrays.asList(ticking == null ? me.titaniumtown.Constants.EMPTY_entity_arr : new Entity[] { ticking }); // JettPack
|
|
|
|
return ret;
|
|
}
|
|
diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
|
index b9f2f6713bd9e3431ddbf2a41f16cbda5739ef57..eda3cdaaa707c180c96553a0139ebed8103d0e03 100644
|
|
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
|
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
|
@@ -359,7 +359,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Ser
|
|
if (this.keepAlivePending) {
|
|
if (!this.processedDisconnect && elapsedTime >= KEEPALIVE_LIMIT) { // check keepalive limit, don't fire if already disconnected
|
|
ServerGamePacketListenerImpl.LOGGER.warn("{} was kicked due to keepalive timeout!", this.player.getScoreboardName()); // more info
|
|
- this.disconnect(new TranslatableComponent("disconnect.timeout", new Object[0]), org.bukkit.event.player.PlayerKickEvent.Cause.TIMEOUT); // Paper - kick event cause
|
|
+ this.disconnect(new TranslatableComponent("disconnect.timeout", me.titaniumtown.Constants.EMPTY_object_arr), org.bukkit.event.player.PlayerKickEvent.Cause.TIMEOUT); // Paper - kick event cause
|
|
}
|
|
} else {
|
|
if (elapsedTime >= 15000L) { // 15 seconds
|
|
@@ -796,13 +796,13 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Ser
|
|
// PlayerConnectionUtils.ensureMainThread(packetplayintabcomplete, this, this.player.getWorldServer()); // Paper - run this async
|
|
// CraftBukkit start
|
|
if (this.chatSpamTickCount.addAndGet(com.destroystokyo.paper.PaperConfig.tabSpamIncrement) > com.destroystokyo.paper.PaperConfig.tabSpamLimit && !this.server.getPlayerList().isOp(this.player.getGameProfile())) { // Paper start - split and make configurable
|
|
- server.scheduleOnMain(() -> this.disconnect(new TranslatableComponent("disconnect.spam", new Object[0]), org.bukkit.event.player.PlayerKickEvent.Cause.SPAM)); // Paper - kick event cause
|
|
+ server.scheduleOnMain(() -> this.disconnect(new TranslatableComponent("disconnect.spam", me.titaniumtown.Constants.EMPTY_object_arr), org.bukkit.event.player.PlayerKickEvent.Cause.SPAM)); // Paper - kick event cause
|
|
return;
|
|
}
|
|
// Paper start
|
|
String str = packet.getCommand(); int index = -1;
|
|
if (str.length() > 64 && ((index = str.indexOf(' ')) == -1 || index >= 64)) {
|
|
- server.scheduleOnMain(() -> this.disconnect(new TranslatableComponent("disconnect.spam", new Object[0]), org.bukkit.event.player.PlayerKickEvent.Cause.SPAM)); // Paper - kick event cause
|
|
+ server.scheduleOnMain(() -> this.disconnect(new TranslatableComponent("disconnect.spam", me.titaniumtown.Constants.EMPTY_object_arr), org.bukkit.event.player.PlayerKickEvent.Cause.SPAM)); // Paper - kick event cause
|
|
return;
|
|
}
|
|
// Paper end
|
|
@@ -2928,7 +2928,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Ser
|
|
// Paper start
|
|
if (!org.bukkit.Bukkit.isPrimaryThread()) {
|
|
if (recipeSpamPackets.addAndGet(com.destroystokyo.paper.PaperConfig.autoRecipeIncrement) > com.destroystokyo.paper.PaperConfig.autoRecipeLimit) {
|
|
- server.scheduleOnMain(() -> this.disconnect(new TranslatableComponent("disconnect.spam", new Object[0]), org.bukkit.event.player.PlayerKickEvent.Cause.SPAM)); // Paper - kick event cause
|
|
+ server.scheduleOnMain(() -> this.disconnect(new TranslatableComponent("disconnect.spam", me.titaniumtown.Constants.EMPTY_object_arr), org.bukkit.event.player.PlayerKickEvent.Cause.SPAM)); // Paper - kick event cause
|
|
return;
|
|
}
|
|
}
|
|
diff --git a/src/main/java/net/minecraft/server/network/ServerLoginPacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerLoginPacketListenerImpl.java
|
|
index 368e32bc12a1a09bf7309f299a1a72554947f43b..4ed4d3c13816f3a9cc9ff5e7aad74c9f7d1a2841 100644
|
|
--- a/src/main/java/net/minecraft/server/network/ServerLoginPacketListenerImpl.java
|
|
+++ b/src/main/java/net/minecraft/server/network/ServerLoginPacketListenerImpl.java
|
|
@@ -253,7 +253,7 @@ public class ServerLoginPacketListenerImpl implements ServerLoginPacketListener
|
|
|
|
@Override
|
|
public void handleHello(ServerboundHelloPacket packet) {
|
|
- Validate.validState(this.state == ServerLoginPacketListenerImpl.State.HELLO, "Unexpected hello packet", new Object[0]);
|
|
+ Validate.validState(this.state == ServerLoginPacketListenerImpl.State.HELLO, "Unexpected hello packet", me.titaniumtown.Constants.EMPTY_object_arr);
|
|
this.gameProfile = packet.getGameProfile();
|
|
// Paper start - validate usernames
|
|
if (com.destroystokyo.paper.PaperConfig.isProxyOnlineMode() && com.destroystokyo.paper.PaperConfig.performUsernameValidation) {
|
|
@@ -297,7 +297,7 @@ public class ServerLoginPacketListenerImpl implements ServerLoginPacketListener
|
|
|
|
@Override
|
|
public void handleKey(ServerboundKeyPacket packet) {
|
|
- Validate.validState(this.state == ServerLoginPacketListenerImpl.State.KEY, "Unexpected key packet", new Object[0]);
|
|
+ Validate.validState(this.state == ServerLoginPacketListenerImpl.State.KEY, "Unexpected key packet", me.titaniumtown.Constants.EMPTY_object_arr);
|
|
PrivateKey privatekey = this.server.getKeyPair().getPrivate();
|
|
|
|
final String s;
|
|
diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java
|
|
index 7a0c1ba40156df69bbbf36d96bed0950130d2351..7f64fdda4811542c49cbddb0faad565989447258 100644
|
|
--- a/src/main/java/net/minecraft/server/players/PlayerList.java
|
|
+++ b/src/main/java/net/minecraft/server/players/PlayerList.java
|
|
@@ -316,7 +316,7 @@ public abstract class PlayerList {
|
|
}
|
|
|
|
void disconnectPendingPlayer(ServerPlayer entityplayer) {
|
|
- TranslatableComponent msg = new TranslatableComponent("multiplayer.disconnect.duplicate_login", new Object[0]);
|
|
+ TranslatableComponent msg = new TranslatableComponent("multiplayer.disconnect.duplicate_login", me.titaniumtown.Constants.EMPTY_object_arr);
|
|
entityplayer.networkManager.send(new ClientboundDisconnectPacket(msg), (future) -> {
|
|
entityplayer.networkManager.disconnect(msg);
|
|
entityplayer.networkManager = null;
|
|
@@ -724,7 +724,7 @@ public abstract class PlayerList {
|
|
while (iterator.hasNext()) {
|
|
entityplayer = (ServerPlayer) iterator.next();
|
|
this.save(entityplayer); // CraftBukkit - Force the player's inventory to be saved
|
|
- entityplayer.connection.disconnect(new TranslatableComponent("multiplayer.disconnect.duplicate_login", new Object[0]), org.bukkit.event.player.PlayerKickEvent.Cause.DUPLICATE_LOGIN); // Paper - kick event cause
|
|
+ entityplayer.connection.disconnect(new TranslatableComponent("multiplayer.disconnect.duplicate_login", me.titaniumtown.Constants.EMPTY_object_arr), org.bukkit.event.player.PlayerKickEvent.Cause.DUPLICATE_LOGIN); // Paper - kick event cause
|
|
}
|
|
|
|
// Instead of kicking then returning, we need to store the kick reason
|
|
diff --git a/src/main/java/net/minecraft/server/players/StoredUserList.java b/src/main/java/net/minecraft/server/players/StoredUserList.java
|
|
index 8982562721c3a5a5a3305e90bd8b5bc21585a425..08ec8433931fc4347b4e679b9359895ade82d7f6 100644
|
|
--- a/src/main/java/net/minecraft/server/players/StoredUserList.java
|
|
+++ b/src/main/java/net/minecraft/server/players/StoredUserList.java
|
|
@@ -95,7 +95,7 @@ public abstract class StoredUserList<K, V extends StoredUserEntry<K>> {
|
|
}
|
|
|
|
public String[] getUserList() {
|
|
- return (String[]) this.map.keySet().toArray(new String[0]);
|
|
+ return (String[]) this.map.keySet().toArray(me.titaniumtown.Constants.EMPTY_string_arr); // JettPack
|
|
}
|
|
|
|
// CraftBukkit start
|
|
diff --git a/src/main/java/net/minecraft/util/ZeroBitStorage.java b/src/main/java/net/minecraft/util/ZeroBitStorage.java
|
|
index 5d8e9bdf5538b19681f21949368d862fab8a89ad..97c744508cc535418eba65fa722859c81c22d647 100644
|
|
--- a/src/main/java/net/minecraft/util/ZeroBitStorage.java
|
|
+++ b/src/main/java/net/minecraft/util/ZeroBitStorage.java
|
|
@@ -5,7 +5,7 @@ import java.util.function.IntConsumer;
|
|
import org.apache.commons.lang3.Validate;
|
|
|
|
public class ZeroBitStorage implements BitStorage {
|
|
- public static final long[] RAW = new long[0];
|
|
+ public static final long[] RAW = me.titaniumtown.Constants.EMPTY_long_arr; // JettPack
|
|
private final int size;
|
|
|
|
public ZeroBitStorage(int size) {
|
|
diff --git a/src/main/java/net/minecraft/world/entity/EquipmentSlot.java b/src/main/java/net/minecraft/world/entity/EquipmentSlot.java
|
|
index c82bb38b5b1c9204daef21455723d21509ad1c44..47425ce7091ed8afaa2573901225c92d387005e6 100644
|
|
--- a/src/main/java/net/minecraft/world/entity/EquipmentSlot.java
|
|
+++ b/src/main/java/net/minecraft/world/entity/EquipmentSlot.java
|
|
@@ -13,6 +13,8 @@ public enum EquipmentSlot {
|
|
private final int filterFlag;
|
|
private final String name;
|
|
|
|
+ public static final EquipmentSlot[] VALUES = EquipmentSlot.values(); // JettPack - reduce allocs
|
|
+
|
|
private EquipmentSlot(EquipmentSlot.Type type, int entityId, int armorStandId, String name) {
|
|
this.type = type;
|
|
this.index = entityId;
|
|
diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java
|
|
index 6f98681ac54f575be047867a8c0b58e1dbd2a37d..157b3c1f034166833c1c0393cdcdf2a89432ecd1 100644
|
|
--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java
|
|
+++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java
|
|
@@ -3029,7 +3029,7 @@ public abstract class LivingEntity extends Entity {
|
|
@Nullable
|
|
private Map<EquipmentSlot, ItemStack> collectEquipmentChanges() {
|
|
Map<EquipmentSlot, ItemStack> map = null;
|
|
- EquipmentSlot[] aenumitemslot = EquipmentSlot.values();
|
|
+ EquipmentSlot[] aenumitemslot = EquipmentSlot.VALUES; // Jettpack
|
|
int i = aenumitemslot.length;
|
|
|
|
for (int j = 0; j < i; ++j) {
|
|
diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java
|
|
index 73af374f4aa9e3e8f188434c21a5f1433cffc637..7ee01ebedfb20354359d23168d7a69f4ad7f83c0 100644
|
|
--- a/src/main/java/net/minecraft/world/entity/Mob.java
|
|
+++ b/src/main/java/net/minecraft/world/entity/Mob.java
|
|
@@ -1011,7 +1011,7 @@ public abstract class Mob extends LivingEntity {
|
|
@Override
|
|
protected void dropCustomDeathLoot(DamageSource source, int lootingMultiplier, boolean allowDrops) {
|
|
super.dropCustomDeathLoot(source, lootingMultiplier, allowDrops);
|
|
- EquipmentSlot[] aenumitemslot = EquipmentSlot.values();
|
|
+ EquipmentSlot[] aenumitemslot = EquipmentSlot.VALUES; // JettPack - reduce allocs
|
|
int j = aenumitemslot.length;
|
|
|
|
for (int k = 0; k < j; ++k) {
|
|
@@ -1073,7 +1073,7 @@ public abstract class Mob extends LivingEntity {
|
|
}
|
|
|
|
boolean flag = true;
|
|
- EquipmentSlot[] aenumitemslot = EquipmentSlot.values();
|
|
+ EquipmentSlot[] aenumitemslot = EquipmentSlot.VALUES; // JettPack - reduce allocs
|
|
int j = aenumitemslot.length;
|
|
|
|
for (int k = 0; k < j; ++k) {
|
|
@@ -1160,7 +1160,7 @@ public abstract class Mob extends LivingEntity {
|
|
float f = difficulty.getSpecialMultiplier();
|
|
|
|
this.enchantSpawnedWeapon(f);
|
|
- EquipmentSlot[] aenumitemslot = EquipmentSlot.values();
|
|
+ EquipmentSlot[] aenumitemslot = EquipmentSlot.VALUES; // JettPack - reduce allocs
|
|
int i = aenumitemslot.length;
|
|
|
|
for (int j = 0; j < i; ++j) {
|
|
@@ -1371,7 +1371,7 @@ public abstract class Mob extends LivingEntity {
|
|
t0.setInvulnerable(this.isInvulnerable());
|
|
if (flag) {
|
|
t0.setCanPickUpLoot(this.canPickUpLoot());
|
|
- EquipmentSlot[] aenumitemslot = EquipmentSlot.values();
|
|
+ EquipmentSlot[] aenumitemslot = EquipmentSlot.VALUES; // JettPack - reduce allocs
|
|
int i = aenumitemslot.length;
|
|
|
|
for (int j = 0; j < i; ++j) {
|
|
diff --git a/src/main/java/net/minecraft/world/entity/monster/ZombieVillager.java b/src/main/java/net/minecraft/world/entity/monster/ZombieVillager.java
|
|
index 5c6b2bc734c4f49395856975ff77bfbae2b0e85a..98410e788cfe7d7b9864d74f3a6d08bcf1242cd8 100644
|
|
--- a/src/main/java/net/minecraft/world/entity/monster/ZombieVillager.java
|
|
+++ b/src/main/java/net/minecraft/world/entity/monster/ZombieVillager.java
|
|
@@ -226,7 +226,7 @@ public class ZombieVillager extends Zombie implements VillagerDataHolder {
|
|
return;
|
|
}
|
|
// CraftBukkit end
|
|
- EquipmentSlot[] aenumitemslot = EquipmentSlot.values();
|
|
+ EquipmentSlot[] aenumitemslot = EquipmentSlot.VALUES; // JettPack - reduce allocs
|
|
int i = aenumitemslot.length;
|
|
|
|
for (int j = 0; j < i; ++j) {
|
|
diff --git a/src/main/java/net/minecraft/world/item/crafting/ShapedRecipe.java b/src/main/java/net/minecraft/world/item/crafting/ShapedRecipe.java
|
|
index 9e3f9099cc47e6c6e40d11ef6d6e83fbf19a3cf7..b9c1db394ee35ed1acead620f7e9e47c60fa1532 100644
|
|
--- a/src/main/java/net/minecraft/world/item/crafting/ShapedRecipe.java
|
|
+++ b/src/main/java/net/minecraft/world/item/crafting/ShapedRecipe.java
|
|
@@ -242,7 +242,7 @@ public class ShapedRecipe implements CraftingRecipe {
|
|
}
|
|
|
|
if (pattern.length == l) {
|
|
- return new String[0];
|
|
+ return me.titaniumtown.Constants.EMPTY_string_arr; // JettPack
|
|
} else {
|
|
String[] astring1 = new String[pattern.length - l - k];
|
|
|
|
diff --git a/src/main/java/net/minecraft/world/item/enchantment/Enchantments.java b/src/main/java/net/minecraft/world/item/enchantment/Enchantments.java
|
|
index ef36f0a9b1849dd3152c0a1c81cded5c4f06aa3c..946bb3c6a59d0e611d28549ceee8946b46eaa9e3 100644
|
|
--- a/src/main/java/net/minecraft/world/item/enchantment/Enchantments.java
|
|
+++ b/src/main/java/net/minecraft/world/item/enchantment/Enchantments.java
|
|
@@ -42,8 +42,8 @@ public class Enchantments {
|
|
public static final Enchantment MULTISHOT = Enchantments.register("multishot", new MultiShotEnchantment(Enchantment.Rarity.RARE, new EquipmentSlot[]{EquipmentSlot.MAINHAND}));
|
|
public static final Enchantment QUICK_CHARGE = Enchantments.register("quick_charge", new QuickChargeEnchantment(Enchantment.Rarity.UNCOMMON, new EquipmentSlot[]{EquipmentSlot.MAINHAND}));
|
|
public static final Enchantment PIERCING = Enchantments.register("piercing", new ArrowPiercingEnchantment(Enchantment.Rarity.COMMON, new EquipmentSlot[]{EquipmentSlot.MAINHAND}));
|
|
- public static final Enchantment MENDING = Enchantments.register("mending", new MendingEnchantment(Enchantment.Rarity.RARE, EquipmentSlot.values()));
|
|
- public static final Enchantment VANISHING_CURSE = Enchantments.register("vanishing_curse", new VanishingCurseEnchantment(Enchantment.Rarity.VERY_RARE, EquipmentSlot.values()));
|
|
+ public static final Enchantment MENDING = Enchantments.register("mending", new MendingEnchantment(Enchantment.Rarity.RARE, EquipmentSlot.VALUES)); // JettPack
|
|
+ public static final Enchantment VANISHING_CURSE = Enchantments.register("vanishing_curse", new VanishingCurseEnchantment(Enchantment.Rarity.VERY_RARE, EquipmentSlot.VALUES)); // JettPack
|
|
|
|
// CraftBukkit start
|
|
static {
|
|
diff --git a/src/main/java/net/minecraft/world/level/EntityBasedExplosionDamageCalculator.java b/src/main/java/net/minecraft/world/level/EntityBasedExplosionDamageCalculator.java
|
|
index 2f9f15d99f8b31e9f13f7f32378b2a9e09bcb5e5..aa565ab33700c92ca607463bdc0dcaef5a9accf1 100644
|
|
--- a/src/main/java/net/minecraft/world/level/EntityBasedExplosionDamageCalculator.java
|
|
+++ b/src/main/java/net/minecraft/world/level/EntityBasedExplosionDamageCalculator.java
|
|
@@ -15,9 +15,17 @@ public class EntityBasedExplosionDamageCalculator extends ExplosionDamageCalcula
|
|
|
|
@Override
|
|
public Optional<Float> getBlockExplosionResistance(Explosion explosion, BlockGetter world, BlockPos pos, BlockState blockState, FluidState fluidState) {
|
|
- return super.getBlockExplosionResistance(explosion, world, pos, blockState, fluidState).map((max) -> {
|
|
- return this.source.getBlockExplosionResistance(explosion, world, pos, blockState, fluidState, max);
|
|
- });
|
|
+ // JettPack start - lithium: reduce allocs
|
|
+ Optional<Float> optionalBlastResistance = super.getBlockExplosionResistance(explosion, world, pos, blockState, fluidState);
|
|
+ if (optionalBlastResistance.isPresent()) {
|
|
+ float blastResistance = optionalBlastResistance.get();
|
|
+ float effectiveExplosionResistance = this.source.getBlockExplosionResistance(explosion, world, pos, blockState, fluidState, blastResistance);
|
|
+ if (effectiveExplosionResistance != blastResistance) {
|
|
+ return Optional.of(effectiveExplosionResistance);
|
|
+ }
|
|
+ }
|
|
+ return optionalBlastResistance;
|
|
+ // Jettpack end
|
|
}
|
|
|
|
@Override
|
|
diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java
|
|
index 4f8b2617adc0013035cc0ca72bf1b83eb5c18c6c..38511f90af47885aac6b29130d8ce5846accbf61 100644
|
|
--- a/src/main/java/net/minecraft/world/level/Level.java
|
|
+++ b/src/main/java/net/minecraft/world/level/Level.java
|
|
@@ -206,7 +206,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable {
|
|
public org.bukkit.entity.Entity[] getChunkEntities(int chunkX, int chunkZ) {
|
|
io.papermc.paper.world.ChunkEntitySlices slices = this.entitySliceManager.getChunk(chunkX, chunkZ);
|
|
if (slices == null) {
|
|
- return new org.bukkit.entity.Entity[0];
|
|
+ return me.titaniumtown.Constants.EMPTY_bukkit_entity_arr; // JettPack
|
|
}
|
|
return slices.getChunkEntities();
|
|
}
|
|
diff --git a/src/main/java/net/minecraft/world/level/block/ComposterBlock.java b/src/main/java/net/minecraft/world/level/block/ComposterBlock.java
|
|
index fb8b8a9733ac50096d8406487ab1ae167ef5f7b1..3d0438dd6f51c399782b177b75f048064be58c12 100644
|
|
--- a/src/main/java/net/minecraft/world/level/block/ComposterBlock.java
|
|
+++ b/src/main/java/net/minecraft/world/level/block/ComposterBlock.java
|
|
@@ -373,7 +373,7 @@ public class ComposterBlock extends Block implements WorldlyContainerHolder {
|
|
|
|
@Override
|
|
public int[] getSlotsForFace(Direction side) {
|
|
- return side == Direction.DOWN ? new int[]{0} : new int[0];
|
|
+ return side == Direction.DOWN ? me.titaniumtown.Constants.ZERO_int_arr : me.titaniumtown.Constants.EMPTY_int_arr; // Jettpack
|
|
}
|
|
|
|
@Override
|
|
@@ -422,7 +422,7 @@ public class ComposterBlock extends Block implements WorldlyContainerHolder {
|
|
|
|
@Override
|
|
public int[] getSlotsForFace(Direction side) {
|
|
- return side == Direction.UP ? new int[]{0} : new int[0];
|
|
+ return side == Direction.UP ? me.titaniumtown.Constants.ZERO_int_arr : me.titaniumtown.Constants.EMPTY_int_arr; // Jettpack
|
|
}
|
|
|
|
@Override
|
|
@@ -459,7 +459,7 @@ public class ComposterBlock extends Block implements WorldlyContainerHolder {
|
|
|
|
@Override
|
|
public int[] getSlotsForFace(Direction side) {
|
|
- return new int[0];
|
|
+ return me.titaniumtown.Constants.EMPTY_int_arr; // Jettpack
|
|
}
|
|
|
|
@Override
|
|
diff --git a/src/main/java/net/minecraft/world/level/storage/PlayerDataStorage.java b/src/main/java/net/minecraft/world/level/storage/PlayerDataStorage.java
|
|
index 35c39aed9583275ef25d32c783715798b52bdb63..b470da69f271d1a5ebb9727c0c34944e85ce3a51 100644
|
|
--- a/src/main/java/net/minecraft/world/level/storage/PlayerDataStorage.java
|
|
+++ b/src/main/java/net/minecraft/world/level/storage/PlayerDataStorage.java
|
|
@@ -119,7 +119,7 @@ public class PlayerDataStorage {
|
|
String[] astring = this.playerDir.list();
|
|
|
|
if (astring == null) {
|
|
- astring = new String[0];
|
|
+ astring = me.titaniumtown.Constants.EMPTY_string_arr; // JettPack
|
|
}
|
|
|
|
for (int i = 0; i < astring.length; ++i) {
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftEquipmentSlot.java b/src/main/java/org/bukkit/craftbukkit/CraftEquipmentSlot.java
|
|
index e91714a66f582c14184ddb5e4bf2443d3ed45efb..174585c55450d6005c822801b0ce43b29091fc64 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/CraftEquipmentSlot.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/CraftEquipmentSlot.java
|
|
@@ -4,8 +4,8 @@ import org.bukkit.inventory.EquipmentSlot;
|
|
|
|
public class CraftEquipmentSlot {
|
|
|
|
- private static final net.minecraft.world.entity.EquipmentSlot[] slots = new net.minecraft.world.entity.EquipmentSlot[EquipmentSlot.values().length];
|
|
- private static final EquipmentSlot[] enums = new EquipmentSlot[net.minecraft.world.entity.EquipmentSlot.values().length];
|
|
+ private static final net.minecraft.world.entity.EquipmentSlot[] slots = net.minecraft.world.entity.EquipmentSlot.VALUES;
|
|
+ private static final EquipmentSlot[] enums = new EquipmentSlot[net.minecraft.world.entity.EquipmentSlot.VALUES.length];
|
|
|
|
static {
|
|
set(EquipmentSlot.HAND, net.minecraft.world.entity.EquipmentSlot.MAINHAND);
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftEntityEquipment.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftEntityEquipment.java
|
|
index 6827979a5b270ced53b46ecb9eff548727dadb81..d42175344699d3742c17e658aa689755813ec0ac 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftEntityEquipment.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftEntityEquipment.java
|
|
@@ -165,7 +165,7 @@ public class CraftEntityEquipment implements EntityEquipment {
|
|
|
|
@Override
|
|
public void clear() {
|
|
- for (net.minecraft.world.entity.EquipmentSlot slot : net.minecraft.world.entity.EquipmentSlot.values()) {
|
|
+ for (net.minecraft.world.entity.EquipmentSlot slot : net.minecraft.world.entity.EquipmentSlot.VALUES) {
|
|
this.setEquipment(slot, null, false);
|
|
}
|
|
}
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/util/WeakCollection.java b/src/main/java/org/bukkit/craftbukkit/util/WeakCollection.java
|
|
index 049d750d3af991dd14ac8cf644330404e74b2151..f965d6751c8f5a8ec4b26e6ac65414540345b04a 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/util/WeakCollection.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/util/WeakCollection.java
|
|
@@ -166,7 +166,7 @@ public final class WeakCollection<T> implements Collection<T> {
|
|
|
|
@Override
|
|
public Object[] toArray() {
|
|
- return this.toArray(new Object[0]);
|
|
+ return this.toArray(me.titaniumtown.Constants.EMPTY_object_arr);
|
|
}
|
|
|
|
@Override
|