Skip to content

Commit 4f3a4fd

Browse files
authored
Merge pull request #13 from contariaa/1.16.1
5.2.0: Cache Structures & default Pack Metadata
2 parents bcfaf33 + 5b7f806 commit 4f3a4fd

File tree

7 files changed

+110
-5
lines changed

7 files changed

+110
-5
lines changed

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ yarn_mappings=1.16.1-build.24
88
loader_version=0.16.0
99

1010
# Mod Properties
11-
mod_version=5.1.0
11+
mod_version=5.2.0
1212
maven_group=me.wurgo
1313
archives_base_name=antiresourcereload
1414

src/main/java/me/wurgo/antiresourcereload/AntiResourceReload.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,14 @@
22

33
import com.google.gson.JsonElement;
44
import net.minecraft.resource.ServerResourceManager;
5+
import net.minecraft.structure.Structure;
56
import net.minecraft.util.Identifier;
67
import net.minecraft.util.UserCache;
78
import org.apache.logging.log4j.LogManager;
89
import org.apache.logging.log4j.Logger;
910

11+
import java.util.Collections;
12+
import java.util.HashMap;
1013
import java.util.Map;
1114
import java.util.concurrent.CompletableFuture;
1215

@@ -19,6 +22,8 @@ public class AntiResourceReload {
1922

2023
public static UserCache userCache;
2124

25+
public static final Map<Identifier, Structure> structures = Collections.synchronizedMap(new HashMap<>());
26+
2227
public static void log(String message) {
2328
LOGGER.info("[AntiResourceReload] {}", message);
2429
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package me.wurgo.antiresourcereload.mixin;
2+
3+
import com.llamalad7.mixinextras.injector.wrapmethod.WrapMethod;
4+
import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
5+
import net.minecraft.resource.DefaultResourcePack;
6+
import net.minecraft.resource.metadata.PackResourceMetadata;
7+
import net.minecraft.resource.metadata.ResourceMetadataReader;
8+
import org.jetbrains.annotations.Nullable;
9+
import org.spongepowered.asm.mixin.Mixin;
10+
import org.spongepowered.asm.mixin.Unique;
11+
12+
@Mixin(DefaultResourcePack.class)
13+
public abstract class DefaultResourcePackMixin {
14+
@Nullable
15+
@Unique
16+
private static PackResourceMetadata METADATA;
17+
18+
@WrapMethod(method = "parseMetadata")
19+
private Object cacheMetadata(ResourceMetadataReader<?> reader, Operation<?> original) {
20+
if (reader != PackResourceMetadata.READER) {
21+
return original.call(reader);
22+
}
23+
if (METADATA == null) {
24+
METADATA = (PackResourceMetadata) original.call(reader);
25+
}
26+
return METADATA;
27+
}
28+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package me.wurgo.antiresourcereload.mixin;
2+
3+
import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
4+
import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation;
5+
import net.minecraft.structure.Structure;
6+
import org.objectweb.asm.Opcodes;
7+
import org.spongepowered.asm.mixin.Mixin;
8+
import org.spongepowered.asm.mixin.injection.At;
9+
10+
import java.util.Collections;
11+
import java.util.Map;
12+
13+
@Mixin(Structure.PalettedBlockInfoList.class)
14+
public abstract class Structure$PalettedBlockInfoListMixin {
15+
16+
@WrapOperation(
17+
method = "<init>*",
18+
at = @At(
19+
value = "FIELD",
20+
target = "Lnet/minecraft/structure/Structure$PalettedBlockInfoList;blockToInfos:Ljava/util/Map;",
21+
opcode = Opcodes.PUTFIELD
22+
)
23+
)
24+
private void synchronizeBlockToInfosMap(Structure.PalettedBlockInfoList list, Map<?, ?> blockToInfos, Operation<Void> original) {
25+
original.call(list, Collections.synchronizedMap(blockToInfos));
26+
}
27+
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package me.wurgo.antiresourcereload.mixin;
2+
3+
import me.wurgo.antiresourcereload.AntiResourceReload;
4+
import net.minecraft.resource.ResourceManager;
5+
import net.minecraft.resource.ServerResourceManager;
6+
import net.minecraft.structure.Structure;
7+
import net.minecraft.structure.StructureManager;
8+
import net.minecraft.util.Identifier;
9+
import org.spongepowered.asm.mixin.Mixin;
10+
import org.spongepowered.asm.mixin.Shadow;
11+
import org.spongepowered.asm.mixin.injection.At;
12+
import org.spongepowered.asm.mixin.injection.ModifyArg;
13+
14+
import java.util.function.Function;
15+
16+
@Mixin(StructureManager.class)
17+
public abstract class StructureManagerMixin {
18+
@Shadow
19+
private ResourceManager field_25189;
20+
21+
@ModifyArg(
22+
method = "getStructure",
23+
at = @At(
24+
value = "INVOKE",
25+
target = "Ljava/util/Map;computeIfAbsent(Ljava/lang/Object;Ljava/util/function/Function;)Ljava/lang/Object;"
26+
),
27+
index = 1
28+
)
29+
private Function<Identifier, Structure> getCachedStructure(Function<Identifier, Structure> function) {
30+
return id -> {
31+
if (AntiResourceReload.cache != null) {
32+
ServerResourceManager serverResourceManager = AntiResourceReload.cache.getNow(null);
33+
if (serverResourceManager != null && serverResourceManager.getResourceManager() == this.field_25189) {
34+
return AntiResourceReload.structures.computeIfAbsent(id, function);
35+
}
36+
}
37+
return function.apply(id);
38+
};
39+
}
40+
}

src/main/resources/antiresourcereload.mixins.json

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,14 @@
44
"package": "me.wurgo.antiresourcereload.mixin",
55
"compatibilityLevel": "JAVA_8",
66
"client": [
7+
"DefaultResourcePackMixin",
78
"MinecraftClientMixin",
8-
"ServerResourceManagerMixin",
9+
"RecipeBookWidgetMixin",
910
"RecipeManagerAccess",
1011
"RecipeManagerMixin",
11-
"RecipeBookWidgetMixin"
12+
"ServerResourceManagerMixin",
13+
"Structure$PalettedBlockInfoListMixin",
14+
"StructureManagerMixin"
1215
],
1316
"injectors": {
1417
"defaultRequire": 1

src/main/resources/fabric.mod.json

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,15 @@
99
],
1010
"contributors": [
1111
"Pixfumy",
12-
"KingContaria",
12+
"contaria",
1313
"Ronkzinho",
1414
"jan-leila",
1515
"VoidXWalker"
1616
],
1717
"contact": {
18-
"homepage": "https://github.com/wurgo"
18+
"homepage": "https://github.com/wurgo",
19+
"sources": "https://github.com/Minecraft-Java-Edition-Speedrunning/antiresourcereload",
20+
"issues": "https://github.com/Minecraft-Java-Edition-Speedrunning/antiresourcereload/issues"
1921
},
2022
"license": "MIT",
2123
"environment": "client",

0 commit comments

Comments
 (0)