Compare commits

..
36 Commits
Author SHA1 Message Date
Martin Robertz a614038a18 Merge pull request #31 from D-Cysteine/master
Fix capacitor NBT conversion
2021-10-16 15:21:44 +02:00
D-Cysteine cd58ee6866 Remove "_beta" from mod version 2021-10-16 06:06:46 -06:00
D-Cysteine 88ac45d6b6 Fix capacitor NBT conversion 2021-10-13 22:53:19 -06:00
Martin Robertz 187ba74826 Merge pull request #30 from GTNewHorizons/fuzzymode-improvements
Item Filter Improvements
2021-09-05 18:09:43 +02:00
TimeConqueror 10a05d75bc Collapse logic in #doesItemPassFilter 2021-09-05 00:50:57 +03:00
TimeConqueror b9d405312d Item Filters: Changed the logic of fuzzy mode, changed the way empty item list works 2021-08-28 18:50:54 +03:00
DreamMasterXXL 067d602a9d add(Ender-IO)Changelog 2021-06-27 23:22:33 +02:00
Martin Robertz 9b54770785 Merge pull request #29 from charagarlnad/master
fix a crash with capacitor banks
2021-03-22 15:50:33 +01:00
charagarlnad 51d553d6a0 fix a crash with capacitor banks 2021-02-28 15:26:50 -06:00
DreamMasterXXL a2da1c4832 bump version 2021-01-29 19:56:32 +01:00
Martin Robertz a40e48f5d8 Merge pull request #28 from GTNewHorizons/fix_burn_time_tooltip
Fix Burn Time tooltip
2021-01-24 22:37:43 +01:00
Jason Mitchell 0e7bf1c530 Revert "Update TooltipHandlerBurnTime.java"
This reverts commit 3093ea6180.
2021-01-24 13:02:17 -08:00
DreamMasterXXL 81ac330ec8 bump version 2020-12-15 23:33:49 +01:00
Martin Robertz c08af8ef02 Merge pull request #26 from dvdmandt/master
Initial support for channels on EnderFluidConduits
2020-12-13 13:47:37 +01:00
David Lindström 15ed039813 Sync settings layouts for fluid conduits and item conduits 2020-12-13 11:40:59 +01:00
David Lindström a217fd3699 Make icons explicitly reference the fields from ItemConduit. 2020-12-11 06:16:34 +01:00
David Lindström 246a6d8f0a Update LiquidSettings.java
* Fix missing } after merge
2020-12-11 06:09:41 +01:00
David Lindström b652b79e61 Merge branch 'master' into master 2020-12-11 06:02:45 +01:00
Martin Robertz 27a0a443a2 Merge pull request #27 from GTNewHorizons/feature/ender-conduit-round-robin
Add round-robin button to ender conduit
2020-12-10 15:19:58 +01:00
Glease c7a334c913 Add round-robin button to ender conduit
Signed-off-by: Glease <[email protected]>
2020-12-10 19:32:40 +08:00
David Lindström f512b210a5 Initial support for channels on EnderFluidConduits
This is pretty basic support for channels. There's plenty of room for optimizations in the network logic.
2020-12-08 00:21:44 +01:00
Martin Robertz e2b41a49c3 Merge pull request #25 from GTNewHorizons/forestry_compat
Added forestry sapling support to farm station
2020-11-08 09:22:35 +01:00
bdew 7f89eba8b5 Added forestry sapling support to farm station
Cherry picked & backported from 1b242dc2d786b8c1fb545845768faa1f6c15818a
2020-11-07 12:50:04 -08:00
Martin Robertz 76dabdf493 Merge pull request #24 from GTNewHorizons/fix-dupe-mob
Ignore dead entities when capturing mobs with soul vial
2020-11-01 10:24:47 +01:00
Glease 41c51754bb Ignore dead entities 2020-10-29 18:07:20 +08:00
Martin Robertz 472b3649e1 Merge pull request #22 from Prometheus0000/fused-quartz-nerf
Change fused quartz blast resistance 2000 -> 20
2020-10-24 22:34:24 +02:00
Prometheus0000 806d162b19 Change fused quartz blast resistance 2000 -> 20 2020-10-21 15:40:46 -04:00
Martin Robertz ad1f98b03e Merge pull request #21 from glowredman/master
Hide tile.blockLightNode.name in NEI
2020-10-11 12:16:43 +02:00
glowredman f9bc80ef91 Hide tile.blockLightNode.name in NEI 2020-10-11 00:02:35 +02:00
Martin Robertz 8807be5887 Merge pull request #20 from TataTawa/patch-2
Update TileConduitBundle.java
2020-08-31 13:17:05 +02:00
TataTawa 026a36d51d Update TileConduitBundle.java 2020-08-31 17:12:00 +08:00
TataTawa c6c539ea13 Update TileConduitBundle.java 2020-08-31 06:51:28 +00:00
TataTawa 983a76dd1d Update TileConduitBundle.java
Greatly increase Client Side ItemConduit performance. (20% fps increase if have 100 - 200 item conduit in render area, these are lag-spikes.)

EnderIO Conduits are very laggy, partly because Redstone/fluid/gas Conduits causing RenderChunks re-render back and forth. But if there is only one ItemConduit in the bundle, it is pretty sure that we only need to re-render ItemConduit near the player , because only player's behavior range (5) can change the shape of ItemConduit. 
But if there is another conduit in the bundle, the re-render is not sure because Redstone conduit in the bundle might needs to re-render in any time. So in this case I left to default.
2020-08-28 17:59:14 +08:00
Martin Robertz f492c45f50 Merge pull request #19 from TataTawa/patch-1
Update TooltipHandlerBurnTime.java
2020-08-01 16:37:34 +02:00
TataTawa 3093ea6180 Update TooltipHandlerBurnTime.java
After performance profiling I found 
TileEntityFurnace.getItemBurnTime(item); 
is computationaly expensive. It occupied almost a cpu core forever, because NEI starts a task thread every few seconds and this line of code keep iteraing through all the furnance recipe in GTNH. Besides, usually the result of this computation is not useful.

Add thread name check will help performance and will not influence the player.
if (!Thread.currentThread().getName().startsWith("Client Thread")) return false;
2020-07-29 09:34:08 +00:00
bartimaeusnek ea5786c266 Fixed Fuckup
+ renamed constructor params for easier access
+ reduced log-spam
+ version increase
2020-05-27 13:24:21 +02:00
27 changed files with 728 additions and 278 deletions

No files matched your search

