Skip to content

Commit fc1c04a

Browse files
committed
Port to 1.21.10
1 parent b10fcfb commit fc1c04a

20 files changed

+268
-328
lines changed

gradle.properties

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,16 @@ org.gradle.parallel = true
44

55
# Fabric Properties
66
loom_version = 1.12.7
7-
minecraft_version = 1.21.6
8-
yarn_mappings = 1.21.6+build.1
7+
minecraft_version = 1.21.10
8+
yarn_mappings = 1.21.10+build.2
99
loader_version = 0.17.3
1010

1111
# Mod Properties
1212
mod_version = 3.0.1
13-
mod_minecraft_version = 1.21.6
13+
mod_minecraft_version = 1.21.10
1414
maven_group = me.pepperbell
1515
archives_base_name = continuity
1616

1717
# Dependencies
18-
fabric_version = 0.128.2+1.21.6
19-
modmenu_version = 15.0.0
18+
fabric_version = 0.137.0+1.21.10
19+
modmenu_version = 16.0.0-rc.1

src/main/java/me/pepperbell/continuity/client/ContinuityClient.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
import me.pepperbell.continuity.client.properties.overlay.RandomOverlayCtmProperties;
3737
import me.pepperbell.continuity.client.properties.overlay.RepeatOverlayCtmProperties;
3838
import me.pepperbell.continuity.client.properties.overlay.StandardOverlayCtmProperties;
39+
import me.pepperbell.continuity.client.resource.CtmResourceReloader;
3940
import me.pepperbell.continuity.client.resource.CustomBlockLayers;
4041
import me.pepperbell.continuity.client.resource.ModelWrappingHandler;
4142
import me.pepperbell.continuity.client.util.RenderUtil;
@@ -44,7 +45,10 @@
4445
import net.fabricmc.api.ClientModInitializer;
4546
import net.fabricmc.fabric.api.resource.ResourceManagerHelper;
4647
import net.fabricmc.fabric.api.resource.ResourcePackActivationType;
48+
import net.fabricmc.fabric.api.resource.v1.ResourceLoader;
49+
import net.fabricmc.fabric.api.resource.v1.reloader.ResourceReloaderKeys;
4750
import net.fabricmc.loader.api.FabricLoader;
51+
import net.minecraft.resource.ResourceType;
4852
import net.minecraft.text.Text;
4953
import net.minecraft.util.Identifier;
5054

