Multipart work
This commit is contained in:
parent
09b3a98a2a
commit
5dc8d2fc80
8 changed files with 158 additions and 167 deletions
|
@ -39,7 +39,7 @@ public class RenderPartTransmitter implements IIconRegister
|
||||||
public static Icon[] uniCableTextures = new Icon[2];
|
public static Icon[] uniCableTextures = new Icon[2];
|
||||||
public static Icon[] mechPipeTextures = new Icon[2];
|
public static Icon[] mechPipeTextures = new Icon[2];
|
||||||
public static Icon[] pressTubeTextures = new Icon[2];
|
public static Icon[] pressTubeTextures = new Icon[2];
|
||||||
public static Icon liquidEnergyTexture;
|
|
||||||
public static Icon sideTexture;
|
public static Icon sideTexture;
|
||||||
public static Map<TransmissionType, Icon[]> typeMap = new HashMap<TransmissionType, Icon[]>();
|
public static Map<TransmissionType, Icon[]> typeMap = new HashMap<TransmissionType, Icon[]>();
|
||||||
|
|
||||||
|
@ -47,20 +47,25 @@ public class RenderPartTransmitter implements IIconRegister
|
||||||
public static Map<String, CCModel> cableContentsModels;
|
public static Map<String, CCModel> cableContentsModels;
|
||||||
|
|
||||||
private static final int stages = 40;
|
private static final int stages = 40;
|
||||||
|
private static final double height = 0.45;
|
||||||
private static final double offset = 0.015;
|
private static final double offset = 0.015;
|
||||||
private HashMap<ForgeDirection, HashMap<Fluid, DisplayInteger[]>> cachedLiquids = new HashMap<ForgeDirection, HashMap<Fluid, DisplayInteger[]>>();
|
private HashMap<ForgeDirection, HashMap<Fluid, DisplayInteger[]>> cachedLiquids = new HashMap<ForgeDirection, HashMap<Fluid, DisplayInteger[]>>();
|
||||||
|
|
||||||
static
|
static
|
||||||
{
|
{
|
||||||
models = CCModel.parseObjModels(new ResourceLocation("mekanism", "models/transmitter.obj"), 7, null);
|
models = CCModel.parseObjModels(new ResourceLocation("mekanism", "models/transmitter.obj"), 7, null);
|
||||||
for (CCModel c : models.values()) {
|
|
||||||
|
for(CCModel c : models.values())
|
||||||
|
{
|
||||||
c.apply(new Translation(.5, .5, .5));
|
c.apply(new Translation(.5, .5, .5));
|
||||||
c.computeLighting(LightModel.standardLightModel);
|
c.computeLighting(LightModel.standardLightModel);
|
||||||
c.shrinkUVs(0.0005);
|
c.shrinkUVs(0.0005);
|
||||||
}
|
}
|
||||||
|
|
||||||
cableContentsModels = CCModel.parseObjModels(new ResourceLocation("mekanism", "models/transmitterEnergy.obj"), 7, null);
|
cableContentsModels = CCModel.parseObjModels(new ResourceLocation("mekanism", "models/transmitterEnergy.obj"), 7, null);
|
||||||
for (CCModel c : cableContentsModels.values()) {
|
|
||||||
|
for(CCModel c : cableContentsModels.values())
|
||||||
|
{
|
||||||
c.apply(new Translation(.5, .5, .5));
|
c.apply(new Translation(.5, .5, .5));
|
||||||
c.computeLighting(LightModel.standardLightModel);
|
c.computeLighting(LightModel.standardLightModel);
|
||||||
c.shrinkUVs(0.0005);
|
c.shrinkUVs(0.0005);
|
||||||
|
@ -100,63 +105,65 @@ public class RenderPartTransmitter implements IIconRegister
|
||||||
|
|
||||||
public void renderContents(PartUniversalCable cable, Vector3 pos)
|
public void renderContents(PartUniversalCable cable, Vector3 pos)
|
||||||
{
|
{
|
||||||
if(cable.transmitting == 0)
|
if(cable.getTransmitterNetwork().clientEnergyScale == 0)
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
GL11.glPushMatrix();
|
GL11.glPushMatrix();
|
||||||
CCRenderState.reset();
|
CCRenderState.reset();
|
||||||
CCRenderState.useNormals(true);
|
CCRenderState.useNormals(true);
|
||||||
CCRenderState.useModelColours(true);
|
CCRenderState.useModelColours(true);
|
||||||
//CCRenderState.setBrightness(255);
|
|
||||||
CCRenderState.startDrawing(7);
|
CCRenderState.startDrawing(7);
|
||||||
GL11.glTranslated(pos.x, pos.y, pos.z);
|
GL11.glTranslated(pos.x, pos.y, pos.z);
|
||||||
for (ForgeDirection side : ForgeDirection.VALID_DIRECTIONS)
|
|
||||||
|
for(ForgeDirection side : ForgeDirection.VALID_DIRECTIONS)
|
||||||
{
|
{
|
||||||
renderEnergySide(side, cable);
|
renderEnergySide(side, cable);
|
||||||
}
|
}
|
||||||
//MekanismRenderer.glowOn();
|
|
||||||
|
MekanismRenderer.glowOn();
|
||||||
CCRenderState.draw();
|
CCRenderState.draw();
|
||||||
//MekanismRenderer.glowOff();
|
MekanismRenderer.glowOff();
|
||||||
|
|
||||||
GL11.glPopMatrix();
|
GL11.glPopMatrix();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void renderContents(PartMechanicalPipe pipe, Vector3 pos)
|
public void renderContents(PartMechanicalPipe pipe, Vector3 pos)
|
||||||
{
|
{
|
||||||
if(pipe.fluidScale > 0 && pipe.transmitting != null)
|
if(pipe.getTransmitterNetwork().fluidScale > 0)
|
||||||
{
|
{
|
||||||
|
Fluid fluid = pipe.getTransmitterNetwork().refFluid;
|
||||||
|
float scale = pipe.getTransmitterNetwork().fluidScale;
|
||||||
|
|
||||||
push();
|
push();
|
||||||
|
|
||||||
if(pipe.transmitting.getFluid() == FluidRegistry.LAVA)
|
MekanismRenderer.glowOn(fluid.getLuminosity());
|
||||||
{
|
|
||||||
MekanismRenderer.glowOn();
|
|
||||||
}
|
|
||||||
|
|
||||||
CCRenderState.changeTexture((MekanismRenderer.getBlocksTexture()));
|
CCRenderState.changeTexture((MekanismRenderer.getBlocksTexture()));
|
||||||
GL11.glTranslated(pos.x, pos.y, pos.z);
|
GL11.glTranslated(pos.x, pos.y, pos.z);
|
||||||
|
|
||||||
for (ForgeDirection side : ForgeDirection.VALID_DIRECTIONS)
|
for(ForgeDirection side : ForgeDirection.VALID_DIRECTIONS)
|
||||||
{
|
{
|
||||||
if(PartTransmitter.connectionMapContainsSide(pipe.getAllCurrentConnections(), side))
|
if(PartTransmitter.connectionMapContainsSide(pipe.getAllCurrentConnections(), side))
|
||||||
{
|
{
|
||||||
DisplayInteger[] displayLists = getListAndRender(side, pipe.transmitting.getFluid());
|
DisplayInteger[] displayLists = getListAndRender(side, fluid);
|
||||||
|
|
||||||
if(displayLists != null)
|
if(displayLists != null)
|
||||||
{
|
{
|
||||||
displayLists[Math.max(3, (int)((float)pipe.fluidScale*(stages-1)))].render();
|
displayLists[Math.max(3, (int)((float)scale*(stages-1)))].render();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
DisplayInteger[] displayLists = getListAndRender(ForgeDirection.UNKNOWN, pipe.transmitting.getFluid());
|
DisplayInteger[] displayLists = getListAndRender(ForgeDirection.UNKNOWN, fluid);
|
||||||
|
|
||||||
if(displayLists != null)
|
if(displayLists != null)
|
||||||
{
|
{
|
||||||
displayLists[Math.max(3, (int)((float)pipe.fluidScale*(stages-1)))].render();
|
displayLists[Math.max(3, (int)((float)scale*(stages-1)))].render();
|
||||||
}
|
}
|
||||||
|
|
||||||
if(pipe.transmitting.getFluid() == FluidRegistry.LAVA)
|
MekanismRenderer.glowOff();
|
||||||
{
|
|
||||||
MekanismRenderer.glowOff();
|
|
||||||
}
|
|
||||||
|
|
||||||
pop();
|
pop();
|
||||||
}
|
}
|
||||||
|
@ -204,79 +211,79 @@ public class RenderPartTransmitter implements IIconRegister
|
||||||
{
|
{
|
||||||
case UNKNOWN:
|
case UNKNOWN:
|
||||||
{
|
{
|
||||||
toReturn.minX = 0.3 + offset;
|
toReturn.minX = 0.25 + offset;
|
||||||
toReturn.minY = 0.3 + offset;
|
toReturn.minY = 0.25 + offset;
|
||||||
toReturn.minZ = 0.3 + offset;
|
toReturn.minZ = 0.25 + offset;
|
||||||
|
|
||||||
toReturn.maxX = 0.7 - offset;
|
toReturn.maxX = 0.75 - offset;
|
||||||
toReturn.maxY = 0.3 - offset + ((float)i / (float)100);
|
toReturn.maxY = 0.25 + offset + ((float)i / (float)stages)*height;
|
||||||
toReturn.maxZ = 0.7 - offset;
|
toReturn.maxZ = 0.75 - offset;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case DOWN:
|
case DOWN:
|
||||||
{
|
{
|
||||||
toReturn.minX = 0.5 + offset - ((float)i / (float)100)/2;
|
toReturn.minX = 0.5 - (((float)i / (float)stages)*height)/2;
|
||||||
toReturn.minY = 0.0;
|
toReturn.minY = 0.0;
|
||||||
toReturn.minZ = 0.5 + offset - ((float)i / (float)100)/2;
|
toReturn.minZ = 0.5 - (((float)i / (float)stages)*height)/2;
|
||||||
|
|
||||||
toReturn.maxX = 0.5 - offset + ((float)i / (float)100)/2;
|
toReturn.maxX = 0.5 + (((float)i / (float)stages)*height)/2;
|
||||||
toReturn.maxY = 0.3 + offset;
|
toReturn.maxY = 0.25 + offset;
|
||||||
toReturn.maxZ = 0.5 - offset + ((float)i / (float)100)/2;
|
toReturn.maxZ = 0.5 + (((float)i / (float)stages)*height)/2;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case UP:
|
case UP:
|
||||||
{
|
{
|
||||||
toReturn.minX = 0.5 + offset - ((float)i / (float)100)/2;
|
toReturn.minX = 0.5 - (((float)i / (float)stages)*height)/2;
|
||||||
toReturn.minY = 0.3 - offset + ((float)i / (float)100);
|
toReturn.minY = 0.25 - offset + ((float)i / (float)stages)*height;
|
||||||
toReturn.minZ = 0.5 + offset - ((float)i / (float)100)/2;
|
toReturn.minZ = 0.5 - (((float)i / (float)stages)*height)/2;
|
||||||
|
|
||||||
toReturn.maxX = 0.5 - offset + ((float)i / (float)100)/2;
|
toReturn.maxX = 0.5 + (((float)i / (float)stages)*height)/2;
|
||||||
toReturn.maxY = 1.0;
|
toReturn.maxY = 1.0;
|
||||||
toReturn.maxZ = 0.5 - offset + ((float)i / (float)100)/2;
|
toReturn.maxZ = 0.5 + (((float)i / (float)stages)*height)/2;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case NORTH:
|
case NORTH:
|
||||||
{
|
{
|
||||||
toReturn.minX = 0.3 + offset;
|
toReturn.minX = 0.25 + offset;
|
||||||
toReturn.minY = 0.3 + offset;
|
toReturn.minY = 0.25 + offset;
|
||||||
toReturn.minZ = 0.0;
|
toReturn.minZ = 0.0;
|
||||||
|
|
||||||
toReturn.maxX = 0.7 - offset;
|
toReturn.maxX = 0.75 - offset;
|
||||||
toReturn.maxY = 0.3 - offset + ((float)i / (float)100);
|
toReturn.maxY = 0.25 + offset + ((float)i / (float)stages)*height;
|
||||||
toReturn.maxZ = 0.3 + offset;
|
toReturn.maxZ = 0.25 + offset;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case SOUTH:
|
case SOUTH:
|
||||||
{
|
{
|
||||||
toReturn.minX = 0.3 + offset;
|
toReturn.minX = 0.25 + offset;
|
||||||
toReturn.minY = 0.3 + offset;
|
toReturn.minY = 0.25 + offset;
|
||||||
toReturn.minZ = 0.7 - offset;
|
toReturn.minZ = 0.75 - offset;
|
||||||
|
|
||||||
toReturn.maxX = 0.7 - offset;
|
toReturn.maxX = 0.75 - offset;
|
||||||
toReturn.maxY = 0.3 - offset + ((float)i / (float)100);
|
toReturn.maxY = 0.25 + offset + ((float)i / (float)stages)*height;
|
||||||
toReturn.maxZ = 1.0;
|
toReturn.maxZ = 1.0;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case WEST:
|
case WEST:
|
||||||
{
|
{
|
||||||
toReturn.minX = 0.0;
|
toReturn.minX = 0.0;
|
||||||
toReturn.minY = 0.3 + offset;
|
toReturn.minY = 0.25 + offset;
|
||||||
toReturn.minZ = 0.3 + offset;
|
toReturn.minZ = 0.25 + offset;
|
||||||
|
|
||||||
toReturn.maxX = 0.3 + offset;
|
toReturn.maxX = 0.25 + offset;
|
||||||
toReturn.maxY = 0.3 - offset + ((float)i / (float)100);
|
toReturn.maxY = 0.25 + offset + ((float)i / (float)stages)*height;
|
||||||
toReturn.maxZ = 0.7 - offset;
|
toReturn.maxZ = 0.75 - offset;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case EAST:
|
case EAST:
|
||||||
{
|
{
|
||||||
toReturn.minX = 0.7 - offset;
|
toReturn.minX = 0.75 - offset;
|
||||||
toReturn.minY = 0.3 + offset;
|
toReturn.minY = 0.25 + offset;
|
||||||
toReturn.minZ = 0.3 + offset;
|
toReturn.minZ = 0.25 + offset;
|
||||||
|
|
||||||
toReturn.maxX = 1.0;
|
toReturn.maxX = 1.0;
|
||||||
toReturn.maxY = 0.3 - offset + ((float)i / (float)100);
|
toReturn.maxY = 0.25 + offset + ((float)i / (float)stages)*height;
|
||||||
toReturn.maxZ = 0.7 - offset;
|
toReturn.maxZ = 0.75 - offset;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -322,7 +329,7 @@ public class RenderPartTransmitter implements IIconRegister
|
||||||
boolean connected = PartTransmitter.connectionMapContainsSide(cable.getAllCurrentConnections(), side);
|
boolean connected = PartTransmitter.connectionMapContainsSide(cable.getAllCurrentConnections(), side);
|
||||||
String name = side.name().toLowerCase();
|
String name = side.name().toLowerCase();
|
||||||
name += connected ? "Out" : "In";
|
name += connected ? "Out" : "In";
|
||||||
renderTransparency(liquidEnergyTexture, cableContentsModels.get(name), new ColourRGBA(1.0, 1.0, 1.0, cable.transmitting));
|
renderTransparency(MekanismRenderer.energyIcon, cableContentsModels.get(name), new ColourRGBA(1.0, 1.0, 1.0, cable.getTransmitterNetwork().clientEnergyScale));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void renderPart(Icon icon, CCModel cc, double x, double y, double z) {
|
public void renderPart(Icon icon, CCModel cc, double x, double y, double z) {
|
||||||
|
@ -351,8 +358,6 @@ public class RenderPartTransmitter implements IIconRegister
|
||||||
pressTubeTextures[1] = pressTubeTextures[0];
|
pressTubeTextures[1] = pressTubeTextures[0];
|
||||||
mechPipeTextures[0] = register.registerIcon("mekanism:models/MechanicalPipe");
|
mechPipeTextures[0] = register.registerIcon("mekanism:models/MechanicalPipe");
|
||||||
mechPipeTextures[1] = register.registerIcon("mekanism:models/MechanicalPipeActive");
|
mechPipeTextures[1] = register.registerIcon("mekanism:models/MechanicalPipeActive");
|
||||||
|
|
||||||
liquidEnergyTexture = register.registerIcon("mekanism:LiquidEnergy");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -366,6 +366,7 @@ public class EnergyNetwork extends DynamicNetwork<TileEntity, EnergyNetwork, Dou
|
||||||
|
|
||||||
if(needsUpdate)
|
if(needsUpdate)
|
||||||
{
|
{
|
||||||
|
System.out.println("sent update");
|
||||||
MinecraftForge.EVENT_BUS.post(new EnergyTransferEvent(this, currentPowerScale));
|
MinecraftForge.EVENT_BUS.post(new EnergyTransferEvent(this, currentPowerScale));
|
||||||
needsUpdate = false;
|
needsUpdate = false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,6 +28,7 @@ public class MultipartMekanism implements IPartFactory
|
||||||
{
|
{
|
||||||
MultiPartRegistry.registerParts(this, new String[]{"mekanism:universal_cable", "mekanism:mechanical_pipe", "mekanism:pressurized_tube"});
|
MultiPartRegistry.registerParts(this, new String[]{"mekanism:universal_cable", "mekanism:mechanical_pipe", "mekanism:pressurized_tube"});
|
||||||
MultipartGenerator.registerPassThroughInterface("mekanism.api.transmitters.ITransmitter");
|
MultipartGenerator.registerPassThroughInterface("mekanism.api.transmitters.ITransmitter");
|
||||||
|
MultipartGenerator.registerPassThroughInterface("mekanism.common.ITileNetwork");
|
||||||
MultipartGenerator.registerPassThroughInterface("cofh.api.energy.IEnergyHandler");
|
MultipartGenerator.registerPassThroughInterface("cofh.api.energy.IEnergyHandler");
|
||||||
MultipartGenerator.registerPassThroughInterface("ic2.api.energy.tile.IEnergySink");
|
MultipartGenerator.registerPassThroughInterface("ic2.api.energy.tile.IEnergySink");
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,9 +25,6 @@ public class PartMechanicalPipe extends PartTransmitter<FluidNetwork, FluidStack
|
||||||
{
|
{
|
||||||
/** The fake tank used for fluid transfer calculations. */
|
/** The fake tank used for fluid transfer calculations. */
|
||||||
public FluidTank dummyTank = new FluidTank(FluidContainerRegistry.BUCKET_VOLUME);
|
public FluidTank dummyTank = new FluidTank(FluidContainerRegistry.BUCKET_VOLUME);
|
||||||
|
|
||||||
/** The scale (0F -> 1F) of this pipe's fluid level. */
|
|
||||||
public float fluidScale;
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getType()
|
public String getType()
|
||||||
|
@ -40,19 +37,6 @@ public class PartMechanicalPipe extends PartTransmitter<FluidNetwork, FluidStack
|
||||||
{
|
{
|
||||||
return TransmissionType.FLUID;
|
return TransmissionType.FLUID;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void clientUpdate(FluidStack fluidStack)
|
|
||||||
{
|
|
||||||
if(fluidStack.isFluidEqual(transmitting))
|
|
||||||
{
|
|
||||||
fluidScale = Math.min(1, fluidScale+((float)fluidStack.amount/50F));
|
|
||||||
}
|
|
||||||
else if(transmitting == null)
|
|
||||||
{
|
|
||||||
transmitting = fluidStack.copy();
|
|
||||||
fluidScale += Math.min(1, ((float)fluidStack.amount/50F));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isValidAcceptor(TileEntity tile, ForgeDirection side)
|
public boolean isValidAcceptor(TileEntity tile, ForgeDirection side)
|
||||||
|
@ -129,17 +113,8 @@ public class PartMechanicalPipe extends PartTransmitter<FluidNetwork, FluidStack
|
||||||
@Override
|
@Override
|
||||||
public void update()
|
public void update()
|
||||||
{
|
{
|
||||||
if(world().isRemote)
|
if(!world().isRemote)
|
||||||
{
|
{
|
||||||
if(fluidScale > 0)
|
|
||||||
{
|
|
||||||
fluidScale -= .01;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
transmitting = null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
if(isActive)
|
if(isActive)
|
||||||
{
|
{
|
||||||
IFluidHandler[] connectedAcceptors = PipeUtils.getConnectedAcceptors(tile());
|
IFluidHandler[] connectedAcceptors = PipeUtils.getConnectedAcceptors(tile());
|
||||||
|
@ -162,9 +137,6 @@ public class PartMechanicalPipe extends PartTransmitter<FluidNetwork, FluidStack
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void chunkLoad() {}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getTransmitterNetworkSize()
|
public int getTransmitterNetworkSize()
|
||||||
{
|
{
|
||||||
|
|
|
@ -42,13 +42,6 @@ public class PartPressurizedTube extends PartTransmitter<GasNetwork, Gas>
|
||||||
return new GasNetwork(networks);
|
return new GasNetwork(networks);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void chunkLoad()
|
|
||||||
{
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getTransmitterNetworkSize()
|
public int getTransmitterNetworkSize()
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,13 +1,22 @@
|
||||||
package mekanism.common.multipart;
|
package mekanism.common.multipart;
|
||||||
|
|
||||||
import ic2.api.energy.event.EnergyTileUnloadEvent;
|
import java.util.ArrayList;
|
||||||
|
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
import buildcraft.api.tools.IToolWrench;
|
import com.google.common.io.ByteArrayDataInput;
|
||||||
|
|
||||||
|
import mekanism.api.Object3D;
|
||||||
|
import mekanism.api.transmitters.DynamicNetwork;
|
||||||
|
import mekanism.api.transmitters.ITransmitter;
|
||||||
|
import mekanism.api.transmitters.TransmissionType;
|
||||||
|
import mekanism.api.transmitters.TransmitterNetworkRegistry;
|
||||||
|
import mekanism.client.render.RenderPartTransmitter;
|
||||||
|
import mekanism.common.ITileNetwork;
|
||||||
|
import mekanism.common.Mekanism;
|
||||||
|
import mekanism.common.item.ItemConfigurator;
|
||||||
import net.minecraft.client.particle.EffectRenderer;
|
import net.minecraft.client.particle.EffectRenderer;
|
||||||
import net.minecraft.entity.player.EntityPlayer;
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
|
@ -15,15 +24,7 @@ import net.minecraft.tileentity.TileEntity;
|
||||||
import net.minecraft.util.Icon;
|
import net.minecraft.util.Icon;
|
||||||
import net.minecraft.util.MovingObjectPosition;
|
import net.minecraft.util.MovingObjectPosition;
|
||||||
import net.minecraftforge.common.ForgeDirection;
|
import net.minecraftforge.common.ForgeDirection;
|
||||||
import net.minecraftforge.common.MinecraftForge;
|
import buildcraft.api.tools.IToolWrench;
|
||||||
import mekanism.api.Object3D;
|
|
||||||
import mekanism.api.transmitters.DynamicNetwork;
|
|
||||||
import mekanism.api.transmitters.ITransmitter;
|
|
||||||
import mekanism.api.transmitters.TransmissionType;
|
|
||||||
import mekanism.api.transmitters.TransmitterNetworkRegistry;
|
|
||||||
import mekanism.client.render.RenderPartTransmitter;
|
|
||||||
import mekanism.common.Mekanism;
|
|
||||||
import mekanism.common.item.ItemConfigurator;
|
|
||||||
import codechicken.lib.data.MCDataInput;
|
import codechicken.lib.data.MCDataInput;
|
||||||
import codechicken.lib.data.MCDataOutput;
|
import codechicken.lib.data.MCDataOutput;
|
||||||
import codechicken.lib.lighting.LazyLightMatrix;
|
import codechicken.lib.lighting.LazyLightMatrix;
|
||||||
|
@ -43,11 +44,10 @@ import cpw.mods.fml.common.FMLCommonHandler;
|
||||||
import cpw.mods.fml.relauncher.Side;
|
import cpw.mods.fml.relauncher.Side;
|
||||||
import cpw.mods.fml.relauncher.SideOnly;
|
import cpw.mods.fml.relauncher.SideOnly;
|
||||||
|
|
||||||
public abstract class PartTransmitter<N extends DynamicNetwork<?, N, D>, D> extends TMultiPart implements TSlottedPart, JNormalOcclusion, IHollowConnect, JIconHitEffects, ITransmitter<N, D>
|
public abstract class PartTransmitter<N extends DynamicNetwork<?, N, D>, D> extends TMultiPart implements TSlottedPart, JNormalOcclusion, IHollowConnect, JIconHitEffects, ITransmitter<N, D>, ITileNetwork
|
||||||
{
|
{
|
||||||
public int delayTicks;
|
public int delayTicks;
|
||||||
public N theNetwork;
|
public N theNetwork;
|
||||||
public D transmitting;
|
|
||||||
public static IndexedCuboid6[] sides = new IndexedCuboid6[7];
|
public static IndexedCuboid6[] sides = new IndexedCuboid6[7];
|
||||||
public ForgeDirection testingSide = null;
|
public ForgeDirection testingSide = null;
|
||||||
public byte currentAcceptorConnections = 0x00;
|
public byte currentAcceptorConnections = 0x00;
|
||||||
|
@ -83,14 +83,13 @@ public abstract class PartTransmitter<N extends DynamicNetwork<?, N, D>, D> exte
|
||||||
@Override
|
@Override
|
||||||
public void bind(TileMultipart t)
|
public void bind(TileMultipart t)
|
||||||
{
|
{
|
||||||
if (tile() != null && theNetwork != null)
|
if(tile() != null && theNetwork != null)
|
||||||
{
|
{
|
||||||
getTransmitterNetwork().transmitters.remove(tile());
|
getTransmitterNetwork().transmitters.remove(tile());
|
||||||
super.bind(t);
|
super.bind(t);
|
||||||
getTransmitterNetwork().transmitters.add((ITransmitter<N, D>) tile());
|
getTransmitterNetwork().transmitters.add((ITransmitter<N, D>) tile());
|
||||||
}
|
}
|
||||||
else
|
else {
|
||||||
{
|
|
||||||
super.bind(t);
|
super.bind(t);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -98,20 +97,24 @@ public abstract class PartTransmitter<N extends DynamicNetwork<?, N, D>, D> exte
|
||||||
public static boolean connectionMapContainsSide(byte connections, ForgeDirection side)
|
public static boolean connectionMapContainsSide(byte connections, ForgeDirection side)
|
||||||
{
|
{
|
||||||
byte tester = (byte) (1 << side.ordinal());
|
byte tester = (byte) (1 << side.ordinal());
|
||||||
return ((connections & tester) > 0);
|
return (connections & tester) > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
public byte getPossibleTransmitterConnections()
|
public byte getPossibleTransmitterConnections()
|
||||||
{
|
{
|
||||||
byte connections = 0x00;
|
byte connections = 0x00;
|
||||||
|
|
||||||
if(world().isBlockIndirectlyGettingPowered(x(), y(), z()))
|
if(world().isBlockIndirectlyGettingPowered(x(), y(), z()))
|
||||||
|
{
|
||||||
return connections;
|
return connections;
|
||||||
|
}
|
||||||
|
|
||||||
for(ForgeDirection side : ForgeDirection.VALID_DIRECTIONS)
|
for(ForgeDirection side : ForgeDirection.VALID_DIRECTIONS)
|
||||||
{
|
{
|
||||||
if (canConnectMutual(side))
|
if(canConnectMutual(side))
|
||||||
{
|
{
|
||||||
TileEntity tileEntity = Object3D.get(tile()).getFromSide(side).getTileEntity(world());
|
TileEntity tileEntity = Object3D.get(tile()).getFromSide(side).getTileEntity(world());
|
||||||
|
|
||||||
if(TransmissionType.checkTransmissionType(tileEntity, getTransmissionType()))
|
if(TransmissionType.checkTransmissionType(tileEntity, getTransmissionType()))
|
||||||
{
|
{
|
||||||
connections |= 1 << side.ordinal();
|
connections |= 1 << side.ordinal();
|
||||||
|
@ -124,12 +127,15 @@ public abstract class PartTransmitter<N extends DynamicNetwork<?, N, D>, D> exte
|
||||||
public byte getPossibleAcceptorConnections()
|
public byte getPossibleAcceptorConnections()
|
||||||
{
|
{
|
||||||
byte connections = 0x00;
|
byte connections = 0x00;
|
||||||
|
|
||||||
if(world().isBlockIndirectlyGettingPowered(x(), y(), z()))
|
if(world().isBlockIndirectlyGettingPowered(x(), y(), z()))
|
||||||
|
{
|
||||||
return connections;
|
return connections;
|
||||||
|
}
|
||||||
|
|
||||||
for(ForgeDirection side : ForgeDirection.VALID_DIRECTIONS)
|
for(ForgeDirection side : ForgeDirection.VALID_DIRECTIONS)
|
||||||
{
|
{
|
||||||
if (canConnectMutual(side))
|
if(canConnectMutual(side))
|
||||||
{
|
{
|
||||||
TileEntity tileEntity = Object3D.get(tile()).getFromSide(side).getTileEntity(world());
|
TileEntity tileEntity = Object3D.get(tile()).getFromSide(side).getTileEntity(world());
|
||||||
|
|
||||||
|
@ -140,41 +146,46 @@ public abstract class PartTransmitter<N extends DynamicNetwork<?, N, D>, D> exte
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return connections;
|
return connections;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void refreshTransmitterNetwork()
|
public void refreshTransmitterNetwork()
|
||||||
{
|
{
|
||||||
if(!world().isRemote)
|
byte possibleTransmitters = getPossibleTransmitterConnections();
|
||||||
|
byte possibleAcceptors = getPossibleAcceptorConnections();
|
||||||
|
|
||||||
|
if(possibleTransmitters != currentTransmitterConnections)
|
||||||
{
|
{
|
||||||
byte possibleTransmitters = getPossibleTransmitterConnections();
|
byte or = (byte)(possibleTransmitters | currentTransmitterConnections);
|
||||||
byte possibleAcceptors = getPossibleAcceptorConnections();
|
|
||||||
|
|
||||||
if(possibleTransmitters != currentTransmitterConnections)
|
if(or != possibleTransmitters)
|
||||||
{
|
{
|
||||||
byte or = (byte)(possibleTransmitters | currentTransmitterConnections);
|
((DynamicNetwork<?, N, D>)getTransmitterNetwork()).split((ITransmitter<N, D>)tile());
|
||||||
if(or != possibleTransmitters)
|
setTransmitterNetwork(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
for(ForgeDirection side : ForgeDirection.VALID_DIRECTIONS)
|
||||||
|
{
|
||||||
|
if(connectionMapContainsSide(possibleTransmitters, side))
|
||||||
{
|
{
|
||||||
((DynamicNetwork<?, N, D>)getTransmitterNetwork()).split((ITransmitter<N, D>)tile());
|
TileEntity tileEntity = Object3D.get(tile()).getFromSide(side).getTileEntity(world());
|
||||||
setTransmitterNetwork(null);
|
|
||||||
}
|
if(TransmissionType.checkTransmissionType(tileEntity, getTransmissionType()))
|
||||||
|
|
||||||
for(ForgeDirection side : ForgeDirection.VALID_DIRECTIONS)
|
|
||||||
{
|
|
||||||
if(connectionMapContainsSide(possibleTransmitters, side))
|
|
||||||
{
|
{
|
||||||
TileEntity tileEntity = Object3D.get(tile()).getFromSide(side).getTileEntity(world());
|
((DynamicNetwork<?,N, D>)getTransmitterNetwork()).merge(((ITransmitter<N, D>)tileEntity).getTransmitterNetwork());
|
||||||
|
|
||||||
if(TransmissionType.checkTransmissionType(tileEntity, getTransmissionType()))
|
|
||||||
((DynamicNetwork<?,N, D>)getTransmitterNetwork()).merge(((ITransmitter<N, D>)tileEntity).getTransmitterNetwork());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
((DynamicNetwork<?,N, D>)getTransmitterNetwork()).refresh();
|
||||||
|
|
||||||
|
if(!world().isRemote)
|
||||||
|
{
|
||||||
currentTransmitterConnections = possibleTransmitters;
|
currentTransmitterConnections = possibleTransmitters;
|
||||||
currentAcceptorConnections = possibleAcceptors;
|
currentAcceptorConnections = possibleAcceptors;
|
||||||
|
|
||||||
((DynamicNetwork<?,N, D>)getTransmitterNetwork()).refresh();
|
|
||||||
|
|
||||||
sendDescUpdate();
|
sendDescUpdate();
|
||||||
}
|
}
|
||||||
|
@ -182,7 +193,7 @@ public abstract class PartTransmitter<N extends DynamicNetwork<?, N, D>, D> exte
|
||||||
|
|
||||||
public byte getAllCurrentConnections()
|
public byte getAllCurrentConnections()
|
||||||
{
|
{
|
||||||
return (byte) (currentTransmitterConnections | currentAcceptorConnections);
|
return (byte)(currentTransmitterConnections | currentAcceptorConnections);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -195,13 +206,18 @@ public abstract class PartTransmitter<N extends DynamicNetwork<?, N, D>, D> exte
|
||||||
public Iterable<IndexedCuboid6> getSubParts()
|
public Iterable<IndexedCuboid6> getSubParts()
|
||||||
{
|
{
|
||||||
Set<IndexedCuboid6> subParts = new HashSet<IndexedCuboid6>();
|
Set<IndexedCuboid6> subParts = new HashSet<IndexedCuboid6>();
|
||||||
|
|
||||||
if(tile() != null)
|
if(tile() != null)
|
||||||
{
|
{
|
||||||
for(ForgeDirection side : ForgeDirection.VALID_DIRECTIONS)
|
for(ForgeDirection side : ForgeDirection.VALID_DIRECTIONS)
|
||||||
{
|
{
|
||||||
int ord = side.ordinal();
|
int ord = side.ordinal();
|
||||||
byte connections = getAllCurrentConnections();
|
byte connections = getAllCurrentConnections();
|
||||||
if(connectionMapContainsSide(connections, side) || side == testingSide) subParts.add(sides[ord]);
|
|
||||||
|
if(connectionMapContainsSide(connections, side) || side == testingSide)
|
||||||
|
{
|
||||||
|
subParts.add(sides[ord]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
subParts.add(sides[6]);
|
subParts.add(sides[6]);
|
||||||
|
@ -313,7 +329,7 @@ public abstract class PartTransmitter<N extends DynamicNetwork<?, N, D>, D> exte
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(connectedNets.size() == 0 || world().isRemote)
|
if(connectedNets.size() == 0)
|
||||||
{
|
{
|
||||||
theNetwork = createNetworkFromSingleTransmitter((ITransmitter<N, D>)tile());
|
theNetwork = createNetworkFromSingleTransmitter((ITransmitter<N, D>)tile());
|
||||||
}
|
}
|
||||||
|
@ -365,7 +381,10 @@ public abstract class PartTransmitter<N extends DynamicNetwork<?, N, D>, D> exte
|
||||||
public boolean canConnect(ForgeDirection side)
|
public boolean canConnect(ForgeDirection side)
|
||||||
{
|
{
|
||||||
if(world().isBlockIndirectlyGettingPowered(x(), y(), z()))
|
if(world().isBlockIndirectlyGettingPowered(x(), y(), z()))
|
||||||
|
{
|
||||||
return false;
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
testingSide = side;
|
testingSide = side;
|
||||||
boolean unblocked = tile().canReplacePart(this, this);
|
boolean unblocked = tile().canReplacePart(this, this);
|
||||||
testingSide = null;
|
testingSide = null;
|
||||||
|
@ -417,6 +436,7 @@ public abstract class PartTransmitter<N extends DynamicNetwork<?, N, D>, D> exte
|
||||||
tile().dropItems(getDrops());
|
tile().dropItems(getDrops());
|
||||||
tile().remPart(this);
|
tile().remPart(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -432,11 +452,14 @@ public abstract class PartTransmitter<N extends DynamicNetwork<?, N, D>, D> exte
|
||||||
@Override
|
@Override
|
||||||
public void preRemove()
|
public void preRemove()
|
||||||
{
|
{
|
||||||
if(!world().isRemote && tile() instanceof ITransmitter)
|
if(tile() instanceof ITransmitter)
|
||||||
{
|
{
|
||||||
getTransmitterNetwork().split((ITransmitter<N, D>)tile());
|
getTransmitterNetwork().split((ITransmitter<N, D>)tile());
|
||||||
|
|
||||||
TransmitterNetworkRegistry.getInstance().pruneEmptyNetworks();
|
if(!world().isRemote)
|
||||||
|
{
|
||||||
|
TransmitterNetworkRegistry.getInstance().pruneEmptyNetworks();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
super.preRemove();
|
super.preRemove();
|
||||||
|
@ -464,6 +487,9 @@ public abstract class PartTransmitter<N extends DynamicNetwork<?, N, D>, D> exte
|
||||||
{
|
{
|
||||||
return FMLCommonHandler.instance().getEffectiveSide().isClient();
|
return FMLCommonHandler.instance().getEffectiveSide().isClient();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void chunkLoad() {}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onAdded()
|
public void onAdded()
|
||||||
|
@ -492,4 +518,13 @@ public abstract class PartTransmitter<N extends DynamicNetwork<?, N, D>, D> exte
|
||||||
super.onPartChanged(part);
|
super.onPartChanged(part);
|
||||||
refreshTransmitterNetwork();
|
refreshTransmitterNetwork();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void handlePacketData(ByteArrayDataInput dataStream) throws Exception {}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ArrayList getNetworkedData(ArrayList data)
|
||||||
|
{
|
||||||
|
return data;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,13 +30,9 @@ import cpw.mods.fml.relauncher.SideOnly;
|
||||||
|
|
||||||
public class PartUniversalCable extends PartTransmitter<EnergyNetwork, Double> implements IEnergySink
|
public class PartUniversalCable extends PartTransmitter<EnergyNetwork, Double> implements IEnergySink
|
||||||
{
|
{
|
||||||
public Double setLevel = 0.0;
|
|
||||||
private int ticks;
|
|
||||||
|
|
||||||
public PartUniversalCable()
|
public PartUniversalCable()
|
||||||
{
|
{
|
||||||
super();
|
super();
|
||||||
transmitting = 0.0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -108,21 +104,8 @@ public class PartUniversalCable extends PartTransmitter<EnergyNetwork, Double> i
|
||||||
public void renderDynamic(Vector3 pos, float frame, int pass)
|
public void renderDynamic(Vector3 pos, float frame, int pass)
|
||||||
{
|
{
|
||||||
if(pass == 1)
|
if(pass == 1)
|
||||||
RenderPartTransmitter.getInstance().renderContents(this, pos);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void update()
|
|
||||||
{
|
|
||||||
if(world().isRemote)
|
|
||||||
{
|
{
|
||||||
System.out.println("print");
|
RenderPartTransmitter.getInstance().renderContents(this, pos);
|
||||||
if(transmitting != setLevel)
|
|
||||||
{
|
|
||||||
transmitting = (transmitting *4.0 + setLevel)/5.0;
|
|
||||||
if(Math.max(transmitting - setLevel, setLevel - transmitting) < 0.05)
|
|
||||||
transmitting = setLevel;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -3,16 +3,17 @@ package mekanism.common.network;
|
||||||
import java.io.DataOutputStream;
|
import java.io.DataOutputStream;
|
||||||
|
|
||||||
import mekanism.api.gas.Gas;
|
import mekanism.api.gas.Gas;
|
||||||
|
import mekanism.api.gas.GasNetwork;
|
||||||
import mekanism.api.gas.GasRegistry;
|
import mekanism.api.gas.GasRegistry;
|
||||||
import mekanism.api.transmitters.ITransmitter;
|
import mekanism.api.transmitters.ITransmitter;
|
||||||
import mekanism.common.tileentity.TileEntityMechanicalPipe;
|
import mekanism.common.EnergyNetwork;
|
||||||
import mekanism.common.tileentity.TileEntityPressurizedTube;
|
import mekanism.common.FluidNetwork;
|
||||||
import mekanism.common.tileentity.TileEntityUniversalCable;
|
|
||||||
import net.minecraft.entity.player.EntityPlayer;
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
import net.minecraft.tileentity.TileEntity;
|
import net.minecraft.tileentity.TileEntity;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
import net.minecraftforge.fluids.Fluid;
|
import net.minecraftforge.fluids.Fluid;
|
||||||
import net.minecraftforge.fluids.FluidRegistry;
|
import net.minecraftforge.fluids.FluidRegistry;
|
||||||
|
import net.minecraftforge.fluids.FluidStack;
|
||||||
|
|
||||||
import com.google.common.io.ByteArrayDataInput;
|
import com.google.common.io.ByteArrayDataInput;
|
||||||
|
|
||||||
|
@ -86,7 +87,7 @@ public class PacketTransmitterUpdate implements IMekanismPacket
|
||||||
|
|
||||||
if(tileEntity != null)
|
if(tileEntity != null)
|
||||||
{
|
{
|
||||||
((TileEntityUniversalCable)tileEntity).getTransmitterNetwork().clientEnergyScale = powerLevel;
|
((ITransmitter<EnergyNetwork, Double>)tileEntity).getTransmitterNetwork().clientEnergyScale = powerLevel;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if(transmitterType == 2)
|
else if(transmitterType == 2)
|
||||||
|
@ -98,8 +99,8 @@ public class PacketTransmitterUpdate implements IMekanismPacket
|
||||||
|
|
||||||
if(tileEntity != null)
|
if(tileEntity != null)
|
||||||
{
|
{
|
||||||
((TileEntityPressurizedTube)tileEntity).getTransmitterNetwork().refGas = gasType;
|
((ITransmitter<GasNetwork, Gas>)tileEntity).getTransmitterNetwork().refGas = gasType;
|
||||||
((TileEntityPressurizedTube)tileEntity).getTransmitterNetwork().didTransfer = didGasTransfer;
|
((ITransmitter<GasNetwork, Gas>)tileEntity).getTransmitterNetwork().didTransfer = didGasTransfer;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if(transmitterType == 3)
|
else if(transmitterType == 3)
|
||||||
|
@ -112,8 +113,8 @@ public class PacketTransmitterUpdate implements IMekanismPacket
|
||||||
|
|
||||||
if(tileEntity != null)
|
if(tileEntity != null)
|
||||||
{
|
{
|
||||||
((TileEntityMechanicalPipe)tileEntity).getTransmitterNetwork().refFluid = fluidType;
|
((ITransmitter<FluidNetwork, FluidStack>)tileEntity).getTransmitterNetwork().refFluid = fluidType;
|
||||||
((TileEntityMechanicalPipe)tileEntity).getTransmitterNetwork().didTransfer = didFluidTransfer;
|
((ITransmitter<FluidNetwork, FluidStack>)tileEntity).getTransmitterNetwork().didTransfer = didFluidTransfer;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue