Compare commits

...
15 Commits
Author SHA1 Message Date
Algent 171c5b29f6 Improve compartment inventory and GUI performance (#109) 2026-08-03 14:56:47 +07:00
Jordan Rey b5ad490947 fix: multiple issues with genetics machines liquid storage (#103) 2026-07-29 16:37:33 +07:00
__felix__ 00051c4594 fix loader check for gt6 compat (#107) 2026-07-29 16:37:04 +07:00
Ranzu d913e245ed Implement ColorUtils (#106) 2026-07-20 01:25:22 -04:00
Ranzu f253dfc5dc Rename "Gingko" to "Ginkgo" (#105) 2026-07-18 15:41:11 +02:00
Arcadia_Blues 6582ea3e56 Fix unintentional item combining for blocks missing setHasSubtypes(true) (#98) 2026-06-25 04:31:30 +00:00
Martin Robertz bb96e7deae update+gradle+bs+deps 2026-06-23 16:32:55 +02:00
Pxx500andgithub-actions[bot] 7643d11e14 Fix fluids racing to registration (#99)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-23 13:18:28 +00:00
Matej Dipčár 4eb26e9d77 Fix ComponentTankContainer draining wrong fluid when specific fluid requested (#97) 2026-05-25 19:06:36 +02:00
Eldrinn-ElanteyandAlexdoru 2b1843b74d fix CraftGUI.render going null on GUI open/reopen (#96)
Co-authored-by: Alexdoru <[email protected]>
2026-05-22 14:30:15 +02:00
Alexdoru 0b312261db fix world client leak caused by static CraftGUI (#95) 2026-05-18 19:05:50 +02:00
tiffit bd0746583a Only send NEI keybinds when no widget is focused (#94) 2026-05-10 20:44:56 +02:00
Ranzu b4143fb0ef Fixed Compartment help tooltip display (#93) 2026-05-09 14:21:17 +02:00
77c47e9071 fix isolator consumption chance config source (#87)
Co-authored-by: Martin Robertz <[email protected]>
Co-authored-by: UltraProdigy <[email protected]>
2026-05-04 01:00:00 +00:00
Max Shen f27b66c53f Fix concurrent modification exception (#92) 2026-05-03 20:43:05 -04:00
40 changed files with 375 additions and 177 deletions

No files matched your search

+4 -4
View File
@@ -1,12 +1,12 @@
// Add your dependencies here
dependencies {
api('com.github.GTNewHorizons:ForestryMC:4.11.12:dev')
implementation('com.github.GTNewHorizons:GTNHLib:0.9.48:dev')
api('com.github.GTNewHorizons:ForestryMC:4.11.28:dev')
implementation('com.github.GTNewHorizons:GTNHLib:0.11.30:dev')
devOnlyNonPublishable('com.github.GTNewHorizons:NotEnoughItems:2.8.88-GTNH:dev')
devOnlyNonPublishable('com.github.GTNewHorizons:NotEnoughItems:2.8.105-GTNH:dev')
compileOnly('com.github.GTNewHorizons:BuildCraft:7.1.57:api')
compileOnly('com.github.GTNewHorizons:BuildCraft:7.1.61:api')
compileOnly('net.industrial-craft:industrialcraft-2:2.2.828-experimental:dev')
compileOnly("curse.maven:extrabiomesxl-60041:2273301")
}
+10 -10
View File
@@ -1,12 +1,12 @@
#This file is generated by updateDaemonJvm
toolchainUrl.FREE_BSD.AARCH64=https\://api.foojay.io/disco/v3.0/ids/1630f7ebef05444cb27a2709ea0249b3/redirect
toolchainUrl.FREE_BSD.X86_64=https\://api.foojay.io/disco/v3.0/ids/cd495626d2ee49a75447e3fdc6afb287/redirect
toolchainUrl.LINUX.AARCH64=https\://api.foojay.io/disco/v3.0/ids/1630f7ebef05444cb27a2709ea0249b3/redirect
toolchainUrl.LINUX.X86_64=https\://api.foojay.io/disco/v3.0/ids/cd495626d2ee49a75447e3fdc6afb287/redirect
toolchainUrl.MAC_OS.AARCH64=https\://api.foojay.io/disco/v3.0/ids/d4fd992c9557644e637ebe98263e0ae7/redirect
toolchainUrl.MAC_OS.X86_64=https\://api.foojay.io/disco/v3.0/ids/faa12903720d410b387cc69ccafb1a74/redirect
toolchainUrl.UNIX.AARCH64=https\://api.foojay.io/disco/v3.0/ids/1630f7ebef05444cb27a2709ea0249b3/redirect
toolchainUrl.UNIX.X86_64=https\://api.foojay.io/disco/v3.0/ids/cd495626d2ee49a75447e3fdc6afb287/redirect
toolchainUrl.WINDOWS.AARCH64=https\://api.foojay.io/disco/v3.0/ids/a4c09dd2e2d7079373d30e524bbc2829/redirect
toolchainUrl.WINDOWS.X86_64=https\://api.foojay.io/disco/v3.0/ids/8e1d9ee5d0f13e442218f6884a306da1/redirect
toolchainUrl.FREE_BSD.AARCH64=https\://api.foojay.io/disco/v3.0/ids/cf726b4a1c84b50457225f9bba6d7650/redirect
toolchainUrl.FREE_BSD.X86_64=https\://api.foojay.io/disco/v3.0/ids/fa1e318c287360478e3c83a9a3ef1007/redirect
toolchainUrl.LINUX.AARCH64=https\://api.foojay.io/disco/v3.0/ids/cf726b4a1c84b50457225f9bba6d7650/redirect
toolchainUrl.LINUX.X86_64=https\://api.foojay.io/disco/v3.0/ids/fa1e318c287360478e3c83a9a3ef1007/redirect
toolchainUrl.MAC_OS.AARCH64=https\://api.foojay.io/disco/v3.0/ids/c2dd35c9d0aaf0ba6ad0791320f99dfc/redirect
toolchainUrl.MAC_OS.X86_64=https\://api.foojay.io/disco/v3.0/ids/e5810bd7fd1f8a586644409d395a7e55/redirect
toolchainUrl.UNIX.AARCH64=https\://api.foojay.io/disco/v3.0/ids/cf726b4a1c84b50457225f9bba6d7650/redirect
toolchainUrl.UNIX.X86_64=https\://api.foojay.io/disco/v3.0/ids/fa1e318c287360478e3c83a9a3ef1007/redirect
toolchainUrl.WINDOWS.AARCH64=https\://api.foojay.io/disco/v3.0/ids/7b3c4877c0749019e6805bb61e421497/redirect
toolchainUrl.WINDOWS.X86_64=https\://api.foojay.io/disco/v3.0/ids/d76df094a9cbbabd3b08251f9e61444a/redirect
toolchainVersion=25
+1 -1
View File
@@ -17,5 +17,5 @@ pluginManagement {
}
plugins {
id 'com.gtnewhorizons.gtnhsettingsconvention' version '2.0.24'
id 'com.gtnewhorizons.gtnhsettingsconvention' version '2.0.26'
}
@@ -17,6 +17,8 @@ public class ItemMetadata extends ItemBlock {
public ItemMetadata(Block block) {
super(block);
setMaxDamage(0);
setHasSubtypes(true);
}
@Override
@@ -1,10 +1,7 @@
package binnie.core.craftgui;
import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Deque;
import java.util.List;
import java.util.ListIterator;
import org.lwjgl.input.Mouse;
@@ -168,17 +165,14 @@ public abstract class TopLevelWidget extends Widget implements ITopLevelWidget {
}
public Deque<IWidget> calculateMousedOverWidgets() {
Deque<IWidget> list = new ArrayDeque<>();
for (IWidget widget : getQueuedWidgets(this)) {
if (widget.calculateIsMouseOver()) {
list.addLast(widget);
}
}
return list;
Deque<IWidget> widgets = new ArrayDeque<>();
addMousedOverWidgets(this, widgets);
return widgets;
}
private Collection<IWidget> getQueuedWidgets(IWidget widget) {
List<IWidget> widgets = new ArrayList<>();
private void addMousedOverWidgets(IWidget widget, Deque<IWidget> widgets) {
if (!widget.isVisible()) return;
boolean addChildren = true;
if (widget.isCroppedWidget()) {
addChildren = widget.getCroppedZone().contains(widget.getCropWidget().getRelativeMousePosition());
@@ -188,11 +182,12 @@ public abstract class TopLevelWidget extends Widget implements ITopLevelWidget {
ListIterator<IWidget> li = widget.getWidgets().listIterator(widget.getWidgets().size());
while (li.hasPrevious()) {
IWidget child = li.previous();
widgets.addAll(getQueuedWidgets(child));
addMousedOverWidgets(child, widgets);
}
}
widgets.add(widget);
return widgets;
if (widget.calculateIsMouseOver()) {
widgets.addLast(widget);
}
}
@Override
@@ -306,17 +306,22 @@ public class Widget implements IWidget {
}
onUpdateClient();
List<IWidget> deletedWidgets = new ArrayList<>();
List<IWidget> deletedWidgets = null;
for (IWidget widget : getWidgets()) {
if (widget.hasAttribute(WidgetAttribute.NEEDS_DELETION)) {
if (deletedWidgets == null) {
deletedWidgets = new ArrayList<>();
}
deletedWidgets.add(widget);
} else {
widget.updateClient();
}
}
for (IWidget widget : deletedWidgets) {
deleteChild(widget);
if (deletedWidgets != null) {
for (IWidget widget : deletedWidgets) {
deleteChild(widget);
}
}
}
@@ -188,7 +188,9 @@ public class WindowFieldKit extends Window {
glassOffsetX *= 1.0f - analyseProgress;
glassOffsetY += glassVY;
glassOffsetY *= 1.0f - analyseProgress;
GlassControl.setOffset(new IPoint(glassOffsetX, glassOffsetY));
if (GlassControl != null) {
GlassControl.setOffset(new IPoint(glassOffsetX, glassOffsetY));
}
}
private void refreshSpecies() {
@@ -201,22 +201,22 @@ public class ContainerCraftGUI extends Container {
Slot shiftClickedSlot = inventorySlots.get(index);
ItemStack itemstack = null;
if (shiftClickedSlot.getHasStack()) {
itemstack = shiftClickedSlot.getStack().copy();
itemstack = shiftClickedSlot.getStack();
}
IInventory playerInventory = player.inventory;
IInventory entityInventory = window.getInventory();
IInventory windowInventory = window.getWindowInventory();
IInventory fromPlayer = (entityInventory == null) ? windowInventory : entityInventory;
int[] target = new int[36];
for (int i = 0; i < target.length; ++i) {
target[i] = i;
}
TransferRequest request;
if (shiftClickedSlot.inventory == playerInventory) {
request = new TransferRequest(itemstack, fromPlayer).setOrigin(shiftClickedSlot.inventory);
} else {
int[] target = new int[36];
for (int i = 0; i < target.length; ++i) {
target[i] = i;
}
request = new TransferRequest(itemstack, playerInventory).setOrigin(shiftClickedSlot.inventory)
.setTargetSlots(target);
}
@@ -234,7 +234,7 @@ public class ContainerCraftGUI extends Container {
ItemStack heldItem = player.inventory.getItemStack().copy();
IInventory entityInventory = window.getInventory();
heldItem = new TransferRequest(heldItem, entityInventory).setOrigin(player.inventory).setTargetSlots(new int[0])
.setTargetTanks(new int[] { slotID }).transfer(true);
.setTargetTanks(new int[] { slotID }).dropOverflow(player).transfer(true);
player.inventory.setItemStack(heldItem);
@@ -246,7 +246,14 @@ public class ContainerCraftGUI extends Container {
}
public void handleNBT(Side side, EntityPlayer player, NBTTagCompound action) {
if (handleNBTAction(side, player, action)) {
sendContainerContents();
}
}
private boolean handleNBTAction(Side side, EntityPlayer player, NBTTagCompound action) {
final String actionType = action.getString(ACTION_TYPE);
boolean slotRegistered = false;
if (side == Side.SERVER) {
switch (actionType) {
@@ -256,11 +263,7 @@ public class ContainerCraftGUI extends Container {
final int slotIndex = action.getShort(SLOT_INDEX);
final int slotNumber = action.getShort(SLOT_NUMBER);
createSlot(InventoryType.values()[slotType % 4], slotIndex, slotNumber);
for (ICrafting crafterObject : crafters) {
crafterObject.sendContainerAndContentsToPlayer(this, getInventory());
}
slotRegistered = createSlot(InventoryType.values()[slotType % 4], slotIndex, slotNumber);
}
}
}
@@ -275,6 +278,7 @@ public class ContainerCraftGUI extends Container {
if (actionType.contains(TANK_UPDATE)) onTankUpdate(action);
}
}
return slotRegistered;
}
@Override
@@ -307,8 +311,7 @@ public class ContainerCraftGUI extends Container {
if (machineSync != null) machineSync.sendGuiNBT(syncedNBT);
Map<String, NBTTagCompound> sentThisTime = new HashMap<>();
NBTTagList actions = new NBTTagList();
NBTTagList actions = null;
for (Map.Entry<String, NBTTagCompound> entry : syncedNBT.entrySet()) {
final String actionType = entry.getKey();
@@ -319,10 +322,16 @@ public class ContainerCraftGUI extends Container {
if (action.equals(actionPrev)) continue;
if (actions == null) {
actions = new NBTTagList();
}
actions.appendTag(action);
sentThisTime.put(actionType, action);
sentNBT.put(actionType, action);
}
syncedNBT.clear();
if (actions == null) return;
NBTTagCompound actionsBatch = new NBTTagCompound();
actionsBatch.setString(ACTION_TYPE, ACTION_BATCH);
actionsBatch.setTag(ACTIONS, actions);
@@ -333,9 +342,6 @@ public class ContainerCraftGUI extends Container {
BinnieCore.proxy.sendToPlayer(packet, playerMP);
}
}
sentNBT.putAll(sentThisTime);
syncedNBT.clear();
}
private NBTTagCompound createErrorNBT(IErrorStateSource error) {
@@ -486,19 +492,34 @@ public class ContainerCraftGUI extends Container {
}
public void receiveNBT(Side side, EntityPlayer player, NBTTagCompound action) {
if (receiveNBTAction(side, player, action)) {
sendContainerContents();
}
}
private boolean receiveNBTAction(Side side, EntityPlayer player, NBTTagCompound action) {
String actionType = action.getString(ACTION_TYPE);
if (actionType.equals(ACTION_BATCH)) {
boolean slotRegistered = false;
NBTTagList actionsBatch = action.getTagList(ACTIONS, TAG_COMPOUND);
for (int i = 0; i < actionsBatch.tagCount(); i++) {
receiveNBT(side, player, actionsBatch.getCompoundTagAt(i));
slotRegistered |= receiveNBTAction(side, player, actionsBatch.getCompoundTagAt(i));
}
return;
return slotRegistered;
}
handleNBT(side, player, action);
boolean slotRegistered = handleNBTAction(side, player, action);
window.receiveGuiNBT(getSide(), player, actionType, action);
INetwork.ReceiveGuiNBT machine = Machine.getInterface(INetwork.ReceiveGuiNBT.class, window.getInventory());
if (machine == null) return;
machine.receiveGuiNBT(getSide(), player, actionType, action);
if (machine != null) {
machine.receiveGuiNBT(getSide(), player, actionType, action);
}
return slotRegistered;
}
private void sendContainerContents() {
for (ICrafting crafter : crafters) {
crafter.sendContainerAndContentsToPlayer(this, getInventory());
}
}
public Slot getOrCreateSlot(InventoryType inventoryType, int slotIndex) {
@@ -522,13 +543,15 @@ public class ContainerCraftGUI extends Container {
};
}
private void createSlot(InventoryType type, int index, int slotNumber) {
if (inventorySlots.get(slotNumber) != null) return;
private boolean createSlot(InventoryType type, int index, int slotNumber) {
if (inventorySlots.get(slotNumber) != null) return false;
IInventory inventory = getInventory(type);
Slot slot = new CustomSlot(inventory, index);
slot.slotNumber = slotNumber;
inventorySlots.add(slotNumber, slot);
inventoryItemStacks.add(slotNumber, null);
ItemStack stack = slot.getStack();
inventoryItemStacks.add(slotNumber, stack == null ? null : stack.copy());
return true;
}
}
@@ -90,6 +90,7 @@ public class GuiCraftGUI extends GuiContainer {
zLevel = 10.0f;
GuiScreen.itemRender.zLevel = zLevel;
GL11.glClear(GL11.GL_DEPTH_BUFFER_BIT);
window.render();
RenderHelper.enableGUIStandardItemLighting();
@@ -102,7 +103,7 @@ public class GuiCraftGUI extends GuiContainer {
InventoryPlayer playerInventory = mc.thePlayer.inventory;
draggedItem = playerInventory.getItemStack();
if (draggedItem != null) {
renderItem(new IPoint(mouseX - 8, mouseY - 8), draggedItem, false);
GL11.glTranslatef(0.0f, 0.0f, 200.0f);
renderItem(new IPoint(mouseX - 8, mouseY - 8), draggedItem, false);
}
GL11.glDisable(32826); // GL_RESCALE_NORMAL_EXT
@@ -116,7 +117,6 @@ public class GuiCraftGUI extends GuiContainer {
} else {
tooltip.setType(Tooltip.Type.STANDARD);
window.getTooltip(tooltip);
NEIHook.renderToolTips(mouseX, mouseY);
}
if (tooltip.exists()) {
@@ -240,12 +240,16 @@ public class GuiCraftGUI extends GuiContainer {
@Override
protected void keyTyped(char c, int key) {
NEIHook.lastKeyTyped(key, c);
boolean noFocusedWidget = window.getFocusedWidget() == null;
if (key == 1 || (key == mc.gameSettings.keyBindInventory.getKeyCode() && window.getFocusedWidget() == null)) {
if (noFocusedWidget) {
NEIHook.lastKeyTyped(key, c);
}
if (key == 1 || (key == mc.gameSettings.keyBindInventory.getKeyCode() && noFocusedWidget)) {
mc.thePlayer.closeScreen();
}
IWidget origin = (window.getFocusedWidget() == null) ? window : window.getFocusedWidget();
IWidget origin = noFocusedWidget ? window : window.getFocusedWidget();
window.callEvent(new EventKey.Down(origin, c, key));
}
@@ -444,7 +448,6 @@ public class GuiCraftGUI extends GuiContainer {
}
GuiScreen.itemRender.renderItemOverlayIntoGUI(font, mc.renderEngine, item, (int) pos.x(), (int) pos.y(), null);
GL11.glClear(256);
RenderHelper.disableStandardItemLighting();
GL11.glPopAttrib();
}
@@ -10,6 +10,7 @@ import java.util.Map;
class ListMap<T> implements List<T> {
private final LinkedHashMap<Integer, T> map;
private int size;
ListMap() {
map = new LinkedHashMap<>();
@@ -17,13 +18,7 @@ class ListMap<T> implements List<T> {
@Override
public int size() {
int i = -1;
for (int k : map.keySet()) {
if (k > i) {
i = k;
}
}
return i + 1;
return size;
}
@Override
@@ -93,6 +88,7 @@ class ListMap<T> implements List<T> {
@Override
public void clear() {
map.clear();
size = 0;
}
@Override
@@ -103,12 +99,14 @@ class ListMap<T> implements List<T> {
@Override
public T set(int index, T element) {
map.put(index, element);
size = Math.max(size, index + 1);
return element;
}
@Override
public void add(int index, T element) {
map.put(index, element);
size = Math.max(size, index + 1);
}
@Override
@@ -53,6 +53,7 @@ public abstract class Window extends TopLevelWidget implements INetwork.ReceiveG
protected float titleButtonLeft;
protected float titleButtonRight;
private GuiCraftGUI gui;
private Renderer renderer;
private final ContainerCraftGUI container;
private final WindowInventory windowInventory;
private ControlText title;
@@ -83,8 +84,8 @@ public abstract class Window extends TopLevelWidget implements INetwork.ReceiveG
ControlSlot.highlighting.put(h, new ArrayList<>());
}
CraftGUI.render = new Renderer(gui);
CraftGUI.render.stylesheet(StyleSheetManager.getDefault());
renderer = new Renderer(gui);
renderer.stylesheet(StyleSheetManager.getDefault());
titleButtonLeft = -14.0f;
if (showHelpButton()) {
@@ -195,6 +196,9 @@ public abstract class Window extends TopLevelWidget implements INetwork.ReceiveG
}
public void initGui() {
CraftGUI.render = renderer;
if (hasBeenInitialised) {
return;
}
@@ -267,7 +271,9 @@ public abstract class Window extends TopLevelWidget implements INetwork.ReceiveG
entityInventory = inventory;
}
public void onClose() {}
public void onClose() {
CraftGUI.render = null;
}
public boolean isServer() {
return !isClient();
@@ -1,7 +1,9 @@
package binnie.core.liquid;
import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Set;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraftforge.fluids.Fluid;
@@ -9,32 +11,62 @@ import net.minecraftforge.fluids.FluidRegistry;
import net.minecraftforge.fluids.FluidStack;
import binnie.core.ManagerBase;
import cpw.mods.fml.common.FMLLog;
import cpw.mods.fml.common.Loader;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
public class ManagerLiquid extends ManagerBase {
private static final Set<String> EXTERNAL_FLUIDS = new HashSet<>();
static {
EXTERNAL_FLUIDS.add("liquidnitrogen");
}
private static boolean isExternalFluid(String identifier) {
return EXTERNAL_FLUIDS.contains(identifier) && Loader.isModLoaded("gregtech_nh");
}
public Map<String, IFluidType> fluids;
private final Set<String> ownedFluids;
public ManagerLiquid() {
fluids = new LinkedHashMap<>();
ownedFluids = new HashSet<>();
}
public void createLiquids(IFluidType[] liquids, int startID) {
for (IFluidType liquid : liquids) {
BinnieFluid fluid = createLiquid(liquid, startID++);
if (fluid == null) {
String identifier = liquid.getIdentifier().toLowerCase();
Fluid fluid = createOrGetLiquid(liquid, startID++);
if (fluid == null && !isExternalFluid(identifier)) {
throw new RuntimeException("Liquid registered incorrectly - " + liquid.getIdentifier());
}
}
}
public BinnieFluid createLiquid(IFluidType fluid, int id) {
fluids.put(fluid.getIdentifier().toLowerCase(), fluid);
BinnieFluid binnieFluid = new BinnieFluid(fluid);
FluidRegistry.registerFluid(binnieFluid);
Fluid registeredFluid = createOrGetLiquid(fluid, id);
return (registeredFluid instanceof BinnieFluid) ? (BinnieFluid) registeredFluid : null;
}
private Fluid createOrGetLiquid(IFluidType fluid, int id) {
String identifier = fluid.getIdentifier().toLowerCase();
fluids.put(identifier, fluid);
Fluid registeredFluid = FluidRegistry.getFluid(identifier);
if (registeredFluid == null && !isExternalFluid(identifier)) {
BinnieFluid binnieFluid = new BinnieFluid(fluid);
FluidRegistry.registerFluid(binnieFluid);
registeredFluid = FluidRegistry.getFluid(identifier);
ownedFluids.add(identifier);
} else if (registeredFluid == null) {
FMLLog.warning(
"[Binnie] External liquid %s is not registered yet. Waiting for the owning mod to register it before postInit.",
identifier);
}
ItemFluidContainer.registerFluid(fluid, id);
return binnieFluid;
return registeredFluid;
}
public FluidStack getLiquidStack(String name, int amount) {
@@ -44,18 +76,26 @@ public class ManagerLiquid extends ManagerBase {
@SideOnly(Side.CLIENT)
public void reloadIcons(IIconRegister register) {
for (IFluidType type : fluids.values()) {
Fluid fluid = getLiquidStack(type.getIdentifier(), 1).getFluid();
String identifier = type.getIdentifier().toLowerCase();
FluidStack stack = getLiquidStack(identifier, 1);
Fluid fluid = stack == null ? null : stack.getFluid();
type.registerIcon(register);
if (fluid == null) {
throw new RuntimeException("[Binnie] Liquid not registered properly - " + type.getIdentifier());
}
fluid.setIcons(type.getIcon());
if (ownedFluids.contains(identifier)) {
fluid.setIcons(type.getIcon());
}
}
}
@Override
public void postInit() {
for (IFluidType fluid : fluids.values()) {
String identifier = fluid.getIdentifier().toLowerCase();
if (isExternalFluid(identifier) && FluidRegistry.getFluid(identifier) == null) {
throw new RuntimeException("[Binnie] External liquid not registered - " + identifier);
}
for (FluidContainer container : FluidContainer.values()) {
if (container.isActive() && fluid.canPlaceIn(container)) {
container.registerContainerData(fluid);
@@ -164,7 +164,7 @@ public class ComponentTankContainer extends MachineComponent implements ITankMac
@Override
public FluidStack drain(ForgeDirection from, FluidStack resource, boolean doDrain) {
int index = getTankIndexToDrain(from, null);
int index = getTankIndexToDrain(from, resource);
if (!tanks.containsKey(index)) {
return null;
}
@@ -17,6 +17,7 @@ class ComponentCompartmentInventory extends ComponentInventorySlots implements I
private final int numberOfTabs;
private final int slotsPerPage;
private final Map<Integer, CompartmentTab> tabs;
private NBTTagCompound cachedGuiNBT;
public ComponentCompartmentInventory(IMachine machine, int sections) {
this(machine, sections, 4);
@@ -51,21 +52,24 @@ class ComponentCompartmentInventory extends ComponentInventorySlots implements I
public CompartmentTab getTab(int i) {
if (!tabs.containsKey(i)) {
tabs.put(i, new CompartmentTab(i));
cachedGuiNBT = null;
}
return tabs.get(i);
}
@Override
public void sendGuiNBT(Map<String, NBTTagCompound> nbts) {
NBTTagList list = new NBTTagList();
for (int i = 0; i < numberOfTabs; ++i) {
NBTTagCompound nbt2 = new NBTTagCompound();
getTab(i).writeToNBT(nbt2);
list.appendTag(nbt2);
if (cachedGuiNBT == null) {
NBTTagList list = new NBTTagList();
for (int i = 0; i < numberOfTabs; ++i) {
NBTTagCompound tabNBT = new NBTTagCompound();
getTab(i).writeToNBT(tabNBT);
list.appendTag(tabNBT);
}
cachedGuiNBT = new NBTTagCompound();
cachedGuiNBT.setTag("tabs", list);
}
NBTTagCompound tag = new NBTTagCompound();
tag.setTag("tabs", list);
nbts.put("comp-tabs", tag);
nbts.put("comp-tabs", cachedGuiNBT);
}
@Override
@@ -78,11 +82,13 @@ class ComponentCompartmentInventory extends ComponentInventorySlots implements I
tab.readFromNBT(tag);
tabs.put(tab.getId(), tab);
}
cachedGuiNBT = null;
}
if (name.equals("comp-change-tab")) {
CompartmentTab tab2 = new CompartmentTab(0);
tab2.readFromNBT(nbt);
tabs.put(tab2.getId(), tab2);
cachedGuiNBT = null;
getMachine().getTileEntity().markDirty();
}
}
@@ -97,6 +103,7 @@ class ComponentCompartmentInventory extends ComponentInventorySlots implements I
tab.readFromNBT(tag);
tabs.put(tab.getId(), tab);
}
cachedGuiNBT = null;
}
@Override
@@ -173,6 +173,7 @@ public class WindowCompartment extends WindowMachine implements IWindowAffectsSh
}
CraftGUIUtil.linkWidgets(tab, compartmentPages);
int i = 0;
final NBTTagList actions = new NBTTagList();
for (int p2 = 0; p2 < inv.getTabNumber(); ++p2) {
ControlPage thisPage = page[p2];
Panel panel = new Panel(thisPage, 0.0f, 0.0f, thisPage.w(), thisPage.h(), MinecraftGUI.PanelType.Black) {
@@ -191,11 +192,10 @@ public class WindowCompartment extends WindowMachine implements IWindowAffectsSh
slotsIDs[k] = i++;
}
final NBTTagList actions = new NBTTagList();
new ControlSlotArray(thisPage, 8, 8, inv.getPageSize() / 5, 5)
.create(actions, InventoryType.Machine, slotsIDs);
MessageCraftGUI.sendToServer(actions);
}
MessageCraftGUI.sendToServer(actions);
x += compartmentPageWidth;
if (tabs2.length > 0) {
ControlTabBar<Integer> tab2 = new ControlTabBar<Integer>(
@@ -256,8 +256,8 @@ public class WindowCompartment extends WindowMachine implements IWindowAffectsSh
ControlSlide slide = new ControlSlide(this, 0.0f, 134.0f, 136.0f, 92.0f, Position.LEFT);
slide.setLabel(I18N.localise("binniecore.machine.storage.tab.properties"));
slide.setSlide(false);
slide.addHelp(I18N.localise("binniecore.machine.storage.tooltip.properties"));
slide.addHelp(I18N.localise("binniecore.machine.storage.tooltip.properties.desc"));
slide.addHelp(I18N.localise("binniecore.machine.storage.tab.properties"));
slide.addHelp(I18N.localise("binniecore.machine.storage.tab.properties.desc"));
Panel tabPropertyPanel = new Panel(slide, 16.0f, 8.0f, 112.0f, 76.0f, MinecraftGUI.PanelType.Gray);
int y2 = 4;
new ControlText(tabPropertyPanel, new IPoint(4.0f, y2), I18N.localise("binniecore.machine.storage.tab.name"));
@@ -3,6 +3,7 @@ package binnie.core.machines.transfer;
import java.util.ArrayList;
import java.util.List;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.IInventory;
import net.minecraft.item.ItemStack;
import net.minecraftforge.fluids.FluidContainerRegistry;
@@ -25,23 +26,20 @@ public class TransferRequest {
private int[] targetTanks;
private boolean transferLiquids;
private boolean ignoreReadOnly;
private final List<TransferSlot> insertedSlots;
private final List<Integer> insertedTanks;
private EntityPlayer overflowPlayer;
private List<TransferSlot> insertedSlots;
private List<Integer> insertedTanks;
public TransferRequest(ItemStack toTransfer, IInventory destination) {
itemToTransfer = null;
returnItem = null;
targetSlots = new int[0];
targetSlots = null;
targetTanks = new int[0];
transferLiquids = true;
ignoreReadOnly = false;
insertedSlots = new ArrayList<>();
insertedTanks = new ArrayList<>();
int[] target = new int[destination.getSizeInventory()];
for (int i = 0; i < target.length; ++i) {
target[i] = i;
}
overflowPlayer = null;
insertedSlots = null;
insertedTanks = null;
int[] targetTanks = new int[0];
if (destination instanceof ITankMachine) {
@@ -58,7 +56,6 @@ public class TransferRequest {
setOrigin(null);
setDestination(destination);
setTargetSlots(target);
setTargetTanks(targetTanks);
transferLiquids = true;
}
@@ -95,59 +92,71 @@ public class TransferRequest {
return this;
}
public TransferRequest dropOverflow(EntityPlayer player) {
overflowPlayer = player;
return this;
}
public ItemStack getReturnItem() {
return returnItem;
}
public ItemStack transfer(boolean doAdd) {
ItemStack item = returnItem;
ItemStack item = doAdd || returnItem == null ? returnItem : returnItem.copy();
if (item == null || destination == null) {
return null;
}
if (transferLiquids && destination instanceof ITankMachine) {
for (int tankID : targetTanks) {
ItemStack itemBeforeTransfer = item.copy();
item = transferToTank(item, origin, (ITankMachine) destination, tankID, doAdd);
if (item != null) {
item = transferFromTank(item, origin, (ITankMachine) destination, tankID, doAdd);
if (item == null || !ItemStack.areItemStacksEqual(item, itemBeforeTransfer)) {
break;
}
item = transferFromTank(item, origin, (ITankMachine) destination, tankID, doAdd);
if (item == null || !ItemStack.areItemStacksEqual(item, itemBeforeTransfer)) {
break;
}
}
}
// TODO simplify
if (item != null) {
for (int slot : targetSlots) {
int[] slots = getTargetSlots();
for (int slot : slots) {
if (destination.isItemValidForSlot(slot, item) || ignoreReadOnly) {
if (!(destination instanceof IInventorySlots)
|| ((IInventorySlots) destination).getSlot(slot) == null
|| !((IInventorySlots) destination).getSlot(slot).isRecipe()) {
if (destination.getStackInSlot(slot) != null) {
if (item.isStackable() && destination.getInventoryStackLimit() > 1) {
ItemStack merged = destination.getStackInSlot(slot).copy();
ItemStack[] newStacks = mergeStacks(item.copy(), merged.copy());
item = newStacks[0];
if (!areItemsEqual(merged, newStacks[1])) {
insertedSlots.add(new TransferSlot(slot, destination));
}
ItemStack merged = destination.getStackInSlot(slot);
if (merged != null && item.isStackable()
&& destination.getInventoryStackLimit() > 1
&& areItemsEqual(item, merged)) {
int amount = Math.min(item.stackSize, merged.getMaxStackSize() - merged.stackSize);
if (amount > 0) {
getInsertedSlots().add(new TransferSlot(slot, destination));
if (doAdd) {
destination.setInventorySlotContents(slot, newStacks[1]);
}
if (item == null) {
return null;
ItemStack newStack = merged.copy();
newStack.stackSize += amount;
destination.setInventorySlotContents(slot, newStack);
}
item.stackSize -= amount;
if (item.stackSize <= 0) return null;
}
}
}
}
}
for (int slot : targetSlots) {
for (int slot : slots) {
if (destination.isItemValidForSlot(slot, item) || ignoreReadOnly) {
if (!(destination instanceof IInventorySlots)
|| ((IInventorySlots) destination).getSlot(slot) == null
|| !((IInventorySlots) destination).getSlot(slot).isRecipe()) {
if (destination.getStackInSlot(slot) == null) {
insertedSlots.add(new TransferSlot(slot, destination));
getInsertedSlots().add(new TransferSlot(slot, destination));
if (doAdd) {
ItemStack movedStack = item.copy();
if (movedStack.stackSize > destination.getInventoryStackLimit()) {
@@ -200,11 +209,13 @@ public class TransferRequest {
private ItemStack transferToTankUsingFluidContainer(ItemStack item, IInventory origin, ITankMachine destination,
int tankID, boolean doAdd) {
if (item == null || !(item.getItem() instanceof IFluidContainerItem fluidContainer)) {
if (item == null || origin == null || !(item.getItem() instanceof IFluidContainerItem fluidContainer)) {
return item;
}
FluidStack fluid = fluidContainer.getFluid(item);
ItemStack singleContainer = item.copy();
singleContainer.stackSize = 1;
FluidStack fluid = fluidContainer.getFluid(singleContainer);
if (fluid == null) {
return item;
}
@@ -216,11 +227,22 @@ public class TransferRequest {
}
int maxFill = tank.fill(fluid, false);
FluidStack toTake = fluidContainer.drain(item, maxFill, true);
FluidStack toTake = fluidContainer.drain(singleContainer, maxFill, true);
if (toTake == null || toTake.amount <= 0) {
return item;
}
TransferRequest containerDump = createContainerDump(singleContainer, origin);
boolean dropContainer = containerDump.transfer(false) != null;
if (dropContainer && overflowPlayer == null) {
return item;
}
if (doAdd) {
tank.fill(toTake, true);
dumpContainer(singleContainer, containerDump, dropContainer);
}
return item;
return removeSingleContainer(item);
}
private ItemStack transferToTankUsingContainerData(ItemStack item, IInventory origin, ITankMachine destination,
@@ -305,24 +327,69 @@ public class TransferRequest {
private ItemStack transferFromTankUsingFluidContainer(ItemStack item, IInventory origin, ITankMachine destination,
int tankID, boolean doAdd) {
if (item == null || !(item.getItem() instanceof IFluidContainerItem fluidContainer)) {
if (item == null || origin == null || !(item.getItem() instanceof IFluidContainerItem fluidContainer)) {
return item;
}
ItemStack singleContainer = item.copy();
singleContainer.stackSize = 1;
IFluidTank tank = destination.getTanks()[tankID];
FluidStack fluid = tank.getFluid();
if (fluid == null) {
return item;
}
int amount = fluidContainer.fill(item, fluid, false);
amount = Math.min(amount, (tank.drain(amount, false) == null) ? 0 : tank.drain(amount, false).amount);
if (amount <= 0) {
int amount = fluidContainer.fill(singleContainer, fluid, false);
FluidStack drained = tank.drain(amount, false);
if (drained == null || drained.amount <= 0) {
return item;
}
fluidContainer.fill(item, tank.drain(amount, doAdd), doAdd);
return item;
int amountFilled = fluidContainer.fill(singleContainer, drained, true);
if (amountFilled <= 0) {
return item;
}
TransferRequest containerDump = createContainerDump(singleContainer, origin);
boolean dropContainer = containerDump.transfer(false) != null;
if (dropContainer && overflowPlayer == null) {
return item;
}
if (doAdd) {
tank.drain(amountFilled, true);
dumpContainer(singleContainer, containerDump, dropContainer);
}
return removeSingleContainer(item);
}
private TransferRequest createContainerDump(ItemStack container, IInventory origin) {
TransferRequest containerDump = new TransferRequest(container, origin).setTargetTanks(new int[0]);
if (overflowPlayer != null && origin == overflowPlayer.inventory) {
int[] mainInventorySlots = new int[overflowPlayer.inventory.mainInventory.length];
for (int i = 0; i < mainInventorySlots.length; ++i) {
mainInventorySlots[i] = i;
}
containerDump.setTargetSlots(mainInventorySlots);
}
return containerDump;
}
private void dumpContainer(ItemStack container, TransferRequest containerDump, boolean dropContainer) {
if (dropContainer) {
overflowPlayer.dropPlayerItemWithRandomChoice(container.copy(), false);
} else {
containerDump.transfer(true);
}
}
private static ItemStack removeSingleContainer(ItemStack item) {
if (item.stackSize <= 1) {
return null;
}
ItemStack leftover = item.copy();
--leftover.stackSize;
return leftover;
}
private ItemStack transferFromTankUsingContainerData(ItemStack item, IInventory origin, ITankMachine destination,
@@ -399,10 +466,16 @@ public class TransferRequest {
}
public List<TransferSlot> getInsertedSlots() {
if (insertedSlots == null) {
insertedSlots = new ArrayList<>();
}
return insertedSlots;
}
public List<Integer> getInsertedTanks() {
if (insertedTanks == null) {
insertedTanks = new ArrayList<>();
}
return insertedTanks;
}
@@ -419,6 +492,12 @@ public class TransferRequest {
}
public int[] getTargetSlots() {
if (targetSlots == null) {
targetSlots = new int[destination.getSizeInventory()];
for (int i = 0; i < targetSlots.length; ++i) {
targetSlots[i] = i;
}
}
return targetSlots;
}
@@ -58,7 +58,7 @@ public interface ILogType {
Rosewood("rosewood", 0x998666, PlankType.ExtraTreePlanks.Rosewood),
Purpleheart("purpleheart", 0x9392a2, PlankType.ExtraTreePlanks.Purpleheart),
Iroko("iroko", 0x605c5b, PlankType.ExtraTreePlanks.Iroko),
Gingko("gingko", 0xadae9c, PlankType.ExtraTreePlanks.Gingko),
Ginkgo("ginkgo", 0xadae9c, PlankType.ExtraTreePlanks.Ginkgo),
Eucalyptus("eucalyptus", 0xeadeda, PlankType.ExtraTreePlanks.Eucalyptus),
Eucalyptus2("eucalyptus", 0x867e65, PlankType.ExtraTreePlanks.Eucalyptus),
Box("box", 0xab6f57, PlankType.ExtraTreePlanks.Box),
@@ -22,8 +22,6 @@ public class ItemETSlab extends ItemMetadata {
theHalfSlab = (BlockETSlab) ExtraTrees.blockSlab;
doubleSlab = (BlockETSlab) ExtraTrees.blockDoubleSlab;
isFullBlock = (block != theHalfSlab);
setMaxDamage(0);
setHasSubtypes(true);
}
@Override
@@ -19,6 +19,8 @@ public class ItemETStairs extends ItemBlock {
super(block);
setCreativeTab(CreativeTabs.tabBlock);
setUnlocalizedName("stairs");
setMaxDamage(0);
setHasSubtypes(true);
}
@Override
@@ -67,7 +67,7 @@ public class PlankType {
Olive(0xb0ad88),
Sweetgum(0xd59658),
Rosewood(0x761500),
Gingko(0xf4e7ba),
Ginkgo(0xf4e7ba),
PinkIvory(0xec8ca0);
/**
@@ -69,7 +69,7 @@ public enum ExtraTreeFruitGene implements IAlleleFruit, IFruitProvider {
Acorn(6, 0x72b226, 0xad6a1d, FruitSprite.Tiny),
Elderberry(9, 0x71975d, 0x515b43, FruitSprite.Tiny),
Olive(9, 0x879e35, 0x62572a, FruitSprite.Small),
GingkoNut(7, 0x8c975b, 0xe5daad, FruitSprite.Tiny),
GinkgoNut(7, 0x8c975b, 0xe5daad, FruitSprite.Tiny),
Coffee(8, 0x716d1d, 0xf84f66, FruitSprite.Tiny),
Pear(10, 0x9f8f51, 0x9fd551, FruitSprite.Pear),
OsangeOsange(10, 0x979752, 0xa2bf27, FruitSprite.Larger),
@@ -205,8 +205,8 @@ public enum ExtraTreeFruitGene implements IAlleleFruit, IFruitProvider {
ExtraTreeFruitGene.Elderberry.setFamily(familyPrune);
ExtraTreeFruitGene.Olive.addProduct(Food.Olive.get(1), 1.0f);
ExtraTreeFruitGene.Olive.setFamily(familyPrune);
ExtraTreeFruitGene.GingkoNut.addProduct(Food.GingkoNut.get(1), 1.0f);
ExtraTreeFruitGene.GingkoNut.setFamily(familyNuts);
ExtraTreeFruitGene.GinkgoNut.addProduct(Food.GinkgoNut.get(1), 1.0f);
ExtraTreeFruitGene.GinkgoNut.setFamily(familyNuts);
ExtraTreeFruitGene.Coffee.addProduct(Food.Coffee.get(1), 1.0f);
ExtraTreeFruitGene.Coffee.setFamily(familyJungle);
ExtraTreeFruitGene.Pear.addProduct(Food.Pear.get(1), 1.0f);
@@ -125,7 +125,7 @@ public class ExtraTreeMutation implements ITreeMutation {
new ExtraTreeMutation(ExtraTreeSpecies.Brazilwood, getVanilla("Kapok"), ExtraTreeSpecies.Purpleheart, 10);
new ExtraTreeMutation(getVanilla("Ebony"), getVanilla("Teak"), ExtraTreeSpecies.Rosewood, 10);
new ExtraTreeMutation(ExtraTreeSpecies.Rosewood, getVanilla("Kapok"), ExtraTreeSpecies.Logwood, 10);
new ExtraTreeMutation(getVanilla("Wenge"), getVanilla("Lime"), ExtraTreeSpecies.Gingko, 10);
new ExtraTreeMutation(getVanilla("Wenge"), getVanilla("Lime"), ExtraTreeSpecies.Ginkgo, 10);
new ExtraTreeMutation(ExtraTreeSpecies.Beech, getVanilla("Jungle"), ExtraTreeSpecies.Brazilnut, 10);
new ExtraTreeMutation(getVanilla("Balsa"), getVanilla("Jungle"), ExtraTreeSpecies.RoseGum, 10);
new ExtraTreeMutation(ExtraTreeSpecies.RoseGum, getVanilla("Mahogony"), ExtraTreeSpecies.SwampGum, 10);
@@ -165,8 +165,8 @@ public class ExtraTreeMutation implements ITreeMutation {
new ExtraTreeMutation(ExtraTreeSpecies.Allspice, ExtraTreeSpecies.Clove, ExtraTreeSpecies.StarAnise, 10);
new ExtraTreeMutation(getVanilla("Jungle"), ExtraTreeSpecies.Orange, ExtraTreeSpecies.Mango, 10);
new ExtraTreeMutation(ExtraTreeSpecies.StarAnise, ExtraTreeSpecies.Mango, ExtraTreeSpecies.Starfruit, 10);
new ExtraTreeMutation(ExtraTreeSpecies.Hazel, ExtraTreeSpecies.Gingko, ExtraTreeSpecies.Candlenut, 10);
new ExtraTreeMutation(ExtraTreeSpecies.Hazel, ExtraTreeSpecies.Gingko, ExtraTreeSpecies.Chilli, 10);
new ExtraTreeMutation(ExtraTreeSpecies.Hazel, ExtraTreeSpecies.Ginkgo, ExtraTreeSpecies.Candlenut, 10);
new ExtraTreeMutation(ExtraTreeSpecies.Hazel, ExtraTreeSpecies.Ginkgo, ExtraTreeSpecies.Chilli, 10);
new ExtraTreeMutation(ExtraTreeSpecies.Hazel, ExtraTreeSpecies.Alder, ExtraTreeSpecies.DwarfHazel, 10);
}
@@ -187,7 +187,7 @@ public enum ExtraTreeSpecies implements IAlleleTreeSpecies, IIconProvider, IGerm
Rosewood("dalbergia", "latifolia", 0x879b22, ILogType.ExtraTreeLog.Rosewood, null, WorldGenRosewood.class),
Purpleheart("peltogyne", "spp.", 0x778f55, ILogType.ExtraTreeLog.Purpleheart, null, WorldGenPurpleheart.class),
Iroko("milicia", "excelsa", 0xafc86c, ILogType.ExtraTreeLog.Iroko, null, WorldGenIroko.class),
Gingko("ginkgo", "biloba", 0x719651, ILogType.ExtraTreeLog.Gingko, ExtraTreeFruitGene.GingkoNut,
Ginkgo("ginkgo", "biloba", 0x719651, ILogType.ExtraTreeLog.Ginkgo, ExtraTreeFruitGene.GinkgoNut,
WorldGenGingko.class),
Brazilnut("bertholletia", "excelsa", 0x7c8f7b, ILogType.VanillaLog.Jungle, ExtraTreeFruitGene.BrazilNut,
WorldGenBrazilNut.class),
@@ -548,7 +548,7 @@ public enum ExtraTreeSpecies implements IAlleleTreeSpecies, IIconProvider, IGerm
ExtraTreeSpecies.Iroko.addFamily(familyNuts).addFamily(familyJungle).setHeight(EnumAllele.Height.AVERAGE)
.setFertility(EnumAllele.Saplings.LOW);
ExtraTreeSpecies.Gingko.addFamily(familyNuts).addFamily(familyJungle).setLeafType(LeafType.JUNGLE)
ExtraTreeSpecies.Ginkgo.addFamily(familyNuts).addFamily(familyJungle).setLeafType(LeafType.JUNGLE)
.setHeight(EnumAllele.Height.LARGE).setYield(EnumAllele.Yield.LOWER)
.setSappiness(EnumAllele.Sappiness.LOW);
@@ -54,7 +54,7 @@ public enum Food implements IItemMisc {
Acorn(0),
Elderberry(1),
Olive(1),
GingkoNut(1),
GinkgoNut(1),
Coffee(0),
OsangeOrange(1),
Clove(0),
@@ -129,7 +129,7 @@ public enum Food implements IItemMisc {
Food.Acorn.ore("Acorn");
Food.Elderberry.ore("Elderberry");
Food.Olive.ore("Olive");
Food.GingkoNut.ore("GingkoNut");
Food.GinkgoNut.ore("GinkgoNut");
Food.Coffee.ore("Coffee");
Food.OsangeOrange.ore("OsangeOrange");
Food.Clove.ore("Clove");
@@ -84,7 +84,7 @@ public class ModuleItems implements IInitializable {
Food.Acorn.addOil(20, 50, 3);
Food.Elderberry.addJuice(10, 100, 5);
Food.Olive.addOil(20, 50, 3);
Food.GingkoNut.addOil(20, 50, 5);
Food.GinkgoNut.addOil(20, 50, 5);
Food.Coffee.addOil(15, 20, 2);
Food.OsangeOrange.addJuice(10, 300, 15);
Food.Clove.addOil(10, 25, 2);
@@ -54,7 +54,8 @@ public class Lumbermill {
private static Collection<ItemStack> getRecipeResult(ItemStack output) {
List<ItemStack> list = new ArrayList<>();
for (IRecipe iRecipe : CraftingManager.getInstance().getRecipeList()) {
List<IRecipe> iRecipes = new ArrayList<>(CraftingManager.getInstance().getRecipeList());
for (IRecipe iRecipe : iRecipes) {
if (iRecipe instanceof ShapelessRecipes shapeless) {
if (shapeless.recipeItems.size() != 1 || !(shapeless.recipeItems.get(0) instanceof ItemStack)) {
continue;
+15 -1
View File
@@ -1,5 +1,8 @@
package binnie.genetics;
import com.gtnewhorizon.gtnhlib.config.ConfigException;
import com.gtnewhorizon.gtnhlib.config.ConfigurationManager;
import binnie.core.AbstractMod;
import binnie.core.Tags;
import binnie.core.gui.IBinnieGUID;
@@ -8,6 +11,7 @@ import binnie.core.machines.MachineGroup;
import binnie.core.network.BinniePacketHandler;
import binnie.core.network.IPacketID;
import binnie.core.proxy.IProxyCore;
import binnie.genetics.config.GeneticsConfig;
import binnie.genetics.core.GeneticsGUI;
import binnie.genetics.core.GeneticsPacket;
import binnie.genetics.item.ItemAnalyst;
@@ -28,19 +32,29 @@ import cpw.mods.fml.common.event.FMLPostInitializationEvent;
import cpw.mods.fml.common.event.FMLPreInitializationEvent;
@Mod(
modid = "Genetics",
modid = Genetics.GENETICS_MODID,
name = "Genetics",
version = Tags.VERSION,
useMetadata = true,
dependencies = "after:BinnieCore")
public class Genetics extends AbstractMod {
public static final String GENETICS_MODID = "Genetics";
@Mod.Instance("Genetics")
public static Genetics instance;
@SidedProxy(clientSide = "binnie.genetics.proxy.ProxyClient", serverSide = "binnie.genetics.proxy.ProxyServer")
public static Proxy proxy;
static {
try {
ConfigurationManager.registerConfig(GeneticsConfig.class);
} catch (ConfigException e) {
throw new RuntimeException(e);
}
}
public static final String CHANNEL = "GEN";
public static ItemSerumArray itemSerumArray = null;
@@ -1,11 +1,11 @@
package binnie.extrabees.config;
package binnie.genetics.config;
import static binnie.extrabees.ExtraBees.EB_MODID;
import static binnie.genetics.Genetics.GENETICS_MODID;
import com.gtnewhorizon.gtnhlib.config.Config;
@Config(modid = EB_MODID)
public class EBConfigMachines {
@Config(modid = GENETICS_MODID)
public class GeneticsConfig {
@Config.Comment("Percentage chance of Isolator consuming bee. 0 never consumes, 1 always does.")
@Config.RangeFloat(min = 0f, max = 1f)
@@ -13,7 +13,7 @@ import binnie.core.machines.power.ComponentProcessSetCost;
import binnie.core.machines.power.ErrorState;
import binnie.core.machines.power.IProcess;
import binnie.core.util.I18N;
import binnie.extrabees.config.EBConfigMachines;
import binnie.genetics.config.GeneticsConfig;
import binnie.genetics.item.ItemSequence;
import forestry.api.genetics.AlleleManager;
import forestry.api.genetics.IAllele;
@@ -100,7 +100,7 @@ public class IsolatorComponentLogic extends ComponentProcessSetCost implements I
ItemStack serum = ItemSequence.create(gene);
getUtil().setStack(Isolator.SLOT_RESULT, serum);
getUtil().decreaseStack(Isolator.SLOT_SEQUENCER_VIAL, 1);
if (rand.nextFloat() < EBConfigMachines.isolatorConsumptionChance) {
if (rand.nextFloat() < GeneticsConfig.isolatorConsumptionChance) {
getUtil().decreaseStack(Isolator.SLOT_TARGET, 1);
}
getUtil().drainTank(Isolator.TANK_ETHANOL, (int) ethanolPerProcess);
@@ -11,6 +11,7 @@ import binnie.core.nei.RecipeHandlerBase;
import binnie.genetics.Genetics;
import binnie.genetics.item.GeneticsItems;
import binnie.genetics.item.ItemSerumArray;
import binnie.genetics.nei.helper.ColorUtils;
import codechicken.lib.gui.GuiDraw;
import codechicken.nei.ItemList;
import codechicken.nei.NEIServerUtils;
@@ -60,7 +61,7 @@ public class DatabaseRecipeHandler extends RecipeHandlerBase {
StatCollector.translateToLocalFormatted("genetics.nei.tip.databaseDesc"),
140);
for (int i = 0; i < desc.size(); i++) {
GuiDraw.drawStringC(desc.get(i), 88, 44 + 12 * (i - 1), 0xFFFFFF);
GuiDraw.drawStringC(desc.get(i), 88, 44 + 12 * (i - 1), ColorUtils.neiDisplayText.getColor());
}
}
@@ -13,6 +13,7 @@ import binnie.core.nei.PositionedFluidTank;
import binnie.core.nei.RecipeHandlerBase;
import binnie.genetics.api.IIncubatorRecipe;
import binnie.genetics.machine.incubator.Incubator;
import binnie.genetics.nei.helper.ColorUtils;
import codechicken.lib.gui.GuiDraw;
import codechicken.nei.NEIServerUtils;
import codechicken.nei.PositionedStack;
@@ -48,8 +49,16 @@ public class IncubatorRecipeHandler extends RecipeHandlerBase {
@Override
public void drawExtras(int recipe) {
this.drawProgressBar(75, 27, 176, 0, 24, 17, 40, 0);
GuiDraw.drawStringC(StatCollector.translateToLocal("genetics.nei.tip.loss"), 62, 5, 0xFFFFFF);
GuiDraw.drawStringC(((CachedIncubatorRecipe) arecipes.get(recipe)).lossChance, 62, 15, 0xFFFFFF);
GuiDraw.drawStringC(
StatCollector.translateToLocal("genetics.nei.tip.loss"),
62,
5,
ColorUtils.neiDisplayText.getColor());
GuiDraw.drawStringC(
((CachedIncubatorRecipe) arecipes.get(recipe)).lossChance,
62,
15,
ColorUtils.neiDisplayText.getColor());
}
@Override
@@ -0,0 +1,13 @@
package binnie.genetics.nei.helper;
import com.gtnewhorizon.gtnhlib.color.ColorResource;
public class ColorUtils {
private static final ColorResource.Factory color = new ColorResource.Factory("binniecore");
public static final ColorResource
// spotless:off
neiDisplayText = color.rgb("neiDisplayText", "0xFFFFFF");
// spotless:on
}
@@ -68,7 +68,7 @@ extratrees.block.planks.holly=Holly
extratrees.block.planks.olive=Olive
extratrees.block.planks.sweetgum=Sweetgum
extratrees.block.planks.rosewood=Rosewood
extratrees.block.planks.gingko=Gingko
extratrees.block.planks.ginkgo=Ginkgo
extratrees.block.planks.pinkivory=Pink Ivory
extratrees.block.planks.cherry=Cherry
extratrees.block.planks.banana=Banana
@@ -147,7 +147,7 @@ extratrees.block.planks.holly.desc=The whitest wood available, just avoid the po
extratrees.block.planks.olive.desc=Coloured in the same way as its fruits, an attractive subdued green.|Lumber Jack
extratrees.block.planks.sweetgum.desc=Yet another average wood, but has a certain character.|Lumber Jack
extratrees.block.planks.rosewood.desc=Used to make chess pieces, this is another strongly hued wood.|Lumber Jack
extratrees.block.planks.gingko.desc=Similar to Boxwood, Gingko wood is very pale.|Lumber Jack
extratrees.block.planks.ginkgo.desc=Similar to Boxwood, Ginkgo wood is very pale.|Lumber Jack
extratrees.block.planks.pinkivory.desc=What can I say. It's very pink.|Lumber Jack
extratrees.block.tooltip.twoColors=%s and %s
@@ -244,7 +244,7 @@ extratrees.species.logwood.name=Logwood
extratrees.species.rosewood.name=Rosewood
extratrees.species.purpleheart.name=Purpleheart
extratrees.species.iroko.name=Iroko
extratrees.species.gingko.name=Ginkgo
extratrees.species.ginkgo.name=Ginkgo
extratrees.species.brazilnut.name=Brazil Nut
extratrees.species.rosegum.name=Rose Gum
extratrees.species.swampgum.name=Swamp Gum
@@ -349,7 +349,7 @@ for.extratrees.item.food.fig=Fig
for.extratrees.item.food.acorn=Acorn
for.extratrees.item.food.elderberry=Elderberry
for.extratrees.item.food.olive=Olive
for.extratrees.item.food.gingkonut=Gingko Nut
for.extratrees.item.food.ginkgonut=Ginkgo Nut
for.extratrees.item.food.coffee=Coffee
for.extratrees.item.food.osangeosange=Osange Orange
for.extratrees.item.food.osangeorange=Osange Orange
@@ -72,7 +72,7 @@ extratrees.block.planks.holly=Holly
extratrees.block.planks.olive=Olive
extratrees.block.planks.sweetgum=Sweetgum
extratrees.block.planks.rosewood=Rosewood
extratrees.block.planks.gingko=Gingko
extratrees.block.planks.ginkgo=Ginkgo
extratrees.block.planks.pinkivory=Pink Ivory
extratrees.block.planks.cherry=Cherry
extratrees.block.planks.banana=Banana
@@ -151,7 +151,7 @@ extratrees.block.planks.holly.desc=The whitest wood available, just avoid the po
extratrees.block.planks.olive.desc=Coloured in the same way as its fruits, an attractive subdued green.|Lumber Jack
extratrees.block.planks.sweetgum.desc=Yet another average wood, but has a certain character.|Lumber Jack
extratrees.block.planks.rosewood.desc=Used to make chess pieces, this is another strongly hued wood.|Lumber Jack
extratrees.block.planks.gingko.desc=Similar to Boxwood, Gingko wood is very pale.|Lumber Jack
extratrees.block.planks.ginkgo.desc=Similar to Boxwood, Ginkgo wood is very pale.|Lumber Jack
extratrees.block.planks.pinkivory.desc=What can I say. It's very pink.|Lumber Jack
extratrees.block.tooltip.twoColors=%s and %s
@@ -260,7 +260,7 @@ extratrees.species.logwood.name=Logwood
extratrees.species.rosewood.name=Rosewood
extratrees.species.purpleheart.name=Purpleheart
extratrees.species.iroko.name=Iroko
extratrees.species.gingko.name=Ginkgo
extratrees.species.ginkgo.name=Ginkgo
extratrees.species.brazilnut.name=Brazil Nut
extratrees.species.rosegum.name=Rose Gum
extratrees.species.swampgum.name=Swamp Gum
@@ -369,7 +369,7 @@ for.extratrees.item.food.fig=Fig
for.extratrees.item.food.acorn=Acorn
for.extratrees.item.food.elderberry=Elderberry
for.extratrees.item.food.olive=Olive
for.extratrees.item.food.gingkonut=Gingko Nut
for.extratrees.item.food.ginkgonut=Ginkgo Nut
for.extratrees.item.food.coffee=Coffee
for.extratrees.item.food.osangeosange=Osange Orange
for.extratrees.item.food.osangeorange=Osange Orange
@@ -69,7 +69,7 @@ extratrees.block.planks.holly=остролиста
extratrees.block.planks.olive=оливы
extratrees.block.planks.sweetgum=ликвидамбара смолоносного
extratrees.block.planks.rosewood=розового дерева
extratrees.block.planks.gingko=гинкго двулопастного
extratrees.block.planks.ginkgo=гинкго двулопастного
extratrees.block.planks.pinkivory=умнини
extratrees.block.planks.cherry=вишни
extratrees.block.planks.banana=банана
@@ -151,7 +151,7 @@ extratrees.block.planks.holly.desc=Белейшее дерево доступн
extratrees.block.planks.olive.desc=Древесина, как и плоды оливы имеют привлекательный зелёный цвет.|Лесоруб
extratrees.block.planks.sweetgum.desc=Ещё одна средняя древесина, но имеет определенные особенности.|Лесоруб
extratrees.block.planks.rosewood.desc=Используется для шахматных фигур, из-за сильных оттенков дерева.|Лесоруб
extratrees.block.planks.gingko.desc=Подобно Самшиту, древесина Гингко очень бледна.|Лесоруб
extratrees.block.planks.ginkgo.desc=Подобно Самшиту, древесина Гингко очень бледна.|Лесоруб
extratrees.block.planks.pinkivory.desc=Что я могу сказать, она очень розовая.|Лесоруб
extratrees.block.tooltip.twoColors=%s и %s
@@ -249,7 +249,7 @@ extratrees.species.logwood.name=Кампешевое дерево
extratrees.species.rosewood.name=Розовое дерево
extratrees.species.purpleheart.name=Амарант
extratrees.species.iroko.name=Ироко
extratrees.species.gingko.name=Гинкго двулопастный
extratrees.species.ginkgo.name=Гинкго двулопастный
extratrees.species.brazilnut.name=Бразильский орех
extratrees.species.rosegum.name=Эвкалипт гигантский
extratrees.species.swampgum.name=Эвкалипт болотный
@@ -354,7 +354,7 @@ for.extratrees.item.food.fig=Инжир
for.extratrees.item.food.acorn=Жёлудь
for.extratrees.item.food.elderberry=Бузина
for.extratrees.item.food.olive=Олива
for.extratrees.item.food.gingkonut=Семена Гинкго
for.extratrees.item.food.ginkgonut=Семена Гинкго
for.extratrees.item.food.coffee=Кофейные зёрна
# ПРОДУКТЫ САДОВОДСТВА
for.extratrees.item.food.osangeosange=Плод маклюра
@@ -70,7 +70,7 @@ extratrees.block.planks.holly=冬青
extratrees.block.planks.olive=橄榄树
extratrees.block.planks.sweetgum=枫香树
extratrees.block.planks.rosewood=蔷薇木
extratrees.block.planks.gingko=银杏
extratrees.block.planks.ginkgo=银杏
extratrees.block.planks.pinkivory=象牙粉红木
extratrees.block.planks.cherry=樱树
extratrees.block.planks.banana=香蕉
@@ -149,7 +149,7 @@ extratrees.block.planks.holly.desc=这是最白的木材,记得不要让有尖
extratrees.block.planks.olive.desc=那引人注目的柔和的绿色也正是其果实的色彩。|伐木工
extratrees.block.planks.sweetgum.desc=又是一种质地均匀的木材,但它有一些用途。|伐木工
extratrees.block.planks.rosewood.desc=这又是一种颜色颇深的木材,用于制作国际象棋棋子。|伐木工
extratrees.block.planks.gingko.desc=和黄杨类似,银杏木颜色很淡。|伐木工
extratrees.block.planks.ginkgo.desc=和黄杨类似,银杏木颜色很淡。|伐木工
extratrees.block.planks.pinkivory.desc=我能说些什么呢.它的粉色太浓厚了。|伐木工
extratrees.block.tooltip.twoColors=%s - %s
@@ -252,7 +252,7 @@ extratrees.species.logwood.name=墨水树
extratrees.species.rosewood.name=蔷薇木
extratrees.species.purpleheart.name=紫心檀木
extratrees.species.iroko.name=大绿柄桑木
extratrees.species.gingko.name=银杏
extratrees.species.ginkgo.name=银杏
extratrees.species.brazilnut.name=巴西栗
extratrees.species.rosegum.name=大桉
extratrees.species.swampgum.name= 沼泽桉
@@ -357,7 +357,7 @@ for.extratrees.item.food.fig=无花果
for.extratrees.item.food.acorn=橡果
for.extratrees.item.food.elderberry=接骨木浆果
for.extratrees.item.food.olive=橄榄
for.extratrees.item.food.gingkonut=白果
for.extratrees.item.food.ginkgonut=白果
for.extratrees.item.food.coffee=咖啡
for.extratrees.item.food.osangeosange=桑橙
for.extratrees.item.food.osangeorange=桑橙
File renamed without changes.

Before

Width:  |  Height:  |  Size: 704 B

After

Width:  |  Height:  |  Size: 704 B

File renamed without changes.

Before

Width:  |  Height:  |  Size: 458 B

After

Width:  |  Height:  |  Size: 458 B

File renamed without changes.

Before

Width:  |  Height:  |  Size: 381 B

After

Width:  |  Height:  |  Size: 381 B

File renamed without changes.

Before

Width:  |  Height:  |  Size: 448 B

After

Width:  |  Height:  |  Size: 448 B