diff --git a/block/networking/BlockWireless.java b/block/networking/BlockWireless.java index be63be9d7..880595b0b 100644 --- a/block/networking/BlockWireless.java +++ b/block/networking/BlockWireless.java @@ -6,6 +6,7 @@ import java.util.List; import net.minecraft.block.material.Material; import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.Icon; import net.minecraft.world.World; @@ -14,8 +15,10 @@ import appeng.block.AEBaseBlock; import appeng.client.render.BaseBlockRender; import appeng.client.render.blocks.RenderBlockWireless; import appeng.core.features.AEFeature; +import appeng.core.sync.GuiBridge; import appeng.helpers.ICustomCollision; import appeng.tile.networking.TileWireless; +import appeng.util.Platform; public class BlockWireless extends AEBaseBlock implements ICustomCollision { @@ -166,4 +169,20 @@ public class BlockWireless extends AEBaseBlock implements ICustomCollision out.add( AxisAlignedBB.getAABBPool().getAABB( 0.0, 0.0, 0.0, 1.0, 1.0, 1.0 ) ); } + @Override + public boolean onActivated(World w, int x, int y, int z, EntityPlayer p, int side, float hitX, float hitY, float hitZ) + { + if ( p.isSneaking() ) + return false; + + TileWireless tg = getTileEntity( w, x, y, z ); + if ( tg != null ) + { + if ( Platform.isServer() ) + Platform.openGUI( p, tg, ForgeDirection.getOrientation( side ), GuiBridge.GUI_WIRELESS ); + return true; + } + return false; + } + } diff --git a/container/implementations/ContainerWirelessTerm.java b/container/implementations/ContainerWirelessTerm.java index caf087a34..2d01949b7 100644 --- a/container/implementations/ContainerWirelessTerm.java +++ b/container/implementations/ContainerWirelessTerm.java @@ -1,6 +1,7 @@ package appeng.container.implementations; import net.minecraft.entity.player.InventoryPlayer; +import appeng.core.Configuration; import appeng.core.localization.PlayerMessages; import appeng.helpers.WirelessTerminalGuiObject; @@ -24,5 +25,9 @@ public class ContainerWirelessTerm extends ContainerMEPortableCell getPlayerInv().player.closeScreen(); getPlayerInv().player.sendChatToPlayer( PlayerMessages.OutOfRange.get() ); } + else + { + powerMultiplier = Configuration.instance.wireless_getDrainRate( wtgo.getRange() ); + } } } diff --git a/core/Configuration.java b/core/Configuration.java index 1425b9e66..ba36aa402 100644 --- a/core/Configuration.java +++ b/core/Configuration.java @@ -40,11 +40,17 @@ public class Configuration extends net.minecraftforge.common.Configuration imple private double WirelessBaseCost = 8; private double WirelessCostMultiplier = 1; private double WirelessHighWirelessCount = 64; + private double WirelessTerminalDrainMultiplier = 1; private double WirelessBaseRange = 16; private double WirelessBoosterRangeMultiplier = 1; private double WirelessBoosterExp = 1.5; + public double wireless_getDrainRate(double range) + { + return WirelessTerminalDrainMultiplier * range; + } + public double wireless_getMaxRange(int boosters) { return WirelessBaseRange + WirelessBoosterRangeMultiplier * Math.pow( boosters, WirelessBoosterExp ); @@ -74,7 +80,12 @@ public class Configuration extends net.minecraftforge.common.Configuration imple public double oreDoublePercentage = 90.0; public boolean enableEffects = true; - public boolean enableNetworkProfiler = true; + + public int wireless_battery = 1600000; + public int manipulator_battery = 200000; + public int mattercannon_battery = 200000; + public int portablecell_battery = 20000; + public int staff_battery = 8000; public Configuration(File f) { super( new File( f.getPath() + File.separator + "AppliedEnergistics2" + File.separator + "AppliedEnergistics2.cfg" ) ); @@ -97,13 +108,27 @@ public class Configuration extends net.minecraftforge.common.Configuration imple grinderOres = get( "GrindStone", "grinderOres", grinderOres ).getStringList(); oreDoublePercentage = get( "GrindStone", "oreDoublePercentage", oreDoublePercentage ).getDouble( oreDoublePercentage ); enableEffects = get( "Client", "enableEffects", true ).getBoolean( true ); - enableNetworkProfiler = get( "Server", "enableNetworkProfiler", true ).getBoolean( true ); // settings.registerSetting( Settings.SEARCH_MODS, YesNo.YES ); settings.registerSetting( Settings.SEARCH_TOOLTIPS, YesNo.YES ); settings.registerSetting( Settings.SORT_BY, SortOrder.NAME ); settings.registerSetting( Settings.SORT_DIRECTION, SortDir.ASCENDING ); + WirelessBaseCost = get( "wireless", "WirelessBaseCost", WirelessBaseCost ).getDouble( WirelessBaseCost ); + WirelessCostMultiplier = get( "wireless", "WirelessCostMultiplier", WirelessCostMultiplier ).getDouble( WirelessCostMultiplier ); + WirelessBaseRange = get( "wireless", "WirelessBaseRange", WirelessBaseRange ).getDouble( WirelessBaseRange ); + WirelessBoosterRangeMultiplier = get( "wireless", "WirelessBoosterRangeMultiplier", WirelessBoosterRangeMultiplier ).getDouble( + WirelessBoosterRangeMultiplier ); + WirelessBoosterExp = get( "wireless", "WirelessBoosterExp", WirelessBoosterExp ).getDouble( WirelessBoosterExp ); + WirelessTerminalDrainMultiplier = get( "wireless", "WirelessTerminalDrainMultiplier", WirelessTerminalDrainMultiplier ).getDouble( + WirelessTerminalDrainMultiplier ); + + wireless_battery = get( "battery", "wireless", wireless_battery ).getInt( wireless_battery ); + staff_battery = get( "battery", "staff", staff_battery ).getInt( staff_battery ); + manipulator_battery = get( "battery", "manipulator", manipulator_battery ).getInt( manipulator_battery ); + portablecell_battery = get( "battery", "portablecell", portablecell_battery ).getInt( portablecell_battery ); + mattercannon_battery = get( "battery", "mattercannon", mattercannon_battery ).getInt( mattercannon_battery ); + for (AEFeature feature : AEFeature.values()) { if ( feature.isVisible() ) diff --git a/core/localization/GuiText.java b/core/localization/GuiText.java index e51d54f56..d2ab627aa 100644 --- a/core/localization/GuiText.java +++ b/core/localization/GuiText.java @@ -21,7 +21,7 @@ public enum GuiText StorageBus, Priority, Security, Encoded, Blank, Unlinked, Linked, - SecurityCardEditor, NoPermissions, WirelessTerminal, + SecurityCardEditor, NoPermissions, WirelessTerminal, Wireless, METunnel, ItemTunnel, RedstoneTunnel, MJTunnel, EUTunnel, FluidTunnel; diff --git a/core/sync/GuiBridge.java b/core/sync/GuiBridge.java index ffe057f55..2ba6333ad 100644 --- a/core/sync/GuiBridge.java +++ b/core/sync/GuiBridge.java @@ -46,6 +46,7 @@ import appeng.container.implementations.ContainerSecurity; import appeng.container.implementations.ContainerStorageBus; import appeng.container.implementations.ContainerUpgradeable; import appeng.container.implementations.ContainerVibrationChamber; +import appeng.container.implementations.ContainerWireless; import appeng.container.implementations.ContainerWirelessTerm; import appeng.helpers.IInterfaceHost; import appeng.helpers.IPriorityHost; @@ -58,6 +59,7 @@ import appeng.tile.misc.TileCellWorkbench; import appeng.tile.misc.TileCondenser; import appeng.tile.misc.TileSecurity; import appeng.tile.misc.TileVibrationChamber; +import appeng.tile.networking.TileWireless; import appeng.tile.qnb.TileQuantumBridge; import appeng.tile.storage.TileChest; import appeng.tile.storage.TileDrive; @@ -76,6 +78,8 @@ public enum GuiBridge implements IGuiHandler GUI_CHEST(ContainerChest.class, TileChest.class, false, SecurityPermissions.BUILD), + GUI_WIRELESS(ContainerWireless.class, TileWireless.class, false, SecurityPermissions.BUILD), + GUI_ME(ContainerMEMonitorable.class, IStorageMonitorable.class, false, null), GUI_PORTABLE_CELL(ContainerMEPortableCell.class, IPortableCell.class, true, null), diff --git a/helpers/WirelessTerminalGuiObject.java b/helpers/WirelessTerminalGuiObject.java index 2996527f0..e6965fdcc 100644 --- a/helpers/WirelessTerminalGuiObject.java +++ b/helpers/WirelessTerminalGuiObject.java @@ -13,6 +13,7 @@ import appeng.api.implementations.guiobjects.IPortableCell; import appeng.api.networking.IGrid; import appeng.api.networking.IGridHost; import appeng.api.networking.IGridNode; +import appeng.api.networking.IMachineSet; import appeng.api.networking.security.BaseActionSource; import appeng.api.networking.storage.IStorageGrid; import appeng.api.storage.IMEMonitor; @@ -21,6 +22,7 @@ import appeng.api.storage.StorageChannel; import appeng.api.storage.data.IAEFluidStack; import appeng.api.storage.data.IAEItemStack; import appeng.api.storage.data.IItemList; +import appeng.tile.networking.TileWireless; public class WirelessTerminalGuiObject implements IPortableCell { @@ -31,10 +33,19 @@ public class WirelessTerminalGuiObject implements IPortableCell IGrid targetGrid; IStorageGrid sg; IMEMonitor itemStorage; + TileWireless myWap; + + double sqRange = Double.MAX_VALUE; + double myRange = Double.MAX_VALUE; EntityPlayer myPlayer; public ItemStack effectiveItem; + public double getRange() + { + return myRange; + } + public WirelessTerminalGuiObject(IWirelessTermHandler wh, ItemStack is, EntityPlayer ep, World w, int x, int y, int z) { encryptionKey = wh.getEncryptionKey( is ); effectiveItem = is; @@ -61,10 +72,57 @@ public class WirelessTerminalGuiObject implements IPortableCell public boolean rangeCheck() { + sqRange = myRange = Double.MAX_VALUE; + if ( targetGrid != null && itemStorage != null ) { + if ( myWap != null ) + { + if ( myWap.getGridNode( ForgeDirection.UNKNOWN ).getGrid() == targetGrid ) + { + if ( testWap( myWap ) ) + return true; + } + return false; + } - return true; + IMachineSet tw = targetGrid.getMachines( TileWireless.class ); + + myWap = null; + + for (IGridNode n : tw) + { + TileWireless wap = (TileWireless) n.getMachine(); + if ( testWap( wap ) ) + myWap = wap; + } + + return myWap != null; + } + return false; + } + + private boolean testWap(TileWireless wap) + { + double rangeLimit = wap.getRange(); + rangeLimit *= rangeLimit; + + if ( wap.worldObj == myPlayer.worldObj ) + { + double offX = (double) wap.xCoord - myPlayer.posX; + double offY = (double) wap.yCoord - myPlayer.posY; + double offZ = (double) wap.zCoord - myPlayer.posZ; + + double r = offX * offX + offY * offY + offZ * offZ; + if ( r < rangeLimit && sqRange > r ) + { + if ( wap.getGridNode( ForgeDirection.UNKNOWN ).isActive() ) + { + sqRange = r; + myRange = Math.sqrt( r ); + return true; + } + } } return false; } diff --git a/items/tools/powered/ToolChargedStaff.java b/items/tools/powered/ToolChargedStaff.java index 9de6494dc..4a9671912 100644 --- a/items/tools/powered/ToolChargedStaff.java +++ b/items/tools/powered/ToolChargedStaff.java @@ -6,6 +6,7 @@ import java.util.EnumSet; import net.minecraft.entity.EntityLivingBase; import net.minecraft.item.ItemStack; import net.minecraft.util.DamageSource; +import appeng.core.Configuration; import appeng.core.features.AEFeature; import appeng.core.sync.packets.PacketLightning; import appeng.items.tools.powered.powersink.AEBasePoweredItem; @@ -18,7 +19,7 @@ public class ToolChargedStaff extends AEBasePoweredItem public ToolChargedStaff() { super( ToolChargedStaff.class, null ); setfeature( EnumSet.of( AEFeature.ChargedStaff, AEFeature.PoweredTools ) ); - maxStoredPower = 8000; + maxStoredPower = Configuration.instance.staff_battery; } @Override diff --git a/items/tools/powered/ToolEntropyManipulator.java b/items/tools/powered/ToolEntropyManipulator.java index ea0e520fa..41d5163e8 100644 --- a/items/tools/powered/ToolEntropyManipulator.java +++ b/items/tools/powered/ToolEntropyManipulator.java @@ -17,6 +17,7 @@ import net.minecraft.util.EnumMovingObjectType; import net.minecraft.util.MovingObjectPosition; import net.minecraft.world.World; import net.minecraftforge.common.ForgeDirection; +import appeng.core.Configuration; import appeng.core.features.AEFeature; import appeng.items.tools.powered.powersink.AEBasePoweredItem; import appeng.util.InWorldToolOperationResult; @@ -103,6 +104,7 @@ public class ToolEntropyManipulator extends AEBasePoweredItem public ToolEntropyManipulator() { super( ToolEntropyManipulator.class, null ); setfeature( EnumSet.of( AEFeature.EntropyManipulator, AEFeature.PoweredTools ) ); + maxStoredPower = Configuration.instance.manipulator_battery; coolDown = new Hashtable(); coolDown.put( Block.stone.blockID + ":0", new InWorldToolOperationResult( new ItemStack( Block.cobblestone ) ) ); diff --git a/items/tools/powered/ToolMassCannon.java b/items/tools/powered/ToolMassCannon.java index c1ee5b80c..7610efd1a 100644 --- a/items/tools/powered/ToolMassCannon.java +++ b/items/tools/powered/ToolMassCannon.java @@ -48,6 +48,7 @@ public class ToolMassCannon extends AEBasePoweredItem implements IStorageCell public ToolMassCannon() { super( ToolMassCannon.class, null ); setfeature( EnumSet.of( AEFeature.MatterCannon, AEFeature.PoweredTools ) ); + maxStoredPower = Configuration.instance.mattercannon_battery; } @Override diff --git a/items/tools/powered/ToolPortableCell.java b/items/tools/powered/ToolPortableCell.java index 41514a0c4..d8593b053 100644 --- a/items/tools/powered/ToolPortableCell.java +++ b/items/tools/powered/ToolPortableCell.java @@ -16,6 +16,7 @@ import appeng.api.implementations.items.IStorageCell; import appeng.api.storage.IMEInventory; import appeng.api.storage.StorageChannel; import appeng.api.storage.data.IAEItemStack; +import appeng.core.Configuration; import appeng.core.features.AEFeature; import appeng.core.localization.GuiText; import appeng.core.sync.GuiBridge; @@ -33,7 +34,7 @@ public class ToolPortableCell extends AEBasePoweredItem implements IStorageCell, public ToolPortableCell() { super( ToolPortableCell.class, null ); setfeature( EnumSet.of( AEFeature.PortableCell, AEFeature.StorageCells, AEFeature.PoweredTools ) ); - maxStoredPower = 20000; + maxStoredPower = Configuration.instance.portablecell_battery; } @Override diff --git a/items/tools/powered/ToolWirelessTerminal.java b/items/tools/powered/ToolWirelessTerminal.java index 147e3ead6..223876366 100644 --- a/items/tools/powered/ToolWirelessTerminal.java +++ b/items/tools/powered/ToolWirelessTerminal.java @@ -10,6 +10,7 @@ import net.minecraft.util.StatCollector; import net.minecraft.world.World; import appeng.api.AEApi; import appeng.api.features.IWirelessTermHandler; +import appeng.core.Configuration; import appeng.core.features.AEFeature; import appeng.core.localization.GuiText; import appeng.items.tools.powered.powersink.AEBasePoweredItem; @@ -18,12 +19,10 @@ import appeng.util.Platform; public class ToolWirelessTerminal extends AEBasePoweredItem implements IWirelessTermHandler { - String name; - int DISTNACE_CALC = 2; - public ToolWirelessTerminal() { super( ToolWirelessTerminal.class, null ); setfeature( EnumSet.of( AEFeature.WirelessAccessTerminal, AEFeature.PoweredTools ) ); + maxStoredPower = Configuration.instance.wireless_battery; } @Override diff --git a/parts/networking/PartCable.java b/parts/networking/PartCable.java index c5c21e620..2fd9abae4 100644 --- a/parts/networking/PartCable.java +++ b/parts/networking/PartCable.java @@ -96,7 +96,8 @@ public class PartCable extends AEBasePart implements IPartCable return CableBusTextures.MECable_Yellow.getIcon(); default: } - return AEApi.instance().parts().partCableGlass.item( AEColor.Transparent ).getIconIndex( AEApi.instance().parts().partCableGlass.stack( AEColor.Transparent, 1 ) ); + return AEApi.instance().parts().partCableGlass.item( AEColor.Transparent ).getIconIndex( + AEApi.instance().parts().partCableGlass.stack( AEColor.Transparent, 1 ) ); } public Icon getTexture(AEColor c) @@ -142,7 +143,8 @@ public class PartCable extends AEBasePart implements IPartCable return CableBusTextures.MECovered_Yellow.getIcon(); default: } - return AEApi.instance().parts().partCableCovered.item( AEColor.Transparent ).getIconIndex( AEApi.instance().parts().partCableCovered.stack( AEColor.Transparent, 1 ) ); + return AEApi.instance().parts().partCableCovered.item( AEColor.Transparent ).getIconIndex( + AEApi.instance().parts().partCableCovered.stack( AEColor.Transparent, 1 ) ); } public Icon getSmartTexture(AEColor c) @@ -183,8 +185,8 @@ public class PartCable extends AEBasePart implements IPartCable return CableBusTextures.MESmart_Yellow.getIcon(); default: } - - return is.getIconIndex(); + return AEApi.instance().parts().partCableCovered.item( AEColor.Transparent ).getIconIndex( + AEApi.instance().parts().partCableSmart.stack( AEColor.Transparent, 1 ) ); } @Override @@ -242,7 +244,10 @@ public class PartCable extends AEBasePart implements IPartCable ForgeDirection side = gc.getDirection( n ); if ( side != ForgeDirection.UNKNOWN ) { - if ( proxy.getNode().hasFlag( GridFlags.TIER_2_CAPACITY ) && gc.getOtherSide( proxy.getNode() ).hasFlag( GridFlags.TIER_2_CAPACITY ) ) + boolean isTier2a = proxy.getNode().hasFlag( GridFlags.TIER_2_CAPACITY ); + boolean isTier2b = gc.getOtherSide( proxy.getNode() ).hasFlag( GridFlags.TIER_2_CAPACITY ); + + if ( isTier2a && isTier2b ) sideOut |= (gc.getUsedChannels() / 4) << (4 * side.ordinal()); else sideOut |= gc.getUsedChannels() << (4 * side.ordinal()); diff --git a/tile/networking/TileController.java b/tile/networking/TileController.java index 724cb0bff..2408930e1 100644 --- a/tile/networking/TileController.java +++ b/tile/networking/TileController.java @@ -29,7 +29,7 @@ public class TileController extends AENetworkPowerTile implements IAEPowerStorag internalMaxPower = 8000; internalPublicPowerStorage = true; gridProxy.setIdlePowerUsage( 6 ); - gridProxy.setFlags( GridFlags.CANNOT_CARRY ); + gridProxy.setFlags( GridFlags.CANNOT_CARRY, GridFlags.TIER_2_CAPACITY ); } @Override diff --git a/tile/networking/TileWireless.java b/tile/networking/TileWireless.java index 4815dbe60..76586adbe 100644 --- a/tile/networking/TileWireless.java +++ b/tile/networking/TileWireless.java @@ -125,15 +125,14 @@ public class TileWireless extends AENetworkInvTile } @Override - public void onChangeInventory(IInventory inv, int slot, InvOperation mc, ItemStack removed, ItemStack added) + public void onInventoryChanged() { updatePower(); } private void updatePower() { - ItemStack boosters = inv.getStackInSlot( 0 ); - gridProxy.setIdlePowerUsage( Configuration.instance.wireless_getPowerDrain( boosters == null ? 0 : boosters.stackSize ) ); + gridProxy.setIdlePowerUsage( Configuration.instance.wireless_getPowerDrain( getBoosters() ) ); } @Override @@ -142,4 +141,21 @@ public class TileWireless extends AENetworkInvTile return sides; } + public double getRange() + { + return Configuration.instance.wireless_getMaxRange( getBoosters() ); + } + + private int getBoosters() + { + ItemStack boosters = inv.getStackInSlot( 0 ); + return boosters == null ? 0 : boosters.stackSize; + } + + @Override + public void onChangeInventory(IInventory inv, int slot, InvOperation mc, ItemStack removed, ItemStack added) + { + // :P + } + }