diff --git a/src/main/java/com/goodbird/npcgecko/CommonProxy.java b/src/main/java/com/goodbird/npcgecko/CommonProxy.java index 9b4ae89..899ebcd 100644 --- a/src/main/java/com/goodbird/npcgecko/CommonProxy.java +++ b/src/main/java/com/goodbird/npcgecko/CommonProxy.java @@ -1,5 +1,6 @@ package com.goodbird.npcgecko; +import com.goodbird.npcgecko.api.AbstractGeckoAPI; import com.goodbird.npcgecko.entity.EntityCustomModel; import com.goodbird.npcgecko.handler.EventHandler; import com.goodbird.npcgecko.network.NetworkHandler; @@ -17,5 +18,6 @@ public class CommonProxy { public void init(FMLInitializationEvent ev){ NetworkHandler.init(); + NpcAPI.Instance().addGlobalObject("GeckoAPI", AbstractGeckoAPI.Instance()); } } diff --git a/src/main/java/com/goodbird/npcgecko/api/AbstractGeckoAPI.java b/src/main/java/com/goodbird/npcgecko/api/AbstractGeckoAPI.java new file mode 100644 index 0000000..f580511 --- /dev/null +++ b/src/main/java/com/goodbird/npcgecko/api/AbstractGeckoAPI.java @@ -0,0 +1,37 @@ +package com.goodbird.npcgecko.api; + +import cpw.mods.fml.common.Loader; +import net.minecraft.entity.player.EntityPlayerMP; +import noppes.npcs.api.entity.ICustomNpc; +import noppes.npcs.api.entity.IPlayer; +import noppes.npcs.entity.EntityNPCInterface; +import software.bernie.geckolib3.core.builder.AnimationBuilder; + +public abstract class AbstractGeckoAPI { + private static AbstractGeckoAPI instance = null; + + public static boolean IsAvailable() { + return Loader.isModLoaded("geckolib3"); + } + + public static AbstractGeckoAPI Instance() { + if (instance != null) { + return instance; + } else if (!IsAvailable()) { + return null; + } else { + try { + Class c = Class.forName("com.goodbird.npcgecko.api.GeckoAPI"); + instance = (AbstractGeckoAPI) c.getMethod("Instance").invoke(null); + } catch (Exception ignored) { + + } + return instance; + } + } + + public abstract AnimationBuilder createAnimationBuilder(); + + public abstract void syncAnimForPlayer(ICustomNpc npc, AnimationBuilder builder, IPlayer player); + public abstract void syncAnimForAll(ICustomNpc npc, AnimationBuilder builder); +} diff --git a/src/main/java/com/goodbird/npcgecko/api/GeckoAPI.java b/src/main/java/com/goodbird/npcgecko/api/GeckoAPI.java new file mode 100644 index 0000000..723bbf8 --- /dev/null +++ b/src/main/java/com/goodbird/npcgecko/api/GeckoAPI.java @@ -0,0 +1,40 @@ +package com.goodbird.npcgecko.api; + +import com.goodbird.npcgecko.network.CPacketSyncManualAnim; +import com.goodbird.npcgecko.network.NetworkHandler; +import cpw.mods.fml.common.FMLCommonHandler; +import cpw.mods.fml.relauncher.Side; +import net.minecraft.entity.player.EntityPlayerMP; +import noppes.npcs.api.entity.ICustomNpc; +import noppes.npcs.api.entity.IPlayer; +import noppes.npcs.entity.EntityNPCInterface; +import software.bernie.geckolib3.core.builder.AnimationBuilder; + +public class GeckoAPI extends AbstractGeckoAPI { + public static Side side = FMLCommonHandler.instance().getEffectiveSide(); + private static AbstractGeckoAPI Instance; + + private GeckoAPI() {} + + public static AbstractGeckoAPI Instance() { + if (GeckoAPI.Instance == null) { + Instance = new GeckoAPI(); + } + return Instance; + } + + @Override + public AnimationBuilder createAnimationBuilder() { + return new AnimationBuilder(); + } + + @Override + public void syncAnimForPlayer(ICustomNpc npc, AnimationBuilder builder, IPlayer player) { + NetworkHandler.sendToPlayer(new CPacketSyncManualAnim(npc.getMCEntity(),builder), player.getMCEntity()); + } + + @Override + public void syncAnimForAll(ICustomNpc npc, AnimationBuilder builder) { + NetworkHandler.sendToAll(new CPacketSyncManualAnim(npc.getMCEntity(),builder)); + } +}