@@ -59,8 +63,12 @@ public void onInitializeClient() {
5963
BiomeHolderManager.init();
6064
ProcessingDataKeys.init();
6165
ModelWrappingHandler.init();
62-
RenderUtil.ReloadListener.init();
63-
CustomBlockLayers.ReloadListener.init();
66+
67+
ResourceLoader resourceLoader = ResourceLoader.get(ResourceType.CLIENT_RESOURCES);
68+
resourceLoader.registerReloader(RenderUtil.ReloadListener.ID, RenderUtil.ReloadListener.INSTANCE);
69+
resourceLoader.addReloaderOrdering(ResourceReloaderKeys.Client.ATLAS, RenderUtil.ReloadListener.ID);
70+
resourceLoader.registerReloader(CustomBlockLayers.ReloadListener.ID, CustomBlockLayers.ReloadListener.INSTANCE);
71+
resourceLoader.registerReloader(CtmResourceReloader.ID, CtmResourceReloader.INSTANCE);
6472

6573
FabricLoader.getInstance().getModContainer(ID).ifPresent(container -> {
6674
ResourceManagerHelper.registerBuiltinResourcePack(asId("default"), container, Text.translatable("resourcePack.continuity.default.name"), ResourcePackActivationType.NORMAL);

src/main/java/me/pepperbell/continuity/client/mixin/AtlasLoaderMixin.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package me.pepperbell.continuity.client.mixin;
22

33
import java.util.ArrayList;
4+
import java.util.Collections;
45
import java.util.List;
56
import java.util.Map;
67
import java.util.Optional;
@@ -78,9 +79,9 @@ abstract class AtlasLoaderMixin {
7879
}
7980
});
8081
suppliers.putAll(emissiveSuppliers);
81-
if (!emissiveIdMap.isEmpty()) {
82-
context.setEmissiveIdMap(emissiveIdMap);
83-
}
82+
context.setEmissiveIdMap(emissiveIdMap);
83+
} else {
84+
context.setEmissiveIdMap(Collections.emptyMap());
8485
}
8586
}
8687
}
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
package me.pepperbell.continuity.client.mixin;
2+
3+
import java.util.Map;
4+
import java.util.Set;
5+
import java.util.concurrent.CompletableFuture;
6+
import java.util.concurrent.Executor;
7+
8+
import org.spongepowered.asm.mixin.Mixin;
9+
import org.spongepowered.asm.mixin.injection.At;
10+
import org.spongepowered.asm.mixin.injection.Inject;
11+
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
12+
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
13+
14+
import com.llamalad7.mixinextras.sugar.Local;
15+
16+
import me.pepperbell.continuity.client.resource.CtmResourceReloader;
17+
import me.pepperbell.continuity.client.resource.EmissiveSuffixLoader;
18+
import me.pepperbell.continuity.client.resource.ModelWrappingHandler;
19+
import me.pepperbell.continuity.client.resource.SpriteLoaderLoadContext;
20+
import me.pepperbell.continuity.client.resource.SpriteLoaderLoadContextImpl;
21+
import net.minecraft.client.texture.AtlasManager;
22+
import net.minecraft.resource.ResourceReloader;
23+
import net.minecraft.util.Atlases;
24+
import net.minecraft.util.Identifier;
25+
26+
@Mixin(AtlasManager.class)
27+
abstract class AtlasManagerMixin {
28+
@Inject(method = "prepareSharedState(Lnet/minecraft/resource/ResourceReloader$Store;)V", at = @At("RETURN"))
29+
private void continuity$onReturnPrepareSharedState(ResourceReloader.Store store, CallbackInfo ci) {
30+
store.put(ModelWrappingHandler.WRAP_EMISSIVE_FUTURE_KEY, new CompletableFuture<>());
31+
}
32+
33+
@Inject(method = "reload(Lnet/minecraft/resource/ResourceReloader$Store;Ljava/util/concurrent/Executor;Lnet/minecraft/resource/ResourceReloader$Synchronizer;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletableFuture;", at = @At(value = "INVOKE", target = "Lnet/minecraft/resource/ResourceReloader$Store;getResourceManager()Lnet/minecraft/resource/ResourceManager;"))
34+
private void continuity$onHeadReload(ResourceReloader.Store store, Executor prepareExecutor, ResourceReloader.Synchronizer synchronizer, Executor applyExecutor, CallbackInfoReturnable<CompletableFuture<Void>> cir, @Local AtlasManager.Stitch stitch) {
35+
EmissiveSuffixLoader.load(store.getResourceManager());
36+
CompletableFuture<Map<Identifier, Set<Identifier>>> allExtraIdsFuture = store.getOrThrow(CtmResourceReloader.ALL_EXTRA_IDS_FUTURE_KEY);
37+
CompletableFuture<Boolean> wrapEmissiveFuture = store.getOrThrow(ModelWrappingHandler.WRAP_EMISSIVE_FUTURE_KEY);
38+
39+
// This shouldn't be necessary, but it prevents a deadlock if for whatever reason the future isn't completed
40+
// before this.
41+
stitch.getPreparations(Atlases.BLOCKS).whenComplete(((stitchResult, t) -> {
42+
wrapEmissiveFuture.complete(false);
43+
}));
44+
45+
SpriteLoaderLoadContext.THREAD_LOCAL.set(new SpriteLoaderLoadContextImpl(allExtraIdsFuture, wrapEmissiveFuture));
46+
}
47+
48+
@Inject(method = "reload(Lnet/minecraft/resource/ResourceReloader$Store;Ljava/util/concurrent/Executor;Lnet/minecraft/resource/ResourceReloader$Synchronizer;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletableFuture;", at = @At("RETURN"))
49+
private void continuity$onReturnReload(CallbackInfoReturnable<CompletableFuture<Void>> cir) {
50+
SpriteLoaderLoadContext.THREAD_LOCAL.set(null);
51+
}
52+
}

src/main/java/me/pepperbell/continuity/client/mixin/BakedModelManagerMixin.java

Lines changed: 0 additions & 92 deletions
This file was deleted.

src/main/java/me/pepperbell/continuity/client/mixin/SpriteLoaderMixin.java

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import java.util.function.Function;
99
import java.util.function.Supplier;
1010

