-
Notifications
You must be signed in to change notification settings - Fork 34
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #230 from jchung01/blood-magic
Fix Blood Magic memory leak, optimize BM hellfire forge
- Loading branch information
Showing
8 changed files
with
136 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
35 changes: 35 additions & 0 deletions
35
src/main/java/mod/acgaming/universaltweaks/mods/bloodmagic/mixin/UTGenericHandlerMixin.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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); | ||
} | ||
} |
71 changes: 71 additions & 0 deletions
71
src/main/java/mod/acgaming/universaltweaks/mods/bloodmagic/mixin/UTTileSoulForgeMixin.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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"] | ||
} |