Newer
Older
ultramine_bukkit / src / main / java / net / minecraftforge / cauldron / apiimpl / FishingInterface.java
@vlad20012 vlad20012 on 24 Feb 2017 2 KB initial
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));
	}
}