Wireless Terminal now respects WAPs and distances.

Finished Wireless Terminal.
Added WAP Gui.
Added Battery Config.
Added Wireless Config.
Fixed bug with dense cable channels, and the controller.
This commit is contained in:
AlgorithmX2 2014-02-03 22:23:14 -06:00
parent 8b81545abf
commit 6de529a889
14 changed files with 154 additions and 18 deletions

View file

@ -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;
}
}

View file

@ -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() );
}
}
}

View file

@ -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() )

View file

@ -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;

View file

@ -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),

View file

@ -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<IAEItemStack> 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;
}

View file

@ -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

View file

@ -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<String, InWorldToolOperationResult>();
coolDown.put( Block.stone.blockID + ":0", new InWorldToolOperationResult( new ItemStack( Block.cobblestone ) ) );

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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());

View file

@ -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

View file

@ -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
}
}