Files
EndlessIDs/src/main/java/com/falsepattern/endlessids/mixin/plugin/Mixin.java
T

96 lines
3.5 KiB
Java
Raw Normal View History

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-17 15:21:30 +01:00
AnvilChunkLoaderMixin(builder(Side.COMMON).mixin("AnvilChunkLoaderMixin")),
ChunkMixin(builder(Side.COMMON).mixin("ChunkMixin")),
2022-03-17 16:09:04 +01:00
DataWatcherMixin(builder(Side.COMMON).condition(() -> IEConfig.extendDataWatcher).mixin("DataWatcherMixin")),
2022-03-17 15:47:16 +01:00
StatListMixin(builder(Side.COMMON).mixin("StatListMixin")),
2022-03-17 15:43:40 +01:00
BlockFireMixin(builder(Side.COMMON).mixin("BlockFireMixin")),
2022-03-17 15:21:30 +01:00
WorldMixin(builder(Side.COMMON).mixin("WorldMixin")),
ExtendedBlockStorageMixin(builder(Side.COMMON).mixin("ExtendedBlockStorageMixin")),
S21PacketChunkDataMixin(builder(Side.COMMON).mixin("S21PacketChunkDataMixin")),
2022-03-17 16:38:16 +01:00
S22PacketMultiBlockChangeMixin(builder(Side.COMMON).mixin("S22PacketMultiBlockChangeMixin")),
2022-03-17 16:48:24 +01:00
S24PacketBlockActionMixin(builder(Side.COMMON).mixin("S24PacketBlockActionMixin")),
2022-03-17 16:52:22 +01:00
S26PacketMapChunkBulkMixin(builder(Side.COMMON).mixin("S26PacketMapChunkBulkMixin")),
2022-03-17 16:55:22 +01:00
PlayerControllerMPMixin(builder(Side.COMMON).mixin("PlayerControllerMPMixin")),
2022-03-17 16:57:42 +01:00
ItemInWorldManagerMixin(builder(Side.COMMON).mixin("ItemInWorldManagerMixin")),
2022-03-17 16:14:34 +01:00
NetHandlerPlayClientMixin(builder(Side.CLIENT).mixin("NetHandlerPlayClientMixin")),
2022-03-17 16:20:08 +01:00
RenderGlobalMixin(builder(Side.CLIENT).mixin("RenderGlobalMixin")),
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
}
}