Skip to content

Commit fa74c46

Browse files
authored
Avoid Hodgepodge conflict (#142)
1 parent abd855e commit fa74c46

File tree

5 files changed

+45
-21
lines changed

5 files changed

+45
-21
lines changed

src/main/java/org/embeddedt/archaicfix/ArchaicCore.java

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ public String getMixinConfig() {
6767
.put("optifine.OptiFineForgeTweaker", TargetedMod.OPTIFINE)
6868
.put("fastcraft.Tweaker", TargetedMod.FASTCRAFT)
6969
.put("cofh.asm.LoadingPlugin", TargetedMod.COFHCORE)
70+
.put("com.mitchej123.hodgepodge.core.HodgepodgeCore", TargetedMod.HODGEPODGE)
7071
.build();
7172

7273
private static void detectCoreMods(Set<String> loadedCoreMods) {
@@ -80,12 +81,18 @@ private static void detectCoreMods(Set<String> loadedCoreMods) {
8081
public List<String> getMixins(Set<String> loadedCoreMods) {
8182
List<String> mixins = new ArrayList<>();
8283
detectCoreMods(loadedCoreMods);
83-
LOGGER.info("Detected coremods: [" + coreMods.stream().map(TargetedMod::name).collect(Collectors.joining(", ")) + "]");
84-
for(Mixin mixin : Mixin.values()) {
85-
if(mixin.getPhase() == Mixin.Phase.EARLY && mixin.shouldLoadSide() && mixin.getFilter().test(coreMods)) {
84+
LOGGER.info("Detected coremods: [{}]", coreMods.stream().map(TargetedMod::name).collect(Collectors.joining(", ")));
85+
final List<String> notLoading = new ArrayList<>();
86+
87+
for (Mixin mixin : Mixin.values()) {
88+
if (mixin.getPhase() == Mixin.Phase.EARLY && mixin.shouldLoadSide() && mixin.getFilter().test(coreMods)) {
8689
mixins.add(mixin.getMixin());
90+
} else {
91+
notLoading.add(mixin.getMixin());
8792
}
8893
}
94+
95+
LOGGER.info("Not loading the following early mixins: [{}]", String.join(", ", notLoading));
8996
return mixins;
9097
}
9198
}

src/main/java/org/embeddedt/archaicfix/asm/Mixin.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ public enum Mixin {
3838
common_core_MixinEntityLiving(Side.COMMON, Phase.EARLY, always(), "core.MixinEntityLiving"),
3939
common_core_MixinEntityLivingBase_EarlyXpDrop(Side.COMMON, Phase.EARLY, m -> ArchaicConfig.dropXpImmediatelyOnDeath, "core.MixinEntityLivingBase_EarlyXpDrop"),
4040
common_core_MixinWorld(Side.COMMON, Phase.EARLY, always(), "core.MixinWorld"),
41+
common_core_MixinWorld_UpdateEntities(Side.COMMON, Phase.EARLY, avoid(TargetedMod.HODGEPODGE), "core.MixinWorld_UpdateEntities"),
4142
common_core_MixinEntityTrackerEntry(Side.COMMON, Phase.EARLY, always(), "core.MixinEntityTrackerEntry"),
4243
common_core_MixinEntityXPOrb(Side.COMMON, Phase.EARLY, always(), "core.MixinEntityXPOrb"),
4344
common_core_MixinEntityItem(Side.COMMON, Phase.EARLY, avoid(TargetedMod.SHIPSMOD).and(m -> ArchaicConfig.itemLagReduction), "core.MixinEntityItem"),

src/main/java/org/embeddedt/archaicfix/asm/TargetedMod.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,8 @@ public enum TargetedMod {
2929
DIVERSITY("Diversity", "diversity"),
3030
WAYSTONES("Waystones", "waystones"),
3131
AE2("AppliedEnergistics2", "appliedenergistics2"),
32-
AOA("AdventOfAscension", "nevermine")
32+
AOA("AdventOfAscension", "nevermine"),
33+
HODGEPODGE("Hodgepodge", "hodgepodge")
3334
;
3435

3536
@Getter

src/main/java/org/embeddedt/archaicfix/mixins/common/core/MixinWorld.java

Lines changed: 2 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,13 @@
22

33
import com.google.common.collect.ImmutableSet;
44
import cpw.mods.fml.common.FMLCommonHandler;
5+
import java.util.List;
6+
import java.util.Set;
57
import net.minecraft.entity.Entity;
68
import net.minecraft.entity.EntityList;
79
import net.minecraft.entity.EntityLiving;
810
import net.minecraft.entity.EntityLivingBase;
911
import net.minecraft.entity.player.EntityPlayer;
10-
import net.minecraft.tileentity.TileEntity;
1112
import net.minecraft.util.MathHelper;
1213
import net.minecraft.world.EnumDifficulty;
1314
import net.minecraft.world.World;
@@ -23,13 +24,10 @@
2324
import org.spongepowered.asm.mixin.injection.At;
2425
import org.spongepowered.asm.mixin.injection.Inject;
2526
import org.spongepowered.asm.mixin.injection.Redirect;
26-
import org.spongepowered.asm.mixin.injection.Slice;
2727
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
2828
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
2929
import org.spongepowered.asm.mixin.injection.callback.LocalCapture;
3030

31-
import java.util.*;
32-
3331
@Mixin(World.class)
3432
public abstract class MixinWorld {
3533
@Shadow public boolean isRemote;
@@ -142,17 +140,4 @@ private void saveInactiveChunks(CallbackInfo ci) {
142140
}
143141
}
144142
}
145-
146-
@Redirect(method = "updateEntities", slice = @Slice(from = @At(value = "INVOKE", target = "Lnet/minecraft/tileentity/TileEntity;onChunkUnload()V", remap = false)), at = @At(value = "INVOKE", target = "Ljava/util/List;removeAll(Ljava/util/Collection;)Z", ordinal = 0))
147-
private boolean removeInUnloaded(List<TileEntity> instance, Collection<TileEntity> objects) {
148-
if (ArchaicConfig.fixTEUnloadLag) {
149-
// Arbitrary number chosen because contains() will be fast enough on a tiny list
150-
if(objects.size() > 3) {
151-
Set<TileEntity> toRemove = Collections.newSetFromMap(new IdentityHashMap<>(objects.size()));
152-
toRemove.addAll(objects);
153-
objects = toRemove;
154-
}
155-
}
156-
return instance.removeAll(objects);
157-
}
158143
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package org.embeddedt.archaicfix.mixins.common.core;
2+
3+
import java.util.Collection;
4+
import java.util.Collections;
5+
import java.util.IdentityHashMap;
6+
import java.util.List;
7+
import java.util.Set;
8+
import net.minecraft.tileentity.TileEntity;
9+
import net.minecraft.world.World;
10+
import org.embeddedt.archaicfix.config.ArchaicConfig;
11+
import org.spongepowered.asm.mixin.Mixin;
12+
import org.spongepowered.asm.mixin.injection.At;
13+
import org.spongepowered.asm.mixin.injection.Redirect;
14+
import org.spongepowered.asm.mixin.injection.Slice;
15+
16+
@Mixin(World.class)
17+
public abstract class MixinWorld_UpdateEntities {
18+
@Redirect(method = "updateEntities", slice = @Slice(from = @At(value = "INVOKE", target = "Lnet/minecraft/tileentity/TileEntity;onChunkUnload()V", remap = false)), at = @At(value = "INVOKE", target = "Ljava/util/List;removeAll(Ljava/util/Collection;)Z", ordinal = 0))
19+
private boolean removeInUnloaded(List<TileEntity> instance, Collection<TileEntity> objects) {
20+
if (ArchaicConfig.fixTEUnloadLag) {
21+
// Arbitrary number chosen because contains() will be fast enough on a tiny list
22+
if(objects.size() > 3) {
23+
Set<TileEntity> toRemove = Collections.newSetFromMap(new IdentityHashMap<>(objects.size()));
24+
toRemove.addAll(objects);
25+
objects = toRemove;
26+
}
27+
}
28+
return instance.removeAll(objects);
29+
}
30+
}

0 commit comments

Comments
 (0)