diff --git a/src/main/java/binnie/Constants.java b/src/main/java/binnie/Constants.java deleted file mode 100644 index 6ae5a162..00000000 --- a/src/main/java/binnie/Constants.java +++ /dev/null @@ -1,11 +0,0 @@ -package binnie; - -// TODO unusing class? -public final class Constants { - public static final String LiquidJuice = "juice"; - public static final String LiquidWater = "water"; - public static final String LiquidSeedOil = "seedoil"; - public static final String LiquidCreosote = "Creosote Oil"; - public static final String LiquidEthanol = "bioethanol"; - public static final String LiquidHoney = "for.honey"; -} diff --git a/src/main/java/binnie/botany/ceramic/CeramicColor.java b/src/main/java/binnie/botany/ceramic/CeramicColor.java index 973b3b55..51b9b6c4 100644 --- a/src/main/java/binnie/botany/ceramic/CeramicColor.java +++ b/src/main/java/binnie/botany/ceramic/CeramicColor.java @@ -40,7 +40,7 @@ public class CeramicColor implements IDesignMaterial { } @Override - public int getColour() { + public int getColor() { return color.getColor(false); } } diff --git a/src/main/java/binnie/core/AbstractMod.java b/src/main/java/binnie/core/AbstractMod.java index 78718632..fc865875 100644 --- a/src/main/java/binnie/core/AbstractMod.java +++ b/src/main/java/binnie/core/AbstractMod.java @@ -21,8 +21,8 @@ import java.util.List; public abstract class AbstractMod implements IPacketProvider, IInitializable { private SimpleNetworkWrapper wrapper; - private LinkedHashSet fields; - protected List modules; + private final LinkedHashSet fields; + protected final List modules; public AbstractMod() { fields = new LinkedHashSet<>(); diff --git a/src/main/java/binnie/core/block/BlockMetadata.java b/src/main/java/binnie/core/block/BlockMetadata.java index c710344c..36557d84 100644 --- a/src/main/java/binnie/core/block/BlockMetadata.java +++ b/src/main/java/binnie/core/block/BlockMetadata.java @@ -27,8 +27,7 @@ public class BlockMetadata extends BlockContainer implements IBlockMetadata { } @Override - // TODO fix deprecated usage - public boolean removedByPlayer(World world, EntityPlayer player, int x, int y, int z) { + public boolean removedByPlayer(World world, EntityPlayer player, int x, int y, int z, boolean willHarvest) { return breakBlock(this, player, world, x, y, z); } @@ -121,8 +120,7 @@ public class BlockMetadata extends BlockContainer implements IBlockMetadata { } @Override - // TODO fix deprecated usage - public ItemStack getPickBlock(MovingObjectPosition target, World world, int x, int y, int z) { + public ItemStack getPickBlock(MovingObjectPosition target, World world, int x, int y, int z, EntityPlayer player) { return getPickBlock(world, x, y, z); } } diff --git a/src/main/java/binnie/core/craftgui/WindowFieldKit.java b/src/main/java/binnie/core/craftgui/WindowFieldKit.java index 6a4c9da4..6d218b2f 100644 --- a/src/main/java/binnie/core/craftgui/WindowFieldKit.java +++ b/src/main/java/binnie/core/craftgui/WindowFieldKit.java @@ -22,9 +22,9 @@ import binnie.core.craftgui.resource.minecraft.StandardTexture; import binnie.core.machines.inventory.SlotValidator; import binnie.core.util.I18N; import binnie.extrabees.core.ExtraBeeTexture; -import binnie.extrabees.gui.punnett.ExtraBeeGUITexture; +import binnie.extrabees.gui.ExtraBeeGUITexture; import binnie.genetics.gui.ControlChromosome; -import binnie.genetics.machine.Analyser; +import binnie.genetics.machine.analyser.Analyser; import cpw.mods.fml.relauncher.Side; import forestry.api.genetics.AlleleManager; import forestry.api.genetics.IAllele; diff --git a/src/main/java/binnie/core/craftgui/controls/button/ControlButton.java b/src/main/java/binnie/core/craftgui/controls/ControlButton.java similarity index 97% rename from src/main/java/binnie/core/craftgui/controls/button/ControlButton.java rename to src/main/java/binnie/core/craftgui/controls/ControlButton.java index f424135f..b0a02d68 100644 --- a/src/main/java/binnie/core/craftgui/controls/button/ControlButton.java +++ b/src/main/java/binnie/core/craftgui/controls/ControlButton.java @@ -1,4 +1,4 @@ -package binnie.core.craftgui.controls.button; +package binnie.core.craftgui.controls; import binnie.core.craftgui.CraftGUI; import binnie.core.craftgui.IWidget; diff --git a/src/main/java/binnie/core/craftgui/controls/IControlSelection.java b/src/main/java/binnie/core/craftgui/controls/IControlSelection.java deleted file mode 100644 index d9b04915..00000000 --- a/src/main/java/binnie/core/craftgui/controls/IControlSelection.java +++ /dev/null @@ -1,10 +0,0 @@ -package binnie.core.craftgui.controls; - -// TODO unused interface? -public interface IControlSelection { - T getSelectedValue(); - - void setSelectedValue(T p0); - - boolean isSelected(IControlSelectionOption p0); -} diff --git a/src/main/java/binnie/core/craftgui/controls/button/ControlEnumButton.java b/src/main/java/binnie/core/craftgui/controls/button/ControlEnumButton.java deleted file mode 100644 index 7d24c19a..00000000 --- a/src/main/java/binnie/core/craftgui/controls/button/ControlEnumButton.java +++ /dev/null @@ -1,57 +0,0 @@ -package binnie.core.craftgui.controls.button; - -import binnie.core.craftgui.IWidget; -import binnie.core.craftgui.controls.core.IControlValue; -import binnie.core.craftgui.events.EventMouse; -import binnie.core.craftgui.events.EventValueChanged; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - -// TODO unused class? -public class ControlEnumButton extends ControlButton implements IControlValue { - public static String eventEnumChanged = "eventEnumButtonChanged"; - private T currentSelection; - private List enumConstants; - - @Override - public String getText() { - return currentSelection.toString(); - } - - @Override - public void onMouseClick(EventMouse.Down event) { - int index = enumConstants.indexOf(currentSelection); - if (index < enumConstants.size() - 1) { - index++; - } else { - index = 0; - } - - T newEnum = enumConstants.get(index); - setValue(newEnum); - } - - @Override - public void setValue(T selection) { - if (currentSelection != selection) { - currentSelection = selection; - callEvent(new EventValueChanged(this, getValue())); - } - } - - public ControlEnumButton(IWidget parent, float x, float y, float width, float height, T[] values) { - super(parent, x, y, width, height, ""); - enumConstants = new ArrayList(); - Collections.addAll(enumConstants, values); - if (values.length > 0) { - currentSelection = values[0]; - } - } - - @Override - public T getValue() { - return currentSelection; - } -} diff --git a/src/main/java/binnie/core/craftgui/controls/button/ControlToggleButton.java b/src/main/java/binnie/core/craftgui/controls/button/ControlToggleButton.java deleted file mode 100644 index 4c94f17a..00000000 --- a/src/main/java/binnie/core/craftgui/controls/button/ControlToggleButton.java +++ /dev/null @@ -1,19 +0,0 @@ -package binnie.core.craftgui.controls.button; - -import binnie.core.craftgui.IWidget; -import binnie.core.craftgui.events.EventMouse; -import binnie.core.craftgui.events.EventToggleButtonClicked; - -// TODO unused class? -public class ControlToggleButton extends ControlButton { - boolean toggled; - - @Override - public void onMouseClick(EventMouse.Down event) { - callEvent(new EventToggleButtonClicked(this, toggled)); - } - - public ControlToggleButton(IWidget parent, int x, int y, int width, int height) { - super(parent, x, y, width, height); - } -} diff --git a/src/main/java/binnie/core/craftgui/controls/core/IControlIndexed.java b/src/main/java/binnie/core/craftgui/controls/core/IControlIndexed.java deleted file mode 100644 index 078e4ca1..00000000 --- a/src/main/java/binnie/core/craftgui/controls/core/IControlIndexed.java +++ /dev/null @@ -1,8 +0,0 @@ -package binnie.core.craftgui.controls.core; - -// TODO unused interface? -public interface IControlIndexed { - int getIndex(); - - void setIndex(int index); -} diff --git a/src/main/java/binnie/core/craftgui/database/PageBreederStats.java b/src/main/java/binnie/core/craftgui/database/PageBreederStats.java deleted file mode 100644 index 71f4979a..00000000 --- a/src/main/java/binnie/core/craftgui/database/PageBreederStats.java +++ /dev/null @@ -1,20 +0,0 @@ -package binnie.core.craftgui.database; - -import binnie.core.craftgui.IWidget; -import binnie.core.craftgui.controls.ControlText; -import binnie.core.craftgui.controls.ControlTextCentered; -import binnie.core.craftgui.controls.core.Control; -import binnie.core.genetics.BreedingSystem; -import net.minecraft.util.EnumChatFormatting; - -// TODO unused class? -public class PageBreederStats extends Control { - String player; - - public PageBreederStats(IWidget parent, int w, int h, String player) { - super(parent, 0.0f, 0.0f, w, h); - this.player = player; - ControlText pageBranchOverview_branchName = new ControlTextCentered(this, 8.0f, EnumChatFormatting.UNDERLINE + "§tats" + EnumChatFormatting.RESET); - BreedingSystem system = ((WindowAbstractDatabase) getSuperParent()).getBreedingSystem(); - } -} diff --git a/src/main/java/binnie/core/craftgui/events/EventKey.java b/src/main/java/binnie/core/craftgui/events/EventKey.java index e24934f5..bb9f8af1 100644 --- a/src/main/java/binnie/core/craftgui/events/EventKey.java +++ b/src/main/java/binnie/core/craftgui/events/EventKey.java @@ -31,17 +31,4 @@ public abstract class EventKey extends Event { } } } - - // TODO unused class? - public static class Up extends EventKey { - public Up(IWidget origin, char character, int key) { - super(origin, character, key); - } - - public abstract static class Handler extends EventHandler { - public Handler() { - super(Up.class); - } - } - } } diff --git a/src/main/java/binnie/core/craftgui/minecraft/Window.java b/src/main/java/binnie/core/craftgui/minecraft/Window.java index 81280de1..ffbc9c4b 100644 --- a/src/main/java/binnie/core/craftgui/minecraft/Window.java +++ b/src/main/java/binnie/core/craftgui/minecraft/Window.java @@ -44,8 +44,7 @@ import net.minecraft.world.World; import java.util.ArrayList; import java.util.Deque; -public abstract class Window extends TopLevelWidget implements INetwork.RecieveGuiNBT -{ +public abstract class Window extends TopLevelWidget implements INetwork.RecieveGuiNBT { private GuiCraftGUI gui; private ContainerCraftGUI container; private WindowInventory windowInventory; @@ -76,7 +75,6 @@ public abstract class Window extends TopLevelWidget implements INetwork.RecieveG if (widget.hasAttribute(WidgetAttribute.BlockTooltip)) { return; } - continue; } } } @@ -98,7 +96,6 @@ public abstract class Window extends TopLevelWidget implements INetwork.RecieveG if (widget.hasAttribute(WidgetAttribute.BlockTooltip)) { return; } - continue; } } } @@ -123,32 +120,36 @@ public abstract class Window extends TopLevelWidget implements INetwork.RecieveG } public Window(float width, float height, EntityPlayer player, IInventory inventory, Side side) { + this.side = side; titleButtonLeft = 8.0f; titleButtonRight = 8.0f; bgText1 = null; bgText2 = null; hasBeenInitialised = false; - this.side = Side.CLIENT; - this.side = side; setInventories(player, inventory); container = new ContainerCraftGUI(this); windowInventory = new WindowInventory(this); if (side == Side.SERVER) { return; } + setSize(new IPoint(width, height)); gui = new GuiCraftGUI(this); for (EnumHighlighting h : EnumHighlighting.values()) { - ControlSlot.highlighting.put(h, new ArrayList()); + ControlSlot.highlighting.put(h, new ArrayList<>()); } - (CraftGUI.Render = new Renderer(gui)).stylesheet(StyleSheetManager.getDefault()); + + CraftGUI.Render = new Renderer(gui); + CraftGUI.Render.stylesheet(StyleSheetManager.getDefault()); titleButtonLeft = -14.0f; + if (showHelpButton()) { new ControlHelp(this, titleButtonLeft += 22.0f, 8.0f); } if (showInfoButton() != null) { new ControlInfo(this, titleButtonLeft += 22.0f, 8.0f, showInfoButton()); } + addSelfEventHandler(new EventWidget.ChangeSize.Handler() { @Override public void onEvent(EventWidget.ChangeSize event) { @@ -163,7 +164,8 @@ public abstract class Window extends TopLevelWidget implements INetwork.RecieveG } public void setTitle(String title) { - (this.title = new ControlTextCentered(this, 12.0f, title)).setColor(4210752); + this.title = new ControlTextCentered(this, 12.0f, title); + this.title.setColor(0x404040); } @SideOnly(Side.CLIENT) @@ -183,10 +185,12 @@ public abstract class Window extends TopLevelWidget implements INetwork.RecieveG if (hasBeenInitialised) { return; } + bgText1 = new StandardTexture(0, 0, 256, 256, getBackgroundTextureFile(1)); if (getSize().x() > 256.0f) { bgText2 = new StandardTexture(0, 0, 256, 256, getBackgroundTextureFile(2)); } + if (!BinnieCore.proxy.checkTexture(bgText1.getTexture())) { bgText1 = null; bgText2 = null; @@ -198,11 +202,12 @@ public abstract class Window extends TopLevelWidget implements INetwork.RecieveG public abstract void initialiseClient(); public void initialiseServer() { + // ignored } @Override public void onRenderBackground() { - CraftGUI.Render.colour(16777215); + CraftGUI.Render.colour(0xffffff); if (getBackground1() != null) { CraftGUI.Render.texture(getBackground1(), IPoint.ZERO); } @@ -267,9 +272,6 @@ public abstract class Window extends TopLevelWidget implements INetwork.RecieveG return BinnieCore.proxy.getWorld(); } - public void onInventoryUpdate() { - } - public void sendClientAction(String name, NBTTagCompound action) { action.setString("type", name); MessageCraftGUI packet = new MessageCraftGUI(action); @@ -282,19 +284,20 @@ public abstract class Window extends TopLevelWidget implements INetwork.RecieveG float w = w(); float titleButtonRight = this.titleButtonRight + 16.0f; this.titleButtonRight = titleButtonRight; - ControlUser controlUser = new ControlUser(this, w - titleButtonRight, 8.0f, nbt.getString("username")); + new ControlUser(this, w - titleButtonRight, 8.0f, nbt.getString("username")); this.titleButtonRight += 6.0f; } if (side == Side.CLIENT && name.equals("power-system")) { float w2 = w(); float titleButtonRight2 = titleButtonRight + 16.0f; titleButtonRight = titleButtonRight2; - ControlPowerSystem controlPowerSystem = new ControlPowerSystem(this, w2 - titleButtonRight2, 8.0f, PowerSystem.get(nbt.getByte("system"))); + new ControlPowerSystem(this, w2 - titleButtonRight2, 8.0f, PowerSystem.get(nbt.getByte("system"))); titleButtonRight += 6.0f; } } public void onWindowInventoryChanged() { + // ignored } public Texture getBackground1() { diff --git a/src/main/java/binnie/core/craftgui/minecraft/control/ControlHelp.java b/src/main/java/binnie/core/craftgui/minecraft/control/ControlHelp.java index 2a504194..57b7db8c 100644 --- a/src/main/java/binnie/core/craftgui/minecraft/control/ControlHelp.java +++ b/src/main/java/binnie/core/craftgui/minecraft/control/ControlHelp.java @@ -1,5 +1,6 @@ package binnie.core.craftgui.minecraft.control; +import binnie.core.BinnieCore; import binnie.core.craftgui.CraftGUI; import binnie.core.craftgui.ITooltip; import binnie.core.craftgui.IWidget; @@ -7,6 +8,7 @@ import binnie.core.craftgui.Tooltip; import binnie.core.craftgui.WidgetAttribute; import binnie.core.craftgui.controls.core.Control; import binnie.core.craftgui.resource.minecraft.CraftGUITexture; +import binnie.core.util.I18N; public class ControlHelp extends Control implements ITooltip { public ControlHelp(IWidget parent, float x, float y) { @@ -22,10 +24,10 @@ public class ControlHelp extends Control implements ITooltip { @Override public void getTooltip(Tooltip tooltip) { tooltip.setType(Tooltip.Type.Help); - tooltip.add("Help"); - tooltip.add("To activate help tooltips,"); - tooltip.add("hold down the tab key and"); - tooltip.add("mouse over controls."); + tooltip.add(I18N.localise(BinnieCore.instance, "gui.tooltip.help")); + tooltip.add(I18N.localise(BinnieCore.instance, "gui.tooltip.help.0")); + tooltip.add(I18N.localise(BinnieCore.instance, "gui.tooltip.help.1")); + tooltip.add(I18N.localise(BinnieCore.instance, "gui.tooltip.help.2")); } @Override diff --git a/src/main/java/binnie/core/craftgui/minecraft/control/ControlInfo.java b/src/main/java/binnie/core/craftgui/minecraft/control/ControlInfo.java index a2213a5e..aea1720a 100644 --- a/src/main/java/binnie/core/craftgui/minecraft/control/ControlInfo.java +++ b/src/main/java/binnie/core/craftgui/minecraft/control/ControlInfo.java @@ -1,5 +1,6 @@ package binnie.core.craftgui.minecraft.control; +import binnie.core.BinnieCore; import binnie.core.craftgui.CraftGUI; import binnie.core.craftgui.ITooltip; import binnie.core.craftgui.IWidget; @@ -7,6 +8,7 @@ import binnie.core.craftgui.Tooltip; import binnie.core.craftgui.WidgetAttribute; import binnie.core.craftgui.controls.core.Control; import binnie.core.craftgui.resource.minecraft.CraftGUITexture; +import binnie.core.util.I18N; public class ControlInfo extends Control implements ITooltip { private String info; @@ -25,7 +27,7 @@ public class ControlInfo extends Control implements ITooltip { @Override public void getTooltip(Tooltip tooltip) { tooltip.setType(Tooltip.Type.Information); - tooltip.add("Info"); + tooltip.add(I18N.localise(BinnieCore.instance, "gui.tooltip.info")); tooltip.add(info); tooltip.setMaxWidth(200); } diff --git a/src/main/java/binnie/core/craftgui/minecraft/control/ControlLiquidTank.java b/src/main/java/binnie/core/craftgui/minecraft/control/ControlLiquidTank.java index b959a750..9b4049be 100644 --- a/src/main/java/binnie/core/craftgui/minecraft/control/ControlLiquidTank.java +++ b/src/main/java/binnie/core/craftgui/minecraft/control/ControlLiquidTank.java @@ -18,6 +18,7 @@ import binnie.core.machines.inventory.MachineSide; import binnie.core.machines.inventory.TankSlot; import binnie.core.machines.power.ITankMachine; import binnie.core.machines.power.TankInfo; +import binnie.core.util.I18N; import net.minecraft.client.renderer.texture.TextureMap; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.IIcon; @@ -89,7 +90,6 @@ public class ControlLiquidTank extends Control implements ITooltip { if (isTankValid()) { float height = horizontal ? 16.0f : 58.0f; int squaled = (int) (height * (getTank().getAmount() / getTank().getCapacity())); - int yPos = (int) height + 1; Fluid fluid = getTank().liquid.getFluid(); int hex = fluid.getColor(getTank().liquid); int r = (hex & 0xFF0000) >> 16; @@ -144,25 +144,32 @@ public class ControlLiquidTank extends Control implements ITooltip { TankSlot slot = getTankSlot(); tooltip.add(slot.getName()); - tooltip.add("Capacity: " + getTankCapacity() + " mB"); - tooltip.add("Insert Side: " + MachineSide.asString(slot.getInputSides())); - tooltip.add("Extract Side: " + MachineSide.asString(slot.getOutputSides())); + tooltip.add(I18N.localise(BinnieCore.instance, "gui.tooltip.tank.capacity", getTankCapacity())); + tooltip.add(I18N.localise(BinnieCore.instance, "gui.tooltip.tank.insertSide", MachineSide.asString(slot.getInputSides()))); + tooltip.add(I18N.localise(BinnieCore.instance, "gui.tooltip.tank.extractSide", MachineSide.asString(slot.getOutputSides()))); + if (slot.isReadOnly()) { - tooltip.add("Output Only Tank"); + tooltip.add(I18N.localise(BinnieCore.instance, "gui.tooltip.tank.outputOnlyTank")); + } + + if (slot.getValidator() == null) { + tooltip.add(I18N.localise(BinnieCore.instance, "gui.tooltip.tank.acceptsAny")); + } else { + tooltip.add(I18N.localise(BinnieCore.instance, "gui.tooltip.tank.accepts", slot.getValidator().getTooltip())); } - tooltip.add("Accepts: " + ((slot.getValidator() == null) ? "Any Item" : slot.getValidator().getTooltip())); } @Override public void getTooltip(Tooltip tooltip) { - if (isTankValid()) { - int percentage = (int) (100.0 * getTank().getAmount() / getTankCapacity()); - tooltip.add(getTank().getName()); - tooltip.add(percentage + "% full"); - tooltip.add((int) getTank().getAmount() + " mB"); + if (!isTankValid()) { + tooltip.add(I18N.localise(BinnieCore.instance, "gui.tooltip.tank.empty")); return; } - tooltip.add("Empty"); + + int percentage = (int) (100.0 * getTank().getAmount() / getTankCapacity()); + tooltip.add(getTank().getName()); + tooltip.add(I18N.localise(BinnieCore.instance, "gui.tooltip.tank.full", percentage)); + tooltip.add(I18N.localise(BinnieCore.instance, "gui.tooltip.tank.amount", (int) getTank().getAmount())); } private TankSlot getTankSlot() { diff --git a/src/main/java/binnie/core/craftgui/minecraft/control/ControlPowerSystem.java b/src/main/java/binnie/core/craftgui/minecraft/control/ControlPowerSystem.java index b08616f0..2f1a24e7 100644 --- a/src/main/java/binnie/core/craftgui/minecraft/control/ControlPowerSystem.java +++ b/src/main/java/binnie/core/craftgui/minecraft/control/ControlPowerSystem.java @@ -1,5 +1,6 @@ package binnie.core.craftgui.minecraft.control; +import binnie.core.BinnieCore; import binnie.core.craftgui.CraftGUI; import binnie.core.craftgui.ITooltip; import binnie.core.craftgui.IWidget; @@ -8,6 +9,7 @@ import binnie.core.craftgui.WidgetAttribute; import binnie.core.craftgui.controls.core.Control; import binnie.core.craftgui.resource.minecraft.CraftGUITexture; import binnie.core.machines.power.PowerSystem; +import binnie.core.util.I18N; public class ControlPowerSystem extends Control implements ITooltip { private PowerSystem system; @@ -26,8 +28,8 @@ public class ControlPowerSystem extends Control implements ITooltip { @Override public void getTooltip(Tooltip tooltip) { tooltip.setType(Tooltip.Type.Power); - tooltip.add("Power Supply"); - tooltip.add("Powered by " + system.getUnitName()); + tooltip.add(I18N.localise(BinnieCore.instance, "gui.tooltip.powerSupply")); + tooltip.add(I18N.localise(BinnieCore.instance, "gui.tooltip.poweredBy", system.getUnitName())); tooltip.setMaxWidth(200); } } diff --git a/src/main/java/binnie/core/craftgui/minecraft/render/MinecraftTexture.java b/src/main/java/binnie/core/craftgui/minecraft/render/MinecraftTexture.java deleted file mode 100644 index cb79ed2c..00000000 --- a/src/main/java/binnie/core/craftgui/minecraft/render/MinecraftTexture.java +++ /dev/null @@ -1,14 +0,0 @@ -package binnie.core.craftgui.minecraft.render; - -import binnie.core.craftgui.geometry.IArea; -import binnie.core.resource.IBinnieTexture; - -// TODO unused class? -public class MinecraftTexture { - protected IArea textureArea; - protected IBinnieTexture texture; - - public MinecraftTexture() { - textureArea = new IArea(0.0f, 0.0f, 0.0f, 0.0f); - } -} diff --git a/src/main/java/binnie/core/craftgui/minecraft/render/RenderCommand.java b/src/main/java/binnie/core/craftgui/minecraft/render/RenderCommand.java deleted file mode 100644 index cde2ee0f..00000000 --- a/src/main/java/binnie/core/craftgui/minecraft/render/RenderCommand.java +++ /dev/null @@ -1,15 +0,0 @@ -package binnie.core.craftgui.minecraft.render; - -import binnie.core.craftgui.IWidget; -import binnie.core.craftgui.minecraft.GuiCraftGUI; - -// TODO unused class? -public abstract class RenderCommand { - protected IWidget widget; - - public RenderCommand(IWidget widget) { - this.widget = widget; - } - - public abstract void render(GuiCraftGUI p0); -} diff --git a/src/main/java/binnie/core/genetics/IBreedingMessage.java b/src/main/java/binnie/core/genetics/IBreedingMessage.java deleted file mode 100644 index 041c255a..00000000 --- a/src/main/java/binnie/core/genetics/IBreedingMessage.java +++ /dev/null @@ -1,111 +0,0 @@ -package binnie.core.genetics; - -import binnie.core.BinnieCore; -import binnie.core.util.I18N; -import forestry.api.genetics.AlleleManager; -import forestry.api.genetics.IAlleleSpecies; -import forestry.api.genetics.IClassification; -import forestry.api.genetics.ISpeciesRoot; -import net.minecraft.item.ItemStack; - -// TODO unused interface? -interface IBreedingMessage { - String getTitle(); - - String getBody(); - - ItemStack getIcon(); - - class MessageSpeciesDiscovered implements IBreedingMessage { - IAlleleSpecies species; - ItemStack stack; - - public MessageSpeciesDiscovered(IAlleleSpecies species) { - this.species = species; - ISpeciesRoot root = null; - for (ISpeciesRoot sRoot : AlleleManager.alleleRegistry.getSpeciesRoot().values()) { - if (sRoot.getKaryotype()[0].getAlleleClass().isInstance(species)) { - root = sRoot; - } - } - if (root != null) { - stack = root.getMemberStack(root.templateAsIndividual(root.getTemplate(species.getUID())), 0); - } - } - - @Override - public String getTitle() { - return I18N.localise(BinnieCore.instance, "gui.breedingmessage.species"); - } - - @Override - public String getBody() { - return species.getName(); - } - - @Override - public ItemStack getIcon() { - return stack; - } - } - - class BranchDiscovered implements IBreedingMessage { - IAlleleSpecies species; - IClassification classification; - ItemStack stack; - - public BranchDiscovered(IAlleleSpecies species, IClassification classification) { - this.species = species; - this.classification = classification; - ISpeciesRoot root = null; - for (ISpeciesRoot sRoot : AlleleManager.alleleRegistry.getSpeciesRoot().values()) { - if (sRoot.getKaryotype()[0].getAlleleClass().isInstance(species)) { - root = sRoot; - } - } - if (root != null) { - stack = root.getMemberStack(root.templateAsIndividual(root.getTemplate(species.getUID())), 0); - } - } - - @Override - public String getTitle() { - return I18N.localise(BinnieCore.instance, "gui.breedingmessage.branch"); - } - - @Override - public String getBody() { - return classification.getScientific(); - } - - @Override - public ItemStack getIcon() { - return stack; - } - } - - class EpithetGained implements IBreedingMessage { - String epithet; - ItemStack stack; - - public EpithetGained(String epithet, ISpeciesRoot root) { - this.epithet = epithet; - stack = root.getMemberStack(root.templateAsIndividual(root.getDefaultTemplate()), 0); - } - - @Override - public String getTitle() { - return I18N.localise(BinnieCore.instance, "gui.breedingmessage.epithet"); - } - - @Override - public String getBody() { - return epithet; - } - - @Override - public ItemStack getIcon() { - return stack; - } - } -} diff --git a/src/main/java/binnie/core/genetics/ManagerGenetics.java b/src/main/java/binnie/core/genetics/ManagerGenetics.java index eef29028..6d19e9a2 100644 --- a/src/main/java/binnie/core/genetics/ManagerGenetics.java +++ b/src/main/java/binnie/core/genetics/ManagerGenetics.java @@ -20,7 +20,6 @@ import forestry.api.genetics.IIndividual; import forestry.api.genetics.ISpeciesRoot; import forestry.api.lepidopterology.IButterflyRoot; import net.minecraft.item.ItemStack; -import net.minecraft.world.World; import net.minecraftforge.event.world.WorldEvent; import java.util.ArrayList; @@ -67,11 +66,6 @@ public class ManagerGenetics extends ManagerBase { refreshData(); } - // TODO unused method? - public boolean isSpeciesDiscovered(IAlleleSpecies species, World world, boolean nei) { - return true; - } - public ITreeRoot getTreeRoot() { return (ITreeRoot) AlleleManager.alleleRegistry.getSpeciesRoot("rootTrees"); } diff --git a/src/main/java/binnie/core/genetics/VirtualMothHousing.java b/src/main/java/binnie/core/genetics/VirtualMothHousing.java deleted file mode 100644 index ab6d7195..00000000 --- a/src/main/java/binnie/core/genetics/VirtualMothHousing.java +++ /dev/null @@ -1,32 +0,0 @@ -package binnie.core.genetics; - -import forestry.api.genetics.IIndividual; -import forestry.api.lepidopterology.IButterfly; -import forestry.api.lepidopterology.IButterflyNursery; -import net.minecraft.entity.player.EntityPlayer; - -// TODO unused class? -public class VirtualMothHousing extends VirtualHousing implements IButterflyNursery { - public VirtualMothHousing(EntityPlayer player) { - super(player); - } - - @Override - public IButterfly getCaterpillar() { - return null; - } - - @Override - public IIndividual getNanny() { - return null; - } - - @Override - public void setCaterpillar(IButterfly butterfly) { - } - - @Override - public boolean canNurse(IButterfly butterfly) { - return false; - } -} diff --git a/src/main/java/binnie/core/liquid/BinnieFluid.java b/src/main/java/binnie/core/liquid/BinnieFluid.java index 87e4496a..6172c444 100644 --- a/src/main/java/binnie/core/liquid/BinnieFluid.java +++ b/src/main/java/binnie/core/liquid/BinnieFluid.java @@ -1,6 +1,7 @@ package binnie.core.liquid; import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidStack; class BinnieFluid extends Fluid { protected IFluidType fluidType; @@ -8,8 +9,7 @@ class BinnieFluid extends Fluid { private String name; @Override - // TODO fix deprecated usage - public String getLocalizedName() { + public String getLocalizedName(FluidStack stack) { return name; } diff --git a/src/main/java/binnie/core/machines/Machine.java b/src/main/java/binnie/core/machines/Machine.java index b62a60fc..1333d651 100644 --- a/src/main/java/binnie/core/machines/Machine.java +++ b/src/main/java/binnie/core/machines/Machine.java @@ -4,7 +4,6 @@ import binnie.core.BinnieCore; import binnie.core.machines.component.IInteraction; import binnie.core.machines.component.IRender; import binnie.core.machines.network.INetwork; -import binnie.core.machines.power.ITankMachine; import binnie.core.network.BinnieCorePacketID; import binnie.core.network.INetworkedEntity; import binnie.core.network.packet.MessageTileNBT; @@ -114,13 +113,6 @@ public class Machine implements INetworkedEntity, INBTTagable, INetwork.TilePack return tile; } - public void sendPacket() { - if (!BinnieCore.proxy.isSimulating(getTileEntity().getWorldObj())) { - return; - } - BinnieCore.proxy.sendNetworkEntityPacket((INetworkedEntity) getTileEntity()); - } - public Side getSide() { return BinnieCore.proxy.isSimulating(getTileEntity().getWorldObj()) ? Side.SERVER : Side.CLIENT; } @@ -178,10 +170,6 @@ public class Machine implements INetworkedEntity, INBTTagable, INetwork.TilePack return getInterface(IInventory.class); } - public ITankMachine getTankContainer() { - return getInterface(ITankMachine.class); - } - @Override public void readFromNBT(NBTTagCompound nbttagcompound) { for (MachineComponent component : getComponents()) { diff --git a/src/main/java/binnie/core/machines/RendererMachine.java b/src/main/java/binnie/core/machines/RendererMachine.java index 87f15544..7f7aa2c3 100644 --- a/src/main/java/binnie/core/machines/RendererMachine.java +++ b/src/main/java/binnie/core/machines/RendererMachine.java @@ -9,7 +9,7 @@ import net.minecraft.tileentity.TileEntity; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; -// TODO unused class? +// Hmm. It's used class public class RendererMachine extends TileEntitySpecialRenderer implements ISimpleBlockRenderingHandler { RenderBlocks blockRenderer; diff --git a/src/main/java/binnie/core/machines/inventory/BaseSlot.java b/src/main/java/binnie/core/machines/inventory/BaseSlot.java index 7a81fd0f..a3369aa2 100644 --- a/src/main/java/binnie/core/machines/inventory/BaseSlot.java +++ b/src/main/java/binnie/core/machines/inventory/BaseSlot.java @@ -72,15 +72,6 @@ public abstract class BaseSlot implements INBTTagable, IValidator { forbidExtraction(); } - // TODO unusing method? - public void setInputSides(EnumSet sides) { - for (ForgeDirection side : EnumSet.complementOf(sides)) { - if (side != ForgeDirection.UNKNOWN) { - access.setInsert(side, false); - } - } - } - public void setOutputSides(EnumSet sides) { for (ForgeDirection side : EnumSet.complementOf(sides)) { if (side != ForgeDirection.UNKNOWN) { diff --git a/src/main/java/binnie/core/machines/power/ErrorState.java b/src/main/java/binnie/core/machines/power/ErrorState.java index e2b1eded..5c9aa6a9 100644 --- a/src/main/java/binnie/core/machines/power/ErrorState.java +++ b/src/main/java/binnie/core/machines/power/ErrorState.java @@ -1,5 +1,7 @@ package binnie.core.machines.power; +import binnie.core.BinnieCore; +import binnie.core.util.I18N; import forestry.api.core.INBTTagable; import net.minecraft.nbt.NBTTagCompound; @@ -49,10 +51,6 @@ public class ErrorState implements INBTTagable { return progress; } - public void setIsProgress() { - progress = true; - } - @Override public void readFromNBT(NBTTagCompound nbt) { name = nbt.getString("name"); @@ -109,13 +107,13 @@ public class ErrorState implements INBTTagable { } public NoItem(String desc, int[] slots) { - super("No Item", desc, slots); + super(I18N.localise(BinnieCore.instance, "machine.error.noItem"), desc, slots); } } public static class InvalidItem extends Item { public InvalidItem(String desc, int slot) { - this("Invalid Item", desc, slot); + this(I18N.localise(BinnieCore.instance, "machine.error.invalidItem"), desc, slot); } public InvalidItem(String name, String desc, int slot) { @@ -125,31 +123,28 @@ public class ErrorState implements INBTTagable { public static class NoSpace extends Item { public NoSpace(String desc, int[] slots) { - super("No Space", desc, slots); + super(I18N.localise(BinnieCore.instance, "machine.error.noSpace"), desc, slots); } } public static class InsufficientPower extends ErrorState { public InsufficientPower() { - super("Insufficient Power", "Not enough power to operate"); + super( + I18N.localise(BinnieCore.instance, "machine.error.insufficientPower.title"), + I18N.localise(BinnieCore.instance, "machine.error.insufficientPower.desc") + ); } } public static class TankSpace extends Tank { public TankSpace(String desc, int tank) { - super("Tank Full", desc, new int[]{tank}); + super(I18N.localise(BinnieCore.instance, "machine.error.tankFull"), desc, new int[]{tank}); } } public static class InsufficientLiquid extends Tank { public InsufficientLiquid(String desc, int tank) { - super("Insufficient Liquid", desc, new int[]{tank}); - } - } - - public static class InvalidRecipe extends Item { - public InvalidRecipe(String string, int[] slots) { - super("Invalid Recipe", string, slots); + super(I18N.localise(BinnieCore.instance, "machine.error.insufficientLiquid"), desc, new int[]{tank}); } } } diff --git a/src/main/java/binnie/core/machines/storage/WindowCompartment.java b/src/main/java/binnie/core/machines/storage/WindowCompartment.java index 14c9e01b..fc11703a 100644 --- a/src/main/java/binnie/core/machines/storage/WindowCompartment.java +++ b/src/main/java/binnie/core/machines/storage/WindowCompartment.java @@ -8,7 +8,7 @@ import binnie.core.craftgui.WidgetAttribute; import binnie.core.craftgui.controls.ControlCheckbox; import binnie.core.craftgui.controls.ControlText; import binnie.core.craftgui.controls.ControlTextEdit; -import binnie.core.craftgui.controls.button.ControlButton; +import binnie.core.craftgui.controls.ControlButton; import binnie.core.craftgui.controls.core.Control; import binnie.core.craftgui.controls.page.ControlPage; import binnie.core.craftgui.controls.page.ControlPages; diff --git a/src/main/java/binnie/core/machines/storage/WindowTest.java b/src/main/java/binnie/core/machines/storage/WindowTest.java deleted file mode 100644 index 3c13121a..00000000 --- a/src/main/java/binnie/core/machines/storage/WindowTest.java +++ /dev/null @@ -1,39 +0,0 @@ -package binnie.core.machines.storage; - -import binnie.core.AbstractMod; -import binnie.core.BinnieCore; -import binnie.core.craftgui.minecraft.Window; -import binnie.genetics.craftgui.WindowMachine; -import cpw.mods.fml.relauncher.Side; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.inventory.IInventory; - -// TODO unused class? -public class WindowTest extends WindowMachine { - public static Window create(EntityPlayer player, IInventory inventory, Side side) { - return new WindowCompartment(player, inventory, side); - } - - public WindowTest(EntityPlayer player, IInventory inventory, Side side) { - super(320, 240, player, inventory, side); - } - - @Override - public void initialiseClient() { - } - - @Override - public String getTitle() { - return "Test"; - } - - @Override - protected AbstractMod getMod() { - return BinnieCore.instance; - } - - @Override - protected String getName() { - return "Test"; - } -} diff --git a/src/main/java/binnie/core/multiblock/BlockMultiblockMachine.java b/src/main/java/binnie/core/multiblock/BlockMultiblockMachine.java deleted file mode 100644 index fd84e101..00000000 --- a/src/main/java/binnie/core/multiblock/BlockMultiblockMachine.java +++ /dev/null @@ -1,25 +0,0 @@ -package binnie.core.multiblock; - -import net.minecraft.block.BlockContainer; -import net.minecraft.block.material.Material; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.world.World; - -// TODO unused class? -public class BlockMultiblockMachine extends BlockContainer { - public BlockMultiblockMachine(String blockName) { - super(Material.iron); - setHardness(1.5f); - setBlockName(blockName); - } - - @Override - public TileEntity createTileEntity(World world, int metadata) { - return new TileEntityMultiblockMachine(); - } - - @Override - public TileEntity createNewTileEntity(World world, int metadata) { - return new TileEntityMultiblockMachine(); - } -} diff --git a/src/main/java/binnie/core/multiblock/TileEntityMultiblockMachine.java b/src/main/java/binnie/core/multiblock/TileEntityMultiblockMachine.java deleted file mode 100644 index 158b54c3..00000000 --- a/src/main/java/binnie/core/multiblock/TileEntityMultiblockMachine.java +++ /dev/null @@ -1,32 +0,0 @@ -package binnie.core.multiblock; - -import binnie.core.machines.Machine; -import binnie.core.machines.TileEntityMachine; -import net.minecraft.tileentity.TileEntity; - -class TileEntityMultiblockMachine extends TileEntity { - private boolean inStructure; - private int tileX; - private int tileY; - private int tileZ; - - boolean inStructure() { - return inStructure; - } - - public Machine getMachine() { - return getMasterMachine(); - } - - private Machine getMasterMachine() { - if (!inStructure) { - return null; - } - - TileEntity tile = worldObj.getTileEntity(xCoord + tileX, yCoord + tileY, zCoord + tileZ); - if (tile instanceof TileEntityMachine) { - return ((TileEntityMachine) tile).getMachine(); - } - return null; - } -} diff --git a/src/main/java/binnie/core/resource/BinnieResource.java b/src/main/java/binnie/core/resource/BinnieResource.java index a1ec587b..0be3beba 100644 --- a/src/main/java/binnie/core/resource/BinnieResource.java +++ b/src/main/java/binnie/core/resource/BinnieResource.java @@ -18,11 +18,6 @@ public class BinnieResource { this.path = path; } - // TODO unused method? - public String getFullPath() { - return "/assets/" + mod + "/textures/" + type.toString() + "/" + path; - } - public ResourceLocation getResourceLocation() { return new ResourceLocation(mod, "textures/" + type.toString() + "/" + path); } diff --git a/src/main/java/binnie/core/texture/TextureManager.java b/src/main/java/binnie/core/texture/TextureManager.java deleted file mode 100644 index 8bce81d2..00000000 --- a/src/main/java/binnie/core/texture/TextureManager.java +++ /dev/null @@ -1,19 +0,0 @@ -package binnie.core.texture; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; - -import javax.swing.*; -import java.util.ArrayList; -import java.util.List; - -// TODO unused class? -@SideOnly(Side.CLIENT) -public class TextureManager -{ - static List textures = new ArrayList<>(); - - public static void init() { - // ignored - } -} diff --git a/src/main/java/binnie/core/triggers/TriggerInventory.java b/src/main/java/binnie/core/triggers/TriggerInventory.java deleted file mode 100644 index 40a82d07..00000000 --- a/src/main/java/binnie/core/triggers/TriggerInventory.java +++ /dev/null @@ -1,10 +0,0 @@ -package binnie.core.triggers; - -import net.minecraft.inventory.IInventory; - -// TODO unusing class? -public class TriggerInventory { - private static Boolean isSlotEmpty(IInventory inventory, int slot) { - return inventory.getStackInSlot(slot) != null; - } -} diff --git a/src/main/java/binnie/core/triggers/TriggerProvider.java b/src/main/java/binnie/core/triggers/TriggerProvider.java index bbed6f34..3c6bee15 100644 --- a/src/main/java/binnie/core/triggers/TriggerProvider.java +++ b/src/main/java/binnie/core/triggers/TriggerProvider.java @@ -14,16 +14,16 @@ import java.util.LinkedList; import java.util.List; class TriggerProvider implements ITriggerProvider { - static TriggerProvider instance = new TriggerProvider(); public static List triggers = new ArrayList<>(); @Override public Collection getExternalTriggers(ForgeDirection side, TileEntity tile) { - LinkedList list = new LinkedList(); - LinkedList triggerData = new LinkedList(); + LinkedList list = new LinkedList<>(); + LinkedList triggerData = new LinkedList<>(); if (tile instanceof IBuildcraft.TriggerProvider) { ((IBuildcraft.TriggerProvider) tile).getTriggers(list); } + for (TriggerData data : list) { if (data.getKey() != null && data.getKey().getUniqueTag() != null) { triggerData.add(data.getKey()); @@ -32,21 +32,6 @@ class TriggerProvider implements ITriggerProvider { return triggerData; } - // TODO unusing method? - public static boolean isTriggerActive(ITriggerExternal trigger, TileEntity tile) { - LinkedList list = new LinkedList(); - LinkedList triggerData = new LinkedList(); - if (tile instanceof IBuildcraft.TriggerProvider) { - ((IBuildcraft.TriggerProvider) tile).getTriggers(list); - } - for (TriggerData data : list) { - if (data.getKey() == trigger) { - return data.getValue(); - } - } - return false; - } - @Override public Collection getInternalTriggers(IStatementContainer container) { return new ArrayList<>(); diff --git a/src/main/java/binnie/core/triggers/TriggerWorking.java b/src/main/java/binnie/core/triggers/TriggerWorking.java deleted file mode 100644 index 85b7d42c..00000000 --- a/src/main/java/binnie/core/triggers/TriggerWorking.java +++ /dev/null @@ -1,43 +0,0 @@ -package binnie.core.triggers; - -import binnie.core.machines.Machine; -import binnie.core.machines.power.IProcess; - -// TODO unusing class? -public class TriggerWorking { - public static TriggerData isNotWorking(Object inventory) { - IProcess process = Machine.getInterface(IProcess.class, inventory); - boolean b = false; - if (process != null) { - b = (process.canWork() != null && process.canProgress() != null); - } - return new TriggerData(BinnieTrigger.triggerIsNotWorking, b); - } - - public static TriggerData isWorking(Object inventory) { - IProcess process = Machine.getInterface(IProcess.class, inventory); - boolean b = false; - if (process != null) { - b = (process.canWork() == null && process.canProgress() == null); - } - return new TriggerData(BinnieTrigger.triggerIsWorking, b); - } - - public static TriggerData canWork(Object inventory) { - IProcess process = Machine.getInterface(IProcess.class, inventory); - boolean b = false; - if (process != null) { - b = (process.canWork() == null); - } - return new TriggerData(BinnieTrigger.triggerCanWork, b); - } - - public static TriggerData cannotWork(Object inventory) { - IProcess process = Machine.getInterface(IProcess.class, inventory); - boolean b = false; - if (process != null) { - b = (process.canWork() != null); - } - return new TriggerData(BinnieTrigger.triggerCannotWork, b); - } -} diff --git a/src/main/java/binnie/extrabees/apiary/EnumHiveFrame.java b/src/main/java/binnie/extrabees/apiary/EnumHiveFrame.java index 5ac68db2..dc56f019 100644 --- a/src/main/java/binnie/extrabees/apiary/EnumHiveFrame.java +++ b/src/main/java/binnie/extrabees/apiary/EnumHiveFrame.java @@ -71,11 +71,6 @@ public enum EnumHiveFrame implements IHiveFrame, IBeeModifier { ); } - // TODO unused method? - public int getIconIndex() { - return 55 + ordinal(); - } - public void setMaxDamage(int damage) { maxDamage = damage; } diff --git a/src/main/java/binnie/extrabees/genetics/items/ItemPunnettSquare.java b/src/main/java/binnie/extrabees/genetics/items/ItemPunnettSquare.java deleted file mode 100644 index 8e151370..00000000 --- a/src/main/java/binnie/extrabees/genetics/items/ItemPunnettSquare.java +++ /dev/null @@ -1,37 +0,0 @@ -package binnie.extrabees.genetics.items; - -import binnie.extrabees.ExtraBees; -import binnie.extrabees.core.ExtraBeeGUID; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.world.World; - -// TODO unused class? -public class ItemPunnettSquare extends Item { - public ItemPunnettSquare() { - setCreativeTab(CreativeTabs.tabTools); - setMaxStackSize(1); - } - - @Override - @SideOnly(Side.CLIENT) - public void registerIcons(IIconRegister register) { - itemIcon = ExtraBees.proxy.getIcon(register, ""); - } - - @Override - public String getItemStackDisplayName(ItemStack itemstack) { - return "Punnett Square"; - } - - @Override - public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) { - ExtraBees.proxy.openGui(ExtraBeeGUID.PunnettSquare, player, (int) player.posX, (int) player.posY, (int) player.posZ); - return stack; - } -} diff --git a/src/main/java/binnie/extrabees/gui/punnett/ExtraBeeGUITexture.java b/src/main/java/binnie/extrabees/gui/ExtraBeeGUITexture.java similarity index 62% rename from src/main/java/binnie/extrabees/gui/punnett/ExtraBeeGUITexture.java rename to src/main/java/binnie/extrabees/gui/ExtraBeeGUITexture.java index 2aaac82d..a322a5c6 100644 --- a/src/main/java/binnie/extrabees/gui/punnett/ExtraBeeGUITexture.java +++ b/src/main/java/binnie/extrabees/gui/ExtraBeeGUITexture.java @@ -1,4 +1,4 @@ -package binnie.extrabees.gui.punnett; +package binnie.extrabees.gui; public enum ExtraBeeGUITexture { Chromosome, diff --git a/src/main/java/binnie/extrabees/gui/WindowAlvearyIndustrialFrame.java b/src/main/java/binnie/extrabees/gui/WindowAlvearyIndustrialFrame.java deleted file mode 100644 index 470b29a7..00000000 --- a/src/main/java/binnie/extrabees/gui/WindowAlvearyIndustrialFrame.java +++ /dev/null @@ -1,48 +0,0 @@ -package binnie.extrabees.gui; - -import binnie.core.AbstractMod; -import binnie.core.craftgui.minecraft.Window; -import binnie.core.craftgui.minecraft.control.ControlPlayerInventory; -import binnie.core.craftgui.minecraft.control.ControlSlot; -import binnie.core.machines.Machine; -import binnie.core.machines.TileEntityMachine; -import binnie.extrabees.ExtraBees; -import cpw.mods.fml.relauncher.Side; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.inventory.IInventory; - -// TODO unused class? -public class WindowAlvearyIndustrialFrame extends Window { - protected Machine machine; - protected ControlPlayerInventory playerInventory; - - public WindowAlvearyIndustrialFrame(EntityPlayer player, IInventory inventory, Side side) { - super(176.0f, 144.0f, player, inventory, side); - machine = ((TileEntityMachine) inventory).getMachine(); - } - - public static Window create(EntityPlayer player, IInventory inventory, Side side) { - if (player == null || inventory == null) { - return null; - } - return new WindowAlvearyIndustrialFrame(player, inventory, side); - } - - @Override - public void initialiseClient() { - setTitle("Industrial Frame Housing"); - playerInventory = new ControlPlayerInventory(this); - ControlSlot slot = new ControlSlot(this, 79.0f, 30.0f); - slot.assign(0); - } - - @Override - public AbstractMod getMod() { - return ExtraBees.instance; - } - - @Override - public String getName() { - return "AlvearyIndustrialFrame"; - } -} diff --git a/src/main/java/binnie/extrabees/gui/database/WindowApiaristDatabase.java b/src/main/java/binnie/extrabees/gui/database/WindowApiaristDatabase.java index acd72085..7f25066a 100644 --- a/src/main/java/binnie/extrabees/gui/database/WindowApiaristDatabase.java +++ b/src/main/java/binnie/extrabees/gui/database/WindowApiaristDatabase.java @@ -48,31 +48,4 @@ public class WindowApiaristDatabase extends WindowAbstractDatabase { public String getName() { return "Database"; } - - // TODO unused class? - enum SpeciesTab { - Overview(0xff), - Genome(0xffff00), - Productivity(0xffff), - Climate(0xff0000), - ResultantMutations(0xff00ff), - FurtherMutations(0xff00); - - public int colour; - - SpeciesTab(int colour) { - this.colour = colour; - } - } - - enum BranchesTab { - Overview(255), - Species(16711680); - - public int colour; - - BranchesTab(int colour) { - this.colour = colour; - } - } } diff --git a/src/main/java/binnie/extrabees/gui/punnett/ControlChromosome.java b/src/main/java/binnie/extrabees/gui/punnett/ControlChromosome.java deleted file mode 100644 index 051d8e94..00000000 --- a/src/main/java/binnie/extrabees/gui/punnett/ControlChromosome.java +++ /dev/null @@ -1,45 +0,0 @@ -package binnie.extrabees.gui.punnett; - -import binnie.core.craftgui.CraftGUI; -import binnie.core.craftgui.ITooltip; -import binnie.core.craftgui.IWidget; -import binnie.core.craftgui.Tooltip; -import binnie.core.craftgui.WidgetAttribute; -import binnie.core.craftgui.controls.core.Control; -import binnie.core.craftgui.controls.core.IControlValue; -import forestry.api.genetics.IChromosomeType; - -// TODO unused class? -public class ControlChromosome extends Control implements IControlValue, ITooltip { - protected IChromosomeType value; - - protected ControlChromosome(IWidget parent, float x, float y, IChromosomeType type) { - super(parent, x, y, 16.0f, 16.0f); - setValue(type); - addAttribute(WidgetAttribute.MouseOver); - } - - @Override - public IChromosomeType getValue() { - return value; - } - - @Override - public void setValue(IChromosomeType value) { - this.value = value; - } - - @Override - public void onRenderBackground() { - CraftGUI.Render.texture(ExtraBeeGUITexture.Chromosome, getArea()); - CraftGUI.Render.colour(0xff0000); - CraftGUI.Render.texture(ExtraBeeGUITexture.Chromosome2, getArea()); - } - - @Override - public void getTooltip(Tooltip tooltip) { - if (value != null) { - tooltip.add(value.getName()); - } - } -} diff --git a/src/main/java/binnie/extrabees/gui/punnett/ControlPunnett.java b/src/main/java/binnie/extrabees/gui/punnett/ControlPunnett.java deleted file mode 100644 index cf608796..00000000 --- a/src/main/java/binnie/extrabees/gui/punnett/ControlPunnett.java +++ /dev/null @@ -1,76 +0,0 @@ -package binnie.extrabees.gui.punnett; - -import binnie.core.craftgui.CraftGUI; -import binnie.core.craftgui.IWidget; -import binnie.core.craftgui.controls.ControlText; -import binnie.core.craftgui.controls.core.Control; -import binnie.core.craftgui.geometry.IArea; -import binnie.core.craftgui.geometry.TextJustification; -import forestry.api.genetics.IAllele; -import forestry.api.genetics.IChromosomeType; -import forestry.api.genetics.IIndividual; -import forestry.api.genetics.ISpeciesRoot; - -import java.util.LinkedList; -import java.util.List; - -public class ControlPunnett extends Control { - protected static int boxWidth = 80; - protected static int boxHeight = 28; - - protected ControlPunnett(IWidget parent, float x, float y) { - super(parent, x, y, ControlPunnett.boxWidth * 3, ControlPunnett.boxWidth * 3); - } - - @Override - public void onRenderBackground() { - CraftGUI.Render.solid(new IArea(0.0f, ControlPunnett.boxHeight, ControlPunnett.boxWidth * 3, 1.0f), 11184810); - CraftGUI.Render.solid(new IArea(ControlPunnett.boxWidth / 2.0f, ControlPunnett.boxHeight * 2, ControlPunnett.boxWidth * 2.5f, 1.0f), 11184810); - CraftGUI.Render.solid(new IArea(ControlPunnett.boxWidth, 0.0f, 1.0f, ControlPunnett.boxHeight * 3), 11184810); - CraftGUI.Render.solid(new IArea(ControlPunnett.boxWidth * 2, ControlPunnett.boxHeight / 2.0f, 1.0f, ControlPunnett.boxHeight * 2.5f), 11184810); - } - - // TODO unused method? - public void setup(IChromosomeType chromosome, IIndividual ind1, IIndividual ind2, ISpeciesRoot root) { - deleteAllChildren(); - if (chromosome == null || ind1 == null || ind2 == null || root == null) { - return; - } - - IAllele primary1 = ind1.getGenome().getActiveAllele(chromosome); - IAllele primary2 = ind2.getGenome().getActiveAllele(chromosome); - IAllele secondary1 = ind1.getGenome().getInactiveAllele(chromosome); - IAllele secondary2 = ind2.getGenome().getInactiveAllele(chromosome); - int x = 1; - int y; - - for (IAllele allele1 : new IAllele[]{primary1, secondary1}) { - y = 1; - for (IAllele allele2 : new IAllele[]{primary2, secondary2}) { - List alleles = new LinkedList(); - if (allele1.isDominant() && !allele2.isDominant()) { - alleles.add(allele1); - } else if (allele2.isDominant() && !allele1.isDominant()) { - alleles.add(allele2); - } else { - alleles.add(allele1); - if (allele1 != allele2) { - alleles.add(allele2); - } - } - - String text = ""; - for (IAllele allele3 : alleles) { - text = text + allele3.getName() + ": " + 25.0f / alleles.size() + "%\n"; - } - new ControlText(this, new IArea(x * ControlPunnett.boxWidth, ControlPunnett.boxHeight * y, ControlPunnett.boxWidth, ControlPunnett.boxHeight), text, TextJustification.TopCenter).setColor(11184810); - y++; - } - x++; - } - new ControlText(this, new IArea(ControlPunnett.boxWidth, 0.0f, ControlPunnett.boxWidth, ControlPunnett.boxHeight), "\n" + primary1.getName(), TextJustification.TopCenter).setColor(11184810); - new ControlText(this, new IArea(ControlPunnett.boxWidth * 2, 0.0f, ControlPunnett.boxWidth, ControlPunnett.boxHeight), "\n" + secondary1.getName(), TextJustification.TopCenter).setColor(11184810); - new ControlText(this, new IArea(0.0f, ControlPunnett.boxHeight, ControlPunnett.boxWidth, ControlPunnett.boxHeight), primary2.getName(), TextJustification.TopCenter).setColor(11184810); - new ControlText(this, new IArea(0.0f, ControlPunnett.boxHeight * 2, ControlPunnett.boxWidth, ControlPunnett.boxHeight), primary2.getName(), TextJustification.TopCenter).setColor(11184810); - } -} diff --git a/src/main/java/binnie/extrabees/gui/punnett/WindowPunnettSquare.java b/src/main/java/binnie/extrabees/gui/punnett/WindowPunnettSquare.java deleted file mode 100644 index 77046291..00000000 --- a/src/main/java/binnie/extrabees/gui/punnett/WindowPunnettSquare.java +++ /dev/null @@ -1,58 +0,0 @@ -package binnie.extrabees.gui.punnett; - -import binnie.core.AbstractMod; -import binnie.core.craftgui.CraftGUI; -import binnie.core.craftgui.minecraft.Window; -import binnie.core.craftgui.minecraft.control.ControlSlot; -import binnie.core.craftgui.resource.StyleSheet; -import binnie.core.craftgui.resource.minecraft.CraftGUITexture; -import binnie.core.craftgui.resource.minecraft.PaddedTexture; -import binnie.core.craftgui.resource.minecraft.StandardTexture; -import binnie.extrabees.ExtraBees; -import binnie.extrabees.core.ExtraBeeTexture; -import cpw.mods.fml.relauncher.Side; -import forestry.api.genetics.ISpeciesRoot; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.inventory.IInventory; - -// TODO unused class? -public class WindowPunnettSquare extends Window { - ControlSlot bee1; - ControlSlot bee2; - ControlPunnett punnett; - ISpeciesRoot root; - - public WindowPunnettSquare(EntityPlayer player, IInventory inventory, Side side) { - super(245.0f, 205.0f, player, inventory, side); - root = null; - } - - public static Window create(EntityPlayer player, IInventory inventory, Side side) { - return new WindowPunnettSquare(player, inventory, side); - } - - @Override - public AbstractMod getMod() { - return ExtraBees.instance; - } - - @Override - public String getName() { - return "Punnett"; - } - - @Override - public void initialiseClient() { - setTitle("Punnett Square"); - CraftGUI.Render.stylesheet(new StyleSheetPunnett()); - } - - static class StyleSheetPunnett extends StyleSheet { - public StyleSheetPunnett() { - textures.put(CraftGUITexture.Window, new PaddedTexture(0, 0, 160, 160, 0, ExtraBeeTexture.GUIPunnett, 32, 32, 32, 32)); - textures.put(CraftGUITexture.Slot, new StandardTexture(160, 0, 18, 18, 0, ExtraBeeTexture.GUIPunnett)); - textures.put(ExtraBeeGUITexture.Chromosome, new StandardTexture(160, 36, 16, 16, 0, ExtraBeeTexture.GUIPunnett)); - textures.put(ExtraBeeGUITexture.Chromosome2, new StandardTexture(160, 52, 16, 16, 0, ExtraBeeTexture.GUIPunnett)); - } - } -} diff --git a/src/main/java/binnie/extrabees/liquids/ExtraBeeLiquid.java b/src/main/java/binnie/extrabees/liquids/ExtraBeeLiquid.java index 352ddbc6..27d8bf77 100644 --- a/src/main/java/binnie/extrabees/liquids/ExtraBeeLiquid.java +++ b/src/main/java/binnie/extrabees/liquids/ExtraBeeLiquid.java @@ -10,18 +10,20 @@ import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.util.IIcon; import net.minecraftforge.fluids.FluidStack; +import java.awt.Color; + public enum ExtraBeeLiquid implements ILiquidType { - ACID("acid", 0xafeb19), - POISON("poison", 0xeb14eb), - GLACIAL("liquidnitrogen", 0x96c8c8); + ACID("acid", new Color(0xafeb19)), + POISON("poison", new Color(0xeb14eb)), + GLACIAL("liquidnitrogen", new Color(0x96c8c8)); protected String ident; protected IIcon icon; - protected int colour; + protected int color; - ExtraBeeLiquid(String ident, int colour) { + ExtraBeeLiquid(String ident, Color color) { this.ident = ident; - this.colour = colour; + this.color = color.getRGB(); } @Override @@ -75,6 +77,6 @@ public enum ExtraBeeLiquid implements ILiquidType { @Override public int getContainerColor() { - return colour; + return color; } } diff --git a/src/main/java/binnie/extrabees/products/EnumHoneyComb.java b/src/main/java/binnie/extrabees/products/EnumHoneyComb.java index 1bbe96e4..fbc79885 100644 --- a/src/main/java/binnie/extrabees/products/EnumHoneyComb.java +++ b/src/main/java/binnie/extrabees/products/EnumHoneyComb.java @@ -4,116 +4,112 @@ import binnie.core.item.IItemEnum; import binnie.extrabees.ExtraBees; import forestry.api.recipes.RecipeManagers; import net.minecraft.item.ItemStack; -import net.minecraftforge.oredict.OreDictionary; +import java.awt.Color; import java.util.LinkedHashMap; +import java.util.Locale; import java.util.Map; public enum EnumHoneyComb implements IItemEnum { - BARREN(7564356, 12762791), - ROTTEN(4084257, 11652233), - BONE(12895407, 14606017), - OIL(394760, 2894646), - COAL(10392696, 3682590), - FUEL(10252096, 16761856), - WATER(2568911, 7973065), - MILK(14145991, 16777215), - FRUIT(8202548, 14372706), - SEED(3428147, 7457902), - ALCOHOL(4293921, 14604622), - STONE(9211025, 13027020), - REDSTONE(16422550, 15077392), - RESIN(16762703, 13208064), - IC2ENERGY(15332623, 2143177), - IRON(3552564, 11038808), - GOLD(3552564, 15125515), - COPPER(3552564, 13722376), - TIN(3552564, 12431805), - SILVER(3552564, 14408667), - BRONZE, - URANIUM(2031360, 4303667), - CLAY(7034426, 11583702), - OLD(4535060, 11769444), - FUNGAL(7234891, 2856003), - CREOSOTE(10256652, 12429911), - LATEX(5854529, 11051653), - ACIDIC(3441987, 1374014), - VENOMOUS(8198269, 16724991), - SLIME(3884860, 8442245), - BLAZE(16738816, 16763904), - COFFEE(5519389, 11763531), - GLACIAL(5146503, 13366002), - MINT, - CITRUS, - PEAT, - SHADOW(0, 3545141), - LEAD(3552564, 10125468), - BRASS, - ELECTRUM, - ZINC(3552564, 15592447), - TITANIUM(3552564, 11578083), - TUNGSTEN(3552564, 1249812), - STEEL, - IRIDIUM, - PLATINUM(3552564, 10125468), - LAPIS(3552564, 4009179), - SODALITE, - PYRITE, - BAUXITE, - CINNABAR, - SPHALERITE, - EMERALD(3552564, 1900291), - RUBY(3552564, 14024704), - SAPPHIRE(3552564, 673791), - OLIVINE, - DIAMOND(3552564, 8371706), - RED(13388876, 16711680), - YELLOW(15066419, 16768256), - BLUE(10072818, 8959), - GREEN(6717235, 39168), - BLACK(1644825, 5723991), - WHITE(14079702, 16777215), - BROWN(8349260, 6042895), - ORANGE(15905331, 16751872), - CYAN(5020082, 65509), - PURPLE(11691749, 11403519), - GRAY(5000268, 12237498), - LIGHTBLUE(10072818, 40447), - PINK(15905484, 16744671), - LIMEGREEN(8375321, 65288), - MAGENTA(15040472, 16711884), - LIGHTGRAY(10066329, 13224393), - NICKEL(3552564, 16768764), - INVAR, - GLOWSTONE(10919006, 14730249), - SALTPETER(10919006, 14730249), - PULP, - MULCH, - COMPOST(4338440, 7036475), - SAWDUST(12561009, 15913854), - CERTUS(13029631, 3755363), - ENDERPEARL(3446662, 206368), - YELLORIUM(2564173, 14019840), - CYANITE(2564173, 34541), - BLUTONIUM(2564173, 1769702); + BARREN(new Color(0x736c44), new Color(0xc2bea7)), + ROTTEN(new Color(0x3e5221), new Color(0xb1cc89)), + BONE(new Color(0xc4c4af), new Color(0xdedec1)), + OIL(new Color(0x060608), new Color(0x2c2b36)), + COAL(new Color(0x9e9478), new Color(0x38311e)), + FUEL(new Color(0x9c6f40), new Color(0xffc400)), + WATER(new Color(0x2732cf), new Color(0x79a8c9)), + MILK(new Color(0xd7d9c7), new Color(0xffffff)), + FRUIT(new Color(0x7d2934), new Color(0xdb4f62)), + SEED(new Color(0x344f33), new Color(0x71cc6e)), + ALCOHOL(new Color(0x418521), new Color(0xded94e)), + STONE(new Color(0x8c8c91), new Color(0xc6c6cc)), + REDSTONE(new Color(0xfa9696), new Color(0xe61010)), + RESIN(new Color(0xffc74f), new Color(0xc98a00)), + IC2ENERGY(new Color(0xe9f50f), new Color(0x20b3c9)), + IRON(new Color(0x363534), new Color(0xa87058)), + GOLD(new Color(0x363534), new Color(0xe6cc0b)), + COPPER(new Color(0x363534), new Color(0xd16308)), + TIN(new Color(0x363534), new Color(0xbdb1bd)), + SILVER(new Color(0x363534), new Color(0xdbdbdb)), +// BRONZE, + URANIUM(new Color(0x1eff00), new Color(0x41ab33)), + CLAY(new Color(0x6b563a), new Color(0xb0c0d6)), + OLD(new Color(0x453314), new Color(0xb39664)), + FUNGAL(new Color(0x6e654b), new Color(0x2b9443)), + CREOSOTE(new Color(0x9c810c), new Color(0xbdaa57)), + LATEX(new Color(0x595541), new Color(0xa8a285)), + ACIDIC(new Color(0x348543), new Color(0x14f73e)), + VENOMOUS(new Color(0x7d187d), new Color(0xff33ff)), + SLIME(new Color(0x3b473c), new Color(0x80d185)), + BLAZE(new Color(0xff6a00), new Color(0xffcc00)), + COFFEE(new Color(0x54381d), new Color(0xb37f4b)), + GLACIAL(new Color(0x4e8787), new Color(0xcbf2f2)), +// MINT, +// CITRUS, +// PEAT, + SHADOW(new Color(0x000000), new Color(0x361835)), + LEAD(new Color(0x363534), new Color(0x9a809c)), +// BRASS, +// ELECTRUM, + ZINC(new Color(0x363534), new Color(0xedebff)), + TITANIUM(new Color(0x363534), new Color(0xb0aae3)), + TUNGSTEN(new Color(0x363534), new Color(0x131214)), +// STEEL, +// IRIDIUM, + PLATINUM(new Color(0x363534), new Color(0x9a809c)), + LAPIS(new Color(0x363534), new Color(0x3d2cdb)), +// SODALITE, +// PYRITE, +// BAUXITE, +// CINNABAR, +// SPHALERITE, + EMERALD(new Color(0x363534), new Color(0x1cff03)), + RUBY(new Color(0x363534), new Color(0xd60000)), + SAPPHIRE(new Color(0x363534), new Color(0xa47ff)), +// OLIVINE, + DIAMOND(new Color(0x363534), new Color(0x7fbdfa)), + RED(new Color(0xcc4c4c), new Color(0xff0000)), + YELLOW(new Color(0xe5e533), new Color(0xffdd00)), + BLUE(new Color(0x99b2f2), new Color(0x0022ff)), + GREEN(new Color(0x667f33), new Color(0x009900)), + BLACK(new Color(0x191919), new Color(0x575757)), + WHITE(new Color(0xd6d6d6), new Color(0xffffff)), + BROWN(new Color(0x7f664c), new Color(0x5c350f)), + ORANGE(new Color(0xf2b233), new Color(0xff9d00)), + CYAN(new Color(0x4c99b2), new Color(0x00ffe5)), + PURPLE(new Color(0xb266e5), new Color(0xae00ff)), + GRAY(new Color(0x4c4c4c), new Color(0xbababa)), + LIGHTBLUE(new Color(0x99b2f2), new Color(0x009dff)), + PINK(new Color(0xf2b2cc), new Color(0xff80df)), + LIMEGREEN(new Color(0x7fcc19), new Color(0x00ff08)), + MAGENTA(new Color(0xe57fd8), new Color(0xff00cc)), + LIGHTGRAY(new Color(0x999999), new Color(0xc9c9c9)), + NICKEL(new Color(0x363534), new Color(0xffdefc)), +// INVAR, + GLOWSTONE(new Color(0xa69c5e), new Color(0xe0c409)), + SALTPETER(new Color(0xa69c5e), new Color(0xe0c409)), + //PULP, + //MULCH, + COMPOST(new Color(0x423308), new Color(0x6b5e3b)), + SAWDUST(new Color(0xbfaa71), new Color(0xf2d37e)), + CERTUS(new Color(0xc6d0ff), new Color(0x394d63)), + ENDERPEARL(new Color(0x349786), new Color(0x32620)), + YELLORIUM(new Color(0x27204d), new Color(14019840)), + CYANITE(new Color(0x27204d), new Color(0x86ed)), + BLUTONIUM(new Color(0x27204d), new Color(0x1b00e6)); public Map products; - public boolean deprecated; + public final int primaryColor; + public final int secondaryColor; + public final String name; - protected int[] color; protected boolean active; - EnumHoneyComb() { - this(0xffffff, 0xffffff); - active = false; - deprecated = true; - } - - EnumHoneyComb(int color, int color2) { - this.color = new int[]{color, color2}; + EnumHoneyComb(Color primaryColor, Color secondaryColor) { + this.primaryColor = primaryColor.getRGB(); + this.secondaryColor = secondaryColor.getRGB(); + name = toString().toLowerCase(Locale.ENGLISH); products = new LinkedHashMap<>(); - active = true; - deprecated = false; } public static EnumHoneyComb get(ItemStack itemStack) { @@ -139,8 +135,8 @@ public enum EnumHoneyComb implements IItemEnum { } @Override - public String getName(ItemStack itemStack) { - return ExtraBees.proxy.localise("item.comb." + name().toLowerCase()); + public String getName(ItemStack stack) { + return ExtraBees.proxy.localise("item.comb." + name); } public boolean addProduct(ItemStack item, Float chance) { @@ -155,18 +151,9 @@ public enum EnumHoneyComb implements IItemEnum { active = addProduct(item, chance); } - // TODO unused method? - public void tryAddProduct(String oreDict, Float chance) { - if (!OreDictionary.getOres(oreDict).isEmpty()) { - tryAddProduct(OreDictionary.getOres(oreDict).get(0), chance); - } else { - active = false; - } - } - public void tryAddProduct(IItemEnum type, Float chance) { tryAddProduct(type.get(1), chance); - active = (active && type.isActive()); + active = active && type.isActive(); } public void copyProducts(EnumHoneyComb comb) { diff --git a/src/main/java/binnie/extrabees/products/EnumHoneyDrop.java b/src/main/java/binnie/extrabees/products/EnumHoneyDrop.java index 0f998da9..cbe93336 100644 --- a/src/main/java/binnie/extrabees/products/EnumHoneyDrop.java +++ b/src/main/java/binnie/extrabees/products/EnumHoneyDrop.java @@ -8,52 +8,48 @@ import net.minecraft.item.ItemStack; import net.minecraftforge.fluids.FluidRegistry; import net.minecraftforge.fluids.FluidStack; +import java.awt.Color; + public enum EnumHoneyDrop implements IItemEnum { - ENERGY(0x9c4972, 0xe37171, ""), - ACID(0x4bb541, 0x49de3c, "acid"), - POISON(0xd106b9, 0xff03e2, "poison"), - APPLE(0xc75252, 0xc92a2a, "juice"), - CITRUS, - ICE(0xaee8e2, 0x96fff5, "liquidnitrogen"), - MILK(0xe0e0e0, 0xffffff, "milk"), - SEED(0x7cc272, 0xc2bea7, "seedoil"), - ALCOHOL(0xdbe84d, 0xa5e84d, "short.mead"), - FRUIT, - VEGETABLE, - PUMPKIN, - MELON, - RED(0xcc4c4c, 0xff0000, "for.honey"), - YELLOW(0xe5e533, 0xffdd00, "for.honey"), - BLUE(0x99b2f2, 0x0022ff, "for.honey"), - GREEN(0x667f33, 0x009900, "for.honey"), - BLACK(0x191919, 0x575757, "for.honey"), - WHITE(0xd6d6d6, 0xffffff, "for.honey"), - BROWN(0x7f664c, 0x5c350f, "for.honey"), - ORANGE(0xf2b233, 0xff9d00, "for.honey"), - CYAN(0x4c99b2, 0x00ffe5, "for.honey"), - PURPLE(0xb266e5, 0xae00ff, "for.honey"), - GRAY(0x4c4c4c, 0xbababa, "for.honey"), - LIGHTBLUE(0x99b2f2, 0x009dff, "for.honey"), - PINK(0xf2b2cc, 0xff80df, "for.honey"), - LIMEGREEN(0x7fcc19, 0x00ff08, "for.honey"), - MAGENTA(0xe57fd8, 0xff00cc, "for.honey"), - LIGHTGRAY(0x999999, 0xc9c9c9, "for.honey"); + ENERGY(new Color(0x9c4972), new Color(0xe37171), ""), + ACID(new Color(0x4bb541), new Color(0x49de3c), "acid"), + POISON(new Color(0xd106b9), new Color(0xff03e2), "poison"), + APPLE(new Color(0xc75252), new Color(0xc92a2a), "juice"), +// CITRUS, + ICE(new Color(0xaee8e2), new Color(0x96fff5), "liquidnitrogen"), + MILK(new Color(0xe0e0e0), new Color(0xffffff), "milk"), + SEED(new Color(0x7cc272), new Color(0xc2bea7), "seedoil"), + ALCOHOL(new Color(0xdbe84d), new Color(0xa5e84d), "short.mead"), +// FRUIT, +// VEGETABLE, +// PUMPKIN, +// MELON, + RED(new Color(0xcc4c4c), new Color(0xff0000), "for.honey"), + YELLOW(new Color(0xe5e533), new Color(0xffdd00), "for.honey"), + BLUE(new Color(0x99b2f2), new Color(0x0022ff), "for.honey"), + GREEN(new Color(0x667f33), new Color(0x009900), "for.honey"), + BLACK(new Color(0x191919), new Color(0x575757), "for.honey"), + WHITE(new Color(0xd6d6d6), new Color(0xffffff), "for.honey"), + BROWN(new Color(0x7f664c), new Color(0x5c350f), "for.honey"), + ORANGE(new Color(0xf2b233), new Color(0xff9d00), "for.honey"), + CYAN(new Color(0x4c99b2), new Color(0x00ffe5), "for.honey"), + PURPLE(new Color(0xb266e5), new Color(0xae00ff), "for.honey"), + GRAY(new Color(0x4c4c4c), new Color(0xbababa), "for.honey"), + LIGHTBLUE(new Color(0x99b2f2), new Color(0x009dff), "for.honey"), + PINK(new Color(0xf2b2cc), new Color(0xff80df), "for.honey"), + LIMEGREEN(new Color(0x7fcc19), new Color(0x00ff08), "for.honey"), + MAGENTA(new Color(0xe57fd8), new Color(0xff00cc), "for.honey"), + LIGHTGRAY(new Color(0x999999), new Color(0xc9c9c9), "for.honey"); + + public final int primaryColor; + public final int secondaryColor; - public boolean deprecated; - - protected int[] color; protected String liquidName; protected ItemStack remenant; - EnumHoneyDrop() { - this(0xffffff, 0xffffff, ""); - } - - EnumHoneyDrop(int color, int color2, String liquid) { - liquidName = ""; - remenant = null; - deprecated = false; - this.color = new int[]{color, color2}; + EnumHoneyDrop(Color primaryColor, Color secondaryColor, String liquid) { + this.primaryColor = primaryColor.getRGB(); + this.secondaryColor = secondaryColor.getRGB(); liquidName = liquid; } @@ -67,7 +63,6 @@ public enum EnumHoneyDrop implements IItemEnum { public void addRemenant(ItemStack stack) { remenant = stack; - deprecated = true; } public void addRecipe() { @@ -79,7 +74,8 @@ public enum EnumHoneyDrop implements IItemEnum { @Override public boolean isActive() { - return !deprecated && (liquidName == null || FluidRegistry.isFluidRegistered(liquidName)); + return liquidName == null + || FluidRegistry.isFluidRegistered(liquidName); } @Override diff --git a/src/main/java/binnie/extrabees/products/EnumPropolis.java b/src/main/java/binnie/extrabees/products/EnumPropolis.java index 8e544430..fcf6f785 100644 --- a/src/main/java/binnie/extrabees/products/EnumPropolis.java +++ b/src/main/java/binnie/extrabees/products/EnumPropolis.java @@ -7,32 +7,28 @@ import forestry.api.recipes.RecipeManagers; import net.minecraft.item.ItemStack; import net.minecraftforge.fluids.FluidStack; +import java.awt.Color; + public enum EnumPropolis implements IItemEnum { - WATER(0x24b3c9, 0xc2bea7, "Water"), - OIL(0x172f33, 0xc2bea7, "oil"), - FUEL(0xa38d12, 0xc2bea7, "fuel"), - MILK, - FRUIT, - SEED, - ALCOHOL, - CREOSOTE(0x877501, 0xbda613, "creosote"), - GLACIAL, - PEAT; + WATER(new Color(0x24b3c9), new Color(0xc2bea7), "Water"), + OIL(new Color(0x172f33), new Color(0xc2bea7), "oil"), + FUEL(new Color(0xa38d12), new Color(0xc2bea7), "fuel"), +// MILK, +// FRUIT, +// SEED, +// ALCOHOL, + CREOSOTE(new Color(0x877501), new Color(0xbda613), "creosote"); +// GLACIAL, +// PEAT - int[] colour; - String liquidName; - boolean active; + public final int secondaryColor; + public final int primaryColor; + public final String liquidName; - EnumPropolis() { - this(0xffffff, 0xffffff, ""); - active = false; - } - - EnumPropolis(int colour, int colour2, String liquid) { - this.colour = new int[0]; - active = true; - this.colour = new int[]{colour, colour2}; - liquidName = liquid; + EnumPropolis(Color primaryColor, Color secondaryColor, String liquidName) { + this.primaryColor = primaryColor.getRGB(); + this.secondaryColor = secondaryColor.getRGB(); + this.liquidName = liquidName; } public static EnumPropolis get(ItemStack itemStack) { @@ -52,7 +48,7 @@ public enum EnumPropolis implements IItemEnum { @Override public boolean isActive() { - return active && Binnie.Liquid.getLiquidStack(liquidName, 100) != null; + return Binnie.Liquid.getLiquidStack(liquidName, 100) != null; } @Override diff --git a/src/main/java/binnie/extrabees/products/ItemHoneyComb.java b/src/main/java/binnie/extrabees/products/ItemHoneyComb.java index b84edb8e..89306768 100644 --- a/src/main/java/binnie/extrabees/products/ItemHoneyComb.java +++ b/src/main/java/binnie/extrabees/products/ItemHoneyComb.java @@ -291,14 +291,15 @@ public class ItemHoneyComb extends ItemProduct { } @Override - public int getColorFromItemStack(ItemStack itemStack, int j) { - if (EnumHoneyComb.get(itemStack) == null) { + public int getColorFromItemStack(ItemStack stack, int indexColor) { + EnumHoneyComb comb = EnumHoneyComb.get(stack); + if (comb == null) { return 0xffffff; } - if (j == 0) { - return EnumHoneyComb.get(itemStack).color[0]; + if (indexColor == 0) { + return comb.primaryColor; } - return EnumHoneyComb.get(itemStack).color[1]; + return comb.secondaryColor; } @Override diff --git a/src/main/java/binnie/extrabees/products/ItemHoneyDrop.java b/src/main/java/binnie/extrabees/products/ItemHoneyDrop.java index 7b706117..b42f2bcb 100644 --- a/src/main/java/binnie/extrabees/products/ItemHoneyDrop.java +++ b/src/main/java/binnie/extrabees/products/ItemHoneyDrop.java @@ -27,9 +27,9 @@ public class ItemHoneyDrop extends ItemProduct { @Override public int getColorFromItemStack(ItemStack itemStack, int j) { if (j == 0) { - return EnumHoneyDrop.get(itemStack).color[0]; + return EnumHoneyDrop.get(itemStack).primaryColor; } - return EnumHoneyDrop.get(itemStack).color[1]; + return EnumHoneyDrop.get(itemStack).secondaryColor; } @Override diff --git a/src/main/java/binnie/extrabees/products/ItemProduct.java b/src/main/java/binnie/extrabees/products/ItemProduct.java index ecbd9b02..e7c8ac73 100644 --- a/src/main/java/binnie/extrabees/products/ItemProduct.java +++ b/src/main/java/binnie/extrabees/products/ItemProduct.java @@ -11,10 +11,10 @@ public class ItemProduct extends Item { protected IItemEnum[] types; public ItemProduct(IItemEnum[] types) { + this.types = types; setMaxStackSize(64); setMaxDamage(0); setHasSubtypes(true); - this.types = types; } public IItemEnum get(ItemStack stack) { @@ -26,15 +26,15 @@ public class ItemProduct extends Item { } @Override - public String getItemStackDisplayName(ItemStack itemstack) { - return get(itemstack).getName(itemstack); + public String getItemStackDisplayName(ItemStack stack) { + return get(stack).getName(stack); } @Override - public void getSubItems(Item par1, CreativeTabs par2CreativeTabs, List itemList) { + public void getSubItems(Item item, CreativeTabs tab, List list) { for (IItemEnum type : types) { if (type.isActive()) { - itemList.add(new ItemStack(this, 1, type.ordinal())); + list.add(new ItemStack(this, 1, type.ordinal())); } } } diff --git a/src/main/java/binnie/extrabees/products/ItemPropolis.java b/src/main/java/binnie/extrabees/products/ItemPropolis.java index 64508f8d..560727c4 100644 --- a/src/main/java/binnie/extrabees/products/ItemPropolis.java +++ b/src/main/java/binnie/extrabees/products/ItemPropolis.java @@ -17,9 +17,9 @@ public class ItemPropolis extends ItemProduct { @Override public int getColorFromItemStack(ItemStack itemStack, int j) { if (j == 0) { - return EnumPropolis.get(itemStack).colour[0]; + return EnumPropolis.get(itemStack).primaryColor; } - return EnumPropolis.get(itemStack).colour[1]; + return EnumPropolis.get(itemStack).secondaryColor; } @Override diff --git a/src/main/java/binnie/extrabees/worldgen/BlockExtraBeeHive.java b/src/main/java/binnie/extrabees/worldgen/BlockExtraBeeHive.java index 8e3a1fa4..a958413f 100644 --- a/src/main/java/binnie/extrabees/worldgen/BlockExtraBeeHive.java +++ b/src/main/java/binnie/extrabees/worldgen/BlockExtraBeeHive.java @@ -63,7 +63,7 @@ public class BlockExtraBeeHive extends Block { @Override public ArrayList getDrops(World world, int x, int y, int z, int metadata, int fortune) { - ArrayList ret = new ArrayList(); + ArrayList ret = new ArrayList<>(); List dropList = EnumHiveType.values()[metadata].drops; Collections.shuffle(dropList); int tries = 0; diff --git a/src/main/java/binnie/extratrees/alcohol/drink/BlockDrink.java b/src/main/java/binnie/extratrees/alcohol/drink/BlockDrink.java deleted file mode 100644 index f7663e9a..00000000 --- a/src/main/java/binnie/extratrees/alcohol/drink/BlockDrink.java +++ /dev/null @@ -1,45 +0,0 @@ -package binnie.extratrees.alcohol.drink; - -import binnie.extratrees.alcohol.ModuleAlcohol; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.block.BlockContainer; -import net.minecraft.block.material.Material; -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.world.World; - -// TODO unused class? -public class BlockDrink extends BlockContainer { - public BlockDrink() { - super(Material.glass); - setBlockName("drink"); - setCreativeTab(CreativeTabs.tabTools); - } - - @Override - @SideOnly(Side.CLIENT) - public int getRenderBlockPass() { - return 1; - } - - @Override - public TileEntity createNewTileEntity(World world, int meta) { - return new TileEntityDrink(); - } - - @Override - public int getRenderType() { - return ModuleAlcohol.drinkRendererID; - } - - @Override - public boolean isNormalCube() { - return false; - } - - @Override - public boolean isOpaqueCube() { - return true; - } -} diff --git a/src/main/java/binnie/extratrees/alcohol/drink/BlockDrinkRenderer.java b/src/main/java/binnie/extratrees/alcohol/drink/BlockDrinkRenderer.java deleted file mode 100644 index 89babb02..00000000 --- a/src/main/java/binnie/extratrees/alcohol/drink/BlockDrinkRenderer.java +++ /dev/null @@ -1,48 +0,0 @@ -package binnie.extratrees.alcohol.drink; - -import binnie.extratrees.alcohol.ModuleAlcohol; -import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; -import net.minecraft.block.Block; -import net.minecraft.client.renderer.RenderBlocks; -import net.minecraft.client.renderer.Tessellator; -import net.minecraft.init.Blocks; -import net.minecraft.world.IBlockAccess; -import org.lwjgl.opengl.GL11; - -// TODO unused class? -public class BlockDrinkRenderer implements ISimpleBlockRenderingHandler { - @Override - public void renderInventoryBlock(Block block, int metadata, int modelId, RenderBlocks renderer) { - // ignored - } - - @Override - public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks renderer) { - GL11.glPushMatrix(); - Tessellator.instance.setColorRGBA(255, 255, 255, 150); - Tessellator tess = Tessellator.instance; - renderer.renderFaceYPos(block, x, y, z, Blocks.dirt.getIcon(0, 0)); - float s = 0.0625f; - - for (int h = 0; h < 16; ++h) { - float d1 = 8.0f * s; - float h2 = h * s; - tess.addVertexWithUV(x + 0.5f - d1, y + h2, z + 0.5f - d1, 0.0, 0.0); - tess.addVertexWithUV(x + 0.5f - d1, y + h2, z + 0.5f - d1, 0.0, 0.0); - tess.addVertexWithUV(x + 0.5f + d1, y + h2, z + 0.5f - d1, 0.0, 0.0); - tess.addVertexWithUV(x + 0.5f + d1, y + h2, z + 0.5f - d1, 0.0, 0.0); - } - GL11.glPopMatrix(); - return false; - } - - @Override - public boolean shouldRender3DInInventory(int modelId) { - return false; - } - - @Override - public int getRenderId() { - return ModuleAlcohol.drinkRendererID; - } -} diff --git a/src/main/java/binnie/extratrees/api/IDesignMaterial.java b/src/main/java/binnie/extratrees/api/IDesignMaterial.java index 1c6a4cc2..18eb84e3 100644 --- a/src/main/java/binnie/extratrees/api/IDesignMaterial.java +++ b/src/main/java/binnie/extratrees/api/IDesignMaterial.java @@ -7,5 +7,5 @@ public interface IDesignMaterial { String getName(); - int getColour(); + int getColor(); } diff --git a/src/main/java/binnie/extratrees/block/BlockBranch.java b/src/main/java/binnie/extratrees/block/BlockBranch.java deleted file mode 100644 index 8cc460e3..00000000 --- a/src/main/java/binnie/extratrees/block/BlockBranch.java +++ /dev/null @@ -1,135 +0,0 @@ -package binnie.extratrees.block; - -import binnie.core.block.BlockMetadata; -import binnie.core.block.IBlockMetadata; -import binnie.core.block.TileEntityMetadata; -import binnie.extratrees.ExtraTrees; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import forestry.api.core.Tabs; -import net.minecraft.block.Block; -import net.minecraft.block.BlockLog; -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.IIcon; -import net.minecraft.util.MovingObjectPosition; -import net.minecraft.world.IBlockAccess; -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; - -import java.util.ArrayList; -import java.util.List; - -// TODO unused class? -public class BlockBranch extends BlockLog implements IBlockMetadata { - public BlockBranch() { - setCreativeTab(Tabs.tabArboriculture); - setBlockName("branch"); - setResistance(5.0f); - setHardness(2.0f); - setStepSound(Block.soundTypeWood); - } - - @Override - public void getSubBlocks(Item par1, CreativeTabs par2CreativeTabs, List itemList) { - for (int i = 0; i < ILogType.ExtraTreeLog.values().length; ++i) { - itemList.add(TileEntityMetadata.getItemStack(this, i)); - } - } - - @Override - @SideOnly(Side.CLIENT) - public IIcon getIcon(IBlockAccess world, int x, int y, int z, int side) { - TileEntityMetadata tile = TileEntityMetadata.getTile(world, x, y, z); - if (tile != null) { - return getIcon(side, tile.getTileMetadata(), world.getBlockMetadata(x, y, z)); - } - return super.getIcon(world, x, y, z, side); - } - - public IIcon getIcon(int side, int tileMeta, int blockMeta) { - int oriented = blockMeta & 0xC; - ILogType.ExtraTreeLog log = ILogType.ExtraTreeLog.values()[tileMeta]; - if (side > 3) { - return log.getTrunk(); - } - return log.getBark(); - } - - @Override - public IIcon getIcon(int side, int tileMeta) { - return getIcon(side, tileMeta, 0); - } - - @Override - public int getRenderType() { - return ExtraTrees.branchRenderId; - } - - @Override - public void dropAsStack(World world, int x, int y, int z, ItemStack itemStack) { - dropBlockAsItem(world, x, y, z, itemStack); - } - - @Override - public ArrayList getDrops(World world, int x, int y, int z, int blockMeta, int fortune) { - return BlockMetadata.getBlockDropped(this, world, x, y, z, blockMeta); - } - - @Override - public boolean removedByPlayer(World world, EntityPlayer player, int x, int y, int z) { - return BlockMetadata.breakBlock(this, player, world, x, y, z); - } - - @Override - public TileEntity createNewTileEntity(World world, int meta) { - return new TileEntityMetadata(); - } - - @Override - public boolean hasTileEntity(int meta) { - return true; - } - - @Override - public boolean onBlockEventReceived(World world, int x, int y, int z, int eventId, int eventType) { - super.onBlockEventReceived(world, x, y, z, eventId, eventType); - TileEntity tileentity = world.getTileEntity(x, y, z); - return tileentity != null && tileentity.receiveClientEvent(eventId, eventType); - } - - @Override - public int getDroppedMeta(int blockMeta, int tileMeta) { - return tileMeta; - } - - @Override - public String getBlockName(ItemStack itemStack) { - int meta = TileEntityMetadata.getItemDamage(itemStack); - return ILogType.ExtraTreeLog.values()[meta].getName() + " Branch"; - } - - @Override - public void addBlockTooltip(ItemStack itemStack, List tooltip) { - // ignored - } - - @Override - public int getPlacedMeta(ItemStack itemStack, World world, int x, int y, int z, ForgeDirection direction) { - return TileEntityMetadata.getItemDamage(itemStack); - } - - @Override - public void breakBlock(World world, int x, int y, int z, Block block, int side) { - super.breakBlock(world, x, y, z, block, side); - world.removeTileEntity(x, y, z); - } - - @Override - public ItemStack getPickBlock(MovingObjectPosition target, World world, int x, int y, int z) { - return BlockMetadata.getPickBlock(world, x, y, z); - } -} diff --git a/src/main/java/binnie/extratrees/block/BlockETDoor.java b/src/main/java/binnie/extratrees/block/BlockETDoor.java index 973aabb1..0879606c 100644 --- a/src/main/java/binnie/extratrees/block/BlockETDoor.java +++ b/src/main/java/binnie/extratrees/block/BlockETDoor.java @@ -114,11 +114,11 @@ public class BlockETDoor extends BlockDoor implements IBlockMetadata { int i1 = getFullMetadata(blockAccess, x, y, z); if ((i1 & 0x8) != 0) { int meta = TileEntityMetadata.getTileMetadata(blockAccess, x, y - 1, z); - return WoodManager.getPlankType(meta & 0xFF).getColour(); + return WoodManager.getPlankType(meta & 0xFF).getColor(); } int meta = TileEntityMetadata.getTileMetadata(blockAccess, x, y, z); - return WoodManager.getPlankType(meta & 0xFF).getColour(); + return WoodManager.getPlankType(meta & 0xFF).getColor(); } public int getFullMetadata(IBlockAccess blockAccess, int x, int y, int pzr4) { @@ -156,8 +156,7 @@ public class BlockETDoor extends BlockDoor implements IBlockMetadata { } @Override - // TODO fix deprecated code - public boolean removedByPlayer(World world, EntityPlayer player, int x, int y, int z) { + public boolean removedByPlayer(World world, EntityPlayer player, int x, int y, int z, boolean willHarvest) { return BlockMetadata.breakBlock(this, player, world, x, y, z); } diff --git a/src/main/java/binnie/extratrees/block/ItemETDoor.java b/src/main/java/binnie/extratrees/block/ItemETDoor.java index 7b12fc61..a6d7e219 100644 --- a/src/main/java/binnie/extratrees/block/ItemETDoor.java +++ b/src/main/java/binnie/extratrees/block/ItemETDoor.java @@ -108,6 +108,6 @@ public class ItemETDoor extends ItemMetadata { @Override @SideOnly(Side.CLIENT) public int getColorFromItemStack(ItemStack stack, int meta) { - return WoodManager.getPlankType((stack == null) ? 0 : (stack.getItemDamage() & 0xFF)).getColour(); + return WoodManager.getPlankType((stack == null) ? 0 : (stack.getItemDamage() & 0xFF)).getColor(); } } diff --git a/src/main/java/binnie/extratrees/block/PlankType.java b/src/main/java/binnie/extratrees/block/PlankType.java index dfd057a8..66f45634 100644 --- a/src/main/java/binnie/extratrees/block/PlankType.java +++ b/src/main/java/binnie/extratrees/block/PlankType.java @@ -84,7 +84,7 @@ public class PlankType { } @Override - public int getColour() { + public int getColor() { return color; } @@ -133,7 +133,7 @@ public class PlankType { } @Override - public int getColour() { + public int getColor() { return color; } @@ -198,7 +198,7 @@ public class PlankType { } @Override - public int getColour() { + public int getColor() { return color; } @@ -248,7 +248,7 @@ public class PlankType { } @Override - public int getColour() { + public int getColor() { return color; } diff --git a/src/main/java/binnie/extratrees/block/decor/ItemHedge.java b/src/main/java/binnie/extratrees/block/decor/ItemHedge.java deleted file mode 100644 index 6b8d962e..00000000 --- a/src/main/java/binnie/extratrees/block/decor/ItemHedge.java +++ /dev/null @@ -1,19 +0,0 @@ -package binnie.extratrees.block.decor; - -import binnie.extratrees.genetics.LeafType; -import net.minecraft.block.Block; -import net.minecraft.item.ItemBlockWithMetadata; -import net.minecraft.item.ItemStack; - -// TODO unused class? -public class ItemHedge extends ItemBlockWithMetadata { - public ItemHedge(Block block) { - super(block, block); - } - - @Override - public String getItemStackDisplayName(ItemStack item) { - int meta = item.getItemDamage(); - return LeafType.values()[meta % 6].description + ((meta >= 8) ? " Full" : "") + " Hedge"; - } -} diff --git a/src/main/java/binnie/extratrees/carpentry/DesignBlock.java b/src/main/java/binnie/extratrees/carpentry/DesignBlock.java index 08bba482..09807f66 100644 --- a/src/main/java/binnie/extratrees/carpentry/DesignBlock.java +++ b/src/main/java/binnie/extratrees/carpentry/DesignBlock.java @@ -64,61 +64,11 @@ public class DesignBlock { } public int getPrimaryColour() { - return getPrimaryMaterial().getColour(); + return getPrimaryMaterial().getColor(); } public int getSecondaryColour() { - return getSecondaryMaterial().getColour(); - } - - // TODO unused method? - ForgeDirection getRotation(ForgeDirection dir, ModuleCarpentry.Axis axis) { - if (axis == ModuleCarpentry.Axis.Y) { - switch (dir) { - case EAST: - return ForgeDirection.NORTH; - - case NORTH: - return ForgeDirection.WEST; - - case SOUTH: - return ForgeDirection.EAST; - - case WEST: - return ForgeDirection.SOUTH; - } - return dir; - } else if (axis == ModuleCarpentry.Axis.X) { - switch (dir) { - case EAST: - return ForgeDirection.UP; - - case UP: - return ForgeDirection.WEST; - - case WEST: - return ForgeDirection.DOWN; - - case DOWN: - return ForgeDirection.EAST; - } - return dir; - } else { - switch (dir) { - case SOUTH: - return ForgeDirection.UP; - - case UP: - return ForgeDirection.NORTH; - - case NORTH: - return ForgeDirection.DOWN; - - case DOWN: - return ForgeDirection.SOUTH; - } - return dir; - } + return getSecondaryMaterial().getColor(); } public ILayout getLayout(ForgeDirection dir) { diff --git a/src/main/java/binnie/extratrees/carpentry/GlassType.java b/src/main/java/binnie/extratrees/carpentry/GlassType.java index 28a14b59..4a2a6070 100644 --- a/src/main/java/binnie/extratrees/carpentry/GlassType.java +++ b/src/main/java/binnie/extratrees/carpentry/GlassType.java @@ -72,7 +72,7 @@ public class GlassType implements IDesignMaterial { } @Override - public int getColour() { + public int getColor() { return colour; } diff --git a/src/main/java/binnie/extratrees/craftgui/dictionary/DialogBreweryRecipe.java b/src/main/java/binnie/extratrees/craftgui/dictionary/DialogBreweryRecipe.java deleted file mode 100644 index 2ab35d7a..00000000 --- a/src/main/java/binnie/extratrees/craftgui/dictionary/DialogBreweryRecipe.java +++ /dev/null @@ -1,19 +0,0 @@ -package binnie.extratrees.craftgui.dictionary; - -import binnie.core.craftgui.IWidget; -import binnie.core.craftgui.minecraft.Dialog; - -// TODO unused class? -public class DialogBreweryRecipe extends Dialog { - public DialogBreweryRecipe(IWidget parent, float w, float h) { - super(parent, w, h); - } - - @Override - public void initialise() { - } - - @Override - public void onClose() { - } -} diff --git a/src/main/java/binnie/extratrees/craftgui/kitchen/ControlDropdownButton.java b/src/main/java/binnie/extratrees/craftgui/kitchen/ControlDropdownButton.java deleted file mode 100644 index f5d3d642..00000000 --- a/src/main/java/binnie/extratrees/craftgui/kitchen/ControlDropdownButton.java +++ /dev/null @@ -1,28 +0,0 @@ -package binnie.extratrees.craftgui.kitchen; - -import binnie.core.craftgui.IWidget; -import binnie.core.craftgui.controls.button.ControlButton; -import binnie.core.craftgui.events.EventMouse; -import binnie.core.craftgui.minecraft.Window; - -// TODO unused class? -public abstract class ControlDropdownButton extends ControlButton { - public ControlDropdownButton(IWidget parent, float x, float y, float width, float height, String text) { - super(parent, x, y, width, height, text); - addSelfEventHandler(new EventMouse.Down.Handler() { - @Override - public void onEvent(EventMouse.Down event) { - ControlDropDownMenu menu = getWidget(ControlDropDownMenu.class); - deleteChild(getWidget(ControlDropDownMenu.class)); - if (getWidget(ControlDropDownMenu.class) == null) { - menu = createDropDownMenu(); - Window.get(getWidget()).setFocusedWidget(menu); - } else { - deleteChild(getWidget(ControlDropDownMenu.class)); - } - } - }); - } - - public abstract ControlDropDownMenu createDropDownMenu(); -} diff --git a/src/main/java/binnie/extratrees/craftgui/kitchen/ControlSlotGlassware.java b/src/main/java/binnie/extratrees/craftgui/kitchen/ControlSlotGlassware.java deleted file mode 100644 index 20a8ef0c..00000000 --- a/src/main/java/binnie/extratrees/craftgui/kitchen/ControlSlotGlassware.java +++ /dev/null @@ -1,32 +0,0 @@ -package binnie.extratrees.craftgui.kitchen; - -import binnie.core.craftgui.IWidget; -import binnie.core.craftgui.controls.core.IControlValue; -import binnie.core.craftgui.minecraft.control.ControlSlotBase; -import binnie.extratrees.alcohol.Glassware; -import net.minecraft.item.ItemStack; - -// TODO unused class? -public class ControlSlotGlassware extends ControlSlotBase implements IControlValue { - Glassware glassware; - - public ControlSlotGlassware(IWidget parent, int x, int y, Glassware glassware) { - super(parent, x, y); - this.glassware = glassware; - } - - @Override - public Glassware getValue() { - return glassware; - } - - @Override - public void setValue(Glassware value) { - glassware = value; - } - - @Override - public ItemStack getItemStack() { - return glassware.get(1); - } -} diff --git a/src/main/java/binnie/extratrees/genetics/ExtraTreeGrowthProvider.java b/src/main/java/binnie/extratrees/genetics/ExtraTreeGrowthProvider.java deleted file mode 100644 index d7aba693..00000000 --- a/src/main/java/binnie/extratrees/genetics/ExtraTreeGrowthProvider.java +++ /dev/null @@ -1,55 +0,0 @@ -package binnie.extratrees.genetics; - -import forestry.api.arboriculture.EnumGrowthConditions; -import forestry.api.arboriculture.IAlleleGrowth; -import forestry.api.arboriculture.IGrowthProvider; -import forestry.api.arboriculture.ITreeGenome; -import net.minecraft.world.World; - -// TODO unused class? -public class ExtraTreeGrowthProvider implements IAlleleGrowth, IGrowthProvider { - @Override - public String getUID() { - return "extratrees.fruit." + toString().toLowerCase(); - } - - @Override - public boolean isDominant() { - return true; - } - - @Override - public IGrowthProvider getProvider() { - return this; - } - - @Override - public boolean canGrow(ITreeGenome genome, World world, int xPos, int yPos, int zPos, int expectedGirth, int expectedHeight) { - return false; - } - - @Override - public EnumGrowthConditions getGrowthConditions(ITreeGenome genome, World world, int xPos, int yPos, int zPos) { - return null; - } - - @Override - public String getDescription() { - return null; - } - - @Override - public String[] getInfo() { - return null; - } - - @Override - public String getName() { - return getProvider().getDescription(); - } - - @Override - public String getUnlocalizedName() { - return getUID(); - } -} diff --git a/src/main/java/binnie/extratrees/machines/Infuser.java b/src/main/java/binnie/extratrees/machines/Infuser.java deleted file mode 100644 index a3a35189..00000000 --- a/src/main/java/binnie/extratrees/machines/Infuser.java +++ /dev/null @@ -1,161 +0,0 @@ -package binnie.extratrees.machines; - -import binnie.core.craftgui.minecraft.IMachineInformation; -import binnie.core.machines.Machine; -import binnie.core.machines.TileEntityMachine; -import binnie.core.machines.inventory.ComponentInventorySlots; -import binnie.core.machines.inventory.ComponentTankContainer; -import binnie.core.machines.inventory.MachineSide; -import binnie.core.machines.inventory.TankValidator; -import binnie.core.machines.power.ComponentPowerReceptor; -import binnie.core.machines.power.ComponentProcessSetCost; -import binnie.core.machines.power.ErrorState; -import binnie.core.machines.power.IProcess; -import binnie.extratrees.core.ExtraTreeTexture; -import binnie.extratrees.core.ExtraTreesGUID; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraftforge.fluids.Fluid; -import net.minecraftforge.fluids.FluidStack; - -import java.util.HashMap; -import java.util.Map; - -public class Infuser { - public static int tankInput = 0; - public static int tankOutput = 1; - static Map recipes = new HashMap<>(); - - public static FluidStack getOutput(FluidStack fluid, ItemStack stack) { - if (fluid == null) { - return null; - } - return Infuser.recipes.get(fluid.getFluid()); - } - - public static boolean isValidInputLiquid(FluidStack fluid) { - return Infuser.recipes.containsKey(fluid.getFluid()); - } - - public static boolean isValidOutputLiquid(FluidStack fluid) { - for (Map.Entry entry : Infuser.recipes.entrySet()) { - if (entry.getValue().isFluidEqual(fluid)) { - return true; - } - } - return false; - } - - public static void addRecipe(FluidStack input, FluidStack output) { - Infuser.recipes.put(input.getFluid(), output); - } - - // TODO unused class? - public static class PackageInfuser extends ExtraTreeMachine.PackageExtraTreeMachine implements IMachineInformation { - public PackageInfuser() { - super("infuser", ExtraTreeTexture.infuserTexture, true); - } - - @Override - public void createMachine(Machine machine) { - new ExtraTreeMachine.ComponentExtraTreeGUI(machine, ExtraTreesGUID.Infuser); - ComponentInventorySlots inventory = new ComponentInventorySlots(machine); - ComponentTankContainer tanks = new ComponentTankContainer(machine); - tanks.addTank(Infuser.tankInput, "input", 5000); - tanks.getTankSlot(Infuser.tankInput).setValidator(new TankValidatorInfuserInput()); - tanks.getTankSlot(Infuser.tankInput).setOutputSides(MachineSide.TopAndBottom); - tanks.addTank(Infuser.tankOutput, "output", 5000); - tanks.getTankSlot(Infuser.tankOutput).setValidator(new TankValidatorInfuserOutput()); - tanks.getTankSlot(Infuser.tankOutput).setReadOnly(); - tanks.getTankSlot(Infuser.tankOutput).setOutputSides(MachineSide.Sides); - new ComponentPowerReceptor(machine); - new ComponentInfuserLogic(machine); - } - - @Override - public TileEntity createTileEntity() { - return new TileEntityMachine(this); - } - } - - public static class ComponentInfuserLogic extends ComponentProcessSetCost implements IProcess { - protected ItemStack infusing; - - public ComponentInfuserLogic(Machine machine) { - super(machine, 16000, 800); - } - - @Override - public int getProcessEnergy() { - return getProcessLength() * 2; - } - - @Override - public int getProcessLength() { - return 20; - } - - @Override - public ErrorState canWork() { - if (getUtil().isTankEmpty(Infuser.tankInput)) { - return new ErrorState.InsufficientLiquid("No Input Liquid", Infuser.tankInput); - } - return super.canWork(); - } - - @Override - public ErrorState canProgress() { - if (!getUtil().isTankEmpty(Infuser.tankOutput) && getOutput() != null && !getOutput().isFluidEqual(getUtil().getFluid(Infuser.tankOutput))) { - return new ErrorState.Tank("No Room", "No room for liquid", new int[]{Infuser.tankOutput}); - } - if (getUtil().getFluid(Infuser.tankOutput) != null && !getUtil().getFluid(Infuser.tankOutput).isFluidEqual(getOutput())) { - return new ErrorState.TankSpace("Different fluid in tank", Infuser.tankOutput); - } - return super.canProgress(); - } - - private FluidStack getOutput() { - return Infuser.getOutput(getUtil().getFluid(Infuser.tankInput), infusing); - } - - @Override - protected void onFinishTask() { - FluidStack output = getOutput().copy(); - getUtil().fillTank(Infuser.tankOutput, output); - } - - @Override - protected void onTickTask() { - // ignored - } - - @Override - public String getTooltip() { - return "Infusing"; - } - } - - public static class TankValidatorInfuserInput extends TankValidator { - @Override - public boolean isValid(FluidStack liquid) { - return Infuser.isValidInputLiquid(liquid); - } - - @Override - public String getTooltip() { - return "Infusable Liquids"; - } - } - - public static class TankValidatorInfuserOutput extends TankValidator { - @Override - public boolean isValid(FluidStack liquid) { - return Infuser.isValidOutputLiquid(liquid); - } - - @Override - public String getTooltip() { - return "Infused Liquids"; - } - } -} diff --git a/src/main/java/binnie/extratrees/village/VillageHandlerExtraTrees.java b/src/main/java/binnie/extratrees/village/VillageHandlerExtraTrees.java deleted file mode 100644 index 5f2576cc..00000000 --- a/src/main/java/binnie/extratrees/village/VillageHandlerExtraTrees.java +++ /dev/null @@ -1,35 +0,0 @@ -package binnie.extratrees.village; - -import cpw.mods.fml.common.registry.VillagerRegistry; -import net.minecraft.util.MathHelper; -import net.minecraft.world.gen.structure.MapGenStructureIO; -import net.minecraft.world.gen.structure.StructureVillagePieces; - -import java.util.List; -import java.util.Random; - -// TODO Unused class? -public class VillageHandlerExtraTrees implements VillagerRegistry.IVillageCreationHandler { - public static void registerVillageComponents() { - try { - MapGenStructureIO.func_143031_a(ComponentVillageGrove.class, "ExtraTrees:Grove"); - } catch (Throwable t) { - // ignored - } - } - - @Override - public StructureVillagePieces.PieceWeight getVillagePieceWeight(Random random, int size) { - return new StructureVillagePieces.PieceWeight(ComponentVillageGrove.class, 505, MathHelper.getRandomIntegerInRange(random, size, 1 + size)); - } - - @Override - public Class getComponentClass() { - return ComponentVillageGrove.class; - } - - @Override - public Object buildComponent(StructureVillagePieces.PieceWeight villagePiece, StructureVillagePieces.Start startPiece, List pieces, Random random, int p1, int p2, int p3, int p4, int p5) { - return ComponentVillageGrove.buildComponent(startPiece, pieces, random, p1, p2, p3, p4, p5); - } -} diff --git a/src/main/java/binnie/extratrees/worldgen/TreeGenBase.java b/src/main/java/binnie/extratrees/worldgen/TreeGenBase.java deleted file mode 100644 index 7d919119..00000000 --- a/src/main/java/binnie/extratrees/worldgen/TreeGenBase.java +++ /dev/null @@ -1,75 +0,0 @@ -package binnie.extratrees.worldgen; - -import forestry.api.arboriculture.ITree; -import forestry.api.world.ITreeGenData; -import net.minecraft.world.World; -import net.minecraft.world.gen.feature.WorldGenerator; - -import java.util.Random; - -// TODO unused class? -public class TreeGenBase extends WorldGenerator { - protected ITree tree; - protected ITreeGenData treeGen; - protected World world; - protected Random rand; - protected int startX; - protected int startY; - protected int startZ; - protected int girth; - protected int height; - protected int minHeight; - protected int maxHeight; - protected boolean spawnPods; - protected int minPodHeight; - - public TreeGenBase() { - minHeight = 4; - maxHeight = 80; - spawnPods = false; - minPodHeight = 3; - } - - protected int randBetween(int a, int b) { - return a + rand.nextInt(b - a); - } - - protected float randBetween(float a, float b) { - return a + rand.nextFloat() * (b - a); - } - - @Override - public boolean generate(World world, Random random, int x, int y, int z) { - this.world = world; - startX = x; - startY = y; - startZ = z; - girth = tree.getGirth(world, x, y, z); - height = (int) (randBetween(getHeight()[0], getHeight()[1]) * tree.getGenome().getHeight()); - - if (tree.canGrow(world, x, y, z, girth, height)) { - generate(); - return true; - } - return false; - } - - protected void generate() { - } - - protected int[] getHeight() { - return new int[]{5, 2}; - } - - private static class Vector { - int x; - int y; - int z; - - public Vector(int x, int y, int z) { - this.x = x; - this.y = y; - this.z = z; - } - } -} diff --git a/src/main/java/binnie/genetics/craftgui/ControlGene.java b/src/main/java/binnie/genetics/craftgui/ControlGene.java index 69ba254e..b7cfe80b 100644 --- a/src/main/java/binnie/genetics/craftgui/ControlGene.java +++ b/src/main/java/binnie/genetics/craftgui/ControlGene.java @@ -80,8 +80,8 @@ public class ControlGene extends Control implements IControlValue, IToolt @Override public void onRenderBackground() { if (isMouseOver() && canFill(Window.get(this).getHeldItemStack())) { - CraftGUI.Render.solid(getArea(), -1); - CraftGUI.Render.solid(getArea().inset(1), -12303292); + CraftGUI.Render.solid(getArea(), 0xffffffff); + CraftGUI.Render.solid(getArea().inset(1), 0xff444444); } CraftGUI.Render.colour(-1); diff --git a/src/main/java/binnie/genetics/craftgui/ControlProcessTemporary.java b/src/main/java/binnie/genetics/craftgui/ControlProcessTemporary.java deleted file mode 100644 index d06042b4..00000000 --- a/src/main/java/binnie/genetics/craftgui/ControlProcessTemporary.java +++ /dev/null @@ -1,22 +0,0 @@ -package binnie.genetics.craftgui; - -import binnie.core.craftgui.CraftGUI; -import binnie.core.craftgui.IWidget; -import binnie.core.craftgui.geometry.IArea; -import binnie.core.craftgui.geometry.IPoint; -import binnie.core.craftgui.minecraft.control.ControlMachineProgress; - -// TODO unused class? -public class ControlProcessTemporary extends ControlMachineProgress { - public ControlProcessTemporary(IWidget parent, int x, int y, int width, int height) { - super(parent, x, y, null, null, null); - setSize(new IPoint(width, height)); - } - - @Override - public void onRenderBackground() { - CraftGUI.Render.solid(getArea(), -4868683); - float w = getSize().y() * progress / 100.0f; - CraftGUI.Render.solid(new IArea(getArea().x(), getArea().y(), w, getArea().h()), -65536); - } -} diff --git a/src/main/java/binnie/genetics/craftgui/WindowAcclimatiser.java b/src/main/java/binnie/genetics/craftgui/WindowAcclimatiser.java index 3eb047c2..ad59c501 100644 --- a/src/main/java/binnie/genetics/craftgui/WindowAcclimatiser.java +++ b/src/main/java/binnie/genetics/craftgui/WindowAcclimatiser.java @@ -10,21 +10,17 @@ import binnie.core.craftgui.minecraft.control.ControlSlot; import binnie.core.craftgui.minecraft.control.ControlSlotArray; import binnie.core.craftgui.resource.Texture; import binnie.core.craftgui.resource.minecraft.StandardTexture; +import binnie.core.util.I18N; import binnie.extrabees.core.ExtraBeeTexture; import binnie.genetics.Genetics; -import binnie.genetics.machine.Acclimatiser; +import binnie.genetics.machine.acclimatiser.Acclimatiser; import cpw.mods.fml.relauncher.Side; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.IInventory; public class WindowAcclimatiser extends WindowMachine { - public static int[] slotReserve = new int[]{0, 1, 2, 3}; - public static int slotTarget = 4; - public static int[] slotAcclimatiser = new int[]{5, 6, 7}; - public static int[] slotDone = new int[]{8, 9, 10, 11}; - - protected static Texture ProgressBase = new StandardTexture(64, 0, 130, 21, ExtraBeeTexture.GUIProgress.getTexture()); - protected static Texture Progress = new StandardTexture(64, 21, 130, 21, ExtraBeeTexture.GUIProgress.getTexture()); + protected static Texture progressBase = new StandardTexture(64, 0, 130, 21, ExtraBeeTexture.GUIProgress.getTexture()); + protected static Texture progress = new StandardTexture(64, 21, 130, 21, ExtraBeeTexture.GUIProgress.getTexture()); public WindowAcclimatiser(EntityPlayer player, IInventory inventory, Side side) { super(280, 198, player, inventory, side); @@ -36,15 +32,15 @@ public class WindowAcclimatiser extends WindowMachine { @Override public void initialiseClient() { - setTitle("Acclimatiser"); - int x = 16; + setTitle(I18N.localise(Genetics.instance, "machine.labMachine.acclimatiser")); + int x = 59; int y = 32; - new ControlSlotArray(this, x, y, 2, 2).create(Acclimatiser.slotReserve); + new ControlSlotArray(this, x, y, 2, 2).create(Acclimatiser.SLOT_RESERVE); x += 54; new ControlSlot(this, x + 18, y).assign(4); - new ControlSlotArray(this, x, y + 18 + 18, 3, 1).create(Acclimatiser.slotAcclimatiser); + new ControlSlotArray(this, x, y + 18 + 18, 3, 1).create(Acclimatiser.SLOT_ACCLIMATISER); x += 72; - new ControlSlotArray(this, x, y, 2, 2).create(Acclimatiser.slotDone); + new ControlSlotArray(this, x, y, 2, 2).create(Acclimatiser.SLOT_DONE); new ControlEnergyBar(this, 21, 115, 16, 60, Position.Bottom); new ControlErrorState(this, 181.0f, 83.0f); new ControlPlayerInventory(this); @@ -52,7 +48,7 @@ public class WindowAcclimatiser extends WindowMachine { @Override public String getTitle() { - return "Acclimatiser"; + return I18N.localise(Genetics.instance, "machine.labMachine.acclimatiser"); } @Override @@ -62,6 +58,6 @@ public class WindowAcclimatiser extends WindowMachine { @Override protected String getName() { - return "Acclimatiser"; + return I18N.localise(Genetics.instance, "machine.labMachine.acclimatiser"); } } diff --git a/src/main/java/binnie/genetics/craftgui/WindowAnalyser.java b/src/main/java/binnie/genetics/craftgui/WindowAnalyser.java index 6a2c291e..be2b0e63 100644 --- a/src/main/java/binnie/genetics/craftgui/WindowAnalyser.java +++ b/src/main/java/binnie/genetics/craftgui/WindowAnalyser.java @@ -19,7 +19,7 @@ import binnie.core.craftgui.window.Panel; import binnie.extrabees.core.ExtraBeeTexture; import binnie.genetics.Genetics; import binnie.genetics.core.GeneticsTexture; -import binnie.genetics.machine.Analyser; +import binnie.genetics.machine.analyser.Analyser; import cpw.mods.fml.relauncher.Side; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.IInventory; @@ -42,7 +42,7 @@ public class WindowAnalyser extends WindowMachine { WindowAnalyser.Progress = new StandardTexture(66, 51, 66, 40, GeneticsTexture.GUIProcess.getTexture()); int x = 16; int y = 32; - new ControlSlotArray(this, x, y, 2, 3).create(Analyser.slotReserve); + new ControlSlotArray(this, x, y, 2, 3).create(Analyser.SLOT_RESERVE); x += 28; new ControlSlot(this, x, y + 54 + 8).assign(13); new ControlSlotCharge(this, x + 20, y + 54 + 8, 13).setColor(10040319); @@ -56,7 +56,7 @@ public class WindowAnalyser extends WindowMachine { new ControlSlot(this, x + 38 - 9, y + 25 - 9).assign(6); new ControlIconDisplay(this, x + 76 + 2, y + 18, GUIIcon.ArrowRight.getIcon()); x += 96; - new ControlSlotArray(this, x, y, 2, 3).create(Analyser.slotFinished); + new ControlSlotArray(this, x, y, 2, 3).create(Analyser.SLOT_FINISHED); x += 52; setTitle("Analyser"); new ControlPlayerInventory(this); diff --git a/src/main/java/binnie/genetics/craftgui/WindowGeneProject.java b/src/main/java/binnie/genetics/craftgui/WindowGeneProject.java deleted file mode 100644 index d840a80f..00000000 --- a/src/main/java/binnie/genetics/craftgui/WindowGeneProject.java +++ /dev/null @@ -1,30 +0,0 @@ -package binnie.genetics.craftgui; - -import binnie.core.AbstractMod; -import binnie.core.craftgui.minecraft.Window; -import binnie.genetics.Genetics; -import cpw.mods.fml.relauncher.Side; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.inventory.IInventory; - -// TODO unused class? -public class WindowGeneProject extends Window { - public WindowGeneProject(EntityPlayer player, IInventory inventory, Side side) { - super(100.0f, 100.0f, player, inventory, side); - } - - @Override - protected AbstractMod getMod() { - return Genetics.instance; - } - - @Override - protected String getName() { - return "GeneProjects"; - } - - @Override - public void initialiseClient() { - setTitle("Gene Projects"); - } -} diff --git a/src/main/java/binnie/genetics/craftgui/WindowGenepool.java b/src/main/java/binnie/genetics/craftgui/WindowGenepool.java index 1ef4e947..3255fcbb 100644 --- a/src/main/java/binnie/genetics/craftgui/WindowGenepool.java +++ b/src/main/java/binnie/genetics/craftgui/WindowGenepool.java @@ -17,7 +17,7 @@ import binnie.core.craftgui.resource.Texture; import binnie.core.craftgui.resource.minecraft.StandardTexture; import binnie.extrabees.core.ExtraBeeTexture; import binnie.genetics.Genetics; -import binnie.genetics.machine.Genepool; +import binnie.genetics.machine.genepool.Genepool; import cpw.mods.fml.relauncher.Side; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.IInventory; @@ -41,7 +41,7 @@ public class WindowGenepool extends WindowMachine { int y = 32; new ControlLiquidTank(this, x, y).setTankID(1); x += 26; - new ControlSlotArray(this, x, y + 3, 2, 3).create(Genepool.slotReserve); + new ControlSlotArray(this, x, y + 3, 2, 3).create(Genepool.SLOT_RESERVE); x += 38; new ControlIconDisplay(this, x, y + 3 + 18 + 1, GUIIcon.ArrowRight.getIcon()); x += 18; diff --git a/src/main/java/binnie/genetics/craftgui/WindowGenomeAssembler.java b/src/main/java/binnie/genetics/craftgui/WindowGenomeAssembler.java deleted file mode 100644 index f757a33c..00000000 --- a/src/main/java/binnie/genetics/craftgui/WindowGenomeAssembler.java +++ /dev/null @@ -1,34 +0,0 @@ -package binnie.genetics.craftgui; - -import binnie.core.AbstractMod; -import binnie.core.craftgui.minecraft.Window; -import binnie.genetics.Genetics; -import cpw.mods.fml.relauncher.Side; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.inventory.IInventory; - -// TODO unused class? -public class WindowGenomeAssembler extends WindowMachine { - public WindowGenomeAssembler(EntityPlayer player, IInventory inventory, Side side) { - super(320, 240, player, inventory, side); - } - - public static Window create(EntityPlayer player, IInventory inventory, Side side) { - return new WindowGenomeAssembler(player, inventory, side); - } - - @Override - public String getTitle() { - return "Genome Assembler"; - } - - @Override - protected AbstractMod getMod() { - return Genetics.instance; - } - - @Override - protected String getName() { - return "GenomeAssembler"; - } -} diff --git a/src/main/java/binnie/genetics/craftgui/WindowIncubator.java b/src/main/java/binnie/genetics/craftgui/WindowIncubator.java index d2ac683b..23db3081 100644 --- a/src/main/java/binnie/genetics/craftgui/WindowIncubator.java +++ b/src/main/java/binnie/genetics/craftgui/WindowIncubator.java @@ -16,7 +16,7 @@ import binnie.core.craftgui.resource.Texture; import binnie.core.craftgui.resource.minecraft.StandardTexture; import binnie.genetics.Genetics; import binnie.genetics.core.GeneticsTexture; -import binnie.genetics.machine.Incubator; +import binnie.genetics.machine.incubator.Incubator; import cpw.mods.fml.relauncher.Side; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.IInventory; @@ -40,7 +40,7 @@ public class WindowIncubator extends WindowMachine { int y = 32; new ControlLiquidTank(this, x, y).setTankID(0); x += 26; - new ControlSlotArray(this, x, y + 3, 1, 3).create(Incubator.slotQueue); + new ControlSlotArray(this, x, y + 3, 1, 3).create(Incubator.SLOT_QUEUE); x += 20; new ControlIconDisplay(this, x, y + 3 + 10, GUIIcon.ArrowRight.getIcon()); x += 18; @@ -49,7 +49,7 @@ public class WindowIncubator extends WindowMachine { x += 40; new ControlIconDisplay(this, x, y + 3 + 10, GUIIcon.ArrowRight.getIcon()); x += 18; - new ControlSlotArray(this, x, y + 3, 1, 3).create(Incubator.slotOutput); + new ControlSlotArray(this, x, y + 3, 1, 3).create(Incubator.SLOT_OUTPUT); x += 26; new ControlLiquidTank(this, x, y).setTankID(1); x += 34; diff --git a/src/main/java/binnie/genetics/craftgui/WindowIsolator.java b/src/main/java/binnie/genetics/craftgui/WindowIsolator.java index 942d7c32..bc5c47b3 100644 --- a/src/main/java/binnie/genetics/craftgui/WindowIsolator.java +++ b/src/main/java/binnie/genetics/craftgui/WindowIsolator.java @@ -17,7 +17,7 @@ import binnie.core.craftgui.resource.Texture; import binnie.core.craftgui.resource.minecraft.StandardTexture; import binnie.extrabees.core.ExtraBeeTexture; import binnie.genetics.Genetics; -import binnie.genetics.machine.Isolator; +import binnie.genetics.machine.isolator.Isolator; import cpw.mods.fml.relauncher.Side; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.IInventory; @@ -41,7 +41,7 @@ public class WindowIsolator extends WindowMachine { int y = 32; new ControlLiquidTank(this, x, y).setTankID(0); x += 26; - new ControlSlotArray(this, x, y + 3, 1, 3).create(Isolator.slotReserve); + new ControlSlotArray(this, x, y + 3, 1, 3).create(Isolator.SLOT_RESERVE); x += 20; new ControlIconDisplay(this, x, y + 3 + 1, GUIIcon.ArrowRight.getIcon()); x += 18; @@ -57,7 +57,7 @@ public class WindowIsolator extends WindowMachine { x += 20; new ControlIconDisplay(this, x, y + 3 + 1, GUIIcon.ArrowRight.getIcon()); x += 18; - new ControlSlotArray(this, x, y + 3, 2, 3).create(Isolator.slotFinished); + new ControlSlotArray(this, x, y + 3, 2, 3).create(Isolator.SLOT_FINISHED); new ControlEnergyBar(this, 260, 130, 16, 60, Position.Bottom); new ControlErrorState(this, 153.0f, 81.0f); new ControlPlayerInventory(this); diff --git a/src/main/java/binnie/genetics/craftgui/WindowPolymeriser.java b/src/main/java/binnie/genetics/craftgui/WindowPolymeriser.java index 236ff8c0..fd3dd029 100644 --- a/src/main/java/binnie/genetics/craftgui/WindowPolymeriser.java +++ b/src/main/java/binnie/genetics/craftgui/WindowPolymeriser.java @@ -17,7 +17,7 @@ import binnie.core.craftgui.resource.Texture; import binnie.core.craftgui.resource.minecraft.StandardTexture; import binnie.genetics.Genetics; import binnie.genetics.core.GeneticsTexture; -import binnie.genetics.machine.Polymeriser; +import binnie.genetics.machine.polymeriser.Polymeriser; import cpw.mods.fml.relauncher.Side; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.IInventory; @@ -42,7 +42,7 @@ public class WindowPolymeriser extends WindowMachine { super.initialiseClient(); int x = 16; int y = 38; - new ControlSlotArray(this, x, y, 1, 4).create(Polymeriser.slotSerumReserve); + new ControlSlotArray(this, x, y, 1, 4).create(Polymeriser.SLOT_SERUM_RESERVE); new ControlIconDisplay(this, x + 18, y + 1, GUIIcon.ArrowRight.getIcon()); x += 34; new ControlMachineProgress(this, x + 18, y - 6, WindowPolymeriser.ProgressBase, WindowPolymeriser.Progress, Position.Left); @@ -54,7 +54,7 @@ public class WindowPolymeriser extends WindowMachine { new ControlSlot(this, x + 30, y + 18 + 8).assign(1); new ControlSlotCharge(this, x + 30 + 20, y + 18 + 8, 1).setColor(16766976); x += 138; - new ControlSlotArray(this, x, y + 9, 2, 2).create(Polymeriser.slotSerumFinished); + new ControlSlotArray(this, x, y + 9, 2, 2).create(Polymeriser.SLOT_SERUM_FINISHED); ControlErrorState errorState = new ControlErrorState(this, 244.0f, 97.0f); new ControlPlayerInventory(this); } diff --git a/src/main/java/binnie/genetics/craftgui/WindowSplicer.java b/src/main/java/binnie/genetics/craftgui/WindowSplicer.java index a1a51aa2..1df57790 100644 --- a/src/main/java/binnie/genetics/craftgui/WindowSplicer.java +++ b/src/main/java/binnie/genetics/craftgui/WindowSplicer.java @@ -17,7 +17,7 @@ import binnie.core.craftgui.resource.minecraft.StandardTexture; import binnie.genetics.Genetics; import binnie.genetics.core.GeneticsTexture; import binnie.genetics.machine.inoculator.Inoculator; -import binnie.genetics.machine.Splicer; +import binnie.genetics.machine.splicer.Splicer; import cpw.mods.fml.relauncher.Side; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.IInventory; @@ -39,8 +39,8 @@ public class WindowSplicer extends WindowMachine { setTitle("Splicer"); int x = 16; new ControlSplicerProgress(this, 84.0f, 32.0f, w() - 172.0f, 102.0f); - CraftGUIUtil.horizontalGrid(x, 62.0f, new ControlSlotArray(this, 0, 0, 2, 1).create(Splicer.slotSerumReserve), new ControlIconDisplay(this, 0.0f, 0.0f, GUIIcon.ArrowRight.getIcon()), new ControlSlot(this, 0.0f, 0.0f).assign(0)); - new ControlSlotArray(this, x + 12, 84, 2, 1).create(Splicer.slotSerumExpended); + CraftGUIUtil.horizontalGrid(x, 62.0f, new ControlSlotArray(this, 0, 0, 2, 1).create(Splicer.SLOT_SERUM_RESERVE), new ControlIconDisplay(this, 0.0f, 0.0f, GUIIcon.ArrowRight.getIcon()), new ControlSlot(this, 0.0f, 0.0f).assign(0)); + new ControlSlotArray(this, x + 12, 84, 2, 1).create(Splicer.SLOT_SERUM_EXPENDED); new ControlIconDisplay(this, x + 12 + 36 + 4, 86.0f, GUIIcon.ArrowUpLeft.getIcon()); new ControlEnergyBar(this, 196, 64, 60, 16, Position.Left); new ControlErrorState(this, 218.0f, 86.0f); diff --git a/src/main/java/binnie/genetics/genetics/GeneProjectTracker.java b/src/main/java/binnie/genetics/genetics/GeneProjectTracker.java deleted file mode 100644 index 363add69..00000000 --- a/src/main/java/binnie/genetics/genetics/GeneProjectTracker.java +++ /dev/null @@ -1,119 +0,0 @@ -package binnie.genetics.genetics; - -import com.mojang.authlib.GameProfile; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.world.World; -import net.minecraft.world.WorldSavedData; - -import java.util.HashMap; -import java.util.LinkedHashSet; -import java.util.Map; -import java.util.Set; - -// TODO unused class? -public class GeneProjectTracker extends WorldSavedData { - Map projects; - Map> TeamInvites; - - public GeneProjectTracker(String s) { - super(s); - projects = new HashMap<>(); - TeamInvites = new HashMap<>(); - } - - public static GeneProjectTracker getTracker(World world) { - String filename = "GeneProjectTracker.common"; - GeneProjectTracker tracker = (GeneProjectTracker) world.loadItemData(GeneProjectTracker.class, filename); - if (tracker == null) { - tracker = new GeneProjectTracker(filename); - world.setItemData(filename, tracker); - } - return tracker; - } - - @Override - public void readFromNBT(NBTTagCompound nbt) { - } - - @Override - public void writeToNBT(NBTTagCompound nbt) { - } - - public int createProject(String name, GameProfile leader) { - int i; - for (i = 1; projects.keySet().contains(i); ++i) { - } - GeneProject project = new GeneProject(i, name, leader); - projects.put(i, project); - markDirty(); - return i; - } - - public void removeProject(int id) { - projects.remove(id); - for (Map.Entry> entry : TeamInvites.entrySet()) { - entry.getValue().remove(id); - } - markDirty(); - } - - public void leaveProject(int id, GameProfile player) { - GeneProject project = projects.get(id); - if (project == null) { - return; - } - project.removePlayer(player); - if (project.isEmpty()) { - removeProject(id); - } - markDirty(); - } - - public void joinProject(int id, GameProfile player) { - GeneProject project = projects.get(id); - if (project == null) { - return; - } - - project.addPlayer(player); - markDirty(); - } - - public void reassignPlayer(int id, int id2, GameProfile player) { - GeneProject project = projects.get(id); - if (project == null) { - return; - } - - GeneProject project2 = projects.get(id2); - if (project2 == null) { - return; - } - leaveProject(id, player); - joinProject(id2, player); - } - - public void renameProject(int id, String newName) { - GeneProject project = projects.get(id); - if (project != null) { - project.setName(newName); - } - markDirty(); - } - - public void invitePlayer(int id, GameProfile player) { - if (!TeamInvites.containsKey(player)) { - TeamInvites.put(player, new LinkedHashSet<>()); - } - TeamInvites.get(player).add(id); - markDirty(); - } - - public void revokeInvite(int id, GameProfile player) { - if (!TeamInvites.containsKey(player)) { - TeamInvites.put(player, new LinkedHashSet<>()); - } - TeamInvites.get(player).add(id); - markDirty(); - } -} diff --git a/src/main/java/binnie/genetics/genetics/GeneticEngineeringSystem.java b/src/main/java/binnie/genetics/genetics/GeneticEngineeringSystem.java deleted file mode 100644 index 67972b3b..00000000 --- a/src/main/java/binnie/genetics/genetics/GeneticEngineeringSystem.java +++ /dev/null @@ -1,77 +0,0 @@ -package binnie.genetics.genetics; - -import binnie.core.genetics.BreedingSystem; -import forestry.api.genetics.IAllele; -import forestry.api.genetics.IAlleleFloat; -import forestry.api.genetics.IAlleleInteger; -import forestry.api.genetics.IChromosomeType; -import forestry.api.genetics.IIndividual; -import forestry.api.genetics.ISpeciesRoot; - -import java.util.ArrayList; -import java.util.Comparator; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.TreeSet; - -// TODO unused class? -public class GeneticEngineeringSystem { - static List speciesList; - public Map> chromosomeMap; - BreedingSystem breedingSystem; - - public GeneticEngineeringSystem(BreedingSystem system) { - chromosomeMap = new HashMap<>(); - breedingSystem = system; - for (IIndividual indiv : breedingSystem.getSpeciesRoot().getIndividualTemplates()) { - for (IChromosomeType chromosome : breedingSystem.getSpeciesRoot().getKaryotype()) { - if (!chromosomeMap.containsKey(chromosome)) { - chromosomeMap.put(chromosome, new ArrayList<>()); - } - try { - IAllele a1 = indiv.getGenome().getActiveAllele(chromosome); - IAllele a2 = indiv.getGenome().getInactiveAllele(chromosome); - if (a1 != null) { - chromosomeMap.get(chromosome).add(a1); - } - if (a2 != null) { - chromosomeMap.get(chromosome).add(a2); - } - } catch (Exception ex) { - // ignored - } - } - } - - for (IChromosomeType chromosome2 : breedingSystem.getSpeciesRoot().getKaryotype()) { - List alleles = getAlleles(chromosome2); - TreeSet set = new TreeSet(new ComparatorAllele()); - set.addAll(alleles); - List list = new ArrayList(); - list.addAll(set); - chromosomeMap.put(chromosome2, list); - } - } - - public List getAlleles(IChromosomeType chromosome) { - return chromosomeMap.get(chromosome); - } - - public ISpeciesRoot getSpeciesRoot() { - return breedingSystem.getSpeciesRoot(); - } - - class ComparatorAllele implements Comparator { - @Override - public int compare(IAllele o1, IAllele o2) { - if (o1 instanceof IAlleleFloat && o2 instanceof IAlleleFloat) { - return Float.valueOf(((IAlleleFloat) o1).getValue()).compareTo(((IAlleleFloat) o2).getValue()); - } - if (o1 instanceof IAlleleInteger && o2 instanceof IAlleleInteger) { - return Integer.valueOf(((IAlleleInteger) o1).getValue()).compareTo(((IAlleleInteger) o2).getValue()); - } - return o1.getUID().compareTo(o2.getUID()); - } - } -} diff --git a/src/main/java/binnie/genetics/gui/WindowAnalyst.java b/src/main/java/binnie/genetics/gui/WindowAnalyst.java index d3402b60..98c02adc 100644 --- a/src/main/java/binnie/genetics/gui/WindowAnalyst.java +++ b/src/main/java/binnie/genetics/gui/WindowAnalyst.java @@ -29,7 +29,7 @@ import binnie.core.genetics.BreedingSystem; import binnie.core.machines.inventory.SlotValidator; import binnie.genetics.Genetics; import binnie.genetics.item.GeneticsItems; -import binnie.genetics.machine.Analyser; +import binnie.genetics.machine.analyser.Analyser; import binnie.genetics.machine.ModuleMachine; import cpw.mods.fml.relauncher.Side; import forestry.api.apiculture.IBee; diff --git a/src/main/java/binnie/genetics/machine/Acclimatiser.java b/src/main/java/binnie/genetics/machine/Acclimatiser.java deleted file mode 100644 index 5dfa95ca..00000000 --- a/src/main/java/binnie/genetics/machine/Acclimatiser.java +++ /dev/null @@ -1,388 +0,0 @@ -package binnie.genetics.machine; - -import binnie.Binnie; -import binnie.botany.api.EnumFlowerChromosome; -import binnie.botany.gardening.Gardening; -import binnie.core.BinnieCore; -import binnie.core.Mods; -import binnie.core.craftgui.minecraft.IMachineInformation; -import binnie.core.genetics.Gene; -import binnie.core.genetics.Tolerance; -import binnie.core.machines.IMachine; -import binnie.core.machines.Machine; -import binnie.core.machines.TileEntityMachine; -import binnie.core.machines.inventory.ComponentInventorySlots; -import binnie.core.machines.inventory.ComponentInventoryTransfer; -import binnie.core.machines.inventory.InventorySlot; -import binnie.core.machines.inventory.SlotValidator; -import binnie.core.machines.power.ComponentPowerReceptor; -import binnie.core.machines.power.ComponentProcessIndefinate; -import binnie.core.machines.power.ErrorState; -import binnie.genetics.core.GeneticsGUI; -import binnie.genetics.core.GeneticsTexture; -import binnie.genetics.machine.inoculator.Inoculator; -import forestry.api.apiculture.EnumBeeChromosome; -import forestry.api.genetics.AlleleManager; -import forestry.api.genetics.EnumTolerance; -import forestry.api.genetics.IAlleleTolerance; -import forestry.api.genetics.IChromosomeType; -import forestry.api.genetics.IGenome; -import forestry.api.genetics.IIndividual; -import forestry.api.genetics.ISpeciesRoot; -import forestry.api.lepidopterology.EnumButterflyChromosome; -import net.minecraft.init.Blocks; -import net.minecraft.init.Items; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Random; - -public class Acclimatiser { - public static int[] slotReserve = new int[]{0, 1, 2, 3}; - public static int[] slotAcclimatiser = new int[]{5, 6, 7}; - public static int[] slotDone = new int[]{8, 9, 10, 11}; - public static int slotTarget = 4; - - protected static Map temperatureItems = new HashMap<>(); - protected static Map humidityItems = new HashMap<>(); - - private static List toleranceSystems = new ArrayList<>(); - - private static ToleranceSystem getToleranceSystem(ItemStack stack, ItemStack acclim) { - ISpeciesRoot root = AlleleManager.alleleRegistry.getSpeciesRoot(stack); - if (root == null) { - return null; - } - - for (ToleranceSystem system : Acclimatiser.toleranceSystems) { - if (root.getUID().equals(system.uid) && system.type.hasEffect(acclim)) { - return system; - } - } - return null; - } - - public static void addTolerance(String uid, IChromosomeType chromosome, ToleranceType type) { - Acclimatiser.toleranceSystems.add(new ToleranceSystem(uid, chromosome, type)); - } - - public static float getTemperatureEffect(ItemStack item) { - for (ItemStack stack : Acclimatiser.temperatureItems.keySet()) { - if (stack.isItemEqual(item)) { - return Acclimatiser.temperatureItems.get(stack); - } - } - return 0.0f; - } - - public static float getHumidityEffect(ItemStack item) { - for (ItemStack stack : Acclimatiser.humidityItems.keySet()) { - if (stack.isItemEqual(item)) { - return Acclimatiser.humidityItems.get(stack); - } - } - return 0.0f; - } - - public static void addTemperatureItem(ItemStack itemStack, float amount) { - if (itemStack == null) { - return; - } - Acclimatiser.temperatureItems.put(itemStack, amount); - } - - public static void addHumidityItem(ItemStack itemStack, float amount) { - if (itemStack == null) { - return; - } - Acclimatiser.humidityItems.put(itemStack, amount); - } - - public static void setupRecipes() { - if (BinnieCore.isApicultureActive()) { - addTolerance(Binnie.Genetics.getBeeRoot().getUID(), EnumBeeChromosome.HUMIDITY_TOLERANCE, ToleranceType.Humidity); - addTolerance(Binnie.Genetics.getBeeRoot().getUID(), EnumBeeChromosome.TEMPERATURE_TOLERANCE, ToleranceType.Temperature); - } - - if (BinnieCore.isLepidopteryActive()) { - addTolerance(Binnie.Genetics.getButterflyRoot().getUID(), EnumButterflyChromosome.HUMIDITY_TOLERANCE, ToleranceType.Humidity); - addTolerance(Binnie.Genetics.getButterflyRoot().getUID(), EnumButterflyChromosome.TEMPERATURE_TOLERANCE, ToleranceType.Temperature); - } - - if (BinnieCore.isBotanyActive()) { - addTolerance(Binnie.Genetics.getFlowerRoot().getUID(), EnumFlowerChromosome.HUMIDITY_TOLERANCE, ToleranceType.Humidity); - addTolerance(Binnie.Genetics.getFlowerRoot().getUID(), EnumFlowerChromosome.TEMPERATURE_TOLERANCE, ToleranceType.Temperature); - addTolerance(Binnie.Genetics.getFlowerRoot().getUID(), EnumFlowerChromosome.PH_TOLERANCE, ToleranceType.PH); - } - - addTemperatureItem(new ItemStack(Items.blaze_powder), 0.5f); - addTemperatureItem(new ItemStack(Items.blaze_rod), 0.75f); - addTemperatureItem(new ItemStack(Items.lava_bucket), 0.75f); - addTemperatureItem(new ItemStack(Items.snowball), -0.15f); - addTemperatureItem(new ItemStack(Blocks.ice), -0.75f); - addHumidityItem(new ItemStack(Items.water_bucket), 0.75f); - addHumidityItem(new ItemStack(Blocks.sand), -0.15f); - addTemperatureItem(Mods.Forestry.stack("canLava"), 0.75f); - addTemperatureItem(Mods.Forestry.stack("refractoryLava"), 0.75f); - addHumidityItem(Mods.Forestry.stack("canWater"), 0.75f); - addHumidityItem(Mods.Forestry.stack("refractoryWater"), 0.75f); - addHumidityItem(Mods.Forestry.stack("waxCapsuleWater"), 0.75f); - } - - public static boolean canAcclimatise(ItemStack stack, List acclimatisers) { - if (stack == null || acclimatisers.isEmpty()) { - return true; - } - - for (ItemStack acclim : acclimatisers) { - if (canAcclimatise(stack, acclim)) { - return true; - } - } - return false; - } - - public static boolean canAcclimatise(ItemStack stack, ItemStack acclim) { - ToleranceSystem system = getToleranceSystem(stack, acclim); - return system != null && system.canAlter(stack, acclim); - } - - public static ItemStack acclimatise(ItemStack stack, ItemStack acc) { - ToleranceSystem system = getToleranceSystem(stack, acc); - return system.alter(stack, acc); - } - - public static Tolerance alterTolerance(Tolerance tol, float effect) { - int[] is = tol.getBounds(); - int[] range; - if (effect < 0.0f) { - range = new int[]{is[0] - 1, is[1]}; - } else { - range = new int[]{is[0], is[1] + 1}; - } - - if (range[0] < -5) { - range[0] = -5; - } - if (range[1] > 5) { - range[1] = 5; - } - - EnumTolerance[] up = {EnumTolerance.NONE, EnumTolerance.UP_1, EnumTolerance.UP_2, EnumTolerance.UP_3, EnumTolerance.UP_4, EnumTolerance.UP_5}; - EnumTolerance[] down = {EnumTolerance.NONE, EnumTolerance.DOWN_1, EnumTolerance.DOWN_2, EnumTolerance.DOWN_3, EnumTolerance.DOWN_4, EnumTolerance.DOWN_5}; - EnumTolerance[] both = {EnumTolerance.NONE, EnumTolerance.BOTH_1, EnumTolerance.BOTH_2, EnumTolerance.BOTH_3, EnumTolerance.BOTH_4, EnumTolerance.BOTH_5}; - - if (range[0] == 0) { - return Tolerance.get(up[range[1]]); - } - if (range[1] == 0) { - return Tolerance.get(down[-range[0]]); - } - - int avg = (int) ((-range[0] + range[1]) / 2.0f + 0.6f); - return Tolerance.get(both[avg]); - } - - public enum ToleranceType { - Temperature, - Humidity, - PH; - - public float getEffect(ItemStack stack) { - switch (this) { - case Temperature: - return Acclimatiser.getTemperatureEffect(stack); - - case Humidity: - return Acclimatiser.getHumidityEffect(stack); - - case PH: - if (Gardening.isAcidFertiliser(stack)) { - return -0.5f * Gardening.getFertiliserStrength(stack); - } - if (Gardening.isAlkalineFertiliser(stack)) { - return 0.5f * Gardening.getFertiliserStrength(stack); - } - break; - } - return 0.0f; - } - - public boolean hasEffect(ItemStack stack) { - return getEffect(stack) != 0.0f; - } - } - - public static class PackageAcclimatiser extends GeneticMachine.PackageGeneticBase implements IMachineInformation { - public PackageAcclimatiser() { - super("acclimatiser", GeneticsTexture.Acclimatiser, 0x966a49, true); - } - - @Override - public void createMachine(Machine machine) { - new ComponentGeneticGUI(machine, GeneticsGUI.Acclimatiser); - ComponentInventorySlots inventory = new ComponentInventorySlots(machine); - inventory.addSlot(4, "process"); - inventory.getSlot(4).setValidator(new SlotValidator.Individual()); - inventory.getSlot(4).setReadOnly(); - inventory.getSlot(4).forbidExtraction(); - - for (InventorySlot slot : inventory.addSlotArray(Acclimatiser.slotReserve, "input")) { - slot.forbidExtraction(); - slot.setValidator(new SlotValidator.Individual()); - } - - for (InventorySlot slot : inventory.addSlotArray(Acclimatiser.slotDone, "output")) { - slot.setReadOnly(); - slot.setValidator(new SlotValidator.Individual()); - } - - for (InventorySlot slot : inventory.addSlotArray(Acclimatiser.slotAcclimatiser, "acclimatiser")) { - slot.setValidator(new ValidatorAcclimatiserItem()); - } - - ComponentInventoryTransfer transfer = new ComponentInventoryTransfer(machine); - transfer.addRestock(Acclimatiser.slotReserve, 4, 1); - transfer.addStorage(4, Acclimatiser.slotDone, new ComponentInventoryTransfer.Condition() { - @Override - public boolean fufilled(ItemStack stack) { - return !Acclimatiser.canAcclimatise(stack, machine.getMachineUtil().getNonNullStacks(Acclimatiser.slotAcclimatiser)); - } - }); - - new ComponentPowerReceptor(machine, 5000); - new ComponentAcclimatiserLogic(machine); - } - - @Override - public TileEntity createTileEntity() { - return new TileEntityMachine(this); - } - } - - public static class ComponentAcclimatiserLogic extends ComponentProcessIndefinate { - public ComponentAcclimatiserLogic(IMachine machine) { - super(machine, 2.0f); - } - - @Override - public ErrorState canWork() { - if (getUtil().getStack(4) == null) { - return new ErrorState.NoItem("No Individual to Acclimatise", 4); - } - if (getUtil().getNonNullStacks(Acclimatiser.slotAcclimatiser).isEmpty()) { - return new ErrorState.NoItem("No Acclimatising Items", Acclimatiser.slotAcclimatiser); - } - return super.canWork(); - } - - @Override - public ErrorState canProgress() { - if (!Acclimatiser.canAcclimatise(getUtil().getStack(4), getUtil().getNonNullStacks(Acclimatiser.slotAcclimatiser))) { - return new ErrorState.InvalidItem("Cannot Acclimatise this individual with these items", 4); - } - return super.canProgress(); - } - - @Override - protected boolean inProgress() { - return canWork() == null; - } - - @Override - protected void onTickTask() { - super.onTickTask(); - if (getUtil().getRandom().nextInt(100) == 0) { - attemptAcclimatisation(); - } - } - - protected void attemptAcclimatisation() { - List acclms = new ArrayList(); - for (ItemStack s : getUtil().getNonNullStacks(Acclimatiser.slotAcclimatiser)) { - if (Acclimatiser.canAcclimatise(getUtil().getStack(4), s)) { - acclms.add(s); - } - } - - ItemStack acc = acclms.get(getUtil().getRandom().nextInt(acclms.size())); - ItemStack acclimed = Acclimatiser.acclimatise(getUtil().getStack(4), acc); - if (acclimed != null) { - getUtil().setStack(4, acclimed); - boolean removed = false; - for (int i : Acclimatiser.slotAcclimatiser) { - if (!removed && getUtil().getStack(i) != null && getUtil().getStack(i).isItemEqual(acc)) { - getUtil().decreaseStack(i, 1); - removed = true; - } - } - } - } - } - - public static class ValidatorAcclimatiserItem extends SlotValidator { - public ValidatorAcclimatiserItem() { - super(null); - } - - @Override - public boolean isValid(ItemStack stack) { - for (ToleranceType type : ToleranceType.values()) { - if (type.hasEffect(stack)) { - return true; - } - } - return false; - } - - @Override - public String getTooltip() { - return "Acclimatising Items"; - } - } - - private static class ToleranceSystem { - String uid; - IChromosomeType chromosomeOrdinal; - ToleranceType type; - - private ToleranceSystem(String uid, IChromosomeType chromosomeOrdinal, ToleranceType type) { - this.uid = uid; - this.chromosomeOrdinal = chromosomeOrdinal; - this.type = type; - } - - public boolean canAlter(ItemStack stack, ItemStack acclim) { - IIndividual member = AlleleManager.alleleRegistry.getIndividual(stack); - IGenome genome = member.getGenome(); - IAlleleTolerance tolAllele = (IAlleleTolerance) genome.getActiveAllele(chromosomeOrdinal); - Tolerance tol = Tolerance.get(tolAllele.getValue()); - float effect = type.getEffect(acclim); - return (effect > 0.0f && tol.getBounds()[1] < 5) || (effect < 0.0f && tol.getBounds()[0] > -5); - } - - public ItemStack alter(ItemStack stack, ItemStack acc) { - Random rand = new Random(); - float effect = type.getEffect(acc); - if (rand.nextFloat() > Math.abs(effect)) { - return stack; - } - - IIndividual member = AlleleManager.alleleRegistry.getIndividual(stack); - IGenome genome = member.getGenome(); - IAlleleTolerance tolAllele = (IAlleleTolerance) genome.getActiveAllele(chromosomeOrdinal); - Tolerance tol = Tolerance.get(tolAllele.getValue()); - Tolerance newTol = Acclimatiser.alterTolerance(tol, effect); - if (rand.nextFloat() > 1.0f / (-newTol.getBounds()[0] + newTol.getBounds()[1])) { - return stack; - } - ISpeciesRoot root = AlleleManager.alleleRegistry.getSpeciesRoot(stack); - Inoculator.setGene(new Gene(newTol.getAllele(), chromosomeOrdinal, root), stack, rand.nextInt(2)); - return stack; - } - } -} diff --git a/src/main/java/binnie/genetics/machine/AdvGeneticMachine.java b/src/main/java/binnie/genetics/machine/AdvGeneticMachine.java index d73791a3..5ea9fbf3 100644 --- a/src/main/java/binnie/genetics/machine/AdvGeneticMachine.java +++ b/src/main/java/binnie/genetics/machine/AdvGeneticMachine.java @@ -4,10 +4,11 @@ import binnie.core.machines.IMachineType; import binnie.core.machines.MachinePackage; import binnie.core.resource.IBinnieTexture; import binnie.genetics.Genetics; +import binnie.genetics.machine.splicer.SplicerPackage; import net.minecraft.item.ItemStack; public enum AdvGeneticMachine implements IMachineType { - Splicer(Splicer.PackageSplicer.class); + Splicer(SplicerPackage.class); protected Class cls; @@ -29,7 +30,7 @@ public enum AdvGeneticMachine implements IMachineType { return new ItemStack(Genetics.packageAdvGenetic.getBlock(), i, ordinal()); } - public abstract static class PackageAdvGeneticBase extends GeneticMachine.PackageGeneticBase { + public abstract static class PackageAdvGeneticBase extends PackageGeneticBase { protected PackageAdvGeneticBase(String uid, IBinnieTexture renderTexture, int flashColor, boolean powered) { super(uid, renderTexture, flashColor, powered); } diff --git a/src/main/java/binnie/genetics/machine/Analyser.java b/src/main/java/binnie/genetics/machine/Analyser.java deleted file mode 100644 index 0d48db22..00000000 --- a/src/main/java/binnie/genetics/machine/Analyser.java +++ /dev/null @@ -1,318 +0,0 @@ -package binnie.genetics.machine; - -import binnie.Binnie; -import binnie.core.BinnieCore; -import binnie.core.craftgui.minecraft.IMachineInformation; -import binnie.core.machines.IMachine; -import binnie.core.machines.Machine; -import binnie.core.machines.MachineComponent; -import binnie.core.machines.TileEntityMachine; -import binnie.core.machines.component.IRender; -import binnie.core.machines.inventory.ComponentChargedSlots; -import binnie.core.machines.inventory.ComponentInventorySlots; -import binnie.core.machines.inventory.ComponentInventoryTransfer; -import binnie.core.machines.inventory.InventorySlot; -import binnie.core.machines.inventory.SlotValidator; -import binnie.core.machines.network.INetwork; -import binnie.core.machines.power.ComponentPowerReceptor; -import binnie.core.machines.power.ComponentProcessSetCost; -import binnie.core.machines.power.ErrorState; -import binnie.core.machines.power.IProcess; -import binnie.genetics.api.IItemAnalysable; -import binnie.genetics.core.GeneticsGUI; -import binnie.genetics.core.GeneticsTexture; -import binnie.genetics.item.GeneticsItems; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import forestry.api.genetics.AlleleManager; -import forestry.api.genetics.IIndividual; -import forestry.api.genetics.ISpeciesRoot; -import net.minecraft.client.particle.EntityFX; -import net.minecraft.client.renderer.entity.RenderItem; -import net.minecraft.entity.item.EntityItem; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.world.World; -import org.lwjgl.opengl.GL11; - -import java.util.Random; - -public class Analyser { - public static int[] slotReserve = new int[]{0, 1, 2, 3, 4, 5}; - public static int[] slotFinished = new int[]{7, 8, 9, 10, 11, 12}; - public static int slotTarget = 6; - public static int slotDye = 13; - - static { - } - - public static boolean isAnalysable(ItemStack stack) { - IIndividual ind = AlleleManager.alleleRegistry.getIndividual(stack); - return ind != null || stack.getItem() instanceof IItemAnalysable || Binnie.Genetics.getConversion(stack) != null; - } - - public static boolean isAnalysed(ItemStack stack) { - IIndividual ind = AlleleManager.alleleRegistry.getIndividual(stack); - if (ind != null) { - return ind.isAnalyzed(); - } - return stack.getItem() instanceof IItemAnalysable && ((IItemAnalysable) stack.getItem()).isAnalysed(stack); - } - - public static ItemStack analyse(ItemStack stack) { - ItemStack conv = Binnie.Genetics.getConversionStack(stack); - if (conv != null) { - stack = conv; - } - - ISpeciesRoot root = AlleleManager.alleleRegistry.getSpeciesRoot(stack); - if (root != null) { - IIndividual ind = root.getMember(stack); - ind.analyze(); - NBTTagCompound nbttagcompound = new NBTTagCompound(); - ind.writeToNBT(nbttagcompound); - stack.setTagCompound(nbttagcompound); - return stack; - } - - if (stack.getItem() instanceof IItemAnalysable) { - return ((IItemAnalysable) stack.getItem()).analyse(stack); - } - return stack; - } - - public static class PackageAnalyser extends GeneticMachine.PackageGeneticBase implements IMachineInformation { - public PackageAnalyser() { - super("analyser", GeneticsTexture.Analyser, 9961727, true); - } - - @Override - public void createMachine(Machine machine) { - new ComponentGeneticGUI(machine, GeneticsGUI.Analyser); - ComponentInventorySlots inventory = new ComponentInventorySlots(machine); - inventory.addSlotArray(Analyser.slotReserve, "input"); - for (InventorySlot slot : inventory.getSlots(Analyser.slotReserve)) { - slot.setValidator(new SlotValidatorUnanalysed()); - slot.forbidExtraction(); - } - - inventory.addSlot(6, "analyse"); - inventory.getSlot(6).setValidator(new SlotValidatorUnanalysed()); - inventory.getSlot(6).setReadOnly(); - inventory.getSlot(6).forbidInteraction(); - inventory.addSlot(13, "dye"); - inventory.getSlot(13).forbidExtraction(); - inventory.getSlot(13).setValidator(new SlotValidator(ModuleMachine.IconDye) { - @Override - public boolean isValid(ItemStack itemStack) { - return itemStack.isItemEqual(GeneticsItems.DNADye.get(1)); - } - - @Override - public String getTooltip() { - return "DNA Dye"; - } - }); - - inventory.addSlotArray(Analyser.slotFinished, "output"); - for (InventorySlot slot : inventory.getSlots(Analyser.slotFinished)) { - slot.forbidInsertion(); - slot.setReadOnly(); - } - - ComponentInventoryTransfer transfer = new ComponentInventoryTransfer(machine); - transfer.addRestock(Analyser.slotReserve, 6, 1); - transfer.addStorage(6, Analyser.slotFinished, new ComponentInventoryTransfer.Condition() { - @Override - public boolean fufilled(ItemStack stack) { - return Analyser.isAnalysed(stack); - } - }); - - new ComponentChargedSlots(machine).addCharge(13); - new ComponentPowerReceptor(machine, 500); - new ComponentAnalyserLogic(machine); - new ComponentAnalyserFX(machine); - } - - @Override - public TileEntity createTileEntity() { - return new TileEntityMachine(this); - } - } - - public static class ComponentAnalyserLogic extends ComponentProcessSetCost implements IProcess { - private static float DYE_PER_TICK = 0.002f; - - public ComponentAnalyserLogic(Machine machine) { - super(machine, 9000, 300); - } - - @Override - public ErrorState canWork() { - if (getUtil().isSlotEmpty(6)) { - return new ErrorState.NoItem("No item to analyse", 6); - } - - boolean analysed = Analyser.isAnalysed(getUtil().getStack(6)); - if (analysed) { - return new ErrorState.InvalidItem("Already Analysed", "Item has already been analysed", 6); - } - return super.canWork(); - } - - @Override - public ErrorState canProgress() { - if (getUtil().getSlotCharge(13) == 0.0f) { - return new ErrorState.Item("Insufficient Dye", "Not enough DNA dye to analyse", new int[]{13}); - } - return super.canProgress(); - } - - @Override - protected void onFinishTask() { - super.onFinishTask(); - ItemStack itemStack = getUtil().getStack(6); - itemStack = Analyser.analyse(itemStack); - getInventory().setInventorySlotContents(6, itemStack); - } - - @Override - protected void onTickTask() { - getUtil().useCharge(13, 0.002f); - } - } - - public static class SlotValidatorUnanalysed extends SlotValidator { - public SlotValidatorUnanalysed() { - super(null); - } - - @Override - public boolean isValid(ItemStack itemStack) { - return Analyser.isAnalysable(itemStack) && !Analyser.isAnalysed(itemStack); - } - - @Override - public String getTooltip() { - return "Unanalysed Item"; - } - } - - public static class ComponentAnalyserFX extends MachineComponent implements - IRender.RandomDisplayTick, - IRender.DisplayTick, - IRender.Render, - INetwork.TilePacketSync { - private EntityItem dummyEntityItem; - - public ComponentAnalyserFX(IMachine machine) { - super(machine); - dummyEntityItem = new EntityItem(null); - } - - @SideOnly(Side.CLIENT) - @Override - public void onRandomDisplayTick(World world, int x, int y, int z, Random rand) { - // ignored - } - - @SideOnly(Side.CLIENT) - @Override - public void onDisplayTick(World world, int x, int y, int z, Random rand) { - if (rand.nextFloat() < 1.0f && getUtil().getProcess().isInProgress()) { - BinnieCore.proxy.getMinecraftInstance().effectRenderer.addEffect(new EntityFX(world, x + 0.5, y + 1.3 + rand.nextDouble() * 0.2, z + 0.5, 0.0, 0.0, 0.0) { - double axisX = posX; - double axisZ = posZ; - double angle = rand.nextDouble() * 2.0 * 3.1415; - - { - axisX = 0.0; - axisZ = 0.0; - angle = 0.0; - motionX = 0.05 * (rand.nextDouble() - 0.5); - motionZ = 0.05 * (rand.nextDouble() - 0.5); - motionY = 0.0; - particleMaxAge = 25; - particleGravity = 0.05f; - noClip = true; - setRBGColorF(0.6f, 0.0f, 1.0f); - } - - @Override - public void onUpdate() { - super.onUpdate(); - setAlphaF((float) Math.cos(1.57 * particleAge / particleMaxAge)); - } - - @Override - public int getFXLayer() { - return 0; - } - }); - } - } - - @SideOnly(Side.CLIENT) - @Override - public void renderInWorld(RenderItem renderItem, double x, double y, double z) { - if (!getUtil().getProcess().isInProgress()) { - return; - } - - ItemStack stack = getUtil().getStack(6); - dummyEntityItem.worldObj = getMachine().getWorld(); - dummyEntityItem.setEntityItemStack(stack); - EntityItem dummyEntityItem = this.dummyEntityItem; - dummyEntityItem.age++; - this.dummyEntityItem.hoverStart = 0.0f; - if (stack == null) { - return; - } - - EntityPlayer player = BinnieCore.proxy.getPlayer(); - double dx = x + 0.5 - player.lastTickPosX; - double dz = z + 0.5 - player.lastTickPosZ; - double t = Math.atan2(dz, dx) * 180.0 / 3.1415; - GL11.glPushMatrix(); - GL11.glRotatef(180.0f, 0.0f, 0.0f, 1.0f); - GL11.glTranslatef(0.0f, -0.2f, 0.0f); - renderItem.doRender(this.dummyEntityItem, 0.0, 0.0, 0.0, 0.0f, 0.0f); - GL11.glPopMatrix(); - } - - @Override - public void syncToNBT(NBTTagCompound nbt) { - NBTTagCompound item = new NBTTagCompound(); - ItemStack stack = getUtil().getStack(6); - if (stack == null) { - return; - } - - stack.writeToNBT(item); - nbt.setTag("item", item); - } - - @Override - public void syncFromNBT(NBTTagCompound nbt) { - if (nbt.hasKey("item")) { - getUtil().setStack(6, ItemStack.loadItemStackFromNBT(nbt.getCompoundTag("item"))); - } else { - getUtil().setStack(6, null); - } - } - - @Override - public void onInventoryUpdate() { - if (!getUtil().isServer()) { - return; - } - - IMachine machine = getMachine(); - TileEntity tile = machine.getTileEntity(); - machine.getWorld().markBlockForUpdate(tile.xCoord, tile.yCoord, tile.zCoord); - } - } -} diff --git a/src/main/java/binnie/genetics/machine/ComponentGUIHolder.java b/src/main/java/binnie/genetics/machine/ComponentGUIHolder.java new file mode 100644 index 00000000..7e7429ab --- /dev/null +++ b/src/main/java/binnie/genetics/machine/ComponentGUIHolder.java @@ -0,0 +1,148 @@ +package binnie.genetics.machine; + +import binnie.botany.Botany; +import binnie.core.BinnieCore; +import binnie.core.machines.IMachine; +import binnie.core.machines.MachineComponent; +import binnie.core.machines.component.IInteraction; +import binnie.core.machines.network.INetwork; +import binnie.extrabees.ExtraBees; +import binnie.extratrees.ExtraTrees; +import binnie.genetics.Genetics; +import buildcraft.api.tools.IToolWrench; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; + +public class ComponentGUIHolder extends MachineComponent implements INetwork.TilePacketSync, IInteraction.RightClick { + private ItemStack stack; + + public ComponentGUIHolder(IMachine machine) { + super(machine); + } + + public ItemStack getStack() { + return stack; + } + + @Override + public void readFromNBT(NBTTagCompound nbttagcompound) { + super.readFromNBT(nbttagcompound); + if (nbttagcompound == null) { + return; + } + stack = ItemStack.loadItemStackFromNBT(nbttagcompound.getCompoundTag("Item")); + } + + @Override + public void writeToNBT(NBTTagCompound nbttagcompound) { + super.writeToNBT(nbttagcompound); + NBTTagCompound nbt = new NBTTagCompound(); + if (stack != null) { + stack.writeToNBT(nbt); + } + nbttagcompound.setTag("Item", nbt); + } + + @Override + public void syncToNBT(NBTTagCompound nbt) { + writeToNBT(nbt); + } + + @Override + public void syncFromNBT(NBTTagCompound nbt) { + readFromNBT(nbt); + } + + @Override + public void onDestruction() { + super.onDestruction(); + if (stack == null) { + return; + } + + IMachine machine = getMachine(); + TileEntity tile = machine.getTileEntity(); + World world = machine.getWorld(); + Random rand = world.rand; + float xOffset = rand.nextFloat() * 0.8f + 0.1f; + float yOffset = rand.nextFloat() * 0.8f + 0.1f; + float zOffset = rand.nextFloat() * 0.8f + 0.1f; + if (stack.stackSize == 0) { + stack.stackSize = 1; + } + + EntityItem entityitem = new EntityItem(world, tile.xCoord + xOffset, tile.yCoord + yOffset, tile.zCoord + zOffset, stack.copy()); + float accel = 0.05f; + entityitem.motionX = (float) rand.nextGaussian() * accel; + entityitem.motionY = (float) rand.nextGaussian() * accel + 0.2f; + entityitem.motionZ = (float) rand.nextGaussian() * accel; + world.spawnEntityInWorld(entityitem); + } + + @Override + public void onRightClick(World world, EntityPlayer player, int x, int y, int z) { + if (BinnieCore.proxy.isSimulating(world) && player.getHeldItem() != null) { + if (stack != null && player.getHeldItem().getItem() instanceof IToolWrench) { + Random rand = world.rand; + float f = 0.7f; + double fOffset = (1.0f - f) * 0.5; + double xOffset = rand.nextFloat() * f + fOffset; + double yOffset = rand.nextFloat() * f + fOffset; + double zOffset = rand.nextFloat() * f + fOffset; + + EntityItem entityitem = new EntityItem(world, x + xOffset, y + yOffset, z + zOffset, stack); + entityitem.delayBeforeCanPickup = 10; + world.spawnEntityInWorld(entityitem); + stack = null; + ((IToolWrench) player.getHeldItem().getItem()).wrenchUsed(player, x, y, z); + getUtil().refreshBlock(); + return; + } + + List validSelections = new ArrayList<>(); + if (BinnieCore.isBotanyActive()) { + validSelections.add(Botany.database); + } + if (BinnieCore.isExtraBeesActive()) { + validSelections.add(ExtraBees.dictionary); + } + if (BinnieCore.isExtraTreesActive()) { + validSelections.add(ExtraTrees.itemDictionary); + } + if (BinnieCore.isLepidopteryActive()) { + validSelections.add(ExtraTrees.itemDictionaryLepi); + } + + validSelections.add(Genetics.database); + validSelections.add(Genetics.analyst); + validSelections.add(Genetics.registry); + validSelections.add(Genetics.masterRegistry); + validSelections.add(BinnieCore.genesis); + + if (stack == null && validSelections.contains(player.getHeldItem().getItem())) { + stack = player.getHeldItem().copy(); + ItemStack heldItem = player.getHeldItem(); + heldItem.stackSize--; + world.markBlockForUpdate(x, y, z); + return; + } + + if (stack != null && player.getHeldItem().getItem() instanceof IToolWrench) { + stack.getItem().onItemRightClick(stack, world, player); + } + } + + if (stack != null) { + stack.getItem().onItemRightClick(stack, world, player); + } + } +} diff --git a/src/main/java/binnie/genetics/machine/ComponentGeneticGUI.java b/src/main/java/binnie/genetics/machine/ComponentGeneticGUI.java index e0dc38ce..f94e2b98 100644 --- a/src/main/java/binnie/genetics/machine/ComponentGeneticGUI.java +++ b/src/main/java/binnie/genetics/machine/ComponentGeneticGUI.java @@ -9,7 +9,7 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.world.World; public class ComponentGeneticGUI extends MachineComponent implements IInteraction.RightClick { - GeneticsGUI id; + public GeneticsGUI id; public ComponentGeneticGUI(Machine machine, GeneticsGUI id) { super(machine); diff --git a/src/main/java/binnie/genetics/machine/ComponentIndexerInventory.java b/src/main/java/binnie/genetics/machine/ComponentIndexerInventory.java deleted file mode 100644 index 9d638ece..00000000 --- a/src/main/java/binnie/genetics/machine/ComponentIndexerInventory.java +++ /dev/null @@ -1,265 +0,0 @@ -package binnie.genetics.machine; - -import binnie.Binnie; -import binnie.core.machines.Machine; -import binnie.core.machines.inventory.ComponentInventory; -import binnie.core.machines.inventory.SetList; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.inventory.IInventory; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.nbt.NBTTagList; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -// TODO unused class? -public abstract class ComponentIndexerInventory extends ComponentInventory implements IInventory { - public int guiRefreshCounter; - public List sortedInventory; - int indexerSize; - List indexerInventory; - T sortingMode; - boolean needsSorting; - - public ComponentIndexerInventory(Machine machine) { - super(machine); - indexerSize = -1; - guiRefreshCounter = 0; - indexerInventory = new SetList<>(); - sortedInventory = new SetList<>(); - needsSorting = true; - } - - @Override - public int getSizeInventory() { - if (indexerSize > 0) { - return indexerSize + 1; - } - return indexerInventory.size() + 1; - } - - @Override - public ItemStack getStackInSlot(int index) { - if (index >= 0 && index < indexerInventory.size()) { - return indexerInventory.get(index); - } - return null; - } - - @Override - public ItemStack decrStackSize(int index, int amount) { - if (index >= 0) { - ItemStack returnStack = getStackInSlot(index).copy(); - setInventorySlotContents(index, null); - return returnStack; - } - return null; - } - - @Override - public ItemStack getStackInSlotOnClosing(int var1) { - return null; - } - - @Override - public void markDirty() { - super.markDirty(); - guiRefreshCounter++; - } - - @Override - public void setInventorySlotContents(int index, ItemStack itemStack) { - if (index >= 0 && index < indexerInventory.size()) { - indexerInventory.set(index, itemStack); - } else if (itemStack != null) { - indexerInventory.add(itemStack); - } - needsSorting = true; - markDirty(); - } - - @Override - public String getInventoryName() { - return ""; - } - - @Override - public int getInventoryStackLimit() { - return 64; - } - - @Override - public boolean isUseableByPlayer(EntityPlayer var1) { - return true; - } - - @Override - public void openInventory() { - // ignored - } - - @Override - public void closeInventory() { - // ignored - } - - public T getMode() { - return sortingMode; - } - - public void setMode(T mode) { - sortingMode = mode; - needsSorting = true; - } - - @Override - public void writeToNBT(NBTTagCompound nbttagcompound) { - super.writeToNBT(nbttagcompound); - NBTTagList indexerNBT = new NBTTagList(); - for (ItemStack item : indexerInventory) { - NBTTagCompound itemNBT = new NBTTagCompound(); - item.writeToNBT(itemNBT); - indexerNBT.appendTag(itemNBT); - } - nbttagcompound.setTag("indexer", indexerNBT); - } - - @Override - public void readFromNBT(NBTTagCompound nbttagcompound) { - super.readFromNBT(nbttagcompound); - NBTTagList indexerNBT = nbttagcompound.getTagList("indexer", 10); - indexerInventory.clear(); - for (int i = 0; i < indexerNBT.tagCount(); ++i) { - NBTTagCompound itemNBT = indexerNBT.getCompoundTagAt(i); - setInventorySlotContents(i, ItemStack.loadItemStackFromNBT(itemNBT)); - } - needsSorting = true; - markDirty(); - } - - public abstract void Sort(); - - public static class ComponentApiaristIndexerInventory extends ComponentIndexerInventory implements IInventory { - public ComponentApiaristIndexerInventory(Machine machine) { - super(machine); - } - - @Override - public void Sort() { - int i = 0; - while (i < indexerInventory.size()) { - if (indexerInventory.get(i) == null) { - indexerInventory.remove(i); - } else { - ++i; - } - } - if (!needsSorting) { - return; - } - needsSorting = false; - ++guiRefreshCounter; - switch (sortingMode) { - case Species: - case Type: { - class SpeciesList { - public List drones; - public List queens; - public List princesses; - public List bees; - - SpeciesList() { - drones = new ArrayList<>(); - queens = new ArrayList<>(); - princesses = new ArrayList<>(); - bees = new ArrayList<>(); - } - - public void add(ItemStack stack) { - bees.add(stack); - } - } - - Map speciesList = new HashMap(); - for (ItemStack itemStack : indexerInventory) { - int species = itemStack.getItemDamage(); - if (!speciesList.containsKey(species)) { - speciesList.put(species, new SpeciesList()); - } - speciesList.get(species).add(itemStack); - } - - for (SpeciesList sortableList : speciesList.values()) { - for (ItemStack beeStack : sortableList.bees) { - if (Binnie.Genetics.getBeeRoot().isDrone(beeStack)) { - sortableList.drones.add(indexerInventory.indexOf(beeStack)); - } else if (Binnie.Genetics.getBeeRoot().isMated(beeStack)) { - sortableList.queens.add(indexerInventory.indexOf(beeStack)); - } else { - sortableList.princesses.add(indexerInventory.indexOf(beeStack)); - } - } - } - - sortedInventory = new SetList<>(); - switch (sortingMode) { - case Species: - for (int j = 0; j < 1024; ++j) { - if (speciesList.containsKey(j)) { - sortedInventory.addAll(speciesList.get(j).queens); - sortedInventory.addAll(speciesList.get(j).princesses); - sortedInventory.addAll(speciesList.get(j).drones); - } - } - break; - - case Type: - for (int j = 0; j < 1024; ++j) { - if (speciesList.containsKey(j)) { - sortedInventory.addAll(speciesList.get(j).queens); - } - } - for (int j = 0; j < 1024; ++j) { - if (speciesList.containsKey(j)) { - sortedInventory.addAll(speciesList.get(j).princesses); - } - } - for (int j = 0; j < 1024; ++j) { - if (speciesList.containsKey(j)) { - sortedInventory.addAll(speciesList.get(j).drones); - } - } - break; - } - break; - } - default: { - sortedInventory.clear(); - for (i = 0; i < indexerInventory.size(); ++i) { - sortedInventory.add(i); - } - break; - } - } - } - - @Override - public boolean hasCustomInventoryName() { - return false; - } - - @Override - public boolean isItemValidForSlot(int i, ItemStack itemstack) { - return true; - } - - public enum Mode { - None, - Species, - Type - } - } -} diff --git a/src/main/java/binnie/genetics/machine/Genepool.java b/src/main/java/binnie/genetics/machine/Genepool.java deleted file mode 100644 index ce9cffbb..00000000 --- a/src/main/java/binnie/genetics/machine/Genepool.java +++ /dev/null @@ -1,222 +0,0 @@ -package binnie.genetics.machine; - -import binnie.Binnie; -import binnie.core.BinnieCore; -import binnie.core.craftgui.minecraft.IMachineInformation; -import binnie.core.machines.IMachine; -import binnie.core.machines.Machine; -import binnie.core.machines.MachineComponent; -import binnie.core.machines.TileEntityMachine; -import binnie.core.machines.component.IRender; -import binnie.core.machines.inventory.ComponentChargedSlots; -import binnie.core.machines.inventory.ComponentInventorySlots; -import binnie.core.machines.inventory.ComponentInventoryTransfer; -import binnie.core.machines.inventory.ComponentTankContainer; -import binnie.core.machines.inventory.IChargedSlots; -import binnie.core.machines.inventory.InventorySlot; -import binnie.core.machines.inventory.SlotValidator; -import binnie.core.machines.inventory.TankValidator; -import binnie.core.machines.power.ComponentPowerReceptor; -import binnie.core.machines.power.ComponentProcessSetCost; -import binnie.core.machines.power.ErrorState; -import binnie.core.machines.power.IProcess; -import binnie.genetics.core.GeneticsGUI; -import binnie.genetics.core.GeneticsTexture; -import binnie.genetics.item.GeneticLiquid; -import binnie.genetics.item.GeneticsItems; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import forestry.api.genetics.AlleleManager; -import forestry.api.genetics.ISpeciesRoot; -import net.minecraft.client.particle.EntityFX; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.world.World; -import net.minecraftforge.fluids.FluidStack; - -import java.util.Random; - -public class Genepool { - public static int slotBee = 0; - public static int[] slotReserve; - public static int tankDNA = 0; - public static int tankEthanol = 1; - public static int slotEnzyme = 7; - - static { - slotReserve = new int[]{1, 2, 3, 4, 5, 6}; - } - - public static class PackageGenepool extends GeneticMachine.PackageGeneticBase implements IMachineInformation { - public PackageGenepool() { - super("genepool", GeneticsTexture.Genepool, 0xc134b6, true); - } - - @Override - public void createMachine(Machine machine) { - new ComponentGeneticGUI(machine, GeneticsGUI.Genepool); - ComponentInventorySlots inventory = new ComponentInventorySlots(machine); - inventory.addSlot(7, "enzyme"); - inventory.getSlot(7).setValidator(new SlotValidator.Item(GeneticsItems.Enzyme.get(1), ModuleMachine.IconEnzyme)); - inventory.getSlot(7).forbidExtraction(); - inventory.addSlot(0, "process"); - inventory.getSlot(0).setValidator(new SlotValidator.Individual()); - inventory.getSlot(0).setReadOnly(); - inventory.getSlot(0).forbidExtraction(); - inventory.addSlotArray(Genepool.slotReserve, "input"); - - for (InventorySlot slot : inventory.getSlots(Genepool.slotReserve)) { - slot.setValidator(new SlotValidator.Individual()); - slot.forbidExtraction(); - } - - ComponentTankContainer tanks = new ComponentTankContainer(machine); - tanks.addTank(0, "output", 2000); - tanks.getTankSlot(0).setReadOnly(); - tanks.addTank(1, "input", 1000); - tanks.getTankSlot(1).forbidExtraction(); - tanks.getTankSlot(1).setValidator(new TankValidator() { - @Override - public String getTooltip() { - return "Ethanol"; - } - - @Override - public boolean isValid(FluidStack liquid) { - return liquid.getFluid().getName() == "bioethanol"; - } - }); - - ComponentInventoryTransfer transfer = new ComponentInventoryTransfer(machine); - transfer.addRestock(Genepool.slotReserve, 0, 1); - new ComponentPowerReceptor(machine, 1600); - new ComponentGenepoolLogic(machine); - ComponentChargedSlots chargedSlots = new ComponentChargedSlots(machine); - chargedSlots.addCharge(7); - new ComponentGenepoolFX(machine); - } - - @Override - public TileEntity createTileEntity() { - return new TileEntityMachine(this); - } - } - - public static class ComponentGenepoolLogic extends ComponentProcessSetCost implements IProcess { - float enzymePerProcess; - float ethanolPerProcess; - private float ethanolDrain; - - public ComponentGenepoolLogic(Machine machine) { - super(machine, 8000, 400); - enzymePerProcess = 0.25f; - ethanolPerProcess = 50.0f; - ethanolDrain = 0.0f; - } - - @Override - public ErrorState canWork() { - if (getUtil().isSlotEmpty(0)) { - return new ErrorState.NoItem("No Individual", 0); - } - return super.canWork(); - } - - @Override - public ErrorState canProgress() { - if (!getUtil().spaceInTank(0, getDNAAmount(getUtil().getStack(0)))) { - return new ErrorState.NoSpace("Not enough room in Tank", new int[]{0}); - } - if (!getUtil().liquidInTank(1, 1)) { - return new ErrorState.InsufficientLiquid("Not enough Ethanol", 1); - } - if (getUtil().getSlotCharge(7) == 0.0f) { - return new ErrorState.NoItem("Insufficient Enzyme", 7); - } - return super.canProgress(); - } - - @Override - protected void onFinishTask() { - super.onFinishTask(); - int amount = getDNAAmount(getUtil().getStack(0)); - getUtil().fillTank(0, GeneticLiquid.RawDNA.get(amount)); - getUtil().deleteStack(0); - } - - private int getDNAAmount(ItemStack stack) { - ISpeciesRoot root = AlleleManager.alleleRegistry.getSpeciesRoot(stack); - if (root == null) { - return 10; - } - if (root != Binnie.Genetics.getBeeRoot()) { - return 10; - } - if (Binnie.Genetics.getBeeRoot().isDrone(stack)) { - return 10; - } - if (Binnie.Genetics.getBeeRoot().isMated(stack)) { - return 50; - } - return 30; - } - - @Override - protected void onTickTask() { - ethanolDrain += getDNAAmount(getUtil().getStack(0)) * 1.2f * getProgressPerTick() / 100.0f; - if (ethanolDrain >= 1.0f) { - getUtil().drainTank(1, 1); - ethanolDrain--; - } - getMachine().getInterface(IChargedSlots.class).alterCharge(7, -enzymePerProcess * getProgressPerTick() / 100.0f); - } - } - - public static class ComponentGenepoolFX extends MachineComponent implements IRender.RandomDisplayTick, IRender.DisplayTick { - public ComponentGenepoolFX(IMachine machine) { - super(machine); - } - - @SideOnly(Side.CLIENT) - @Override - public void onRandomDisplayTick(World world, int x, int y, int z, Random rand) { - // ignored - } - - @SideOnly(Side.CLIENT) - @Override - public void onDisplayTick(World world, int x, int y, int z, Random rand) { - if (rand.nextFloat() < 1.0f && getUtil().getProcess().isInProgress()) { - BinnieCore.proxy.getMinecraftInstance().effectRenderer.addEffect(new EntityFX(world, x + 0.3 + rand.nextDouble() * 0.4, y + 1, z + 0.3 + rand.nextDouble() * 0.4, 0.0, 0.0, 0.0) { - double axisX = posX; - double axisZ = posZ; - double angle = rand.nextDouble() * 2.0 * 3.1415; - - { - axisX = 0.0; - axisZ = 0.0; - angle = 0.0; - motionX = 0.0; - motionZ = 0.0; - motionY = rand.nextFloat() * 0.01; - particleMaxAge = 25; - particleGravity = 0.0f; - noClip = true; - setRBGColorF(0.4f + 0.6f * rand.nextFloat(), 0.6f * rand.nextFloat(), 0.6f + 0.4f * rand.nextFloat()); - } - - @Override - public void onUpdate() { - super.onUpdate(); - setAlphaF((float) Math.cos(1.57 * particleAge / particleMaxAge)); - } - - @Override - public int getFXLayer() { - return 0; - } - }); - } - } - } -} diff --git a/src/main/java/binnie/genetics/machine/GeneticMachine.java b/src/main/java/binnie/genetics/machine/GeneticMachine.java index 7e3e71a5..159a446b 100644 --- a/src/main/java/binnie/genetics/machine/GeneticMachine.java +++ b/src/main/java/binnie/genetics/machine/GeneticMachine.java @@ -1,23 +1,19 @@ package binnie.genetics.machine; import binnie.core.machines.IMachineType; -import binnie.core.machines.Machine; import binnie.core.machines.MachinePackage; -import binnie.core.machines.TileEntityMachine; -import binnie.core.resource.BinnieResource; -import binnie.core.resource.IBinnieTexture; import binnie.genetics.Genetics; -import binnie.genetics.machine.inoculator.PackageInoculator; -import binnie.genetics.machine.sequencer.PackageSequencer; -import net.minecraft.client.renderer.RenderBlocks; +import binnie.genetics.machine.inoculator.InoculatorPackage; +import binnie.genetics.machine.isolator.IsolatorPackage; +import binnie.genetics.machine.polymeriser.PolymeriserPackage; +import binnie.genetics.machine.sequencer.SequencerPackage; import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; public enum GeneticMachine implements IMachineType { - Isolator(Isolator.PackageIsolator.class), - Sequencer(PackageSequencer.class), - Polymeriser(Polymeriser.PackagePolymeriser.class), - Inoculator(PackageInoculator.class); + Isolator(IsolatorPackage.class), + Sequencer(SequencerPackage.class), + Polymeriser(PolymeriserPackage.class), + Inoculator(InoculatorPackage.class); protected Class clss; @@ -38,25 +34,4 @@ public enum GeneticMachine implements IMachineType { public ItemStack get(int i) { return new ItemStack(Genetics.packageGenetic.getBlock(), i, ordinal()); } - - public abstract static class PackageGeneticBase extends MachinePackage { - protected BinnieResource renderTexture; - protected int colour; - - protected PackageGeneticBase(String uid, IBinnieTexture renderTexture, int flashColor, boolean powered) { - super(uid, powered); - this.renderTexture = renderTexture.getTexture(); - colour = flashColor; - } - - @Override - public TileEntity createTileEntity() { - return new TileEntityMachine(this); - } - - @Override - public void renderMachine(Machine machine, double x, double y, double z, float partialTick, RenderBlocks renderer) { - MachineRendererGenetics.instance.renderMachine(machine, colour, renderTexture, x, y, z, partialTick); - } - } } diff --git a/src/main/java/binnie/genetics/machine/Incubator.java b/src/main/java/binnie/genetics/machine/Incubator.java deleted file mode 100644 index 846f4e21..00000000 --- a/src/main/java/binnie/genetics/machine/Incubator.java +++ /dev/null @@ -1,345 +0,0 @@ -package binnie.genetics.machine; - -import binnie.Binnie; -import binnie.core.BinnieCore; -import binnie.core.craftgui.minecraft.IMachineInformation; -import binnie.core.machines.Machine; -import binnie.core.machines.MachineUtil; -import binnie.core.machines.TileEntityMachine; -import binnie.core.machines.inventory.ComponentInventorySlots; -import binnie.core.machines.inventory.ComponentTankContainer; -import binnie.core.machines.inventory.InventorySlot; -import binnie.core.machines.power.ComponentPowerReceptor; -import binnie.core.machines.power.ComponentProcessIndefinate; -import binnie.core.machines.power.ErrorState; -import binnie.core.machines.power.IProcess; -import binnie.core.machines.transfer.TransferRequest; -import binnie.genetics.api.IIncubatorRecipe; -import binnie.genetics.core.GeneticsGUI; -import binnie.genetics.core.GeneticsTexture; -import binnie.genetics.item.GeneticLiquid; -import binnie.genetics.item.GeneticsItems; -import forestry.api.apiculture.EnumBeeType; -import forestry.api.apiculture.IBee; -import net.minecraft.init.Items; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraftforge.fluids.FluidStack; - -import java.util.ArrayList; -import java.util.List; -import java.util.Random; - -public class Incubator { - public static int[] slotQueue = new int[]{0, 1, 2}; - public static int[] slotOutput = new int[]{4, 5, 6}; - public static int slotIncubator = 3; - public static int tankInput = 0; - public static int tankOutput = 1; - private static List RECIPES = new ArrayList<>(); - - public static void addRecipes() { - Incubator.RECIPES.add(new IncubatorRecipe(Binnie.Liquid.getLiquidStack("water", 25), GeneticLiquid.GrowthMedium.get(25), 0.2f) { - @Override - public boolean isItemStack(ItemStack stack) { - return GeneticsItems.GrowthMedium.get(1).isItemEqual(stack); - } - }); - Incubator.RECIPES.add(new IncubatorRecipe(GeneticLiquid.GrowthMedium.get(25), GeneticLiquid.Bacteria.get(5), 0.2f) { - @Override - public boolean isItemStack(ItemStack stack) { - return new ItemStack(Items.wheat).isItemEqual(stack); - } - }); - Incubator.RECIPES.add(new IncubatorRecipe(GeneticLiquid.Bacteria.get(0), GeneticLiquid.Bacteria.get(5), 0.05f) { - @Override - public boolean isItemStack(ItemStack stack) { - return GeneticsItems.GrowthMedium.get(1).isItemEqual(stack); - } - }); - Incubator.RECIPES.add(new IncubatorRecipe(GeneticLiquid.Bacteria.get(2), null, 0.5f, 0.2f) { - @Override - public boolean isItemStack(ItemStack stack) { - return stack.getItem() == Items.sugar; - } - }.setOutputStack(GeneticsItems.Enzyme.get(1))); - Incubator.RECIPES.add(new IncubatorRecipe(GeneticLiquid.BacteriaPoly.get(0), GeneticLiquid.BacteriaPoly.get(5), 0.05f) { - @Override - public boolean isItemStack(ItemStack stack) { - return GeneticsItems.GrowthMedium.get(1).isItemEqual(stack); - } - }); - Incubator.RECIPES.add(new IncubatorRecipe(GeneticLiquid.BacteriaVector.get(0), GeneticLiquid.BacteriaVector.get(5), 0.05f) { - @Override - public boolean isItemStack(ItemStack stack) { - return GeneticsItems.GrowthMedium.get(1).isItemEqual(stack); - } - }); - Incubator.RECIPES.add(new IncubatorRecipe(GeneticLiquid.Bacteria.get(10), GeneticLiquid.BacteriaPoly.get(10), 0.1f) { - @Override - public boolean isItemStack(ItemStack stack) { - return new ItemStack(Items.dye, 1, 15).isItemEqual(stack); - } - }); - Incubator.RECIPES.add(new IncubatorRecipe(GeneticLiquid.Bacteria.get(10), GeneticLiquid.BacteriaVector.get(10), 0.05f) { - @Override - public boolean isItemStack(ItemStack stack) { - return new ItemStack(Items.blaze_powder).isItemEqual(stack); - } - }); - - if (BinnieCore.isApicultureActive()) { - Incubator.RECIPES.add(new IncubatorRecipe(GeneticLiquid.GrowthMedium.get(50), null, 1.0f, 0.05f) { - @Override - public boolean isItemStack(ItemStack stack) { - return Binnie.Genetics.getBeeRoot().isMember(stack) && Binnie.Genetics.getBeeRoot().getType(stack) == EnumBeeType.LARVAE; - } - - @Override - public ItemStack getOutputStack(MachineUtil machine) { - ItemStack larvae = machine.getStack(3); - IBee bee = Binnie.Genetics.getBeeRoot().getMember(larvae); - return Binnie.Genetics.getBeeRoot().getMemberStack(bee, EnumBeeType.DRONE.ordinal()); - } - }); - } - } - - public static class PackageIncubator extends GeneticMachine.PackageGeneticBase implements IMachineInformation { - public PackageIncubator() { - super("incubator", GeneticsTexture.Incubator, 16767313, true); - } - - @Override - public void createMachine(Machine machine) { - new ComponentGeneticGUI(machine, GeneticsGUI.Incubator); - ComponentInventorySlots inventory = new ComponentInventorySlots(machine); - inventory.addSlotArray(Incubator.slotQueue, "input"); - for (InventorySlot slot : inventory.getSlots(Incubator.slotQueue)) { - slot.forbidExtraction(); - } - inventory.addSlot(3, "incubator"); - inventory.getSlot(3).forbidInteraction(); - inventory.getSlot(3).setReadOnly(); - inventory.addSlotArray(Incubator.slotOutput, "output"); - for (InventorySlot slot : inventory.getSlots(Incubator.slotOutput)) { - slot.forbidInsertion(); - slot.setReadOnly(); - } - new ComponentPowerReceptor(machine, 2000); - ComponentTankContainer tanks = new ComponentTankContainer(machine); - tanks.addTank(0, "input", 2000).forbidExtraction(); - tanks.addTank(1, "output", 2000).setReadOnly(); - new ComponentIncubatorLogic(machine); - } - - @Override - public TileEntity createTileEntity() { - return new TileEntityMachine(this); - } - } - - public static class ComponentIncubatorLogic extends ComponentProcessIndefinate implements IProcess { - IIncubatorRecipe recipe; - private Random rand; - private boolean roomForOutput; - - public ComponentIncubatorLogic(Machine machine) { - super(machine, 2.0f); - recipe = null; - rand = new Random(); - roomForOutput = true; - } - - @Override - public ErrorState canWork() { - if (recipe == null) { - return new ErrorState("No Recipe", "There is no valid recipe"); - } - return super.canWork(); - } - - @Override - public ErrorState canProgress() { - if (recipe != null) { - if (!recipe.isInputLiquidSufficient(getUtil().getFluid(0))) { - return new ErrorState.InsufficientLiquid("Not enough incubation liquid", 0); - } - if (!roomForOutput) { - return new ErrorState.TankSpace("No room for output", 1); - } - } - return super.canProgress(); - } - - @Override - protected void onTickTask() { - if (rand.nextInt(20) == 0 && recipe != null && rand.nextFloat() < recipe.getChance()) { - recipe.doTask(getUtil()); - } - } - - @Override - public boolean inProgress() { - return recipe != null; - } - - private IIncubatorRecipe getRecipe(ItemStack stack, FluidStack liquid) { - for (IIncubatorRecipe recipe : Incubator.RECIPES) { - boolean rightLiquid = recipe.isInputLiquid(liquid); - boolean rightItem = recipe.isItemStack(stack); - if (rightLiquid && rightItem) { - return recipe; - } - } - return null; - } - - @Override - public void onInventoryUpdate() { - super.onInventoryUpdate(); - if (!getUtil().isServer()) { - return; - } - - FluidStack liquid = getUtil().getFluid(0); - ItemStack incubator = getUtil().getStack(3); - if (recipe != null && (incubator == null || liquid == null || !recipe.isInputLiquid(liquid) || !recipe.isItemStack(incubator))) { - recipe = null; - ItemStack leftover = new TransferRequest(incubator, getInventory()).setTargetSlots(Incubator.slotOutput).ignoreValidation().transfer(true); - getUtil().setStack(3, leftover); - } - - if (recipe == null) { - if (liquid == null) { - return; - } - if (incubator != null) { - IIncubatorRecipe recipe = getRecipe(incubator, liquid); - if (recipe != null) { - this.recipe = recipe; - return; - } - } - - IIncubatorRecipe potential = null; - int potentialSlot = 0; - for (int slot : Incubator.slotQueue) { - ItemStack stack = getUtil().getStack(slot); - if (stack != null) { - if (potential == null) { - for (IIncubatorRecipe recipe2 : Incubator.RECIPES) { - boolean rightLiquid = recipe2.isInputLiquid(liquid); - boolean rightItem = recipe2.isItemStack(stack); - if (rightLiquid && rightItem) { - potential = recipe2; - potentialSlot = slot; - break; - } - } - } - } - } - - if (potential != null) { - TransferRequest removal = new TransferRequest(incubator, getInventory()).setTargetSlots(Incubator.slotOutput).ignoreValidation(); - if (removal.transfer(false) == null) { - recipe = potential; - } - removal.transfer(true); - ItemStack stack2 = getUtil().getStack(potentialSlot); - getUtil().setStack(potentialSlot, null); - getUtil().setStack(3, stack2); - } - } - - if (recipe != null) { - roomForOutput = recipe.roomForOutput(getUtil()); - } - } - } - - private abstract static class IncubatorRecipe implements IIncubatorRecipe { - protected FluidStack input; - protected FluidStack output; - protected float lossChance; - protected ItemStack outputStack; - protected float tickChance; - - public IncubatorRecipe(FluidStack input, FluidStack output, float lossChance) { - this(input, output, lossChance, 1.0f); - } - - public IncubatorRecipe(FluidStack input, FluidStack output, float lossChance, float chance) { - this.input = input; - this.output = output; - this.lossChance = lossChance; - tickChance = chance; - } - - @Override - public float getChance() { - return tickChance; - } - - @Override - public boolean isInputLiquid(FluidStack liquid) { - return liquid != null && input.isFluidEqual(liquid); - } - - @Override - public boolean isInputLiquidSufficient(FluidStack liquid) { - return liquid != null && liquid.amount >= 500; - } - - @Override - public void doTask(MachineUtil machine) { - machine.drainTank(0, input.amount); - if (output != null) { - machine.fillTank(1, output); - } - - outputStack = getOutputStack(machine); - if (outputStack != null) { - ItemStack output = outputStack.copy(); - TransferRequest product = new TransferRequest(output, machine.getInventory()).setTargetSlots(Incubator.slotOutput).ignoreValidation(); - product.transfer(true); - } - - Random rand = machine.getRandom(); - if (rand.nextFloat() < lossChance) { - machine.decreaseStack(3, 1); - } - } - - public IncubatorRecipe setOutputStack(ItemStack stack) { - outputStack = stack; - return this; - } - - protected ItemStack getOutputStack(MachineUtil util) { - return outputStack; - } - - @Override - public boolean roomForOutput(MachineUtil machine) { - if (output != null && !machine.isTankEmpty(1)) { - if (!machine.getFluid(1).isFluidEqual(output)) { - return false; - } - if (!machine.spaceInTank(1, output.amount)) { - return false; - } - } - - ItemStack outputStack = getOutputStack(machine); - if (outputStack != null) { - ItemStack output = outputStack.copy(); - TransferRequest product = new TransferRequest(output, machine.getInventory()).setTargetSlots(Incubator.slotOutput).ignoreValidation(); - ItemStack leftover = product.transfer(false); - return leftover == null; - } - return true; - } - } -} diff --git a/src/main/java/binnie/genetics/machine/Isolator.java b/src/main/java/binnie/genetics/machine/Isolator.java deleted file mode 100644 index 59cdb53e..00000000 --- a/src/main/java/binnie/genetics/machine/Isolator.java +++ /dev/null @@ -1,276 +0,0 @@ -package binnie.genetics.machine; - -import binnie.core.BinnieCore; -import binnie.core.craftgui.minecraft.IMachineInformation; -import binnie.core.genetics.Gene; -import binnie.core.machines.IMachine; -import binnie.core.machines.Machine; -import binnie.core.machines.MachineComponent; -import binnie.core.machines.TileEntityMachine; -import binnie.core.machines.component.IRender; -import binnie.core.machines.inventory.ComponentChargedSlots; -import binnie.core.machines.inventory.ComponentInventorySlots; -import binnie.core.machines.inventory.ComponentInventoryTransfer; -import binnie.core.machines.inventory.ComponentTankContainer; -import binnie.core.machines.inventory.IChargedSlots; -import binnie.core.machines.inventory.InventorySlot; -import binnie.core.machines.inventory.SlotValidator; -import binnie.core.machines.inventory.TankValidator; -import binnie.core.machines.power.ComponentPowerReceptor; -import binnie.core.machines.power.ComponentProcessSetCost; -import binnie.core.machines.power.ErrorState; -import binnie.core.machines.power.IProcess; -import binnie.genetics.core.GeneticsGUI; -import binnie.genetics.core.GeneticsTexture; -import binnie.genetics.item.GeneticsItems; -import binnie.genetics.item.ItemSequence; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import forestry.api.genetics.AlleleManager; -import forestry.api.genetics.IAllele; -import forestry.api.genetics.IChromosomeType; -import forestry.api.genetics.IIndividual; -import forestry.api.genetics.ISpeciesRoot; -import net.minecraft.client.particle.EntityFX; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.world.World; -import net.minecraftforge.fluids.FluidStack; - -import java.util.Random; - -public class Isolator { - public static int slotEnzyme = 0; - public static int slotSequencerVial = 1; - public static int[] slotReserve = new int[]{2, 3, 4}; - public static int[] slotFinished = new int[]{7, 8, 9, 10, 11, 12}; - public static int slotTarget = 5; - public static int slotResult = 6; - public static int tankEthanol = 0; - - public static class PackageIsolator extends GeneticMachine.PackageGeneticBase implements IMachineInformation { - public PackageIsolator() { - super("isolator", GeneticsTexture.Isolator, 16740111, true); - } - - @Override - public void createMachine(Machine machine) { - new ComponentGeneticGUI(machine, GeneticsGUI.Isolator); - ComponentInventorySlots inventory = new ComponentInventorySlots(machine); - inventory.addSlot(0, "enzyme"); - inventory.getSlot(0).setValidator(new SlotValidator.Item(GeneticsItems.Enzyme.get(1), ModuleMachine.IconEnzyme)); - inventory.getSlot(0).forbidExtraction(); - inventory.addSlot(1, "sequencervial"); - inventory.getSlot(1).setValidator(new SlotValidator.Item(GeneticsItems.EmptySequencer.get(1), ModuleMachine.IconSequencer)); - inventory.getSlot(1).forbidExtraction(); - inventory.addSlotArray(Isolator.slotReserve, "input"); - for (InventorySlot slot : inventory.getSlots(Isolator.slotReserve)) { - slot.setValidator(new SlotValidator.Individual()); - slot.forbidExtraction(); - } - - inventory.addSlot(5, "process"); - inventory.getSlot(5).setValidator(new SlotValidator.Individual()); - inventory.getSlot(5).setReadOnly(); - inventory.getSlot(5).forbidInteraction(); - - inventory.addSlot(6, "output"); - inventory.getSlot(6).setReadOnly(); - inventory.getSlot(6).forbidInteraction(); - inventory.addSlotArray(Isolator.slotFinished, "output"); - for (InventorySlot slot : inventory.getSlots(Isolator.slotFinished)) { - slot.setReadOnly(); - slot.forbidInsertion(); - } - - ComponentTankContainer tanks = new ComponentTankContainer(machine); - tanks.addTank(0, "input", 1000); - tanks.getTankSlot(0).setValidator(new TankValidator() { - @Override - public String getTooltip() { - return "Ethanol"; - } - - @Override - public boolean isValid(FluidStack liquid) { - return liquid.getFluid().getName() == "bioethanol"; - } - }); - - ComponentChargedSlots chargedSlots = new ComponentChargedSlots(machine); - chargedSlots.addCharge(0); - ComponentInventoryTransfer transfer = new ComponentInventoryTransfer(machine); - transfer.addRestock(Isolator.slotReserve, 5, 1); - transfer.addStorage(6, Isolator.slotFinished); - new ComponentPowerReceptor(machine, 20000); - new ComponentIsolatorLogic(machine); - new ComponentIsolaterFX(machine); - } - - @Override - public TileEntity createTileEntity() { - return new TileEntityMachine(this); - } - } - - public static class ComponentIsolatorLogic extends ComponentProcessSetCost implements IProcess { - protected float enzymePerProcess; - protected float ethanolPerProcess; - - public ComponentIsolatorLogic(Machine machine) { - super(machine, 192000, 4800); - enzymePerProcess = 0.5f; - ethanolPerProcess = 10.0f; - } - - @Override - public ErrorState canWork() { - if (getUtil().isSlotEmpty(5)) { - return new ErrorState.NoItem("No individual to isolate", 5); - } - if (!getUtil().isSlotEmpty(6)) { - return new ErrorState.NoSpace("No room for DNA sequences", Isolator.slotFinished); - } - if (getUtil().isSlotEmpty(1)) { - return new ErrorState.NoItem("No empty sequencer vials", 1); - } - return super.canWork(); - } - - @Override - public ErrorState canProgress() { - if (!getUtil().liquidInTank(0, (int) ethanolPerProcess)) { - return new ErrorState.InsufficientLiquid("Insufficient ethanol", 0); - } - if (getUtil().getSlotCharge(0) == 0.0f) { - return new ErrorState.NoItem("No enzyme", 0); - } - return super.canProgress(); - } - - @Override - protected void onFinishTask() { - super.onFinishTask(); - Random rand = getMachine().getWorld().rand; - ISpeciesRoot root = AlleleManager.alleleRegistry.getSpeciesRoot(getUtil().getStack(5)); - if (root == null) { - return; - } - - IIndividual individual = root.getMember(getUtil().getStack(5)); - if (individual == null) { - return; - } - - IAllele allele; - IChromosomeType chromosome; - Gene gene = null; - if (getMachine().getWorld().rand.nextFloat() < 2.0f) { - while (gene == null) { - try { - chromosome = root.getKaryotype()[rand.nextInt(root.getKaryotype().length)]; - allele = rand.nextBoolean() ? - individual.getGenome().getActiveAllele(chromosome) : - individual.getGenome().getInactiveAllele(chromosome); - gene = Gene.create(allele, chromosome, root); - } catch (Exception e) { - // ignored - } - } - } - - ItemStack serum = ItemSequence.create(gene); - getUtil().setStack(6, serum); - getUtil().decreaseStack(1, 1); - if (rand.nextFloat() < 0.05f) { - getUtil().decreaseStack(5, 1); - } - getUtil().drainTank(0, (int) ethanolPerProcess); - } - - @Override - protected void onTickTask() { - getMachine().getInterface(IChargedSlots.class).alterCharge(0, -enzymePerProcess * getProgressPerTick() / 100.0f); - } - } - - public static class ComponentIsolaterFX extends MachineComponent implements IRender.RandomDisplayTick, IRender.DisplayTick { - public ComponentIsolaterFX(IMachine machine) { - super(machine); - } - - @SideOnly(Side.CLIENT) - @Override - public void onRandomDisplayTick(World world, int x, int y, int z, Random rand) { - if (!getUtil().getProcess().isInProgress()) { - return; - } - BinnieCore.proxy.getMinecraftInstance().effectRenderer.addEffect(new EntityFX(world, x + 0.4 + 0.2 * rand.nextDouble(), y + 1.6, z + 0.4 + rand.nextDouble() * 0.2, 0.0, 0.0, 0.0) { - double axisX = 0.0; - double axisZ = 0.0; - double angle = 0.0; - - { - motionX = 0.0; - motionZ = 0.0; - motionY = -0.012; - particleMaxAge = 100; - particleGravity = 0.0f; - noClip = true; - setRBGColorF(0.8f, 0.4f, 0.0f); - } - - @Override - public void onUpdate() { - super.onUpdate(); - angle += 0.06; - setAlphaF((float) Math.sin(3.14 * particleAge / particleMaxAge)); - } - - @Override - public int getFXLayer() { - return 0; - } - }); - } - - @SideOnly(Side.CLIENT) - @Override - public void onDisplayTick(World world, int x, int y, int z, Random rand) { - int tick = (int) (world.getTotalWorldTime() % 6L); - if ((tick == 0 || tick == 5) && getUtil().getProcess().isInProgress()) { - BinnieCore.proxy.getMinecraftInstance().effectRenderer.addEffect(new EntityFX(world, x + 0.5, y + 1, z + 0.5, 0.0, 0.0, 0.0) { - double axisX = posX; - double axisZ = posZ; - double angle = 0.7 + (int) (worldObj.getTotalWorldTime() % 2L) * 3.1415; - - { - axisX = 0.0; - axisZ = 0.0; - angle = 0.0; - motionX = 0.0; - motionZ = 0.0; - motionY = 0.012; - particleMaxAge = 100; - particleGravity = 0.0f; - noClip = true; - setRBGColorF(0.8f, 0.0f, 1.0f); - } - - @Override - public void onUpdate() { - super.onUpdate(); - angle += 0.06; - setPosition(axisX + 0.26 * Math.sin(angle), posY, axisZ + 0.26 * Math.cos(angle)); - setAlphaF((float) Math.cos(1.57 * particleAge / particleMaxAge)); - } - - @Override - public int getFXLayer() { - return 0; - } - }); - } - } - } -} diff --git a/src/main/java/binnie/genetics/machine/LaboratoryMachine.java b/src/main/java/binnie/genetics/machine/LaboratoryMachine.java index 7b3085c0..94a4a2da 100644 --- a/src/main/java/binnie/genetics/machine/LaboratoryMachine.java +++ b/src/main/java/binnie/genetics/machine/LaboratoryMachine.java @@ -1,40 +1,23 @@ package binnie.genetics.machine; -import binnie.botany.Botany; -import binnie.core.BinnieCore; -import binnie.core.machines.IMachine; import binnie.core.machines.IMachineType; -import binnie.core.machines.Machine; -import binnie.core.machines.MachineComponent; import binnie.core.machines.MachinePackage; -import binnie.core.machines.component.IInteraction; -import binnie.core.machines.network.INetwork; -import binnie.extrabees.ExtraBees; -import binnie.extratrees.ExtraTrees; import binnie.genetics.Genetics; -import binnie.genetics.core.GeneticsTexture; -import buildcraft.api.tools.IToolWrench; -import net.minecraft.client.renderer.RenderBlocks; -import net.minecraft.entity.item.EntityItem; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.Item; +import binnie.genetics.machine.acclimatiser.AcclimatiserPackage; +import binnie.genetics.machine.analyser.AnalyserPackage; +import binnie.genetics.machine.genepool.GenepoolPackage; +import binnie.genetics.machine.incubator.IncubatorPackage; +import binnie.genetics.machine.lab.LabMachinePackage; import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.world.World; - -import java.util.ArrayList; -import java.util.List; -import java.util.Random; public enum LaboratoryMachine implements IMachineType { - LabMachine(PackageLabMachine.class), - Analyser(Analyser.PackageAnalyser.class), - Incubator(Incubator.PackageIncubator.class), - Genepool(Genepool.PackageGenepool.class), - Acclimatiser(Acclimatiser.PackageAcclimatiser.class); + LabMachine(LabMachinePackage.class), + Analyser(AnalyserPackage.class), + Incubator(IncubatorPackage.class), + Genepool(GenepoolPackage.class), + Acclimatiser(AcclimatiserPackage.class); - Class clss; + private Class clss; LaboratoryMachine(Class clss) { this.clss = clss; @@ -53,145 +36,4 @@ public enum LaboratoryMachine implements IMachineType { public ItemStack get(int i) { return new ItemStack(Genetics.packageLabMachine.getBlock(), i, ordinal()); } - - public static class PackageLabMachine extends GeneticMachine.PackageGeneticBase { - public PackageLabMachine() { - super("labMachine", GeneticsTexture.LabMachine, 16777215, false); - } - - @Override - public void createMachine(Machine machine) { - new ComponentGUIHolder(machine); - } - - @Override - public void renderMachine(Machine machine, double x, double y, double z, float partialTick, RenderBlocks renderer) { - MachineRendererLab.instance.renderMachine(machine, colour, renderTexture, x, y, z, partialTick); - } - } - - public static class ComponentGUIHolder extends MachineComponent implements INetwork.TilePacketSync, IInteraction.RightClick { - private ItemStack stack; - - public ComponentGUIHolder(IMachine machine) { - super(machine); - } - - public ItemStack getStack() { - return stack; - } - - @Override - public void readFromNBT(NBTTagCompound nbttagcompound) { - super.readFromNBT(nbttagcompound); - if (nbttagcompound == null) { - return; - } - stack = ItemStack.loadItemStackFromNBT(nbttagcompound.getCompoundTag("Item")); - } - - @Override - public void writeToNBT(NBTTagCompound nbttagcompound) { - super.writeToNBT(nbttagcompound); - NBTTagCompound nbt = new NBTTagCompound(); - if (stack != null) { - stack.writeToNBT(nbt); - } - nbttagcompound.setTag("Item", nbt); - } - - @Override - public void syncToNBT(NBTTagCompound nbt) { - writeToNBT(nbt); - } - - @Override - public void syncFromNBT(NBTTagCompound nbt) { - readFromNBT(nbt); - } - - @Override - public void onDestruction() { - super.onDestruction(); - if (stack == null) { - return; - } - - IMachine machine = getMachine(); - TileEntity tile = machine.getTileEntity(); - World world = machine.getWorld(); - Random rand = world.rand; - float xOffset = rand.nextFloat() * 0.8f + 0.1f; - float yOffset = rand.nextFloat() * 0.8f + 0.1f; - float zOffset = rand.nextFloat() * 0.8f + 0.1f; - if (stack.stackSize == 0) { - stack.stackSize = 1; - } - - EntityItem entityitem = new EntityItem(world, tile.xCoord + xOffset, tile.yCoord + yOffset, tile.zCoord + zOffset, stack.copy()); - float accel = 0.05f; - entityitem.motionX = (float) rand.nextGaussian() * accel; - entityitem.motionY = (float) rand.nextGaussian() * accel + 0.2f; - entityitem.motionZ = (float) rand.nextGaussian() * accel; - world.spawnEntityInWorld(entityitem); - } - - @Override - public void onRightClick(World world, EntityPlayer player, int x, int y, int z) { - if (BinnieCore.proxy.isSimulating(world) && player.getHeldItem() != null) { - if (stack != null && player.getHeldItem().getItem() instanceof IToolWrench) { - Random rand = world.rand; - float f = 0.7f; - double fOffset = (1.0f - f) * 0.5; - double xOffset = rand.nextFloat() * f + fOffset; - double yOffset = rand.nextFloat() * f + fOffset; - double zOffset = rand.nextFloat() * f + fOffset; - - EntityItem entityitem = new EntityItem(world, x + xOffset, y + yOffset, z + zOffset, stack); - entityitem.delayBeforeCanPickup = 10; - world.spawnEntityInWorld(entityitem); - stack = null; - ((IToolWrench) player.getHeldItem().getItem()).wrenchUsed(player, x, y, z); - getUtil().refreshBlock(); - return; - } - - List validSelections = new ArrayList<>(); - if (BinnieCore.isBotanyActive()) { - validSelections.add(Botany.database); - } - if (BinnieCore.isExtraBeesActive()) { - validSelections.add(ExtraBees.dictionary); - } - if (BinnieCore.isExtraTreesActive()) { - validSelections.add(ExtraTrees.itemDictionary); - } - if (BinnieCore.isLepidopteryActive()) { - validSelections.add(ExtraTrees.itemDictionaryLepi); - } - - validSelections.add(Genetics.database); - validSelections.add(Genetics.analyst); - validSelections.add(Genetics.registry); - validSelections.add(Genetics.masterRegistry); - validSelections.add(BinnieCore.genesis); - - if (stack == null && validSelections.contains(player.getHeldItem().getItem())) { - stack = player.getHeldItem().copy(); - ItemStack heldItem = player.getHeldItem(); - heldItem.stackSize--; - world.markBlockForUpdate(x, y, z); - return; - } - - if (stack != null && player.getHeldItem().getItem() instanceof IToolWrench) { - stack.getItem().onItemRightClick(stack, world, player); - } - } - - if (stack != null) { - stack.getItem().onItemRightClick(stack, world, player); - } - } - } } diff --git a/src/main/java/binnie/genetics/machine/MachineRendererGenetics.java b/src/main/java/binnie/genetics/machine/MachineRendererGenetics.java index 6344fc10..1d6501f0 100644 --- a/src/main/java/binnie/genetics/machine/MachineRendererGenetics.java +++ b/src/main/java/binnie/genetics/machine/MachineRendererGenetics.java @@ -13,13 +13,10 @@ import org.lwjgl.opengl.GL11; @SideOnly(Side.CLIENT) public class MachineRendererGenetics { - public static MachineRendererGenetics instance; - - static { - MachineRendererGenetics.instance = new MachineRendererGenetics(); - } + public static MachineRendererGenetics instance = new MachineRendererGenetics(); public RenderItem customRenderItem; + private ModelMachine model; public MachineRendererGenetics() { @@ -40,15 +37,6 @@ public class MachineRendererGenetics { public void renderMachine(Machine machine, int colour, BinnieResource texture, double x, double y, double z, float var8) { GL11.glPushMatrix(); - int i1 = 0; - int ix = machine.getTileEntity().xCoord; - int iy = machine.getTileEntity().yCoord; - int iz = machine.getTileEntity().zCoord; - if (machine.getTileEntity() != null) { - i1 = ix * iy * iz + ix * iy - ix * iz + iy * iz - ix + iy - iz; - } - - float phase = (float) Math.max(0.0, Math.sin((System.currentTimeMillis() + i1) * 0.003)); GL11.glTranslated(x + 0.5, y + 1.5, z + 0.5); GL11.glRotatef(180.0f, 0.0f, 0.0f, 1.0f); BinnieCore.proxy.bindTexture(texture); @@ -63,6 +51,7 @@ public class MachineRendererGenetics { render.renderInWorld(customRenderItem, x, y, z); } } + GL11.glPopMatrix(); GL11.glPopMatrix(); } diff --git a/src/main/java/binnie/genetics/machine/MachineRendererLab.java b/src/main/java/binnie/genetics/machine/MachineRendererLab.java index 44dc609c..74d1d8b7 100644 --- a/src/main/java/binnie/genetics/machine/MachineRendererLab.java +++ b/src/main/java/binnie/genetics/machine/MachineRendererLab.java @@ -43,15 +43,9 @@ public class MachineRendererLab { public void renderMachine(Machine machine, int colour, BinnieResource texture, double x, double y, double z, float var8) { GL11.glPushMatrix(); - int i1 = 0; int ix = machine.getTileEntity().xCoord; - int iy = machine.getTileEntity().yCoord; int iz = machine.getTileEntity().zCoord; - if (machine.getTileEntity() != null) { - i1 = ix * iy * iz + ix * iy - ix * iz + iy * iz - ix + iy - iz; - } - float phase = (float) Math.max(0.0, Math.sin((System.currentTimeMillis() + i1) * 0.003)); GL11.glTranslated(x + 0.5, y + 1.5, z + 0.5); GL11.glRotatef(180.0f, 0.0f, 0.0f, 1.0f); BinnieCore.proxy.bindTexture(texture); @@ -59,7 +53,7 @@ public class MachineRendererLab { model.render((float) x, (float) y, (float) z, 0.0625f, 0.0625f, 0.0625f); GL11.glPopMatrix(); World world = machine.getWorld(); - LaboratoryMachine.ComponentGUIHolder holder = Machine.getInterface(LaboratoryMachine.ComponentGUIHolder.class, machine); + ComponentGUIHolder holder = Machine.getInterface(ComponentGUIHolder.class, machine); // TODO remove label Label_0591: @@ -91,6 +85,7 @@ public class MachineRendererLab { customRenderItem.doRender(dummyEntityItem, 0.0, 0.0, 0.0, 0.0f, 0.0f); GL11.glPopMatrix(); int rot = 0; + for (EntityItem item : itemSides) { GL11.glPushMatrix(); item.worldObj = world; diff --git a/src/main/java/binnie/genetics/machine/ModelMachine.java b/src/main/java/binnie/genetics/machine/ModelMachine.java index ec4bd256..da6d1d35 100644 --- a/src/main/java/binnie/genetics/machine/ModelMachine.java +++ b/src/main/java/binnie/genetics/machine/ModelMachine.java @@ -4,13 +4,13 @@ import net.minecraft.client.model.ModelBase; import net.minecraft.client.model.ModelRenderer; public class ModelMachine extends ModelBase { - ModelRenderer base; - ModelRenderer body; - ModelRenderer arm1; - ModelRenderer arm2; - ModelRenderer arm3; - ModelRenderer arm4; - ModelRenderer top; + private ModelRenderer base; + private ModelRenderer body; + private ModelRenderer arm1; + private ModelRenderer arm2; + private ModelRenderer arm3; + private ModelRenderer arm4; + private ModelRenderer top; public ModelMachine() { textureWidth = 64; diff --git a/src/main/java/binnie/genetics/machine/ModuleMachine.java b/src/main/java/binnie/genetics/machine/ModuleMachine.java index 0b3de9f3..c705141b 100644 --- a/src/main/java/binnie/genetics/machine/ModuleMachine.java +++ b/src/main/java/binnie/genetics/machine/ModuleMachine.java @@ -8,6 +8,8 @@ import binnie.core.machines.inventory.ValidatorIcon; import binnie.genetics.CreativeTabGenetics; import binnie.genetics.Genetics; import binnie.genetics.item.GeneticsItems; +import binnie.genetics.machine.acclimatiser.Acclimatiser; +import binnie.genetics.machine.incubator.Incubator; import cpw.mods.fml.common.registry.GameRegistry; import net.minecraft.init.Blocks; import net.minecraft.init.Items; diff --git a/src/main/java/binnie/genetics/machine/PackageGeneticBase.java b/src/main/java/binnie/genetics/machine/PackageGeneticBase.java new file mode 100644 index 00000000..787ac309 --- /dev/null +++ b/src/main/java/binnie/genetics/machine/PackageGeneticBase.java @@ -0,0 +1,30 @@ +package binnie.genetics.machine; + +import binnie.core.machines.Machine; +import binnie.core.machines.MachinePackage; +import binnie.core.machines.TileEntityMachine; +import binnie.core.resource.BinnieResource; +import binnie.core.resource.IBinnieTexture; +import net.minecraft.client.renderer.RenderBlocks; +import net.minecraft.tileentity.TileEntity; + +public abstract class PackageGeneticBase extends MachinePackage { + protected BinnieResource renderTexture; + protected int color; + + protected PackageGeneticBase(String uid, IBinnieTexture renderTexture, int flashColor, boolean powered) { + super(uid, powered); + this.renderTexture = renderTexture.getTexture(); + color = flashColor; + } + + @Override + public TileEntity createTileEntity() { + return new TileEntityMachine(this); + } + + @Override + public void renderMachine(Machine machine, double x, double y, double z, float partialTick, RenderBlocks renderer) { + MachineRendererGenetics.instance.renderMachine(machine, color, renderTexture, x, y, z, partialTick); + } +} diff --git a/src/main/java/binnie/genetics/machine/Polymeriser.java b/src/main/java/binnie/genetics/machine/Polymeriser.java deleted file mode 100644 index f6393f5c..00000000 --- a/src/main/java/binnie/genetics/machine/Polymeriser.java +++ /dev/null @@ -1,291 +0,0 @@ -package binnie.genetics.machine; - -import binnie.core.BinnieCore; -import binnie.core.craftgui.minecraft.IMachineInformation; -import binnie.core.machines.IMachine; -import binnie.core.machines.Machine; -import binnie.core.machines.MachineComponent; -import binnie.core.machines.TileEntityMachine; -import binnie.core.machines.component.IRender; -import binnie.core.machines.inventory.ComponentChargedSlots; -import binnie.core.machines.inventory.ComponentInventorySlots; -import binnie.core.machines.inventory.ComponentInventoryTransfer; -import binnie.core.machines.inventory.ComponentTankContainer; -import binnie.core.machines.inventory.InventorySlot; -import binnie.core.machines.inventory.SlotValidator; -import binnie.core.machines.inventory.Validator; -import binnie.core.machines.power.ComponentPowerReceptor; -import binnie.core.machines.power.ComponentProcessSetCost; -import binnie.core.machines.power.ErrorState; -import binnie.core.machines.power.IProcess; -import binnie.genetics.api.IItemChargable; -import binnie.genetics.core.GeneticsGUI; -import binnie.genetics.core.GeneticsTexture; -import binnie.genetics.genetics.Engineering; -import binnie.genetics.item.GeneticLiquid; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.particle.EntityFX; -import net.minecraft.init.Items; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.world.World; -import net.minecraftforge.fluids.FluidStack; - -import java.util.Random; - -public class Polymeriser { - public static int tankBacteria = 0; - public static int tankDNA = 1; - public static int slotSerum = 0; - public static int slotGold = 1; - public static int[] slotSerumReserve = new int[]{2, 3, 4, 5}; - public static int[] slotSerumFinished = new int[]{6, 7, 8, 9}; - - public static class PackagePolymeriser extends GeneticMachine.PackageGeneticBase implements IMachineInformation { - public PackagePolymeriser() { - super("polymeriser", GeneticsTexture.Polymeriser, 58819, true); - } - - @Override - public void createMachine(Machine machine) { - new ComponentGeneticGUI(machine, GeneticsGUI.Replicator); - ComponentInventorySlots inventory = new ComponentInventorySlots(machine); - inventory.addSlot(1, "catalyst"); - inventory.getSlot(1).setValidator(new SlotValidator.Item(new ItemStack(Items.gold_nugget, 1), ModuleMachine.IconNugget)); - inventory.getSlot(1).forbidExtraction(); - - inventory.addSlot(0, "process"); - inventory.getSlot(0).setValidator(new SlotValidatorUnfilledSerum()); - inventory.getSlot(0).forbidInteraction(); - inventory.getSlot(0).setReadOnly(); - - for (InventorySlot slot : inventory.addSlotArray(Polymeriser.slotSerumReserve, "input")) { - slot.setValidator(new SlotValidatorUnfilledSerum()); - slot.forbidExtraction(); - } - - for (InventorySlot slot : inventory.addSlotArray(Polymeriser.slotSerumFinished, "output")) { - slot.setReadOnly(); - } - - ComponentInventoryTransfer transfer = new ComponentInventoryTransfer(machine); - transfer.addRestock(Polymeriser.slotSerumReserve, 0, 1); - transfer.addStorage(0, Polymeriser.slotSerumFinished, new ComponentInventoryTransfer.Condition() { - @Override - public boolean fufilled(ItemStack stack) { - return !stack.isItemDamaged(); - } - }); - - ComponentTankContainer tank = new ComponentTankContainer(machine); - tank.addTank(0, "input", 1000); - tank.getTankSlot(0).setValidator(new Validator() { - @Override - public boolean isValid(FluidStack itemStack) { - return GeneticLiquid.BacteriaPoly.get(1).isFluidEqual(itemStack); - } - - @Override - public String getTooltip() { - return "Polymerising Bacteria"; - } - }); - - tank.addTank(1, "input", 1000); - tank.getTankSlot(1).setValidator(new Validator() { - @Override - public boolean isValid(FluidStack itemStack) { - return GeneticLiquid.RawDNA.get(1).isFluidEqual(itemStack); - } - - @Override - public String getTooltip() { - return "Raw DNA"; - } - }); - - new ComponentChargedSlots(machine).addCharge(1); - new ComponentPowerReceptor(machine, 8000); - new ComponentPolymeriserLogic(machine); - new ComponentPolymeriserFX(machine); - } - - @Override - public TileEntity createTileEntity() { - return new TileEntityMachine(this); - } - } - - public static class ComponentPolymeriserLogic extends ComponentProcessSetCost implements IProcess { - private static float chargePerProcess = 0.4f; - - private float dnaDrain; - private float bacteriaDrain; - - public ComponentPolymeriserLogic(Machine machine) { - super(machine, 96000, 2400); - dnaDrain = 0.0f; - bacteriaDrain = 0.0f; - } - - private float getCatalyst() { - return (getUtil().getSlotCharge(1) > 0.0f) ? 0.2f : 1.0f; - } - - @Override - public int getProcessLength() { - return (int) (super.getProcessLength() * getNumberOfGenes() * getCatalyst()); - } - - @Override - public int getProcessEnergy() { - return (int) (super.getProcessEnergy() * getNumberOfGenes() * getCatalyst()); - } - - private float getDNAPerProcess() { - return getNumberOfGenes() * 50; - } - - @Override - public void onTickTask() { - super.onTickTask(); - getUtil().useCharge(1, ComponentPolymeriserLogic.chargePerProcess * getProgressPerTick() / 100.0f); - dnaDrain += getDNAPerProcess() * getProgressPerTick() / 100.0f; - bacteriaDrain += 0.2f * getDNAPerProcess() * getProgressPerTick() / 100.0f; - - if (dnaDrain >= 1.0f) { - getUtil().drainTank(1, 1); - dnaDrain--; - } - - if (bacteriaDrain >= 1.0f) { - getUtil().drainTank(0, 1); - bacteriaDrain--; - } - } - - private int getNumberOfGenes() { - ItemStack serum = getUtil().getStack(0); - if (serum == null) { - return 1; - } - return Engineering.getGenes(serum).length; - } - - @Override - public String getTooltip() { - int n = getNumberOfGenes(); - return "Replicating " + n + " genes" + ((n > 1) ? "s" : ""); - } - - @Override - public ErrorState canWork() { - if (getUtil().isSlotEmpty(0)) { - return new ErrorState.NoItem("No item to replicate", 0); - } - if (!getUtil().getStack(0).isItemDamaged()) { - return new ErrorState.InvalidItem("Item filled", 0); - } - return super.canWork(); - } - - @Override - public ErrorState canProgress() { - if (getUtil().getFluid(0) == null) { - return new ErrorState.InsufficientLiquid("Insufficient Bacteria", 0); - } - if (getUtil().getFluid(1) == null) { - return new ErrorState.InsufficientLiquid("Insufficient DNA", 1); - } - return super.canProgress(); - } - - @Override - protected void onFinishTask() { - super.onFinishTask(); - getUtil().damageItem(0, -1); - } - } - - public static class SlotValidatorUnfilledSerum extends SlotValidator { - public SlotValidatorUnfilledSerum() { - super(ModuleMachine.IconSerum); - } - - @Override - public boolean isValid(ItemStack itemStack) { - return itemStack.getItem() instanceof IItemChargable; - } - - @Override - public String getTooltip() { - return "Unfilled Serum"; - } - } - - public static class ComponentPolymeriserFX extends MachineComponent implements IRender.RandomDisplayTick, IRender.DisplayTick { - public ComponentPolymeriserFX(IMachine machine) { - super(machine); - } - - @SideOnly(Side.CLIENT) - @Override - public void onRandomDisplayTick(World world, int x, int y, int z, Random rand) { - } - - @SideOnly(Side.CLIENT) - @Override - public void onDisplayTick(World world, int x, int y, int z, Random rand) { - int tick = (int) (world.getTotalWorldTime() % 8L); - if ((tick == 0 || tick == 3) && getUtil().getProcess().isInProgress()) { - BinnieCore.proxy.getMinecraftInstance().effectRenderer.addEffect(new EntityFX(world, x + 0.5, y + 1.8, z + 0.5, 0.0, 0.0, 0.0) { - double axisX = posX; - double axisZ = posZ; - double angle = 0.7 + (int) (worldObj.getTotalWorldTime() % 2L) * 3.1415; - - { - axisX = 0.0; - axisZ = 0.0; - angle = 0.0; - motionX = 0.0; - motionZ = 0.0; - motionY = -0.006; - particleMaxAge = 140; - particleGravity = 0.0f; - noClip = true; - setRBGColorF(0.8f, 0.0f, 1.0f); - } - - @Override - public void onUpdate() { - super.onUpdate(); - angle += 0.1; - motionY = -0.006; - double dist = 0.2; - if (particleAge > 60) { - if (particleAge > 120) { - dist = 0.1; - } else { - dist = 0.2 - 0.1 * ((particleAge - 60.0f) / 60.0f); - } - } - - setPosition(axisX + dist * Math.sin(angle), posY, axisZ + dist * Math.cos(angle)); - if (particleAge <= 40) { - setAlphaF(particleAge / 40.0f); - } - if (particleAge > 80) { - setRBGColorF(particleRed + (0.0f - particleRed) / 10.0f, particleGreen + (1.0f - particleGreen) / 10.0f, particleBlue + (1.0f - particleBlue) / 10.0f); - } - } - - @Override - public int getFXLayer() { - return 0; - } - }); - } - } - } -} diff --git a/src/main/java/binnie/genetics/machine/SlotValidatorInoculatorCatalyst.java b/src/main/java/binnie/genetics/machine/SlotValidatorInoculatorCatalyst.java deleted file mode 100644 index 5013b597..00000000 --- a/src/main/java/binnie/genetics/machine/SlotValidatorInoculatorCatalyst.java +++ /dev/null @@ -1,17 +0,0 @@ -package binnie.genetics.machine; - -import binnie.core.machines.inventory.Validator; -import net.minecraft.item.ItemStack; - -// TODO unused class? -public class SlotValidatorInoculatorCatalyst extends Validator { - @Override - public boolean isValid(ItemStack itemStack) { - return false; - } - - @Override - public String getTooltip() { - return "Inoculation Catalyst"; - } -} diff --git a/src/main/java/binnie/genetics/machine/Splicer.java b/src/main/java/binnie/genetics/machine/Splicer.java deleted file mode 100644 index 5d78b39f..00000000 --- a/src/main/java/binnie/genetics/machine/Splicer.java +++ /dev/null @@ -1,446 +0,0 @@ -package binnie.genetics.machine; - -import binnie.Binnie; -import binnie.core.BinnieCore; -import binnie.core.craftgui.minecraft.IMachineInformation; -import binnie.core.machines.IMachine; -import binnie.core.machines.Machine; -import binnie.core.machines.MachineComponent; -import binnie.core.machines.TileEntityMachine; -import binnie.core.machines.component.IRender; -import binnie.core.machines.inventory.ComponentInventorySlots; -import binnie.core.machines.inventory.ComponentInventoryTransfer; -import binnie.core.machines.inventory.InventorySlot; -import binnie.core.machines.inventory.SlotValidator; -import binnie.core.machines.network.INetwork; -import binnie.core.machines.power.ComponentPowerReceptor; -import binnie.core.machines.power.ComponentProcessSetCost; -import binnie.core.machines.power.ErrorState; -import binnie.core.machines.power.IProcess; -import binnie.genetics.api.IGene; -import binnie.genetics.api.IItemSerum; -import binnie.genetics.core.GeneticsGUI; -import binnie.genetics.core.GeneticsTexture; -import binnie.genetics.genetics.Engineering; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import forestry.api.apiculture.EnumBeeChromosome; -import forestry.api.apiculture.IBeeRoot; -import forestry.api.genetics.AlleleManager; -import forestry.api.genetics.IAllele; -import forestry.api.genetics.IChromosomeType; -import forestry.api.genetics.IGenome; -import forestry.api.genetics.IIndividual; -import forestry.api.genetics.ISpeciesRoot; -import net.minecraft.client.particle.EntityFX; -import net.minecraft.client.renderer.entity.RenderItem; -import net.minecraft.entity.item.EntityItem; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.nbt.NBTTagList; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.world.World; -import org.lwjgl.opengl.GL11; - -import java.util.Random; - -public class Splicer { - public static int slotSerumVial = 0; - public static int[] slotSerumReserve = new int[]{1, 2}; - public static int[] slotSerumExpended = new int[]{3, 4}; - public static int[] slotReserve = new int[]{5, 6, 7, 8, 9}; - public static int slotTarget = 9; - public static int[] slotFinished = new int[]{10, 11, 12, 13}; - - public static void setGene(IGene gene, ItemStack target, int chromoN) { - int chromosomeID = gene.getChromosome().ordinal(); - if (chromosomeID >= EnumBeeChromosome.HUMIDITY.ordinal() && gene.getSpeciesRoot() instanceof IBeeRoot) { - chromosomeID--; - } - - Class cls = gene.getChromosome().getAlleleClass(); - if (!cls.isInstance(gene.getAllele())) { - return; - } - - NBTTagCompound beeNBT = target.getTagCompound(); - NBTTagCompound genomeNBT = beeNBT.getCompoundTag("Genome"); - NBTTagList chromosomes = genomeNBT.getTagList("Chromosomes", 10); - NBTTagCompound chromosomeNBT = chromosomes.getCompoundTagAt(chromosomeID); - chromosomeNBT.setString("UID" + chromoN, gene.getAllele().getUID()); - target.setTagCompound(beeNBT); - } - - public static class PackageSplicer extends AdvGeneticMachine.PackageAdvGeneticBase implements IMachineInformation { - public PackageSplicer() { - super("splicer", GeneticsTexture.Splicer, 14819893, true); - } - - @Override - public void createMachine(Machine machine) { - new ComponentGeneticGUI(machine, GeneticsGUI.Splicer); - ComponentInventorySlots inventory = new ComponentInventorySlots(machine); - inventory.addSlot(0, "serum.active"); - inventory.getSlot(0).forbidInteraction(); - inventory.getSlot(0).setReadOnly(); - SlotValidator serumValid = new SlotValidator(ModuleMachine.IconSerum) { - @Override - public boolean isValid(ItemStack itemStack) { - return itemStack.getItem() instanceof IItemSerum; - } - - @Override - public String getTooltip() { - return "Serum Vials & Arrays"; - } - }; - - inventory.getSlot(0).setValidator(serumValid); - inventory.addSlotArray(Splicer.slotSerumReserve, "serum.input"); - for (InventorySlot slot : inventory.getSlots(Splicer.slotSerumReserve)) { - slot.setValidator(serumValid); - slot.forbidExtraction(); - } - - inventory.addSlotArray(Splicer.slotSerumExpended, "serum.output"); - for (InventorySlot slot : inventory.getSlots(Splicer.slotSerumExpended)) { - slot.setValidator(serumValid); - slot.setReadOnly(); - } - - inventory.addSlotArray(Splicer.slotReserve, "input"); - for (InventorySlot slot : inventory.getSlots(Splicer.slotReserve)) { - slot.forbidExtraction(); - slot.setValidator(new ValidatorIndividualInoculate()); - } - - inventory.addSlot(9, "process"); - inventory.getSlot(9).setValidator(new ValidatorIndividualInoculate()); - inventory.getSlot(9).setReadOnly(); - inventory.getSlot(9).forbidInteraction(); - inventory.addSlotArray(Splicer.slotFinished, "output"); - for (InventorySlot slot : inventory.getSlots(Splicer.slotFinished)) { - slot.setReadOnly(); - slot.forbidInsertion(); - slot.setValidator(new ValidatorIndividualInoculate()); - } - - ComponentInventoryTransfer transfer = new ComponentInventoryTransfer(machine); - transfer.addRestock(Splicer.slotReserve, 9, 1); - transfer.addRestock(Splicer.slotSerumReserve, 0); - transfer.addStorage(0, Splicer.slotSerumExpended, new ComponentInventoryTransfer.Condition() { - @Override - public boolean fufilled(ItemStack stack) { - return Engineering.getCharges(stack) == 0; - } - }); - transfer.addStorage(9, Splicer.slotFinished, new ComponentInventoryTransfer.Condition() { - @Override - public boolean fufilled(ItemStack stack) { - return stack != null - && transfer.getMachine().getMachineUtil().getStack(0) != null - && transfer.getMachine().getInterface(ComponentSplicerLogic.class).isValidSerum() != null; - } - }); - - new ComponentPowerReceptor(machine, 20000); - new ComponentSplicerLogic(machine); - new ComponentSplicerFX(machine); - } - - @Override - public TileEntity createTileEntity() { - return new TileEntityMachine(this); - } - } - - public static class ComponentSplicerLogic extends ComponentProcessSetCost implements IProcess { - int nOfGenes; - - public ComponentSplicerLogic(Machine machine) { - super(machine, 12000000, 1200); - nOfGenes = 0; - } - - @Override - public int getProcessLength() { - float n = getNumberOfGenes(); - if (n > 1.0f) { - n = 1.0f + (n - 1.0f) * 0.5f; - } - // Fix for / by 0 - int temp = (int) (super.getProcessLength() * n); - return temp != 0 ? temp : 1; - } - - @Override - public int getProcessEnergy() { - float n = getNumberOfGenes(); - if (n > 1.0f) { - n = 1.0f + (n - 1.0f) * 0.5f; - } - return (int) (super.getProcessEnergy() * n); - } - - @Override - public void onInventoryUpdate() { - super.onInventoryUpdate(); - nOfGenes = getGenesToUse(); - } - - protected int getGenesToUse() { - ItemStack serum = getUtil().getStack(0); - ItemStack target = getUtil().getStack(9); - if (serum == null || target == null) { - return 1; - } - - IIndividual ind = AlleleManager.alleleRegistry.getIndividual(target); - IGene[] genes = ((IItemSerum) serum.getItem()).getGenes(serum); - if (ind.getGenome().getSpeciesRoot() != ((IItemSerum) serum.getItem()).getSpeciesRoot(serum)) { - return 1; - } - - int i = 0; - for (IGene gene : genes) { - if (ind.getGenome().getActiveAllele(gene.getChromosome()) != gene.getAllele() || ind.getGenome().getInactiveAllele(gene.getChromosome()) != gene.getAllele()) { - i++; - } - } - return (i < 1) ? 1 : i; - } - - private int getFullNumberOfGenes() { - ItemStack serum = getUtil().getStack(0); - if (serum == null) { - return 1; - } - return Engineering.getGenes(serum).length; - } - - private int getNumberOfGenes() { - return nOfGenes; - } - - @Override - public String getTooltip() { - int n = getNumberOfGenes(); - int f = getFullNumberOfGenes(); - return "Splicing in " + n + ((f > 1) ? ("/" + f) : "") + " gene" + ((n > 1) ? "s" : ""); - } - - @Override - public ErrorState canWork() { - if (getUtil().isSlotEmpty(9)) { - return new ErrorState.NoItem("No Individual to Splice", 9); - } - if (getUtil().isSlotEmpty(0)) { - return new ErrorState.NoItem("No Serum", 0); - } - - ErrorState state = isValidSerum(); - if (state != null) { - return state; - } - - if (getUtil().getStack(0) != null && Engineering.getCharges(getUtil().getStack(0)) == 0) { - return new ErrorState("Empty Serum", "Serum is empty"); - } - return super.canWork(); - } - - public ErrorState isValidSerum() { - ItemStack serum = getUtil().getStack(0); - ItemStack target = getUtil().getStack(9); - IGene[] genes = Engineering.getGenes(serum); - if (genes.length == 0) { - return new ErrorState("Invalid Serum", "Serum does not hold any genes"); - } - if (!genes[0].getSpeciesRoot().isMember(target)) { - return new ErrorState("Invalid Serum", "Mismatch of Serum Type and Target"); - } - - IIndividual individual = genes[0].getSpeciesRoot().getMember(target); - boolean hasAll = true; - for (IGene gene : genes) { - if (hasAll) { - IGenome genome = individual.getGenome(); - IChromosomeType chromosome = gene.getChromosome(); - String geneAlleleUID = gene.getAllele().getUID(); - IAllele a = genome.getActiveAllele(chromosome); - IAllele b = genome.getInactiveAllele(chromosome); - hasAll = a.getUID().equals(geneAlleleUID) - && b.getUID().equals(geneAlleleUID); - } - } - - if (hasAll) { - return new ErrorState("Defunct Serum", "Individual already possesses this allele"); - } - return null; - } - - @Override - public ErrorState canProgress() { - return super.canProgress(); - } - - @Override - protected void onFinishTask() { - super.onFinishTask(); - ItemStack serum = getUtil().getStack(0); - ItemStack target = getUtil().getStack(9); - IIndividual ind = AlleleManager.alleleRegistry.getIndividual(target); - if (!ind.isAnalyzed()) { - ind.analyze(); - NBTTagCompound nbttagcompound = new NBTTagCompound(); - ind.writeToNBT(nbttagcompound); - target.setTagCompound(nbttagcompound); - } - - IGene[] genes = ((IItemSerum) serum.getItem()).getGenes(serum); - for (IGene gene : genes) { - Splicer.setGene(gene, target, 0); - Splicer.setGene(gene, target, 1); - } - getUtil().damageItem(0, 1); - } - - @Override - protected void onTickTask() { - // ignored - } - } - - public static class ComponentSplicerFX extends MachineComponent implements - IRender.RandomDisplayTick, - IRender.DisplayTick, - IRender.Render, - INetwork.TilePacketSync { - private EntityItem dummyEntityItem; - - public ComponentSplicerFX(IMachine machine) { - super(machine); - dummyEntityItem = new EntityItem(null); - } - - @SideOnly(Side.CLIENT) - @Override - public void onRandomDisplayTick(World world, int x, int y, int z, Random rand) { - } - - @SideOnly(Side.CLIENT) - @Override - public void onDisplayTick(World world, int x, int y, int z, Random rand) { - int tick = (int) (world.getTotalWorldTime() % 3L); - if (tick == 0 && getUtil().getProcess().isInProgress()) { - BinnieCore.proxy.getMinecraftInstance().effectRenderer.addEffect(new EntityFX(world, x + 0.5, y + 1.5, z + 0.5, 0.0, 0.0, 0.0) { - double axisX = posX; - double axisZ = posZ; - double angle = (int) (worldObj.getTotalWorldTime() % 4L) * 0.5 * 3.1415; - - { - axisX = 0.0; - axisZ = 0.0; - angle = 0.0; - motionX = 0.0; - motionZ = 0.0; - motionY = (rand.nextDouble() - 0.5) * 0.02; - particleMaxAge = 240; - particleGravity = 0.0f; - noClip = true; - setRBGColorF(0.3f + rand.nextFloat() * 0.5f, 0.3f + rand.nextFloat() * 0.5f, 0.0f); - } - - @Override - public void onUpdate() { - super.onUpdate(); - double speed = 0.04; - angle -= speed; - double dist = 0.25 + 0.2 * Math.sin(particleAge / 50.0f); - setPosition(axisX + dist * Math.sin(angle), posY, axisZ + dist * Math.cos(angle)); - setAlphaF((float) Math.cos(1.57 * particleAge / particleMaxAge)); - } - - @Override - public int getFXLayer() { - return 0; - } - }); - } - } - - @SideOnly(Side.CLIENT) - @Override - public void renderInWorld(RenderItem renderItem, double x, double y, double z) { - if (!getUtil().getProcess().isInProgress()) { - return; - } - - ItemStack stack = getUtil().getStack(9); - dummyEntityItem.worldObj = getMachine().getWorld(); - dummyEntityItem.setEntityItemStack(stack); - EntityItem dummyEntityItem = this.dummyEntityItem; - dummyEntityItem.age++; - this.dummyEntityItem.hoverStart = 0.0f; - if (stack == null) { - return; - } - - EntityPlayer player = BinnieCore.proxy.getPlayer(); - double dx = x + 0.5 - player.lastTickPosX; - double dz = z + 0.5 - player.lastTickPosZ; - double t = Math.atan2(dz, dx) * 180.0 / 3.1415; - GL11.glPushMatrix(); - GL11.glRotatef(180.0f, 0.0f, 0.0f, 1.0f); - GL11.glTranslatef(0.0f, -0.25f, 0.0f); - renderItem.doRender(this.dummyEntityItem, 0.0, 0.0, 0.0, 0.0f, 0.0f); - GL11.glPopMatrix(); - } - - @Override - public void syncToNBT(NBTTagCompound nbt) { - NBTTagCompound item = new NBTTagCompound(); - ItemStack stack = getUtil().getStack(9); - if (stack != null) { - stack.writeToNBT(item); - nbt.setTag("item", item); - } - } - - @Override - public void syncFromNBT(NBTTagCompound nbt) { - if (nbt.hasKey("item")) { - getUtil().setStack(9, ItemStack.loadItemStackFromNBT(nbt.getCompoundTag("item"))); - } else { - getUtil().setStack(9, null); - } - } - - @Override - public void onInventoryUpdate() { - if (!getUtil().isServer()) { - return; - } - getUtil().refreshBlock(); - } - } - - public static class ValidatorIndividualInoculate extends SlotValidator { - public ValidatorIndividualInoculate() { - super(null); - } - - @Override - public boolean isValid(ItemStack object) { - ISpeciesRoot root = AlleleManager.alleleRegistry.getSpeciesRoot(object); - return root != null && Binnie.Genetics.getSystem(root).isDNAManipulable(object); - } - - @Override - public String getTooltip() { - return "Splicable Individual"; - } - } -} diff --git a/src/main/java/binnie/genetics/machine/acclimatiser/Acclimatiser.java b/src/main/java/binnie/genetics/machine/acclimatiser/Acclimatiser.java new file mode 100644 index 00000000..2f42a849 --- /dev/null +++ b/src/main/java/binnie/genetics/machine/acclimatiser/Acclimatiser.java @@ -0,0 +1,189 @@ +package binnie.genetics.machine.acclimatiser; + +import binnie.Binnie; +import binnie.botany.api.EnumFlowerChromosome; +import binnie.core.BinnieCore; +import binnie.core.Mods; +import binnie.core.genetics.Tolerance; +import forestry.api.apiculture.EnumBeeChromosome; +import forestry.api.genetics.AlleleManager; +import forestry.api.genetics.EnumTolerance; +import forestry.api.genetics.IChromosomeType; +import forestry.api.genetics.ISpeciesRoot; +import forestry.api.lepidopterology.EnumButterflyChromosome; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.item.ItemStack; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class Acclimatiser { + public static final int[] SLOT_RESERVE = new int[]{0, 1, 2, 3}; + public static final int[] SLOT_ACCLIMATISER = new int[]{5, 6, 7}; + public static final int[] SLOT_DONE = new int[]{8, 9, 10, 11}; + public static final int SLOT_TARGET = 4; + + protected static Map temperatureItems = new HashMap<>(); + protected static Map humidityItems = new HashMap<>(); + + private static List toleranceSystems = new ArrayList<>(); + + private static ToleranceSystem getToleranceSystem(ItemStack stack, ItemStack acclim) { + ISpeciesRoot root = AlleleManager.alleleRegistry.getSpeciesRoot(stack); + if (root == null) { + return null; + } + + for (ToleranceSystem system : Acclimatiser.toleranceSystems) { + if (root.getUID().equals(system.uid) && system.type.hasEffect(acclim)) { + return system; + } + } + return null; + } + + public static void addTolerance(String uid, IChromosomeType chromosome, ToleranceType type) { + Acclimatiser.toleranceSystems.add(new ToleranceSystem(uid, chromosome, type)); + } + + public static float getTemperatureEffect(ItemStack item) { + for (ItemStack stack : Acclimatiser.temperatureItems.keySet()) { + if (stack.isItemEqual(item)) { + return Acclimatiser.temperatureItems.get(stack); + } + } + return 0.0f; + } + + public static float getHumidityEffect(ItemStack item) { + for (ItemStack stack : Acclimatiser.humidityItems.keySet()) { + if (stack.isItemEqual(item)) { + return Acclimatiser.humidityItems.get(stack); + } + } + return 0.0f; + } + + public static void addTemperatureItem(ItemStack itemStack, float amount) { + if (itemStack == null) { + return; + } + Acclimatiser.temperatureItems.put(itemStack, amount); + } + + public static void addHumidityItem(ItemStack itemStack, float amount) { + if (itemStack == null) { + return; + } + Acclimatiser.humidityItems.put(itemStack, amount); + } + + public static void setupRecipes() { + if (BinnieCore.isApicultureActive()) { + addTolerance(Binnie.Genetics.getBeeRoot().getUID(), EnumBeeChromosome.HUMIDITY_TOLERANCE, ToleranceType.Humidity); + addTolerance(Binnie.Genetics.getBeeRoot().getUID(), EnumBeeChromosome.TEMPERATURE_TOLERANCE, ToleranceType.Temperature); + } + + if (BinnieCore.isLepidopteryActive()) { + addTolerance(Binnie.Genetics.getButterflyRoot().getUID(), EnumButterflyChromosome.HUMIDITY_TOLERANCE, ToleranceType.Humidity); + addTolerance(Binnie.Genetics.getButterflyRoot().getUID(), EnumButterflyChromosome.TEMPERATURE_TOLERANCE, ToleranceType.Temperature); + } + + if (BinnieCore.isBotanyActive()) { + addTolerance(Binnie.Genetics.getFlowerRoot().getUID(), EnumFlowerChromosome.HUMIDITY_TOLERANCE, ToleranceType.Humidity); + addTolerance(Binnie.Genetics.getFlowerRoot().getUID(), EnumFlowerChromosome.TEMPERATURE_TOLERANCE, ToleranceType.Temperature); + addTolerance(Binnie.Genetics.getFlowerRoot().getUID(), EnumFlowerChromosome.PH_TOLERANCE, ToleranceType.PH); + } + + addTemperatureItem(new ItemStack(Items.blaze_powder), 0.5f); + addTemperatureItem(new ItemStack(Items.blaze_rod), 0.75f); + addTemperatureItem(new ItemStack(Items.lava_bucket), 0.75f); + addTemperatureItem(new ItemStack(Items.snowball), -0.15f); + addTemperatureItem(new ItemStack(Blocks.ice), -0.75f); + addHumidityItem(new ItemStack(Items.water_bucket), 0.75f); + addHumidityItem(new ItemStack(Blocks.sand), -0.15f); + addTemperatureItem(Mods.Forestry.stack("canLava"), 0.75f); + addTemperatureItem(Mods.Forestry.stack("refractoryLava"), 0.75f); + addHumidityItem(Mods.Forestry.stack("canWater"), 0.75f); + addHumidityItem(Mods.Forestry.stack("refractoryWater"), 0.75f); + addHumidityItem(Mods.Forestry.stack("waxCapsuleWater"), 0.75f); + } + + public static boolean canAcclimatise(ItemStack stack, List acclimatisers) { + if (stack == null || acclimatisers.isEmpty()) { + return true; + } + + for (ItemStack acclim : acclimatisers) { + if (canAcclimatise(stack, acclim)) { + return true; + } + } + return false; + } + + public static boolean canAcclimatise(ItemStack stack, ItemStack acclim) { + ToleranceSystem system = getToleranceSystem(stack, acclim); + return system != null && system.canAlter(stack, acclim); + } + + public static ItemStack acclimatise(ItemStack stack, ItemStack acc) { + ToleranceSystem system = getToleranceSystem(stack, acc); + return system.alter(stack, acc); + } + + public static Tolerance alterTolerance(Tolerance tol, float effect) { + int[] is = tol.getBounds(); + int[] range; + if (effect < 0.0f) { + range = new int[]{is[0] - 1, is[1]}; + } else { + range = new int[]{is[0], is[1] + 1}; + } + + if (range[0] < -5) { + range[0] = -5; + } + if (range[1] > 5) { + range[1] = 5; + } + + EnumTolerance[] up = { + EnumTolerance.NONE, + EnumTolerance.UP_1, + EnumTolerance.UP_2, + EnumTolerance.UP_3, + EnumTolerance.UP_4, + EnumTolerance.UP_5 + }; + EnumTolerance[] down = { + EnumTolerance.NONE, + EnumTolerance.DOWN_1, + EnumTolerance.DOWN_2, + EnumTolerance.DOWN_3, + EnumTolerance.DOWN_4, + EnumTolerance.DOWN_5 + }; + EnumTolerance[] both = { + EnumTolerance.NONE, + EnumTolerance.BOTH_1, + EnumTolerance.BOTH_2, + EnumTolerance.BOTH_3, + EnumTolerance.BOTH_4, + EnumTolerance.BOTH_5 + }; + + if (range[0] == 0) { + return Tolerance.get(up[range[1]]); + } + if (range[1] == 0) { + return Tolerance.get(down[-range[0]]); + } + + int avg = (int) ((-range[0] + range[1]) / 2.0f + 0.6f); + return Tolerance.get(both[avg]); + } +} diff --git a/src/main/java/binnie/genetics/machine/acclimatiser/AcclimatiserComponentLogic.java b/src/main/java/binnie/genetics/machine/acclimatiser/AcclimatiserComponentLogic.java new file mode 100644 index 00000000..5be973af --- /dev/null +++ b/src/main/java/binnie/genetics/machine/acclimatiser/AcclimatiserComponentLogic.java @@ -0,0 +1,80 @@ +package binnie.genetics.machine.acclimatiser; + +import binnie.core.machines.IMachine; +import binnie.core.machines.power.ComponentProcessIndefinate; +import binnie.core.machines.power.ErrorState; +import binnie.core.util.I18N; +import binnie.genetics.Genetics; +import net.minecraft.item.ItemStack; + +import java.util.ArrayList; +import java.util.List; + +public class AcclimatiserComponentLogic extends ComponentProcessIndefinate { + public AcclimatiserComponentLogic(IMachine machine) { + super(machine, 2.0f); + } + + @Override + public ErrorState canWork() { + if (getUtil().getStack(Acclimatiser.SLOT_TARGET) == null) { + return new ErrorState.NoItem( + I18N.localise(Genetics.instance, "machine.acclimatiser.error.noIndividual"), + Acclimatiser.SLOT_TARGET + ); + } + if (getUtil().getNonNullStacks(Acclimatiser.SLOT_ACCLIMATISER).isEmpty()) { + return new ErrorState.NoItem( + I18N.localise(Genetics.instance, "machine.acclimatiser.error.noAcclimatizingItems"), + Acclimatiser.SLOT_ACCLIMATISER + ); + } + return super.canWork(); + } + + @Override + public ErrorState canProgress() { + if (!Acclimatiser.canAcclimatise(getUtil().getStack(Acclimatiser.SLOT_TARGET), getUtil().getNonNullStacks(Acclimatiser.SLOT_ACCLIMATISER))) { + return new ErrorState.InvalidItem( + I18N.localise(Genetics.instance, "machine.acclimatiser.error.invalidAcclimatizingItems"), + Acclimatiser.SLOT_TARGET + ); + } + return super.canProgress(); + } + + @Override + protected boolean inProgress() { + return canWork() == null; + } + + @Override + protected void onTickTask() { + super.onTickTask(); + if (getUtil().getRandom().nextInt(100) == 0) { + attemptAcclimatisation(); + } + } + + protected void attemptAcclimatisation() { + List acclms = new ArrayList<>(); + for (ItemStack s : getUtil().getNonNullStacks(Acclimatiser.SLOT_ACCLIMATISER)) { + if (Acclimatiser.canAcclimatise(getUtil().getStack(Acclimatiser.SLOT_TARGET), s)) { + acclms.add(s); + } + } + + ItemStack acc = acclms.get(getUtil().getRandom().nextInt(acclms.size())); + ItemStack acclimed = Acclimatiser.acclimatise(getUtil().getStack(Acclimatiser.SLOT_TARGET), acc); + if (acclimed != null) { + getUtil().setStack(Acclimatiser.SLOT_TARGET, acclimed); + boolean removed = false; + for (int i : Acclimatiser.SLOT_ACCLIMATISER) { + if (!removed && getUtil().getStack(i) != null && getUtil().getStack(i).isItemEqual(acc)) { + getUtil().decreaseStack(i, 1); + removed = true; + } + } + } + } +} diff --git a/src/main/java/binnie/genetics/machine/acclimatiser/AcclimatiserItemSlotValidator.java b/src/main/java/binnie/genetics/machine/acclimatiser/AcclimatiserItemSlotValidator.java new file mode 100644 index 00000000..1b8ccfcc --- /dev/null +++ b/src/main/java/binnie/genetics/machine/acclimatiser/AcclimatiserItemSlotValidator.java @@ -0,0 +1,27 @@ +package binnie.genetics.machine.acclimatiser; + +import binnie.core.machines.inventory.SlotValidator; +import binnie.core.util.I18N; +import binnie.genetics.Genetics; +import net.minecraft.item.ItemStack; + +public class AcclimatiserItemSlotValidator extends SlotValidator { + public AcclimatiserItemSlotValidator() { + super(null); + } + + @Override + public boolean isValid(ItemStack stack) { + for (ToleranceType type : ToleranceType.values()) { + if (type.hasEffect(stack)) { + return true; + } + } + return false; + } + + @Override + public String getTooltip() { + return I18N.localise(Genetics.instance, "machine.acclimatiser.acclimatizingItems"); + } +} diff --git a/src/main/java/binnie/genetics/machine/acclimatiser/AcclimatiserPackage.java b/src/main/java/binnie/genetics/machine/acclimatiser/AcclimatiserPackage.java new file mode 100644 index 00000000..d2527111 --- /dev/null +++ b/src/main/java/binnie/genetics/machine/acclimatiser/AcclimatiserPackage.java @@ -0,0 +1,63 @@ +package binnie.genetics.machine.acclimatiser; + +import binnie.core.craftgui.minecraft.IMachineInformation; +import binnie.core.machines.Machine; +import binnie.core.machines.TileEntityMachine; +import binnie.core.machines.inventory.ComponentInventorySlots; +import binnie.core.machines.inventory.ComponentInventoryTransfer; +import binnie.core.machines.inventory.InventorySlot; +import binnie.core.machines.inventory.SlotValidator; +import binnie.core.machines.power.ComponentPowerReceptor; +import binnie.genetics.core.GeneticsGUI; +import binnie.genetics.core.GeneticsTexture; +import binnie.genetics.machine.ComponentGeneticGUI; +import binnie.genetics.machine.PackageGeneticBase; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; + +public class AcclimatiserPackage extends PackageGeneticBase implements IMachineInformation { + public AcclimatiserPackage() { + super("acclimatiser", GeneticsTexture.Acclimatiser, 0x966a49, true); + } + + @Override + public void createMachine(Machine machine) { + new ComponentGeneticGUI(machine, GeneticsGUI.Acclimatiser); + ComponentInventorySlots inventory = new ComponentInventorySlots(machine); + InventorySlot processSlot = inventory.addSlot(Acclimatiser.SLOT_TARGET, "process"); + processSlot.setValidator(new SlotValidator.Individual()); + processSlot.setReadOnly(); + processSlot.forbidExtraction(); + + for (InventorySlot slot : inventory.addSlotArray(Acclimatiser.SLOT_RESERVE, "input")) { + slot.forbidExtraction(); + slot.setValidator(new SlotValidator.Individual()); + } + + for (InventorySlot slot : inventory.addSlotArray(Acclimatiser.SLOT_DONE, "output")) { + slot.setReadOnly(); + slot.setValidator(new SlotValidator.Individual()); + } + + for (InventorySlot slot : inventory.addSlotArray(Acclimatiser.SLOT_ACCLIMATISER, "acclimatiser")) { + slot.setValidator(new AcclimatiserItemSlotValidator()); + } + + ComponentInventoryTransfer transfer = new ComponentInventoryTransfer(machine); + transfer.addRestock(Acclimatiser.SLOT_RESERVE, Acclimatiser.SLOT_TARGET, 1); + transfer.addStorage(Acclimatiser.SLOT_TARGET, Acclimatiser.SLOT_DONE, new ComponentInventoryTransfer.Condition() { + @Override + public boolean fufilled(ItemStack stack) { + return !Acclimatiser.canAcclimatise(stack, machine.getMachineUtil().getNonNullStacks(Acclimatiser.SLOT_ACCLIMATISER)); + } + }); + + new ComponentPowerReceptor(machine, 5000); + new AcclimatiserComponentLogic(machine); + } + + @Override + public TileEntity createTileEntity() { + return new TileEntityMachine(this); + } +} diff --git a/src/main/java/binnie/genetics/machine/acclimatiser/ToleranceSystem.java b/src/main/java/binnie/genetics/machine/acclimatiser/ToleranceSystem.java new file mode 100644 index 00000000..a480ec9a --- /dev/null +++ b/src/main/java/binnie/genetics/machine/acclimatiser/ToleranceSystem.java @@ -0,0 +1,56 @@ +package binnie.genetics.machine.acclimatiser; + +import binnie.core.genetics.Gene; +import binnie.core.genetics.Tolerance; +import binnie.genetics.machine.inoculator.Inoculator; +import forestry.api.genetics.AlleleManager; +import forestry.api.genetics.IAlleleTolerance; +import forestry.api.genetics.IChromosomeType; +import forestry.api.genetics.IGenome; +import forestry.api.genetics.IIndividual; +import forestry.api.genetics.ISpeciesRoot; +import net.minecraft.item.ItemStack; + +import java.util.Random; + +class ToleranceSystem { + public String uid; + public IChromosomeType chromosomeOrdinal; + public ToleranceType type; + + ToleranceSystem(String uid, IChromosomeType chromosomeOrdinal, ToleranceType type) { + this.uid = uid; + this.chromosomeOrdinal = chromosomeOrdinal; + this.type = type; + } + + public boolean canAlter(ItemStack stack, ItemStack acclim) { + IIndividual member = AlleleManager.alleleRegistry.getIndividual(stack); + IGenome genome = member.getGenome(); + IAlleleTolerance tolAllele = (IAlleleTolerance) genome.getActiveAllele(chromosomeOrdinal); + Tolerance tol = Tolerance.get(tolAllele.getValue()); + float effect = type.getEffect(acclim); + return (effect > 0.0f && tol.getBounds()[1] < 5) || (effect < 0.0f && tol.getBounds()[0] > -5); + } + + public ItemStack alter(ItemStack stack, ItemStack acc) { + Random rand = new Random(); + float effect = type.getEffect(acc); + if (rand.nextFloat() > Math.abs(effect)) { + return stack; + } + + IIndividual member = AlleleManager.alleleRegistry.getIndividual(stack); + IGenome genome = member.getGenome(); + IAlleleTolerance tolAllele = (IAlleleTolerance) genome.getActiveAllele(chromosomeOrdinal); + Tolerance tol = Tolerance.get(tolAllele.getValue()); + Tolerance newTol = Acclimatiser.alterTolerance(tol, effect); + if (rand.nextFloat() > 1.0f / (-newTol.getBounds()[0] + newTol.getBounds()[1])) { + return stack; + } + + ISpeciesRoot root = AlleleManager.alleleRegistry.getSpeciesRoot(stack); + Inoculator.setGene(new Gene(newTol.getAllele(), chromosomeOrdinal, root), stack, rand.nextInt(2)); + return stack; + } +} diff --git a/src/main/java/binnie/genetics/machine/acclimatiser/ToleranceType.java b/src/main/java/binnie/genetics/machine/acclimatiser/ToleranceType.java new file mode 100644 index 00000000..e8fc115c --- /dev/null +++ b/src/main/java/binnie/genetics/machine/acclimatiser/ToleranceType.java @@ -0,0 +1,33 @@ +package binnie.genetics.machine.acclimatiser; + +import binnie.botany.gardening.Gardening; +import net.minecraft.item.ItemStack; + +public enum ToleranceType { + Temperature, + Humidity, + PH; + + public float getEffect(ItemStack stack) { + switch (this) { + case Temperature: + return Acclimatiser.getTemperatureEffect(stack); + + case Humidity: + return Acclimatiser.getHumidityEffect(stack); + + case PH: + if (Gardening.isAcidFertiliser(stack)) { + return -0.5f * Gardening.getFertiliserStrength(stack); + } + if (Gardening.isAlkalineFertiliser(stack)) { + return 0.5f * Gardening.getFertiliserStrength(stack); + } + } + return 0.0f; + } + + public boolean hasEffect(ItemStack stack) { + return getEffect(stack) != 0.0f; + } +} diff --git a/src/main/java/binnie/genetics/machine/analyser/Analyser.java b/src/main/java/binnie/genetics/machine/analyser/Analyser.java new file mode 100644 index 00000000..a3d29b15 --- /dev/null +++ b/src/main/java/binnie/genetics/machine/analyser/Analyser.java @@ -0,0 +1,54 @@ +package binnie.genetics.machine.analyser; + +import binnie.Binnie; +import binnie.genetics.api.IItemAnalysable; +import forestry.api.genetics.AlleleManager; +import forestry.api.genetics.IIndividual; +import forestry.api.genetics.ISpeciesRoot; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; + +public class Analyser { + public static final int[] SLOT_RESERVE = new int[]{0, 1, 2, 3, 4, 5}; + public static final int[] SLOT_FINISHED = new int[]{7, 8, 9, 10, 11, 12}; + public static final int SLOT_TARGET = 6; + public static final int SLOT_DYE = 13; + + public static boolean isAnalysable(ItemStack stack) { + IIndividual ind = AlleleManager.alleleRegistry.getIndividual(stack); + return ind != null + || stack.getItem() instanceof IItemAnalysable + || Binnie.Genetics.getConversion(stack) != null; + } + + public static boolean isAnalysed(ItemStack stack) { + IIndividual ind = AlleleManager.alleleRegistry.getIndividual(stack); + if (ind != null) { + return ind.isAnalyzed(); + } + return stack.getItem() instanceof IItemAnalysable + && ((IItemAnalysable) stack.getItem()).isAnalysed(stack); + } + + public static ItemStack analyse(ItemStack stack) { + ItemStack conv = Binnie.Genetics.getConversionStack(stack); + if (conv != null) { + stack = conv; + } + + ISpeciesRoot root = AlleleManager.alleleRegistry.getSpeciesRoot(stack); + if (root != null) { + IIndividual ind = root.getMember(stack); + ind.analyze(); + NBTTagCompound nbttagcompound = new NBTTagCompound(); + ind.writeToNBT(nbttagcompound); + stack.setTagCompound(nbttagcompound); + return stack; + } + + if (stack.getItem() instanceof IItemAnalysable) { + return ((IItemAnalysable) stack.getItem()).analyse(stack); + } + return stack; + } +} diff --git a/src/main/java/binnie/genetics/machine/analyser/AnalyserComponentFX.java b/src/main/java/binnie/genetics/machine/analyser/AnalyserComponentFX.java new file mode 100644 index 00000000..576e4e68 --- /dev/null +++ b/src/main/java/binnie/genetics/machine/analyser/AnalyserComponentFX.java @@ -0,0 +1,135 @@ +package binnie.genetics.machine.analyser; + +import binnie.core.BinnieCore; +import binnie.core.machines.IMachine; +import binnie.core.machines.MachineComponent; +import binnie.core.machines.component.IRender; +import binnie.core.machines.network.INetwork; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.client.particle.EntityFX; +import net.minecraft.client.renderer.entity.RenderItem; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; +import org.lwjgl.opengl.GL11; + +import java.util.Random; + +public class AnalyserComponentFX extends MachineComponent implements + IRender.RandomDisplayTick, + IRender.DisplayTick, + IRender.Render, + INetwork.TilePacketSync { + private EntityItem dummyEntityItem; + + public AnalyserComponentFX(IMachine machine) { + super(machine); + dummyEntityItem = new EntityItem(null); + } + + @SideOnly(Side.CLIENT) + @Override + public void onRandomDisplayTick(World world, int x, int y, int z, Random rand) { + // ignored + } + + @SideOnly(Side.CLIENT) + @Override + public void onDisplayTick(World world, int x, int y, int z, Random rand) { + if (rand.nextFloat() < 1.0f && getUtil().getProcess().isInProgress()) { + BinnieCore.proxy.getMinecraftInstance().effectRenderer.addEffect(new EntityFX(world, x + 0.5, y + 1.3 + rand.nextDouble() * 0.2, z + 0.5, 0.0, 0.0, 0.0) { + double axisX = posX; + double axisZ = posZ; + double angle = rand.nextDouble() * 2.0 * 3.1415; + + { + axisX = 0.0; + axisZ = 0.0; + angle = 0.0; + motionX = 0.05 * (rand.nextDouble() - 0.5); + motionZ = 0.05 * (rand.nextDouble() - 0.5); + motionY = 0.0; + particleMaxAge = 25; + particleGravity = 0.05f; + noClip = true; + setRBGColorF(0.6f, 0.0f, 1.0f); + } + + @Override + public void onUpdate() { + super.onUpdate(); + setAlphaF((float) Math.cos(1.57 * particleAge / particleMaxAge)); + } + + @Override + public int getFXLayer() { + return 0; + } + }); + } + } + + @SideOnly(Side.CLIENT) + @Override + public void renderInWorld(RenderItem renderItem, double x, double y, double z) { + if (!getUtil().getProcess().isInProgress()) { + return; + } + + ItemStack stack = getUtil().getStack(Analyser.SLOT_TARGET); + dummyEntityItem.worldObj = getMachine().getWorld(); + dummyEntityItem.setEntityItemStack(stack); + EntityItem dummyEntityItem = this.dummyEntityItem; + dummyEntityItem.age++; + this.dummyEntityItem.hoverStart = 0.0f; + if (stack == null) { + return; + } + + EntityPlayer player = BinnieCore.proxy.getPlayer(); + double dx = x + 0.5 - player.lastTickPosX; + double dz = z + 0.5 - player.lastTickPosZ; + double t = Math.atan2(dz, dx) * 180.0 / 3.1415; + GL11.glPushMatrix(); + GL11.glRotatef(180.0f, 0.0f, 0.0f, 1.0f); + GL11.glTranslatef(0.0f, -0.2f, 0.0f); + renderItem.doRender(this.dummyEntityItem, 0.0, 0.0, 0.0, 0.0f, 0.0f); + GL11.glPopMatrix(); + } + + @Override + public void syncToNBT(NBTTagCompound nbt) { + NBTTagCompound item = new NBTTagCompound(); + ItemStack stack = getUtil().getStack(Analyser.SLOT_TARGET); + if (stack == null) { + return; + } + + stack.writeToNBT(item); + nbt.setTag("item", item); + } + + @Override + public void syncFromNBT(NBTTagCompound nbt) { + if (nbt.hasKey("item")) { + getUtil().setStack(Analyser.SLOT_TARGET, ItemStack.loadItemStackFromNBT(nbt.getCompoundTag("item"))); + } else { + getUtil().setStack(Analyser.SLOT_TARGET, null); + } + } + + @Override + public void onInventoryUpdate() { + if (!getUtil().isServer()) { + return; + } + + IMachine machine = getMachine(); + TileEntity tile = machine.getTileEntity(); + machine.getWorld().markBlockForUpdate(tile.xCoord, tile.yCoord, tile.zCoord); + } +} diff --git a/src/main/java/binnie/genetics/machine/analyser/AnalyserComponentLogic.java b/src/main/java/binnie/genetics/machine/analyser/AnalyserComponentLogic.java new file mode 100644 index 00000000..097ae34d --- /dev/null +++ b/src/main/java/binnie/genetics/machine/analyser/AnalyserComponentLogic.java @@ -0,0 +1,49 @@ +package binnie.genetics.machine.analyser; + +import binnie.core.machines.Machine; +import binnie.core.machines.power.ComponentProcessSetCost; +import binnie.core.machines.power.ErrorState; +import binnie.core.machines.power.IProcess; +import net.minecraft.item.ItemStack; + +public class AnalyserComponentLogic extends ComponentProcessSetCost implements IProcess { + private static final float DYE_PER_TICK = 0.002f; + + public AnalyserComponentLogic(Machine machine) { + super(machine, 9000, 300); + } + + @Override + public ErrorState canWork() { + if (getUtil().isSlotEmpty(Analyser.SLOT_TARGET)) { + return new ErrorState.NoItem("No item to analyse", Analyser.SLOT_TARGET); + } + + boolean analysed = Analyser.isAnalysed(getUtil().getStack(Analyser.SLOT_TARGET)); + if (analysed) { + return new ErrorState.InvalidItem("Already Analysed", "Item has already been analysed", Analyser.SLOT_TARGET); + } + return super.canWork(); + } + + @Override + public ErrorState canProgress() { + if (getUtil().getSlotCharge(Analyser.SLOT_DYE) == 0.0f) { + return new ErrorState.Item("Insufficient Dye", "Not enough DNA dye to analyse", new int[]{Analyser.SLOT_DYE}); + } + return super.canProgress(); + } + + @Override + protected void onFinishTask() { + super.onFinishTask(); + ItemStack itemStack = getUtil().getStack(Analyser.SLOT_TARGET); + itemStack = Analyser.analyse(itemStack); + getInventory().setInventorySlotContents(Analyser.SLOT_TARGET, itemStack); + } + + @Override + protected void onTickTask() { + getUtil().useCharge(Analyser.SLOT_DYE, DYE_PER_TICK); + } +} diff --git a/src/main/java/binnie/genetics/machine/analyser/AnalyserPackage.java b/src/main/java/binnie/genetics/machine/analyser/AnalyserPackage.java new file mode 100644 index 00000000..9f540847 --- /dev/null +++ b/src/main/java/binnie/genetics/machine/analyser/AnalyserPackage.java @@ -0,0 +1,67 @@ +package binnie.genetics.machine.analyser; + +import binnie.core.craftgui.minecraft.IMachineInformation; +import binnie.core.machines.Machine; +import binnie.core.machines.TileEntityMachine; +import binnie.core.machines.inventory.ComponentChargedSlots; +import binnie.core.machines.inventory.ComponentInventorySlots; +import binnie.core.machines.inventory.ComponentInventoryTransfer; +import binnie.core.machines.inventory.InventorySlot; +import binnie.core.machines.power.ComponentPowerReceptor; +import binnie.genetics.core.GeneticsGUI; +import binnie.genetics.core.GeneticsTexture; +import binnie.genetics.machine.ComponentGeneticGUI; +import binnie.genetics.machine.PackageGeneticBase; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; + +public class AnalyserPackage extends PackageGeneticBase implements IMachineInformation { + public AnalyserPackage() { + super("analyser", GeneticsTexture.Analyser, 0x9800ff, true); + } + + @Override + public void createMachine(Machine machine) { + new ComponentGeneticGUI(machine, GeneticsGUI.Analyser); + ComponentInventorySlots inventory = new ComponentInventorySlots(machine); + inventory.addSlotArray(Analyser.SLOT_RESERVE, "input"); + for (InventorySlot slot : inventory.getSlots(Analyser.SLOT_RESERVE)) { + slot.setValidator(new UnanalysedSlotValidator()); + slot.forbidExtraction(); + } + + InventorySlot targetSlot = inventory.addSlot(Analyser.SLOT_TARGET, "analyse"); + targetSlot.setValidator(new UnanalysedSlotValidator()); + targetSlot.setReadOnly(); + targetSlot.forbidInteraction(); + + InventorySlot dyeSlot = inventory.addSlot(Analyser.SLOT_DYE, "dye"); + dyeSlot.forbidExtraction(); + dyeSlot.setValidator(new DyeSlotValidator()); + + inventory.addSlotArray(Analyser.SLOT_FINISHED, "output"); + for (InventorySlot slot : inventory.getSlots(Analyser.SLOT_FINISHED)) { + slot.forbidInsertion(); + slot.setReadOnly(); + } + + ComponentInventoryTransfer transfer = new ComponentInventoryTransfer(machine); + transfer.addRestock(Analyser.SLOT_RESERVE, Analyser.SLOT_TARGET, 1); + transfer.addStorage(Analyser.SLOT_TARGET, Analyser.SLOT_FINISHED, new ComponentInventoryTransfer.Condition() { + @Override + public boolean fufilled(ItemStack stack) { + return Analyser.isAnalysed(stack); + } + }); + + new ComponentChargedSlots(machine).addCharge(Analyser.SLOT_DYE); + new ComponentPowerReceptor(machine, 500); + new AnalyserComponentLogic(machine); + new AnalyserComponentFX(machine); + } + + @Override + public TileEntity createTileEntity() { + return new TileEntityMachine(this); + } +} diff --git a/src/main/java/binnie/genetics/machine/analyser/DyeSlotValidator.java b/src/main/java/binnie/genetics/machine/analyser/DyeSlotValidator.java new file mode 100644 index 00000000..51cfff4c --- /dev/null +++ b/src/main/java/binnie/genetics/machine/analyser/DyeSlotValidator.java @@ -0,0 +1,22 @@ +package binnie.genetics.machine.analyser; + +import binnie.core.machines.inventory.SlotValidator; +import binnie.genetics.item.GeneticsItems; +import binnie.genetics.machine.ModuleMachine; +import net.minecraft.item.ItemStack; + +public class DyeSlotValidator extends SlotValidator { + public DyeSlotValidator() { + super(ModuleMachine.IconDye); + } + + @Override + public boolean isValid(ItemStack itemStack) { + return itemStack.isItemEqual(GeneticsItems.DNADye.get(1)); + } + + @Override + public String getTooltip() { + return "DNA Dye"; + } +} diff --git a/src/main/java/binnie/genetics/machine/analyser/UnanalysedSlotValidator.java b/src/main/java/binnie/genetics/machine/analyser/UnanalysedSlotValidator.java new file mode 100644 index 00000000..09fa8970 --- /dev/null +++ b/src/main/java/binnie/genetics/machine/analyser/UnanalysedSlotValidator.java @@ -0,0 +1,21 @@ +package binnie.genetics.machine.analyser; + +import binnie.core.machines.inventory.SlotValidator; +import net.minecraft.item.ItemStack; + +public class UnanalysedSlotValidator extends SlotValidator { + public UnanalysedSlotValidator() { + super(null); + } + + @Override + public boolean isValid(ItemStack itemStack) { + return Analyser.isAnalysable(itemStack) + && !Analyser.isAnalysed(itemStack); + } + + @Override + public String getTooltip() { + return "Unanalysed Item"; + } +} diff --git a/src/main/java/binnie/genetics/machine/genepool/EthanolTankValidator.java b/src/main/java/binnie/genetics/machine/genepool/EthanolTankValidator.java new file mode 100644 index 00000000..31349242 --- /dev/null +++ b/src/main/java/binnie/genetics/machine/genepool/EthanolTankValidator.java @@ -0,0 +1,16 @@ +package binnie.genetics.machine.genepool; + +import binnie.core.machines.inventory.TankValidator; +import net.minecraftforge.fluids.FluidStack; + +class EthanolTankValidator extends TankValidator { + @Override + public String getTooltip() { + return "Ethanol"; + } + + @Override + public boolean isValid(FluidStack liquid) { + return liquid.getFluid().getName().equals("bioethanol"); + } +} diff --git a/src/main/java/binnie/genetics/machine/genepool/Genepool.java b/src/main/java/binnie/genetics/machine/genepool/Genepool.java new file mode 100644 index 00000000..ac32c185 --- /dev/null +++ b/src/main/java/binnie/genetics/machine/genepool/Genepool.java @@ -0,0 +1,9 @@ +package binnie.genetics.machine.genepool; + +public class Genepool { + public static final int SLOT_BEE = 0; + public static final int TANK_DNA = 0; + public static final int TANK_ETHANOL = 1; + public static final int SLOT_ENZYME = 7; + public static final int[] SLOT_RESERVE = new int[]{1, 2, 3, 4, 5, 6}; +} diff --git a/src/main/java/binnie/genetics/machine/genepool/GenepoolComponentFX.java b/src/main/java/binnie/genetics/machine/genepool/GenepoolComponentFX.java new file mode 100644 index 00000000..669672d3 --- /dev/null +++ b/src/main/java/binnie/genetics/machine/genepool/GenepoolComponentFX.java @@ -0,0 +1,60 @@ +package binnie.genetics.machine.genepool; + +import binnie.core.BinnieCore; +import binnie.core.machines.IMachine; +import binnie.core.machines.MachineComponent; +import binnie.core.machines.component.IRender; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.client.particle.EntityFX; +import net.minecraft.world.World; + +import java.util.Random; + +public class GenepoolComponentFX extends MachineComponent implements IRender.RandomDisplayTick, IRender.DisplayTick { + public GenepoolComponentFX(IMachine machine) { + super(machine); + } + + @SideOnly(Side.CLIENT) + @Override + public void onRandomDisplayTick(World world, int x, int y, int z, Random rand) { + // ignored + } + + @SideOnly(Side.CLIENT) + @Override + public void onDisplayTick(World world, int x, int y, int z, Random rand) { + if (rand.nextFloat() < 1.0f && getUtil().getProcess().isInProgress()) { + BinnieCore.proxy.getMinecraftInstance().effectRenderer.addEffect(new EntityFX(world, x + 0.3 + rand.nextDouble() * 0.4, y + 1, z + 0.3 + rand.nextDouble() * 0.4, 0.0, 0.0, 0.0) { + double axisX = posX; + double axisZ = posZ; + double angle = rand.nextDouble() * 2.0 * 3.1415; + + { + axisX = 0.0; + axisZ = 0.0; + angle = 0.0; + motionX = 0.0; + motionZ = 0.0; + motionY = rand.nextFloat() * 0.01; + particleMaxAge = 25; + particleGravity = 0.0f; + noClip = true; + setRBGColorF(0.4f + 0.6f * rand.nextFloat(), 0.6f * rand.nextFloat(), 0.6f + 0.4f * rand.nextFloat()); + } + + @Override + public void onUpdate() { + super.onUpdate(); + setAlphaF((float) Math.cos(1.57 * particleAge / particleMaxAge)); + } + + @Override + public int getFXLayer() { + return 0; + } + }); + } + } +} diff --git a/src/main/java/binnie/genetics/machine/genepool/GenepoolComponentLogic.java b/src/main/java/binnie/genetics/machine/genepool/GenepoolComponentLogic.java new file mode 100644 index 00000000..b0b66454 --- /dev/null +++ b/src/main/java/binnie/genetics/machine/genepool/GenepoolComponentLogic.java @@ -0,0 +1,78 @@ +package binnie.genetics.machine.genepool; + +import binnie.Binnie; +import binnie.core.machines.Machine; +import binnie.core.machines.inventory.IChargedSlots; +import binnie.core.machines.power.ComponentProcessSetCost; +import binnie.core.machines.power.ErrorState; +import binnie.core.machines.power.IProcess; +import binnie.genetics.item.GeneticLiquid; +import forestry.api.genetics.AlleleManager; +import forestry.api.genetics.ISpeciesRoot; +import net.minecraft.item.ItemStack; + +public class GenepoolComponentLogic extends ComponentProcessSetCost implements IProcess { + float enzymePerProcess; + float ethanolPerProcess; + private float ethanolDrain; + + public GenepoolComponentLogic(Machine machine) { + super(machine, 8000, 400); + enzymePerProcess = 0.25f; + ethanolPerProcess = 50.0f; + ethanolDrain = 0.0f; + } + + @Override + public ErrorState canWork() { + if (getUtil().isSlotEmpty(0)) { + return new ErrorState.NoItem("No Individual", Genepool.SLOT_BEE); + } + return super.canWork(); + } + + @Override + public ErrorState canProgress() { + if (!getUtil().spaceInTank(Genepool.TANK_DNA, getDNAAmount(getUtil().getStack(Genepool.TANK_DNA)))) { + return new ErrorState.NoSpace("Not enough room in Tank", new int[]{Genepool.TANK_DNA}); + } + if (!getUtil().liquidInTank(1, 1)) { + return new ErrorState.InsufficientLiquid("Not enough Ethanol", Genepool.TANK_ETHANOL); + } + if (getUtil().getSlotCharge(Genepool.SLOT_ENZYME) == 0.0f) { + return new ErrorState.NoItem("Insufficient Enzyme", Genepool.SLOT_ENZYME); + } + return super.canProgress(); + } + + @Override + protected void onFinishTask() { + super.onFinishTask(); + int amount = getDNAAmount(getUtil().getStack(Genepool.TANK_DNA)); + getUtil().fillTank(Genepool.TANK_DNA, GeneticLiquid.RawDNA.get(amount)); + getUtil().deleteStack(Genepool.TANK_DNA); + } + + private int getDNAAmount(ItemStack stack) { + ISpeciesRoot root = AlleleManager.alleleRegistry.getSpeciesRoot(stack); + if (root == null + || root != Binnie.Genetics.getBeeRoot() + || Binnie.Genetics.getBeeRoot().isDrone(stack)) { + return 10; + } + if (Binnie.Genetics.getBeeRoot().isMated(stack)) { + return 50; + } + return 30; + } + + @Override + protected void onTickTask() { + ethanolDrain += getDNAAmount(getUtil().getStack(Genepool.TANK_DNA)) * 1.2f * getProgressPerTick() / 100.0f; + if (ethanolDrain >= 1.0f) { + getUtil().drainTank(Genepool.TANK_ETHANOL, 1); + ethanolDrain--; + } + getMachine().getInterface(IChargedSlots.class).alterCharge(Genepool.SLOT_ENZYME, -enzymePerProcess * getProgressPerTick() / 100.0f); + } +} diff --git a/src/main/java/binnie/genetics/machine/genepool/GenepoolPackage.java b/src/main/java/binnie/genetics/machine/genepool/GenepoolPackage.java new file mode 100644 index 00000000..d80f61dd --- /dev/null +++ b/src/main/java/binnie/genetics/machine/genepool/GenepoolPackage.java @@ -0,0 +1,67 @@ +package binnie.genetics.machine.genepool; + +import binnie.core.craftgui.minecraft.IMachineInformation; +import binnie.core.machines.Machine; +import binnie.core.machines.TileEntityMachine; +import binnie.core.machines.inventory.ComponentChargedSlots; +import binnie.core.machines.inventory.ComponentInventorySlots; +import binnie.core.machines.inventory.ComponentInventoryTransfer; +import binnie.core.machines.inventory.ComponentTankContainer; +import binnie.core.machines.inventory.InventorySlot; +import binnie.core.machines.inventory.SlotValidator; +import binnie.core.machines.inventory.TankSlot; +import binnie.core.machines.power.ComponentPowerReceptor; +import binnie.genetics.core.GeneticsGUI; +import binnie.genetics.core.GeneticsTexture; +import binnie.genetics.item.GeneticsItems; +import binnie.genetics.machine.ComponentGeneticGUI; +import binnie.genetics.machine.ModuleMachine; +import binnie.genetics.machine.PackageGeneticBase; +import net.minecraft.tileentity.TileEntity; + +public class GenepoolPackage extends PackageGeneticBase implements IMachineInformation { + public GenepoolPackage() { + super("genepool", GeneticsTexture.Genepool, 0xc134b6, true); + } + + @Override + public void createMachine(Machine machine) { + new ComponentGeneticGUI(machine, GeneticsGUI.Genepool); + ComponentInventorySlots inventory = new ComponentInventorySlots(machine); + InventorySlot enzymeSlot = inventory.addSlot(Genepool.SLOT_ENZYME, "enzyme"); + enzymeSlot.setValidator(new SlotValidator.Item(GeneticsItems.Enzyme.get(1), ModuleMachine.IconEnzyme)); + enzymeSlot.forbidExtraction(); + + InventorySlot slotBee = inventory.addSlot(Genepool.SLOT_BEE, "process"); + slotBee.setValidator(new SlotValidator.Individual()); + slotBee.setReadOnly(); + slotBee.forbidExtraction(); + inventory.addSlotArray(Genepool.SLOT_RESERVE, "input"); + + for (InventorySlot slot : inventory.getSlots(Genepool.SLOT_RESERVE)) { + slot.setValidator(new SlotValidator.Individual()); + slot.forbidExtraction(); + } + + ComponentTankContainer tanks = new ComponentTankContainer(machine); + TankSlot dnaSlot = tanks.addTank(Genepool.TANK_DNA, "output", 2000); + dnaSlot.setReadOnly(); + + TankSlot ethanolSlot = tanks.addTank(Genepool.TANK_ETHANOL, "input", 1000); + ethanolSlot.forbidExtraction(); + ethanolSlot.setValidator(new EthanolTankValidator()); + + ComponentInventoryTransfer transfer = new ComponentInventoryTransfer(machine); + transfer.addRestock(Genepool.SLOT_RESERVE, Genepool.SLOT_BEE, 1); + new ComponentPowerReceptor(machine, 1600); + new GenepoolComponentLogic(machine); + ComponentChargedSlots chargedSlots = new ComponentChargedSlots(machine); + chargedSlots.addCharge(Genepool.SLOT_ENZYME); + new GenepoolComponentFX(machine); + } + + @Override + public TileEntity createTileEntity() { + return new TileEntityMachine(this); + } +} diff --git a/src/main/java/binnie/genetics/machine/incubator/Incubator.java b/src/main/java/binnie/genetics/machine/incubator/Incubator.java new file mode 100644 index 00000000..84631267 --- /dev/null +++ b/src/main/java/binnie/genetics/machine/incubator/Incubator.java @@ -0,0 +1,98 @@ +package binnie.genetics.machine.incubator; + +import binnie.Binnie; +import binnie.core.BinnieCore; +import binnie.core.machines.MachineUtil; +import binnie.genetics.api.IIncubatorRecipe; +import binnie.genetics.item.GeneticLiquid; +import binnie.genetics.item.GeneticsItems; +import forestry.api.apiculture.EnumBeeType; +import forestry.api.apiculture.IBee; +import net.minecraft.init.Items; +import net.minecraft.item.ItemStack; + +import java.util.ArrayList; +import java.util.List; + +public class Incubator { + public static final int[] SLOT_QUEUE = new int[]{0, 1, 2}; + public static final int[] SLOT_OUTPUT = new int[]{4, 5, 6}; + public static final int SLOT_INCUBATOR = 3; + public static final int TANK_INPUT = 0; + public static final int TANK_OUTPUT = 1; + public static final List RECIPES = new ArrayList<>(); + + public static void addRecipes() { + Incubator.RECIPES.add(new IncubatorRecipe(Binnie.Liquid.getLiquidStack("water", 25), GeneticLiquid.GrowthMedium.get(25), 0.2f) { + @Override + public boolean isItemStack(ItemStack stack) { + return GeneticsItems.GrowthMedium.get(1).isItemEqual(stack); + } + }); + + Incubator.RECIPES.add(new IncubatorRecipe(GeneticLiquid.GrowthMedium.get(25), GeneticLiquid.Bacteria.get(5), 0.2f) { + @Override + public boolean isItemStack(ItemStack stack) { + return new ItemStack(Items.wheat).isItemEqual(stack); + } + }); + + Incubator.RECIPES.add(new IncubatorRecipe(GeneticLiquid.Bacteria.get(0), GeneticLiquid.Bacteria.get(5), 0.05f) { + @Override + public boolean isItemStack(ItemStack stack) { + return GeneticsItems.GrowthMedium.get(1).isItemEqual(stack); + } + }); + + Incubator.RECIPES.add(new IncubatorRecipe(GeneticLiquid.Bacteria.get(2), null, 0.5f, 0.2f) { + @Override + public boolean isItemStack(ItemStack stack) { + return stack.getItem() == Items.sugar; + } + }.setOutputStack(GeneticsItems.Enzyme.get(1))); + + Incubator.RECIPES.add(new IncubatorRecipe(GeneticLiquid.BacteriaPoly.get(0), GeneticLiquid.BacteriaPoly.get(5), 0.05f) { + @Override + public boolean isItemStack(ItemStack stack) { + return GeneticsItems.GrowthMedium.get(1).isItemEqual(stack); + } + }); + + Incubator.RECIPES.add(new IncubatorRecipe(GeneticLiquid.BacteriaVector.get(0), GeneticLiquid.BacteriaVector.get(5), 0.05f) { + @Override + public boolean isItemStack(ItemStack stack) { + return GeneticsItems.GrowthMedium.get(1).isItemEqual(stack); + } + }); + + Incubator.RECIPES.add(new IncubatorRecipe(GeneticLiquid.Bacteria.get(10), GeneticLiquid.BacteriaPoly.get(10), 0.1f) { + @Override + public boolean isItemStack(ItemStack stack) { + return new ItemStack(Items.dye, 1, 15).isItemEqual(stack); + } + }); + + Incubator.RECIPES.add(new IncubatorRecipe(GeneticLiquid.Bacteria.get(10), GeneticLiquid.BacteriaVector.get(10), 0.05f) { + @Override + public boolean isItemStack(ItemStack stack) { + return new ItemStack(Items.blaze_powder).isItemEqual(stack); + } + }); + + if (BinnieCore.isApicultureActive()) { + Incubator.RECIPES.add(new IncubatorRecipe(GeneticLiquid.GrowthMedium.get(50), null, 1.0f, 0.05f) { + @Override + public boolean isItemStack(ItemStack stack) { + return Binnie.Genetics.getBeeRoot().isMember(stack) && Binnie.Genetics.getBeeRoot().getType(stack) == EnumBeeType.LARVAE; + } + + @Override + public ItemStack getOutputStack(MachineUtil machine) { + ItemStack larvae = machine.getStack(SLOT_INCUBATOR); + IBee bee = Binnie.Genetics.getBeeRoot().getMember(larvae); + return Binnie.Genetics.getBeeRoot().getMemberStack(bee, EnumBeeType.DRONE.ordinal()); + } + }); + } + } +} diff --git a/src/main/java/binnie/genetics/machine/incubator/IncubatorComponentLogic.java b/src/main/java/binnie/genetics/machine/incubator/IncubatorComponentLogic.java new file mode 100644 index 00000000..62a95fc8 --- /dev/null +++ b/src/main/java/binnie/genetics/machine/incubator/IncubatorComponentLogic.java @@ -0,0 +1,140 @@ +package binnie.genetics.machine.incubator; + +import binnie.core.machines.Machine; +import binnie.core.machines.power.ComponentProcessIndefinate; +import binnie.core.machines.power.ErrorState; +import binnie.core.machines.power.IProcess; +import binnie.core.machines.transfer.TransferRequest; +import binnie.genetics.api.IIncubatorRecipe; +import net.minecraft.item.ItemStack; +import net.minecraftforge.fluids.FluidStack; + +import java.util.Random; + +public class IncubatorComponentLogic extends ComponentProcessIndefinate implements IProcess { + IIncubatorRecipe recipe; + private Random rand; + private boolean roomForOutput; + + public IncubatorComponentLogic(Machine machine) { + super(machine, 2.0f); + recipe = null; + rand = new Random(); + roomForOutput = true; + } + + @Override + public ErrorState canWork() { + if (recipe == null) { + return new ErrorState("No Recipe", "There is no valid recipe"); + } + return super.canWork(); + } + + @Override + public ErrorState canProgress() { + if (recipe != null) { + if (!recipe.isInputLiquidSufficient(getUtil().getFluid(Incubator.TANK_INPUT))) { + return new ErrorState.InsufficientLiquid("Not enough incubation liquid", Incubator.TANK_INPUT); + } + if (!roomForOutput) { + return new ErrorState.TankSpace("No room for output", Incubator.TANK_OUTPUT); + } + } + return super.canProgress(); + } + + @Override + protected void onTickTask() { + if (rand.nextInt(20) == 0 && recipe != null && rand.nextFloat() < recipe.getChance()) { + recipe.doTask(getUtil()); + } + } + + @Override + public boolean inProgress() { + return recipe != null; + } + + private IIncubatorRecipe getRecipe(ItemStack stack, FluidStack liquid) { + for (IIncubatorRecipe recipe : Incubator.RECIPES) { + boolean rightLiquid = recipe.isInputLiquid(liquid); + boolean rightItem = recipe.isItemStack(stack); + if (rightLiquid && rightItem) { + return recipe; + } + } + return null; + } + + @Override + public void onInventoryUpdate() { + super.onInventoryUpdate(); + if (!getUtil().isServer()) { + return; + } + + FluidStack liquid = getUtil().getFluid(Incubator.TANK_INPUT); + ItemStack incubator = getUtil().getStack(Incubator.SLOT_INCUBATOR); + if (recipe != null && (incubator == null || liquid == null || !recipe.isInputLiquid(liquid) || !recipe.isItemStack(incubator))) { + recipe = null; + ItemStack leftover = new TransferRequest(incubator, getInventory()) + .setTargetSlots(Incubator.SLOT_OUTPUT) + .ignoreValidation() + .transfer(true); + getUtil().setStack(Incubator.SLOT_INCUBATOR, leftover); + } + + if (recipe == null) { + if (liquid == null) { + return; + } + + if (incubator != null) { + IIncubatorRecipe recipe = getRecipe(incubator, liquid); + if (recipe != null) { + this.recipe = recipe; + return; + } + } + + IIncubatorRecipe potential = null; + int potentialSlot = 0; + for (int slot : Incubator.SLOT_QUEUE) { + ItemStack stack = getUtil().getStack(slot); + if (stack == null || potential != null) { + continue; + } + + for (IIncubatorRecipe recipe2 : Incubator.RECIPES) { + boolean rightLiquid = recipe2.isInputLiquid(liquid); + boolean rightItem = recipe2.isItemStack(stack); + if (rightLiquid && rightItem) { + potential = recipe2; + potentialSlot = slot; + break; + } + } + } + + if (potential != null) { + TransferRequest removal = new TransferRequest(incubator, getInventory()) + .setTargetSlots(Incubator.SLOT_OUTPUT) + .ignoreValidation(); + + if (removal.transfer(false) == null) { + recipe = potential; + } + + removal.transfer(true); + ItemStack stack2 = getUtil().getStack(potentialSlot); + getUtil().setStack(potentialSlot, null); + getUtil().setStack(Incubator.SLOT_INCUBATOR, stack2); + } + } + + if (recipe != null) { + roomForOutput = recipe.roomForOutput(getUtil()); + } + } +} diff --git a/src/main/java/binnie/genetics/machine/incubator/IncubatorPackage.java b/src/main/java/binnie/genetics/machine/incubator/IncubatorPackage.java new file mode 100644 index 00000000..0b2358fe --- /dev/null +++ b/src/main/java/binnie/genetics/machine/incubator/IncubatorPackage.java @@ -0,0 +1,51 @@ +package binnie.genetics.machine.incubator; + +import binnie.core.craftgui.minecraft.IMachineInformation; +import binnie.core.machines.Machine; +import binnie.core.machines.TileEntityMachine; +import binnie.core.machines.inventory.ComponentInventorySlots; +import binnie.core.machines.inventory.ComponentTankContainer; +import binnie.core.machines.inventory.InventorySlot; +import binnie.core.machines.power.ComponentPowerReceptor; +import binnie.genetics.core.GeneticsGUI; +import binnie.genetics.core.GeneticsTexture; +import binnie.genetics.machine.ComponentGeneticGUI; +import binnie.genetics.machine.PackageGeneticBase; +import net.minecraft.tileentity.TileEntity; + +public class IncubatorPackage extends PackageGeneticBase implements IMachineInformation { + public IncubatorPackage() { + super("incubator", GeneticsTexture.Incubator, 0xffd951, true); + } + + @Override + public void createMachine(Machine machine) { + new ComponentGeneticGUI(machine, GeneticsGUI.Incubator); + ComponentInventorySlots inventory = new ComponentInventorySlots(machine); + inventory.addSlotArray(Incubator.SLOT_QUEUE, "input"); + for (InventorySlot slot : inventory.getSlots(Incubator.SLOT_QUEUE)) { + slot.forbidExtraction(); + } + + InventorySlot incubatorSlot = inventory.addSlot(Incubator.SLOT_INCUBATOR, "incubator"); + incubatorSlot.forbidInteraction(); + incubatorSlot.setReadOnly(); + + inventory.addSlotArray(Incubator.SLOT_OUTPUT, "output"); + for (InventorySlot slot : inventory.getSlots(Incubator.SLOT_OUTPUT)) { + slot.forbidInsertion(); + slot.setReadOnly(); + } + + new ComponentPowerReceptor(machine, 2000); + ComponentTankContainer tanks = new ComponentTankContainer(machine); + tanks.addTank(Incubator.TANK_INPUT, "input", 2000).forbidExtraction(); + tanks.addTank(Incubator.TANK_OUTPUT, "output", 2000).setReadOnly(); + new IncubatorComponentLogic(machine); + } + + @Override + public TileEntity createTileEntity() { + return new TileEntityMachine(this); + } +} diff --git a/src/main/java/binnie/genetics/machine/incubator/IncubatorRecipe.java b/src/main/java/binnie/genetics/machine/incubator/IncubatorRecipe.java new file mode 100644 index 00000000..b699df0e --- /dev/null +++ b/src/main/java/binnie/genetics/machine/incubator/IncubatorRecipe.java @@ -0,0 +1,97 @@ +package binnie.genetics.machine.incubator; + +import binnie.core.machines.MachineUtil; +import binnie.core.machines.transfer.TransferRequest; +import binnie.genetics.api.IIncubatorRecipe; +import net.minecraft.item.ItemStack; +import net.minecraftforge.fluids.FluidStack; + +import java.util.Random; + +public abstract class IncubatorRecipe implements IIncubatorRecipe { + protected FluidStack input; + protected FluidStack output; + protected float lossChance; + protected ItemStack outputStack; + protected float tickChance; + + public IncubatorRecipe(FluidStack input, FluidStack output, float lossChance) { + this(input, output, lossChance, 1.0f); + } + + public IncubatorRecipe(FluidStack input, FluidStack output, float lossChance, float chance) { + this.input = input; + this.output = output; + this.lossChance = lossChance; + tickChance = chance; + } + + @Override + public float getChance() { + return tickChance; + } + + @Override + public boolean isInputLiquid(FluidStack liquid) { + return liquid != null && input.isFluidEqual(liquid); + } + + @Override + public boolean isInputLiquidSufficient(FluidStack liquid) { + return liquid != null && liquid.amount >= 500; + } + + @Override + public void doTask(MachineUtil machine) { + machine.drainTank(Incubator.TANK_INPUT, input.amount); + if (output != null) { + machine.fillTank(Incubator.TANK_OUTPUT, output); + } + + outputStack = getOutputStack(machine); + if (outputStack != null) { + ItemStack output = outputStack.copy(); + TransferRequest product = new TransferRequest(output, machine.getInventory()) + .setTargetSlots(Incubator.SLOT_OUTPUT) + .ignoreValidation(); + product.transfer(true); + } + + Random rand = machine.getRandom(); + if (rand.nextFloat() < lossChance) { + machine.decreaseStack(Incubator.SLOT_INCUBATOR, 1); + } + } + + public IncubatorRecipe setOutputStack(ItemStack stack) { + outputStack = stack; + return this; + } + + protected ItemStack getOutputStack(MachineUtil util) { + return outputStack; + } + + @Override + public boolean roomForOutput(MachineUtil machine) { + if (output != null && !machine.isTankEmpty(Incubator.TANK_OUTPUT)) { + if (!machine.getFluid(Incubator.TANK_OUTPUT).isFluidEqual(output)) { + return false; + } + if (!machine.spaceInTank(Incubator.TANK_OUTPUT, output.amount)) { + return false; + } + } + + ItemStack outputStack = getOutputStack(machine); + if (outputStack != null) { + ItemStack output = outputStack.copy(); + TransferRequest product = new TransferRequest(output, machine.getInventory()) + .setTargetSlots(Incubator.SLOT_OUTPUT) + .ignoreValidation(); + ItemStack leftover = product.transfer(false); + return leftover == null; + } + return true; + } +} diff --git a/src/main/java/binnie/genetics/machine/inoculator/BacteriaVectorValidator.java b/src/main/java/binnie/genetics/machine/inoculator/BacteriaVectorValidator.java new file mode 100644 index 00000000..911589b2 --- /dev/null +++ b/src/main/java/binnie/genetics/machine/inoculator/BacteriaVectorValidator.java @@ -0,0 +1,17 @@ +package binnie.genetics.machine.inoculator; + +import binnie.core.machines.inventory.Validator; +import binnie.genetics.item.GeneticLiquid; +import net.minecraftforge.fluids.FluidStack; + +class BacteriaVectorValidator extends Validator { + @Override + public boolean isValid(FluidStack object) { + return GeneticLiquid.BacteriaVector.get(1).isFluidEqual(object); + } + + @Override + public String getTooltip() { + return GeneticLiquid.BacteriaVector.getName(); + } +} diff --git a/src/main/java/binnie/genetics/machine/inoculator/ValidatorIndividualInoculate.java b/src/main/java/binnie/genetics/machine/inoculator/IndividualInoculateValidator.java similarity index 84% rename from src/main/java/binnie/genetics/machine/inoculator/ValidatorIndividualInoculate.java rename to src/main/java/binnie/genetics/machine/inoculator/IndividualInoculateValidator.java index 96c30c75..3cbf094d 100644 --- a/src/main/java/binnie/genetics/machine/inoculator/ValidatorIndividualInoculate.java +++ b/src/main/java/binnie/genetics/machine/inoculator/IndividualInoculateValidator.java @@ -6,8 +6,8 @@ import forestry.api.genetics.AlleleManager; import forestry.api.genetics.ISpeciesRoot; import net.minecraft.item.ItemStack; -public class ValidatorIndividualInoculate extends SlotValidator { - public ValidatorIndividualInoculate() { +public class IndividualInoculateValidator extends SlotValidator { + public IndividualInoculateValidator() { super(null); } diff --git a/src/main/java/binnie/genetics/machine/inoculator/ComponentInoculatorFX.java b/src/main/java/binnie/genetics/machine/inoculator/InoculatorComponentFX.java similarity index 97% rename from src/main/java/binnie/genetics/machine/inoculator/ComponentInoculatorFX.java rename to src/main/java/binnie/genetics/machine/inoculator/InoculatorComponentFX.java index ea5e3293..b14c5f30 100644 --- a/src/main/java/binnie/genetics/machine/inoculator/ComponentInoculatorFX.java +++ b/src/main/java/binnie/genetics/machine/inoculator/InoculatorComponentFX.java @@ -17,14 +17,14 @@ import org.lwjgl.opengl.GL11; import java.util.Random; -public class ComponentInoculatorFX extends MachineComponent implements +public class InoculatorComponentFX extends MachineComponent implements IRender.RandomDisplayTick, IRender.DisplayTick, IRender.Render, INetwork.TilePacketSync { private EntityItem dummyEntityItem; - public ComponentInoculatorFX(IMachine machine) { + public InoculatorComponentFX(IMachine machine) { super(machine); dummyEntityItem = new EntityItem(null); } diff --git a/src/main/java/binnie/genetics/machine/inoculator/ComponentInoculatorLogic.java b/src/main/java/binnie/genetics/machine/inoculator/InoculatorComponentLogic.java similarity index 95% rename from src/main/java/binnie/genetics/machine/inoculator/ComponentInoculatorLogic.java rename to src/main/java/binnie/genetics/machine/inoculator/InoculatorComponentLogic.java index 855ef974..e2cf62fc 100644 --- a/src/main/java/binnie/genetics/machine/inoculator/ComponentInoculatorLogic.java +++ b/src/main/java/binnie/genetics/machine/inoculator/InoculatorComponentLogic.java @@ -15,10 +15,10 @@ import forestry.api.genetics.IIndividual; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; -public class ComponentInoculatorLogic extends ComponentProcessSetCost implements IProcess { +public class InoculatorComponentLogic extends ComponentProcessSetCost implements IProcess { private float bacteriaDrain; - public ComponentInoculatorLogic(Machine machine) { + public InoculatorComponentLogic(Machine machine) { super(machine, 600000, 12000); bacteriaDrain = 0.0f; } @@ -125,7 +125,7 @@ public class ComponentInoculatorLogic extends ComponentProcessSetCost implements Inoculator.setGene(gene, target, 0); Inoculator.setGene(gene, target, 1); } - getUtil().damageItem(0, 1); + getUtil().damageItem(Inoculator.SLOT_SERUM_VIAL, 1); } @Override diff --git a/src/main/java/binnie/genetics/machine/inoculator/PackageInoculator.java b/src/main/java/binnie/genetics/machine/inoculator/InoculatorPackage.java similarity index 68% rename from src/main/java/binnie/genetics/machine/inoculator/PackageInoculator.java rename to src/main/java/binnie/genetics/machine/inoculator/InoculatorPackage.java index d4066784..cf4ddd0a 100644 --- a/src/main/java/binnie/genetics/machine/inoculator/PackageInoculator.java +++ b/src/main/java/binnie/genetics/machine/inoculator/InoculatorPackage.java @@ -8,22 +8,17 @@ import binnie.core.machines.inventory.ComponentInventoryTransfer; import binnie.core.machines.inventory.ComponentTankContainer; import binnie.core.machines.inventory.InventorySlot; import binnie.core.machines.inventory.SlotValidator; -import binnie.core.machines.inventory.Validator; import binnie.core.machines.power.ComponentPowerReceptor; -import binnie.genetics.api.IItemSerum; import binnie.genetics.core.GeneticsGUI; import binnie.genetics.core.GeneticsTexture; import binnie.genetics.genetics.Engineering; -import binnie.genetics.item.GeneticLiquid; import binnie.genetics.machine.ComponentGeneticGUI; -import binnie.genetics.machine.GeneticMachine; -import binnie.genetics.machine.ModuleMachine; +import binnie.genetics.machine.PackageGeneticBase; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; -import net.minecraftforge.fluids.FluidStack; -public class PackageInoculator extends GeneticMachine.PackageGeneticBase implements IMachineInformation { - public PackageInoculator() { +public class InoculatorPackage extends PackageGeneticBase implements IMachineInformation { + public InoculatorPackage() { super("inoculator", GeneticsTexture.Inoculator, 0xe22235, true); } @@ -31,22 +26,11 @@ public class PackageInoculator extends GeneticMachine.PackageGeneticBase impleme public void createMachine(Machine machine) { new ComponentGeneticGUI(machine, GeneticsGUI.Inoculator); ComponentInventorySlots inventory = new ComponentInventorySlots(machine); + SlotValidator serumValid = new SerumSlotValidator(); + InventorySlot slotSerumVial = inventory.addSlot(Inoculator.SLOT_SERUM_VIAL, "serum.active"); slotSerumVial.forbidInteraction(); slotSerumVial.setReadOnly(); - - SlotValidator serumValid = new SlotValidator(ModuleMachine.IconSerum) { - @Override - public boolean isValid(ItemStack itemStack) { - return itemStack.getItem() instanceof IItemSerum; - } - - @Override - public String getTooltip() { - return "Serum Vials & Arrays"; - } - }; - slotSerumVial.setValidator(serumValid); inventory.addSlotArray(Inoculator.SLOT_SERUM_RESERVE, "serum.input"); @@ -64,18 +48,18 @@ public class PackageInoculator extends GeneticMachine.PackageGeneticBase impleme inventory.addSlotArray(Inoculator.SLOT_RESERVE, "input"); for (InventorySlot slot : inventory.getSlots(Inoculator.SLOT_RESERVE)) { slot.forbidExtraction(); - slot.setValidator(new ValidatorIndividualInoculate()); + slot.setValidator(new IndividualInoculateValidator()); } inventory.addSlot(Inoculator.SLOT_TARGET, "process"); - inventory.getSlot(Inoculator.SLOT_TARGET).setValidator(new ValidatorIndividualInoculate()); + inventory.getSlot(Inoculator.SLOT_TARGET).setValidator(new IndividualInoculateValidator()); inventory.getSlot(Inoculator.SLOT_TARGET).setReadOnly(); inventory.getSlot(Inoculator.SLOT_TARGET).forbidInteraction(); inventory.addSlotArray(Inoculator.SLOT_FINISHED, "output"); for (InventorySlot slot : inventory.getSlots(Inoculator.SLOT_FINISHED)) { slot.setReadOnly(); slot.forbidInsertion(); - slot.setValidator(new ValidatorIndividualInoculate()); + slot.setValidator(new IndividualInoculateValidator()); } ComponentInventoryTransfer transfer = new ComponentInventoryTransfer(machine); @@ -92,27 +76,17 @@ public class PackageInoculator extends GeneticMachine.PackageGeneticBase impleme @Override public boolean fufilled(ItemStack stack) { return stack != null - && transfer.getMachine().getMachineUtil().getStack(Inoculator.SLOT_SERUM_VIAL) != null - && transfer.getMachine().getInterface(ComponentInoculatorLogic.class).isValidSerum() != null; + && transfer.getMachine().getMachineUtil().getStack(Inoculator.SLOT_SERUM_VIAL) != null + && transfer.getMachine().getInterface(InoculatorComponentLogic.class).isValidSerum() != null; } }); new ComponentPowerReceptor(machine, 15000); - new ComponentInoculatorLogic(machine); - new ComponentInoculatorFX(machine); + new InoculatorComponentLogic(machine); + new InoculatorComponentFX(machine); new ComponentTankContainer(machine) .addTank(Inoculator.TANK_VECTOR, "input", Inoculator.TANK_CAPACITY) - .setValidator(new Validator() { - @Override - public boolean isValid(FluidStack object) { - return GeneticLiquid.BacteriaVector.get(1).isFluidEqual(object); - } - - @Override - public String getTooltip() { - return GeneticLiquid.BacteriaVector.getName(); - } - }); + .setValidator(new BacteriaVectorValidator()); } @Override diff --git a/src/main/java/binnie/genetics/machine/inoculator/SerumSlotValidator.java b/src/main/java/binnie/genetics/machine/inoculator/SerumSlotValidator.java new file mode 100644 index 00000000..7f0dda30 --- /dev/null +++ b/src/main/java/binnie/genetics/machine/inoculator/SerumSlotValidator.java @@ -0,0 +1,22 @@ +package binnie.genetics.machine.inoculator; + +import binnie.core.machines.inventory.SlotValidator; +import binnie.genetics.api.IItemSerum; +import binnie.genetics.machine.ModuleMachine; +import net.minecraft.item.ItemStack; + +class SerumSlotValidator extends SlotValidator { + public SerumSlotValidator() { + super(ModuleMachine.IconSerum); + } + + @Override + public boolean isValid(ItemStack itemStack) { + return itemStack.getItem() instanceof IItemSerum; + } + + @Override + public String getTooltip() { + return "Serum Vials & Arrays"; + } +} diff --git a/src/main/java/binnie/genetics/machine/isolator/EthanolTankValidator.java b/src/main/java/binnie/genetics/machine/isolator/EthanolTankValidator.java new file mode 100644 index 00000000..90778ff6 --- /dev/null +++ b/src/main/java/binnie/genetics/machine/isolator/EthanolTankValidator.java @@ -0,0 +1,16 @@ +package binnie.genetics.machine.isolator; + +import binnie.core.machines.inventory.TankValidator; +import net.minecraftforge.fluids.FluidStack; + +class EthanolTankValidator extends TankValidator { + @Override + public String getTooltip() { + return "Ethanol"; + } + + @Override + public boolean isValid(FluidStack liquid) { + return liquid.getFluid().getName().equals("bioethanol"); + } +} diff --git a/src/main/java/binnie/genetics/machine/isolator/Isolator.java b/src/main/java/binnie/genetics/machine/isolator/Isolator.java new file mode 100644 index 00000000..417aeda4 --- /dev/null +++ b/src/main/java/binnie/genetics/machine/isolator/Isolator.java @@ -0,0 +1,11 @@ +package binnie.genetics.machine.isolator; + +public class Isolator { + public static final int SLOT_ENZYME = 0; + public static final int SLOT_SEQUENCER_VIAL = 1; + public static final int[] SLOT_RESERVE = new int[]{2, 3, 4}; + public static final int[] SLOT_FINISHED = new int[]{7, 8, 9, 10, 11, 12}; + public static final int SLOT_TARGET = 5; + public static final int SLOT_RESULT = 6; + public static final int TANK_ETHANOL = 0; +} diff --git a/src/main/java/binnie/genetics/machine/isolator/IsolatorComponentFX.java b/src/main/java/binnie/genetics/machine/isolator/IsolatorComponentFX.java new file mode 100644 index 00000000..3459a87f --- /dev/null +++ b/src/main/java/binnie/genetics/machine/isolator/IsolatorComponentFX.java @@ -0,0 +1,92 @@ +package binnie.genetics.machine.isolator; + +import binnie.core.BinnieCore; +import binnie.core.machines.IMachine; +import binnie.core.machines.MachineComponent; +import binnie.core.machines.component.IRender; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.client.particle.EntityFX; +import net.minecraft.world.World; + +import java.util.Random; + +public class IsolatorComponentFX extends MachineComponent implements IRender.RandomDisplayTick, IRender.DisplayTick { + public IsolatorComponentFX(IMachine machine) { + super(machine); + } + + @SideOnly(Side.CLIENT) + @Override + public void onRandomDisplayTick(World world, int x, int y, int z, Random rand) { + if (!getUtil().getProcess().isInProgress()) { + return; + } + BinnieCore.proxy.getMinecraftInstance().effectRenderer.addEffect(new EntityFX(world, x + 0.4 + 0.2 * rand.nextDouble(), y + 1.6, z + 0.4 + rand.nextDouble() * 0.2, 0.0, 0.0, 0.0) { + double angle = 0.0; + + { + motionX = 0.0; + motionZ = 0.0; + motionY = -0.012; + particleMaxAge = 100; + particleGravity = 0.0f; + noClip = true; + setRBGColorF(0.8f, 0.4f, 0.0f); + } + + @Override + public void onUpdate() { + super.onUpdate(); + angle += 0.06; + setAlphaF((float) Math.sin(3.14 * particleAge / particleMaxAge)); + } + + @Override + public int getFXLayer() { + return 0; + } + }); + } + + @SideOnly(Side.CLIENT) + @Override + public void onDisplayTick(World world, int x, int y, int z, Random rand) { + int tick = (int) (world.getTotalWorldTime() % 6L); + if ((tick != 0 && tick != 5) || !getUtil().getProcess().isInProgress()) { + return; + } + + BinnieCore.proxy.getMinecraftInstance().effectRenderer.addEffect(new EntityFX(world, x + 0.5, y + 1, z + 0.5, 0.0, 0.0, 0.0) { + double axisX = posX; + double axisZ = posZ; + double angle = 0.7 + (int) (worldObj.getTotalWorldTime() % 2L) * 3.1415; + + { + axisX = 0.0; + axisZ = 0.0; + angle = 0.0; + motionX = 0.0; + motionZ = 0.0; + motionY = 0.012; + particleMaxAge = 100; + particleGravity = 0.0f; + noClip = true; + setRBGColorF(0.8f, 0.0f, 1.0f); + } + + @Override + public void onUpdate() { + super.onUpdate(); + angle += 0.06; + setPosition(axisX + 0.26 * Math.sin(angle), posY, axisZ + 0.26 * Math.cos(angle)); + setAlphaF((float) Math.cos(1.57 * particleAge / particleMaxAge)); + } + + @Override + public int getFXLayer() { + return 0; + } + }); + } +} diff --git a/src/main/java/binnie/genetics/machine/isolator/IsolatorComponentLogic.java b/src/main/java/binnie/genetics/machine/isolator/IsolatorComponentLogic.java new file mode 100644 index 00000000..7722166f --- /dev/null +++ b/src/main/java/binnie/genetics/machine/isolator/IsolatorComponentLogic.java @@ -0,0 +1,100 @@ +package binnie.genetics.machine.isolator; + +import binnie.core.genetics.Gene; +import binnie.core.machines.Machine; +import binnie.core.machines.inventory.IChargedSlots; +import binnie.core.machines.power.ComponentProcessSetCost; +import binnie.core.machines.power.ErrorState; +import binnie.core.machines.power.IProcess; +import binnie.genetics.item.ItemSequence; +import forestry.api.genetics.AlleleManager; +import forestry.api.genetics.IAllele; +import forestry.api.genetics.IChromosomeType; +import forestry.api.genetics.IIndividual; +import forestry.api.genetics.ISpeciesRoot; +import net.minecraft.item.ItemStack; + +import java.util.Random; + +public class IsolatorComponentLogic extends ComponentProcessSetCost implements IProcess { + protected float enzymePerProcess; + protected float ethanolPerProcess; + + public IsolatorComponentLogic(Machine machine) { + super(machine, 192000, 4800); + enzymePerProcess = 0.5f; + ethanolPerProcess = 10.0f; + } + + @Override + public ErrorState canWork() { + if (getUtil().isSlotEmpty(Isolator.SLOT_TARGET)) { + return new ErrorState.NoItem("No individual to isolate", Isolator.SLOT_TARGET); + } + // TODO check slot id in validation + if (!getUtil().isSlotEmpty(Isolator.SLOT_RESULT)) { + return new ErrorState.NoSpace("No room for DNA sequences", Isolator.SLOT_FINISHED); + } + if (getUtil().isSlotEmpty(Isolator.SLOT_SEQUENCER_VIAL)) { + return new ErrorState.NoItem("No empty sequencer vials", Isolator.SLOT_SEQUENCER_VIAL); + } + return super.canWork(); + } + + @Override + public ErrorState canProgress() { + if (!getUtil().liquidInTank(Isolator.TANK_ETHANOL, (int) ethanolPerProcess)) { + return new ErrorState.InsufficientLiquid("Insufficient ethanol", Isolator.TANK_ETHANOL); + } + if (getUtil().getSlotCharge(Isolator.SLOT_ENZYME) == 0.0f) { + return new ErrorState.NoItem("No enzyme", Isolator.SLOT_ENZYME); + } + return super.canProgress(); + } + + @Override + protected void onFinishTask() { + super.onFinishTask(); + Random rand = getMachine().getWorld().rand; + ISpeciesRoot root = AlleleManager.alleleRegistry.getSpeciesRoot(getUtil().getStack(Isolator.SLOT_TARGET)); + if (root == null) { + return; + } + + IIndividual individual = root.getMember(getUtil().getStack(Isolator.SLOT_TARGET)); + if (individual == null) { + return; + } + + IAllele allele; + IChromosomeType chromosome; + Gene gene = null; + if (getMachine().getWorld().rand.nextFloat() < 2.0f) { + while (gene == null) { + try { + chromosome = root.getKaryotype()[rand.nextInt(root.getKaryotype().length)]; + allele = rand.nextBoolean() ? + individual.getGenome().getActiveAllele(chromosome) : + individual.getGenome().getInactiveAllele(chromosome); + gene = Gene.create(allele, chromosome, root); + } catch (Exception e) { + // ignored + } + } + } + + ItemStack serum = ItemSequence.create(gene); + getUtil().setStack(Isolator.SLOT_RESULT, serum); + getUtil().decreaseStack(Isolator.SLOT_SEQUENCER_VIAL, 1); + if (rand.nextFloat() < 0.05f) { + getUtil().decreaseStack(Isolator.SLOT_TARGET, 1); + } + getUtil().drainTank(Isolator.TANK_ETHANOL, (int) ethanolPerProcess); + } + + @Override + protected void onTickTask() { + getMachine().getInterface(IChargedSlots.class) + .alterCharge(Isolator.SLOT_ENZYME, -enzymePerProcess * getProgressPerTick() / 100.0f); + } +} diff --git a/src/main/java/binnie/genetics/machine/isolator/IsolatorPackage.java b/src/main/java/binnie/genetics/machine/isolator/IsolatorPackage.java new file mode 100644 index 00000000..6f5f38ac --- /dev/null +++ b/src/main/java/binnie/genetics/machine/isolator/IsolatorPackage.java @@ -0,0 +1,78 @@ +package binnie.genetics.machine.isolator; + +import binnie.core.craftgui.minecraft.IMachineInformation; +import binnie.core.machines.Machine; +import binnie.core.machines.TileEntityMachine; +import binnie.core.machines.inventory.ComponentChargedSlots; +import binnie.core.machines.inventory.ComponentInventorySlots; +import binnie.core.machines.inventory.ComponentInventoryTransfer; +import binnie.core.machines.inventory.ComponentTankContainer; +import binnie.core.machines.inventory.InventorySlot; +import binnie.core.machines.inventory.SlotValidator; +import binnie.core.machines.power.ComponentPowerReceptor; +import binnie.genetics.core.GeneticsGUI; +import binnie.genetics.core.GeneticsTexture; +import binnie.genetics.item.GeneticsItems; +import binnie.genetics.machine.ComponentGeneticGUI; +import binnie.genetics.machine.ModuleMachine; +import binnie.genetics.machine.PackageGeneticBase; +import net.minecraft.tileentity.TileEntity; + +public class IsolatorPackage extends PackageGeneticBase implements IMachineInformation { + public IsolatorPackage() { + super("isolator", GeneticsTexture.Isolator, 0xff6f0f, true); + } + + @Override + public void createMachine(Machine machine) { + new ComponentGeneticGUI(machine, GeneticsGUI.Isolator); + ComponentInventorySlots inventory = new ComponentInventorySlots(machine); + InventorySlot enzymeSlot = inventory.addSlot(Isolator.SLOT_ENZYME, "enzyme"); + enzymeSlot.setValidator(new SlotValidator.Item(GeneticsItems.Enzyme.get(1), ModuleMachine.IconEnzyme)); + enzymeSlot.forbidExtraction(); + + InventorySlot vialSlot = inventory.addSlot(Isolator.SLOT_SEQUENCER_VIAL, "sequencervial"); + vialSlot.setValidator(new SlotValidator.Item(GeneticsItems.EmptySequencer.get(1), ModuleMachine.IconSequencer)); + vialSlot.forbidExtraction(); + + inventory.addSlotArray(Isolator.SLOT_RESERVE, "input"); + for (InventorySlot slot : inventory.getSlots(Isolator.SLOT_RESERVE)) { + slot.setValidator(new SlotValidator.Individual()); + slot.forbidExtraction(); + } + + InventorySlot targetSlot = inventory.addSlot(Isolator.SLOT_TARGET, "process"); + targetSlot.setValidator(new SlotValidator.Individual()); + targetSlot.setReadOnly(); + targetSlot.forbidInteraction(); + + InventorySlot resultSlot = inventory.addSlot(Isolator.SLOT_RESULT, "output"); + resultSlot.setReadOnly(); + resultSlot.forbidInteraction(); + + inventory.addSlotArray(Isolator.SLOT_FINISHED, "output"); + for (InventorySlot slot : inventory.getSlots(Isolator.SLOT_FINISHED)) { + slot.setReadOnly(); + slot.forbidInsertion(); + } + + ComponentTankContainer tanks = new ComponentTankContainer(machine); + tanks.addTank(Isolator.TANK_ETHANOL, "input", 1000); + tanks.getTankSlot(Isolator.TANK_ETHANOL).setValidator(new EthanolTankValidator()); + + ComponentChargedSlots chargedSlots = new ComponentChargedSlots(machine); + chargedSlots.addCharge(Isolator.SLOT_ENZYME); + + ComponentInventoryTransfer transfer = new ComponentInventoryTransfer(machine); + transfer.addRestock(Isolator.SLOT_RESERVE, Isolator.SLOT_TARGET, 1); + transfer.addStorage(Isolator.SLOT_RESULT, Isolator.SLOT_FINISHED); + new ComponentPowerReceptor(machine, 20000); + new IsolatorComponentLogic(machine); + new IsolatorComponentFX(machine); + } + + @Override + public TileEntity createTileEntity() { + return new TileEntityMachine(this); + } +} diff --git a/src/main/java/binnie/genetics/machine/lab/LabMachinePackage.java b/src/main/java/binnie/genetics/machine/lab/LabMachinePackage.java new file mode 100644 index 00000000..0fe84b9c --- /dev/null +++ b/src/main/java/binnie/genetics/machine/lab/LabMachinePackage.java @@ -0,0 +1,24 @@ +package binnie.genetics.machine.lab; + +import binnie.core.machines.Machine; +import binnie.genetics.core.GeneticsTexture; +import binnie.genetics.machine.ComponentGUIHolder; +import binnie.genetics.machine.MachineRendererLab; +import binnie.genetics.machine.PackageGeneticBase; +import net.minecraft.client.renderer.RenderBlocks; + +public class LabMachinePackage extends PackageGeneticBase { + public LabMachinePackage() { + super("labMachine", GeneticsTexture.LabMachine, 0xffffff, false); + } + + @Override + public void createMachine(Machine machine) { + new ComponentGUIHolder(machine); + } + + @Override + public void renderMachine(Machine machine, double x, double y, double z, float partialTick, RenderBlocks renderer) { + MachineRendererLab.instance.renderMachine(machine, color, renderTexture, x, y, z, partialTick); + } +} diff --git a/src/main/java/binnie/genetics/machine/polymeriser/Polymeriser.java b/src/main/java/binnie/genetics/machine/polymeriser/Polymeriser.java new file mode 100644 index 00000000..20c64538 --- /dev/null +++ b/src/main/java/binnie/genetics/machine/polymeriser/Polymeriser.java @@ -0,0 +1,10 @@ +package binnie.genetics.machine.polymeriser; + +public class Polymeriser { + public static final int TANK_BACTERIA = 0; + public static final int TANK_DNA = 1; + public static final int SLOT_SERUM = 0; + public static final int SLOT_GOLD = 1; + public static final int[] SLOT_SERUM_RESERVE = new int[]{2, 3, 4, 5}; + public static final int[] SLOT_SERUM_FINISHED = new int[]{6, 7, 8, 9}; +} diff --git a/src/main/java/binnie/genetics/machine/polymeriser/PolymeriserComponentFX.java b/src/main/java/binnie/genetics/machine/polymeriser/PolymeriserComponentFX.java new file mode 100644 index 00000000..0b8086f2 --- /dev/null +++ b/src/main/java/binnie/genetics/machine/polymeriser/PolymeriserComponentFX.java @@ -0,0 +1,78 @@ +package binnie.genetics.machine.polymeriser; + +import binnie.core.BinnieCore; +import binnie.core.machines.IMachine; +import binnie.core.machines.MachineComponent; +import binnie.core.machines.component.IRender; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.client.particle.EntityFX; +import net.minecraft.world.World; + +import java.util.Random; + +public class PolymeriserComponentFX extends MachineComponent implements IRender.RandomDisplayTick, IRender.DisplayTick { + public PolymeriserComponentFX(IMachine machine) { + super(machine); + } + + @SideOnly(Side.CLIENT) + @Override + public void onRandomDisplayTick(World world, int x, int y, int z, Random rand) { + // ignored + } + + @SideOnly(Side.CLIENT) + @Override + public void onDisplayTick(World world, int x, int y, int z, Random rand) { + int tick = (int) (world.getTotalWorldTime() % 8L); + if ((tick == 0 || tick == 3) && getUtil().getProcess().isInProgress()) { + BinnieCore.proxy.getMinecraftInstance().effectRenderer.addEffect(new EntityFX(world, x + 0.5, y + 1.8, z + 0.5, 0.0, 0.0, 0.0) { + double axisX = posX; + double axisZ = posZ; + double angle = 0.7 + (int) (worldObj.getTotalWorldTime() % 2L) * 3.1415; + + { + axisX = 0.0; + axisZ = 0.0; + angle = 0.0; + motionX = 0.0; + motionZ = 0.0; + motionY = -0.006; + particleMaxAge = 140; + particleGravity = 0.0f; + noClip = true; + setRBGColorF(0.8f, 0.0f, 1.0f); + } + + @Override + public void onUpdate() { + super.onUpdate(); + angle += 0.1; + motionY = -0.006; + double dist = 0.2; + if (particleAge > 60) { + if (particleAge > 120) { + dist = 0.1; + } else { + dist = 0.2 - 0.1 * ((particleAge - 60.0f) / 60.0f); + } + } + + setPosition(axisX + dist * Math.sin(angle), posY, axisZ + dist * Math.cos(angle)); + if (particleAge <= 40) { + setAlphaF(particleAge / 40.0f); + } + if (particleAge > 80) { + setRBGColorF(particleRed + (0.0f - particleRed) / 10.0f, particleGreen + (1.0f - particleGreen) / 10.0f, particleBlue + (1.0f - particleBlue) / 10.0f); + } + } + + @Override + public int getFXLayer() { + return 0; + } + }); + } + } +} diff --git a/src/main/java/binnie/genetics/machine/polymeriser/PolymeriserComponentLogic.java b/src/main/java/binnie/genetics/machine/polymeriser/PolymeriserComponentLogic.java new file mode 100644 index 00000000..6a51fbb9 --- /dev/null +++ b/src/main/java/binnie/genetics/machine/polymeriser/PolymeriserComponentLogic.java @@ -0,0 +1,99 @@ +package binnie.genetics.machine.polymeriser; + +import binnie.core.machines.Machine; +import binnie.core.machines.power.ComponentProcessSetCost; +import binnie.core.machines.power.ErrorState; +import binnie.core.machines.power.IProcess; +import binnie.genetics.genetics.Engineering; +import net.minecraft.item.ItemStack; + +public class PolymeriserComponentLogic extends ComponentProcessSetCost implements IProcess { + private static float chargePerProcess = 0.4f; + + private float dnaDrain; + private float bacteriaDrain; + + public PolymeriserComponentLogic(Machine machine) { + super(machine, 96000, 2400); + dnaDrain = 0.0f; + bacteriaDrain = 0.0f; + } + + private float getCatalyst() { + return (getUtil().getSlotCharge(1) > 0.0f) ? 0.2f : 1.0f; + } + + @Override + public int getProcessLength() { + return (int) (super.getProcessLength() * getNumberOfGenes() * getCatalyst()); + } + + @Override + public int getProcessEnergy() { + return (int) (super.getProcessEnergy() * getNumberOfGenes() * getCatalyst()); + } + + private float getDNAPerProcess() { + return getNumberOfGenes() * 50; + } + + @Override + public void onTickTask() { + super.onTickTask(); + getUtil().useCharge(Polymeriser.SLOT_GOLD, PolymeriserComponentLogic.chargePerProcess * getProgressPerTick() / 100.0f); + dnaDrain += getDNAPerProcess() * getProgressPerTick() / 100.0f; + bacteriaDrain += 0.2f * getDNAPerProcess() * getProgressPerTick() / 100.0f; + + if (dnaDrain >= 1.0f) { + getUtil().drainTank(Polymeriser.TANK_DNA, 1); + dnaDrain--; + } + + if (bacteriaDrain >= 1.0f) { + getUtil().drainTank(Polymeriser.TANK_BACTERIA, 1); + bacteriaDrain--; + } + } + + private int getNumberOfGenes() { + ItemStack serum = getUtil().getStack(Polymeriser.SLOT_SERUM); + if (serum == null) { + return 1; + } + return Engineering.getGenes(serum).length; + } + + @Override + public String getTooltip() { + int n = getNumberOfGenes(); + return "Replicating " + n + " genes" + ((n > 1) ? "s" : ""); + } + + @Override + public ErrorState canWork() { + if (getUtil().isSlotEmpty(Polymeriser.SLOT_SERUM)) { + return new ErrorState.NoItem("No item to replicate", Polymeriser.SLOT_SERUM); + } + if (!getUtil().getStack(Polymeriser.SLOT_SERUM).isItemDamaged()) { + return new ErrorState.InvalidItem("Item filled", Polymeriser.SLOT_SERUM); + } + return super.canWork(); + } + + @Override + public ErrorState canProgress() { + if (getUtil().getFluid(Polymeriser.TANK_BACTERIA) == null) { + return new ErrorState.InsufficientLiquid("Insufficient Bacteria", Polymeriser.TANK_BACTERIA); + } + if (getUtil().getFluid(Polymeriser.TANK_DNA) == null) { + return new ErrorState.InsufficientLiquid("Insufficient DNA", Polymeriser.TANK_DNA); + } + return super.canProgress(); + } + + @Override + protected void onFinishTask() { + super.onFinishTask(); + getUtil().damageItem(Polymeriser.SLOT_SERUM, -1); + } +} diff --git a/src/main/java/binnie/genetics/machine/polymeriser/PolymeriserPackage.java b/src/main/java/binnie/genetics/machine/polymeriser/PolymeriserPackage.java new file mode 100644 index 00000000..511a6827 --- /dev/null +++ b/src/main/java/binnie/genetics/machine/polymeriser/PolymeriserPackage.java @@ -0,0 +1,98 @@ +package binnie.genetics.machine.polymeriser; + +import binnie.core.craftgui.minecraft.IMachineInformation; +import binnie.core.machines.Machine; +import binnie.core.machines.TileEntityMachine; +import binnie.core.machines.inventory.ComponentChargedSlots; +import binnie.core.machines.inventory.ComponentInventorySlots; +import binnie.core.machines.inventory.ComponentInventoryTransfer; +import binnie.core.machines.inventory.ComponentTankContainer; +import binnie.core.machines.inventory.InventorySlot; +import binnie.core.machines.inventory.SlotValidator; +import binnie.core.machines.inventory.Validator; +import binnie.core.machines.power.ComponentPowerReceptor; +import binnie.genetics.core.GeneticsGUI; +import binnie.genetics.core.GeneticsTexture; +import binnie.genetics.item.GeneticLiquid; +import binnie.genetics.machine.ComponentGeneticGUI; +import binnie.genetics.machine.ModuleMachine; +import binnie.genetics.machine.PackageGeneticBase; +import net.minecraft.init.Items; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraftforge.fluids.FluidStack; + +public class PolymeriserPackage extends PackageGeneticBase implements IMachineInformation { + public PolymeriserPackage() { + super("polymeriser", GeneticsTexture.Polymeriser, 0x00e5c3, true); + } + + @Override + public void createMachine(Machine machine) { + new ComponentGeneticGUI(machine, GeneticsGUI.Replicator); + ComponentInventorySlots inventory = new ComponentInventorySlots(machine); + InventorySlot goldSlot = inventory.addSlot(Polymeriser.SLOT_GOLD, "catalyst"); + goldSlot.setValidator(new SlotValidator.Item(new ItemStack(Items.gold_nugget, 1), ModuleMachine.IconNugget)); + goldSlot.forbidExtraction(); + + InventorySlot serumSlot = inventory.addSlot(Polymeriser.SLOT_SERUM, "process"); + serumSlot.setValidator(new UnfilledSerumSlotValidator()); + serumSlot.forbidInteraction(); + serumSlot.setReadOnly(); + + for (InventorySlot slot : inventory.addSlotArray(Polymeriser.SLOT_SERUM_RESERVE, "input")) { + slot.setValidator(new UnfilledSerumSlotValidator()); + slot.forbidExtraction(); + } + + for (InventorySlot slot : inventory.addSlotArray(Polymeriser.SLOT_SERUM_FINISHED, "output")) { + slot.setReadOnly(); + } + + ComponentInventoryTransfer transfer = new ComponentInventoryTransfer(machine); + transfer.addRestock(Polymeriser.SLOT_SERUM_RESERVE, Polymeriser.SLOT_SERUM, 1); + transfer.addStorage(Polymeriser.SLOT_SERUM, Polymeriser.SLOT_SERUM_FINISHED, new ComponentInventoryTransfer.Condition() { + @Override + public boolean fufilled(ItemStack stack) { + return !stack.isItemDamaged(); + } + }); + + ComponentTankContainer tank = new ComponentTankContainer(machine); + tank.addTank(Polymeriser.TANK_BACTERIA, "input", 1000); + tank.getTankSlot(Polymeriser.TANK_BACTERIA).setValidator(new Validator() { + @Override + public boolean isValid(FluidStack itemStack) { + return GeneticLiquid.BacteriaPoly.get(1).isFluidEqual(itemStack); + } + + @Override + public String getTooltip() { + return "Polymerising Bacteria"; + } + }); + + tank.addTank(Polymeriser.TANK_DNA, "input", 1000); + tank.getTankSlot(Polymeriser.TANK_DNA).setValidator(new Validator() { + @Override + public boolean isValid(FluidStack itemStack) { + return GeneticLiquid.RawDNA.get(1).isFluidEqual(itemStack); + } + + @Override + public String getTooltip() { + return "Raw DNA"; + } + }); + + new ComponentChargedSlots(machine).addCharge(Polymeriser.SLOT_GOLD); + new ComponentPowerReceptor(machine, 8000); + new PolymeriserComponentLogic(machine); + new PolymeriserComponentFX(machine); + } + + @Override + public TileEntity createTileEntity() { + return new TileEntityMachine(this); + } +} diff --git a/src/main/java/binnie/genetics/machine/polymeriser/UnfilledSerumSlotValidator.java b/src/main/java/binnie/genetics/machine/polymeriser/UnfilledSerumSlotValidator.java new file mode 100644 index 00000000..9c7c351d --- /dev/null +++ b/src/main/java/binnie/genetics/machine/polymeriser/UnfilledSerumSlotValidator.java @@ -0,0 +1,22 @@ +package binnie.genetics.machine.polymeriser; + +import binnie.core.machines.inventory.SlotValidator; +import binnie.genetics.api.IItemChargable; +import binnie.genetics.machine.ModuleMachine; +import net.minecraft.item.ItemStack; + +public class UnfilledSerumSlotValidator extends SlotValidator { + public UnfilledSerumSlotValidator() { + super(ModuleMachine.IconSerum); + } + + @Override + public boolean isValid(ItemStack itemStack) { + return itemStack.getItem() instanceof IItemChargable; + } + + @Override + public String getTooltip() { + return "Unfilled Serum"; + } +} diff --git a/src/main/java/binnie/genetics/machine/sequencer/ComponentSequencerFX.java b/src/main/java/binnie/genetics/machine/sequencer/SequencerComponentFX.java similarity index 66% rename from src/main/java/binnie/genetics/machine/sequencer/ComponentSequencerFX.java rename to src/main/java/binnie/genetics/machine/sequencer/SequencerComponentFX.java index e190aca5..a81ff5ac 100644 --- a/src/main/java/binnie/genetics/machine/sequencer/ComponentSequencerFX.java +++ b/src/main/java/binnie/genetics/machine/sequencer/SequencerComponentFX.java @@ -12,8 +12,8 @@ import net.minecraft.world.World; import java.util.Random; -public class ComponentSequencerFX extends MachineComponent implements IRender.RandomDisplayTick, IRender.DisplayTick { - public ComponentSequencerFX(IMachine machine) { +public class SequencerComponentFX extends MachineComponent implements IRender.RandomDisplayTick, IRender.DisplayTick { + public SequencerComponentFX(IMachine machine) { super(machine); } @@ -62,39 +62,41 @@ public class ComponentSequencerFX extends MachineComponent implements IRender.Ra @Override public void onDisplayTick(World world, int x, int y, int z, Random rand) { int ticks = (int) (world.getTotalWorldTime() % 16L); - if (ticks == 0 && getUtil().getProcess().isInProgress()) { - BinnieCore.proxy.getMinecraftInstance().effectRenderer.addEffect(new EntityFX(world, x + 0.5, y + 1, z + 0.5, 0.0, 0.0, 0.0) { - { - motionX = 0.0; - motionZ = 0.0; - motionY = 0.012; - particleMaxAge = 50; - particleGravity = 0.0f; - noClip = true; - particleScale = 2.0f; - - setParticleIcon((new BinnieIcon[]{ - Sequencer.fxSeqA, - Sequencer.fxSeqG, - Sequencer.fxSeqC, - Sequencer.fxSeqT - })[rand.nextInt(4)].getIcon()); - } - - @Override - public void onUpdate() { - super.onUpdate(); - motionY = 0.012; - if (particleAge > 40) { - setAlphaF((50 - particleAge) / 10.0f); - } - } - - @Override - public int getFXLayer() { - return 1; - } - }); + if (ticks != 0 || !getUtil().getProcess().isInProgress()) { + return; } + + BinnieCore.proxy.getMinecraftInstance().effectRenderer.addEffect(new EntityFX(world, x + 0.5, y + 1, z + 0.5, 0.0, 0.0, 0.0) { + { + motionX = 0.0; + motionZ = 0.0; + motionY = 0.012; + particleMaxAge = 50; + particleGravity = 0.0f; + noClip = true; + particleScale = 2.0f; + + setParticleIcon((new BinnieIcon[]{ + Sequencer.fxSeqA, + Sequencer.fxSeqG, + Sequencer.fxSeqC, + Sequencer.fxSeqT + })[rand.nextInt(4)].getIcon()); + } + + @Override + public void onUpdate() { + super.onUpdate(); + motionY = 0.012; + if (particleAge > 40) { + setAlphaF((50 - particleAge) / 10.0f); + } + } + + @Override + public int getFXLayer() { + return 1; + } + }); } } diff --git a/src/main/java/binnie/genetics/machine/sequencer/ComponentSequencerLogic.java b/src/main/java/binnie/genetics/machine/sequencer/SequencerComponentLogic.java similarity index 96% rename from src/main/java/binnie/genetics/machine/sequencer/ComponentSequencerLogic.java rename to src/main/java/binnie/genetics/machine/sequencer/SequencerComponentLogic.java index 958ce07f..e0b7579d 100644 --- a/src/main/java/binnie/genetics/machine/sequencer/ComponentSequencerLogic.java +++ b/src/main/java/binnie/genetics/machine/sequencer/SequencerComponentLogic.java @@ -10,8 +10,8 @@ import binnie.genetics.genetics.SequencerItem; import binnie.genetics.item.GeneticsItems; import net.minecraft.item.ItemStack; -public class ComponentSequencerLogic extends ComponentProcess implements IProcess, ComponentInventoryTransfer.ITransferRestockListener { - public ComponentSequencerLogic(Machine machine) { +public class SequencerComponentLogic extends ComponentProcess implements IProcess, ComponentInventoryTransfer.ITransferRestockListener { + public SequencerComponentLogic(Machine machine) { super(machine); } diff --git a/src/main/java/binnie/genetics/machine/sequencer/PackageSequencer.java b/src/main/java/binnie/genetics/machine/sequencer/SequencerPackage.java similarity index 85% rename from src/main/java/binnie/genetics/machine/sequencer/PackageSequencer.java rename to src/main/java/binnie/genetics/machine/sequencer/SequencerPackage.java index adc65e47..5d7cecb7 100644 --- a/src/main/java/binnie/genetics/machine/sequencer/PackageSequencer.java +++ b/src/main/java/binnie/genetics/machine/sequencer/SequencerPackage.java @@ -15,14 +15,14 @@ import binnie.genetics.core.GeneticsGUI; import binnie.genetics.core.GeneticsTexture; import binnie.genetics.item.GeneticsItems; import binnie.genetics.machine.ComponentGeneticGUI; -import binnie.genetics.machine.GeneticMachine; import binnie.genetics.machine.ModuleMachine; +import binnie.genetics.machine.PackageGeneticBase; import net.minecraft.tileentity.TileEntity; -public class PackageSequencer extends GeneticMachine.PackageGeneticBase implements IMachineInformation { - private ComponentSequencerLogic logic; +public class SequencerPackage extends PackageGeneticBase implements IMachineInformation { + private SequencerComponentLogic logic; - public PackageSequencer() { + public SequencerPackage() { super("sequencer", GeneticsTexture.Sequencer, 0xb7ff32, true); Sequencer.fxSeqA = Binnie.Resource.getBlockIcon(Genetics.instance, "fx/sequencer.a"); Sequencer.fxSeqG = Binnie.Resource.getBlockIcon(Genetics.instance, "fx/sequencer.g"); @@ -41,12 +41,12 @@ public class PackageSequencer extends GeneticMachine.PackageGeneticBase implemen inventory.addSlotArray(Sequencer.SLOT_RESERVE, "input"); for (InventorySlot slot : inventory.getSlots(Sequencer.SLOT_RESERVE)) { - slot.setValidator(new SlotValidatorUnsequenced()); + slot.setValidator(new UnsequencedSlotValidator()); slot.forbidExtraction(); } InventorySlot slotTarget = inventory.addSlot(Sequencer.SLOT_TARGET_INDEX, "process"); - slotTarget.setValidator(new SlotValidatorUnsequenced()); + slotTarget.setValidator(new UnsequencedSlotValidator()); slotTarget.setReadOnly(); slotTarget.forbidInteraction(); @@ -58,9 +58,9 @@ public class PackageSequencer extends GeneticMachine.PackageGeneticBase implemen new ComponentChargedSlots(machine).addCharge(Sequencer.SLOT_DYE_INDEX); new ComponentPowerReceptor(machine, 10000); - new ComponentSequencerFX(machine); + new SequencerComponentFX(machine); - logic = new ComponentSequencerLogic(machine); + logic = new SequencerComponentLogic(machine); transfer.setTransferListener(logic); } diff --git a/src/main/java/binnie/genetics/machine/sequencer/SlotValidatorUnsequenced.java b/src/main/java/binnie/genetics/machine/sequencer/UnsequencedSlotValidator.java similarity index 85% rename from src/main/java/binnie/genetics/machine/sequencer/SlotValidatorUnsequenced.java rename to src/main/java/binnie/genetics/machine/sequencer/UnsequencedSlotValidator.java index 64cba6c3..f705f96c 100644 --- a/src/main/java/binnie/genetics/machine/sequencer/SlotValidatorUnsequenced.java +++ b/src/main/java/binnie/genetics/machine/sequencer/UnsequencedSlotValidator.java @@ -6,8 +6,8 @@ import binnie.genetics.genetics.SequencerItem; import binnie.genetics.machine.ModuleMachine; import net.minecraft.item.ItemStack; -public class SlotValidatorUnsequenced extends SlotValidator { - public SlotValidatorUnsequenced() { +public class UnsequencedSlotValidator extends SlotValidator { + public UnsequencedSlotValidator() { super(ModuleMachine.IconSequencer); } diff --git a/src/main/java/binnie/genetics/machine/splicer/IndividualInoculateValidator.java b/src/main/java/binnie/genetics/machine/splicer/IndividualInoculateValidator.java new file mode 100644 index 00000000..30ee5977 --- /dev/null +++ b/src/main/java/binnie/genetics/machine/splicer/IndividualInoculateValidator.java @@ -0,0 +1,24 @@ +package binnie.genetics.machine.splicer; + +import binnie.Binnie; +import binnie.core.machines.inventory.SlotValidator; +import forestry.api.genetics.AlleleManager; +import forestry.api.genetics.ISpeciesRoot; +import net.minecraft.item.ItemStack; + +public class IndividualInoculateValidator extends SlotValidator { + public IndividualInoculateValidator() { + super(null); + } + + @Override + public boolean isValid(ItemStack object) { + ISpeciesRoot root = AlleleManager.alleleRegistry.getSpeciesRoot(object); + return root != null && Binnie.Genetics.getSystem(root).isDNAManipulable(object); + } + + @Override + public String getTooltip() { + return "Splicable Individual"; + } +} diff --git a/src/main/java/binnie/genetics/machine/splicer/SerumSlotValidator.java b/src/main/java/binnie/genetics/machine/splicer/SerumSlotValidator.java new file mode 100644 index 00000000..83296cd3 --- /dev/null +++ b/src/main/java/binnie/genetics/machine/splicer/SerumSlotValidator.java @@ -0,0 +1,22 @@ +package binnie.genetics.machine.splicer; + +import binnie.core.machines.inventory.SlotValidator; +import binnie.genetics.api.IItemSerum; +import binnie.genetics.machine.ModuleMachine; +import net.minecraft.item.ItemStack; + +class SerumSlotValidator extends SlotValidator { + public SerumSlotValidator() { + super(ModuleMachine.IconSerum); + } + + @Override + public boolean isValid(ItemStack itemStack) { + return itemStack.getItem() instanceof IItemSerum; + } + + @Override + public String getTooltip() { + return "Serum Vials & Arrays"; + } +} diff --git a/src/main/java/binnie/genetics/machine/splicer/Splicer.java b/src/main/java/binnie/genetics/machine/splicer/Splicer.java new file mode 100644 index 00000000..676d10ce --- /dev/null +++ b/src/main/java/binnie/genetics/machine/splicer/Splicer.java @@ -0,0 +1,37 @@ +package binnie.genetics.machine.splicer; + +import binnie.genetics.api.IGene; +import forestry.api.apiculture.EnumBeeChromosome; +import forestry.api.apiculture.IBeeRoot; +import forestry.api.genetics.IAllele; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; + +public class Splicer { + public static final int SLOT_SERUM_VIAL = 0; + public static final int[] SLOT_SERUM_RESERVE = new int[]{1, 2}; + public static final int[] SLOT_SERUM_EXPENDED = new int[]{3, 4}; + public static final int[] SLOT_RESERVE = new int[]{5, 6, 7, 8, 9}; + public static final int SLOT_TARGET = 9; + public static final int[] SLOT_FINISHED = new int[]{10, 11, 12, 13}; + + public static void setGene(IGene gene, ItemStack target, int chromoN) { + int chromosomeID = gene.getChromosome().ordinal(); + if (chromosomeID >= EnumBeeChromosome.HUMIDITY.ordinal() && gene.getSpeciesRoot() instanceof IBeeRoot) { + chromosomeID--; + } + + Class cls = gene.getChromosome().getAlleleClass(); + if (!cls.isInstance(gene.getAllele())) { + return; + } + + NBTTagCompound beeNBT = target.getTagCompound(); + NBTTagCompound genomeNBT = beeNBT.getCompoundTag("Genome"); + NBTTagList chromosomes = genomeNBT.getTagList("Chromosomes", 10); + NBTTagCompound chromosomeNBT = chromosomes.getCompoundTagAt(chromosomeID); + chromosomeNBT.setString("UID" + chromoN, gene.getAllele().getUID()); + target.setTagCompound(beeNBT); + } +} diff --git a/src/main/java/binnie/genetics/machine/splicer/SplicerComponentFX.java b/src/main/java/binnie/genetics/machine/splicer/SplicerComponentFX.java new file mode 100644 index 00000000..15486319 --- /dev/null +++ b/src/main/java/binnie/genetics/machine/splicer/SplicerComponentFX.java @@ -0,0 +1,130 @@ +package binnie.genetics.machine.splicer; + +import binnie.core.BinnieCore; +import binnie.core.machines.IMachine; +import binnie.core.machines.MachineComponent; +import binnie.core.machines.component.IRender; +import binnie.core.machines.network.INetwork; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.client.particle.EntityFX; +import net.minecraft.client.renderer.entity.RenderItem; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.world.World; +import org.lwjgl.opengl.GL11; + +import java.util.Random; + +public class SplicerComponentFX extends MachineComponent implements + IRender.RandomDisplayTick, + IRender.DisplayTick, + IRender.Render, + INetwork.TilePacketSync { + private EntityItem dummyEntityItem; + + public SplicerComponentFX(IMachine machine) { + super(machine); + dummyEntityItem = new EntityItem(null); + } + + @SideOnly(Side.CLIENT) + @Override + public void onRandomDisplayTick(World world, int x, int y, int z, Random rand) { + } + + @SideOnly(Side.CLIENT) + @Override + public void onDisplayTick(World world, int x, int y, int z, Random rand) { + int tick = (int) (world.getTotalWorldTime() % 3L); + if (tick != 0 || !getUtil().getProcess().isInProgress()) { + return; + } + + BinnieCore.proxy.getMinecraftInstance().effectRenderer.addEffect(new EntityFX(world, x + 0.5, y + 1.5, z + 0.5, 0.0, 0.0, 0.0) { + double axisX = posX; + double axisZ = posZ; + double angle = (int) (worldObj.getTotalWorldTime() % 4L) * 0.5 * 3.1415; + + { + axisX = 0.0; + axisZ = 0.0; + angle = 0.0; + motionX = 0.0; + motionZ = 0.0; + motionY = (rand.nextDouble() - 0.5) * 0.02; + particleMaxAge = 240; + particleGravity = 0.0f; + noClip = true; + setRBGColorF(0.3f + rand.nextFloat() * 0.5f, 0.3f + rand.nextFloat() * 0.5f, 0.0f); + } + + @Override + public void onUpdate() { + super.onUpdate(); + double speed = 0.04; + angle -= speed; + double dist = 0.25 + 0.2 * Math.sin(particleAge / 50.0f); + setPosition(axisX + dist * Math.sin(angle), posY, axisZ + dist * Math.cos(angle)); + setAlphaF((float) Math.cos(1.57 * particleAge / particleMaxAge)); + } + + @Override + public int getFXLayer() { + return 0; + } + }); + } + + @SideOnly(Side.CLIENT) + @Override + public void renderInWorld(RenderItem renderItem, double x, double y, double z) { + if (!getUtil().getProcess().isInProgress()) { + return; + } + + ItemStack stack = getUtil().getStack(Splicer.SLOT_TARGET); + dummyEntityItem.worldObj = getMachine().getWorld(); + dummyEntityItem.setEntityItemStack(stack); + EntityItem dummyEntityItem = this.dummyEntityItem; + dummyEntityItem.age++; + this.dummyEntityItem.hoverStart = 0.0f; + if (stack == null) { + return; + } + + GL11.glPushMatrix(); + GL11.glRotatef(180.0f, 0.0f, 0.0f, 1.0f); + GL11.glTranslatef(0.0f, -0.25f, 0.0f); + renderItem.doRender(this.dummyEntityItem, 0.0, 0.0, 0.0, 0.0f, 0.0f); + GL11.glPopMatrix(); + } + + @Override + public void syncToNBT(NBTTagCompound nbt) { + NBTTagCompound item = new NBTTagCompound(); + ItemStack stack = getUtil().getStack(Splicer.SLOT_TARGET); + if (stack != null) { + stack.writeToNBT(item); + nbt.setTag("item", item); + } + } + + @Override + public void syncFromNBT(NBTTagCompound nbt) { + if (nbt.hasKey("item")) { + getUtil().setStack(Splicer.SLOT_TARGET, ItemStack.loadItemStackFromNBT(nbt.getCompoundTag("item"))); + } else { + getUtil().setStack(Splicer.SLOT_TARGET, null); + } + } + + @Override + public void onInventoryUpdate() { + if (!getUtil().isServer()) { + return; + } + getUtil().refreshBlock(); + } +} diff --git a/src/main/java/binnie/genetics/machine/splicer/SplicerComponentLogic.java b/src/main/java/binnie/genetics/machine/splicer/SplicerComponentLogic.java new file mode 100644 index 00000000..7d3ca060 --- /dev/null +++ b/src/main/java/binnie/genetics/machine/splicer/SplicerComponentLogic.java @@ -0,0 +1,174 @@ +package binnie.genetics.machine.splicer; + +import binnie.core.machines.Machine; +import binnie.core.machines.power.ComponentProcessSetCost; +import binnie.core.machines.power.ErrorState; +import binnie.core.machines.power.IProcess; +import binnie.genetics.api.IGene; +import binnie.genetics.api.IItemSerum; +import binnie.genetics.genetics.Engineering; +import forestry.api.genetics.AlleleManager; +import forestry.api.genetics.IAllele; +import forestry.api.genetics.IChromosomeType; +import forestry.api.genetics.IGenome; +import forestry.api.genetics.IIndividual; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; + +public class SplicerComponentLogic extends ComponentProcessSetCost implements IProcess { + public int nOfGenes; + + public SplicerComponentLogic(Machine machine) { + super(machine, 12000000, 1200); + nOfGenes = 0; + } + + @Override + public int getProcessLength() { + float n = getNumberOfGenes(); + if (n > 1.0f) { + n = 1.0f + (n - 1.0f) * 0.5f; + } + // Fix for / by 0 + int temp = (int) (super.getProcessLength() * n); + return temp != 0 ? temp : 1; + } + + @Override + public int getProcessEnergy() { + float n = getNumberOfGenes(); + if (n > 1.0f) { + n = 1.0f + (n - 1.0f) * 0.5f; + } + return (int) (super.getProcessEnergy() * n); + } + + @Override + public void onInventoryUpdate() { + super.onInventoryUpdate(); + nOfGenes = getGenesToUse(); + } + + protected int getGenesToUse() { + ItemStack serum = getUtil().getStack(Splicer.SLOT_SERUM_VIAL); + ItemStack target = getUtil().getStack(Splicer.SLOT_TARGET); + if (serum == null || target == null) { + return 1; + } + + IIndividual ind = AlleleManager.alleleRegistry.getIndividual(target); + IGene[] genes = ((IItemSerum) serum.getItem()).getGenes(serum); + if (ind.getGenome().getSpeciesRoot() != ((IItemSerum) serum.getItem()).getSpeciesRoot(serum)) { + return 1; + } + + int i = 0; + for (IGene gene : genes) { + if (ind.getGenome().getActiveAllele(gene.getChromosome()) != gene.getAllele() || ind.getGenome().getInactiveAllele(gene.getChromosome()) != gene.getAllele()) { + i++; + } + } + return (i < 1) ? 1 : i; + } + + private int getFullNumberOfGenes() { + ItemStack serum = getUtil().getStack(Splicer.SLOT_SERUM_VIAL); + if (serum == null) { + return 1; + } + return Engineering.getGenes(serum).length; + } + + private int getNumberOfGenes() { + return nOfGenes; + } + + @Override + public String getTooltip() { + int n = getNumberOfGenes(); + int f = getFullNumberOfGenes(); + return "Splicing in " + n + ((f > 1) ? ("/" + f) : "") + " gene" + ((n > 1) ? "s" : ""); + } + + @Override + public ErrorState canWork() { + if (getUtil().isSlotEmpty(Splicer.SLOT_TARGET)) { + return new ErrorState.NoItem("No Individual to Splice", Splicer.SLOT_TARGET); + } + if (getUtil().isSlotEmpty(Splicer.SLOT_SERUM_VIAL)) { + return new ErrorState.NoItem("No Serum", Splicer.SLOT_SERUM_VIAL); + } + + ErrorState state = isValidSerum(); + if (state != null) { + return state; + } + + if (getUtil().getStack(0) != null && Engineering.getCharges(getUtil().getStack(Splicer.SLOT_SERUM_VIAL)) == 0) { + return new ErrorState("Empty Serum", "Serum is empty"); + } + return super.canWork(); + } + + public ErrorState isValidSerum() { + ItemStack serum = getUtil().getStack(Splicer.SLOT_SERUM_VIAL); + ItemStack target = getUtil().getStack(Splicer.SLOT_TARGET); + IGene[] genes = Engineering.getGenes(serum); + if (genes.length == 0) { + return new ErrorState("Invalid Serum", "Serum does not hold any genes"); + } + if (!genes[0].getSpeciesRoot().isMember(target)) { + return new ErrorState("Invalid Serum", "Mismatch of Serum Type and Target"); + } + + IIndividual individual = genes[0].getSpeciesRoot().getMember(target); + boolean hasAll = true; + for (IGene gene : genes) { + if (hasAll) { + IGenome genome = individual.getGenome(); + IChromosomeType chromosome = gene.getChromosome(); + String geneAlleleUID = gene.getAllele().getUID(); + IAllele a = genome.getActiveAllele(chromosome); + IAllele b = genome.getInactiveAllele(chromosome); + hasAll = a.getUID().equals(geneAlleleUID) + && b.getUID().equals(geneAlleleUID); + } + } + + if (hasAll) { + return new ErrorState("Defunct Serum", "Individual already possesses this allele"); + } + return null; + } + + @Override + public ErrorState canProgress() { + return super.canProgress(); + } + + @Override + protected void onFinishTask() { + super.onFinishTask(); + ItemStack serum = getUtil().getStack(Splicer.SLOT_SERUM_VIAL); + ItemStack target = getUtil().getStack(Splicer.SLOT_TARGET); + IIndividual ind = AlleleManager.alleleRegistry.getIndividual(target); + if (!ind.isAnalyzed()) { + ind.analyze(); + NBTTagCompound nbttagcompound = new NBTTagCompound(); + ind.writeToNBT(nbttagcompound); + target.setTagCompound(nbttagcompound); + } + + IGene[] genes = ((IItemSerum) serum.getItem()).getGenes(serum); + for (IGene gene : genes) { + Splicer.setGene(gene, target, 0); + Splicer.setGene(gene, target, 1); + } + getUtil().damageItem(Splicer.SLOT_SERUM_VIAL, 1); + } + + @Override + protected void onTickTask() { + // ignored + } +} diff --git a/src/main/java/binnie/genetics/machine/splicer/SplicerPackage.java b/src/main/java/binnie/genetics/machine/splicer/SplicerPackage.java new file mode 100644 index 00000000..e03a31f3 --- /dev/null +++ b/src/main/java/binnie/genetics/machine/splicer/SplicerPackage.java @@ -0,0 +1,92 @@ +package binnie.genetics.machine.splicer; + +import binnie.core.craftgui.minecraft.IMachineInformation; +import binnie.core.machines.Machine; +import binnie.core.machines.TileEntityMachine; +import binnie.core.machines.inventory.ComponentInventorySlots; +import binnie.core.machines.inventory.ComponentInventoryTransfer; +import binnie.core.machines.inventory.InventorySlot; +import binnie.core.machines.inventory.SlotValidator; +import binnie.core.machines.power.ComponentPowerReceptor; +import binnie.genetics.core.GeneticsGUI; +import binnie.genetics.core.GeneticsTexture; +import binnie.genetics.genetics.Engineering; +import binnie.genetics.machine.AdvGeneticMachine; +import binnie.genetics.machine.ComponentGeneticGUI; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; + +public class SplicerPackage extends AdvGeneticMachine.PackageAdvGeneticBase implements IMachineInformation { + public SplicerPackage() { + super("splicer", GeneticsTexture.Splicer, 0xe22235, true); + } + + @Override + public void createMachine(Machine machine) { + new ComponentGeneticGUI(machine, GeneticsGUI.Splicer); + ComponentInventorySlots inventory = new ComponentInventorySlots(machine); + SlotValidator serumValid = new SerumSlotValidator(); + + InventorySlot serumSlot = inventory.addSlot(Splicer.SLOT_SERUM_VIAL, "serum.active"); + serumSlot.forbidInteraction(); + serumSlot.setReadOnly(); + serumSlot.setValidator(serumValid); + + inventory.addSlotArray(Splicer.SLOT_SERUM_RESERVE, "serum.input"); + for (InventorySlot slot : inventory.getSlots(Splicer.SLOT_SERUM_RESERVE)) { + slot.setValidator(serumValid); + slot.forbidExtraction(); + } + + inventory.addSlotArray(Splicer.SLOT_SERUM_EXPENDED, "serum.output"); + for (InventorySlot slot : inventory.getSlots(Splicer.SLOT_SERUM_EXPENDED)) { + slot.setValidator(serumValid); + slot.setReadOnly(); + } + + inventory.addSlotArray(Splicer.SLOT_RESERVE, "input"); + for (InventorySlot slot : inventory.getSlots(Splicer.SLOT_RESERVE)) { + slot.forbidExtraction(); + slot.setValidator(new IndividualInoculateValidator()); + } + + InventorySlot targetSlot = inventory.addSlot(Splicer.SLOT_TARGET, "process"); + targetSlot.setValidator(new IndividualInoculateValidator()); + targetSlot.setReadOnly(); + targetSlot.forbidInteraction(); + + inventory.addSlotArray(Splicer.SLOT_FINISHED, "output"); + for (InventorySlot slot : inventory.getSlots(Splicer.SLOT_FINISHED)) { + slot.setReadOnly(); + slot.forbidInsertion(); + slot.setValidator(new IndividualInoculateValidator()); + } + + ComponentInventoryTransfer transfer = new ComponentInventoryTransfer(machine); + transfer.addRestock(Splicer.SLOT_RESERVE, Splicer.SLOT_TARGET, 1); + transfer.addRestock(Splicer.SLOT_SERUM_RESERVE, Splicer.SLOT_SERUM_VIAL); + transfer.addStorage(Splicer.SLOT_SERUM_VIAL, Splicer.SLOT_SERUM_EXPENDED, new ComponentInventoryTransfer.Condition() { + @Override + public boolean fufilled(ItemStack stack) { + return Engineering.getCharges(stack) == 0; + } + }); + transfer.addStorage(Splicer.SLOT_TARGET, Splicer.SLOT_FINISHED, new ComponentInventoryTransfer.Condition() { + @Override + public boolean fufilled(ItemStack stack) { + return stack != null + && transfer.getMachine().getMachineUtil().getStack(Splicer.SLOT_SERUM_VIAL) != null + && transfer.getMachine().getInterface(SplicerComponentLogic.class).isValidSerum() != null; + } + }); + + new ComponentPowerReceptor(machine, 20000); + new SplicerComponentLogic(machine); + new SplicerComponentFX(machine); + } + + @Override + public TileEntity createTileEntity() { + return new TileEntityMachine(this); + } +} diff --git a/src/main/resources/assets/binniecore/lang/en_GB.lang b/src/main/resources/assets/binniecore/lang/en_GB.lang index b931c929..cbd75a13 100644 --- a/src/main/resources/assets/binniecore/lang/en_GB.lang +++ b/src/main/resources/assets/binniecore/lang/en_GB.lang @@ -163,6 +163,7 @@ binniecore.allele.fertility.maximum=Maximum binniecore.allele.true=Yes binniecore.allele.false=No +binniecore.allele.none=None binniecore.allele.metabolism.highest=Highest binniecore.allele.metabolism.higher=Higher @@ -172,13 +173,9 @@ binniecore.allele.metabolism.slow=Slow binniecore.allele.metabolism.slower=Slower binniecore.allele.metabolism.slowest=Slowest - -binniecore.allele.none=None - binniecore.allele.growth.tropical=Tropical binniecore.allele.growth.lightlevel=Light Level - binniecore.beemodifier.territory=Territory binniecore.beemodifier.mutation=Mutation binniecore.beemodifier.lifespan=Lifespan @@ -197,6 +194,14 @@ binniecore.item.container.bucket=Bucket binniecore.item.container.glass=Bottle binniecore.item.container.cylinder=Cylinder +binniecore.machine.error.noItem=No Item +binniecore.machine.error.invalidItem=Invalid Item +binniecore.machine.error.noSpace=No Space +binniecore.machine.error.insufficientPower.title=Insufficient Power +binniecore.machine.error.insufficientPower.desc=Not enough power to operate +binniecore.machine.error.tankFull=Tank Full +binniecore.machine.error.insufficientLiquid=Insufficient Liquid + binniecore.machine.storage.compartment=Compartment binniecore.machine.storage.compartmentIron=Iron Compartment binniecore.machine.storage.compartmentDiamond=Diamond Compartment @@ -207,8 +212,7 @@ binniecore.machine.storage.compartmentGold=Gold Compartment < %1$s is the name of the pattern > binniecore.gui.designer.pattern=%1$s Pattern -binniecore.gui.database.nodescription=No Description Provided. - +binniecore.gui.database.nodescription=No Description Provided.Hel binniecore.gui.database.mode.species=Species binniecore.gui.database.mode.branches=Branches binniecore.gui.database.mode.breeder=Breeder @@ -220,7 +224,22 @@ binniecore.gui.tolerated=Tolerated binniecore.gui.nottolerated=Not Tolerated binniecore.gui.design=Design - +binniecore.gui.tooltip.info=Info +binniecore.gui.tooltip.help=Help +binniecore.gui.tooltip.help.0=To activate help tooltips, +binniecore.gui.tooltip.help.1=hold down the tab key and +binniecore.gui.tooltip.help.2=mouse over controls. +binniecore.gui.tooltip.powerSupply=Power Supply +binniecore.gui.tooltip.poweredBy=Powered by %s +binniecore.gui.tooltip.tank.full=%d%% full +binniecore.gui.tooltip.tank.amount=%d mB +binniecore.gui.tooltip.tank.empty=Empty +binniecore.gui.tooltip.tank.capacity=Capacity: %d mB +binniecore.gui.tooltip.tank.insertSide=Insert Side: %s +binniecore.gui.tooltip.tank.extractSide=Extract Side: %s +binniecore.gui.tooltip.tank.outputOnlyTank=Output Only Tank +binniecore.gui.tooltip.tank.acceptsAny=Accepts: Any Item +binniecore.gui.tooltip.tank.accepts=Accepts: %s < Descriptions used for effects in the database > diff --git a/src/main/resources/assets/binniecore/lang/en_US.lang b/src/main/resources/assets/binniecore/lang/en_US.lang index 99ebeead..50ccad81 100644 --- a/src/main/resources/assets/binniecore/lang/en_US.lang +++ b/src/main/resources/assets/binniecore/lang/en_US.lang @@ -164,6 +164,7 @@ binniecore.allele.fertility.maximum=Maximum binniecore.allele.true=Yes binniecore.allele.false=No +binniecore.allele.none=None binniecore.allele.metabolism.highest=Highest binniecore.allele.metabolism.higher=Higher @@ -173,13 +174,9 @@ binniecore.allele.metabolism.slow=Slow binniecore.allele.metabolism.slower=Slower binniecore.allele.metabolism.slowest=Slowest - -binniecore.allele.none=None - binniecore.allele.growth.tropical=Tropical binniecore.allele.growth.lightlevel=Light Level - binniecore.beemodifier.territory=Territory binniecore.beemodifier.mutation=Mutation binniecore.beemodifier.lifespan=Lifespan @@ -198,6 +195,14 @@ binniecore.item.container.bucket=Bucket binniecore.item.container.glass=Bottle binniecore.item.container.cylinder=Cylinder +binniecore.machine.error.noItem=No Item +binniecore.machine.error.invalidItem=Invalid Item +binniecore.machine.error.noSpace=No Space +binniecore.machine.error.insufficientPower.title=Insufficient Power +binniecore.machine.error.insufficientPower.desc=Not enough power to operate +binniecore.machine.error.tankFull=Tank Full +binniecore.machine.error.insufficientLiquid=Insufficient Liquid + binniecore.machine.storage.compartment=Compartment binniecore.machine.storage.compartmentIron=Iron Compartment binniecore.machine.storage.compartmentDiamond=Diamond Compartment @@ -209,7 +214,6 @@ binniecore.machine.storage.compartmentGold=Gold Compartment binniecore.gui.designer.pattern=%1$s Pattern binniecore.gui.database.nodescription=No Description Provided. - binniecore.gui.database.mode.species=Species binniecore.gui.database.mode.branches=Branches binniecore.gui.database.mode.breeder=Breeder @@ -221,7 +225,22 @@ binniecore.gui.tolerated=Tolerated binniecore.gui.nottolerated=Not Tolerated binniecore.gui.design=Design - +binniecore.gui.tooltip.info=Info +binniecore.gui.tooltip.help=Help +binniecore.gui.tooltip.help.0=To activate help tooltips, +binniecore.gui.tooltip.help.1=hold down the tab key and +binniecore.gui.tooltip.help.2=mouse over controls. +binniecore.gui.tooltip.powerSupply=Power Supply +binniecore.gui.tooltip.poweredBy=Powered by %s +binniecore.gui.tooltip.tank.full=%d%% full +binniecore.gui.tooltip.tank.amount=%d mB +binniecore.gui.tooltip.tank.empty=Empty +binniecore.gui.tooltip.tank.capacity=Capacity: %d mB +binniecore.gui.tooltip.tank.insertSide=Insert Side: %s +binniecore.gui.tooltip.tank.extractSide=Extract Side: %s +binniecore.gui.tooltip.tank.outputOnlyTank=Output Only Tank +binniecore.gui.tooltip.tank.acceptsAny=Accepts: Any Item +binniecore.gui.tooltip.tank.accepts=Accepts: %s < Descriptions used for effects in the registry > diff --git a/src/main/resources/assets/binniecore/lang/ru_RU.lang b/src/main/resources/assets/binniecore/lang/ru_RU.lang index 9ab4d61e..9bd6f4a2 100644 --- a/src/main/resources/assets/binniecore/lang/ru_RU.lang +++ b/src/main/resources/assets/binniecore/lang/ru_RU.lang @@ -164,6 +164,7 @@ binniecore.allele.fertility.maximum=Наивысшая binniecore.allele.true=Да binniecore.allele.false=Нет +binniecore.allele.none=Нет binniecore.allele.metabolism.highest=Высочайший binniecore.allele.metabolism.higher=Высокий @@ -173,13 +174,9 @@ binniecore.allele.metabolism.slow=Пониженный binniecore.allele.metabolism.slower=Низкий binniecore.allele.metabolism.slowest=Нижайший - -binniecore.allele.none=Нет - binniecore.allele.growth.tropical=в тропиках binniecore.allele.growth.lightlevel=на свету - binniecore.beemodifier.territory=Рабочая зона binniecore.beemodifier.mutation=Мутация binniecore.beemodifier.lifespan=Время жизни @@ -198,6 +195,14 @@ binniecore.item.container.bucket=Ведро binniecore.item.container.glass=Бутыль binniecore.item.container.cylinder=Баллон +binniecore.machine.error.noItem=Нет предметов +binniecore.machine.error.invalidItem=Неподходяий предмет +binniecore.machine.error.noSpace=Нет места +binniecore.machine.error.insufficientPower.title=Недостаточно мощности +binniecore.machine.error.insufficientPower.desc=Не хватает мощности для работы +binniecore.machine.error.tankFull=Бак полон +binniecore.machine.error.insufficientLiquid=Недостаточно жидкости + binniecore.machine.storage.compartment=Сундук binniecore.machine.storage.compartmentIron=Железный сундук binniecore.machine.storage.compartmentDiamond=Алмазный сундук @@ -209,7 +214,6 @@ binniecore.machine.storage.compartmentGold=Золотой сундук binniecore.gui.designer.pattern=%1$s Pattern binniecore.gui.database.nodescription=Нет описания - binniecore.gui.database.mode.species=Виды binniecore.gui.database.mode.branches=Семейства binniecore.gui.database.mode.breeder=Селекция @@ -221,7 +225,22 @@ binniecore.gui.tolerated=устойчив binniecore.gui.nottolerated=неустойчив binniecore.gui.design=Дизайн - +binniecore.gui.tooltip.info=Информация +binniecore.gui.tooltip.help=Помощь +binniecore.gui.tooltip.help.0=Для показа всплывающих подсказок +binniecore.gui.tooltip.help.1=зажмите клавишу TAB и +binniecore.gui.tooltip.help.2=наведите курсор на элемент интерфейса. +binniecore.gui.tooltip.powerSupply=Источник питания +binniecore.gui.tooltip.poweredBy=Запитавший: %s +binniecore.gui.tooltip.tank.full=Заполнено %d%% +binniecore.gui.tooltip.tank.amount=%d mB +binniecore.gui.tooltip.tank.empty=Пусто +binniecore.gui.tooltip.tank.capacity=Вместимость: %d mB +binniecore.gui.tooltip.tank.insertSide=Принимающая сторона: %s +binniecore.gui.tooltip.tank.extractSide=Выдающая сторона: %s +binniecore.gui.tooltip.tank.outputOnlyTank=Отдающий бак +binniecore.gui.tooltip.tank.acceptsAny=Принимается: любой предмет +binniecore.gui.tooltip.tank.accepts=Принимается: %s < Descriptions used for effects in the registry > diff --git a/src/main/resources/assets/genetics/lang/en_GB.lang b/src/main/resources/assets/genetics/lang/en_GB.lang index ad86e939..c950aaef 100644 --- a/src/main/resources/assets/genetics/lang/en_GB.lang +++ b/src/main/resources/assets/genetics/lang/en_GB.lang @@ -16,7 +16,6 @@ genetics.machine.machine.inoculator.info=The Inoculator uses serums to add genes genetics.machine.labMachine.genepool=Genepool genetics.machine.labMachine.genepool.info=The Genepool uses enzymes and ethanol to break down living things into DNA. All genetic information is lost and the source of the DNA is destroyed. - genetics.machine.labMachine.labMachine=Lab Stand genetics.machine.labMachine.analyser=Analyser @@ -26,6 +25,10 @@ genetics.machine.labMachine.incubator=Incubator genetics.machine.labMachine.incubator.info=The Incubator combines liquids and items and allows them to sit at an ideal temperature to encourage bacterial growth. genetics.machine.labMachine.acclimatiser=Acclimatiser +genetics.machine.acclimatiser.acclimatizingItems=Acclimatising Items +genetics.machine.acclimatiser.error.noIndividual=No Individual to Acclimatize +genetics.machine.acclimatiser.error.noAcclimatizingItems=No Acclimatizing Items +genetics.machine.acclimatiser.error.invalidAcclimatizingItems=Cannot Acclimatize this individual with these items genetics.machine.advMachine.splicer=Splicer genetics.machine.advMachine.splicer.info=The Splicer is an incredibly powerful machine to insert genes into individuals. It is fast, but needs insane amounts of power. diff --git a/src/main/resources/assets/genetics/lang/en_US.lang b/src/main/resources/assets/genetics/lang/en_US.lang index 7e49de52..5e69b7cd 100644 --- a/src/main/resources/assets/genetics/lang/en_US.lang +++ b/src/main/resources/assets/genetics/lang/en_US.lang @@ -16,7 +16,6 @@ genetics.machine.machine.inoculator.info=The Inoculator uses serums to add genes genetics.machine.labMachine.genepool=Genepool genetics.machine.labMachine.genepool.info=The Genepool uses enzymes and ethanol to break down living things into DNA. During this process, all genetic information is lost and the source of the DNA is destroyed. - genetics.machine.labMachine.labMachine=Lab Stand genetics.machine.labMachine.analyser=Analyser @@ -26,6 +25,10 @@ genetics.machine.labMachine.incubator=Incubator genetics.machine.labMachine.incubator.info=The Incubator combines liquids and items and allows them to sit at an ideal temperature to encourage bacterial growth. genetics.machine.labMachine.acclimatiser=Acclimatiser +genetics.machine.acclimatiser.acclimatizingItems=Acclimatizing Items +genetics.machine.acclimatiser.error.noIndividual=No Individual to Acclimatise +genetics.machine.acclimatiser.error.noAcclimatizingItems=No Acclimatising Items +genetics.machine.acclimatiser.error.invalidAcclimatizingItems=Cannot Acclimatise this individual with these items genetics.machine.advMachine.splicer=Splicer genetics.machine.advMachine.splicer.info=The Splicer is an incredibly powerful machine that is used to insert genes into individuals. This process is fast, but requires monumental amounts of power. diff --git a/src/main/resources/assets/genetics/lang/ru_RU.lang b/src/main/resources/assets/genetics/lang/ru_RU.lang index 37f8769d..7cd5b727 100644 --- a/src/main/resources/assets/genetics/lang/ru_RU.lang +++ b/src/main/resources/assets/genetics/lang/ru_RU.lang @@ -1,31 +1,34 @@ ################################################## ## Machines -genetics.machine.machine.isolator=Генетический Изолятор +genetics.machine.machine.isolator=Изолятор genetics.machine.machine.isolator.info=Изолятор извлекает случайный ген от пчелы, дерева или другого организма и копирует его в пустой пузырек сыворотки (empty sequence vial). Требуется Этанол для растворения и Фермент для извлечения ДНК. Полученная сыворотка с геном затем может быть усилена в Полимеризаторе и исследована в Секвенсоре. -genetics.machine.machine.sequencer=Генетический Секвенсор +genetics.machine.machine.sequencer=Секвенсор genetics.machine.machine.sequencer.info=Секвенсор предназначен для анализа новых генов, извлечённых из организмов. Секвенсор принимает неисследованную сыворотку и определяет, какие гены присутствуют в ней. В результате ген попадает в общую генетическую базу данных. Процесс занимает много времени и требует использования Флюорофора (жёлтый+оранжевый+светопыль) -genetics.machine.machine.polymeriser=Генетический Полимеризатор +genetics.machine.machine.polymeriser=Полимеризатор genetics.machine.machine.polymeriser.info=Полимеризатор усиливает (концентрирует) сыворотку с геном с помощью Сырой ДНК и Полимеризованной Бактерии. Эта операция обязательна перед использованием сыворотки в Инокуляторе или Секвенсоре и Сплайсере. Процесс может быть ускорен с помощью золотых самородков. -genetics.machine.machine.inoculator=Генетический Инокулятор +genetics.machine.machine.inoculator=Инокулятор genetics.machine.machine.inoculator.info=Инокулятор использует сыворотку для прививки новых генов. Процесс продолжителен и требует Бактерию Вектор, но на 100% успешен. -genetics.machine.labMachine.genepool=Генетический Экстрактор ДНК +genetics.machine.labMachine.genepool=Экстрактор ДНК genetics.machine.labMachine.genepool.info=Растворяет организмы с помощью Этанола и Фермента в Жидкую ДНК, которая нужна для работы некоторых генетических машин. Вся генетическая информация теряется и организм-источник ДНК разрушается. - genetics.machine.labMachine.labMachine=Лабораторная тумба -genetics.machine.labMachine.analyser=Генетический Анализатор +genetics.machine.labMachine.analyser=Анализатор genetics.machine.labMachine.analyser.info=Анализатор принимает организмы или сыворотку и анализирует их гены. Процесс требует Краситель для ДНК. Краситель для ДНК сделан из фиолетового красителя и светящейся пыли. -genetics.machine.labMachine.incubator=Генетический Инкубатор +genetics.machine.labMachine.incubator=Инкубатор genetics.machine.labMachine.incubator.info=В инкубаторе производятся большинство жидкостей и веществ мода "Генетика" по разным рецептам из жидких и твёрдых веществ. Рецепты: 1. Вода + Питательная Среда = Жидкая Питательная Среда; 2. Жидкая Питательная Среда + Пшеница = Бактерия; 3. Бактерия + Сахар = Фермент; 4. Бактерия + Костная Мука = Полимеризованная Бактерия; 5. Бактерия + Огненный Порошок = Бактерия Вектор. Также в инкубаторе можно из зародыша (личинки, гусеницы, пыльцы) вырастить взрослых особей (пчёлы, бабочки, деревья). Жидкая Питательная Среда + зародыш = взрослая особь. -genetics.machine.labMachine.acclimatiser=Генетический Акклиматизатор +genetics.machine.labMachine.acclimatiser=Акклиматизатор +genetics.machine.acclimatiser.acclimatizingItems=Катализаторы +genetics.machine.acclimatiser.error.noIndividual=Нет образцов для акклиматизации +genetics.machine.acclimatiser.error.noAcclimatizingItems=Отсутствуют катализаторы +genetics.machine.acclimatiser.error.invalidAcclimatizingItems=Невозможно акклиматизировать образец с этими катализаторами genetics.machine.labMachine.acclimatiser.info=Акклиматизатор изменяет гены, отвечающие за акклиматизацию. Диапазоны сухо-влажно и горячо-холодно могут быть расширены до максимальных. Требует катализаторы. Осушение - песок, увлажнение - вода, потепление - лава или огненный порошок, похолодание - лёд или снежок. Кислотность почвы - мульча или зола.