diff --git a/src/main/java/jp/MinecraftModderJapan/ModCooperationAPI/ModCooperationAPI.java b/src/main/java/jp/MinecraftModderJapan/ModCooperationAPI/ModCooperationAPI.java index a1ec9d4..cf9e50f 100644 --- a/src/main/java/jp/MinecraftModderJapan/ModCooperationAPI/ModCooperationAPI.java +++ b/src/main/java/jp/MinecraftModderJapan/ModCooperationAPI/ModCooperationAPI.java @@ -1,8 +1,52 @@ package jp.MinecraftModderJapan.ModCooperationAPI; +import jp.MinecraftModderJapan.ModCooperationAPI.api.entity.IBreedable; +import jp.MinecraftModderJapan.ModCooperationAPI.api.entity.IRidden; +import jp.MinecraftModderJapan.ModCooperationAPI.api.item.IBook; +import jp.MinecraftModderJapan.ModCooperationAPI.api.item.IFood; +import net.minecraft.nbt.NBTBase; +import net.minecraft.util.EnumFacing; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.common.capabilities.CapabilityManager; import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.fml.common.Mod.EventHandler; +import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; +import org.apache.commons.lang3.NotImplementedException; + +import java.util.concurrent.Callable; @Mod(modid = ModCooperationAPI.MOD_ID) public class ModCooperationAPI{ public static final String MOD_ID = "jp.MinecraftModderJapan.ModCooperationAPI"; + + @EventHandler + private void preInit(FMLPreInitializationEvent event){ + registerCaps(); + } + + private void registerCaps(){ + registerCap(IBook.class); + registerCap(IFood.class); + registerCap(IBreedable.class); + registerCap(IRidden.class); + } + + private void registerCap(Class clazz){ + CapabilityManager.INSTANCE.register(clazz, new Capability.IStorage(){ + @Override + public NBTBase writeNBT(Capability capability, T instance, EnumFacing side){ + throw new NotImplementedException("No default implementation"); + } + + @Override + public void readNBT(Capability capability, T instance, EnumFacing side, NBTBase nbt){ + throw new NotImplementedException("No default implementation"); + } + }, new Callable(){ + @Override + public T call() throws Exception{ + throw new NotImplementedException("No default implementation"); + } + }); + } } \ No newline at end of file diff --git a/src/main/java/jp/MinecraftModderJapan/ModCooperationAPI/api/entity/IBreedable.java b/src/main/java/jp/MinecraftModderJapan/ModCooperationAPI/api/entity/IBreedable.java index 533407d..12962ff 100644 --- a/src/main/java/jp/MinecraftModderJapan/ModCooperationAPI/api/entity/IBreedable.java +++ b/src/main/java/jp/MinecraftModderJapan/ModCooperationAPI/api/entity/IBreedable.java @@ -1,6 +1,8 @@ package jp.MinecraftModderJapan.ModCooperationAPI.api.entity; import net.minecraft.item.ItemStack; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.common.capabilities.CapabilityInject; import javax.annotation.Nonnull; @@ -14,6 +16,9 @@ * @since 1.0 */ public interface IBreedable{ + @CapabilityInject(IBreedable.class) + Capability CAPABILITY = null; + /** * @param stack * the Item diff --git a/src/main/java/jp/MinecraftModderJapan/ModCooperationAPI/api/entity/IRidden.java b/src/main/java/jp/MinecraftModderJapan/ModCooperationAPI/api/entity/IRidden.java index 5b90671..39ccd44 100644 --- a/src/main/java/jp/MinecraftModderJapan/ModCooperationAPI/api/entity/IRidden.java +++ b/src/main/java/jp/MinecraftModderJapan/ModCooperationAPI/api/entity/IRidden.java @@ -1,6 +1,8 @@ package jp.MinecraftModderJapan.ModCooperationAPI.api.entity; import net.minecraft.entity.Entity; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.common.capabilities.CapabilityInject; import javax.annotation.Nonnull; @@ -14,6 +16,9 @@ * @since 1.0 */ public interface IRidden{ + @CapabilityInject(IRidden.class) + Capability CAPABILITY = null; + /** * 乗る。 *
diff --git a/src/main/java/jp/MinecraftModderJapan/ModCooperationAPI/api/item/IBook.java b/src/main/java/jp/MinecraftModderJapan/ModCooperationAPI/api/item/IBook.java index 97f271b..b64a569 100644 --- a/src/main/java/jp/MinecraftModderJapan/ModCooperationAPI/api/item/IBook.java +++ b/src/main/java/jp/MinecraftModderJapan/ModCooperationAPI/api/item/IBook.java @@ -2,6 +2,8 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.common.capabilities.CapabilityInject; import javax.annotation.Nonnull; @@ -15,6 +17,8 @@ * @since 1.0 */ public interface IBook{ + @CapabilityInject(IBook.class) + Capability CAPABILITY = null; /** * GUIを持っているか。 diff --git a/src/main/java/jp/MinecraftModderJapan/ModCooperationAPI/api/item/IFood.java b/src/main/java/jp/MinecraftModderJapan/ModCooperationAPI/api/item/IFood.java index 117cb36..3f0aee9 100644 --- a/src/main/java/jp/MinecraftModderJapan/ModCooperationAPI/api/item/IFood.java +++ b/src/main/java/jp/MinecraftModderJapan/ModCooperationAPI/api/item/IFood.java @@ -2,6 +2,8 @@ import net.minecraft.entity.EntityLivingBase; import net.minecraft.item.ItemStack; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.common.capabilities.CapabilityInject; import javax.annotation.Nonnull; @@ -15,6 +17,9 @@ * @since 1.0 */ public interface IFood{ + @CapabilityInject(IFood.class) + Capability CAPABILITY = null; + /** * この食べ物を食べることによって、どのくらい満腹度が回復するか取得します。 *