Removed Dropped Features.

Implemented Spatial Storage.
Fixed bug with ME Chest saying the cell was un-readable.
This commit is contained in:
AlgorithmX2
2014-03-05 01:27:42 -06:00
parent d5182da346
commit 040e948d8e
29 changed files with 606 additions and 324 deletions
+9 -11
View File
@@ -8,7 +8,7 @@ import net.minecraft.world.World;
import appeng.block.AEBaseBlock;
import appeng.core.features.AEFeature;
import appeng.tile.misc.TileInscriber;
import appeng.util.Platform;
import appeng.tile.misc.TileInterface;
public class BlockInscriber extends AEBaseBlock
{
@@ -20,21 +20,19 @@ public class BlockInscriber extends AEBaseBlock
}
@Override
public boolean onActivated(World w, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ)
public boolean onActivated(World w, int x, int y, int z, EntityPlayer p, int side, float hitX, float hitY, float hitZ)
{
if ( player.isSneaking() )
if ( p.isSneaking() )
return false;
if ( Platform.isServer() )
TileInterface tg = getTileEntity( w, x, y, z );
if ( tg != null )
{
TileInscriber tc = getTileEntity( w, x, y, z );
if ( tc != null )
{
tc.activate( player );
}
// if ( Platform.isServer() )
// Platform.openGUI( p, tg, ForgeDirection.getOrientation( side ), GuiBridge.GUI_INSCRIBER );
return true;
}
return true;
return false;
}
}
-40
View File
@@ -1,40 +0,0 @@
package appeng.block.misc;
import java.util.EnumSet;
import net.minecraft.block.material.Material;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.world.World;
import appeng.block.AEBaseBlock;
import appeng.core.features.AEFeature;
import appeng.tile.misc.TileNetworkEmitter;
import appeng.util.Platform;
public class BlockNetworkEmitter extends AEBaseBlock
{
public BlockNetworkEmitter() {
super( BlockNetworkEmitter.class, Material.iron );
setfeature( EnumSet.of( AEFeature.Core ) );
setTileEntiy( TileNetworkEmitter.class );
}
@Override
public boolean onActivated(World w, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ)
{
if ( player.isSneaking() )
return false;
if ( Platform.isServer() )
{
TileNetworkEmitter tc = getTileEntity( w, x, y, z );
if ( tc != null )
{
tc.activate( player );
}
}
return true;
}
}
-40
View File
@@ -1,40 +0,0 @@
package appeng.block.misc;
import java.util.EnumSet;
import net.minecraft.block.material.Material;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.world.World;
import appeng.block.AEBaseBlock;
import appeng.core.features.AEFeature;
import appeng.tile.misc.TileQuartzCrystalizer;
import appeng.util.Platform;
public class BlockQuartzCrystalizer extends AEBaseBlock
{
public BlockQuartzCrystalizer() {
super( BlockQuartzCrystalizer.class, Material.iron );
setfeature( EnumSet.of( AEFeature.Core ) );
setTileEntiy( TileQuartzCrystalizer.class );
}
@Override
public boolean onActivated(World w, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ)
{
if ( player.isSneaking() )
return false;
if ( Platform.isServer() )
{
TileQuartzCrystalizer tc = getTileEntity( w, x, y, z );
if ( tc != null )
{
tc.activate( player );
}
}
return true;
}
}
+20
View File
@@ -4,10 +4,14 @@ import java.util.EnumSet;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
import appeng.block.AEBaseBlock;
import appeng.core.features.AEFeature;
import appeng.core.sync.GuiBridge;
import appeng.tile.spatial.TileSpatialIOPort;
import appeng.util.Platform;
public class BlockSpatialIOPort extends AEBaseBlock
{
@@ -26,4 +30,20 @@ public class BlockSpatialIOPort extends AEBaseBlock
te.updateRedstoneState();
}
@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;
TileSpatialIOPort tg = getTileEntity( w, x, y, z );
if ( tg != null )
{
if ( Platform.isServer() )
Platform.openGUI( p, tg, ForgeDirection.getOrientation( side ), GuiBridge.GUI_SPATIALIOPORT );
return true;
}
return false;
}
}
+2 -2
View File
@@ -55,8 +55,8 @@ public class BlockChest extends AEBaseBlock
tg.openGui( p, ch, cell, side );
}
p.addChatMessage( PlayerMessages.ChestCannotReadStorageCell.get() );
else
p.addChatMessage( PlayerMessages.ChestCannotReadStorageCell.get() );
}
else
p.addChatMessage( PlayerMessages.MachineNotPowered.get() );
@@ -25,7 +25,7 @@ public class GuiSpatialIOPort extends AEBaseGui
public void drawFG(int offsetX, int offsetY, int mouseX, int mouseY)
{
fontRendererObj.drawString( GuiText.SpatialIOPort.getLocal(), 8, 6, 4210752 );
fontRendererObj.drawString( GuiText.inventory.getLocal(), 8, ySize - 96 + 3, 4210752 );
fontRendererObj.drawString( GuiText.inventory.getLocal(), 8, ySize - 96, 4210752 );
}
}
@@ -17,10 +17,10 @@ public class ContainerSpatialIOPort extends AEBaseContainer
super( ip, te, null );
myte = te;
addSlotToContainer( new SlotRestrictedInput( PlaceableItemType.SPATIAL_STORAGE_CELLS, te, 0, 71, 14 ) );
addSlotToContainer( new SlotOutput( te, 1, 71, 14, PlaceableItemType.SPATIAL_STORAGE_CELLS.IIcon ) );
addSlotToContainer( new SlotRestrictedInput( PlaceableItemType.SPATIAL_STORAGE_CELLS, te, 0, 52, 53 ) );
addSlotToContainer( new SlotOutput( te, 1, 113, 53, PlaceableItemType.SPATIAL_STORAGE_CELLS.IIcon ) );
bindPlayerInventory( ip, 0, 199 - /* height of playerinventory */82 );
bindPlayerInventory( ip, 0, 197 - /* height of playerinventory */82 );
}
@Override
+15
View File
@@ -35,6 +35,9 @@ public class AEConfig extends Configuration implements IConfigureableObject, ICo
public IConfigManager settings = new ConfigManager( this );
public EnumSet<AEFeature> featureFlags = EnumSet.noneOf( AEFeature.class );
public int storageBiomeID = -1;
public int storageProviderID = -1;
public int oresPerCluster = 4;
private double WirelessBaseCost = 8;
@@ -149,6 +152,12 @@ public class AEConfig extends Configuration implements IConfigureableObject, ICo
this.get( Category, e.name(), settings.getSetting( e ).name() );
}
if ( isFeatureEnabled( AEFeature.SpatialIO ) )
{
storageBiomeID = get( "spatialio", "storageBiomeID", storageBiomeID ).getInt( storageBiomeID );
storageProviderID = get( "spatialio", "storageProviderID", storageProviderID ).getInt( storageProviderID );
}
if ( isFeatureEnabled( AEFeature.VersionChecker ) )
{
try
@@ -184,6 +193,12 @@ public class AEConfig extends Configuration implements IConfigureableObject, ICo
get( "VersionChecker", "LatestTimeStamp", "" ).set( Long.toString( latestTimeStamp ) );
}
if ( isFeatureEnabled( AEFeature.SpatialIO ) )
{
get( "spatialio", "storageBiomeID", storageBiomeID ).set( storageBiomeID );
get( "spatialio", "storageProviderID", storageProviderID ).set( storageProviderID );
}
if ( hasChanged() )
super.save();
}
+73
View File
@@ -6,6 +6,7 @@ import java.lang.reflect.Field;
import net.minecraft.util.WeightedRandomChestContent;
import net.minecraft.world.biome.BiomeGenBase;
import net.minecraftforge.common.ChestGenHooks;
import net.minecraftforge.common.DimensionManager;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.oredict.RecipeSorter;
import net.minecraftforge.oredict.RecipeSorter.Category;
@@ -17,6 +18,7 @@ import appeng.api.definitions.Materials;
import appeng.api.definitions.Parts;
import appeng.api.features.IRecipeHandlerRegistry;
import appeng.api.features.IWirelessTermHandler;
import appeng.api.movable.IMovableRegistry;
import appeng.api.networking.IGridCacheRegistry;
import appeng.api.networking.energy.IEnergyGrid;
import appeng.api.networking.pathing.IPathingGrid;
@@ -133,6 +135,10 @@ import appeng.recipes.handlers.Smelt;
import appeng.recipes.loader.ConfigLoader;
import appeng.recipes.loader.JarLoader;
import appeng.recipes.ores.OreDictionaryHandler;
import appeng.spatial.BiomeGenStorage;
import appeng.spatial.StorageWorldProvider;
import appeng.tile.AEBaseTile;
import appeng.util.Platform;
import com.google.common.collect.ArrayListMultimap;
import com.google.common.collect.Multimap;
@@ -160,6 +166,8 @@ public class Registration
public void PreInit(FMLPreInitializationEvent event)
{
registerSpatial( false );
IRecipeHandlerRegistry recipeRegistery = AEApi.instance().registries().recipes();
recipeRegistery.addNewSubItemResolver( new AEItemResolver() );
@@ -488,6 +496,8 @@ public class Registration
public void PostInit(FMLPostInitializationEvent event)
{
registerSpatial( true );
// add to localizaiton..
PlayerMessages.values();
GuiText.values();
@@ -567,6 +577,69 @@ public class Registration
if ( AEConfig.instance.isFeatureEnabled( AEFeature.MeteoriteWorldGen ) )
GameRegistry.registerWorldGenerator( new MeteoriteWorldGen(), 0 );
IMovableRegistry mr = AEApi.instance().registries().moveable();
/*
* White List Vanilla...
*/
mr.whiteListTileEntity( net.minecraft.tileentity.TileEntityBeacon.class );
mr.whiteListTileEntity( net.minecraft.tileentity.TileEntityBrewingStand.class );
mr.whiteListTileEntity( net.minecraft.tileentity.TileEntityChest.class );
mr.whiteListTileEntity( net.minecraft.tileentity.TileEntityCommandBlock.class );
mr.whiteListTileEntity( net.minecraft.tileentity.TileEntityComparator.class );
mr.whiteListTileEntity( net.minecraft.tileentity.TileEntityDaylightDetector.class );
mr.whiteListTileEntity( net.minecraft.tileentity.TileEntityDispenser.class );
mr.whiteListTileEntity( net.minecraft.tileentity.TileEntityDropper.class );
mr.whiteListTileEntity( net.minecraft.tileentity.TileEntityEnchantmentTable.class );
mr.whiteListTileEntity( net.minecraft.tileentity.TileEntityEnderChest.class );
mr.whiteListTileEntity( net.minecraft.tileentity.TileEntityEndPortal.class );
mr.whiteListTileEntity( net.minecraft.tileentity.TileEntitySkull.class );
mr.whiteListTileEntity( net.minecraft.tileentity.TileEntityFurnace.class );
mr.whiteListTileEntity( net.minecraft.tileentity.TileEntityMobSpawner.class );
mr.whiteListTileEntity( net.minecraft.tileentity.TileEntitySign.class );
mr.whiteListTileEntity( net.minecraft.tileentity.TileEntityPiston.class );
mr.whiteListTileEntity( net.minecraft.tileentity.TileEntityFlowerPot.class );
mr.whiteListTileEntity( net.minecraft.tileentity.TileEntityNote.class );
mr.whiteListTileEntity( net.minecraft.tileentity.TileEntityHopper.class );
/**
* Whitelist AE
*/
mr.whiteListTileEntity( AEBaseTile.class );
recipeHandler.registerHandlers();
}
private void registerSpatial(boolean force)
{
AEConfig config = AEConfig.instance;
if ( storageBiome == null )
{
if ( force && config.storageBiomeID == -1 )
{
storageBiome = new BiomeGenStorage( config.storageBiomeID = Platform.findEmpty( BiomeGenBase.getBiomeGenArray() ) );
config.save();
}
if ( !force && config.storageBiomeID != -1 )
storageBiome = new BiomeGenStorage( config.storageBiomeID );
}
if ( config.storageProviderID != -1 )
{
DimensionManager.registerProviderType( config.storageProviderID, StorageWorldProvider.class, false );
}
if ( config.storageProviderID == -1 && force )
{
config.storageProviderID = -11;
while (!DimensionManager.registerProviderType( config.storageProviderID, StorageWorldProvider.class, false ))
config.storageProviderID--;
config.save();
}
}
}
+43 -3
View File
@@ -1,16 +1,21 @@
package appeng.core;
import java.io.File;
import java.io.IOException;
import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.List;
import java.util.Map.Entry;
import java.util.WeakHashMap;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraftforge.common.DimensionManager;
import net.minecraftforge.common.config.ConfigCategory;
import net.minecraftforge.common.config.Configuration;
import net.minecraftforge.common.config.Property;
import appeng.api.util.WorldCoord;
import appeng.core.sync.network.NetworkHandler;
import appeng.core.sync.packets.PacketNewStorageDimension;
import appeng.me.GridStorage;
import appeng.me.GridStorageSearch;
import appeng.services.CompassService;
@@ -46,6 +51,31 @@ public class WorldSettings extends Configuration
}
}
List<Integer> storageCellDims = new ArrayList();
public void addStorageCellDim(int newDim)
{
storageCellDims.add( newDim );
DimensionManager.registerDimension( newDim, AEConfig.instance.storageProviderID );
try
{
NetworkHandler.instance.sendToAll( new PacketNewStorageDimension( newDim ) );
}
catch (IOException e)
{
e.printStackTrace();
}
String[] values = new String[storageCellDims.size()];
for (int x = 0; x < values.length; x++)
values[x] = "" + storageCellDims.get( x );
get( "DimensionManager", "StorageCells", new int[0] ).set( values );
save();
}
public CompassService getCompass()
{
return compass;
@@ -68,9 +98,19 @@ public class WorldSettings extends Configuration
return instance;
}
public void sendToPlayer(EntityPlayer player)
public void sendToPlayer(EntityPlayerMP player)
{
for (int newDim : get( "DimensionManager", "StorageCells", new int[0] ).getIntList())
{
try
{
NetworkHandler.instance.sendTo( new PacketNewStorageDimension( newDim ), player );
}
catch (IOException e)
{
AELog.error( e );
}
}
}
public void init()
+1 -1
View File
@@ -24,7 +24,7 @@ public enum GuiText
CraftingTerminal, FormationPlane, Inscriber, QuartzCuttingKnife,
METunnel, ItemTunnel, RedstoneTunnel, MJTunnel, EUTunnel, FluidTunnel;
METunnel, ItemTunnel, RedstoneTunnel, MJTunnel, EUTunnel, FluidTunnel, StoredSize;
String root;
+3
View File
@@ -17,6 +17,7 @@ import appeng.core.sync.packets.PacketMEInventoryUpdate;
import appeng.core.sync.packets.PacketMatterCannon;
import appeng.core.sync.packets.PacketMockExplosion;
import appeng.core.sync.packets.PacketMultiPart;
import appeng.core.sync.packets.PacketNewStorageDimension;
import appeng.core.sync.packets.PacketPartPlacement;
import appeng.core.sync.packets.PacketProgressBar;
import appeng.core.sync.packets.PacketSwitchGuis;
@@ -58,6 +59,8 @@ public class AppEngPacketHandlerBase
PACKET_CLICK(PacketClick.class),
PACKET_NEW_STORAGE_DIMENSION(PacketNewStorageDimension.class),
PACKET_SWITCH_GUIS(PacketSwitchGuis.class);
final public Class pc;
+6
View File
@@ -46,6 +46,7 @@ import appeng.container.implementations.ContainerPriority;
import appeng.container.implementations.ContainerQNB;
import appeng.container.implementations.ContainerSecurity;
import appeng.container.implementations.ContainerSkyChest;
import appeng.container.implementations.ContainerSpatialIOPort;
import appeng.container.implementations.ContainerStorageBus;
import appeng.container.implementations.ContainerUpgradeable;
import appeng.container.implementations.ContainerVibrationChamber;
@@ -66,6 +67,7 @@ import appeng.tile.misc.TileSecurity;
import appeng.tile.misc.TileVibrationChamber;
import appeng.tile.networking.TileWireless;
import appeng.tile.qnb.TileQuantumBridge;
import appeng.tile.spatial.TileSpatialIOPort;
import appeng.tile.storage.TileChest;
import appeng.tile.storage.TileDrive;
import appeng.tile.storage.TileIOPort;
@@ -123,6 +125,10 @@ public enum GuiBridge implements IGuiHandler
// extends (Container/Gui) + Bus
GUI_LEVELEMITTER(ContainerLevelEmitter.class, PartLevelEmitter.class, false, SecurityPermissions.BUILD),
GUI_SPATIALIOPORT(ContainerSpatialIOPort.class, TileSpatialIOPort.class, false, SecurityPermissions.BUILD),
// GUI_INSCRIBER
GUI_CELLWORKBENCH(ContainerCellWorkbench.class, TileCellWorkbench.class, false, null);
private Class Tile;
+23 -2
View File
@@ -4,12 +4,16 @@ import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.network.NetHandlerPlayServer;
import appeng.core.WorldSettings;
import appeng.core.sync.AppEngPacket;
import cpw.mods.fml.common.FMLCommonHandler;
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
import cpw.mods.fml.common.gameevent.PlayerEvent.PlayerLoggedInEvent;
import cpw.mods.fml.common.network.FMLEventChannel;
import cpw.mods.fml.common.network.FMLNetworkEvent.ClientCustomPacketEvent;
import cpw.mods.fml.common.network.FMLNetworkEvent.CustomNetworkEvent;
import cpw.mods.fml.common.network.FMLNetworkEvent.ServerCustomPacketEvent;
import cpw.mods.fml.common.network.NetworkHandshakeEstablished;
import cpw.mods.fml.common.network.NetworkRegistry;
import cpw.mods.fml.relauncher.Side;
public class NetworkHandler
{
@@ -23,6 +27,7 @@ public class NetworkHandler
final IPacketHandler serveHandler;
public NetworkHandler(String channelName) {
FMLCommonHandler.instance().bus().register( this );
ec = NetworkRegistry.INSTANCE.newEventDrivenChannel( myChannelName = channelName );
ec.register( this );
@@ -55,9 +60,25 @@ public class NetworkHandler
}
@SubscribeEvent
public void newPlayer(PlayerLoggedInEvent ev)
public void newConection(CustomNetworkEvent cctse)
{
WorldSettings.getInstance().sendToPlayer( ev.player );
if ( cctse.wrappedEvent instanceof NetworkHandshakeEstablished )
{
NetworkHandshakeEstablished nhe = (NetworkHandshakeEstablished) cctse.wrappedEvent;
if ( nhe.side == Side.SERVER && nhe.netHandler instanceof NetHandlerPlayServer )
{
NetHandlerPlayServer srv = (NetHandlerPlayServer) nhe.netHandler;
// WorldSettings.getInstance().sendToPlayer( srv.playerEntity );
}
}
}
@SubscribeEvent
public void newConection(PlayerLoggedInEvent loginEvent)
{
if ( loginEvent.player instanceof EntityPlayerMP )
WorldSettings.getInstance().sendToPlayer( (EntityPlayerMP) loginEvent.player );
}
@SubscribeEvent
@@ -0,0 +1,46 @@
package appeng.core.sync.packets;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import java.io.IOException;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraftforge.common.DimensionManager;
import appeng.core.AEConfig;
import appeng.core.sync.AppEngPacket;
import appeng.core.sync.network.INetworkInfo;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
public class PacketNewStorageDimension extends AppEngPacket
{
final int newDim;
// automatic.
public PacketNewStorageDimension(ByteBuf stream) throws IOException {
newDim = stream.readInt();
}
@Override
@SideOnly(Side.CLIENT)
public void clientPacketData(INetworkInfo network, AppEngPacket packet, EntityPlayer player)
{
DimensionManager.registerDimension( newDim, AEConfig.instance.storageProviderID );
}
// api
public PacketNewStorageDimension(int newDim) throws IOException {
this.newDim = newDim;
ByteBuf data = Unpooled.buffer();
data.writeInt( getPacketID() );
data.writeInt( newDim );
configureWrite( data );
}
}
+19 -1
View File
@@ -24,6 +24,8 @@ import appeng.api.storage.data.IAEFluidStack;
import appeng.api.storage.data.IAEItemStack;
import appeng.api.util.AECableType;
import appeng.api.util.DimensionalCoord;
import appeng.api.util.IConfigManager;
import appeng.api.util.IConfigureableObject;
import appeng.me.GridAccessException;
import appeng.me.helpers.AENetworkProxy;
import appeng.me.storage.MEMonitorIInventory;
@@ -33,13 +35,16 @@ import appeng.tile.inventory.AppEngInternalAEInventory;
import appeng.tile.inventory.AppEngInternalInventory;
import appeng.tile.inventory.IAEAppEngInventory;
import appeng.tile.inventory.InvOperation;
import appeng.util.ConfigManager;
import appeng.util.IConfigManagerHost;
import appeng.util.InventoryAdaptor;
import appeng.util.Platform;
import appeng.util.inv.AdaptorIInventory;
import appeng.util.inv.IInventoryDestination;
import appeng.util.inv.WrapperInvSlot;
public class DualityInterface implements IGridTickable, ISegmentedInventory, IStorageMonitorable, IInventoryDestination, IAEAppEngInventory
public class DualityInterface implements IGridTickable, ISegmentedInventory, IStorageMonitorable, IInventoryDestination, IAEAppEngInventory,
IConfigureableObject, IConfigManagerHost
{
final int sides[] = new int[] { 0, 1, 2, 3, 4, 5, 6, 7 };
@@ -49,6 +54,7 @@ public class DualityInterface implements IGridTickable, ISegmentedInventory, ISt
AENetworkProxy gridProxy;
IInterfaceHost iHost;
BaseActionSource mySrc;
ConfigManager cm = new ConfigManager( this );
public DualityInterface(AENetworkProxy prox, IInterfaceHost ih) {
gridProxy = prox;
@@ -455,4 +461,16 @@ public class DualityInterface implements IGridTickable, ISegmentedInventory, ISt
return (IPart) (iHost instanceof IPart ? iHost : null);
}
public appeng.api.util.IConfigManager getConfigManager()
{
return cm;
}
@Override
public void updateSetting(IConfigManager manager, Enum settingName, Enum newValue)
{
// TODO Auto-generated method stub
};
}
+161 -1
View File
@@ -1,12 +1,26 @@
package appeng.items.storage;
import java.util.EnumSet;
import java.util.List;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.world.World;
import net.minecraftforge.common.DimensionManager;
import appeng.api.implementations.TransitionResult;
import appeng.api.implementations.items.ISpatialStorageCell;
import appeng.api.util.WorldCoord;
import appeng.core.WorldSettings;
import appeng.core.features.AEFeature;
import appeng.core.localization.GuiText;
import appeng.items.AEBaseItem;
import appeng.items.materials.MaterialType;
import appeng.spatial.StorageHelper;
import appeng.spatial.StorageWorldProvider;
import appeng.util.Platform;
public class ItemSpatialStorageCell extends AEBaseItem
public class ItemSpatialStorageCell extends AEBaseItem implements ISpatialStorageCell
{
final MaterialType component;
@@ -20,4 +34,150 @@ public class ItemSpatialStorageCell extends AEBaseItem
component = whichCell;
}
@Override
public void addInformation(ItemStack is, EntityPlayer player, List list, boolean adv)
{
WorldCoord wc = getStoredSize( is );
if ( wc.x > 0 )
list.add( GuiText.StoredSize.getLocal() + ": " + wc.x + " x " + wc.y + " x " + wc.z );
}
@Override
public boolean isSpatialStorage(ItemStack is)
{
return true;
}
@Override
public int getMaxStoredDim(ItemStack is)
{
return maxRegion;
}
@Override
public World getWorld(ItemStack is)
{
if ( is.hasTagCompound() )
{
NBTTagCompound c = is.getTagCompound();
int dim = c.getInteger( "StorageDim" );
World w = DimensionManager.getWorld( dim );
if ( w == null )
{
DimensionManager.initDimension( dim );
w = DimensionManager.getWorld( dim );
}
if ( w != null )
{
if ( w.provider instanceof StorageWorldProvider )
{
return w;
}
}
}
return null;
}
private void setStoredSize(ItemStack is, int targetX, int targetY, int targetZ)
{
if ( is.hasTagCompound() )
{
NBTTagCompound c = is.getTagCompound();
int dim = c.getInteger( "StorageDim" );
c.setInteger( "sizeX", targetX );
c.setInteger( "sizeY", targetY );
c.setInteger( "sizeZ", targetZ );
WorldSettings.getInstance().setStoredSize( dim, targetX, targetY, targetZ );
}
}
@Override
public WorldCoord getStoredSize(ItemStack is)
{
if ( is.hasTagCompound() )
{
NBTTagCompound c = is.getTagCompound();
if ( Platform.isServer() )
{
int dim = c.getInteger( "StorageDim" );
return WorldSettings.getInstance().getStoredSize( dim );
}
else
return new WorldCoord( c.getInteger( "sizeX" ), c.getInteger( "sizeY" ), c.getInteger( "sizeZ" ) );
}
return new WorldCoord( 0, 0, 0 );
}
@Override
public WorldCoord getMin(ItemStack is)
{
World w = getWorld( is );
if ( w != null )
{
NBTTagCompound info = (NBTTagCompound) w.getWorldInfo().getAdditionalProperty( "storageCell" );
if ( info != null )
{
return new WorldCoord( info.getInteger( "minX" ), info.getInteger( "minY" ), info.getInteger( "minZ" ) );
}
}
return new WorldCoord( 0, 0, 0 );
}
@Override
public WorldCoord getMax(ItemStack is)
{
World w = getWorld( is );
if ( w != null )
{
NBTTagCompound info = (NBTTagCompound) w.getWorldInfo().getAdditionalProperty( "storageCell" );
if ( info != null )
{
return new WorldCoord( info.getInteger( "maxX" ), info.getInteger( "maxY" ), info.getInteger( "maxZ" ) );
}
}
return new WorldCoord( 0, 0, 0 );
}
public World createNewWorld(ItemStack is)
{
NBTTagCompound c = Platform.openNbtData( is );
int newDim = DimensionManager.getNextFreeDimId();
c.setInteger( "StorageDim", newDim );
WorldSettings.getInstance().addStorageCellDim( newDim );
DimensionManager.initDimension( newDim );
return DimensionManager.getWorld( newDim );
}
@Override
public TransitionResult doSpatialTransition(ItemStack is, World w, WorldCoord min, WorldCoord max, boolean doTransition)
{
WorldCoord scale = getStoredSize( is );
int targetX = max.x - min.x - 1;
int targetY = max.y - min.y - 1;
int targetZ = max.z - min.z - 1;
int maxSize = getMaxStoredDim( is );
int floorBuffer = 64;
World dest = getWorld( is );
if ( (scale.x == 0 && scale.y == 0 && scale.z == 0) || (scale.x == targetX && scale.y == targetY && scale.z == targetZ) )
{
if ( targetX <= maxSize && targetY <= maxSize && targetZ <= maxSize )
{
if ( dest == null )
dest = createNewWorld( is );
StorageHelper.getInstance().swapRegions( w, dest, min.x + 1, min.y + 1, min.z + 1, 1, floorBuffer + 1, 1, targetX - 1,
floorBuffer + targetY - 1, targetZ - 1 );
setStoredSize( is, targetX, targetY, targetZ );
return new TransitionResult( true, 0 );
}
}
return new TransitionResult( false, 0 );
}
}
+6
View File
@@ -39,6 +39,12 @@ public class SpatialPylonCache implements IGridCache, ISpatialCache
myGrid = g;
}
@Override
public long requiredPower()
{
return powerRequired;
}
@Override
public boolean hasRegion()
{
@@ -1,30 +0,0 @@
package appeng.me.cluster.implementations;
import java.util.Iterator;
import appeng.api.networking.IGridHost;
import appeng.me.cluster.IAECluster;
public class IAssemblerCluster implements IAECluster
{
@Override
public void updateStatus(boolean updateGrid)
{
// TODO Auto-generated method stub
}
@Override
public void destroy()
{
// TODO Auto-generated method stub
}
@Override
public Iterator<IGridHost> getTiles()
{
// TODO Auto-generated method stub
return null;
}
}
+49 -10
View File
@@ -7,10 +7,14 @@ import java.util.List;
import java.util.Map.Entry;
import net.minecraft.block.Block;
import net.minecraft.network.Packet;
import net.minecraft.network.play.server.S21PacketChunkData;
import net.minecraft.server.management.PlayerManager;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.ChunkPosition;
import net.minecraft.world.NextTickListEntry;
import net.minecraft.world.World;
import net.minecraft.world.WorldServer;
import net.minecraft.world.chunk.Chunk;
import net.minecraft.world.chunk.storage.ExtendedBlockStorage;
import net.minecraftforge.common.util.ForgeDirection;
@@ -20,6 +24,7 @@ import appeng.api.movable.IMovableRegistry;
import appeng.api.util.WorldCoord;
import appeng.core.AELog;
import appeng.util.Platform;
import cpw.mods.fml.relauncher.ReflectionHelper;
public class CachedPlane
{
@@ -53,6 +58,9 @@ public class CachedPlane
public void setBlockIDWithMetadata(int y, Object[] blk)
{
if ( blk[0] == matrixFrame )
blk[0] = Platform.air;
ExtendedBlockStorage extendedblockstorage = storage[y >> 4];
extendedblockstorage.func_150818_a( x, y & 15, z, (Block) blk[0] );
// extendedblockstorage.setExtBlockID( x, y & 15, z, blk[0] );
@@ -104,6 +112,7 @@ public class CachedPlane
LinkedList<NextTickListEntry> ticks = new LinkedList<NextTickListEntry>();
World wrld;
Block matrixFrame = AEApi.instance().blocks().blockMatrixFrame.block();
LinkedList<WorldCoord> updates = new LinkedList<WorldCoord>();
@@ -385,19 +394,49 @@ public class CachedPlane
for (int z = 0; z < cz_size; z++)
{
// TODO: Fix?
Chunk c = myChunks[x][z];
try
{
WorldServer ws = (WorldServer) c.worldObj;
PlayerManager pm = ws.getPlayerManager();
if ( getOrCreateChunkWatcher == null )
{
getOrCreateChunkWatcher = ReflectionHelper.findMethod( PlayerManager.class, pm, new String[] { "getOrCreateChunkWatcher",
"func_72690_a" }, int.class, int.class, boolean.class );
}
if ( getOrCreateChunkWatcher != null )
{
Object playerinstance = getOrCreateChunkWatcher.invoke( pm, c.xPosition, c.zPosition, false );
if ( playerinstance != null )
{
Playerinstance = playerinstance.getClass();
if ( sendToAllPlayersWatchingChunk == null )
{
sendToAllPlayersWatchingChunk = ReflectionHelper.findMethod( Playerinstance, playerinstance, new String[] {
"sendToAllPlayersWatchingChunk", "func_151251_a" }, Packet.class );
}
if ( sendToAllPlayersWatchingChunk != null )
sendToAllPlayersWatchingChunk.invoke( playerinstance, new S21PacketChunkData( c, false, verticalBits ) );
}
}
}
catch (Throwable t)
{
AELog.error( t );
}
/*
* Chunk c = myChunks[x][z];
*
* WorldServer ws = (WorldServer) c.worldObj; PlayerManager pm = ws.getPlayerManager(); PlayerInstance
* playerinstance = pm.getOrCreateChunkWatcher( c.xPosition, c.zPosition, false );
*
* if ( playerinstance != null ) playerinstance.sendToAllPlayersWatchingChunk( new Packet51MapChunk( c,
* false, verticalBits ) );
*/
}
}
Class Playerinstance;
Method getOrCreateChunkWatcher;
Method sendToAllPlayersWatchingChunk;
}
+16 -1
View File
@@ -3,20 +3,29 @@ package appeng.spatial;
import java.util.ArrayList;
import java.util.List;
import net.minecraft.block.Block;
import net.minecraft.entity.EnumCreatureType;
import net.minecraft.world.World;
import net.minecraft.world.chunk.Chunk;
import net.minecraft.world.chunk.IChunkProvider;
import net.minecraft.world.gen.ChunkProviderGenerate;
import appeng.api.AEApi;
import appeng.core.AEConfig;
public class StorageChunkProvider extends ChunkProviderGenerate implements IChunkProvider
{
Block[] ablock = new Block[32768];
World w;
public StorageChunkProvider(World wrd, long i) {
super( wrd, i, false );
this.w = wrd;
Block matrixFrame = AEApi.instance().blocks().blockMatrixFrame.block();
for (int x = 0; x < ablock.length; x++)
ablock[x] = matrixFrame;
}
@Override
@@ -28,7 +37,13 @@ public class StorageChunkProvider extends ChunkProviderGenerate implements IChun
@Override
public Chunk provideChunk(int x, int z)
{
Chunk chunk = new Chunk( w, x, z );
Chunk chunk = new Chunk( w, ablock, x, z );
byte[] abyte = chunk.getBiomeArray();
AEConfig config = AEConfig.instance;
for (int k = 0; k < abyte.length; ++k)
abyte[k] = (byte) config.storageBiomeID;
if ( !chunk.isTerrainPopulated )
{
+22 -2
View File
@@ -1,5 +1,6 @@
package appeng.spatial;
import java.lang.reflect.Method;
import java.util.List;
import net.minecraft.block.Block;
@@ -15,7 +16,9 @@ import net.minecraft.world.WorldServer;
import appeng.api.AEApi;
import appeng.api.util.WorldCoord;
import appeng.block.solids.BlockMatrixFrame;
import appeng.core.AELog;
import appeng.util.Platform;
import cpw.mods.fml.relauncher.ReflectionHelper;
public class StorageHelper
{
@@ -119,6 +122,8 @@ public class StorageHelper
};
Method onEntityRemoved;
/**
* Mostly from dimentional doors.. which mostly got it form X-Comp.
*
@@ -179,8 +184,23 @@ public class StorageHelper
oldWorld.getChunkFromChunkCoords( entX, entZ ).isModified = true;
}
// TODO: Fix?
// oldWorld.onEntityRemoved( entity );
if ( onEntityRemoved == null )
{
onEntityRemoved = ReflectionHelper.findMethod( WorldServer.class, oldWorld, new String[] { "onEntityRemoved", "func_72847_b" },
Entity.class );
}
if ( onEntityRemoved != null )
{
try
{
onEntityRemoved.invoke( oldWorld, entity );
}
catch (Throwable t)
{
AELog.error( t );
}
}
if ( player == null ) // Are we NOT working with a player?
{
-30
View File
@@ -1,30 +0,0 @@
package appeng.tile.mac;
import appeng.me.cluster.IAECluster;
import appeng.me.cluster.IAEMultiBlock;
import appeng.tile.grid.AENetworkTile;
public class TileMolecularAssembler extends AENetworkTile implements IAEMultiBlock
{
@Override
public void disconnect()
{
// TODO Auto-generated method stub
}
@Override
public IAECluster getCluster()
{
// TODO Auto-generated method stub
return null;
}
@Override
public boolean isValid()
{
// TODO Auto-generated method stub
return false;
}
}
-30
View File
@@ -1,30 +0,0 @@
package appeng.tile.mac;
import appeng.me.cluster.IAECluster;
import appeng.me.cluster.IAEMultiBlock;
import appeng.tile.grid.AENetworkTile;
public class TilePatternProvider extends AENetworkTile implements IAEMultiBlock
{
@Override
public void disconnect()
{
// TODO Auto-generated method stub
}
@Override
public IAECluster getCluster()
{
// TODO Auto-generated method stub
return null;
}
@Override
public boolean isValid()
{
// TODO Auto-generated method stub
return false;
}
}
-7
View File
@@ -5,7 +5,6 @@ import io.netty.buffer.ByteBuf;
import java.io.IOException;
import java.util.EnumSet;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.IInventory;
import net.minecraft.item.ItemStack;
import net.minecraftforge.common.util.ForgeDirection;
@@ -108,10 +107,4 @@ public class TileInscriber extends AENetworkPowerTile
}
public void activate(EntityPlayer player)
{
// TODO Auto-generated method stub
}
}
+1 -2
View File
@@ -157,8 +157,7 @@ public class TileInterface extends AENetworkInvTile implements IGridTickable, IS
@Override
public IConfigManager getConfigManager()
{
// TODO Auto-generated method stub
return null;
return duality.getConfigManager();
}
}
-22
View File
@@ -1,22 +0,0 @@
package appeng.tile.misc;
import java.util.EnumSet;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraftforge.common.util.ForgeDirection;
import appeng.tile.grid.AENetworkTile;
public class TileNetworkEmitter extends AENetworkTile
{
public TileNetworkEmitter() {
gridProxy.setValidSides( EnumSet.noneOf( ForgeDirection.class ) );
}
public void activate(EntityPlayer player)
{
// TODO Auto-generated method stub
}
}
-83
View File
@@ -1,83 +0,0 @@
package appeng.tile.misc;
import java.util.EnumSet;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.IInventory;
import net.minecraft.item.ItemStack;
import net.minecraftforge.common.util.ForgeDirection;
import appeng.api.util.AECableType;
import appeng.tile.grid.AENetworkPowerTile;
import appeng.tile.inventory.AppEngInternalInventory;
import appeng.tile.inventory.InvOperation;
public class TileQuartzCrystalizer extends AENetworkPowerTile
{
final int sides[] = new int[] { 0, 1 };
AppEngInternalInventory inv = new AppEngInternalInventory( this, 2 );
int processingTime = 0;
@Override
public AECableType getCableConnectionType(ForgeDirection dir)
{
return AECableType.COVERED;
}
public TileQuartzCrystalizer() {
gridProxy.setValidSides( EnumSet.noneOf( ForgeDirection.class ) );
internalMaxPower = 1500;
gridProxy.setIdlePowerUsage( 0 );
}
@Override
public void setOrientation(ForgeDirection inForward, ForgeDirection inUp)
{
super.setOrientation( inForward, inUp );
gridProxy.setValidSides( EnumSet.of( getUp(), getUp().getOpposite() ) );
setPowerSides( EnumSet.of( getUp(), getUp().getOpposite() ) );
}
@Override
public IInventory getInternalInventory()
{
return inv;
}
@Override
public int[] getAccessibleSlotsFromSide(int side)
{
return sides;
}
@Override
public int getInventoryStackLimit()
{
return 1;
}
@Override
public boolean isItemValidForSlot(int i, ItemStack itemstack)
{
return i == 0;
}
@Override
public boolean canExtractItem(int i, ItemStack itemstack, int j)
{
return i == 1;
}
@Override
public void onChangeInventory(IInventory inv, int slot, InvOperation mc, ItemStack removed, ItemStack added)
{
}
public void activate(EntityPlayer player)
{
// TODO Auto-generated method stub
}
}
+87 -2
View File
@@ -1,21 +1,39 @@
package appeng.tile.spatial;
import java.util.concurrent.Callable;
import net.minecraft.inventory.IInventory;
import net.minecraft.item.ItemStack;
import net.minecraftforge.common.util.ForgeDirection;
import appeng.api.config.Actionable;
import appeng.api.config.PowerMultiplier;
import appeng.api.implementations.TransitionResult;
import appeng.api.implementations.items.ISpatialStorageCell;
import appeng.api.networking.GridFlags;
import appeng.api.networking.IGrid;
import appeng.api.networking.energy.IEnergyGrid;
import appeng.api.networking.spatial.ISpatialCache;
import appeng.api.util.AECableType;
import appeng.api.util.DimensionalCoord;
import appeng.hooks.TickHandler;
import appeng.items.storage.ItemSpatialStorageCell;
import appeng.me.cache.SpatialPylonCache;
import appeng.tile.grid.AENetworkInvTile;
import appeng.tile.inventory.AppEngInternalInventory;
import appeng.tile.inventory.InvOperation;
import appeng.util.Platform;
public class TileSpatialIOPort extends AENetworkInvTile
public class TileSpatialIOPort extends AENetworkInvTile implements Callable
{
final int sides[] = { 0, 1 };
AppEngInternalInventory inv = new AppEngInternalInventory( this, 2 );
boolean lastRedstoneState = false;
public TileSpatialIOPort() {
gridProxy.setFlags( GridFlags.REQUIRE_CHANNEL );
}
public void updateRedstoneState()
{
boolean currentState = worldObj.isBlockIndirectlyGettingPowered( xCoord, yCoord, zCoord );
@@ -31,8 +49,47 @@ public class TileSpatialIOPort extends AENetworkInvTile
private void triggerTransition()
{
// TODO Auto-generated method stub
if ( Platform.isServer() )
{
ItemStack cell = getStackInSlot( 0 );
if ( isSpatialCell( cell ) )
{
TickHandler.instance.addCallable( this );
}
}
}
@Override
public Object call() throws Exception
{
ItemStack cell = getStackInSlot( 0 );
if ( isSpatialCell( cell ) && getStackInSlot( 1 ) == null )
{
IGrid gi = gridProxy.getGrid();
IEnergyGrid energy = gridProxy.getEnergy();
ItemSpatialStorageCell sc = (ItemSpatialStorageCell) cell.getItem();
SpatialPylonCache spc = (SpatialPylonCache) gi.getCache( ISpatialCache.class );
if ( spc.hasRegion() && spc.isValidRegion() )
{
double req = spc.requiredPower();
double pr = energy.extractAEPower( req, Actionable.SIMULATE, PowerMultiplier.CONFIG );
if ( Math.abs( pr - req ) < req * 0.001 )
{
TransitionResult tr = sc.doSpatialTransition( cell, worldObj, spc.getMin(), spc.getMax(), true );
if ( tr.success )
{
energy.extractAEPower( req, Actionable.MODULATE, PowerMultiplier.CONFIG );
setInventorySlotContents( 0, null );
setInventorySlotContents( 1, cell );
}
}
}
}
return null;
}
@Override
@@ -53,6 +110,34 @@ public class TileSpatialIOPort extends AENetworkInvTile
return inv;
}
@Override
public boolean isItemValidForSlot(int i, ItemStack itemstack)
{
return (i == 0 ? isSpatialCell( itemstack ) : false);
}
private boolean isSpatialCell(ItemStack cell)
{
if ( cell != null && cell.getItem() instanceof ISpatialStorageCell )
{
ISpatialStorageCell sc = (ISpatialStorageCell) cell.getItem();
return sc != null && sc.isSpatialStorage( cell );
}
return false;
}
@Override
public boolean canInsertItem(int i, ItemStack itemstack, int j)
{
return isItemValidForSlot( i, itemstack );
}
@Override
public boolean canExtractItem(int i, ItemStack itemstack, int j)
{
return i == 1;
}
@Override
public void onChangeInventory(IInventory inv, int slot, InvOperation mc, ItemStack removed, ItemStack added)
{