Skip to content

Commit 31aa8e6

Browse files
authored
Develop beta 43 (#1006)
2 parents 5bbe56f + fba138d commit 31aa8e6

File tree

13 files changed

+123
-54
lines changed

13 files changed

+123
-54
lines changed

Diff for: gradle.properties

+5-5
Original file line numberDiff line numberDiff line change
@@ -4,18 +4,18 @@ org.gradle.jvmargs=-Xmx3G
44
org.gradle.daemon=true
55

66
# Versions
7-
versionConnector=1.0.0-beta.42
8-
versionAdapter=1.11.39-1.20.1-20240406.124555
9-
versionAdapterDefinition=1.11.47
7+
versionConnector=1.0.0-beta.43
8+
versionAdapter=1.11.55-1.20.1-20240428.153904
9+
versionAdapterDefinition=1.11.55
1010

1111
versionMc=1.20.1
1212
versionForge=47.1.3
1313
versionForgeAutoRenamingTool=1.0.11
1414
versionFabricLoader=2.7.2+0.15.3+1.20.1
1515
versionAccessWidener=2.1.0
1616
versionFabricApi=0.92.0+1.11.5+1.20.1
17-
versionMixin=0.12.10+mixin.0.8.5
18-
versionMixinTransmog=0.4.5+1.20.1
17+
versionMixin=0.12.11+mixin.0.8.5
18+
versionMixinTransmog=0.4.6+1.20.1
1919

2020
# Publishing
2121
curseForgeId=890127

Diff for: src/main/java/dev/su5ed/sinytra/connector/loader/ConnectorEarlyLoader.java

-3
Original file line numberDiff line numberDiff line change
@@ -96,9 +96,6 @@ public static void init() {
9696
LOGGER.debug("Starting early connector loader setup");
9797
ProgressMeter progress = StartupNotificationManager.addProgressBar("[Connector] Early Setup", 0);
9898
try {
99-
if (ConnectorConfig.usesUnsupportedConfiguration()) {
100-
LOGGER.warn("Outdated connector_global_mod_aliases.json configuration file detected. Please migrate to the new connector.json configuration.");
101-
}
10299
List<String> hiddenMods = ConnectorConfig.INSTANCE.get().hiddenMods();
103100
// Find all connector loader mods
104101
List<ModInfo> mods = LoadingModList.get().getMods().stream()

Diff for: src/main/java/dev/su5ed/sinytra/connector/locator/ConnectorConfig.java

-4
Original file line numberDiff line numberDiff line change
@@ -80,8 +80,4 @@ public record ConnectorConfig(int version, List<String> hiddenMods, Multimap<Str
8080
}
8181
return DEFAULT;
8282
});
83-
84-
public static boolean usesUnsupportedConfiguration() {
85-
return Files.exists(FMLPaths.CONFIGDIR.get().resolve("connector_global_mod_aliases.json"));
86-
}
8783
}

Diff for: src/main/java/dev/su5ed/sinytra/connector/transformer/MixinPatches.java

+23-1
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,8 @@ public static List<Patch> getPriorityPatches() {
4242
}
4343

