From dbe8b6551a510c062098eb9909e51e4ca4a9bcee Mon Sep 17 00:00:00 2001 From: Nassim Jahnke Date: Tue, 19 Oct 2021 09:09:12 +0200 Subject: [PATCH] Readd flare Issues were addressed in 2.0.0 --- api/build.gradle.kts | 2 ++ .../api/minecraft/chunks/Chunk.java | 1 + .../api/protocol/AbstractProtocol.java | 4 ++-- .../kotlin/via.shadow-conventions.gradle.kts | 6 +++++ .../data/entity/EntityTrackerBase.java | 11 ++++----- .../storage/EntityTracker1_11.java | 7 +++--- .../storage/BlockStorage.java | 3 ++- .../storage/EntityTracker1_14.java | 11 ++++----- .../storage/EntityTracker1_9.java | 24 ++++++++----------- gradle/libs.versions.toml | 3 +++ 10 files changed, 39 insertions(+), 33 deletions(-) diff --git a/api/build.gradle.kts b/api/build.gradle.kts index 5115a5953..09f6ac8d4 100644 --- a/api/build.gradle.kts +++ b/api/build.gradle.kts @@ -13,6 +13,8 @@ dependencies { targetConfiguration = "shadow" } api(libs.fastutil) + api(libs.flare) + api(libs.flareFastutil) api(libs.openNBT) api(libs.gson) diff --git a/api/src/main/java/com/viaversion/viaversion/api/minecraft/chunks/Chunk.java b/api/src/main/java/com/viaversion/viaversion/api/minecraft/chunks/Chunk.java index 751583908..464c6cfc8 100644 --- a/api/src/main/java/com/viaversion/viaversion/api/minecraft/chunks/Chunk.java +++ b/api/src/main/java/com/viaversion/viaversion/api/minecraft/chunks/Chunk.java @@ -28,6 +28,7 @@ import org.checkerframework.checker.nullness.qual.Nullable; import java.util.BitSet; import java.util.List; +// TODO specialized sub interfaces public interface Chunk { /** diff --git a/api/src/main/java/com/viaversion/viaversion/api/protocol/AbstractProtocol.java b/api/src/main/java/com/viaversion/viaversion/api/protocol/AbstractProtocol.java index 7e3e0e68a..7b2a9f3e1 100644 --- a/api/src/main/java/com/viaversion/viaversion/api/protocol/AbstractProtocol.java +++ b/api/src/main/java/com/viaversion/viaversion/api/protocol/AbstractProtocol.java @@ -474,7 +474,7 @@ public abstract class AbstractProtocol1.16). + * This is NOT the same as calling {@link #getOldId()} (think of unmapped vs. old in 1.17→1.16). * * @return unmapped packet type, or null if mapped over ids */ @@ -485,7 +485,7 @@ public abstract class AbstractProtocol1.16). + * This is NOT the same as calling {@link #getNewId()} (think of mapped vs. new in 1.17→1.16). * * @return new packet type, or null if mapped over ids or mapped to no packet type */ diff --git a/build-logic/src/main/kotlin/via.shadow-conventions.gradle.kts b/build-logic/src/main/kotlin/via.shadow-conventions.gradle.kts index aee71dfca..8021f6fcb 100644 --- a/build-logic/src/main/kotlin/via.shadow-conventions.gradle.kts +++ b/build-logic/src/main/kotlin/via.shadow-conventions.gradle.kts @@ -29,6 +29,7 @@ fun ShadowJar.configureRelocations() { relocate("com.google.gson", "com.viaversion.viaversion.libs.gson") relocate("com.github.steveice10.opennbt", "com.viaversion.viaversion.libs.opennbt") relocate("it.unimi.dsi.fastutil", "com.viaversion.viaversion.libs.fastutil") + relocate("space.vectrix.flare", "com.viaversion.viaversion.libs.flare") } fun ShadowJar.configureExcludes() { @@ -52,4 +53,9 @@ fun ShadowJar.configureExcludes() { exclude("it/unimi/dsi/fastutil/*/*Synchronized*") exclude("it/unimi/dsi/fastutil/*/*Unmodifiable*") exclude("it/unimi/dsi/fastutil/io/*") + // Flare - only need int maps + exclude("space/vectrix/flare/fastutil/*Double*") + exclude("space/vectrix/flare/fastutil/*Float*") + exclude("space/vectrix/flare/fastutil/*Long*") + exclude("space/vectrix/flare/fastutil/*Short*") } diff --git a/common/src/main/java/com/viaversion/viaversion/data/entity/EntityTrackerBase.java b/common/src/main/java/com/viaversion/viaversion/data/entity/EntityTrackerBase.java index 0a5741206..54c93e6d3 100644 --- a/common/src/main/java/com/viaversion/viaversion/data/entity/EntityTrackerBase.java +++ b/common/src/main/java/com/viaversion/viaversion/data/entity/EntityTrackerBase.java @@ -24,14 +24,13 @@ import com.viaversion.viaversion.api.data.entity.ClientEntityIdChangeListener; import com.viaversion.viaversion.api.data.entity.EntityTracker; import com.viaversion.viaversion.api.data.entity.StoredEntityData; import com.viaversion.viaversion.api.minecraft.entities.EntityType; +import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import org.checkerframework.checker.nullness.qual.Nullable; - -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; +import space.vectrix.flare.fastutil.Int2ObjectSyncMap; public class EntityTrackerBase implements EntityTracker, ClientEntityIdChangeListener { - private final Map entityTypes = new ConcurrentHashMap<>(); - private final Map entityData; + private final Int2ObjectMap entityTypes = Int2ObjectSyncMap.hashmap(); + private final Int2ObjectMap entityData; private final UserConnection connection; private final EntityType playerType; private int clientEntityId = -1; @@ -46,7 +45,7 @@ public class EntityTrackerBase implements EntityTracker, ClientEntityIdChangeLis public EntityTrackerBase(UserConnection connection, @Nullable EntityType playerType, boolean storesEntityData) { this.connection = connection; this.playerType = playerType; - this.entityData = storesEntityData ? new ConcurrentHashMap<>() : null; + this.entityData = storesEntityData ? Int2ObjectSyncMap.hashmap() : null; } @Override diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_11to1_10/storage/EntityTracker1_11.java b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_11to1_10/storage/EntityTracker1_11.java index 5d4b8ab66..77eb48017 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_11to1_10/storage/EntityTracker1_11.java +++ b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_11to1_10/storage/EntityTracker1_11.java @@ -17,15 +17,14 @@ */ package com.viaversion.viaversion.protocols.protocol1_11to1_10.storage; -import com.google.common.collect.Sets; import com.viaversion.viaversion.api.connection.UserConnection; import com.viaversion.viaversion.api.minecraft.entities.Entity1_11Types.EntityType; import com.viaversion.viaversion.data.entity.EntityTrackerBase; - -import java.util.Set; +import it.unimi.dsi.fastutil.ints.IntSet; +import space.vectrix.flare.fastutil.Int2ObjectSyncMap; public class EntityTracker1_11 extends EntityTrackerBase { - private final Set holograms = Sets.newConcurrentHashSet(); + private final IntSet holograms = Int2ObjectSyncMap.hashset(); public EntityTracker1_11(UserConnection user) { super(user, EntityType.PLAYER); diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_13to1_12_2/storage/BlockStorage.java b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_13to1_12_2/storage/BlockStorage.java index b417986f0..5ede7f119 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_13to1_12_2/storage/BlockStorage.java +++ b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_13to1_12_2/storage/BlockStorage.java @@ -21,6 +21,7 @@ import com.viaversion.viaversion.api.connection.StorableObject; import com.viaversion.viaversion.api.minecraft.Position; import it.unimi.dsi.fastutil.ints.IntOpenHashSet; import it.unimi.dsi.fastutil.ints.IntSet; +import space.vectrix.flare.SyncMap; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; @@ -28,7 +29,7 @@ import java.util.concurrent.ConcurrentHashMap; // TODO Fix memory leak lolz (only a smol one tho) public class BlockStorage implements StorableObject { private static final IntSet WHITELIST = new IntOpenHashSet(46, .99F); - private final Map blocks = new ConcurrentHashMap<>(); + private final Map blocks = SyncMap.hashmap(); static { // Flower pots diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_14to1_13_2/storage/EntityTracker1_14.java b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_14to1_13_2/storage/EntityTracker1_14.java index e0106657c..e3d4ce6fc 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_14to1_13_2/storage/EntityTracker1_14.java +++ b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_14to1_13_2/storage/EntityTracker1_14.java @@ -20,15 +20,14 @@ package com.viaversion.viaversion.protocols.protocol1_14to1_13_2.storage; import com.viaversion.viaversion.api.connection.UserConnection; import com.viaversion.viaversion.api.minecraft.entities.Entity1_14Types; import com.viaversion.viaversion.data.entity.EntityTrackerBase; - -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; +import it.unimi.dsi.fastutil.ints.Int2ObjectMap; +import space.vectrix.flare.fastutil.Int2ObjectSyncMap; public class EntityTracker1_14 extends EntityTrackerBase { - private final Map insentientData = new ConcurrentHashMap<>(); + private final Int2ObjectMap insentientData = Int2ObjectSyncMap.hashmap(); // 0x1 = sleeping, 0x2 = riptide - private final Map sleepingAndRiptideData = new ConcurrentHashMap<>(); - private final Map playerEntityFlags = new ConcurrentHashMap<>(); + private final Int2ObjectMap sleepingAndRiptideData = Int2ObjectSyncMap.hashmap(); + private final Int2ObjectMap playerEntityFlags = Int2ObjectSyncMap.hashmap(); private int latestTradeWindowId; private boolean forceSendCenterChunk = true; private int chunkCenterX, chunkCenterZ; diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_9to1_8/storage/EntityTracker1_9.java b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_9to1_8/storage/EntityTracker1_9.java index 0e3e68f5d..e3eef2cbc 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_9to1_8/storage/EntityTracker1_9.java +++ b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_9to1_8/storage/EntityTracker1_9.java @@ -18,7 +18,6 @@ package com.viaversion.viaversion.protocols.protocol1_9to1_8.storage; import com.google.common.cache.CacheBuilder; -import com.google.common.collect.Sets; import com.viaversion.viaversion.api.Via; import com.viaversion.viaversion.api.connection.UserConnection; import com.viaversion.viaversion.api.legacy.bossbar.BossBar; @@ -40,25 +39,22 @@ import com.viaversion.viaversion.protocols.protocol1_9to1_8.chat.GameMode; import com.viaversion.viaversion.protocols.protocol1_9to1_8.metadata.MetadataRewriter1_9To1_8; import com.viaversion.viaversion.protocols.protocol1_9to1_8.providers.BossBarProvider; import com.viaversion.viaversion.protocols.protocol1_9to1_8.providers.EntityIdProvider; +import it.unimi.dsi.fastutil.ints.Int2ObjectMap; +import it.unimi.dsi.fastutil.ints.IntSet; +import space.vectrix.flare.fastutil.Int2ObjectSyncMap; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.UUID; -import java.util.concurrent.ConcurrentHashMap; +import java.util.*; import java.util.concurrent.TimeUnit; public class EntityTracker1_9 extends EntityTrackerBase { public static final String WITHER_TRANSLATABLE = "{\"translate\":\"entity.WitherBoss.name\"}"; public static final String DRAGON_TRANSLATABLE = "{\"translate\":\"entity.EnderDragon.name\"}"; - private final Map uuidMap = new ConcurrentHashMap<>(); - private final Map> metadataBuffer = new ConcurrentHashMap<>(); - private final Map vehicleMap = new ConcurrentHashMap<>(); - private final Map bossBarMap = new ConcurrentHashMap<>(); - private final Set validBlocking = Sets.newConcurrentHashSet(); - private final Set knownHolograms = Sets.newConcurrentHashSet(); + private final Int2ObjectMap uuidMap = Int2ObjectSyncMap.hashmap(); + private final Int2ObjectMap> metadataBuffer = Int2ObjectSyncMap.hashmap(); + private final Int2ObjectMap vehicleMap = Int2ObjectSyncMap.hashmap(); + private final Int2ObjectMap bossBarMap = Int2ObjectSyncMap.hashmap(); + private final IntSet validBlocking = Int2ObjectSyncMap.hashset(); + private final Set knownHolograms = Int2ObjectSyncMap.hashset(); private final Set blockInteractions = Collections.newSetFromMap(CacheBuilder.newBuilder() .maximumSize(1000) .expireAfterAccess(250, TimeUnit.MILLISECONDS) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index ca93b6d72..be857c0a4 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -5,6 +5,7 @@ metadata.format.version = "1.1" adventure = "4.9.1" gson = "2.8.8" fastutil = "8.5.6" +flare = "2.0.0" openNBT = "2.0-SNAPSHOT" javassist = "3.28.0-GA" @@ -34,6 +35,8 @@ adventureTextSerializerLegacy = { group = "net.kyori", name = "adventure-text-se gson = { group = "com.google.code.gson", name = "gson", version.ref = "gson" } fastutil = { group = "it.unimi.dsi", name = "fastutil", version.ref = "fastutil" } +flare = { group = "space.vectrix.flare", name = "flare", version.ref = "flare" } +flareFastutil = { group = "space.vectrix.flare", name = "flare-fastutil", version.ref = "flare" } openNBT = { group = "com.viaversion", name = "opennbt", version.ref = "openNBT" } javassist = { group = "org.javassist", name = "javassist", version.ref = "javassist" }