Skip to content

Commit 4a9cd78

Browse files
committed
Merge remote-tracking branch 'origin/1.19.2' into 1.19.4
2 parents bd94b5d + 0f4e835 commit 4a9cd78

File tree

16 files changed

+173
-38
lines changed

16 files changed

+173
-38
lines changed

common/build.gradle

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,9 @@ dependencies {
2323
modCompileOnly("me.shedaniel:RoughlyEnoughItems-fabric:${rei_version}") {
2424
transitive = false
2525
}
26+
27+
modCompileOnly("curse.maven:diagonal-fences-458048:${diagonal_fences_version}")
28+
2629
// compile against the JEI API but do not include it at runtime
2730
modCompileOnly("mezz.jei:jei-${minecraft_version}-common:${jei_version}")
2831
modCompileOnly("mezz.jei:jei-${minecraft_version}-gui:${jei_version}")

common/src/main/java/org/embeddedt/modernfix/ModernFix.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import org.embeddedt.modernfix.platform.ModernFixPlatformHooks;
1212
import org.embeddedt.modernfix.resources.ReloadExecutor;
1313
import org.embeddedt.modernfix.util.ClassInfoManager;
14+
import org.embeddedt.modernfix.world.IntegratedWatchdog;
1415

1516
import java.lang.management.ManagementFactory;
1617
import java.util.concurrent.ExecutorService;
@@ -46,6 +47,19 @@ public static ExecutorService resourceReloadExecutor() {
4647
public ModernFix() {
4748
INSTANCE = this;
4849
ModernFixPlatformHooks.onServerCommandRegister(ModernFixCommands::register);
50+
if(ModernFixMixinPlugin.instance.isOptionEnabled("feature.spam_thread_dump.ThreadDumper")) {
51+
Thread t = new Thread() {
52+
public void run() {
53+
while(true) {
54+
LOGGER.error("------ DEBUG THREAD DUMP (occurs every 60 seconds) ------");
55+
LOGGER.error(IntegratedWatchdog.obtainThreadDump());
56+
try { Thread.sleep(60000); } catch(InterruptedException e) {}
57+
}
58+
}
59+
};
60+
t.setDaemon(true);
61+
t.start();
62+
}
4963
}
5064

5165
public void onServerStarted() {

common/src/main/java/org/embeddedt/modernfix/api/entrypoint/ModernFixClientIntegration.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,19 @@ default UnbakedModel onUnbakedModelLoad(ResourceLocation location, UnbakedModel
3434
return originalModel;
3535
}
3636

37+
/**
38+
* Called to allow mods to observe the use of an unbaked model at bake time and either make changes to it or wrap it with their
39+
* own instance.
40+
* @param location the ResourceLocation of the model (this may be a ModelResourceLocation)
41+
* @param originalModel the original model
42+
* @param bakery the model bakery - do not touch internal fields as they probably don't behave the way you expect
43+
* with dynamic resources on
44+
* @return the model which should actually be loaded for this resource location
45+
*/
46+
default UnbakedModel onUnbakedModelPreBake(ResourceLocation location, UnbakedModel originalModel, ModelBakery bakery) {
47+
return originalModel;
48+
}
49+
3750
/**
3851
* Called to allow mods to observe the loading of a baked model and either make changes to it or wrap it with their
3952
* own instance.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
package org.embeddedt.modernfix.common.mixin.perf.dynamic_resources.diagonalfences;
2+
3+
import fuzs.diagonalfences.api.world.level.block.DiagonalBlock;
4+
import fuzs.diagonalfences.client.model.MultipartAppender;
5+
import net.minecraft.client.renderer.block.model.multipart.MultiPart;
6+
import net.minecraft.client.resources.model.ModelBakery;
7+
import net.minecraft.client.resources.model.UnbakedModel;
8+
import net.minecraft.resources.ResourceLocation;
9+
import net.minecraft.world.level.block.Block;
10+
import net.minecraft.world.level.block.FenceBlock;
11+
import org.embeddedt.modernfix.ModernFixClient;
12+
import org.embeddedt.modernfix.annotation.RequiresMod;
13+
import org.embeddedt.modernfix.api.entrypoint.ModernFixClientIntegration;
14+
import org.spongepowered.asm.mixin.Mixin;
15+
import org.spongepowered.asm.mixin.Shadow;
16+
import org.spongepowered.asm.mixin.injection.At;
17+
import org.spongepowered.asm.mixin.injection.Inject;
18+
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
19+
20+
@Mixin(MultipartAppender.class)
21+
@RequiresMod("diagonalfences")
22+
public abstract class MultipartAppenderMixin {
23+
@Shadow(remap = false)
24+
public static void appendDiagonalSelectors(ModelBakery modelBakery, MultiPart multiPart) {
25+
throw new AssertionError();
26+
}
27+
28+
private static boolean handlerInjected = false;
29+
30+
@Inject(method = "onPrepareModelBaking", at = @At("RETURN"))
31+
private static void setupHelper(CallbackInfo ci) {
32+
if(handlerInjected)
33+
return;
34+
handlerInjected = true;
35+
ModernFixClient.CLIENT_INTEGRATIONS.add(new ModernFixClientIntegration() {
36+
@Override
37+
public UnbakedModel onUnbakedModelLoad(ResourceLocation location, UnbakedModel originalModel, ModelBakery bakery) {
38+
if(originalModel instanceof MultiPart multipart) {
39+
Block block = multipart.definition.getOwner();
40+
if(block instanceof FenceBlock && block instanceof DiagonalBlock diagonalBlock && diagonalBlock.hasProperties()) {
41+
appendDiagonalSelectors(bakery, multipart);
42+
}
43+
}
44+
return originalModel;
45+
}
46+
});
47+
}
48+
}

common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/nbt_memory_usage/CompoundTagMixin.java

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,27 +6,24 @@
66
import org.spongepowered.asm.mixin.*;
77
import org.spongepowered.asm.mixin.injection.At;
88
import org.spongepowered.asm.mixin.injection.Inject;
9-
import org.spongepowered.asm.mixin.injection.Redirect;
9+
import org.spongepowered.asm.mixin.injection.ModifyArg;
1010
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
1111

1212
import java.util.Map;
1313

1414
@Mixin(CompoundTag.class)
1515
public class CompoundTagMixin {
16-
@Shadow @Final @Mutable
16+
@Shadow @Final
1717
private Map<String, Tag> tags;
1818

1919
/**
20-
* Ensure that the backing map is always a CanonizingStringMap.
20+
* Ensure that the default backing map is a CanonizingStringMap.
2121
*/
22-
@Redirect(method = "<init>(Ljava/util/Map;)V", at = @At(value = "FIELD", target = "Lnet/minecraft/nbt/CompoundTag;tags:Ljava/util/Map;", ordinal = 0))
23-
private void replaceTagMap(CompoundTag tag, Map<String, Tag> incomingMap) {
24-
if(incomingMap instanceof CanonizingStringMap)
25-
this.tags = incomingMap;
26-
else {
27-
this.tags = new CanonizingStringMap<>();
28-
this.tags.putAll(incomingMap);
29-
}
22+
@ModifyArg(method = "<init>()V", at = @At(value = "INVOKE", target = "Lnet/minecraft/nbt/CompoundTag;<init>(Ljava/util/Map;)V"), index = 0)
23+
private static Map<String, Tag> useCanonizingStringMap(Map<String, Tag> incoming) {
24+
CanonizingStringMap<Tag> newMap = new CanonizingStringMap<>();
25+
newMap.putAll(incoming);
26+
return newMap;
3027
}
3128

3229
/**

common/src/main/java/org/embeddedt/modernfix/core/config/ModernFixEarlyConfig.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,7 @@ else if(isClientOnly && !ModernFixPlatformHooks.isClient())
143143
.put("mixin.perf.dynamic_entity_renderers", false)
144144
.put("mixin.feature.integrated_server_watchdog", true)
145145
.put("mixin.perf.faster_item_rendering", false)
146+
.put("mixin.feature.spam_thread_dump", false)
146147
.put("mixin.devenv", isDevEnv)
147148
.put("mixin.perf.remove_spawn_chunks", isDevEnv)
148149
.build();
@@ -185,7 +186,7 @@ private ModernFixEarlyConfig(File file) {
185186
disableIfModPresent("mixin.launch.class_search_cache", "optifine");
186187
disableIfModPresent("mixin.perf.faster_texture_stitching", "optifine");
187188
disableIfModPresent("mixin.perf.datapack_reload_exceptions", "cyanide");
188-
disableIfModPresent("mixin.perf.faster_texture_loading", "stitch", "optifine");
189+
disableIfModPresent("mixin.perf.faster_texture_loading", "stitch", "optifine", "changed");
189190
}
190191

191192
private void disableIfModPresent(String configName, String... ids) {

common/src/main/java/org/embeddedt/modernfix/resources/PackResourcesCacheEngine.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import net.minecraft.resources.ResourceLocation;
99
import net.minecraft.server.packs.PackType;
1010
import org.embeddedt.modernfix.ModernFix;
11+
import org.embeddedt.modernfix.platform.ModernFixPlatformHooks;
1112
import org.embeddedt.modernfix.util.PackTypeHelper;
1213

1314
import java.io.IOException;
@@ -163,6 +164,8 @@ public static void track(ICachingResourcePack pack) {
163164
}
164165

165166
public static void invalidate() {
167+
if(!ModernFixPlatformHooks.isDevEnv())
168+
return;
166169
synchronized (cachingPacks) {
167170
cachingPacks.keySet().forEach(pack -> {
168171
if(pack != null)

common/src/main/java/org/embeddedt/modernfix/searchtree/JEIBackedSearchTree.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ public RefreshableSearchTree<ItemStack> getSearchTree(boolean tag) {
9898

9999
@Override
100100
public boolean canUse() {
101-
return ModernFixPlatformHooks.modPresent("jei") && getIngredientListUncached != null && filterField != null;
101+
return ModernFixPlatformHooks.modPresent("jei") && !ModernFixPlatformHooks.modPresent("emi") && getIngredientListUncached != null && filterField != null;
102102
}
103103

104104
@Override

common/src/main/java/org/embeddedt/modernfix/structure/CachingStructureManager.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -63,21 +63,22 @@ public static CompoundTag readStructureTag(ResourceLocation location, DataFixer
6363
currentTag.putInt("DataVersion", 500);
6464
}
6565
int currentDataVersion = currentTag.getInt("DataVersion");
66-
if(currentDataVersion < SharedConstants.getCurrentVersion().getDataVersion().getVersion()) {
66+
int requiredMinimumDataVersion = SharedConstants.getCurrentVersion().getDataVersion().getVersion();
67+
if(currentDataVersion < requiredMinimumDataVersion) {
6768
/* Needs upgrade, try looking up from cache */
6869
MessageDigest hasher = digestThreadLocal.get();
6970
hasher.reset();
7071
String hash = encodeHex(hasher.digest(structureBytes));
7172
CompoundTag cachedUpgraded = getCachedUpgraded(location, truncateHash(hash));
7273
if(cachedUpgraded == null)
7374
cachedUpgraded = getCachedUpgraded(location, hash); /* pick up old cache */
74-
if(cachedUpgraded != null && cachedUpgraded.getInt("DataVersion") == SharedConstants.getCurrentVersion().getDataVersion().getVersion()) {
75+
if(cachedUpgraded != null && cachedUpgraded.getInt("DataVersion") == requiredMinimumDataVersion) {
7576
ModernFix.LOGGER.debug("Using cached upgraded version of {}", location);
7677
currentTag = cachedUpgraded;
7778
} else {
7879
synchronized (laggyStructureMods) {
7980
if(laggyStructureMods.add(location.getNamespace())) {
80-
ModernFix.LOGGER.warn("Mod {} is shipping outdated structure files, which can cause worldgen lag; please report this to them.", location.getNamespace());
81+
ModernFix.LOGGER.warn("The namespace {} contains an outdated structure file, which can cause worldgen lag. Please view debug.log for the full filename, determine which mod provides the structure, and report to the mod/datapack author, including the debug log.", location.getNamespace());
8182
}
8283
}
8384
ModernFix.LOGGER.debug("Structure {} is being run through DFU (hash {}), this will cause launch time delays", location, hash);

common/src/main/java/org/embeddedt/modernfix/world/IntegratedWatchdog.java

Lines changed: 22 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,27 @@ public IntegratedWatchdog(MinecraftServer server) {
2525
this.setName("ModernFix integrated server watchdog");
2626
}
2727

28+
public static String obtainThreadDump() {
29+
ThreadMXBean threadmxbean = ManagementFactory.getThreadMXBean();
30+
ThreadInfo[] athreadinfo = threadmxbean.dumpAllThreads(true, true);
31+
StringBuilder sb = new StringBuilder();
32+
sb.append("Thread Dump:\n");
33+
for(ThreadInfo threadinfo : athreadinfo) {
34+
sb.append(threadinfo);
35+
StackTraceElement[] elements = threadinfo.getStackTrace();
36+
if(elements.length > 8) {
37+
sb.append("extended trace:\n");
38+
for(int i = 8; i < elements.length; i++) {
39+
sb.append("\tat ");
40+
sb.append(elements[i]);
41+
sb.append('\n');
42+
}
43+
}
44+
sb.append('\n');
45+
}
46+
return sb.toString();
47+
}
48+
2849
public void run() {
2950
while(true) {
3051
MinecraftServer server = this.server.get();
@@ -35,24 +56,7 @@ public void run() {
3556
long delta = curTime - nextTick;
3657
if(delta > MAX_TICK_DELTA) {
3758
LOGGER.error("A single server tick has taken {}, more than {} milliseconds", delta, MAX_TICK_DELTA);
38-
ThreadMXBean threadmxbean = ManagementFactory.getThreadMXBean();
39-
ThreadInfo[] athreadinfo = threadmxbean.dumpAllThreads(true, true);
40-
StringBuilder sb = new StringBuilder();
41-
sb.append("Thread Dump:\n");
42-
for(ThreadInfo threadinfo : athreadinfo) {
43-
sb.append(threadinfo);
44-
StackTraceElement[] elements = threadinfo.getStackTrace();
45-
if(elements.length > 8) {
46-
sb.append("extended trace:\n");
47-
for(int i = 8; i < elements.length; i++) {
48-
sb.append("\tat ");
49-
sb.append(elements[i]);
50-
sb.append('\n');
51-
}
52-
}
53-
sb.append('\n');
54-
}
55-
LOGGER.error(sb.toString());
59+
LOGGER.error(obtainThreadDump());
5660
nextTick = 0;
5761
curTime = 0;
5862
}

0 commit comments

Comments
 (0)