Network tool is now powered by black magic.

This commit is contained in:
AlgorithmX2 2014-02-16 15:28:50 -06:00
parent f5a2f6652e
commit 02f2eb00bd
6 changed files with 151 additions and 34 deletions

View file

@ -9,6 +9,7 @@ import net.minecraft.client.particle.EntityFX;
import net.minecraft.client.renderer.entity.RenderManager;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Items;
import net.minecraft.util.MovingObjectPosition;
import net.minecraft.world.World;
import net.minecraftforge.client.event.TextureStitchEvent;
import net.minecraftforge.common.MinecraftForge;
@ -115,4 +116,10 @@ public class ClientHelper extends ServerHelper
return r.nextInt( 2 * (setting + 1) ) == 0;
}
@Override
public MovingObjectPosition getMOP()
{
return Minecraft.getMinecraft().objectMouseOver;
}
}

View file

@ -4,6 +4,7 @@ import java.util.List;
import java.util.Random;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.util.MovingObjectPosition;
import net.minecraft.world.World;
import appeng.block.AEBaseBlock;
import appeng.core.sync.AppEngPacket;
@ -31,4 +32,6 @@ public abstract class CommonHelper
public abstract boolean shouldAddParticles(Random r);
public abstract MovingObjectPosition getMOP();
}

View file

@ -7,6 +7,7 @@ import java.lang.reflect.InvocationTargetException;
import java.util.HashMap;
import java.util.Map;
import appeng.core.sync.packets.PacketClick;
import appeng.core.sync.packets.PacketConfigButton;
import appeng.core.sync.packets.PacketInventoryAction;
import appeng.core.sync.packets.PacketLightning;
@ -49,6 +50,8 @@ public class AppEngPacketHandlerBase
PACKET_PROGRESS_VALUE(PacketProgressBar.class),
PACKET_CLICK(PacketClick.class),
PACKET_SWITCH_GUIS(PacketSwitchGuis.class);
final public Class pc;

View file

@ -0,0 +1,58 @@
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.minecraft.item.ItemStack;
import appeng.core.sync.AppEngPacket;
import appeng.core.sync.network.INetworkInfo;
import appeng.items.tools.ToolNetworkTool;
public class PacketClick extends AppEngPacket
{
int x, y, z, side;
float hitX, hitY, hitZ;
// automatic.
public PacketClick(ByteBuf stream) throws IOException {
x = stream.readInt();
y = stream.readInt();
z = stream.readInt();
side = stream.readInt();
hitX = stream.readFloat();
hitY = stream.readFloat();
hitZ = stream.readFloat();
}
@Override
public void serverPacketData(INetworkInfo manager, AppEngPacket packet, EntityPlayer player)
{
ItemStack is = player.inventory.getCurrentItem();
if ( is != null && is.getItem() instanceof ToolNetworkTool )
{
ToolNetworkTool tnt = (ToolNetworkTool) is.getItem();
tnt.serverSideToolLogic( is, player, player.worldObj, x, y, z, side, hitX, hitY, hitZ );
}
}
// api
public PacketClick(int x, int y, int z, int side, float hitX, float hitY, float hitZ) throws IOException {
ByteBuf data = Unpooled.buffer();
data.writeInt( getPacketID() );
data.writeInt( this.x = x );
data.writeInt( this.y = y );
data.writeInt( this.z = z );
data.writeInt( this.side = side );
data.writeFloat( this.hitX = hitX );
data.writeFloat( this.hitY = hitY );
data.writeFloat( this.hitZ = hitZ );
configureWrite( data );
}
}

View file

