package net.minecraftforge.cauldron.apiimpl; import com.google.common.base.Predicate; import net.minecraftforge.cauldron.api.Fishing; import net.minecraftforge.cauldron.api.WeightedRandomFishable; import net.minecraftforge.common.FishingHooks; import org.bukkit.craftbukkit.inventory.CraftItemStack; import org.bukkit.inventory.ItemStack; import org.ultramine.mods.bukkit.interfaces.IMixinWeightedRandomFishable; import java.util.Random; public class FishingInterface implements Fishing { private static net.minecraft.util.WeightedRandomFishable toNms(WeightedRandomFishable bukkit) { net.minecraft.util.WeightedRandomFishable ret = new net.minecraft.util.WeightedRandomFishable( CraftItemStack.asNMSCopy(bukkit.getItemStack()), bukkit.getWeight()).func_150709_a(bukkit.getDamageFraction()); if(bukkit.hasRandomEnchantments()) { ret.func_150707_a(); } return ret; } private static WeightedRandomFishable toBukkit(net.minecraft.util.WeightedRandomFishable nms) { return new WeightedRandomFishable(CraftItemStack.asBukkitCopy(((IMixinWeightedRandomFishable) nms).getField_150711_b()), nms.itemWeight) .withDamageFraction(((IMixinWeightedRandomFishable) nms).getField_150712_c()) .withRandomEnchantments(((IMixinWeightedRandomFishable) nms).getField_150710_d()); } private static class PredicateProxy implements Predicate<net.minecraft.util.WeightedRandomFishable> { private Predicate<WeightedRandomFishable> bukkitPredicate; public PredicateProxy(Predicate<WeightedRandomFishable> predicate) { this.bukkitPredicate = predicate; } @Override public boolean apply(net.minecraft.util.WeightedRandomFishable input) { return bukkitPredicate.apply(toBukkit(input)); } } private static PredicateProxy toNms(Predicate<WeightedRandomFishable> predicate) { return new PredicateProxy(predicate); } @Override public void addFish(WeightedRandomFishable fish) { FishingHooks.addFish(toNms(fish)); } @Override public void addJunk(WeightedRandomFishable fish) { FishingHooks.addJunk(toNms(fish)); } @Override public void addTreasure(WeightedRandomFishable fish) { FishingHooks.addTreasure(toNms(fish)); } @Override public void removeMatchingFish(Predicate<WeightedRandomFishable> test) { FishingHooks.removeFish(toNms(test)); } @Override public void removeMatchingJunk(Predicate<WeightedRandomFishable> test) { FishingHooks.removeJunk(toNms(test)); } @Override public void removeMatchingTreasure(Predicate<WeightedRandomFishable> test) { FishingHooks.removeTreasure(toNms(test)); } @Override public ItemStack getRandomFishable(Random rand, float baseChance, int fishingLuckEnchantmentLevel, int fishingSpeedEnchantmentLevel) { return CraftItemStack.asCraftMirror(FishingHooks.getRandomFishable(rand, baseChance, fishingLuckEnchantmentLevel, fishingSpeedEnchantmentLevel)); } }