Skip to content

Commit

Permalink
Merge pull request #230 from jchung01/blood-magic
Browse files Browse the repository at this point in the history
Fix Blood Magic memory leak, optimize BM hellfire forge
  • Loading branch information
ACGaming authored Jul 12, 2023
2 parents 46f35fe + 5fc5cbc commit 9d456f9
Show file tree
Hide file tree
Showing 8 changed files with 136 additions and 1 deletion.
1 change: 1 addition & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,7 @@ dependencies {
deobfCompile "curse.maven:baubles-227083:2518667"
deobfCompile "curse.maven:binnies-mods-223525:2916129"
deobfCompile "curse.maven:biomes-o-plenty-220318:2842510"
deobfCompile "curse.maven:blood-magic-224791:2822288"
deobfCompile "curse.maven:botania-225643:3330934"
deobfCompile "curse.maven:chameleon-230497:2450900"
deobfCompile "curse.maven:chickens-241941:2537643"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ public class UniversalTweaks
public static final String MODID = "universaltweaks";
public static final String NAME = "Universal Tweaks";
public static final String VERSION = "1.12.2-1.7.0";
public static final String DEPENDENCIES = "required-after:mixinbooter@[8.0,);required-after:configanytime;after:abyssalcraft;after:aoa3;after:biomesoplenty;after:botania;after:cofhcore;after:contenttweaker;after:element;after:elenaidodge2;after:epicsiegemod;after:extratrees;after:forestry;after:infernalmobs;after:netherrocks;after:nuclearcraft;after:roost;after:storagedrawers;after:tconstruct;after:thaumcraft;after:thermalexpansion";
public static final String DEPENDENCIES = "required-after:mixinbooter@[8.0,);required-after:configanytime;after:abyssalcraft;after:aoa3;after:biomesoplenty;after:bloodmagic;after:botania;after:cofhcore;after:contenttweaker;after:element;after:elenaidodge2;after:epicsiegemod;after:extratrees;after:forestry;after:infernalmobs;after:netherrocks;after:nuclearcraft;after:roost;after:storagedrawers;after:tconstruct;after:thaumcraft;after:thermalexpansion";
public static final Logger LOGGER = LogManager.getLogger(NAME);

@Mod.EventHandler
Expand Down
17 changes: 17 additions & 0 deletions src/main/java/mod/acgaming/universaltweaks/config/UTConfig.java
Original file line number Diff line number Diff line change
Expand Up @@ -1760,6 +1760,10 @@ public static class ModIntegrationCategory
@Config.Name("Biomes O' Plenty")
public final BiomesOPlentyCategory BIOMES_O_PLENTY = new BiomesOPlentyCategory();

@Config.LangKey("cfg.universaltweaks.modintegration.bm")
@Config.Name("Blood Magic")
public final BloodMagicCategory BLOOD_MAGIC = new BloodMagicCategory();

@Config.LangKey("cfg.universaltweaks.modintegration.botania")
@Config.Name("Botania")
public final BotaniaCategory BOTANIA = new BotaniaCategory();
Expand Down Expand Up @@ -1860,6 +1864,19 @@ public static class BiomesOPlentyCategory
public boolean utBoPHotSpringWaterToggle = true;
}

public static class BloodMagicCategory
{
@Config.RequiresMcRestart
@Config.Name("Optimized Hellfire Forge")
@Config.Comment("Optimizes the Hellfire/Soul Forge to reduce tick time")
public boolean utBMOptimizeSoulForgeToggle = true;

@Config.RequiresMcRestart
@Config.Name("World Unload Memory Leak Fix")
@Config.Comment("Fixes memory leak related to unloading worlds/switching dimensions")
public boolean utBMWorldUnloadToggle = true;
}

