BloodMagic/src/main/java/WayofTime/alchemicalWizardry/common/tweaker/FallingTower.java
hilburn afcb284479 MineTweaker additions
Harvest Moon gets an add custom crop type that's itemstack sensitive for
crops that share an item for seeds., it's not perfect but it works
pretty well.
Also gets a MT method to interface with this new harvest type
MT functions to add/remove focus items for falling tower as well as
define the meteor size and distribution.
2015-01-28 18:21:03 +00:00

139 lines
3.7 KiB
Java

package WayofTime.alchemicalWizardry.common.tweaker;
import WayofTime.alchemicalWizardry.common.summoning.meteor.MeteorParadigm;
import WayofTime.alchemicalWizardry.common.summoning.meteor.MeteorRegistry;
import minetweaker.IUndoableAction;
import minetweaker.MineTweakerAPI;
import minetweaker.api.item.IItemStack;
import net.minecraft.item.ItemStack;
import net.minecraftforge.oredict.OreDictionary;
import stanhebben.zenscript.annotations.ZenClass;
import stanhebben.zenscript.annotations.ZenMethod;
import java.util.Iterator;
import static WayofTime.alchemicalWizardry.common.tweaker.MTHelper.toStack;
/**
* MineTweaker3 Falling Tower Paradigm Handler by hilburn *
*/
@ZenClass("mods.bloodmagic.FallingTower")
public class FallingTower
{
@ZenMethod
public static void addFocus(IItemStack stack, int radius, String[] components)
{
MineTweakerAPI.apply(new Add(toStack(stack),radius, components));
}
@ZenMethod
public static void addFocus(IItemStack stack, int radius, String components)
{
MineTweakerAPI.apply(new Add(toStack(stack),radius, components.split("\\s*,\\s*")));
}
@ZenMethod
public static void removeFocus(IItemStack output) {
MineTweakerAPI.apply(new Remove(toStack(output)));
}
private static class Add implements IUndoableAction
{
private MeteorParadigm paradigm;
public Add(ItemStack stack, int radius, String[] components)
{
paradigm = new MeteorParadigm(stack,radius);
paradigm.parseStringArray(components);
}
@Override
public void apply()
{
MeteorRegistry.registerMeteorParadigm(paradigm);
}
@Override
public boolean canUndo()
{
return MeteorRegistry.paradigmList!= null;
}
@Override
public void undo()
{
MeteorRegistry.paradigmList.remove(paradigm);
}
@Override
public String describe() {
return "Adding Falling Tower Focus for " + paradigm.focusStack.getDisplayName();
}
@Override
public String describeUndo()
{
return "Removing Falling Tower Focus for " + paradigm.focusStack.getDisplayName();
}
@Override
public Object getOverrideKey()
{
return null;
}
}
private static class Remove implements IUndoableAction {
private final ItemStack focus;
private MeteorParadigm paradigm;
public Remove(ItemStack focus)
{
this.focus = focus;
}
@Override
public void apply()
{
for (Iterator<MeteorParadigm> itr = MeteorRegistry.paradigmList.iterator(); itr.hasNext();)
{
MeteorParadigm paradigm = itr.next();
if (OreDictionary.itemMatches(paradigm.focusStack,focus,false))
{
this.paradigm = paradigm;
itr.remove();
break;
}
}
}
@Override
public boolean canUndo()
{
return MeteorRegistry.paradigmList!= null && paradigm != null;
}
@Override
public void undo()
{
MeteorRegistry.paradigmList.add(paradigm);
}
@Override
public String describe() {
return "Removing Falling Tower Focus for " + focus.getDisplayName();
}
@Override
public String describeUndo()
{
return "Restoring Falling Tower Focus for " + focus.getDisplayName();
}
@Override
public Object getOverrideKey()
{
return null;
}
}
}