diff --git a/build.gradle b/build.gradle index 4a82b06..1940225 100644 --- a/build.gradle +++ b/build.gradle @@ -7,7 +7,7 @@ buildscript { } maven { name = "sonatype" - url = "https://oss.sonatype.org/content/repositories/snapshots/" + url = "https://oss.sonatype.orgP/content/repositories/snapshots/" } } dependencies { @@ -60,7 +60,11 @@ jar { } manifest { - attributes "FMLAT": "anvillib_at.cfg" + attributes([ + "FMLCorePlugin": "net.anvilcraft.anvillib.AnvilCore", + "FMLCorePluginContainsFMLMod": "true", + "FMLAT": "anvillib_at.cfg" + ]) } } @@ -78,7 +82,11 @@ task deobfJar(type: Jar) { classifier = 'deobf' manifest { - attributes "FMLAT": "anvillib_at.cfg" + attributes([ + "FMLCorePlugin": "net.anvilcraft.anvillib.AnvilCore", + "FMLCorePluginContainsFMLMod": "true", + "FMLAT": "anvillib_at.cfg" + ]) } } @@ -114,3 +122,7 @@ publishing { } } } + +mixin { + mixinRefMapName = 'anvillib.refmap.json' +} \ No newline at end of file diff --git a/src/main/java/net/anvilcraft/anvillib/AnvilCore.java b/src/main/java/net/anvilcraft/anvillib/AnvilCore.java new file mode 100644 index 0000000..e20cfd2 --- /dev/null +++ b/src/main/java/net/anvilcraft/anvillib/AnvilCore.java @@ -0,0 +1,58 @@ +package net.anvilcraft.anvillib; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import cpw.mods.fml.common.DummyModContainer; +import cpw.mods.fml.common.ModMetadata; +import cpw.mods.fml.relauncher.IFMLLoadingPlugin; +import io.github.tox1cozz.mixinbooterlegacy.IEarlyMixinLoader; + +public class AnvilCore implements IFMLLoadingPlugin, IEarlyMixinLoader { + + @Override + public List getMixinConfigs() { + List mixins = new ArrayList<>(); + mixins.add("anvillib.mixins.json"); + return mixins; + } + + @Override + public String[] getASMTransformerClass() { + return new String[0]; + } + + @Override + public String getModContainerClass() { + return "net.anvilcraft.anvillib.AnvilCore$Container"; + } + + @Override + public String getSetupClass() { + return null; + } + + @Override + public void injectData(Map data) { + + } + + @Override + public String getAccessTransformerClass() { + return null; + } + + public static class Container extends DummyModContainer { + + public Container() { + super(new ModMetadata()); + ModMetadata meta = getMetadata(); + meta.modId = "anvillib-core"; + meta.name = "AnvilLib Core Mod"; + meta.version = "1.0.0"; + } + + } + +} diff --git a/src/main/java/net/anvilcraft/anvillib/event/TileLoadedEvent.java b/src/main/java/net/anvilcraft/anvillib/event/TileLoadedEvent.java new file mode 100644 index 0000000..fa3cfe0 --- /dev/null +++ b/src/main/java/net/anvilcraft/anvillib/event/TileLoadedEvent.java @@ -0,0 +1,14 @@ +package net.anvilcraft.anvillib.event; + +import cpw.mods.fml.common.eventhandler.Event; +import net.minecraft.tileentity.TileEntity; + +public class TileLoadedEvent extends Event { + + public TileEntity tile; + + public TileLoadedEvent(TileEntity tile) { + this.tile = tile; + } + +} diff --git a/src/main/java/net/anvilcraft/anvillib/event/TileUnloadedEvent.java b/src/main/java/net/anvilcraft/anvillib/event/TileUnloadedEvent.java new file mode 100644 index 0000000..5a80b11 --- /dev/null +++ b/src/main/java/net/anvilcraft/anvillib/event/TileUnloadedEvent.java @@ -0,0 +1,14 @@ +package net.anvilcraft.anvillib.event; + +import cpw.mods.fml.common.eventhandler.Event; +import net.minecraft.tileentity.TileEntity; + +public class TileUnloadedEvent extends Event { + + public TileEntity tile; + + public TileUnloadedEvent(TileEntity tile) { + this.tile = tile; + } + +} diff --git a/src/main/java/net/anvilcraft/anvillib/mixins/MixinTileEntity.java b/src/main/java/net/anvilcraft/anvillib/mixins/MixinTileEntity.java new file mode 100644 index 0000000..50ff978 --- /dev/null +++ b/src/main/java/net/anvilcraft/anvillib/mixins/MixinTileEntity.java @@ -0,0 +1,45 @@ +package net.anvilcraft.anvillib.mixins; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +import net.anvilcraft.anvillib.event.TileLoadedEvent; +import net.anvilcraft.anvillib.event.TileUnloadedEvent; +import net.minecraft.tileentity.TileEntity; +import net.minecraftforge.common.MinecraftForge; + +@Mixin(TileEntity.class) +public class MixinTileEntity { + + public boolean anvillibTileLoaded = false; + + @Inject(method = "updateEntity()V", at = @At("HEAD"), remap = false) + private void onUpdate(CallbackInfo ci) { + TileEntity self = (TileEntity)(Object)this; + if (!this.anvillibTileLoaded && !self.getWorldObj().isRemote) { + this.anvillibTileLoaded = true; + MinecraftForge.EVENT_BUS.post(new TileLoadedEvent(self)); + } + } + + @Inject(method = "invalidate()V", at = @At("HEAD"), remap = false) + private void onInvalidate(CallbackInfo ci) { + TileEntity self = (TileEntity)(Object)this; + if (!self.getWorldObj().isRemote) { + this.anvillibTileLoaded = false; + MinecraftForge.EVENT_BUS.post(new TileUnloadedEvent(self)); + } + } + + @Inject(method = "onChunkUnload()V", at = @At("HEAD"), remap = false) + private void onOnChunkUnload(CallbackInfo ci) { + TileEntity self = (TileEntity)(Object)this; + if (!self.getWorldObj().isRemote) { + this.anvillibTileLoaded = false; + MinecraftForge.EVENT_BUS.post(new TileUnloadedEvent(self)); + } + } + +} diff --git a/src/main/resources/anvillib.mixins.json b/src/main/resources/anvillib.mixins.json new file mode 100644 index 0000000..7c5a57e --- /dev/null +++ b/src/main/resources/anvillib.mixins.json @@ -0,0 +1,13 @@ +{ + "package": "net.anvilcraft.anvillib.mixins", + "refmap": "anvillib.refmap.json", + "minVersion": "0.8", + "compatibilityLevel": "JAVA_8", + "mixins": [ + "MixinTileEntity" + ], + "client": [], + "injectors": { + "defaultRequire": 1 + } +} \ No newline at end of file