diff --git a/src/main/java/cech12/ceramicbucket/CeramicBucketMod.java b/src/main/java/cech12/ceramicbucket/CeramicBucketMod.java index dedcf8c..a6ab6e2 100644 --- a/src/main/java/cech12/ceramicbucket/CeramicBucketMod.java +++ b/src/main/java/cech12/ceramicbucket/CeramicBucketMod.java @@ -1,11 +1,13 @@ package cech12.ceramicbucket; import cech12.ceramicbucket.api.item.CeramicBucketItems; +import cech12.ceramicbucket.compat.ModCompat; import cech12.ceramicbucket.config.Config; import cech12.ceramicbucket.item.CeramicFishBucketItem; import cech12.ceramicbucket.item.CeramicMilkBucketItem; import cech12.ceramicbucket.item.FilledCeramicBucketItem; import net.minecraft.advancements.CriteriaTriggers; +import net.minecraft.entity.LivingEntity; import net.minecraft.entity.passive.CowEntity; import net.minecraft.entity.passive.fish.*; import net.minecraft.entity.player.PlayerEntity; @@ -39,12 +41,15 @@ public CeramicBucketMod() { */ @SubscribeEvent public static void onEntityInteract(PlayerInteractEvent.EntityInteract event) { + if (!(event.getTarget() instanceof LivingEntity)) { + return; + } + LivingEntity entity = (LivingEntity) event.getTarget(); //only interact with cows and fishes - if (event.getTarget() instanceof CowEntity) { - CowEntity cowEntity = (CowEntity) event.getTarget(); + if (entity instanceof CowEntity || ModCompat.canEntityBeMilked(entity)) { PlayerEntity player = event.getPlayer(); ItemStack itemstack = player.getHeldItem(event.getHand()); - if (itemstack.getItem() == CeramicBucketItems.CERAMIC_BUCKET && !player.abilities.isCreativeMode && !cowEntity.isChild()) { + if (itemstack.getItem() == CeramicBucketItems.CERAMIC_BUCKET && !player.abilities.isCreativeMode && !entity.isChild()) { player.playSound(SoundEvents.ENTITY_COW_MILK, 1.0F, 1.0F); if (!event.getWorld().isRemote()) { itemstack.shrink(1); @@ -57,8 +62,8 @@ public static void onEntityInteract(PlayerInteractEvent.EntityInteract event) { event.setCanceled(true); event.setCancellationResult(ActionResultType.SUCCESS); } - } else if (event.getTarget() instanceof AbstractFishEntity) { - AbstractFishEntity fishEntity = (AbstractFishEntity) event.getTarget(); + } else if (entity instanceof AbstractFishEntity) { + AbstractFishEntity fishEntity = (AbstractFishEntity) entity; PlayerEntity player = event.getPlayer(); ItemStack itemstack = player.getHeldItem(event.getHand()); if (itemstack.getItem() == CeramicBucketItems.FILLED_CERAMIC_BUCKET && ((FilledCeramicBucketItem) itemstack.getItem()).getFluid(itemstack) == Fluids.WATER && fishEntity.isAlive()) { diff --git a/src/main/java/cech12/ceramicbucket/compat/MilkAllTheMobs.java b/src/main/java/cech12/ceramicbucket/compat/MilkAllTheMobs.java new file mode 100644 index 0000000..721153a --- /dev/null +++ b/src/main/java/cech12/ceramicbucket/compat/MilkAllTheMobs.java @@ -0,0 +1,26 @@ +package cech12.ceramicbucket.compat; + +import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.passive.PigEntity; +import net.minecraft.entity.passive.SheepEntity; +import net.minecraft.entity.passive.horse.DonkeyEntity; +import net.minecraft.entity.passive.horse.HorseEntity; +import net.minecraft.entity.passive.horse.LlamaEntity; +import net.minecraft.entity.passive.horse.MuleEntity; + +public class MilkAllTheMobs extends ModCompat.Mod implements ModCompat.MobMilkingMod { + + public MilkAllTheMobs() { + super("milkatmobs"); + } + + @Override + public boolean canEntityBeMilked(LivingEntity entity) { + return entity instanceof SheepEntity + || entity instanceof LlamaEntity + || entity instanceof PigEntity + || entity instanceof DonkeyEntity + || entity instanceof HorseEntity + || entity instanceof MuleEntity; + } +} diff --git a/src/main/java/cech12/ceramicbucket/compat/ModCompat.java b/src/main/java/cech12/ceramicbucket/compat/ModCompat.java new file mode 100644 index 0000000..df7d77b --- /dev/null +++ b/src/main/java/cech12/ceramicbucket/compat/ModCompat.java @@ -0,0 +1,42 @@ +package cech12.ceramicbucket.compat; + + +import net.minecraft.entity.LivingEntity; +import net.minecraftforge.fml.ModList; + +public class ModCompat { + + public static final Mod[] MODS = { + new MilkAllTheMobs() + }; + + public static boolean canEntityBeMilked(LivingEntity entity) { + for (Mod mod : MODS) { + if (mod.isLoaded() && mod instanceof MobMilkingMod && ((MobMilkingMod)mod).canEntityBeMilked(entity)) { + return true; + } + } + return false; + } + + public static class Mod { + + protected String name; + + public Mod(String name) { + this.name = name; + } + + public boolean isLoaded() { + return ModList.get().isLoaded(this.name); + } + + } + + public interface MobMilkingMod { + + boolean canEntityBeMilked(LivingEntity entity); + + } + +}