public static class BotaniaCategory
{
@Config.RequiresMcRestart
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ public List<String> getMixinConfigs()
"mixins.mods.abyssalcraft.json",
"mixins.mods.aoa3.json",
"mixins.mods.biomesoplenty.json",
"mixins.mods.bloodmagic.json",
"mixins.mods.botania.json",
"mixins.mods.cofhcore.json",
"mixins.mods.crafttweaker.json",
Expand Down Expand Up @@ -75,6 +76,8 @@ public boolean shouldMixinConfigQueue(String mixinConfig)
return Loader.isModLoaded("abyssalcraft");
case "mixins.mods.biomesoplenty.json":
return Loader.isModLoaded("biomesoplenty");
case "mixins.mods.bloodmagic.json":
return Loader.isModLoaded("bloodmagic");
case "mixins.mods.botania.json":
return Loader.isModLoaded("botania");
case "mixins.mods.cofhcore.json":
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package mod.acgaming.universaltweaks.mods.bloodmagic.mixin;

import java.util.Map;

import net.minecraft.world.World;
import net.minecraftforge.event.world.WorldEvent;

import WayofTime.bloodmagic.ritual.AreaDescriptor;
import WayofTime.bloodmagic.ritual.IMasterRitualStone;
import WayofTime.bloodmagic.util.handler.event.GenericHandler;
import mod.acgaming.universaltweaks.config.UTConfig;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import org.spongepowered.asm.mixin.injection.callback.LocalCapture;

// Courtesy of michaelPoul
@Mixin(value = GenericHandler.class, remap = false)
public class UTGenericHandlerMixin
{
@Shadow
public static Map<World, Map<IMasterRitualStone, AreaDescriptor>> forceSpawnMap;
@Shadow
public static Map<World, Map<IMasterRitualStone, AreaDescriptor>> preventSpawnMap;

@Inject(method = "onWorldUnload", at = @At(value = "TAIL"), locals = LocalCapture.CAPTURE_FAILHARD)
private static void utRemoveRemainingWorld(WorldEvent.Unload event, CallbackInfo ci, World world)
{
if (!UTConfig.MOD_INTEGRATION.BLOOD_MAGIC.utBMWorldUnloadToggle) return;
forceSpawnMap.remove(world);
preventSpawnMap.remove(world);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
package mod.acgaming.universaltweaks.mods.bloodmagic.mixin;

import java.util.ArrayList;
import java.util.List;

import net.minecraft.item.ItemStack;
import net.minecraft.util.ITickable;

import WayofTime.bloodmagic.api.impl.BloodMagicAPI;
import WayofTime.bloodmagic.api.impl.BloodMagicRecipeRegistrar;
import WayofTime.bloodmagic.api.impl.recipe.RecipeTartaricForge;
import WayofTime.bloodmagic.soul.IDemonWillConduit;
import WayofTime.bloodmagic.tile.TileInventory;
import WayofTime.bloodmagic.tile.TileSoulForge;
import mod.acgaming.universaltweaks.config.UTConfig;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Redirect;

// Courtesy of jchung01
@Mixin(value = TileSoulForge.class, remap = false)
public abstract class UTTileSoulForgeMixin extends TileInventory implements ITickable, IDemonWillConduit
{
private boolean isAdded = false;
private RecipeTartaricForge utLastRecipe = null;

// Dummy constructor
public UTTileSoulForgeMixin(int size, String name)
{
super(size, name);
}

@Override
public void markDirty()
{
super.markDirty();
if (!UTConfig.MOD_INTEGRATION.BLOOD_MAGIC.utBMOptimizeSoulForgeToggle) return;
utRefreshRecipe();
}

/**
* Use cached recipe in update().
* Uses Redirect because getTartaricForge() must not be called unless necessary.
* <p>
* Remapping needed!
*/
@Redirect(method = "update", at = @At(value = "INVOKE", target = "LWayofTime/bloodmagic/api/impl/BloodMagicRecipeRegistrar;getTartaricForge(Ljava/util/List;)LWayofTime/bloodmagic/api/impl/recipe/RecipeTartaricForge;"), remap = true)
private RecipeTartaricForge utUseCachedRecipe(BloodMagicRecipeRegistrar registrar, List<ItemStack> input)
{
if (!UTConfig.MOD_INTEGRATION.BLOOD_MAGIC.utBMOptimizeSoulForgeToggle) return registrar.getTartaricForge(input);
if (!isAdded)
{
utLastRecipe = registrar.getTartaricForge(input);
isAdded = true;
}
return utLastRecipe;
}

public void utRefreshRecipe()
{
List<ItemStack> inputList = new ArrayList<>();
for (int i = 0; i < 4; i++)
{
if (!getStackInSlot(i).isEmpty())
{
inputList.add(getStackInSlot(i));
}
}
utLastRecipe = BloodMagicAPI.INSTANCE.getRecipeRegistrar().getTartaricForge(inputList);
}
}
1 change: 1 addition & 0 deletions src/main/resources/assets/universaltweaks/lang/en_us.lang
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ cfg.universaltweaks.debug=Debug
cfg.universaltweaks.modintegration=Mod Integration
cfg.universaltweaks.modintegration.abyssalcraft=AbyssalCraft
cfg.universaltweaks.modintegration.aoa=Advent of Ascension
cfg.universaltweaks.modintegration.bm=Blood Magic
cfg.universaltweaks.modintegration.bop=Biomes O' Plenty
cfg.universaltweaks.modintegration.botania=Botania
cfg.universaltweaks.modintegration.cofhcore=CoFH Core
Expand Down
7 changes: 7 additions & 0 deletions src/main/resources/mixins.mods.bloodmagic.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"package": "mod.acgaming.universaltweaks.mods.bloodmagic.mixin",
"refmap": "universaltweaks.refmap.json",
"minVersion": "0.8",
"compatibilityLevel": "JAVA_8",
"mixins": ["UTGenericHandlerMixin", "UTTileSoulForgeMixin"]
}

0 comments on commit 9d456f9

Please sign in to comment.