11+
import org.apache.commons.lang3.mutable.MutableBoolean;
1112
import org.jetbrains.annotations.Nullable;
1213
import org.spongepowered.asm.mixin.Final;
1314
import org.spongepowered.asm.mixin.Mixin;
@@ -34,7 +35,7 @@ abstract class SpriteLoaderMixin {
3435
@Final
3536
private Identifier id;
3637

37-
@ModifyArg(method = "load(Lnet/minecraft/resource/ResourceManager;Lnet/minecraft/util/Identifier;ILjava/util/concurrent/Executor;Ljava/util/Collection;)Ljava/util/concurrent/CompletableFuture;", at = @At(value = "INVOKE", target = "Ljava/util/concurrent/CompletableFuture;supplyAsync(Ljava/util/function/Supplier;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletableFuture;", ordinal = 0), index = 0)
38+
@ModifyArg(method = "load(Lnet/minecraft/resource/ResourceManager;Lnet/minecraft/util/Identifier;ILjava/util/concurrent/Executor;Ljava/util/Set;)Ljava/util/concurrent/CompletableFuture;", at = @At(value = "INVOKE", target = "Ljava/util/concurrent/CompletableFuture;supplyAsync(Ljava/util/function/Supplier;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletableFuture;", ordinal = 0), index = 0)
3839
private Supplier<List<Function<SpriteOpener, SpriteContents>>> continuity$modifySupplier(Supplier<List<Function<SpriteOpener, SpriteContents>>> supplier) {
3940
SpriteLoaderLoadContext context = SpriteLoaderLoadContext.THREAD_LOCAL.get();
4041
if (context != null) {
@@ -60,7 +61,7 @@ abstract class SpriteLoaderMixin {
6061
return supplier;
6162
}
6263

63-
@ModifyArg(method = "load(Lnet/minecraft/resource/ResourceManager;Lnet/minecraft/util/Identifier;ILjava/util/concurrent/Executor;Ljava/util/Collection;)Ljava/util/concurrent/CompletableFuture;", at = @At(value = "INVOKE", target = "Ljava/util/concurrent/CompletableFuture;thenApply(Ljava/util/function/Function;)Ljava/util/concurrent/CompletableFuture;", ordinal = 0), index = 0)
64+
@ModifyArg(method = "load(Lnet/minecraft/resource/ResourceManager;Lnet/minecraft/util/Identifier;ILjava/util/concurrent/Executor;Ljava/util/Set;)Ljava/util/concurrent/CompletableFuture;", at = @At(value = "INVOKE", target = "Ljava/util/concurrent/CompletableFuture;thenApply(Ljava/util/function/Function;)Ljava/util/concurrent/CompletableFuture;", ordinal = 0), index = 0)
6465
private Function<List<SpriteContents>, SpriteLoader.StitchResult> continuity$modifyFunction(Function<List<SpriteContents>, SpriteLoader.StitchResult> function) {
6566
SpriteLoaderLoadContext context = SpriteLoaderLoadContext.THREAD_LOCAL.get();
6667
if (context != null) {
@@ -76,8 +77,8 @@ public Map<Identifier, Identifier> getEmissiveIdMap() {
7677
}
7778

7879
@Override
79-
public void markHasEmissives() {
80-
emissiveControl.markHasEmissives();
80+
public void setHasEmissives(boolean hasEmissives) {
81+
emissiveControl.setHasEmissives(hasEmissives);
8182
}
8283
});
8384
SpriteLoader.StitchResult result = function.apply(spriteContentsList);
@@ -96,17 +97,19 @@ public void markHasEmissives() {
9697
SpriteLoaderStitchContext context = SpriteLoaderStitchContext.THREAD_LOCAL.get();
9798
if (context != null) {
9899
Map<Identifier, Identifier> emissiveIdMap = context.getEmissiveIdMap();
99-
Map<Identifier, Sprite> sprites = cir.getReturnValue().regions();
100+
Map<Identifier, Sprite> sprites = cir.getReturnValue().sprites();
101+
MutableBoolean hasEmissives = new MutableBoolean(false);
100102
emissiveIdMap.forEach((id, emissiveId) -> {
101103
Sprite sprite = sprites.get(id);
102104
if (sprite != null) {
103105
Sprite emissiveSprite = sprites.get(emissiveId);
104106
if (emissiveSprite != null) {
105107
((SpriteExtension) sprite).continuity$setEmissiveSprite(emissiveSprite);
106-
context.markHasEmissives();
108+
hasEmissives.setTrue();
107109
}
108110
}
109111
});
112+
context.setHasEmissives(hasEmissives.booleanValue());
110113
}
111114
}
112115
}

src/main/java/me/pepperbell/continuity/client/resource/AtlasLoaderLoadContext.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,10 @@
22

33
import java.util.Map;
44

5-
import org.jetbrains.annotations.Nullable;
6-
75
import net.minecraft.util.Identifier;
86

97
public interface AtlasLoaderLoadContext {
108
ThreadLocal<AtlasLoaderLoadContext> THREAD_LOCAL = new ThreadLocal<>();
119

12-
void setEmissiveIdMap(@Nullable Map<Identifier, Identifier> map);
10+
void setEmissiveIdMap(Map<Identifier, Identifier> map);
1311
}
Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,9 @@
11
package me.pepperbell.continuity.client.resource;
22

3-
import java.util.Map;
4-
5-
import net.minecraft.client.render.model.SpriteAtlasManager;
6-
import net.minecraft.util.Identifier;
3+
import net.minecraft.client.texture.SpriteLoader;
74

85
public interface BakedModelManagerBakeContext {
96
ThreadLocal<BakedModelManagerBakeContext> THREAD_LOCAL = new ThreadLocal<>();
107

11-
void beforeBake(Map<Identifier, SpriteAtlasManager.AtlasPreparation> atlases);
8+
void beforeBake(SpriteLoader.StitchResult stitchResult);
129
}

0 commit comments

Comments
 (0)