Skip to content

Commit 4292aa2

Browse files
Update to 1.21.5
1 parent 62a6b23 commit 4292aa2

9 files changed

Lines changed: 45 additions & 73 deletions

File tree

gradle.properties

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
org.gradle.jvmargs=-Xmx1G
22

3-
minecraft_version=1.21.4
4-
yarn_mappings=1.21.4+build.8
3+
minecraft_version=1.21.5
4+
yarn_mappings=1.21.5+build.1
55
loader_version=0.16.14
66
loom_version=1.10-SNAPSHOT
77

88
# Fabric API
9-
fabric_version=0.119.3+1.21.4
9+
fabric_version=0.127.1+1.21.5
1010

11-
mod_version = 0.6.1+1.21.4
11+
mod_version = 0.6.1+1.21.5
1212
maven_group = io.github.foundationgames
1313
archives_base_name = animatica
1414

src/main/java/io/github/foundationgames/animatica/Animatica.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
import io.github.foundationgames.animatica.animation.AnimationLoader;
44
import io.github.foundationgames.animatica.config.AnimaticaConfig;
55
import net.fabricmc.api.ClientModInitializer;
6-
import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents;
76
import net.fabricmc.fabric.api.resource.ResourceManagerHelper;
87
import net.minecraft.resource.ResourceType;
98
import net.minecraft.util.Identifier;
@@ -18,8 +17,6 @@ public class Animatica implements ClientModInitializer {
1817

1918
@Override
2019
public void onInitializeClient() {
21-
ClientTickEvents.START_CLIENT_TICK.register(client -> AnimationLoader.INSTANCE.tickTextures());
22-
2320
ResourceManagerHelper.get(ResourceType.CLIENT_RESOURCES).registerReloadListener(AnimationLoader.INSTANCE);
2421
}
2522

src/main/java/io/github/foundationgames/animatica/animation/AnimatedTexture.java

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import net.minecraft.client.MinecraftClient;
77
import net.minecraft.client.texture.NativeImage;
88
import net.minecraft.client.texture.NativeImageBackedTexture;
9+
import net.minecraft.client.texture.TextureTickListener;
910
import net.minecraft.resource.ResourceManager;
1011
import net.minecraft.util.Identifier;
1112
import net.minecraft.util.math.MathHelper;
@@ -19,8 +20,9 @@
1920
import java.util.concurrent.Executor;
2021
import java.util.concurrent.ExecutorService;
2122
import java.util.concurrent.Executors;
23+
import java.util.function.Supplier;
2224

23-
public class AnimatedTexture extends NativeImageBackedTexture {
25+
public class AnimatedTexture extends NativeImageBackedTexture implements TextureTickListener {
2426
public static final ExecutorService EXECUTORS = Executors.newFixedThreadPool(4);
2527

2628
public final Animation[] anims;
@@ -31,22 +33,20 @@ public class AnimatedTexture extends NativeImageBackedTexture {
3133

3234
public static Optional<AnimatedTexture> tryCreate(ResourceManager resources, Identifier targetTexId, List<AnimationMeta> anims) {
3335
try (var targetTexResource = resources.getResourceOrThrow(targetTexId).getInputStream()) {
34-
return Optional.of(new AnimatedTexture(resources, anims, NativeImage.read(targetTexResource)));
36+
return Optional.of(new AnimatedTexture(targetTexId::toString, resources, anims, NativeImage.read(targetTexResource)));
3537
} catch (IOException e) { Animatica.LOG.error(e); }
3638

3739
return Optional.empty();
3840
}
3941

40-
public AnimatedTexture(ResourceManager resources, List<AnimationMeta> metas, NativeImage image) throws IOException {
41-
super(new NativeImage(image.getFormat(), image.getWidth(), image.getHeight(), true));
42+
public AnimatedTexture(Supplier<String> name, ResourceManager resources, List<AnimationMeta> metas, NativeImage image) throws IOException {
43+
super(name, image.getWidth(), image.getHeight(), true);
4244

4345
this.anims = new Animation[metas.size()];
4446
for (int i = 0; i < metas.size(); i++) {
4547
this.anims[i] = new Animation(metas.get(i), resources);
4648
}
4749
this.original = image;
48-
this.setClamp(false);
49-
this.setFilter(false, false);
5050

5151
updateAndDraw(this.getImage(), true, MinecraftClient.getInstance());
5252
this.upload();
@@ -91,7 +91,7 @@ public void updateAndDraw(NativeImage image, boolean force, Executor exec) {
9191
if (changed || force) {
9292
// Skip if still waiting for a frame to finish
9393
if (this.getFrameWaitingOn() == null) {
94-
this.frameWaitingOn = CompletableFuture.supplyAsync(() -> {
94+
this.frameWaitingOn = CompletableFuture.runAsync(() -> {
9595
image.copyFrom(this.original);
9696

9797
Phase phase;
@@ -103,8 +103,6 @@ public void updateAndDraw(NativeImage image, boolean force, Executor exec) {
103103
TextureUtil.copy(anim.sourceTexture, 0, phase.v, anim.width, anim.height, image, anim.targetX, anim.targetY);
104104
}
105105
}
106-
107-
return null;
108106
}, exec).thenAccept(v -> MinecraftClient.getInstance().execute(this::upload));
109107
}
110108
}
@@ -115,6 +113,7 @@ public void updateAndDraw(NativeImage image, boolean force, Executor exec) {
115113
frame++;
116114
}
117115

116+
@Override
118117
public void tick() {
119118
this.updateAndDraw(this.getImage(), false, EXECUTORS);
120119
}

src/main/java/io/github/foundationgames/animatica/animation/AnimationLoader.java

Lines changed: 8 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,21 @@
11
package io.github.foundationgames.animatica.animation;
22

3-
import com.mojang.blaze3d.systems.RenderSystem;
43
import io.github.foundationgames.animatica.Animatica;
54
import io.github.foundationgames.animatica.util.Flags;
65
import io.github.foundationgames.animatica.util.exception.PropertyParseException;
7-
import it.unimi.dsi.fastutil.ints.Int2IntMap;
8-
import it.unimi.dsi.fastutil.ints.Int2IntOpenHashMap;
96
import net.fabricmc.fabric.api.resource.SimpleSynchronousResourceReloadListener;
107
import net.minecraft.client.MinecraftClient;
118
import net.minecraft.resource.Resource;
129
import net.minecraft.resource.ResourceManager;
1310
import net.minecraft.util.Identifier;
11+
import org.jetbrains.annotations.Nullable;
1412

1513
import java.io.IOException;
1614
import java.util.ArrayList;
1715
import java.util.HashMap;
18-
import java.util.HashSet;
1916
import java.util.List;
17+
import java.util.Map;
2018
import java.util.Properties;
21-
import java.util.Set;
2219
import java.util.function.BiConsumer;
2320

2421
public final class AnimationLoader implements SimpleSynchronousResourceReloadListener {
@@ -31,8 +28,7 @@ public final class AnimationLoader implements SimpleSynchronousResourceReloadLis
3128

3229
public static final AnimationLoader INSTANCE = new AnimationLoader();
3330

34-
private final Int2IntMap animationIds = new Int2IntOpenHashMap();
35-
private final Set<AnimatedTexture> animatedTextures = new HashSet<>();
31+
private final Map<Identifier, Identifier> animationIds = new HashMap<>();
3632

3733
private AnimationLoader() {
3834
}
@@ -43,22 +39,8 @@ private static void findAllMCPAnimations(ResourceManager manager, BiConsumer<Ide
4339
}
4440
}
4541

46-
public boolean isAnimated(int glId) {
47-
return animationIds.containsKey(glId);
48-
}
49-
50-
public int getAnimationId(int glId) {
51-
return animationIds.get(glId);
52-
}
53-
54-
public void tickTextures() {
55-
if (!RenderSystem.isOnRenderThread()) {
56-
RenderSystem.recordRenderCall(this::tickTextures);
57-
} else {
58-
for (var texture : animatedTextures) {
59-
texture.tick();
60-
}
61-
}
42+
public @Nullable Identifier getAnimationId(Identifier id) {
43+
return animationIds.get(id);
6244
}
6345

6446
@Override
@@ -68,7 +50,6 @@ public Identifier getFabricId() {
6850

6951
@Override
7052
public void reload(ResourceManager manager) {
71-
this.animatedTextures.clear();
7253
this.animationIds.clear();
7354

7455
if (!Animatica.CONFIG.animatedTextures) {
@@ -99,16 +80,9 @@ public void reload(ResourceManager manager) {
9980
for (var targetId : animations.keySet()) {
10081
AnimatedTexture.tryCreate(manager, targetId, animations.get(targetId))
10182
.ifPresent(tex -> {
102-
var textures = MinecraftClient.getInstance().getTextureManager();
103-
var tgt = textures.getTexture(targetId);
104-
105-
if (tgt != null) {
106-
textures.registerTexture(
107-
Identifier.of(targetId.getNamespace(), targetId.getPath() + "-anim"), tex);
108-
109-
this.animatedTextures.add(tex);
110-
this.animationIds.put(tgt.getGlId(), tex.getGlId());
111-
}
83+
var animId = Identifier.of(targetId.getNamespace(), targetId.getPath() + "-anim");
84+
this.animationIds.put(targetId, animId);
85+
MinecraftClient.getInstance().getTextureManager().registerTexture(animId, tex);
11286
});
11387
}
11488

src/main/java/io/github/foundationgames/animatica/mixin/IdentifierMixin.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
import org.spongepowered.asm.mixin.Mixin;
77
import org.spongepowered.asm.mixin.injection.At;
88
import org.spongepowered.asm.mixin.injection.Inject;
9-
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
109
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
1110

1211
// Allows invalid characters in paths to support packs with extremely outdated formatting (because OptiFine does too)

src/main/java/io/github/foundationgames/animatica/mixin/RenderSystemMixin.java

Lines changed: 0 additions & 20 deletions
This file was deleted.
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package io.github.foundationgames.animatica.mixin;
2+
3+
import io.github.foundationgames.animatica.Animatica;
4+
import io.github.foundationgames.animatica.animation.AnimationLoader;
5+
import net.minecraft.client.texture.TextureManager;
6+
import net.minecraft.util.Identifier;
7+
import org.spongepowered.asm.mixin.Mixin;
8+
import org.spongepowered.asm.mixin.injection.At;
9+
import org.spongepowered.asm.mixin.injection.ModifyVariable;
10+
11+
@Mixin(TextureManager.class)
12+
public class TextureManagerMixin {
13+
@ModifyVariable(method = "getTexture", at = @At("HEAD"), index = 1, argsOnly = true)
14+
private Identifier animatica$replaceWithAnimatedTexture(Identifier old) {
15+
if (Animatica.CONFIG.animatedTextures) {
16+
var anim = AnimationLoader.INSTANCE.getAnimationId(old);
17+
if (anim != null) {
18+
return anim;
19+
}
20+
}
21+
return old;
22+
}
23+
}

src/main/resources/animatica.mixins.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
"client": [
77
"IdentifierMixin",
88
"NativeImageAccessor",
9-
"RenderSystemMixin",
9+
"TextureManagerMixin",
1010
"VideoOptionsScreenMixin"
1111
],
1212
"injectors": {

src/main/resources/fabric.mod.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
"depends": {
2929
"fabricloader": ">=0.11.3",
3030
"fabric": "*",
31-
"minecraft": ">=1.21.4",
31+
"minecraft": ">=1.21.5",
3232
"java": ">=21"
3333
}
3434
}

0 commit comments

Comments
 (0)