Prechádzať zdrojové kódy

Add platform-specific code to handle the things previously handled in Forge events

malte0811 4 rokov pred
rodič
commit
4e8efc1248

+ 1 - 1
build.gradle

@@ -1,6 +1,6 @@
 plugins {
     id "architectury-plugin" version "2.0.65"
-    id "forgified-fabric-loom" version "0.6.54" apply false
+    id "forgified-fabric-loom" version "0.6.55" apply false
 }
 
 architectury {

+ 0 - 1
common/src/main/java/com/google/common/collect/FerriteCoreEntrySet.java

@@ -9,7 +9,6 @@ import java.util.function.Function;
 import java.util.function.IntFunction;
 
 public class FerriteCoreEntrySet<K, V> extends ImmutableSet<Map.Entry<K, V>> {
-    //TODO tie together properly
     private final int numProperties;
     private final Function<Object, V> getValue;
     private final IntFunction<Map.Entry<K, V>> getIth;

+ 0 - 1
common/src/main/java/com/google/common/collect/FerriteCoreImmutableMap.java

@@ -7,7 +7,6 @@ import java.util.function.Function;
 import java.util.function.IntFunction;
 
 public class FerriteCoreImmutableMap<K, V> extends ImmutableMap<K, V> {
-    //TODO tie together properly
     // This is a quite inconvenient "handle" on a FastMap, but we need classloader separation
     private final int numProperties;
     private final Function<Object, V> getValue;

+ 0 - 1
common/src/main/java/com/google/common/collect/FerriteCoreIterator.java

@@ -4,7 +4,6 @@ import java.util.Map;
 import java.util.function.IntFunction;
 
 public class FerriteCoreIterator<K, V> extends UnmodifiableIterator<Map.Entry<K, V>> {
-    //TODO tie together properly
     private final IntFunction<Map.Entry<K, V>> getIth;
     private final int length;
 

+ 1 - 14
common/src/main/java/malte0811/ferritecore/impl/BlockStateCacheImpl.java

@@ -21,7 +21,6 @@ import org.apache.logging.log4j.Logger;
 
 import java.util.function.Function;
 
-//TODO @Mod.EventBusSubscriber(modid = ModMain.MODID, bus = Mod.EventBusSubscriber.Bus.FORGE)
 public class BlockStateCacheImpl {
     private static final Direction[] DIRECTIONS = Direction.values();
     public static final Object2ObjectOpenCustomHashMap<ArrayVoxelShape, ArrayVoxelShape> CACHE_COLLIDE =
@@ -38,19 +37,7 @@ public class BlockStateCacheImpl {
     public static int collideCalls = 0;
     public static int projectCalls = 0;
 
-    //TODO
-    // Caches are populated in two places: a) In ITagCollectionSupplier#updateTags (which triggers this event)
-    //@SubscribeEvent
-    //public static void onTagReloadVanilla(TagsUpdatedEvent.VanillaTagTypes ignored) {
-    //    resetCaches();
-    //}
-    // b) Via ForgeRegistry#bake, which usually triggers this event
-    //@SubscribeEvent
-    //public static void onModIdMapping(FMLModIdMappingEvent ignored) {
-    //    resetCaches();
-    //}
-
-    private static void resetCaches() {
+    public static void resetCaches() {
         //TODO remove
         Logger logger = LogManager.getLogger();
         logger.info("Collide stats: Cache size: {}, calls: {}", CACHE_COLLIDE.size(), collideCalls);

+ 0 - 4
common/src/main/java/malte0811/ferritecore/impl/Deduplicator.java

@@ -1,7 +1,6 @@
 package malte0811.ferritecore.impl;
 
 import com.mojang.datafixers.util.Unit;
-import malte0811.ferritecore.ModMain;
 import net.minecraft.client.Minecraft;
 import net.minecraft.client.resources.model.BakedModel;
 import net.minecraft.client.resources.model.MultiPartBakedModel;
@@ -12,14 +11,12 @@ import net.minecraft.util.profiling.ProfilerFiller;
 import net.minecraft.world.level.block.state.BlockState;
 import org.apache.commons.lang3.tuple.Pair;
 
-import javax.annotation.Nonnull;
 import java.util.List;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.function.Function;
 import java.util.function.Predicate;
 
-//TODO @Mod.EventBusSubscriber(value = Dist.CLIENT, modid = ModMain.MODID, bus = Mod.EventBusSubscriber.Bus.MOD)
 public class Deduplicator {
     private static final Map<String, String> VARIANT_IDENTITIES = new ConcurrentHashMap<>();
     // Typedefs would be a nice thing to have
@@ -49,7 +46,6 @@ public class Deduplicator {
         );
     }
 
-    //TODO @SubscribeEvent
     public static void registerReloadListener() {
         // Register the reload listener s.t. its "sync" part runs after the model loader reload
         ((ReloadableResourceManager) Minecraft.getInstance().getResourceManager()).registerReloadListener(new SimplePreparableReloadListener<Unit>() {

+ 0 - 4
common/src/main/java/malte0811/ferritecore/mixin/nopropertymap/NoPropertyStateHolderMixin.java

@@ -42,10 +42,6 @@ public abstract class NoPropertyStateHolderMixin implements NoPropertyStateHolde
         }
     }
 
-    // TODO speed up in some way?
-    // The cleanest (lowest-impact) approach would be to use a custom implementation of ImmutableMap (based on a FastMap
-    // and an index), but that whole class hierarchy is a very "closed" (many essential methods/classes are
-    // package-private)
     @Inject(method = "getValues", at = @At("HEAD"), cancellable = true)
     public void getValuesHead(CallbackInfoReturnable<ImmutableMap<Property<?>, Comparable<?>>> cir) {
         final FastMap<?> globalTable = ((FastMapStateHolder<?>) this).getStateMap();

+ 0 - 24
common/src/main/resources/META-INF/mods.toml

@@ -1,24 +0,0 @@
-modLoader="javafml"
-loaderVersion="[28,)"
-
-license="MIT"
-[[mods]]
-modId="ferritecore"
-version="${file.jarVersion}"
-displayName="Ferrite Core"
-authors="malte0811"
-description='''
-Reduces memory usage. These changes will probably be PRd to Forge soon.
-'''
-[[dependencies.ferritecore]]
-    modId="forge"
-    mandatory=true
-    versionRange="[35.1.0,)"
-    ordering="NONE"
-    side="BOTH"
-[[dependencies.ferritecore]]
-    modId="minecraft"
-    mandatory=true
-    versionRange="[1.16.4,)"
-    ordering="NONE"
-    side="BOTH"

+ 0 - 6
common/src/main/resources/pack.mcmeta

@@ -1,6 +0,0 @@
-{
-    "pack": {
-        "description": "ferritecore resources",
-        "pack_format": 4
-    }
-}

+ 16 - 0
fabric/src/main/java/malte0811/ferritecore/mixin/fabric/CacheCallbackMixin.java

@@ -0,0 +1,16 @@
+package malte0811.ferritecore.mixin.fabric;
+
+import malte0811.ferritecore.impl.BlockStateCacheImpl;
+import net.minecraft.world.level.block.Blocks;
+import org.spongepowered.asm.mixin.Mixin;
+import org.spongepowered.asm.mixin.injection.At;
+import org.spongepowered.asm.mixin.injection.Inject;
+import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
+
+@Mixin(Blocks.class)
+public class CacheCallbackMixin {
+    @Inject(method = "rebuildCache", at = @At("TAIL"))
+    private static void afterCacheRebuild(CallbackInfo ci) {
+        BlockStateCacheImpl.resetCaches();
+    }
+}

+ 23 - 0
fabric/src/main/java/malte0811/ferritecore/mixin/fabric/MinecraftMixin.java

@@ -0,0 +1,23 @@
+package malte0811.ferritecore.mixin.fabric;
+
+import malte0811.ferritecore.impl.Deduplicator;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.main.GameConfig;
+import org.spongepowered.asm.mixin.Mixin;
+import org.spongepowered.asm.mixin.injection.At;
+import org.spongepowered.asm.mixin.injection.Inject;
+import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
+
+@Mixin(Minecraft.class)
+public class MinecraftMixin {
+    @Inject(
+            method = "<init>",
+            at = @At(
+                    value = "INVOKE",
+                    target = "Lnet/minecraft/client/renderer/entity/ItemRenderer;<init>(Lnet/minecraft/client/renderer/texture/TextureManager;Lnet/minecraft/client/resources/model/ModelManager;Lnet/minecraft/client/color/item/ItemColors;)V"
+            )
+    )
+    private static void injectAfterModels(GameConfig gameConfig, CallbackInfo ci) {
+        Deduplicator.registerReloadListener();
+    }
+}

+ 3 - 5
fabric/src/main/resources/fabric.mod.json

@@ -9,10 +9,7 @@
   ],
   "license": "MIT",
   "environment": "*",
-  "entrypoints": {
-    "main": [
-    ]
-  },
+  "entrypoints": {},
   "depends": {
     "fabricloader": ">=0.7.4",
     "fabric": "*",
@@ -24,6 +21,7 @@
     "ferritecore.fastmap.mixin.json",
     "ferritecore.mrl.mixin.json",
     "ferritecore.nopropertymap.mixin.json",
-    "ferritecore.predicates.mixin.json"
+    "ferritecore.predicates.mixin.json",
+    "ferritecore.fabric.mixin.json"
   ]
 }

+ 16 - 0
fabric/src/main/resources/ferritecore.fabric.mixin.json

@@ -0,0 +1,16 @@
+{
+  "required": true,
+  "package": "malte0811.ferritecore.mixin.fabric",
+  "compatibilityLevel": "JAVA_8",
+  "refmap": "ferritecore-fabric-refmap.json",
+  "client": [
+  ],
+  "injectors": {
+    "defaultRequire": 1
+  },
+  "minVersion": "0.8",
+  "mixins": [
+    "CacheCallbackMixin",
+    "MinecraftMixin"
+  ]
+}

+ 13 - 0
forge/src/main/java/malte0811/ferritecore/ModClientForge.java

@@ -0,0 +1,13 @@
+package malte0811.ferritecore;
+
+import malte0811.ferritecore.impl.Deduplicator;
+import net.minecraftforge.api.distmarker.Dist;
+import net.minecraftforge.client.event.ParticleFactoryRegisterEvent;
+import net.minecraftforge.fml.common.Mod;
+
+@Mod.EventBusSubscriber(value = Dist.CLIENT, modid = ModMain.MODID, bus = Mod.EventBusSubscriber.Bus.MOD)
+public class ModClientForge {
+    public static void registerReloadListener(ParticleFactoryRegisterEvent ev) {
+        Deduplicator.registerReloadListener();
+    }
+}

+ 16 - 1
forge/src/main/java/malte0811/ferritecore/ModMainForge.java

@@ -1,8 +1,23 @@
 package malte0811.ferritecore;
 
+import malte0811.ferritecore.impl.BlockStateCacheImpl;
+import net.minecraftforge.event.TagsUpdatedEvent;
+import net.minecraftforge.eventbus.api.SubscribeEvent;
 import net.minecraftforge.fml.common.Mod;
+import net.minecraftforge.fml.event.lifecycle.FMLModIdMappingEvent;
 
 @Mod(ModMain.MODID)
-@Mod.EventBusSubscriber(bus = Mod.EventBusSubscriber.Bus.MOD)
+@Mod.EventBusSubscriber(bus = Mod.EventBusSubscriber.Bus.FORGE)
 public class ModMainForge {
+    // Caches are populated in two places: a) In ITagCollectionSupplier#updateTags (which triggers this event)
+    @SubscribeEvent
+    public static void onTagReloadVanilla(TagsUpdatedEvent.VanillaTagTypes ignored) {
+        BlockStateCacheImpl.resetCaches();
+    }
+
+    // b) Via ForgeRegistry#bake, which usually triggers this event
+    @SubscribeEvent
+    public static void onModIdMapping(FMLModIdMappingEvent ignored) {
+        BlockStateCacheImpl.resetCaches();
+    }
 }

+ 0 - 2
gradle.properties

@@ -6,8 +6,6 @@ archives_base_name=ferritecore
 mod_version=2.0
 maven_group=malte0811.ferritecore
 
-architectury_version=1.5.101
-
 fabric_loader_version=0.11.1
 fabric_api_version=0.29.3+1.16