4444
public static List<Patch> getPatches() {
45-
final List<Object> patches = List.of(Patch.builder()
45+
final List<Object> patches = List.of(
46+
Patch.builder()
4647
.targetClass("net/minecraft/client/Minecraft")
4748
.targetMethod("<init>")
4849
.targetInjectionPoint("Lnet/fabricmc/loader/impl/game/minecraft/Hooks;startClient(Ljava/io/File;Ljava/lang/Object;)V")
@@ -63,6 +64,12 @@ public static List<Patch> getPatches() {
6364
.injectionPoint("INVOKE", "Lnet/minecraft/world/entity/ai/attributes/AttributeInstance;m_22135_()D")
6465
.putValue("ordinal", 0))
6566
.build(),
67+
Patch.builder()
68+
.targetClass("net/minecraft/world/item/HoeItem")
69+
.targetMethod("m_6225_(Lnet/minecraft/world/item/context/UseOnContext;)Lnet/minecraft/world/InteractionResult;")
70+
.targetInjectionPoint("FIELD", "Lnet/minecraft/world/item/HoeItem;f_41332_:Ljava/util/Map;")
71+
.modifyInjectionPoint("INVOKE", "Lnet/minecraft/world/level/block/state/BlockState;getToolModifiedState(Lnet/minecraft/world/item/context/UseOnContext;Lnet/minecraftforge/common/ToolAction;Z)Lnet/minecraft/world/level/block/state/BlockState;", true)
72+
.build(),
6673
Patch.builder()
6774
.targetClass("net/minecraft/client/KeyMapping")
6875
.targetMethod("m_90837_")
@@ -296,6 +303,14 @@ public static List<Patch> getPatches() {
296303
.modifyParams(b -> b.insert(0, Type.INT_TYPE).insert(1, Type.INT_TYPE).targetType(ParamTransformTarget.METHOD))
297304
.modifyInjectionPoint("INVOKE", "Lcom/mojang/blaze3d/systems/RenderSystem;disableBlend()V")
298305
.build(),
306+
Patch.builder()
307+
.targetClass("net/minecraft/client/gui/Gui")
308+
.targetMethod("m_280173_(Lnet/minecraft/client/gui/GuiGraphics;)V")
309+
.targetInjectionPoint("Lnet/minecraft/world/food/FoodData;m_38722_()F")
310+
.extractMixin("net/minecraftforge/client/gui/overlay/ForgeGui")
311+
.modifyTarget("renderFood(IILnet/minecraft/client/gui/GuiGraphics;)V")
312+
.modifyParams(b -> b.insert(0, Type.INT_TYPE).insert(1, Type.INT_TYPE).targetType(ParamTransformTarget.METHOD))
313+
.build(),
299314
Patch.builder()
300315
.targetClass("net/minecraft/client/gui/Gui")
301316
.targetMethod("m_280173_(Lnet/minecraft/client/gui/GuiGraphics;)V")
@@ -451,6 +466,13 @@ public static List<Patch> getPatches() {
451466
adapter.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "java/lang/Double", "doubleValue", "()D", false);
452467
}))
453468
.build(),
469+
Patch.builder()
470+
.targetClass("net/minecraft/world/entity/LivingEntity")
471+
.targetMethod("updateFallFlying") // updateFallFlying, m_21323_
472+
.targetInjectionPoint("INVOKE", "Lnet/minecraft/world/item/ItemStack;m_41622_(ILnet/minecraft/world/entity/LivingEntity;Ljava/util/function/Consumer;)V") // hurtAndBreak, m_41622_
473+
.extractMixin("net/minecraft/world/item/ElytraItem")
474+
.modifyTarget("elytraFlightTick(Lnet/minecraft/world/item/ItemStack;Lnet/minecraft/world/entity/LivingEntity;I)Z")
475+
.build(),
454476
Patch.builder()
455477
.targetClass("net/minecraft/server/level/ServerPlayerGameMode")
456478
.targetMethod("m_9280_")

Diff for: src/main/java/dev/su5ed/sinytra/connector/transformer/ModMetadataGenerator.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ public Collection<? extends Entry> getExtras() {
5050

5151
// Generate pack metadata
5252
if (!this.seen) {
53-
byte[] data = generatePackMetadataFile(this.modid);
53+
byte[] data = generatePackMetadataFile(this.modid); // TODO Remove in 1.20.5
5454
extras.add(ResourceEntry.create(RESOURCE, ConnectorUtil.ZIP_TIME, data));
5555
}
5656
return extras;

Diff for: src/mod/java/dev/su5ed/sinytra/connector/mod/ConnectorMod.java

-13
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
import com.electronwill.nightconfig.core.file.GenericBuilder;
66
import com.google.gson.JsonElement;
77
import dev.su5ed.sinytra.connector.ConnectorUtil;
8-
import dev.su5ed.sinytra.connector.locator.ConnectorConfig;
98
import dev.su5ed.sinytra.connector.mod.compat.DummyResourceManager;
109
import dev.su5ed.sinytra.connector.mod.compat.FluidHandlerCompat;
1110
import dev.su5ed.sinytra.connector.mod.compat.LateRenderTypesInit;
@@ -19,10 +18,6 @@
1918
import net.minecraftforge.eventbus.api.EventPriority;
2019
import net.minecraftforge.eventbus.api.IEventBus;
2120
import net.minecraftforge.fml.ModList;
22-
import net.minecraftforge.fml.ModLoader;
23-
import net.minecraftforge.fml.ModLoadingContext;
24-
import net.minecraftforge.fml.ModLoadingStage;
25-
import net.minecraftforge.fml.ModLoadingWarning;
2621
import net.minecraftforge.fml.common.Mod;
2722
import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent;
2823
import net.minecraftforge.fml.event.lifecycle.FMLLoadCompleteEvent;
@@ -58,14 +53,6 @@ public ConnectorMod() {
5853
if (modList.isLoaded("fabric_object_builder_api_v1")) {
5954
bus.addListener(EventPriority.HIGHEST, LazyEntityAttributes::initializeLazyAttributes);
6055
}
61-
62-
if (ConnectorConfig.usesUnsupportedConfiguration()) {
63-
ModLoader.get().addWarning(new ModLoadingWarning(
64-
ModLoadingContext.get().getActiveContainer().getModInfo(),
65-
ModLoadingStage.CONSTRUCT,
66-
"Outdated connector_global_mod_aliases.json configuration file detected. Please migrate to the new connector.json configuration."
67-
));
68-
}
6956
}
7057

7158
private static void onClientSetup(FMLClientSetupEvent event) {

Diff for: src/mod/java/dev/su5ed/sinytra/connector/mod/compat/DynamicRegistryPrefixes.java

-10
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
package dev.su5ed.sinytra.connector.mod.compat;
2+
3+
import com.google.common.collect.BiMap;
4+
import com.mojang.datafixers.util.Pair;
5+
import com.mojang.logging.LogUtils;
6+
import dev.su5ed.sinytra.connector.loader.ConnectorEarlyLoader;
7+
import net.fabricmc.fabric.impl.registry.sync.DynamicRegistriesImpl;
8+
import net.minecraft.resources.ResourceKey;
9+
import net.minecraft.resources.ResourceLocation;
10+
import net.minecraftforge.fml.loading.FMLLoader;
11+
import net.minecraftforge.registries.ForgeRegistries;
12+
import net.minecraftforge.registries.ForgeRegistry;
13+
import net.minecraftforge.registries.IForgeRegistry;
14+
import org.slf4j.Logger;
15+
16+
import java.lang.invoke.MethodHandles;
17+
import java.lang.invoke.VarHandle;
18+
import java.util.ArrayList;
19+
import java.util.List;
20+
import java.util.Map;
21+
22+
import static cpw.mods.modlauncher.api.LamdbaExceptionUtils.uncheck;
23+
24+
public class RegistryUtil {
25+
private static final VarHandle REGISTRY_NAMES = uncheck(() -> MethodHandles.privateLookupIn(ForgeRegistry.class, MethodHandles.lookup()).findVarHandle(ForgeRegistry.class, "names", BiMap.class));
26+
private static final ResourceLocation PARTICLE_TYPE_REGISTRY = ForgeRegistries.Keys.PARTICLE_TYPES.location();
27+
private static final Logger LOGGER = LogUtils.getLogger();
28+
29+
public static boolean isRegisteredFabricDynamicRegistry(ResourceKey<?> key) {
30+
return DynamicRegistriesImpl.FABRIC_DYNAMIC_REGISTRY_KEYS.stream().anyMatch(key::equals);
31+
}
32+
33+
public static <V> void retainFabricClientEntries(ResourceLocation name, ForgeRegistry<V> from, IForgeRegistry<V> to) {
34+
if (FMLLoader.getDist().isClient() && name.equals(PARTICLE_TYPE_REGISTRY)) {
35+
List<Pair<ResourceLocation, V>> list = new ArrayList<>();
36+
37+
for (Map.Entry<ResourceKey<V>, V> entry : to.getEntries()) {
38+
ResourceLocation location = entry.getKey().location();
39+
if (!from.containsKey(location) && ConnectorEarlyLoader.isConnectorMod(location.getNamespace())) {
40+
list.add(Pair.of(location, entry.getValue()));
41+
}
42+
}
43+
44+
if (!list.isEmpty()) {
45+
LOGGER.info("Connector found {} items to retain in registry {}", list.size(), name);
46+
}
47+
48+
for (Pair<ResourceLocation, V> pair : list) {
49+
RegistryUtil.getNames(from).put(pair.getFirst(), pair.getSecond());
50+
}
51+
}
52+
}
53+
54+
private static <V> BiMap<ResourceLocation, V> getNames(ForgeRegistry<V> registry) {
55+
return (BiMap<ResourceLocation, V>) uncheck(() -> REGISTRY_NAMES.get(registry));
56+
}
57+
}

Diff for: src/mod/java/dev/su5ed/sinytra/connector/mod/mixin/client/KeyMappingMixin.java

+13-13
Original file line numberDiff line numberDiff line change
@@ -29,11 +29,11 @@ public class KeyMappingMixin {
2929
@Shadow
3030
private static KeyMappingLookup MAP;
3131

32-
@Shadow(remap = false, aliases = "f_90810_")
32+
@Shadow(remap = false, aliases = { "f_90810_", "MAP" })
3333
private static final Map<InputConstants.Key, KeyMapping> vanillaKeyMapping;
34-
34+
3535
private static final ThreadLocal<KeyMapping> KEY_MAPPING_LOCAL = new ThreadLocal<>();
36-
36+
3737
@Inject(method = "set", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/KeyMapping;setDown(Z)V"))
3838
private static void onSetKeyMapping(InputConstants.Key pKey, boolean pHeld, CallbackInfo ci, @Local KeyMapping keyMapping) {
3939
KEY_MAPPING_LOCAL.set(keyMapping);
@@ -50,7 +50,7 @@ private static void connector_onSetKeyMapping(InputConstants.Key pKey, boolean p
5050
// if they use the field in their code or otherwise reflect (see voxelmap)
5151
// The field is added back through a coremod, and here it is semi-delegated
5252
final EnumMap<KeyModifier, Map<InputConstants.Key, Collection<KeyMapping>>> actualMap = ObfuscationReflectionHelper
53-
.getPrivateValue(KeyMappingLookup.class, MAP, "map");
53+
.getPrivateValue(KeyMappingLookup.class, MAP, "map");
5454
final var delegate = actualMap.get(KeyModifier.NONE);
5555
vanillaKeyMapping = new Map<>() {
5656
@Override
@@ -99,7 +99,7 @@ public KeyMapping remove(Object key) {
9999
public boolean remove(Object key, Object value) {
100100
Object curValue = get(key);
101101
if (!Objects.equals(curValue, value) ||
102-
(curValue == null && !containsKey(key))) {
102+
(curValue == null && !containsKey(key))) {
103103
return false;
104104
}
105105
MAP.remove((KeyMapping) value);
@@ -126,20 +126,20 @@ public Set<InputConstants.Key> keySet() {
126126
@Override
127127
public Collection<KeyMapping> values() {
128128
return delegate.values()
129-
.stream().flatMap(Collection::stream)
130-
.toList();
129+
.stream().flatMap(Collection::stream)
130+
.toList();
131131
}
132132

133133
@NotNull
134134
@Override
135135
public Set<Entry<InputConstants.Key, KeyMapping>> entrySet() {
136136
return delegate.entrySet().stream()
137-
.filter(e -> !e.getValue().isEmpty())
138-
.collect(Collectors.toMap(
139-
Entry::getKey,
140-
e -> ((ArrayList<KeyMapping>) e.getValue()).get(0)
141-
))
142-
.entrySet();
137+
.filter(e -> !e.getValue().isEmpty())
138+
.collect(Collectors.toMap(
139+
Entry::getKey,
140+
e -> ((ArrayList<KeyMapping>) e.getValue()).get(0)
141+
))
142+
.entrySet();
143143
}
144144
};
145145
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package dev.su5ed.sinytra.connector.mod.mixin.registries;
2+
3+
import dev.su5ed.sinytra.connector.mod.compat.RegistryUtil;
4+
import net.minecraft.resources.ResourceLocation;
5+
import net.minecraftforge.registries.ForgeRegistry;
6+
import net.minecraftforge.registries.IForgeRegistry;
7+
import org.spongepowered.asm.mixin.Mixin;
8+
import org.spongepowered.asm.mixin.injection.At;
9+
import org.spongepowered.asm.mixin.injection.Inject;
10+
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
11+
12+
@Mixin(ForgeRegistry.class)
13+
public abstract class ClientForgeRegistryMixin<V> implements IForgeRegistry<V> {
14+
15+
@Inject(method = "sync", at = @At(value = "INVOKE", target = "Lcom/google/common/collect/BiMap;clear()V", ordinal = 0), remap = false)
16+
private void retainFabricClientEntries(ResourceLocation name, ForgeRegistry<V> from, CallbackInfo ci) {
17+
RegistryUtil.retainFabricClientEntries(name, from, this);
18+
}
19+
}

Diff for: src/mod/java/dev/su5ed/sinytra/connector/mod/mixin/registries/RegistryDataLoaderMixin.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package dev.su5ed.sinytra.connector.mod.mixin.registries;
22

33
import dev.su5ed.sinytra.connector.loader.ConnectorEarlyLoader;
4-
import dev.su5ed.sinytra.connector.mod.compat.DynamicRegistryPrefixes;
4+
import dev.su5ed.sinytra.connector.mod.compat.RegistryUtil;
55
import net.minecraft.core.Registry;
66
import net.minecraft.resources.FileToIdConverter;
77
import net.minecraft.resources.RegistryDataLoader;
@@ -73,7 +73,7 @@ private static String modifyRegistryDirPath(ResourceLocation location, RegistryO
7373
private static boolean connector$shouldOmitPrefix(ResourceLocation location, ResourceKey<? extends Registry<?>> registryKey, ResourceManager manager) {
7474
String modid = location.getNamespace();
7575
// Fabric mod registries added directly to RegistryDataLoader.WORLDGEN_REGISTRIES should not be prefixed
76-
if (ConnectorEarlyLoader.isConnectorMod(modid) && ModList.get().isLoaded("fabric_registry_sync_v0") && !DynamicRegistryPrefixes.isRegisteredFabricDynamicRegistry(registryKey)) {
76+
if (ConnectorEarlyLoader.isConnectorMod(modid) && ModList.get().isLoaded("fabric_registry_sync_v0") && !RegistryUtil.isRegisteredFabricDynamicRegistry(registryKey)) {
7777
return true;
7878
}
7979
// Check if the registry has been registered

Diff for: src/mod/resources/META-INF/asm/fixFieldSignatureChanges.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ function initializeCoreMod() {
2020

2121
// Add the field before the f_90812_ (KeyMapping#CATEGORY_SORT_ORDER) which is the 3rd map
2222
// See https://github.com/Sinytra/Connector/issues/723
23-
node.fields.add(i, new FieldNode(Opcodes.ACC_PRIVATE | Opcodes.ACC_STATIC | Opcodes.ACC_FINAL, 'f_90810_', 'Ljava/util/Map;', null, null));
23+
node.fields.add(i, new FieldNode(Opcodes.ACC_PRIVATE | Opcodes.ACC_STATIC | Opcodes.ACC_FINAL, ASMAPI.mapField('f_90810_'), 'Ljava/util/Map;', null, null));
2424

2525
ASMAPI.log('DEBUG', 'Added field for KeyMapping#MAP (f_90810_) at index ' + (i + 1));
2626
return node;

Diff for: src/mod/resources/connectormod.mixins.json

+2-1
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,8 @@
4343
"recipebook.RecipeBookCategoriesAccessor",
4444
"recipebook.RecipeBookCategoriesMixin",
4545
"recipebook.RecipeBookManagerMixin",
46-
"registries.MinecraftMixin"
46+
"registries.MinecraftMixin",
47+
"registries.ClientForgeRegistryMixin"
4748
],
4849
"server": [
4950
"boot.ServerMainMixin",

0 commit comments

Comments
 (0)