Skip to content

Commit b79d131

Browse files
committed
- 替换了一些 Map 为 JCTools 的实现。
- 新增 EnderUtilities 的一些物品复制修复。 - 改进了 LibNine 的模型加载性能。 - 改进了 ResourceLocationCanonicalize 的性能(但加载期间使用更多内存)。 - 改进了 NBTTagCompound 的匹配性能。 - 新增注册表修改器(实验性)。
1 parent d0088e0 commit b79d131

File tree

55 files changed

+904
-126
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

55 files changed

+904
-126
lines changed

build.gradle.kts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ plugins {
1212

1313
// Project properties
1414
group = "github.kasuminova.stellarcore"
15-
version = "1.5.0"
15+
version = "1.5.3"
1616

1717
// Set the toolchain version to decouple the Java we run Gradle with from the Java used to compile and run the mod
1818
java {
@@ -278,7 +278,7 @@ dependencies {
278278
compileOnly(rfg.deobf("curse.maven:libnine-322344:3509087"))
279279
compileOnly(rfg.deobf("curse.maven:lazy-ae2-322347:3254160"))
280280
compileOnly(rfg.deobf("curse.maven:electroblobs-wizardry-265642:5354477"))
281-
compileOnly(rfg.deobf("curse.maven:ender-utilities-224320:2977010"))
281+
implementation(rfg.deobf("curse.maven:ender-utilities-224320:2977010"))
282282
compileOnly(rfg.deobf("curse.maven:ancient-spellcraft-358124:5413256"))
283283
compileOnly(rfg.deobf("curse.maven:random-psideas-302313:3215550"))
284284
compileOnly(rfg.deobf("curse.maven:journeymap-32274:5172461"))
@@ -289,7 +289,7 @@ dependencies {
289289
compileOnly(rfg.deobf("curse.maven:blahajasm-1081696:5623595")) // or ASM Compat?
290290
runtimeOnly(rfg.deobf("curse.maven:spark-361579:3245793"))
291291
compileOnly(rfg.deobf("curse.maven:dme-737252:5043404"))
292-
implementation(rfg.deobf("curse.maven:bountifulbaubles-313536:3568240"))
292+
compileOnly(rfg.deobf("curse.maven:bountifulbaubles-313536:3568240"))
293293
}
294294

295295
// IDE Settings

src/main/java/github/kasuminova/stellarcore/client/ClientProxy.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,14 @@
11
package github.kasuminova.stellarcore.client;
22

33
import github.kasuminova.stellarcore.client.handler.ClientEventHandler;
4+
import github.kasuminova.stellarcore.client.integration.libnine.L9ModScanner;
45
import github.kasuminova.stellarcore.client.pool.BakedQuadPool;
56
import github.kasuminova.stellarcore.client.pool.BlockFaceUVsPool;
67
import github.kasuminova.stellarcore.client.pool.StellarUnpackedDataPool;
78
import github.kasuminova.stellarcore.client.util.TitleUtils;
89
import github.kasuminova.stellarcore.common.CommonProxy;
910
import github.kasuminova.stellarcore.common.command.CommandStellarCoreClient;
10-
import github.kasuminova.stellarcore.common.config.StellarCoreConfig;
1111
import github.kasuminova.stellarcore.common.mod.Mods;
12-
import github.kasuminova.stellarcore.common.util.StellarLog;
1312
import net.minecraftforge.client.ClientCommandHandler;
1413
import net.minecraftforge.common.MinecraftForge;
1514

@@ -27,6 +26,10 @@ public void preInit() {
2726
super.preInit();
2827
MinecraftForge.EVENT_BUS.register(ClientEventHandler.INSTANCE);
2928

29+
if (Mods.LIB_NINE.loaded()) {
30+
L9ModScanner.scan();
31+
}
32+
3033
// if (Mods.REPLAY.loaded() && StellarCoreConfig.PERFORMANCE.vanilla.hudCaching) {
3134
// StellarCoreConfig.PERFORMANCE.vanilla.hudCaching = false;
3235
// StellarLog.LOG.warn("Replay Mod is not compatible with Performance/HUDCaching feature, auto disabled!");

src/main/java/github/kasuminova/stellarcore/client/handler/ClientEventHandler.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,11 @@
77
import com.llamalad7.betterchat.gui.GuiBetterChat;
88
import com.windanesz.ancientspellcraft.client.entity.ASFakePlayer;
99
import github.kasuminova.stellarcore.client.hudcaching.HUDCaching;
10-
import github.kasuminova.stellarcore.common.pool.ResourceLocationPool;
1110
import github.kasuminova.stellarcore.client.pool.StellarUnpackedDataPool;
1211
import github.kasuminova.stellarcore.client.util.TitleUtils;
1312
import github.kasuminova.stellarcore.common.config.StellarCoreConfig;
1413
import github.kasuminova.stellarcore.common.mod.Mods;
14+
import github.kasuminova.stellarcore.common.pool.ResourceLocationPool;
1515
import github.kasuminova.stellarcore.common.util.StellarLog;
1616
import journeymap.common.feature.PlayerRadarManager;
1717
import mekanism.client.ClientTickHandler;
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
package github.kasuminova.stellarcore.client.integration.libnine;
2+
3+
import github.kasuminova.stellarcore.common.config.StellarCoreConfig;
4+
import github.kasuminova.stellarcore.common.mod.Mods;
5+
import github.kasuminova.stellarcore.common.util.StellarLog;
6+
import it.unimi.dsi.fastutil.objects.ObjectOpenHashSet;
7+
import net.minecraftforge.fml.common.Loader;
8+
import net.minecraftforge.fml.common.versioning.ArtifactVersion;
9+
10+
import java.util.Set;
11+
12+
public class L9ModScanner {
13+
14+
private static final Set<String> VALID_MODS = new ObjectOpenHashSet<>();
15+
16+
public static boolean isValidMod(final String modId) {
17+
return VALID_MODS.contains(modId);
18+
}
19+
20+
public static void scan() {
21+
if (!Mods.LIB_NINE.loaded()) {
22+
return;
23+
}
24+
if (!StellarCoreConfig.PERFORMANCE.vanilla.resourceExistStateCache) {
25+
return;
26+
}
27+
if (!StellarCoreConfig.PERFORMANCE.libNine.l9ModelsIsOfTypeCache) {
28+
return;
29+
}
30+
StellarLog.LOG.info("[StellarCore-L9ModScanner] L9Model filter is enabled.");
31+
32+
VALID_MODS.clear();
33+
VALID_MODS.add("libnine");
34+
Loader.instance().getActiveModList().forEach(mod -> {
35+
if (mod.getRequirements().stream().map(ArtifactVersion::getLabel).anyMatch("libnine"::equalsIgnoreCase)) {
36+
VALID_MODS.add(mod.getModId());
37+
}
38+
});
39+
40+
StellarLog.LOG.info("[StellarCore-L9ModScanner] Valid mods for LibNine mods: {}", VALID_MODS);
41+
}
42+
43+
}

src/main/java/github/kasuminova/stellarcore/client/pool/StellarUnpackedDataPool.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import github.kasuminova.stellarcore.common.config.StellarCoreConfig;
44
import github.kasuminova.stellarcore.common.pool.AsyncCanonicalizePool;
55
import github.kasuminova.stellarcore.common.pool.CanonicalizeWorker;
6+
import github.kasuminova.stellarcore.common.pool.DeferredCanonicalizable;
67
import github.kasuminova.stellarcore.common.util.StellarLog;
78
import it.unimi.dsi.fastutil.Hash;
89
import it.unimi.dsi.fastutil.floats.FloatArrays;
@@ -53,6 +54,10 @@ public static void canonicalizeAsync(final float[][][] unpackedData, final Consu
5354
});
5455
}
5556

57+
public static void canonicalizeDeferred(final DeferredCanonicalizable<float[][][]> canonicalizable) {
58+
POOL_LEVEL1.canonicalizeDeferred(canonicalizable);
59+
}
60+
5661
public static float[][][] canonicalize(float[][][] data) {
5762
final int level = getLevel();
5863

src/main/java/github/kasuminova/stellarcore/client/texture/SpriteBufferedImageCache.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,20 @@
11
package github.kasuminova.stellarcore.client.texture;
22

3+
import github.kasuminova.stellarcore.shaded.org.jctools.maps.NonBlockingIdentityHashMap;
34
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
45
import net.minecraft.client.resources.IResource;
56
import org.apache.commons.io.IOUtils;
67

78
import java.awt.image.BufferedImage;
89
import java.util.Map;
9-
import java.util.concurrent.ConcurrentHashMap;
1010

1111
public class SpriteBufferedImageCache {
1212

1313
public static final SpriteBufferedImageCache INSTANCE = new SpriteBufferedImageCache();
1414

15-
private final Map<TextureAtlasSprite, BufferedImage> cache = new ConcurrentHashMap<>();
16-
private final Map<TextureAtlasSprite, int[]> rgbCache = new ConcurrentHashMap<>();
17-
private final Map<TextureAtlasSprite, IResource> resourceCache = new ConcurrentHashMap<>();
15+
private final Map<TextureAtlasSprite, BufferedImage> cache = new NonBlockingIdentityHashMap<>();
16+
private final Map<TextureAtlasSprite, int[]> rgbCache = new NonBlockingIdentityHashMap<>();
17+
private final Map<TextureAtlasSprite, IResource> resourceCache = new NonBlockingIdentityHashMap<>();
1818

1919
public BufferedImage getImage(TextureAtlasSprite sprite) {
2020
return cache.get(sprite);

src/main/java/github/kasuminova/stellarcore/common/CommonProxy.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
package github.kasuminova.stellarcore.common;
22

3+
import github.kasuminova.stellarcore.common.bugfix.TileEntityContainerFixes;
34
import github.kasuminova.stellarcore.common.config.StellarCoreConfig;
45
import github.kasuminova.stellarcore.common.entity.EntityForceUpdateManager;
5-
import github.kasuminova.stellarcore.common.itemstack.ItemStackCapInitializer;
6-
import github.kasuminova.stellarcore.common.pool.ResourceLocationPool;
7-
import github.kasuminova.stellarcore.common.bugfix.TileEntityContainerFixes;
86
import github.kasuminova.stellarcore.common.handler.StellarCoreTickHandler;
97
import github.kasuminova.stellarcore.common.integration.fluxnetworks.IntegrationsFluxNetworks;
8+
import github.kasuminova.stellarcore.common.itemstack.ItemStackCapInitializer;
9+
import github.kasuminova.stellarcore.common.pool.ResourceLocationPool;
1010
import net.minecraftforge.common.MinecraftForge;
1111
import net.minecraftforge.fml.common.Loader;
1212

src/main/java/github/kasuminova/stellarcore/common/config/StellarCoreConfig.java

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,9 @@ public static class BugFixes {
7676
@Config.Name("EnderIOConduits")
7777
public final EnderIOConduits enderIOConduits = new EnderIOConduits();
7878

79+
@Config.Name("EnderUtilities")
80+
public final EnderUtilities enderUtilities = new EnderUtilities();
81+
7982
@Config.Name("ExtraBotany")
8083
public final ExtraBotany extraBotany = new ExtraBotany();
8184

@@ -295,6 +298,24 @@ public static class EnderIOConduits {
295298
public boolean cachedItemConduit = false;
296299

297300
}
301+
302+
public static class EnderUtilities {
303+
304+
@Config.Comment({
305+
"Fix an issue where HandyBag sometimes picking up items would cause them to be duplicated,",
306+
"with the side effect that the player's item bar would no longer be populated when picking up matching items."
307+
})
308+
@Config.Name("ItemHandyBagDupeFixes")
309+
public boolean itemHandyBag = true;
310+
311+
@Config.Comment({
312+
"Fix an issue where Nullifier sometimes picking up items would cause them to be duplicated,",
313+
"with the side effect that the player's item bar would no longer be populated when picking up matching items."
314+
})
315+
@Config.Name("ItemNullifierDupeFixes")
316+
public boolean itemNullifier = true;
317+
318+
}
298319

299320
public static class ExtraBotany {
300321

@@ -1322,6 +1343,14 @@ public static class Vanilla {
13221343
"xyz.phanta.tconevo.entity.EntityMagicMissile",
13231344
};
13241345

1346+
@Config.Comment({
1347+
"Completely remove something from the Forge registry, use at your own risk.",
1348+
"Usage: `minecraft:dirt`, `modid:something`"
1349+
})
1350+
@Config.RequiresMcRestart
1351+
@Config.Name("ForgeRegistryRemoveList")
1352+
public String[] forgeRegistryRemoveList = {};
1353+
13251354
}
13261355

13271356
public static class FontScale {

src/main/java/github/kasuminova/stellarcore/common/itemstack/ItemStackCapInitializer.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
import github.kasuminova.stellarcore.common.util.StellarEnvironment;
44
import github.kasuminova.stellarcore.common.util.StellarLog;
5-
import github.kasuminova.stellarcore.shaded.org.jctools.queues.atomic.MpmcAtomicArrayQueue;
5+
import github.kasuminova.stellarcore.shaded.org.jctools.queues.unpadded.MpmcUnpaddedArrayQueue;
66

77
import java.util.List;
88
import java.util.Queue;
@@ -143,7 +143,7 @@ private static void park() {
143143
}
144144

145145
private static <E> Queue<E> createConcurrentQueue() {
146-
return new MpmcAtomicArrayQueue<>(QUEUE_BOUND_SIZE * (MAX_WORKERS + 1));
146+
return new MpmcUnpaddedArrayQueue<>(QUEUE_BOUND_SIZE * (MAX_WORKERS + 1));
147147
}
148148

149149
}

src/main/java/github/kasuminova/stellarcore/common/mod/Mods.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,7 @@ public boolean loaded() {
9999
}
100100
}
101101
},
102+
LIB_NINE("libnine"),
102103
;
103104

104105
protected final String modID;

0 commit comments

Comments
 (0)