Skip to content

Commit

Permalink
enable compatibility with other milking mods
Browse files Browse the repository at this point in the history
- first mod: Milk All The Mobs (issue #10)
  • Loading branch information
cech12 committed Apr 22, 2020
1 parent 8bd3589 commit e78fbd5
Show file tree
Hide file tree
Showing 3 changed files with 78 additions and 5 deletions.
15 changes: 10 additions & 5 deletions src/main/java/cech12/ceramicbucket/CeramicBucketMod.java
Original file line number Diff line number Diff line change
@@ -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;
Expand Down Expand Up @@ -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);
Expand All @@ -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()) {
Expand Down
26 changes: 26 additions & 0 deletions src/main/java/cech12/ceramicbucket/compat/MilkAllTheMobs.java
Original file line number Diff line number Diff line change
@@ -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;
}
}
42 changes: 42 additions & 0 deletions src/main/java/cech12/ceramicbucket/compat/ModCompat.java
Original file line number Diff line number Diff line change
@@ -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);

}

}

0 comments on commit e78fbd5

Please sign in to comment.