+24
View File
@@ -0,0 +1,24 @@
# EnderIO
Changelog of EnderIO.
### [#28 Fix Burn Time tooltip](https://github.com/GTNewHorizons/EnderIO/pull/28)
**Merge pull request #28 from GTNewHorizons/fix_burn_time_tooltip**
* Fix Burn Time tooltip
[a40e48f5d87b0be](https://github.com/GTNewHorizons/EnderIO/commit/a40e48f5d87b0be)
by Martin Robertz *2021-01-24 21:37:43*
### No issue
**bump version**
[a2da1c4832993a3](https://github.com/GTNewHorizons/EnderIO/commit/a2da1c4832993a3)
by DreamMasterXXL *2021-01-29 18:56:32*
**Revert "Update TooltipHandlerBurnTime.java"**
* This reverts commit 3093ea6180beec8329087a1f91bda448683331d8.
[0e7bf1c530797f8](https://github.com/GTNewHorizons/EnderIO/commit/0e7bf1c530797f8)
by Jason Mitchell *2021-01-24 21:02:17*
+3 -3
View File
@@ -1,10 +1,10 @@
buildscript {
repositories {
mavenCentral()
maven { url = "http://files.minecraftforge.net/maven" }
maven { url = "https://oss.sonatype.org/content/repositories/snapshots/" }
maven { url = "https://jitpack.io" }
maven { url = "https://gregtech.overminddl1.com/" }
}
dependencies { classpath 'net.minecraftforge.gradle:ForgeGradle:1.2-SNAPSHOT' }
dependencies { classpath 'com.github.GTNH2:ForgeGradle:FG_1.2-SNAPSHOT' }
}
plugins {
id 'idea'
+1 -1
View File
@@ -2,7 +2,7 @@ minecraft_version=1.7.10
forge_version=10.13.4.1614-1.7.10
forgeDep_version=10.13.4.1614
mod_version=2.3.1.12_beta
mod_version=2.3.1.17
#Comment out this line to get rid of the appendix
#mod_appendix=beta
+12 -5
View File
@@ -1182,7 +1182,11 @@ enderio.gui.conduit.item.channel=Channel
enderio.gui.conduit.item.ignoreMetaData=Ignore Meta Data
enderio.gui.conduit.item.matchMetaData=Match Meta Data
enderio.gui.conduit.item.whitelist=Whitelist
enderio.gui.conduit.item.whitelist.tooltip.0=If item list is empty, no item
enderio.gui.conduit.item.whitelist.tooltip.1=will be allowed to pass
enderio.gui.conduit.item.blacklist=Blacklist
enderio.gui.conduit.item.blacklist.tooltip.0=If item list is empty, all items
enderio.gui.conduit.item.blacklist.tooltip.1=will be allowed to pass
enderio.gui.conduit.item.stickyEnabled=Sticky Mode Enabled|Selected items will only|be sent to this or other|Sticky outputs.
enderio.gui.conduit.item.stickyDisbaled=Sticky Mode Disabled
enderio.gui.conduit.item.ignoreNBT=Ignore NBT Data
@@ -1195,11 +1199,14 @@ enderio.gui.conduit.item.roundRobinEnabled=Round Robin Enabled
enderio.gui.conduit.item.roundRobinDisabled=Round Robin Disabled
enderio.gui.conduit.item.priority=Priority
enderio.gui.conduit.item.fuzzy.disabled=Fuzzy Mode disabled
enderio.gui.conduit.item.fuzzy.fuzzy_25=Fuzzy match for 25% damage
enderio.gui.conduit.item.fuzzy.fuzzy_50=Fuzzy match for 50% damage
enderio.gui.conduit.item.fuzzy.fuzzy_75=Fuzzy match for 75% damage
enderio.gui.conduit.item.fuzzy.fuzzy_99=Fuzzy match for any damage
enderio.gui.conduit.item.fuzzy.disabled=Damage Mode: Disabled
enderio.gui.conduit.item.fuzzy.fuzzy_25=Damage Mode: Damaged by 25% or more
enderio.gui.conduit.item.fuzzy.fuzzy_50=Damage Mode: Damaged by 50% or more
enderio.gui.conduit.item.fuzzy.fuzzy_75=Damage Mode: Damaged by 75% or more
enderio.gui.conduit.item.fuzzy.fuzzy_99=Damage Mode: Damaged at least once
enderio.gui.conduit.item.fuzzy.tooltip.0=Can work without items in the filter
enderio.gui.conduit.item.fuzzy.tooltip.1=In this case its logic can be
enderio.gui.conduit.item.fuzzy.tooltip.2=controlled by %s button
enderio.gui.conduit.item.filterupgrade=Insert Item Filter
enderio.gui.conduit.item.speedupgrade=Insert Item Conduit Speed Upgrades/Downgrade
+12 -5
View File
@@ -1009,7 +1009,11 @@ enderio.gui.conduit.item.channel=Канал
enderio.gui.conduit.item.ignoreMetaData=Игнорировать метаданные
enderio.gui.conduit.item.matchMetaData=Соблюдать метаданные
enderio.gui.conduit.item.whitelist=Белый список
enderio.gui.conduit.item.whitelist.tooltip.0=Если список предметов пуст, ни один
enderio.gui.conduit.item.whitelist.tooltip.1=предмет не будет принят
enderio.gui.conduit.item.blacklist=Чёрный список
enderio.gui.conduit.item.blacklist.tooltip.0=Если список предметов пуст,
enderio.gui.conduit.item.blacklist.tooltip.1=все предметы будут приняты
enderio.gui.conduit.item.stickyEnabled=Включён "липкий" режим|Выбранные предметы будут|отправляться только на этот|или другие "липкие" выходы.
enderio.gui.conduit.item.stickyDisbaled="Липкий" режим выключен
enderio.gui.conduit.item.ignoreNBT=Игнорировать NBT
@@ -1022,11 +1026,14 @@ enderio.gui.conduit.item.roundRobinEnabled=Цикл включён
enderio.gui.conduit.item.roundRobinDisabled=Цикл отключен
enderio.gui.conduit.item.priority=Приоритет
enderio.gui.conduit.item.fuzzy.disabled=Нечёткий режим отключен
enderio.gui.conduit.item.fuzzy.fuzzy_25=Нечёткое совпадение на 25% урона
enderio.gui.conduit.item.fuzzy.fuzzy_50=Нечёткое совпадение на 50% урона
enderio.gui.conduit.item.fuzzy.fuzzy_75=Нечёткое совпадение на 75% урона
enderio.gui.conduit.item.fuzzy.fuzzy_99=Нечёткое совпадение при любом уроне
enderio.gui.conduit.item.fuzzy.disabled=Сравнение повреждения: Отключено
enderio.gui.conduit.item.fuzzy.fuzzy_25=Сравнение повреждения: Повреждено на 25% или более
enderio.gui.conduit.item.fuzzy.fuzzy_50=Сравнение повреждения: Повреждено на 50% или более
enderio.gui.conduit.item.fuzzy.fuzzy_75=Сравнение повреждения: Повреждено на 75% или более
enderio.gui.conduit.item.fuzzy.fuzzy_99=Сравнение повреждения: Повреждено хотя бы раз
enderio.gui.conduit.item.fuzzy.tooltip.0=Может работать без предметов в фильтре
enderio.gui.conduit.item.fuzzy.tooltip.1=В таком случае логика его работы
enderio.gui.conduit.item.fuzzy.tooltip.2=контролируется кнопкой %s
enderio.gui.conduit.item.filterupgrade=Вставить предметный фильтр
enderio.gui.conduit.item.speedupgrade=Вставить улучшения скорости/понижение скорости
@@ -6,6 +6,7 @@ import java.util.Iterator;
import java.util.List;
import java.util.Random;
import crazypants.enderio.conduit.gui.*;
import mods.immibis.core.api.multipart.IMultipartRenderingBlockMarker;
import mods.immibis.core.api.multipart.IMultipartSystem;
import net.minecraft.block.Block;
@@ -51,12 +52,6 @@ import crazypants.enderio.api.tool.ITool;
import crazypants.enderio.conduit.facade.ItemConduitFacade.FacadeType;
import crazypants.enderio.conduit.geom.CollidableComponent;
import crazypants.enderio.conduit.geom.ConduitConnectorType;
import crazypants.enderio.conduit.gui.ExternalConnectionContainer;
import crazypants.enderio.conduit.gui.GuiExternalConnection;
import crazypants.enderio.conduit.gui.GuiExternalConnectionSelector;
import crazypants.enderio.conduit.gui.PacketFluidFilter;
import crazypants.enderio.conduit.gui.PacketOpenConduitUI;
import crazypants.enderio.conduit.gui.PacketSlotVisibility;
import crazypants.enderio.conduit.gui.item.PacketExistingItemFilterSnapshot;
import crazypants.enderio.conduit.gui.item.PacketModItemFilter;
import crazypants.enderio.conduit.liquid.PacketFluidLevel;
@@ -66,6 +61,7 @@ import crazypants.enderio.conduit.packet.PacketItemConduitFilter;
import crazypants.enderio.conduit.packet.PacketOCConduitSignalColor;
import crazypants.enderio.conduit.packet.PacketRedstoneConduitOutputStrength;
import crazypants.enderio.conduit.packet.PacketRedstoneConduitSignalColor;
import crazypants.enderio.conduit.packet.PacketRoundRobinMode;
import crazypants.enderio.conduit.redstone.IInsulatedRedstoneConduit;
import crazypants.enderio.conduit.redstone.IRedstoneConduit;
import crazypants.enderio.conduit.redstone.InsulatedRedstoneConduit;
@@ -97,6 +93,7 @@ public class BlockConduitBundle extends BlockEio implements IGuiHandler, IFacade
PacketHandler.INSTANCE.registerMessage(PacketExistingItemFilterSnapshot.class, PacketExistingItemFilterSnapshot.class, PacketHandler.nextID(), Side.SERVER);
PacketHandler.INSTANCE.registerMessage(PacketModItemFilter.class, PacketModItemFilter.class, PacketHandler.nextID(), Side.SERVER);
PacketHandler.INSTANCE.registerMessage(PacketFluidFilter.class, PacketFluidFilter.class, PacketHandler.nextID(), Side.SERVER);
PacketHandler.INSTANCE.registerMessage(PacketFluidChannel.class, PacketFluidChannel.class, PacketHandler.nextID(), Side.SERVER);
PacketHandler.INSTANCE.registerMessage(PacketRedstoneConduitSignalColor.class, PacketRedstoneConduitSignalColor.class, PacketHandler.nextID(), Side.SERVER);
PacketHandler.INSTANCE.registerMessage(PacketRedstoneConduitOutputStrength.class, PacketRedstoneConduitOutputStrength.class, PacketHandler.nextID(),
Side.SERVER);
@@ -104,6 +101,7 @@ public class BlockConduitBundle extends BlockEio implements IGuiHandler, IFacade
PacketHandler.INSTANCE.registerMessage(PacketSlotVisibility.class, PacketSlotVisibility.class, PacketHandler.nextID(), Side.SERVER);
PacketHandler.INSTANCE.registerMessage(PacketOCConduitSignalColor.class, PacketOCConduitSignalColor.class,
PacketHandler.nextID(), Side.SERVER);
PacketHandler.INSTANCE.registerMessage(PacketRoundRobinMode.class, PacketRoundRobinMode.class, PacketHandler.nextID(), Side.SERVER);
BlockConduitBundle result = new BlockConduitBundle();
result.init();
@@ -19,6 +19,8 @@ import mods.immibis.microblocks.api.IMicroblockSystem;
import mods.immibis.microblocks.api.MicroblockAPIUtils;
import mods.immibis.microblocks.api.Part;
import mods.immibis.microblocks.api.PartType;
import net.minecraft.client.Minecraft;
import net.minecraft.entity.Entity;
import net.minecraft.block.Block;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
@@ -162,7 +164,19 @@ public class TileConduitBundle extends TileEntityEio implements IConduitBundle {
facadeMeta = nbtRoot.getInteger("facadeMeta");
if(worldObj != null && worldObj.isRemote) {
clientUpdated = true;
if (conduits.size() == 1 && conduits.get(0) instanceof IItemConduit) {
boolean itemConduitClientUpdated = false;
for (Object o : Minecraft.getMinecraft().theWorld.playerEntities) {
Entity e = ((Entity) o);
if (e.getDistanceSq(this.xCoord, yCoord, zCoord) < 36) {
itemConduitClientUpdated = true;
break;
}
}
if (itemConduitClientUpdated) clientUpdated = true;
} else {
clientUpdated = true;
}
}
if (MicroblocksUtil.supportMicroblocks()) {
@@ -5,6 +5,8 @@ import java.awt.Rectangle;
import java.util.Collections;
import java.util.List;
import com.enderio.core.client.gui.button.ToggleButton;
import crazypants.enderio.conduit.packet.PacketRoundRobinMode;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.FontRenderer;
import net.minecraft.client.gui.GuiButton;
@@ -41,12 +43,17 @@ public class LiquidSettings extends BaseSettingsPanel {
static final int ID_REDSTONE_BUTTON = GuiExternalConnection.nextButtonId();
private static final int ID_COLOR_BUTTON = GuiExternalConnection.nextButtonId();
private static final int ID_ROUND_ROBIN_BUTTON = GuiExternalConnection.nextButtonId();
private static final int ID_WHITELIST = GuiExternalConnection.nextButtonId();
private static final int NEXT_FILTER_ID = 989322;
private static final int ID_CHANNEL = GuiExternalConnection.nextButtonId();
private final RedstoneModeButton rsB;
private final ToggleButton roundRobinB;
private final ColorButton colorB;
private ColorButton channelB;
private static final String autoExtractStr = EnderIO.lang.localize("gui.conduit.fluid.autoExtract");
private static final String filterStr = EnderIO.lang.localize("gui.conduit.fluid.filter");
@@ -72,9 +79,11 @@ public class LiquidSettings extends BaseSettingsPanel {
eConduit = (EnderLiquidConduit) con;
isEnder = true;
int x = gui.getXSize() - 20;
int x = 52;
int y = customTop;
inOutNextB = MultiIconButton.createRightArrowButton(gui, NEXT_FILTER_ID, x, y);
x = filterX - 20;
@@ -87,9 +96,17 @@ public class LiquidSettings extends BaseSettingsPanel {
gui.getContainer().setInventorySlotsVisible(false);
}
int x = gap + gui.getFontRenderer().getStringWidth(autoExtractStr) + gap * 2;
int x = 66;
int y = customTop;
if(isEnder)
{
channelB = new ColorButton(gui, ID_CHANNEL, x, y);
channelB.setColorIndex(0);
channelB.setToolTipHeading(EnderIO.lang.localize("gui.conduit.item.channel"));
x += channelB.getWidth() + gap;
}
rsB = new RedstoneModeButton(gui, ID_REDSTONE_BUTTON, x, y, new IRedstoneModeControlable() {
@Override
@@ -112,6 +129,16 @@ public class LiquidSettings extends BaseSettingsPanel {
colorB = new ColorButton(gui, ID_COLOR_BUTTON, x, y);
colorB.setToolTipHeading(EnderIO.lang.localize("gui.conduit.redstone.signalColor"));
colorB.setColorIndex(conduit.getExtractionSignalColor(gui.getDir()).ordinal());
if (isEnder) {
x += rsB.getWidth() + gap;
roundRobinB = new ToggleButton(gui, ID_ROUND_ROBIN_BUTTON, x, y, IconEIO.ROUND_ROBIN_OFF, IconEIO.ROUND_ROBIN);
roundRobinB.setSelectedToolTip(EnderIO.lang.localize("gui.conduit.item.roundRobinEnabled"));
roundRobinB.setUnselectedToolTip(EnderIO.lang.localize("gui.conduit.item.roundRobinDisabled"));
roundRobinB.setPaintSelectedBorder(false);
} else {
roundRobinB = null;
}
}
private void addFilterTooltips() {
@@ -133,16 +160,48 @@ public class LiquidSettings extends BaseSettingsPanel {
toggleBlacklist();
} else if(guiButton.id == NEXT_FILTER_ID) {
inOutShowIn = !inOutShowIn;
if(channelB != null) {
channelB.onGuiInit();
if(isInput()) {
channelB.setColorIndex(eConduit.getInputColor(gui.getDir()).ordinal());
} else {
channelB.setColorIndex(eConduit.getOutputColor(gui.getDir()).ordinal());
}
}
if(isInput()) {
if (isEnder) {
roundRobinB.onGuiInit();
}
rsB.onGuiInit();
colorB.onGuiInit();
} else {
if (isEnder) {
roundRobinB.detach();
}
rsB.detach();
colorB.detach();
}
if(isFilterVisible()) {
updateWhiteListButton(eConduit.getFilter(gui.getDir(), isInput()));
}
} else if(guiButton.id == ID_CHANNEL) {
if(isEnder) {
DyeColor col = DyeColor.values()[channelB.getColorIndex()];
if (isInput()) {
eConduit.setInputColor(gui.getDir(), col);
} else {
eConduit.setOutputColor(gui.getDir(), col);
}
setConduitChannel(col);
}
} else if(guiButton.id == ID_ROUND_ROBIN_BUTTON) {
if (isEnder && isInput()) {
final boolean selected = roundRobinB.isSelected();
eConduit.setRoundRobin(gui.getDir(), selected);
PacketHandler.INSTANCE.sendToServer(new PacketRoundRobinMode(eConduit, gui.getDir()));
}
}
}
@@ -189,8 +248,18 @@ public class LiquidSettings extends BaseSettingsPanel {
protected void setConduitFilter(FluidFilter filter) {
eConduit.setFilter(gui.getDir(), filter, isInput());
PacketHandler.INSTANCE.sendToServer(new PacketFluidFilter(eConduit, gui.getDir(), filter, isInput()));
}
protected void setConduitChannel(DyeColor channel) {
if(isInput()) {
eConduit.setInputColor(gui.getDir(), channel);
} else {
eConduit.setOutputColor(gui.getDir(), channel);
}
PacketHandler.INSTANCE.sendToServer(new PacketFluidChannel(eConduit, gui.getDir(), isInput(), channel));
}
@Override
protected void initCustomOptions() {
@@ -209,6 +278,21 @@ public class LiquidSettings extends BaseSettingsPanel {
return;
}
if(conduit.getConnectionMode(gui.getDir()) == ConnectionMode.DISABLED) {
channelB.detach();
} else {
channelB.onGuiInit();
if (isInput()) {
channelB.setColorIndex(eConduit.getInputColor(gui.getDir()).ordinal());
} else {
channelB.setColorIndex(eConduit.getOutputColor(gui.getDir()).ordinal());
}
}
if(isInput()) {
roundRobinB.onGuiInit();
roundRobinB.setSelected(eConduit.isRoundRobin(gui.getDir()));
}
if(isFilterVisible()) {
gui.getContainer().setInventorySlotsVisible(true);
addFilterTooltips();
@@ -241,6 +325,7 @@ public class LiquidSettings extends BaseSettingsPanel {
rsB.detach();
colorB.detach();
if(isEnder) {
roundRobinB.detach();
gui.getContainer().setInventorySlotsVisible(false);
if(filterToolTips != null) {
for (GuiToolTip tt : filterToolTips) {
@@ -251,25 +336,23 @@ public class LiquidSettings extends BaseSettingsPanel {
}
inOutNextB.detach();
whiteListB.detach();
channelB.detach();
}
}
@Override
protected void renderCustomOptions(int top, float par1, int par2, int par3) {
boolean isInput = isInput();
if(isInput) {
int x = gui.getGuiLeft() + gap + gui.getFontRenderer().getStringWidth(autoExtractStr) + gap + 2;
int y = top;
gui.getFontRenderer().drawString(autoExtractStr, left, y, ColorUtil.getRGB(Color.DARK_GRAY));
}
if(isEnder && isFilterVisible()) {
String inOutStr = EnderIO.lang.localize("gui.conduit.ioMode.output");
if(conduit.getConnectionMode(gui.getDir()) == ConnectionMode.IN_OUT) {
String inOutStr = inOutShowIn ? EnderIO.lang.localize("gui.conduit.ioMode.input") : EnderIO.lang.localize("gui.conduit.ioMode.output");
int x = gui.getGuiLeft() + gui.getXSize() - 20 - 5 - gui.getFontRenderer().getStringWidth(inOutStr);
int y = top;
gui.getFontRenderer().drawString(inOutStr, x, y, ColorUtil.getRGB(Color.DARK_GRAY));
inOutStr = inOutShowIn ? EnderIO.lang.localize("gui.conduit.ioMode.input") : EnderIO.lang.localize("gui.conduit.ioMode.output");
} else if(conduit.getConnectionMode(gui.getDir()) == ConnectionMode.INPUT){
inOutStr = EnderIO.lang.localize("gui.conduit.ioMode.input");
}
int x = left;
int y = top;
gui.getFontRenderer().drawString(inOutStr, x, y, ColorUtil.getRGB(Color.DARK_GRAY));
GL11.glColor3f(1, 1, 1);
gui.bindGuiTexture(1);
@@ -277,8 +360,8 @@ public class LiquidSettings extends BaseSettingsPanel {
FontRenderer fr = gui.getFontRenderer();
int sw = fr.getStringWidth(filterStr);
int x = (gui.width / 2) - sw / 2;
int y = top + 20;
x = (gui.width / 2) - sw / 2;
y = top + 20;
fr.drawString(filterStr, x, y, ColorUtil.getRGB(Color.DARK_GRAY));
x = gui.getGuiLeft() + filterX;
@@ -0,0 +1,67 @@
package crazypants.enderio.conduit.gui;
import com.enderio.core.common.util.DyeColor;
import cpw.mods.fml.common.network.ByteBufUtils;
import cpw.mods.fml.common.network.simpleimpl.IMessage;
import cpw.mods.fml.common.network.simpleimpl.IMessageHandler;
import cpw.mods.fml.common.network.simpleimpl.MessageContext;
import crazypants.enderio.conduit.liquid.EnderLiquidConduit;
import crazypants.enderio.conduit.liquid.FluidFilter;
import crazypants.enderio.conduit.liquid.ILiquidConduit;
import crazypants.enderio.conduit.packet.AbstractConduitPacket;
import crazypants.enderio.conduit.packet.ConTypeEnum;
import io.netty.buffer.ByteBuf;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraftforge.common.util.ForgeDirection;
public class PacketFluidChannel extends AbstractConduitPacket<ILiquidConduit> implements IMessageHandler<PacketFluidChannel, IMessage>{
private ForgeDirection dir;
private boolean isInput;
private DyeColor channel;
public PacketFluidChannel() {
}
public PacketFluidChannel(EnderLiquidConduit eConduit, ForgeDirection dir, boolean isInput, DyeColor channel) {
super(eConduit.getBundle().getEntity(), ConTypeEnum.FLUID);
this.dir = dir;
this.isInput = isInput;
this.channel = channel;
}
@Override
public void toBytes(ByteBuf buf) {
super.toBytes(buf);
buf.writeShort(dir.ordinal());
buf.writeBoolean(isInput);
buf.writeShort(channel.ordinal());
}
@Override
public void fromBytes(ByteBuf buf) {
super.fromBytes(buf);
dir = ForgeDirection.values()[buf.readShort()];
isInput = buf.readBoolean();
channel = DyeColor.values()[buf.readShort()];
}
@Override
public IMessage onMessage(PacketFluidChannel message, MessageContext ctx) {
ILiquidConduit conduit = message.getTileCasted(ctx);
if(! (conduit instanceof EnderLiquidConduit)) {
return null;
}
EnderLiquidConduit eCon = (EnderLiquidConduit)conduit;
if(message.isInput)
eCon.setInputColor(message.dir, message.channel);
else
eCon.setOutputColor(message.dir, message.channel);
message.getWorld(ctx).markBlockForUpdate(message.x, message.y, message.z);
return null;
}
}
@@ -1,20 +1,16 @@
package crazypants.enderio.conduit.gui.item;
import net.minecraft.client.gui.GuiButton;
import org.lwjgl.opengl.GL11;
import com.enderio.core.client.gui.GuiContainerBase;
import com.enderio.core.client.gui.button.CycleButton;
import com.enderio.core.client.gui.button.IconButton;
import com.enderio.core.client.gui.button.ToggleButton;
import crazypants.enderio.EnderIO;
import crazypants.enderio.conduit.gui.GuiExternalConnection;
import crazypants.enderio.conduit.item.filter.FuzzyMode;
import crazypants.enderio.conduit.item.filter.ItemFilter;
import crazypants.enderio.gui.GuiContainerBaseEIO;
import crazypants.enderio.gui.IconEIO;
import net.minecraft.client.gui.GuiButton;
import org.lwjgl.opengl.GL11;
public class BasicItemFilterGui implements IItemFilterGui {
@@ -66,7 +62,7 @@ public class BasicItemFilterGui implements IItemFilterGui {
int x = butLeft;
int y = yOffset + 1;
whiteListB = new IconButton(gui, ID_WHITELIST + buttonIdOffset, x, y, IconEIO.FILTER_WHITELIST);
whiteListB.setToolTip(EnderIO.lang.localize("gui.conduit.item.whitelist"));
whiteListB.setToolTip(getWhitelistTooltips(false));
x += 20;
useMetaB = new ToggleButton(gui, ID_META + buttonIdOffset, x, y, IconEIO.FILTER_META_OFF, IconEIO.FILTER_META);
@@ -135,16 +131,14 @@ public class BasicItemFilterGui implements IItemFilterGui {
useMetaB.setSelected(activeFilter.isMatchMeta());
whiteListB.onGuiInit();
whiteListB.setToolTip(getWhitelistTooltips(activeFilter.isBlacklist()));
if(activeFilter.isBlacklist()) {
whiteListB.setIcon(IconEIO.FILTER_BLACKLIST);
whiteListB.setToolTip(EnderIO.lang.localize("gui.conduit.item.blacklist"));
} else {
whiteListB.setIcon(IconEIO.FILTER_WHITELIST);
whiteListB.setToolTip(EnderIO.lang.localize("gui.conduit.item.whitelist"));
}
}
@Override
public void actionPerformed(GuiButton guiButton) {
@@ -193,5 +187,20 @@ public class BasicItemFilterGui implements IItemFilterGui {
gui.drawTexturedModalRect(gui.getGuiLeft() + xOffset, gui.getGuiTop() + yOffset + 20, 0, 238, 18 * 5, 18);
}
}
private String[] getWhitelistTooltips(boolean isBlacklist) {
if(isBlacklist) {
return new String[]{
EnderIO.lang.localize("gui.conduit.item.blacklist"),
EnderIO.lang.localize("gui.conduit.item.blacklist.tooltip.0"),
EnderIO.lang.localize("gui.conduit.item.blacklist.tooltip.1")
};
} else {
return new String[]{
EnderIO.lang.localize("gui.conduit.item.whitelist"),
EnderIO.lang.localize("gui.conduit.item.whitelist.tooltip.0"),
EnderIO.lang.localize("gui.conduit.item.whitelist.tooltip.1")
};
}
}
}
@@ -128,7 +128,7 @@ public class ItemSettings extends BaseSettingsPanel {
}
};
x += channelB.getWidth() + 4;
x += channelB.getWidth() + gap;
priLeft = x - 8;
rsB = new RedstoneModeButton(gui, ID_REDSTONE_BUTTON, x, y, new IRedstoneModeControlable() {
@@ -149,18 +149,18 @@ public class ItemSettings extends BaseSettingsPanel {
}
});
x += rsB.getWidth() + 4;
x += rsB.getWidth() + gap;
colorB = new ColorButton(gui, ID_COLOR_BUTTON, x, y);
colorB.setColorIndex(itemConduit.getExtractionSignalColor(gui.getDir()).ordinal());
colorB.setToolTipHeading(EnderIO.lang.localize("gui.conduit.item.sigCol"));
x += 4 + colorB.getWidth();
x += gap + colorB.getWidth();
roundRobinB = new ToggleButton(gui, ID_ROUND_ROBIN, x, y, IconEIO.ROUND_ROBIN_OFF, IconEIO.ROUND_ROBIN);
roundRobinB.setSelectedToolTip(EnderIO.lang.localize("gui.conduit.item.roundRobinEnabled"));
roundRobinB.setUnselectedToolTip(EnderIO.lang.localize("gui.conduit.item.roundRobinDisabled"));
roundRobinB.setPaintSelectedBorder(false);
x += 4 + roundRobinB.getWidth();
x += gap + roundRobinB.getWidth();
loopB = new ToggleButton(gui, ID_LOOP, x, y, IconEIO.LOOP_OFF, IconEIO.LOOP);
loopB.setSelectedToolTip(EnderIO.lang.localize("gui.conduit.item.selfFeedEnabled"));
loopB.setUnselectedToolTip(EnderIO.lang.localize("gui.conduit.item.selfFeedDisabled"));
@@ -1,16 +1,15 @@
package crazypants.enderio.conduit.item.filter;
import java.util.Collections;
import java.util.List;
import java.util.Locale;
import net.minecraft.item.ItemStack;
import com.enderio.core.api.client.render.IWidgetIcon;
import com.enderio.core.client.gui.button.CycleButton;
import crazypants.enderio.EnderIO;
import crazypants.enderio.gui.IconEIO;
import net.minecraft.item.ItemStack;
import net.minecraft.util.EnumChatFormatting;
import java.util.Arrays;
import java.util.List;
import java.util.Locale;
public enum FuzzyMode implements CycleButton.ICycleEnum {
DISABLED(IconEIO.FILTER_FUZZY_DISABLED) {
@@ -63,7 +62,13 @@ public enum FuzzyMode implements CycleButton.ICycleEnum {
@Override
public List<String> getTooltipLines() {
return Collections.singletonList(EnderIO.lang.localize("gui.conduit.item.fuzzy.".concat(name().toLowerCase(Locale.US))));
return Arrays.asList(
EnderIO.lang.localize("gui.conduit.item.fuzzy.".concat(name().toLowerCase(Locale.US))),
EnumChatFormatting.GRAY + EnderIO.lang.localize("gui.conduit.item.fuzzy.tooltip.0"),
EnumChatFormatting.GRAY + EnderIO.lang.localize("gui.conduit.item.fuzzy.tooltip.1"),
EnumChatFormatting.GRAY + EnderIO.lang.localize("gui.conduit.item.fuzzy.tooltip.2",
EnderIO.lang.localize("gui.conduit.item.whitelist"))
);
}
}
@@ -1,16 +1,16 @@
package crazypants.enderio.conduit.item.filter;
import com.enderio.core.client.gui.widget.GhostSlot;
import com.enderio.core.common.network.NetworkUtil;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import crazypants.enderio.conduit.gui.GuiExternalConnection;
import crazypants.enderio.conduit.gui.item.BasicItemFilterGui;
import crazypants.enderio.conduit.gui.item.IItemFilterGui;
import crazypants.enderio.conduit.gui.item.ItemConduitFilterContainer;
import crazypants.enderio.conduit.item.IItemConduit;
import crazypants.enderio.conduit.item.NetworkedInventory;
import io.netty.buffer.ByteBuf;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.IInventory;
import net.minecraft.item.Item;
@@ -19,12 +19,9 @@ import net.minecraft.nbt.NBTBase;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraftforge.oredict.OreDictionary;
import com.enderio.core.client.gui.widget.GhostSlot;
import com.enderio.core.common.network.NetworkUtil;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import crazypants.enderio.conduit.item.NetworkedInventory;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class ItemFilter implements IInventory, IItemFilter {
@@ -93,43 +90,56 @@ public class ItemFilter implements IInventory, IItemFilter {
return doesItemPassFilter(item);
}
@SuppressWarnings("SimplifiableConditionalExpression")
public boolean doesItemPassFilter(ItemStack item) {
if(!isValid()) {
return true;
}
boolean matched = itemMatched(item);
return isBlacklist ? !matched : matched;
boolean allow = isValid() && itemMatched(item);
return isBlacklist ? !allow : allow;
}
private boolean itemMatched(ItemStack item) {
if(item == null) {
return false;
}
boolean doFuzzy = false;
boolean fuzzyValue = false;
if(fuzzyMode != FuzzyMode.DISABLED && item.getItem().isDamageable()) {
doFuzzy = true;
fuzzyValue = fuzzyMode.compare(item);
boolean checkDamage = fuzzyMode != FuzzyMode.DISABLED;
boolean damageMatched = false;
if(checkDamage && item.getItem().isDamageable()) {
damageMatched = fuzzyMode.compare(item);
}
if(isItemListEmpty()) {
if (checkDamage) {
return damageMatched;
} else {
return false;
}
}
boolean matched = false;
int i = 0;
for (ItemStack it : items) {
if(it != null && Item.getIdFromItem(item.getItem()) == Item.getIdFromItem(it.getItem())) {
for (int i = 0; i < items.length; i++) {
ItemStack it = items[i];
if (it != null && Item.getIdFromItem(item.getItem()) == Item.getIdFromItem(it.getItem())) {
matched = true;
boolean fuzzyOk = doFuzzy && fuzzyMode.compare(it) == fuzzyValue;
if(matchMeta && !fuzzyOk && item.getItemDamage() != it.getItemDamage()) {
if(checkDamage && !damageMatched) {
matched = false;
} else if(matchNBT && !isNBTMatch(item, it)) {
} else if (matchMeta && item.getItemDamage() != it.getItemDamage()) {
matched = false;
}else if (matchNBT && !isNBTMatch(item, it)) {
matched = false;
}
}
if(!matched && useOreDict && isOreDicMatch(i, item)) {
if (!matched && useOreDict && isOreDicMatch(i, item)) {
matched = true;
}
if(matched) {
if (matched) {
break;
}
i++;
}
return matched;
}
@@ -184,12 +194,21 @@ public class ItemFilter implements IInventory, IItemFilter {
@Override
public boolean isValid() {
//allows fuzzy mode to be not dependent from filter items
if(fuzzyMode != FuzzyMode.DISABLED) {
return true;
}
return !isItemListEmpty();
}
private boolean isItemListEmpty() {
for (ItemStack item : items) {
if(item != null) {
return true;
if (item != null) {
return false;
}
}
return false;
return true;
}
public boolean isBlacklist() {
@@ -1,10 +1,17 @@
package crazypants.enderio.conduit.liquid;
import java.util.EnumMap;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import com.enderio.core.common.util.DyeColor;
import com.enderio.core.client.render.IconUtil;
import com.enderio.core.common.util.BlockCoord;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import crazypants.enderio.EnderIO;
import crazypants.enderio.conduit.*;
import crazypants.enderio.conduit.geom.CollidableComponent;
import crazypants.enderio.conduit.item.ItemConduit;
import crazypants.enderio.machine.RedstoneControlMode;
import crazypants.enderio.tool.ToolUtil;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.entity.player.EntityPlayer;
@@ -17,28 +24,22 @@ import net.minecraftforge.fluids.Fluid;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fluids.FluidTankInfo;
import com.enderio.core.client.render.IconUtil;
import com.enderio.core.common.util.BlockCoord;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import crazypants.enderio.EnderIO;
import crazypants.enderio.conduit.AbstractConduitNetwork;
import crazypants.enderio.conduit.ConduitUtil;
import crazypants.enderio.conduit.ConnectionMode;
import crazypants.enderio.conduit.IConduit;
import crazypants.enderio.conduit.RaytraceResult;
import crazypants.enderio.conduit.geom.CollidableComponent;
import crazypants.enderio.machine.RedstoneControlMode;
import crazypants.enderio.tool.ToolUtil;
import java.util.EnumMap;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
public class EnderLiquidConduit extends AbstractLiquidConduit {
public static final String ICON_KEY = "enderio:liquidConduitEnder";
public static final String ICON_CORE_KEY = "enderio:liquidConduitCoreEnder";
public static final String ICON_EXTRACT_KEY = "enderio:liquidConduitAdvancedInput";
public static final String ICON_INSERT_KEY = "enderio:liquidConduitAdvancedOutput";
public static final String ICON_IN_OUT_KEY = "enderio:liquidConduitAdvancedInOut";
public static final String ICON_KEY_INPUT = ItemConduit.ICON_KEY_INPUT;
public static final String ICON_KEY_OUTPUT = ItemConduit.ICON_KEY_OUTPUT;
public static final String ICON_KEY_IN_OUT_BG = ItemConduit.ICON_KEY_IN_OUT_BG;
public static final String ICON_KEY_IN_OUT_OUT = ItemConduit.ICON_KEY_IN_OUT_OUT;
public static final String ICON_KEY_IN_OUT_IN = ItemConduit.ICON_KEY_IN_OUT_IN;
static final Map<String, IIcon> ICONS = new HashMap<String, IIcon>();
@@ -50,9 +51,12 @@ public class EnderLiquidConduit extends AbstractLiquidConduit {
public void registerIcons(IIconRegister register) {
ICONS.put(ICON_KEY, register.registerIcon(ICON_KEY));
ICONS.put(ICON_CORE_KEY, register.registerIcon(ICON_CORE_KEY));
ICONS.put(ICON_EXTRACT_KEY, register.registerIcon(ICON_EXTRACT_KEY));
ICONS.put(ICON_INSERT_KEY, register.registerIcon(ICON_INSERT_KEY));
ICONS.put(ICON_IN_OUT_KEY, register.registerIcon(ICON_IN_OUT_KEY));
ICONS.put(ICON_KEY_INPUT, register.registerIcon(ICON_KEY_INPUT));
ICONS.put(ICON_KEY_OUTPUT, register.registerIcon(ICON_KEY_OUTPUT));
ICONS.put(ICON_KEY_IN_OUT_OUT, register.registerIcon(ICON_KEY_IN_OUT_OUT));
ICONS.put(ICON_KEY_IN_OUT_IN, register.registerIcon(ICON_KEY_IN_OUT_IN));
ICONS.put(ICON_KEY_IN_OUT_BG, register.registerIcon(ICON_KEY_IN_OUT_BG));
}
@Override
@@ -69,6 +73,11 @@ public class EnderLiquidConduit extends AbstractLiquidConduit {
private final EnumMap<ForgeDirection, FluidFilter> outputFilters = new EnumMap<ForgeDirection, FluidFilter>(ForgeDirection.class);
private final EnumMap<ForgeDirection, FluidFilter> inputFilters = new EnumMap<ForgeDirection, FluidFilter>(ForgeDirection.class);
protected final EnumMap<ForgeDirection, DyeColor> outputColors = new EnumMap<ForgeDirection, DyeColor>(ForgeDirection.class);
protected final EnumMap<ForgeDirection, DyeColor> inputColors = new EnumMap<ForgeDirection, DyeColor>(ForgeDirection.class);
private int roundRobin = 0;
@Override
public ItemStack createItem() {
return new ItemStack(EnderIO.itemLiquidConduit, 1, 2);
@@ -165,17 +174,21 @@ public class EnderLiquidConduit extends AbstractLiquidConduit {
}
public IIcon getTextureForInputMode() {
return ICONS.get(ICON_EXTRACT_KEY);
return ICONS.get(ICON_KEY_INPUT);
}
public IIcon getTextureForOutputMode() {
return ICONS.get(ICON_INSERT_KEY);
return ICONS.get(ICON_KEY_OUTPUT);
}
public IIcon getTextureForInOutMode() {
return ICONS.get(ICON_IN_OUT_KEY);
public IIcon getTextureForInOutMode(boolean input) {
return input ? ICONS.get(ICON_KEY_IN_OUT_IN) : ICONS.get(ICON_KEY_IN_OUT_OUT);
}
public IIcon getTextureForInOutBackground() {
return ICONS.get(ICON_KEY_IN_OUT_BG);
}
@Override
public IIcon getTransmitionTextureForState(CollidableComponent component) {
return null;
@@ -298,10 +311,60 @@ public class EnderLiquidConduit extends AbstractLiquidConduit {
}
return network.getTankInfo(this, from);
}
//@Override
public DyeColor getInputColor(ForgeDirection dir) {
DyeColor result = inputColors.get(dir);
if(result == null) {
return DyeColor.GREEN;
}
return result;
}
//@Override
public DyeColor getOutputColor(ForgeDirection dir) {
DyeColor result = outputColors.get(dir);
if(result == null) {
return DyeColor.GREEN;
}
return result;
}
//@Override
public void setInputColor(ForgeDirection dir, DyeColor col) {
inputColors.put(dir, col);
if(network != null) {
network.notifyNetworkOfUpdate();
}
setClientStateDirty();
collidablesDirty = true;
}
//@Override
public void setOutputColor(ForgeDirection dir, DyeColor col) {
outputColors.put(dir, col);
if(network != null) {
network.notifyNetworkOfUpdate();
}
setClientStateDirty();
collidablesDirty = true;
}
@Override
protected void readTypeSettings(ForgeDirection dir, NBTTagCompound dataRoot) {
super.readTypeSettings(dir, dataRoot);
if (dataRoot.hasKey("inputColor")) {
setInputColor(dir, DyeColor.values()[dataRoot.getShort("inputColor")]);
}
if (dataRoot.hasKey("outputColor")) {
setOutputColor(dir, DyeColor.values()[dataRoot.getShort("outputColor")]);
}
if(dataRoot.hasKey("roundRobin")) {
setRoundRobin(dir, dataRoot.getBoolean("roundRobin"));
} else {
setRoundRobin(dir, true);
}
if (dataRoot.hasKey("outputFilters")) {
FluidFilter out = new FluidFilter();
out.readFromNBT(dataRoot.getCompoundTag("outputFilters"));
@@ -317,6 +380,12 @@ public class EnderLiquidConduit extends AbstractLiquidConduit {
@Override
protected void writeTypeSettingsToNbt(ForgeDirection dir, NBTTagCompound dataRoot) {
super.writeTypeSettingsToNbt(dir, dataRoot);
dataRoot.setShort("inputColor", (short)getInputColor(dir).ordinal());
dataRoot.setShort("outputColor", (short)getOutputColor(dir).ordinal());
dataRoot.setBoolean("roundRobin", isRoundRobin(dir));
FluidFilter out = outputFilters.get(dir);
if (out != null) {
NBTTagCompound outTag = new NBTTagCompound();
@@ -329,11 +398,13 @@ public class EnderLiquidConduit extends AbstractLiquidConduit {
in.writeToNBT(inTag);
dataRoot.setTag("inputFilters", inTag);
}
}
@Override
public void writeToNBT(NBTTagCompound nbtRoot) {
super.writeToNBT(nbtRoot);
nbtRoot.setInteger("roundRobin", roundRobin);
for (Entry<ForgeDirection, FluidFilter> entry : inputFilters.entrySet()) {
if(entry.getValue() != null) {
FluidFilter f = entry.getValue();
@@ -354,11 +425,29 @@ public class EnderLiquidConduit extends AbstractLiquidConduit {
}
}
}
for (Entry<ForgeDirection, DyeColor> entry : inputColors.entrySet()) {
if(entry.getValue() != null) {
short ord = (short) entry.getValue().ordinal();
nbtRoot.setShort("inSC." + entry.getKey().name(), ord);
}
}
for (Entry<ForgeDirection, DyeColor> entry : outputColors.entrySet()) {
if(entry.getValue() != null) {
short ord = (short) entry.getValue().ordinal();
nbtRoot.setShort("outSC." + entry.getKey().name(), ord);
}
}
}
@Override
public void readFromNBT(NBTTagCompound nbtRoot, short nbtVersion) {
super.readFromNBT(nbtRoot, nbtVersion);
if(nbtRoot.hasKey("roundRobin")) {
roundRobin = nbtRoot.getInteger("roundRobin");
} else {
roundRobin = 0b111111;
}
for (ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) {
String key = "inFilts." + dir.name();
if(nbtRoot.hasKey(key)) {
@@ -379,8 +468,34 @@ public class EnderLiquidConduit extends AbstractLiquidConduit {
outputFilters.put(dir, f);
}
}
key = "inSC." + dir.name();
if(nbtRoot.hasKey(key)) {
short ord = nbtRoot.getShort(key);
if(ord >= 0 && ord < DyeColor.values().length) {
inputColors.put(dir, DyeColor.values()[ord]);
}
}
key = "outSC." + dir.name();
if(nbtRoot.hasKey(key)) {
short ord = nbtRoot.getShort(key);
if(ord >= 0 && ord < DyeColor.values().length) {
outputColors.put(dir, DyeColor.values()[ord]);
}
}
}
}
public boolean isRoundRobin(ForgeDirection dir) {
return (roundRobin & dir.flag) != 0;
}
public void setRoundRobin(ForgeDirection dir, boolean roundRobin) {
if (roundRobin)
this.roundRobin |= dir.flag;
else
this.roundRobin &= ~dir.flag;
}
}
@@ -1,9 +1,6 @@
package crazypants.enderio.conduit.liquid;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
import net.minecraftforge.common.util.ForgeDirection;
import net.minecraftforge.fluids.FluidStack;
@@ -11,13 +8,51 @@ import net.minecraftforge.fluids.FluidTankInfo;
import net.minecraftforge.fluids.IFluidHandler;
import com.enderio.core.common.util.BlockCoord;
import com.enderio.core.common.util.RoundRobinIterator;
import crazypants.enderio.conduit.AbstractConduitNetwork;
import crazypants.enderio.conduit.ConnectionMode;
import crazypants.enderio.config.Config;
public class EnderLiquidConduitNetwork extends AbstractConduitNetwork<ILiquidConduit, EnderLiquidConduit> {
private class TankIterator implements Iterator<NetworkTank> {
private int index = -1;
private int currentCount = 0;
public TankIterator start() {
currentCount = 0;
return this;
}
@Override
public boolean hasNext() {
return !tanks.isEmpty() && currentCount < tanks.size();
}
@Override
public NetworkTank next() {
if (tanks.isEmpty()) {
return null;
}
currentCount++;
index++;
if (index >= tanks.size()) {
index = 0;
}
return tanks.get(index);
}
@Override
public void remove() {
}
public void rewind() {
if (index == 0)
index = tanks.size() - 1;
else
index--;
currentCount--;
}
}
public static final int MAX_EXTRACT_PER_TICK = Config.enderFluidConduitExtractRate;
public static final int MAX_IO_PER_TICK = Config.enderFluidConduitMaxIoRate;
@@ -25,7 +60,7 @@ public class EnderLiquidConduitNetwork extends AbstractConduitNetwork<ILiquidCon
List<NetworkTank> tanks = new ArrayList<NetworkTank>();
Map<NetworkTankKey, NetworkTank> tankMap = new HashMap<NetworkTankKey, NetworkTank>();
Map<NetworkTank, RoundRobinIterator<NetworkTank>> iterators;
Map<NetworkTank, TankIterator> iterators;
boolean filling;
@@ -93,17 +128,21 @@ public class EnderLiquidConduitNetwork extends AbstractConduitNetwork<ILiquidCon
int remaining = resource.amount;
//TODO: Only change starting pos of iterator is doFill is true so a false then true returns the same
for (NetworkTank target : getIteratorForTank(tank)) {
if(!target.equals(tank) && target.acceptsOuput && target.isValid() && matchedFilter(resource, target.con, target.conDir, false)) {
TankIterator iterator;
for (iterator = getIteratorForTank(tank).start(); iterator.hasNext(); ) {
NetworkTank target = iterator.next();
if (!target.equals(tank) && target.con.getOutputColor(target.conDir).equals(tank.con.getInputColor(tank.conDir)) && target.acceptsOuput && target.isValid() && matchedFilter(resource, target.con, target.conDir, false)) {
int vol = target.externalTank.fill(target.tankDir, resource.copy(), doFill);
remaining -= vol;
filled += vol;
if(remaining <= 0) {
return filled;
if (remaining <= 0) {
break;
}
resource.amount = remaining;
}
}
if (!tank.con.isRoundRobin(tank.conDir))
iterator.rewind();
return filled;
} finally {
@@ -122,13 +161,13 @@ public class EnderLiquidConduitNetwork extends AbstractConduitNetwork<ILiquidCon
return filter.matchesFilter(drained);
}
private Iterable<NetworkTank> getIteratorForTank(NetworkTank tank) {
private TankIterator getIteratorForTank(NetworkTank tank) {
if(iterators == null) {
iterators = new HashMap<NetworkTank, RoundRobinIterator<NetworkTank>>();
iterators = new HashMap<>();
}
RoundRobinIterator<NetworkTank> res = iterators.get(tank);
TankIterator res = iterators.get(tank);
if(res == null) {
res = new RoundRobinIterator<NetworkTank>(tanks);
res = new TankIterator();
iterators.put(tank, res);
}
return res;
@@ -1,6 +1,9 @@
package crazypants.enderio.conduit.liquid;
import com.enderio.core.common.util.DyeColor;
import crazypants.enderio.conduit.item.IItemConduit;
import net.minecraft.client.renderer.RenderBlocks;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.util.IIcon;
import net.minecraftforge.common.util.ForgeDirection;
import crazypants.enderio.conduit.ConnectionMode;
@@ -26,19 +29,42 @@ public class EnderLiquidConduitRenderer extends DefaultConduitRenderer {
public void renderEntity(ConduitBundleRenderer conduitBundleRenderer, IConduitBundle te, IConduit conduit, double x, double y, double z, float partialTick,
float worldLight, RenderBlocks rb) {
super.renderEntity(conduitBundleRenderer, te, conduit, x, y, z, partialTick, worldLight, rb);
EnderLiquidConduit pc = (EnderLiquidConduit) conduit;
for (ForgeDirection dir : conduit.getExternalConnections()) {
IIcon tex = null;
DyeColor inChannel = null;
DyeColor outChannel = null;
IIcon inTex = null;
IIcon outTex = null;
boolean render = true;
if(conduit.getConnectionMode(dir) == ConnectionMode.INPUT) {
tex = pc.getTextureForInputMode();
inTex = pc.getTextureForInputMode();
inChannel = pc.getInputColor(dir);
} else if(conduit.getConnectionMode(dir) == ConnectionMode.OUTPUT) {
tex = pc.getTextureForOutputMode();
outTex = pc.getTextureForOutputMode();
outChannel = pc.getOutputColor(dir);
} else if(conduit.getConnectionMode(dir) == ConnectionMode.IN_OUT) {
tex = pc.getTextureForInOutMode();
inTex = pc.getTextureForInOutMode(true);
outTex = pc.getTextureForInOutMode(false);
inChannel = pc.getInputColor(dir);
outChannel = pc.getOutputColor(dir);
} else {
render = false;
}
if(tex != null) {
if(render && !rb.hasOverrideBlockTexture()) {
Offset offset = te.getOffset(ILiquidConduit.class, dir);
ConnectionModeGeometry.renderModeConnector(dir, offset, tex, true);
ConnectionModeGeometry.renderModeConnector(dir, offset, pc.getTextureForInOutBackground(), true);
if(inChannel != null) {
Tessellator.instance.setColorOpaque_I(inChannel.getColor());
ConnectionModeGeometry.renderModeConnector(dir, offset, inTex, false);
}
if(outChannel != null) {
Tessellator.instance.setColorOpaque_I(outChannel.getColor());
ConnectionModeGeometry.renderModeConnector(dir, offset, outTex, false);
}
Tessellator.instance.setColorOpaque_F(1f, 1f, 1f);
}
}
}
@@ -0,0 +1,47 @@
package crazypants.enderio.conduit.packet;
import cpw.mods.fml.common.network.simpleimpl.IMessage;
import cpw.mods.fml.common.network.simpleimpl.IMessageHandler;
import cpw.mods.fml.common.network.simpleimpl.MessageContext;
import crazypants.enderio.conduit.liquid.EnderLiquidConduit;
import crazypants.enderio.conduit.liquid.ILiquidConduit;
import io.netty.buffer.ByteBuf;
import net.minecraftforge.common.util.ForgeDirection;
public class PacketRoundRobinMode extends AbstractConduitPacket<ILiquidConduit> implements IMessageHandler<PacketRoundRobinMode, IMessage> {
private ForgeDirection dir;
private boolean roundRobin;
public PacketRoundRobinMode() {
}
public PacketRoundRobinMode(EnderLiquidConduit eConduit, ForgeDirection dir) {
super(eConduit.getBundle().getEntity(), ConTypeEnum.FLUID);
this.dir = dir;
roundRobin = eConduit.isRoundRobin(dir);
}
@Override
public void toBytes(ByteBuf buf) {
super.toBytes(buf);
buf.writeShort(dir.ordinal());
buf.writeBoolean(roundRobin);
}
@Override
public void fromBytes(ByteBuf buf) {
super.fromBytes(buf);
dir = ForgeDirection.values()[buf.readShort()];
roundRobin = buf.readBoolean();
}
@Override
public IMessage onMessage(PacketRoundRobinMode message, MessageContext ctx) {
final ILiquidConduit conduit = message.getTileCasted(ctx);
if (conduit instanceof EnderLiquidConduit) {
((EnderLiquidConduit) conduit).setRoundRobin(message.dir, message.roundRobin);
message.getWorld(ctx).markBlockForUpdate(message.x, message.y, message.z);
}
return null;
}
}
@@ -185,6 +185,9 @@ public class ItemSoulVessel extends Item implements IResourceTooltipProvider {
if(entity instanceof EntityPlayer) {
return false;
}
if(entity.isDead) {
return false;
}
String entityId = EntityList.getEntityString(entity);
if(isBlackListed(entityId)) {
@@ -14,15 +14,15 @@ import crazypants.enderio.network.PacketHandler;
public abstract class AbstractPoweredMachineEntity extends AbstractMachineEntity implements IInternalPoweredTile {
// Power
private Capacitors capacitorType = Capacitors.BASIC_CAPACITOR;
private ICapacitor capacitor = Capacitors.BASIC_CAPACITOR.capacitor;
private Capacitors capacitorType;
private ICapacitor capacitor;
private int storedEnergyRF = 0;
private int storedEnergyRF;
protected float lastSyncPowerStored = -1;
protected AbstractPoweredMachineEntity(SlotDefinition slotDefinition) {
super(slotDefinition);
setCapacitor(Capacitors.BASIC_CAPACITOR);
capacitorType = Capacitors.BASIC_CAPACITOR;
}
@Override
@@ -40,7 +40,7 @@ public abstract class AbstractPoweredMachineEntity extends AbstractMachineEntity
return;
}
boolean powerChanged = (lastSyncPowerStored != storedEnergyRF && shouldDoWorkThisTick(5));
if(powerChanged) {
if (powerChanged) {
lastSyncPowerStored = storedEnergyRF;
PacketHandler.sendToAllAround(new PacketPowerStorage(this), this);
}
@@ -55,7 +55,7 @@ public abstract class AbstractPoweredMachineEntity extends AbstractMachineEntity
@Override
public int getMaxEnergyRecieved(ForgeDirection dir) {
if(isSideDisabled(dir.ordinal())) {
if (isSideDisabled(dir.ordinal())) {
return 0;
}
return getCapacitor().getMaxEnergyReceived();
@@ -93,18 +93,16 @@ public abstract class AbstractPoweredMachineEntity extends AbstractMachineEntity
public ICapacitor getCapacitor() {
if(capacitor != null) {
return capacitor;
}
if (capacitor != null) {
return capacitor;
} else if (capacitorType == Capacitors.TOTEMIC_CAPACITOR) {
ItemStack contents = inventory[slotDefinition.minUpgradeSlot];
if (contents != null && contents.getItem() == EnderIO.itemBasicCapacitor) {
return EnderIO.itemBasicCapacitor.getCapacitor(contents);
}
}
else if(capacitorType == Capacitors.TOTEMIC_CAPACITOR) {
ItemStack contents = inventory[slotDefinition.minUpgradeSlot];
if(contents != null && contents.getItem() == EnderIO.itemBasicCapacitor) {
return EnderIO.itemBasicCapacitor.getCapacitor(contents);
}
}
return capacitorType.capacitor;
return capacitorType.capacitor;
}
@@ -122,15 +120,13 @@ public abstract class AbstractPoweredMachineEntity extends AbstractMachineEntity
public void setCapacitor(Capacitors capacitorType) {
this.capacitorType = capacitorType;
if(capacitorType == Capacitors.TOTEMIC_CAPACITOR) {
ItemStack contents = inventory[slotDefinition.minUpgradeSlot];
if(contents != null && contents.getItem() == EnderIO.itemBasicCapacitor) {
setCapacitor(EnderIO.itemBasicCapacitor.getCapacitor(contents));
}
}
else {
this.capacitor = capacitorType.capacitor;
if (capacitorType == Capacitors.TOTEMIC_CAPACITOR) {
ItemStack contents = inventory[slotDefinition.minUpgradeSlot];
if (contents != null && contents.getItem() == EnderIO.itemBasicCapacitor) {
setCapacitor(EnderIO.itemBasicCapacitor.getCapacitor(contents));
}
} else {
this.capacitor = capacitorType.capacitor;
}
onCapacitorTypeChange();
@@ -148,7 +144,7 @@ public abstract class AbstractPoweredMachineEntity extends AbstractMachineEntity
@Override
public void setInventorySlotContents(int slot, ItemStack contents) {
super.setInventorySlotContents(slot, contents);
if(slotDefinition.isUpgradeSlot(slot)) {
if (slotDefinition.isUpgradeSlot(slot)) {
updateCapacitorFromSlot();
}
}
@@ -156,19 +152,19 @@ public abstract class AbstractPoweredMachineEntity extends AbstractMachineEntity
@Override
public ItemStack decrStackSize(int fromSlot, int amount) {
ItemStack res = super.decrStackSize(fromSlot, amount);
if(slotDefinition.isUpgradeSlot(fromSlot)) {
if (slotDefinition.isUpgradeSlot(fromSlot)) {
updateCapacitorFromSlot();
}
return res;
}
private void updateCapacitorFromSlot() {
if(slotDefinition.getNumUpgradeSlots() <= 0) {
if (slotDefinition.getNumUpgradeSlots() <= 0) {
setCapacitor(Capacitors.BASIC_CAPACITOR);
return;
}
ItemStack contents = inventory[slotDefinition.minUpgradeSlot];
if(contents == null || contents.getItem() != EnderIO.itemBasicCapacitor) {
if (contents == null || contents.getItem() != EnderIO.itemBasicCapacitor) {
setCapacitor(Capacitors.BASIC_CAPACITOR);
} else {
setCapacitor(Capacitors.values()[contents.getItemDamage()]);
@@ -183,54 +179,7 @@ public abstract class AbstractPoweredMachineEntity extends AbstractMachineEntity
@Override
public void readCommon(NBTTagCompound nbtRoot) {
super.readCommon(nbtRoot);
handleCapacitorLoading(nbtRoot);
handleStoredEnergyLoading(nbtRoot);
}
/**
* Write state common to both block and item
*/
@Override
public void writeCommon(NBTTagCompound nbtRoot) {
super.writeCommon(nbtRoot);
//Write Energy
nbtRoot.setInteger(PowerHandlerUtil.STORED_ENERGY_NBT_KEY, storedEnergyRF);
//Write Capacitor Type DEPRECATED
nbtRoot.setShort("capacitorType", (short) capacitorType.ordinal());
//Write Actual Capacitor
writeCap(nbtRoot);
}
private static final String CAPACITOR_TAG_STRING = "internalCapacitor";
private void writeCap(NBTTagCompound nbtRoot) {
NBTTagCompound cap = new NBTTagCompound();
cap.setInteger("MaxEnergyStored", capacitor.getMaxEnergyStored());
cap.setInteger("MaxEnergyExtracted", capacitor.getMaxEnergyExtracted());
cap.setInteger("MaxEnergyReceived", capacitor.getMaxEnergyReceived());
cap.setInteger("Tier", capacitor.getTier());
nbtRoot.setTag(CAPACITOR_TAG_STRING, cap);
}
private void readCap(NBTTagCompound nbtRoot) {
NBTTagCompound cap = nbtRoot.getCompoundTag(CAPACITOR_TAG_STRING);
setCapacitor(new BasicCapacitor(
cap.getInteger("Tier"),
cap.getInteger("MaxEnergyExtracted"),
cap.getInteger("MaxEnergyStored"),
cap.getInteger("MaxEnergyReceived")
));
}
private void handleCapacitorLoading(NBTTagCompound nbtRoot){
if (nbtRoot.hasKey(CAPACITOR_TAG_STRING))
readCap(nbtRoot);
else //Read Capacitor Type DEPRECATED
setCapacitor(Capacitors.values()[nbtRoot.getShort("capacitorType")]);
}
private void handleStoredEnergyLoading(NBTTagCompound nbtRoot){
setCapacitor(Capacitors.values()[nbtRoot.getShort("capacitorType")]);
int energy;
if (nbtRoot.hasKey("storedEnergy")) {
float storedEnergyMJ = nbtRoot.getFloat("storedEnergy");
@@ -240,4 +189,14 @@ public abstract class AbstractPoweredMachineEntity extends AbstractMachineEntity
}
setEnergyStored(energy);
}
}
/**
* Write state common to both block and item
*/
@Override
public void writeCommon(NBTTagCompound nbtRoot) {
super.writeCommon(nbtRoot);
nbtRoot.setInteger(PowerHandlerUtil.STORED_ENERGY_NBT_KEY, storedEnergyRF);
nbtRoot.setShort("capacitorType", (short) capacitorType.ordinal());
}
}
@@ -409,7 +409,7 @@ public class TileCapBank extends TileEntityEio implements IInternalPowerReceiver
@Override
@SideOnly(Side.CLIENT)
public AxisAlignedBB getRenderBoundingBox() {
if(!type.isMultiblock() || !(network instanceof CapBankClientNetwork)) {
if(!getType().isMultiblock() || !(network instanceof CapBankClientNetwork)) {
return super.getRenderBoundingBox();
}
@@ -24,6 +24,7 @@ import crazypants.enderio.machine.farm.farmers.PlantableFarmer;
import crazypants.enderio.machine.farm.farmers.RubberTreeFarmerIC2;
import crazypants.enderio.machine.farm.farmers.StemFarmer;
import crazypants.enderio.machine.farm.farmers.TreeFarmer;
import crazypants.enderio.machine.farm.farmers.ForestryFarmer;
public final class FarmersRegistry {
@@ -34,13 +35,10 @@ public final class FarmersRegistry {
addExtraUtilities();
addNatura();
addTiC();
addStillHungry();
addIC2();
addMFR();
addThaumcraft();
addFlowers();
addGrowableOres();
addImmersiveEngineering();
ForestryFarmer.init();
FarmersCommune.joinCommune(new StemFarmer(Blocks.reeds, new ItemStack(Items.reeds)));
FarmersCommune.joinCommune(new StemFarmer(Blocks.cactus, new ItemStack(Blocks.cactus)));
@@ -178,16 +176,6 @@ public final class FarmersRegistry {
}
}
private static void addMFR() {
String mod = "MineFactoryReloaded";
String blockName = "rubberwood.sapling";
Block saplingBlock = GameRegistry.findBlock(mod, blockName);
if(saplingBlock != null) {
FarmersCommune.joinCommune(new TreeFarmer(saplingBlock, GameRegistry.findBlock(mod, "rubberwood.log")));
}
}
private static void addIC2() {
RubberTreeFarmerIC2 rtf = new RubberTreeFarmerIC2();
if(rtf.isValid()) {
@@ -195,11 +183,6 @@ public final class FarmersRegistry {
}
}
private static void addStillHungry() {
String mod = "stillhungry";
addPickable(mod, "grapeBlock", "StillHungry_grapeSeed");
}
private static void addExtraUtilities() {
String mod = "ExtraUtilities";
String name = "plant/ender_lilly";
@@ -219,36 +202,6 @@ public final class FarmersRegistry {
GameRegistry.findBlock("Botany", "flower"),
GameRegistry.findBlock("Botania", "flower") ) );
}
@SuppressWarnings("unchecked")
private static void addGrowableOres() {
String mod = "B0bGrowsOre";
if (!Loader.isModLoaded(mod)) {
return;
}
Pattern[] growableOres = { Pattern.compile("(.+)Reed"), Pattern.compile("oreGrowable(.+)") };
Iterator<Block> blockIter = Block.blockRegistry.iterator();
while (blockIter.hasNext()) {
Block block = blockIter.next();
String name = Block.blockRegistry.getNameForObject(block);
if (name != null && name.startsWith(mod)) {
for (Pattern blockPattern : growableOres) {
if (blockPattern.matcher(name).find()) {
FarmersCommune.joinCommune(new StemFarmer(block, new ItemStack(block)));
}
}
}
}
}
private static void addImmersiveEngineering() {
Block hemp = GameRegistry.findBlock("ImmersiveEngineering", "hemp");
Item hempSeed = GameRegistry.findItem("ImmersiveEngineering", "hemp");
if (hemp != null && hempSeed != null) {
FarmersCommune.joinCommune(new StemFarmer(hemp, new ItemStack(hempSeed)));
}
}
private FarmersRegistry() {
}
@@ -0,0 +1,68 @@
package crazypants.enderio.machine.farm.farmers;
import com.enderio.core.common.util.BlockCoord;
import cpw.mods.fml.common.registry.GameRegistry;
import crazypants.enderio.Log;
import crazypants.enderio.machine.farm.TileFarmStation;
import forestry.api.arboriculture.EnumGermlingType;
import forestry.api.arboriculture.ITree;
import forestry.api.arboriculture.ITreeRoot;
import forestry.api.genetics.AlleleManager;
import net.minecraft.block.Block;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
public class ForestryFarmer implements IFarmerJoe {
private ITreeRoot root;
private Item forestrySapling;
private ForestryFarmer(ITreeRoot root, Item forestrySapling) {
this.root = root;
this.forestrySapling = forestrySapling;
}
public static void init() {
ITreeRoot root = (ITreeRoot) AlleleManager.alleleRegistry.getSpeciesRoot("rootTrees");
Item forestrySapling = GameRegistry.findItem("Forestry", "sapling");
if (root != null && forestrySapling != null) {
FarmersCommune.joinCommune(new ForestryFarmer(root, forestrySapling));
Log.info("ForestryFarmer engaged.");
} else {
Log.info("ForestryFarmer borked.");
}
}
@Override
public boolean canPlant(ItemStack stack) {
return stack != null && stack.getItem() == forestrySapling && root.getType(stack) == EnumGermlingType.SAPLING;
}
@Override
public boolean prepareBlock(TileFarmStation farm, BlockCoord bc, Block block, int meta) {
ItemStack sapling = farm.getSeedTypeInSuppliesFor(bc);
ITree tree = root.getMember(sapling);
if (tree != null && tree.canStay(farm.getWorldObj(), bc.x, bc.y, bc.z)) {
farm.takeSeedFromSupplies(sapling, bc, false);
root.plantSapling(farm.getWorldObj(), tree, farm.getFakePlayer().getGameProfile(), bc.x, bc.y, bc.z);
return true;
}
return false;
}
@Override
public boolean canHarvest(TileFarmStation farm, BlockCoord bc, Block block, int meta) {
return false;
}
@Override
public IHarvestResult harvestBlock(TileFarmStation farm, BlockCoord bc, Block block, int meta) {
return null;
}
}
@@ -128,25 +128,25 @@ public class RecipeConfig {
for (RecipeGroup group : userConfig.getRecipeGroups().values()) {
if(!group.enabled) {
if(recipeGroups.remove(group.name) != null) {
Log.info("Disabled core recipe group " + group.name + " due to user config.");
Log.debug("Disabled core recipe group " + group.name + " due to user config.");
}
} else {
RecipeGroup modifyGroup = recipeGroups.get(group.name);
if(modifyGroup == null) {
Log.info("Added user defined recipe group " + group.name);
Log.debug("Added user defined recipe group " + group.name);
modifyGroup = new RecipeGroup(group.name);
recipeGroups.put(group.name, modifyGroup);
}
for (RecipeElement recipe : group.recipes.values()) {
if(recipe.isValid()) {
if(modifyGroup.recipes.containsKey(recipe.name)) {
Log.info("Replacing core recipe " + recipe.name + " with user defined recipe.");
Log.debug("Replacing core recipe " + recipe.name + " with user defined recipe.");
} else {
Log.info("Added user defined recipe " + recipe.name);
Log.debug("Added user defined recipe " + recipe.name);
}
modifyGroup.addRecipe(recipe);
} else {
Log.info("Removed recipe " + recipe.name + " due to user config.");
Log.debug("Removed recipe " + recipe.name + " due to user config.");
modifyGroup.recipes.remove(recipe.name);
}
}
@@ -48,6 +48,7 @@ public class TileTransceiver extends AbstractPoweredTaskEntity implements IFluid
private final SetMultimap<ChannelType, Channel> sendChannels = MultimapBuilder.enumKeys(ChannelType.class).hashSetValues().build();
private final SetMultimap<ChannelType, Channel> recieveChannels = MultimapBuilder.enumKeys(ChannelType.class).hashSetValues().build();
private final ICapacitor capacitor = new BasicCapacitor(0, Config.transceiverMaxIoRF * 2, 500000, Config.transceiverMaxIoRF);
private boolean sendChannelsDirty = false;
private boolean recieveChannelsDirty = false;
private boolean registered = false;
@@ -73,7 +74,6 @@ public class TileTransceiver extends AbstractPoweredTaskEntity implements IFluid
sendItemFilter = new ItemFilter(true);
recieveItemFilter = new ItemFilter(true);
setCapacitor(new BasicCapacitor(0,Config.transceiverMaxIoRF * 2, 500000, Config.transceiverMaxIoRF));
}
public EnderRailController getRailController() {
@@ -160,6 +160,12 @@ public class TileTransceiver extends AbstractPoweredTaskEntity implements IFluid
return hasPower();
}
@Override
public ICapacitor getCapacitor() {
return capacitor;
}
@Override
public int getPowerUsePerTick() {
return Config.transceiverUpkeepCostRF;
@@ -118,7 +118,7 @@ public class BlockFusedQuartz extends BlockEio {
int meta = world.getBlockMetadata(x, y, z);
Type type = Type.byMeta(meta);
if (type.blastResistance) {
return 2000;
return 20;
} else {
return super.getExplosionResistance(par1Entity);
}
@@ -36,6 +36,7 @@ public class NEIEnderIOConfig implements IConfigureNEI {
API.registerGuiOverlayHandler(GuiInventoryPanel.class, new InventoryPanelNEIOverlayHandler(), "crafting");
API.hideItem(new ItemStack(EnderIO.blockConduitFacade));
API.hideItem(new ItemStack(EnderIO.blockLightNode));
API.hideItem(new ItemStack(EnderIO.itemEnderface));
API.hideItem(PainterUtil.applyDefaultPaintedState(new ItemStack(EnderIO.blockPaintedCarpet)));
API.hideItem(PainterUtil.applyDefaultPaintedState(new ItemStack(EnderIO.blockPaintedSlab)));
@@ -22,8 +22,8 @@ public class BasicCapacitor implements ICapacitor {
this(tier, maxEnergyIO, maxEnergyStored, maxEnergyIO);
}
public BasicCapacitor(int tier, int maxEnergyIn, int maxEnergyStored, int maxEnergyOut) {
configure(tier, maxEnergyIn, maxEnergyStored, maxEnergyOut);
public BasicCapacitor(int tier, int maxEnergyReceived, int maxEnergyStored, int maxEnergyExtracted) {
configure(tier, maxEnergyReceived, maxEnergyStored, maxEnergyExtracted);
}