2022-03-10 23:09:23 +01:00
|
|
|
package com.falsepattern.endlessids.mixin.plugin;
|
|
|
|
|
|
2022-03-17 16:09:04 +01:00
|
|
|
import com.falsepattern.endlessids.IEConfig;
|
2022-03-10 23:09:23 +01:00
|
|
|
import cpw.mods.fml.relauncher.FMLLaunchHandler;
|
|
|
|
|
|
|
|
|
|
import java.util.HashSet;
|
|
|
|
|
import java.util.List;
|
|
|
|
|
import java.util.Set;
|
2022-03-17 16:09:04 +01:00
|
|
|
import java.util.function.Supplier;
|
2022-03-10 23:09:23 +01:00
|
|
|
|
|
|
|
|
public enum Mixin {
|
2022-03-22 10:25:56 +01:00
|
|
|
//BEGIN Minecraft
|
|
|
|
|
//BEGIN common
|
|
|
|
|
//BEGIN storage
|
|
|
|
|
AnvilChunkLoaderMixin(builder(Side.COMMON).mixin("vanilla.storage.AnvilChunkLoaderMixin")),
|
|
|
|
|
ExtendedBlockStorageMixin(builder(Side.COMMON).mixin("vanilla.storage.ExtendedBlockStorageMixin")),
|
|
|
|
|
ItemStackMixin(builder(Side.COMMON).mixin("vanilla.storage.ItemStackMixin")),
|
|
|
|
|
//END storage
|
|
|
|
|
//BEGIN networking
|
2022-03-22 11:33:22 +01:00
|
|
|
PacketBufferMixin(builder(Side.COMMON).mixin("vanilla.networking.PacketBufferMixin")),
|
2022-03-22 10:25:56 +01:00
|
|
|
PlayerControllerMPMixin(builder(Side.COMMON).mixin("vanilla.networking.PlayerControllerMPMixin")),
|
|
|
|
|
S21PacketChunkDataMixin(builder(Side.COMMON).mixin("vanilla.networking.S21PacketChunkDataMixin")),
|
|
|
|
|
S22PacketMultiBlockChangeMixin(builder(Side.COMMON).mixin("vanilla.networking.S22PacketMultiBlockChangeMixin")),
|
|
|
|
|
S24PacketBlockActionMixin(builder(Side.COMMON).mixin("vanilla.networking.S24PacketBlockActionMixin")),
|
|
|
|
|
S26PacketMapChunkBulkMixin(builder(Side.COMMON).mixin("vanilla.networking.S26PacketMapChunkBulkMixin")),
|
|
|
|
|
//END networking
|
|
|
|
|
//BEGIN misc
|
|
|
|
|
BlockFireMixin(builder(Side.COMMON).mixin("vanilla.misc.BlockFireMixin")),
|
|
|
|
|
DataWatcherMixin(builder(Side.COMMON).condition(() -> IEConfig.extendDataWatcher).mixin("vanilla.misc.DataWatcherMixin")),
|
|
|
|
|
ItemInWorldManagerMixin(builder(Side.COMMON).mixin("vanilla.misc.ItemInWorldManagerMixin")),
|
|
|
|
|
StatListMixin(builder(Side.COMMON).mixin("vanilla.misc.StatListMixin")),
|
|
|
|
|
WorldMixin(builder(Side.COMMON).mixin("vanilla.misc.WorldMixin")),
|
|
|
|
|
//END misc
|
|
|
|
|
//END common
|
|
|
|
|
//BEGIN client
|
|
|
|
|
ChunkMixin(builder(Side.CLIENT).mixin("vanilla.ChunkMixin")),
|
|
|
|
|
NetHandlerPlayClientMixin(builder(Side.CLIENT).mixin("vanilla.NetHandlerPlayClientMixin")),
|
|
|
|
|
RenderGlobalMixin(builder(Side.CLIENT).mixin("vanilla.RenderGlobalMixin")),
|
|
|
|
|
//END client
|
|
|
|
|
//END Minecraft
|
2022-03-22 12:22:07 +01:00
|
|
|
//BEGIN UBC->common
|
|
|
|
|
OreUBifierMixin(builder(Side.COMMON).target(TargetedMod.UBC).mixin("ubc.OreUBifierMixin")),
|
|
|
|
|
BiomeUndergroundDecoratorMixin(builder(Side.COMMON).target(TargetedMod.UBC).mixin("ubc.BiomeUndergroundDecoratorMixin")),
|
|
|
|
|
//END UBC->common
|
|
|
|
|
//BEGIN CoFHLib->common
|
|
|
|
|
CofhBlockHelperMixin(builder(Side.COMMON).target(TargetedMod.COFHLIB).mixin("cofhlib.BlockHelperMixin"))
|
|
|
|
|
//END CoFHLib->common
|
2022-03-10 23:09:23 +01:00
|
|
|
;
|
|
|
|
|
|
|
|
|
|
public final String mixin;
|
|
|
|
|
public final Set<TargetedMod> targetedMods;
|
|
|
|
|
public final Set<TargetedMod> avoidedMods;
|
2022-03-17 16:09:04 +01:00
|
|
|
public final Set<Supplier<Boolean>> allowConditions;
|
2022-03-10 23:09:23 +01:00
|
|
|
private final Side side;
|
|
|
|
|
|
|
|
|
|
Mixin(Builder builder) {
|
|
|
|
|
this.mixin = builder.mixin;
|
|
|
|
|
this.targetedMods = builder.targetedMods;
|
|
|
|
|
this.avoidedMods = builder.avoidedMods;
|
2022-03-17 16:09:04 +01:00
|
|
|
this.allowConditions = builder.allowConditions;
|
2022-03-10 23:09:23 +01:00
|
|
|
this.side = builder.side;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public boolean shouldLoad(List<TargetedMod> loadedMods) {
|
|
|
|
|
return (side == Side.COMMON
|
|
|
|
|
|| side == Side.SERVER && FMLLaunchHandler.side().isServer()
|
|
|
|
|
|| side == Side.CLIENT && FMLLaunchHandler.side().isClient())
|
2022-03-17 16:09:04 +01:00
|
|
|
&& loadedMods.containsAll(targetedMods)
|
|
|
|
|
&& avoidedMods.stream().noneMatch(loadedMods::contains)
|
|
|
|
|
&& allowConditions.stream().allMatch(Supplier::get);
|
2022-03-10 23:09:23 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@SuppressWarnings("SameParameterValue")
|
|
|
|
|
private static Builder builder(Side side) {
|
|
|
|
|
return new Builder(side);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static class Builder {
|
|
|
|
|
public String mixin;
|
|
|
|
|
public Side side;
|
2022-03-17 16:09:04 +01:00
|
|
|
public final Set<TargetedMod> targetedMods = new HashSet<>();
|
2022-03-10 23:09:23 +01:00
|
|
|
public final Set<TargetedMod> avoidedMods = new HashSet<>();
|
2022-03-17 16:09:04 +01:00
|
|
|
public final Set<Supplier<Boolean>> allowConditions = new HashSet<>();
|
2022-03-10 23:09:23 +01:00
|
|
|
|
|
|
|
|
public Builder(Side side) {
|
|
|
|
|
this.side = side;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public Builder mixin(String mixinClass) {
|
|
|
|
|
mixin = side.name().toLowerCase() + "." + mixinClass;
|
|
|
|
|
return this;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public Builder target(TargetedMod mod) {
|
|
|
|
|
targetedMods.add(mod);
|
|
|
|
|
return this;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public Builder avoid(TargetedMod mod) {
|
|
|
|
|
avoidedMods.add(mod);
|
|
|
|
|
return this;
|
|
|
|
|
}
|
2022-03-17 16:09:04 +01:00
|
|
|
|
|
|
|
|
public Builder condition(Supplier<Boolean> cond) {
|
|
|
|
|
allowConditions.add(cond);
|
|
|
|
|
return this;
|
|
|
|
|
}
|
2022-03-10 23:09:23 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private enum Side {
|
|
|
|
|
COMMON,
|
|
|
|
|
CLIENT,
|
|
|
|
|
SERVER
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|