add lenses (no renderer yet), optimize some packets

This commit is contained in:
asiekierka 2014-12-17 16:19:03 +01:00
parent 7fb0dc14de
commit e4c79f44af
14 changed files with 228 additions and 20 deletions

View file

@ -248,6 +248,7 @@ item.FacadePhased.state=%s: %s
item.FacadePhased.state_default=Default: %s
item.FacadePhased.state_transparent=Transparent
item.PipePlug.name=Pipe Plug
item.Lens.name=Lens
itemGroup.buildcraft.blocks=Buildcraft Blocks
itemGroup.buildcraft.boards=Buildcraft Robots

Binary file not shown.

After

Width:  |  Height:  |  Size: 204 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 217 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 194 B

View file

@ -60,10 +60,12 @@ import buildcraft.transport.FacadePluggable;
import buildcraft.transport.GuiHandler;
import buildcraft.transport.ItemFacade;
import buildcraft.transport.ItemGateCopier;
import buildcraft.transport.ItemLens;
import buildcraft.transport.ItemPipe;
import buildcraft.transport.ItemPipeWire;
import buildcraft.transport.ItemPlug;
import buildcraft.transport.ItemRobotStation;
import buildcraft.transport.LensPluggable;
import buildcraft.transport.Pipe;
import buildcraft.transport.PipeActionProvider;
import buildcraft.transport.PipeColoringRecipe;
@ -166,6 +168,7 @@ public class BuildCraftTransport extends BuildCraftMod {
public static Item pipeGate;
public static Item pipeWire;
public static Item plugItem;
public static Item lensItem;
public static Item robotStationItem;
public static Item pipeStructureCobblestone;
public static Item gateCopier;
@ -430,6 +433,10 @@ public class BuildCraftTransport extends BuildCraftMod {
plugItem.setUnlocalizedName("pipePlug");
CoreProxy.proxy.registerItem(plugItem);
lensItem = new ItemLens();
lensItem.setUnlocalizedName("pipeLens");
CoreProxy.proxy.registerItem(lensItem);
robotStationItem = new ItemRobotStation();
robotStationItem.setUnlocalizedName("robotStation");
CoreProxy.proxy.registerItem(robotStationItem);
@ -508,6 +515,7 @@ public class BuildCraftTransport extends BuildCraftMod {
PipeManager.registerPipePluggable(FacadePluggable.class, "facade");
PipeManager.registerPipePluggable(GatePluggable.class, "gate");
PipeManager.registerPipePluggable(LensPluggable.class, "lens");
PipeManager.registerPipePluggable(PlugPluggable.class, "plug");
PipeManager.registerPipePluggable(RobotStationPluggable.class, "robotStation");

View file

@ -98,21 +98,19 @@ public class FacadePluggable extends PipePluggable {
activeState = states.length > 0 ? states[0] : null;
}
data.writeBoolean(activeState == null ? false : activeState.hollow);
if (activeState == null || activeState.block == null) {
data.writeShort(0);
} else {
data.writeShort(Block.getIdFromBlock(activeState.block));
}
data.writeByte(activeState == null ? 0 : activeState.metadata);
data.writeBoolean(activeState == null ? false : activeState.transparent);
data.writeByte((activeState != null && activeState.transparent ? 128 : 0) |
(activeState != null && activeState.hollow ? 64 : 0) |
(activeState == null ? 0 : activeState.metadata));
}
@Override
public void readData(ByteBuf data) {
renderAsHollow = data.readBoolean();
int blockId = data.readUnsignedShort();
if (blockId > 0) {
@ -121,8 +119,11 @@ public class FacadePluggable extends PipePluggable {
block = null;
}
meta = data.readByte();
transparent = data.readBoolean();
int flags = data.readUnsignedByte();
meta = flags & 0x0F;
transparent = (flags & 0x80) > 0;
renderAsHollow = (flags & 0x40) > 0;
}
protected void setActiveState(int id) {

View file

@ -0,0 +1,89 @@
/**
* Copyright (c) 2011-2014, SpaceToad and the BuildCraft Team
* http://www.mod-buildcraft.com
*
* BuildCraft is distributed under the terms of the Minecraft Mod Public
* License 1.0, or MMPL. Please check the contents of the license located in
* http://www.mod-buildcraft.com/MMPL-1.0.txt
*/
package buildcraft.transport;
import java.util.List;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.IIcon;
import net.minecraft.world.World;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraftforge.common.util.ForgeDirection;
import buildcraft.api.pipes.IPipe;
import buildcraft.api.pipes.IPipePluggableItem;
import buildcraft.api.pipes.PipePluggable;
import buildcraft.core.ItemBuildCraft;
import buildcraft.core.utils.ColorUtils;
import buildcraft.core.utils.StringUtils;
public class ItemLens extends ItemBuildCraft implements IPipePluggableItem {
private IIcon[] icons;
public ItemLens() {
super();
}
@Override
@SideOnly(Side.CLIENT)
public IIcon getIconFromDamageForRenderPass(int meta, int pass)
{
return icons[pass & 1];
}
@Override
@SideOnly(Side.CLIENT)
public boolean requiresMultipleRenderPasses()
{
return true;
}
@Override
@SideOnly(Side.CLIENT)
public int getColorFromItemStack(ItemStack stack, int pass) {
return pass == 1 ? ColorUtils.getRGBColor(15 - stack.getItemDamage()) : 16777215;
}
@Override
public String getItemStackDisplayName(ItemStack itemstack) {
return StringUtils.localize("item.Lens.name") + " (" + StringUtils.localize("color." + ColorUtils.getName(15 - itemstack.getItemDamage())) + ")";
}
@Override
public boolean doesSneakBypassUse(World world, int x, int y, int z, EntityPlayer player) {
return true;
}
@Override
@SideOnly(Side.CLIENT)
public void registerIcons(IIconRegister register) {
icons = new IIcon[] {
register.registerIcon("buildcraft:pipeLensItem0"),
register.registerIcon("buildcraft:pipeLensItem1")
};
}
@SuppressWarnings({"rawtypes", "unchecked"})
@Override
@SideOnly(Side.CLIENT)
public void getSubItems(Item item, CreativeTabs tab, List itemList) {
for (int i = 0; i < 16; i++) {
itemList.add(new ItemStack(item, 1, i));
}
}
@Override
public PipePluggable createPipePluggable(IPipe pipe, ForgeDirection side, ItemStack stack) {
return new LensPluggable(stack);
}
}

View file

@ -0,0 +1,110 @@
package buildcraft.transport;
import io.netty.buffer.ByteBuf;
import net.minecraft.client.renderer.RenderBlocks;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.AxisAlignedBB;
import net.minecraftforge.common.util.ForgeDirection;
import buildcraft.BuildCraftTransport;
import buildcraft.api.core.EnumColor;
import buildcraft.api.core.render.ITextureStates;
import buildcraft.api.pipes.IPipe;
import buildcraft.api.pipes.IPipeContainer;
import buildcraft.api.pipes.IPipePluggableRenderer;
import buildcraft.api.pipes.PipePluggable;
import buildcraft.core.utils.MatrixTranformations;
import buildcraft.transport.pipes.events.PipeEventItem;
public class LensPluggable extends PipePluggable {
private int color;
private ForgeDirection side;
public class LensPluggableRenderer implements IPipePluggableRenderer {
private static final float zFightOffset = 1 / 4096.0F;
@Override
public void renderPluggable(RenderBlocks renderblocks, IPipe pipe, ForgeDirection side, PipePluggable pipePluggable, ITextureStates blockStateMachine, int renderPass, int x, int y, int z) {
}
}
public LensPluggable() {
}
public LensPluggable(ItemStack stack) {
color = stack.getItemDamage() & 15;
}
@Override
public void validate(IPipeContainer pipe, ForgeDirection direction) {
side = direction;
}
@Override
public ItemStack[] getDropItems(IPipeContainer pipe) {
return new ItemStack[]{ new ItemStack(BuildCraftTransport.lensItem, 1, color) };
}
@Override
public boolean isBlocking(IPipeContainer pipe, ForgeDirection direction) {
return false;
}
@Override
public AxisAlignedBB getBoundingBox(ForgeDirection side) {
float[][] bounds = new float[3][2];
// X START - END
bounds[0][0] = 0.25F - 0.0625F;
bounds[0][1] = 0.75F + 0.0625F;
// Y START - END
bounds[1][0] = 0.000F;
bounds[1][1] = 0.125F;
// Z START - END
bounds[2][0] = 0.25F - 0.0625F;
bounds[2][1] = 0.75F + 0.0625F;
MatrixTranformations.transform(bounds, side);
return AxisAlignedBB.getBoundingBox(bounds[0][0], bounds[1][0], bounds[2][0], bounds[0][1], bounds[1][1], bounds[2][1]);
}
@Override
public IPipePluggableRenderer getRenderer() {
return null;
}
@Override
public void readFromNBT(NBTTagCompound tag) {
color = tag.getByte("c");
}
@Override
public void writeToNBT(NBTTagCompound tag) {
tag.setByte("c", (byte) color);
}
@Override
public void writeData(ByteBuf data) {
data.writeByte(color);
}
@Override
public void readData(ByteBuf data) {
color = data.readByte();
}
private void color(TravelingItem item) {
if ((item.toCenter && item.input.getOpposite() == side)
|| (!item.toCenter && item.output == side)) {
item.color = EnumColor.fromId(color);
}
}
public void eventHandler(PipeEventItem.ReachedEnd event) {
color(event.item);
}
public void eventHandler(PipeEventItem.Entered event) {
color(event.item);
}
}

View file

@ -135,6 +135,7 @@ public class PipeIconProvider implements IIconProvider {
Stripes("pipeStripes"),
//
PipeStainedOverlay("pipeStainedOverlay"),
PipeLens("pipeLens"),
//
TransparentFacade("transparent_facade"),
Transparent("transparent"),

View file

@ -97,7 +97,6 @@ public class PipeTransportItems extends PipeTransport {
readjustSpeed(item);
readjustPosition(item);
if (!container.getWorldObj().isRemote) {
item.output = resolveDestination(item);
}
@ -446,7 +445,6 @@ public class PipeTransportItems extends PipeTransport {
item.input = packet.getInputOrientation();
item.output = packet.getOutputOrientation();
item.color = packet.getColor();
}
private void sendTravelerPacket(TravelingItem data, boolean forceStackRefresh) {

View file

@ -55,7 +55,6 @@ public class PlugPluggable extends PipePluggable {
zeroState[2][1] = 0.75F - 0.125F / 2;
blockStateMachine.getTextureState().set(BuildCraftTransport.instance.pipeIconProvider.getIcon(PipeIconProvider.TYPE.PipeStructureCobblestone.ordinal())); // Structure Pipe
rotated = MatrixTranformations.deepClone(zeroState);
MatrixTranformations.transform(rotated, side);

View file

@ -353,6 +353,7 @@ public class TileGenericPipe extends TileEntity implements IFluidHandler,
for (int i = 0; i < ForgeDirection.VALID_DIRECTIONS.length; i++) {
if (sideProperties.pluggables[i] != null) {
sideProperties.pluggables[i].onAttachedPipe(this, ForgeDirection.getOrientation(i));
pipe.eventBus.registerHandler(sideProperties.pluggables[i]);
}
}
}

View file

@ -88,7 +88,7 @@ public class PacketFluidUpdate extends PacketCoordinates {
if (renderCache[dir.ordinal()] == null) {
renderCache[dir.ordinal()] = new FluidStack(0, 0);
}
renderCache[dir.ordinal()].amount = Math.min(transLiq.getCapacity(), data.readInt());
renderCache[dir.ordinal()].amount = Math.min(transLiq.getCapacity(), data.readUnsignedShort());
}
}
}
@ -115,9 +115,9 @@ public class PacketFluidUpdate extends PacketCoordinates {
}
if (delta.get(dir.ordinal() * FLUID_DATA_NUM + FLUID_AMOUNT_BIT)) {
if (liquid != null) {
data.writeInt(liquid.amount);
data.writeShort(liquid.amount);
} else {
data.writeInt(0);
data.writeShort(0);
}
}
}

View file

@ -51,14 +51,12 @@ public class PacketPipeTransportTraveler extends BuildCraftPacket {
data.writeShort(item.id);
data.writeByte((byte) item.input.ordinal());
data.writeByte((byte) item.output.ordinal());
byte flags = (byte) ((item.output.ordinal() & 7) | ((item.input.ordinal() & 7) << 3) | (forceStackRefresh ? 64 : 0));
data.writeByte(flags);
data.writeByte(item.color != null ? item.color.ordinal() : -1);
data.writeFloat(item.getSpeed());
data.writeBoolean(forceStackRefresh);
}
@Override
@ -73,8 +71,10 @@ public class PacketPipeTransportTraveler extends BuildCraftPacket {
this.entityId = data.readShort();
this.input = ForgeDirection.getOrientation(data.readByte());
this.output = ForgeDirection.getOrientation(data.readByte());
int flags = data.readUnsignedByte();
this.input = ForgeDirection.getOrientation((flags >> 3) & 7);
this.output = ForgeDirection.getOrientation(flags & 7);
byte c = data.readByte();
if (c != -1) {
@ -83,7 +83,7 @@ public class PacketPipeTransportTraveler extends BuildCraftPacket {
this.speed = data.readFloat();
this.forceStackRefresh = data.readBoolean();
this.forceStackRefresh = (flags & 0x40) > 0;
}
public int getTravelingEntityId() {