@ -1,20 +1,26 @@
package appeng.items.tools;
import java.io.IOException;
import java.util.EnumSet;
import net.minecraft.block.Block;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.MovingObjectPosition;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
import appeng.api.implementations.guiobjects.IGuiItem;
import appeng.api.implementations.guiobjects.IGuiItemObject;
import appeng.api.implementations.items.IAEWrench;
import appeng.api.networking.IGridHost;
import appeng.client.ClientHelper;
import appeng.container.AEBaseContainer;
import appeng.core.AELog;
import appeng.core.features.AEFeature;
import appeng.core.sync.GuiBridge;
import appeng.core.sync.network.NetworkHandler;
import appeng.core.sync.packets.PacketClick;
import appeng.items.AEBaseItem;
import appeng.items.contents.NetworkToolViewer;
import appeng.util.Platform;
@ -39,51 +45,84 @@ public class ToolNetworkTool extends AEBaseItem implements IGuiItem, IAEWrench,
}
@Override
public boolean onItemUseFirst(ItemStack is, EntityPlayer player, World world, int x, int y, int z, int side, float hitX, float hitY, float hitZ)
{
Block b = world.getBlock( x, y, z );
if ( b != null && !player.isSneaking() )
{
TileEntity te = world.getTileEntity( x, y, z );
if ( !(te instanceof IGridHost) )
{
if ( b.rotateBlock( world, x, y, z, ForgeDirection.getOrientation( side ) ) )
{
player.swingItem();
return !world.isRemote;
}
}
}
return false;
}
@Override
public boolean onItemUse(ItemStack is, EntityPlayer p, World w, int x, int y, int z, int side, float hitx, float hity, float hitz)
public ItemStack onItemRightClick(ItemStack it, World w, EntityPlayer p)
{
if ( Platform.isClient() )
return false;
if ( !p.isSneaking() )
{
if ( p.openContainer instanceof AEBaseContainer )
return true;
MovingObjectPosition mop = ClientHelper.proxy.getMOP();
TileEntity te = w.getTileEntity( x, y, z );
if ( te instanceof IGridHost )
Platform.openGUI( p, te, ForgeDirection.getOrientation( side ), GuiBridge.GUI_NETWORK_STATUS );
if ( mop == null )
{
onItemUseFirst( it, p, w, 0, 0, 0, -1, 0, 0, 0 );
}
else
Platform.openGUI( p, null, ForgeDirection.UNKNOWN, GuiBridge.GUI_NETWORK_TOOL );
return true;
{
int i = mop.blockX;
int j = mop.blockY;
int k = mop.blockZ;
if ( w.getBlock( i, j, k ).isAir( w, i, j, k ) )
onItemUseFirst( it, p, w, 0, 0, 0, -1, 0, 0, 0 );
}
}
return false;
return it;
}
@Override
public ItemStack onItemRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer)
public boolean onItemUseFirst(ItemStack is, EntityPlayer player, World world, int x, int y, int z, int side, float hitX, float hitY, float hitZ)
{
onItemUse( par1ItemStack, par3EntityPlayer, par2World, 0, 0, 0, -1, 0, 0, 0 );
return super.onItemRightClick( par1ItemStack, par2World, par3EntityPlayer );
if ( Platform.isClient() )
{
try
{
NetworkHandler.instance.sendToServer( new PacketClick( x, y, z, side, hitX, hitY, hitZ ) );
}
catch (IOException e)
{
AELog.error( e );
}
}
return true;
}
public boolean serverSideToolLogic(ItemStack is, EntityPlayer p, World w, int x, int y, int z, int side, float hitX, float hitY, float hitZ)
{
if ( side >= 0 )
{
Block b = w.getBlock( x, y, z );
if ( b != null && !p.isSneaking() )
{
TileEntity te = w.getTileEntity( x, y, z );
if ( !(te instanceof IGridHost) )
{
if ( b.rotateBlock( w, x, y, z, ForgeDirection.getOrientation( side ) ) )
{
p.swingItem();
return !w.isRemote;
}
}
}
if ( !p.isSneaking() )
{
if ( p.openContainer instanceof AEBaseContainer )
return true;
TileEntity te = w.getTileEntity( x, y, z );
if ( te instanceof IGridHost )
Platform.openGUI( p, te, ForgeDirection.getOrientation( side ), GuiBridge.GUI_NETWORK_STATUS );
else
Platform.openGUI( p, null, ForgeDirection.UNKNOWN, GuiBridge.GUI_NETWORK_TOOL );
return true;
}
else
b.onBlockActivated( w, x, y, z, p, side, hitX, hitY, hitZ );
}
else
Platform.openGUI( p, null, ForgeDirection.UNKNOWN, GuiBridge.GUI_NETWORK_TOOL );
return false;
}
@Override

View file

@ -7,6 +7,7 @@ import java.util.Random;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.server.MinecraftServer;
import net.minecraft.util.MovingObjectPosition;
import net.minecraft.world.World;
import appeng.block.AEBaseBlock;
import appeng.core.CommonHelper;
@ -92,4 +93,10 @@ public class ServerHelper extends CommonHelper
return false;
}
@Override
public MovingObjectPosition getMOP()
{
return null;
}
}