fixed a lot of the new power garbage, better pylons

This commit is contained in:
Bob 2021-11-20 15:57:19 +01:00
parent f39a6f9ca1
commit fa78371f2b
31 changed files with 473 additions and 429 deletions

View File

@ -1,5 +1,10 @@
package api.hbm.energy; package api.hbm.energy;
import com.hbm.packet.AuxParticlePacketNT;
import com.hbm.packet.PacketDispatcher;
import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World; import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection; import net.minecraftforge.common.util.ForgeDirection;
@ -49,13 +54,23 @@ public interface IEnergyConnector {
public default void trySubscribe(World world, int x, int y, int z) { public default void trySubscribe(World world, int x, int y, int z) {
TileEntity te = world.getTileEntity(x, y, z); TileEntity te = world.getTileEntity(x, y, z);
boolean red = false;
if(te instanceof IEnergyConductor) { if(te instanceof IEnergyConductor) {
IEnergyConductor con = (IEnergyConductor) te; IEnergyConductor con = (IEnergyConductor) te;
if(con.getPowerNet() != null && !con.getPowerNet().isSubscribed(this)) if(con.getPowerNet() != null && !con.getPowerNet().isSubscribed(this))
con.getPowerNet().subscribe(this); con.getPowerNet().subscribe(this);
if(con.getPowerNet() != null)
red = true;
} }
NBTTagCompound data = new NBTTagCompound();
data.setString("type", "vanillaExt");
data.setString("mode", red ? "reddust" : "bluedust");
PacketDispatcher.wrapper.sendToAllAround(new AuxParticlePacketNT(data, x + world.rand.nextDouble(), y + world.rand.nextDouble(), z + world.rand.nextDouble()), new TargetPoint(world.provider.dimensionId, x + 0.5, y + 0.5, z + 0.5, 25));
} }
public default void tryUnsubscribe(World world, int x, int y, int z) { public default void tryUnsubscribe(World world, int x, int y, int z) {

View File

@ -1,7 +1,6 @@
package api.hbm.energy; package api.hbm.energy;
import net.minecraft.world.IBlockAccess; import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection; import net.minecraftforge.common.util.ForgeDirection;
/** /**

View File

@ -1,5 +1,10 @@
package api.hbm.energy; package api.hbm.energy;
import com.hbm.packet.AuxParticlePacketNT;
import com.hbm.packet.PacketDispatcher;
import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World; import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection; import net.minecraftforge.common.util.ForgeDirection;
@ -47,6 +52,7 @@ public interface IEnergyUser extends IEnergyConnector {
TileEntity te = world.getTileEntity(x, y, z); TileEntity te = world.getTileEntity(x, y, z);
boolean wasSubscribed = false; boolean wasSubscribed = false;
boolean red = false;
// first we make sure we're not subscribed to the network that we'll be supplying // first we make sure we're not subscribed to the network that we'll be supplying
if(te instanceof IEnergyConductor) { if(te instanceof IEnergyConductor) {
@ -66,6 +72,7 @@ public interface IEnergyUser extends IEnergyConnector {
long oldPower = this.getPower(); long oldPower = this.getPower();
long transfer = oldPower - con.transferPower(oldPower); long transfer = oldPower - con.transferPower(oldPower);
this.setPower(oldPower - transfer); this.setPower(oldPower - transfer);
red = true;
} }
} }
@ -77,6 +84,11 @@ public interface IEnergyUser extends IEnergyConnector {
con.getPowerNet().subscribe(this); con.getPowerNet().subscribe(this);
} }
} }
NBTTagCompound data = new NBTTagCompound();
data.setString("type", "vanillaExt");
data.setString("mode", red ? "reddust" : "greendust");
PacketDispatcher.wrapper.sendToAllAround(new AuxParticlePacketNT(data, x + world.rand.nextDouble(), y + world.rand.nextDouble(), z + world.rand.nextDouble()), new TargetPoint(world.provider.dimensionId, x + 0.5, y + 0.5, z + 0.5, 25));
} }
public default void updateStandardConnections(World world, int x, int y, int z) { public default void updateStandardConnections(World world, int x, int y, int z) {

View File

@ -1786,7 +1786,7 @@ public class ModBlocks {
machine_powerrtg = new MachineMiniRTG(Material.iron).setBlockName("machine_powerrtg").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":rtg_polonium"); machine_powerrtg = new MachineMiniRTG(Material.iron).setBlockName("machine_powerrtg").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":rtg_polonium");
red_wire_coated = new WireCoated(Material.iron).setBlockName("red_wire_coated").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":red_wire_coated"); red_wire_coated = new WireCoated(Material.iron).setBlockName("red_wire_coated").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":red_wire_coated");
red_cable = new BlockCable(Material.iron).setBlockName("red_cable").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":red_cable_icon"); red_cable = new BlockCable(Material.iron).setBlockName("red_cable").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":cable_neo");
rf_cable = new BlockRFCable(Material.iron).setBlockName("rf_cable").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":rf_cable_icon"); rf_cable = new BlockRFCable(Material.iron).setBlockName("rf_cable").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":rf_cable_icon");
red_pylon = new PylonRedWire(Material.iron).setBlockName("red_pylon").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":red_pylon"); red_pylon = new PylonRedWire(Material.iron).setBlockName("red_pylon").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":red_pylon");
cable_switch = new CableSwitch(Material.iron).setBlockName("cable_switch").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":cable_switch_off"); cable_switch = new CableSwitch(Material.iron).setBlockName("cable_switch").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":cable_switch_off");

View File

@ -79,7 +79,7 @@ public class BlockBobble extends BlockContainer {
return true; return true;
} else { } else {
return false; return true;
} }
} }
@ -169,6 +169,7 @@ public class BlockBobble extends BlockContainer {
PU238("Pu-238", "Pu-238", "Improved Tom impact mechanics", null, false), PU238("Pu-238", "Pu-238", "Improved Tom impact mechanics", null, false),
VT("VT-6/24", "VT-6/24", "Balefire warhead model and general texturework", "You cannot unfuck a horse.", true), VT("VT-6/24", "VT-6/24", "Balefire warhead model and general texturework", "You cannot unfuck a horse.", true),
DOC("The Doctor", "Doctor17PH", "Russian localization, lunar miner", "Perhaps the moon rocks were too expensive", true), DOC("The Doctor", "Doctor17PH", "Russian localization, lunar miner", "Perhaps the moon rocks were too expensive", true),
BLUEHAT("The Blue Hat", "The Blue Hat", "Textures", "there's a listening device in this bobblehead$don't touch it thanks", true),
//testing garbage. why is she so dumb? //testing garbage. why is she so dumb?
CIRNO("Cirno", "Cirno", "being a dumb ice fairy", "No brain. Head empty.", true); CIRNO("Cirno", "Cirno", "being a dumb ice fairy", "No brain. Head empty.", true);

View File

@ -1,36 +0,0 @@
package com.hbm.blocks.machine;
import com.hbm.tileentity.conductor.TileEntityPylonRedWire;
import net.minecraft.block.BlockContainer;
import net.minecraft.block.material.Material;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
public class PylonRedWire extends BlockContainer {
public PylonRedWire(Material p_i45386_1_) {
super(p_i45386_1_);
}
@Override
public TileEntity createNewTileEntity(World p_149915_1_, int p_149915_2_) {
return new TileEntityPylonRedWire();
}
@Override
public int getRenderType(){
return -1;
}
@Override
public boolean isOpaqueCube() {
return false;
}
@Override
public boolean renderAsNormalBlock() {
return false;
}
}

View File

@ -1,11 +1,15 @@
package com.hbm.blocks.network; package com.hbm.blocks.network;
import java.util.List;
import com.hbm.blocks.test.TestConductor; import com.hbm.blocks.test.TestConductor;
import com.hbm.lib.Library;
import com.hbm.tileentity.network.TileEntityCableBaseNT; import com.hbm.tileentity.network.TileEntityCableBaseNT;
import cpw.mods.fml.client.registry.RenderingRegistry; import cpw.mods.fml.client.registry.RenderingRegistry;
import net.minecraft.block.BlockContainer; import net.minecraft.block.BlockContainer;
import net.minecraft.block.material.Material; import net.minecraft.block.material.Material;
import net.minecraft.entity.Entity;
import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.AxisAlignedBB;
import net.minecraft.world.IBlockAccess; import net.minecraft.world.IBlockAccess;
@ -36,4 +40,48 @@ public class BlockCable extends BlockContainer {
public boolean renderAsNormalBlock() { public boolean renderAsNormalBlock() {
return false; return false;
} }
@Override
public AxisAlignedBB getCollisionBoundingBoxFromPool(World world, int x, int y, int z) {
boolean posX = Library.canConnect(world, x + 1, y, z, Library.POS_X);
boolean negX = Library.canConnect(world, x - 1, y, z, Library.NEG_X);
boolean posY = Library.canConnect(world, x, y + 1, z, Library.POS_Y);
boolean negY = Library.canConnect(world, x, y - 1, z, Library.NEG_Y);
boolean posZ = Library.canConnect(world, x, y, z + 1, Library.POS_Z);
boolean negZ = Library.canConnect(world, x, y, z - 1, Library.NEG_Z);
setBlockBounds(posX, negX, posY, negY, posZ, negZ);
return AxisAlignedBB.getBoundingBox(x + this.minX, y + this.minY, z + this.minZ, x + this.maxX, y + this.maxY, z + this.maxZ);
}
@Override
public void setBlockBoundsBasedOnState(IBlockAccess world, int x, int y, int z) {
boolean posX = Library.canConnect(world, x + 1, y, z, Library.POS_X);
boolean negX = Library.canConnect(world, x - 1, y, z, Library.NEG_X);
boolean posY = Library.canConnect(world, x, y + 1, z, Library.POS_Y);
boolean negY = Library.canConnect(world, x, y - 1, z, Library.NEG_Y);
boolean posZ = Library.canConnect(world, x, y, z + 1, Library.POS_Z);
boolean negZ = Library.canConnect(world, x, y, z - 1, Library.NEG_Z);
setBlockBounds(posX, negX, posY, negY, posZ, negZ);
}
private void setBlockBounds(boolean posX, boolean negX, boolean posY, boolean negY, boolean posZ, boolean negZ) {
float pixel = 0.0625F;
float min = pixel * 5.5F;
float max = pixel * 10.5F;
float minX = negX ? 0F : min;
float maxX = posX ? 1F : max;
float minY = negY ? 0F : min;
float maxY = posY ? 1F : max;
float minZ = negZ ? 0F : min;
float maxZ = posZ ? 1F : max;
this.setBlockBounds(minX, minY, minZ, maxX, maxY, maxZ);
}
} }

View File

@ -0,0 +1,43 @@
package com.hbm.blocks.network;
import com.hbm.tileentity.network.TileEntityPylonBase;
import net.minecraft.block.Block;
import net.minecraft.block.BlockContainer;
import net.minecraft.block.material.Material;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
public abstract class PylonBase extends BlockContainer {
protected PylonBase(Material p_i45386_1_) {
super(p_i45386_1_);
}
@Override
public void breakBlock(World world, int x, int y, int z, Block b, int m) {
TileEntity te = world.getTileEntity(x, y, z);
if(te instanceof TileEntityPylonBase) {
((TileEntityPylonBase)te).disconnectAll();
}
super.breakBlock(world, x, y, z, b, m);
}
@Override
public int getRenderType(){
return -1;
}
@Override
public boolean isOpaqueCube() {
return false;
}
@Override
public boolean renderAsNormalBlock() {
return false;
}
}

View File

@ -0,0 +1,20 @@
package com.hbm.blocks.network;
import com.hbm.tileentity.network.TileEntityPylon;
import net.minecraft.block.BlockContainer;
import net.minecraft.block.material.Material;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
public class PylonRedWire extends PylonBase {
public PylonRedWire(Material p_i45386_1_) {
super(p_i45386_1_);
}
@Override
public TileEntity createNewTileEntity(World p_149915_1_, int p_149915_2_) {
return new TileEntityPylon();
}
}

View File

@ -5,9 +5,9 @@ import java.util.List;
import com.hbm.interfaces.IFluidContainer; import com.hbm.interfaces.IFluidContainer;
import com.hbm.interfaces.IFluidDuct; import com.hbm.interfaces.IFluidDuct;
import com.hbm.inventory.FluidTank; import com.hbm.inventory.FluidTank;
import com.hbm.tileentity.conductor.TileEntityPylonRedWire;
import com.hbm.tileentity.machine.TileEntityDummy; import com.hbm.tileentity.machine.TileEntityDummy;
import com.hbm.tileentity.machine.TileEntityLockableBase; import com.hbm.tileentity.machine.TileEntityLockableBase;
import com.hbm.tileentity.network.TileEntityPylon;
import api.hbm.energy.IEnergyConnector; import api.hbm.energy.IEnergyConnector;
import net.minecraft.block.Block; import net.minecraft.block.Block;
@ -95,7 +95,7 @@ public class ItemAnalyzer extends Item {
"Duct Type: " + I18n.format(((IFluidDuct)te).getType().getUnlocalizedName()))); "Duct Type: " + I18n.format(((IFluidDuct)te).getType().getUnlocalizedName())));
} }
if(te instanceof TileEntityPylonRedWire) { if(te instanceof TileEntityPylon) {
/** /**
* this is a smoldering crater * this is a smoldering crater

View File

@ -2,7 +2,7 @@ package com.hbm.items.tool;
import java.util.List; import java.util.List;
import com.hbm.tileentity.conductor.TileEntityPylonRedWire; import com.hbm.tileentity.network.TileEntityPylonBase;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item; import net.minecraft.item.Item;
@ -15,12 +15,12 @@ import net.minecraft.world.World;
public class ItemWiring extends Item { public class ItemWiring extends Item {
@Override @Override
public boolean onItemUse(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int p_77648_7_, public boolean onItemUse(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int p_77648_7_, float p_77648_8_, float p_77648_9_, float p_77648_10_) {
float p_77648_8_, float p_77648_9_, float p_77648_10_) {
if (!player.isSneaking()) { if (!player.isSneaking()) {
TileEntity te = world.getTileEntity(x, y, z); TileEntity te = world.getTileEntity(x, y, z);
if (te != null && te instanceof TileEntityPylonRedWire) { if (te != null && te instanceof TileEntityPylonBase) {
if (stack.stackTagCompound == null) { if (stack.stackTagCompound == null) {
stack.stackTagCompound = new NBTTagCompound(); stack.stackTagCompound = new NBTTagCompound();
@ -29,33 +29,37 @@ public class ItemWiring extends Item {
stack.stackTagCompound.setInteger("y", y); stack.stackTagCompound.setInteger("y", y);
stack.stackTagCompound.setInteger("z", z); stack.stackTagCompound.setInteger("z", z);
if (world.isRemote) if(!world.isRemote) {
player.addChatMessage(new ChatComponentText( player.addChatMessage(new ChatComponentText( "Wire start"));
"Wire start")); }
} else { } else if(!world.isRemote) {
int x1 = stack.stackTagCompound.getInteger("x"); int x1 = stack.stackTagCompound.getInteger("x");
int y1 = stack.stackTagCompound.getInteger("y"); int y1 = stack.stackTagCompound.getInteger("y");
int z1 = stack.stackTagCompound.getInteger("z"); int z1 = stack.stackTagCompound.getInteger("z");
if (world.getTileEntity(x1, y1, z1) != null && world.getTileEntity(x1, y1, z1) instanceof TileEntityPylonRedWire && this.isLengthValid(x, y, z, x1, y1, z1, 25)) { if (world.getTileEntity(x1, y1, z1) instanceof TileEntityPylonBase) {
TileEntityPylonRedWire first = (TileEntityPylonRedWire) world.getTileEntity(x1, y1, z1); TileEntityPylonBase first = (TileEntityPylonBase) world.getTileEntity(x1, y1, z1);
TileEntityPylonRedWire second = ((TileEntityPylonRedWire) te); TileEntityPylonBase second = ((TileEntityPylonBase) te);
first.addTileEntityBasedOnCoords(x, y, z); if(TileEntityPylonBase.canConnect(first, second)) {
second.addTileEntityBasedOnCoords(x1, y1, z1);
first.markDirty(); first.addConnection(x, y, z);
second.markDirty(); second.addConnection(x1, y1, z1);
player.addChatMessage(new ChatComponentText("Wire end"));
if (world.isRemote)
player.addChatMessage( } else {
new ChatComponentText("Wire end")); player.addChatMessage(new ChatComponentText("Wire error"));
}
stack.stackTagCompound = null; stack.stackTagCompound = null;
} else { } else {
if (world.isRemote)
player.addChatMessage(new ChatComponentText( if(!world.isRemote) {
"Wire error")); player.addChatMessage(new ChatComponentText("Wire error"));
}
stack.stackTagCompound = null; stack.stackTagCompound = null;
} }
} }
@ -78,11 +82,4 @@ public class ItemWiring extends Item {
list.add("Right-click poles to connect"); list.add("Right-click poles to connect");
} }
} }
public boolean isLengthValid(int x1, int y1, int z1, int x2, int y2, int z2, int length) {
double l = Math.sqrt(Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2) + Math.pow(z2 - z1, 2));
return l <= length;
}
} }

View File

@ -22,10 +22,10 @@ import com.hbm.tileentity.conductor.TileEntityGasDuct;
import com.hbm.tileentity.conductor.TileEntityGasDuctSolid; import com.hbm.tileentity.conductor.TileEntityGasDuctSolid;
import com.hbm.tileentity.conductor.TileEntityOilDuct; import com.hbm.tileentity.conductor.TileEntityOilDuct;
import com.hbm.tileentity.conductor.TileEntityOilDuctSolid; import com.hbm.tileentity.conductor.TileEntityOilDuctSolid;
import com.hbm.tileentity.conductor.TileEntityPylonRedWire;
import com.hbm.tileentity.machine.TileEntityDummy; import com.hbm.tileentity.machine.TileEntityDummy;
import com.hbm.tileentity.machine.TileEntityMachineBattery; import com.hbm.tileentity.machine.TileEntityMachineBattery;
import com.hbm.tileentity.machine.TileEntityMachineTransformer; import com.hbm.tileentity.machine.TileEntityMachineTransformer;
import com.hbm.tileentity.network.TileEntityPylon;
import api.hbm.energy.IBatteryItem; import api.hbm.energy.IBatteryItem;
import api.hbm.energy.IEnergyConnector; import api.hbm.energy.IEnergyConnector;
@ -119,7 +119,7 @@ public class Library {
return true; return true;
} }
if(te instanceof IEnergyConnectorBlock) { if(te instanceof IEnergyConnector) {
IEnergyConnector con = (IEnergyConnector) te; IEnergyConnector con = (IEnergyConnector) te;
if(con.canConnect(dir)) if(con.canConnect(dir))

View File

@ -86,6 +86,7 @@ import com.hbm.tileentity.machine.oil.TileEntityMachinePumpjack;
import com.hbm.tileentity.machine.oil.TileEntityMachineRefinery; import com.hbm.tileentity.machine.oil.TileEntityMachineRefinery;
import com.hbm.tileentity.machine.oil.TileEntitySpacer; import com.hbm.tileentity.machine.oil.TileEntitySpacer;
import com.hbm.tileentity.machine.rbmk.*; import com.hbm.tileentity.machine.rbmk.*;
import com.hbm.tileentity.network.TileEntityPylon;
import com.hbm.tileentity.turret.*; import com.hbm.tileentity.turret.*;
import cpw.mods.fml.client.registry.ClientRegistry; import cpw.mods.fml.client.registry.ClientRegistry;
@ -234,7 +235,7 @@ public class ClientProxy extends ServerProxy {
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityGasDuct.class, new RenderGasDuct()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityGasDuct.class, new RenderGasDuct());
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityFluidDuct.class, new RenderFluidDuct()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityFluidDuct.class, new RenderFluidDuct());
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityRFDuct.class, new RenderRFCable()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityRFDuct.class, new RenderRFCable());
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityPylonRedWire.class, new RenderPylon()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityPylon.class, new RenderPylon());
//multiblocks //multiblocks
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityStructureMarker.class, new RenderStructureMaker()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityStructureMarker.class, new RenderStructureMaker());
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMultiblock.class, new RenderMultiblock()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMultiblock.class, new RenderMultiblock());

View File

@ -16,9 +16,9 @@ public class PacketDispatcher {
int i = 0; int i = 0;
//Packet sent for every connected electricity pole, for wire rendering //Packet sent for every connected electricity pole, for wire rendering
wrapper.registerMessage(TEPylonSenderPacket.Handler.class, TEPylonSenderPacket.class, i++, Side.CLIENT); //wrapper.registerMessage(TEPylonSenderPacket.Handler.class, TEPylonSenderPacket.class, i++, Side.CLIENT);
//Resets connection list in client-sided pole rendering //Resets connection list in client-sided pole rendering
wrapper.registerMessage(TEPylonDestructorPacket.Handler.class, TEPylonDestructorPacket.class, i++, Side.CLIENT); //wrapper.registerMessage(TEPylonDestructorPacket.Handler.class, TEPylonDestructorPacket.class, i++, Side.CLIENT);
//Machine type for marker rendering //Machine type for marker rendering
wrapper.registerMessage(TEStructurePacket.Handler.class, TEStructurePacket.class, i++, Side.CLIENT); wrapper.registerMessage(TEStructurePacket.Handler.class, TEStructurePacket.class, i++, Side.CLIENT);
//Mining drill rotation for rendering //Mining drill rotation for rendering

View File

@ -1,58 +0,0 @@
package com.hbm.packet;
import com.hbm.tileentity.conductor.TileEntityPylonRedWire;
import cpw.mods.fml.common.network.simpleimpl.IMessage;
import cpw.mods.fml.common.network.simpleimpl.IMessageHandler;
import cpw.mods.fml.common.network.simpleimpl.MessageContext;
import io.netty.buffer.ByteBuf;
import net.minecraft.client.Minecraft;
import net.minecraft.tileentity.TileEntity;
public class TEPylonDestructorPacket implements IMessage {
int x;
int y;
int z;
public TEPylonDestructorPacket()
{
}
public TEPylonDestructorPacket(int x, int y, int z)
{
this.x = x;
this.y = y;
this.z = z;
}
@Override
public void fromBytes(ByteBuf buf) {
x = buf.readInt();
y = buf.readInt();
z = buf.readInt();
}
@Override
public void toBytes(ByteBuf buf) {
buf.writeInt(x);
buf.writeInt(y);
buf.writeInt(z);
}
public static class Handler implements IMessageHandler<TEPylonDestructorPacket, IMessage> {
@Override
public IMessage onMessage(TEPylonDestructorPacket m, MessageContext ctx) {
TileEntity te = Minecraft.getMinecraft().theWorld.getTileEntity(m.x, m.y, m.z);
if (te != null && te instanceof TileEntityPylonRedWire) {
TileEntityPylonRedWire pyl = (TileEntityPylonRedWire) te;
pyl.connected.clear();
}
return null;
}
}
}

View File

@ -1,77 +0,0 @@
package com.hbm.packet;
import com.hbm.tileentity.conductor.TileEntityPylonRedWire;
import cpw.mods.fml.common.network.simpleimpl.IMessage;
import cpw.mods.fml.common.network.simpleimpl.IMessageHandler;
import cpw.mods.fml.common.network.simpleimpl.MessageContext;
import io.netty.buffer.ByteBuf;
import net.minecraft.client.Minecraft;
import net.minecraft.tileentity.TileEntity;
public class TEPylonSenderPacket implements IMessage {
//Pylon connection synchronization packet, Mk.III
//1: try sending list, every entry gets noted in the bit buffer
//2: Up to 3 entries (9 variables in total, not counting origin coordiantes) sync all connections at once
//3: One packet sent for each connection, packets are lighter and work fine for rendering
int x;
int y;
int z;
int conX;
int conY;
int conZ;
public TEPylonSenderPacket()
{
}
public TEPylonSenderPacket(int x, int y, int z, int conX, int conY, int conZ)
{
this.x = x;
this.y = y;
this.z = z;
this.conX = conX;
this.conY = conY;
this.conZ = conZ;
}
@Override
public void fromBytes(ByteBuf buf) {
x = buf.readInt();
y = buf.readInt();
z = buf.readInt();
conX = buf.readInt();
conY = buf.readInt();
conZ = buf.readInt();
}
@Override
public void toBytes(ByteBuf buf) {
buf.writeInt(x);
buf.writeInt(y);
buf.writeInt(z);
buf.writeInt(conX);
buf.writeInt(conY);
buf.writeInt(conZ);
}
public static class Handler implements IMessageHandler<TEPylonSenderPacket, IMessage> {
@Override
public IMessage onMessage(TEPylonSenderPacket m, MessageContext ctx) {
TileEntity te = Minecraft.getMinecraft().theWorld.getTileEntity(m.x, m.y, m.z);
try {
if (te != null && te instanceof TileEntityPylonRedWire) {
TileEntityPylonRedWire pyl = (TileEntityPylonRedWire) te;
pyl.addTileEntityBasedOnCoords(m.conX, m.conY, m.conZ);
}
} catch(Exception x) {}
return null;
}
}
}

View File

@ -32,6 +32,7 @@ public class RenderBobble extends TileEntitySpecialRenderer {
public static final ResourceLocation bobble_frizzle = new ResourceLocation(RefStrings.MODID, "textures/models/trinkets/frizzle.png"); public static final ResourceLocation bobble_frizzle = new ResourceLocation(RefStrings.MODID, "textures/models/trinkets/frizzle.png");
public static final ResourceLocation bobble_vt = new ResourceLocation(RefStrings.MODID, "textures/models/trinkets/vt.png"); public static final ResourceLocation bobble_vt = new ResourceLocation(RefStrings.MODID, "textures/models/trinkets/vt.png");
public static final ResourceLocation bobble_doc = new ResourceLocation(RefStrings.MODID, "textures/models/trinkets/doctor17ph.png"); public static final ResourceLocation bobble_doc = new ResourceLocation(RefStrings.MODID, "textures/models/trinkets/doctor17ph.png");
public static final ResourceLocation bobble_blue = new ResourceLocation(RefStrings.MODID, "textures/models/trinkets/thebluehat.png");
public static final ResourceLocation bobble_cirno = new ResourceLocation(RefStrings.MODID, "textures/models/trinkets/cirno.png"); public static final ResourceLocation bobble_cirno = new ResourceLocation(RefStrings.MODID, "textures/models/trinkets/cirno.png");
@Override @Override
@ -57,9 +58,7 @@ public class RenderBobble extends TileEntitySpecialRenderer {
GL11.glEnable(GL11.GL_LIGHTING); GL11.glEnable(GL11.GL_LIGHTING);
GL11.glEnable(GL12.GL_RESCALE_NORMAL); GL11.glEnable(GL12.GL_RESCALE_NORMAL);
TextureManager texman = Minecraft.getMinecraft().getTextureManager(); bindTexture(socket);
texman.bindTexture(socket);
bobble.renderPart("Socket"); bobble.renderPart("Socket");
switch(type) { switch(type) {
@ -69,15 +68,16 @@ public class RenderBobble extends TileEntitySpecialRenderer {
case CHARISMA: case CHARISMA:
case INTELLIGENCE: case INTELLIGENCE:
case AGILITY: case AGILITY:
case LUCK: texman.bindTexture(bobble_vaultboy); break; case LUCK: bindTexture(bobble_vaultboy); break;
case BOB: texman.bindTexture(bobble_hbm); break; case BOB: bindTexture(bobble_hbm); break;
case PU238: texman.bindTexture(bobble_pu238); break; case PU238: bindTexture(bobble_pu238); break;
case FRIZZLE: texman.bindTexture(bobble_frizzle); break; case FRIZZLE: bindTexture(bobble_frizzle); break;
case VT: texman.bindTexture(bobble_vt); break; case VT: bindTexture(bobble_vt); break;
case DOC: texman.bindTexture(bobble_doc); break; case DOC: bindTexture(bobble_doc); break;
case CIRNO: texman.bindTexture(bobble_cirno); break; case BLUEHAT: bindTexture(bobble_blue); break;
default: texman.bindTexture(ResourceManager.universal); case CIRNO: bindTexture(bobble_cirno); break;
default: bindTexture(ResourceManager.universal);
} }
switch(type) { switch(type) {
@ -85,6 +85,10 @@ public class RenderBobble extends TileEntitySpecialRenderer {
default: renderGuy(type); default: renderGuy(type);
} }
GL11.glPushMatrix();
renderPost(type);
GL11.glPopMatrix();
renderSocket(type); renderSocket(type);
} }
@ -157,6 +161,9 @@ public class RenderBobble extends TileEntitySpecialRenderer {
rotLeftLeg = new double[]{2, 0, 0}; rotLeftLeg = new double[]{2, 0, 0};
rotRightLeg = new double[]{-2, 0, 0}; rotRightLeg = new double[]{-2, 0, 0};
break; break;
case BLUEHAT:
rotLeftArm = new double[]{0, 90, 60};
break;
} }
} }
@ -278,6 +285,24 @@ public class RenderBobble extends TileEntitySpecialRenderer {
GL11.glPopAttrib(); GL11.glPopAttrib();
GL11.glPopMatrix(); GL11.glPopMatrix();
} }
/*
* RENDER ADDITIONAL ITEMS
*/
@SuppressWarnings("incomplete-switch")
public void renderPost(BobbleType type) {
switch(type) {
case BLUEHAT:
double scale = 0.0625D;
GL11.glTranslated(0D, 0.875D, -0.5D);
GL11.glRotated(-90, 0, 1, 0);
GL11.glRotated(-160, 0, 0, 1);
GL11.glScaled(scale, scale, scale);
bindTexture(ResourceManager.hev_helmet);
ResourceManager.armor_hev.renderPart("Head");
break;
}
}
public void renderOrigin() { public void renderOrigin() {
@ -344,4 +369,8 @@ public class RenderBobble extends TileEntitySpecialRenderer {
GL11.glEnable(GL11.GL_LIGHTING); GL11.glEnable(GL11.GL_LIGHTING);
} }
@Override
protected void bindTexture(ResourceLocation loc) {
Minecraft.getMinecraft().getTextureManager().bindTexture(loc);
}
} }

View File

@ -5,7 +5,7 @@ import org.lwjgl.opengl.GL11;
import com.hbm.lib.RefStrings; import com.hbm.lib.RefStrings;
import com.hbm.main.ModEventHandler; import com.hbm.main.ModEventHandler;
import com.hbm.render.model.ModelPylon; import com.hbm.render.model.ModelPylon;
import com.hbm.tileentity.conductor.TileEntityPylonRedWire; import com.hbm.tileentity.network.TileEntityPylon;
import net.minecraft.client.renderer.OpenGlHelper; import net.minecraft.client.renderer.OpenGlHelper;
import net.minecraft.client.renderer.Tessellator; import net.minecraft.client.renderer.Tessellator;
@ -28,7 +28,7 @@ public class RenderPylon extends TileEntitySpecialRenderer {
@Override @Override
public void renderTileEntityAt(TileEntity te, double x, double y, double z, float f) { public void renderTileEntityAt(TileEntity te, double x, double y, double z, float f) {
TileEntityPylonRedWire pyl = (TileEntityPylonRedWire)te; TileEntityPylon pyl = (TileEntityPylon)te;
GL11.glPushMatrix(); GL11.glPushMatrix();
GL11.glTranslatef((float) x + 0.5F, (float) y + 1.5F - ((1F / 16F) * 14F), (float) z + 0.5F); GL11.glTranslatef((float) x + 0.5F, (float) y + 1.5F - ((1F / 16F) * 14F), (float) z + 0.5F);
GL11.glRotatef(180, 0F, 0F, 1F); GL11.glRotatef(180, 0F, 0F, 1F);

View File

@ -73,7 +73,7 @@ public class TileMappings {
put(TileEntityGasDuct.class, "tileentity_gas_duct"); put(TileEntityGasDuct.class, "tileentity_gas_duct");
put(TileEntityGasDuctSolid.class, "tileentity_gas_duct_solid"); put(TileEntityGasDuctSolid.class, "tileentity_gas_duct_solid");
put(TileEntityMachineRTG.class, "tileentity_machine_rtg"); put(TileEntityMachineRTG.class, "tileentity_machine_rtg");
put(TileEntityPylonRedWire.class, "tileentity_pylon_redwire"); put(TileEntityPylon.class, "tileentity_pylon_redwire");
put(TileEntityStructureMarker.class, "tileentity_structure_marker"); put(TileEntityStructureMarker.class, "tileentity_structure_marker");
put(TileEntityMachineMiningDrill.class, "tileentity_mining_drill"); put(TileEntityMachineMiningDrill.class, "tileentity_mining_drill");
put(TileEntityMachineAssembler.class, "tileentity_assembly_machine"); put(TileEntityMachineAssembler.class, "tileentity_assembly_machine");

View File

@ -1,176 +0,0 @@
package com.hbm.tileentity.conductor;
import java.util.ArrayList;
import java.util.List;
import com.hbm.blocks.ModBlocks;
import com.hbm.interfaces.Spaghetti;
import com.hbm.interfaces.Untested;
import com.hbm.packet.NBTPacket;
import com.hbm.packet.PacketDispatcher;
import com.hbm.packet.TEPylonDestructorPacket;
import com.hbm.packet.TEPylonSenderPacket;
import com.hbm.tileentity.INBTPacketReceiver;
import com.hbm.tileentity.network.TileEntityCableBaseNT;
import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.world.World;
public class TileEntityPylonRedWire extends TileEntityCableBaseNT implements INBTPacketReceiver {
public List<int[]> connected = new ArrayList<int[]>();
public boolean scheduleConnectionCheck = false;
public int[][] scheduleBuffer;
@Override
public void updateEntity() {
if(!worldObj.isRemote) {
for(int i = connected.size() - 1; i >= 0; i--) {
int[] con = connected.get(i);
if(con == null) {
connected.remove(i);
continue;
}
TileEntity pylon = worldObj.getTileEntity(con[0], con[1], con[2]);
if(worldObj.blockExists(con[0], con[1], con[2]) && (pylon == null || pylon.isInvalid())) {
connected.remove(i);
continue;
}
}
if(scheduleConnectionCheck && this.scheduleBuffer != null) {
scheduleConnectionCheck = false;
this.connected = convertArrayToList(this.scheduleBuffer, worldObj);
}
if(worldObj.getTotalWorldTime() % 10 == 0) {
NBTTagCompound data = new NBTTagCompound();
data.setInteger("count", this.connected.size());
for(int i = 0; i < connected.size(); i++) {
int[] pos = connected.get(i);
TileEntity te = worldObj.getTileEntity(pos[0], pos[1], pos[2]);
if(te instanceof TileEntityPylonRedWire) {
data.setIntArray("c" + i, new int[] { pos[0], pos[1], pos[2] });
}
}
PacketDispatcher.wrapper.sendToAllAround(new NBTPacket(data, xCoord, yCoord, zCoord), new TargetPoint(worldObj.provider.dimensionId, xCoord, yCoord, zCoord, 100));
}
}
}
@Override
public void networkUnpack(NBTTagCompound nbt) {
this.connected.clear();
int count = nbt.getInteger("count");
for(int i = 0; i < count; i++) {
if(nbt.hasKey("c" + i)) {
int[] pos = nbt.getIntArray("c" + i);
this.connected.add(pos);
}
}
}
@Override
public void readFromNBT(NBTTagCompound nbt) {
super.readFromNBT(nbt);
int[] conX = nbt.getIntArray("conX");
int[] conY = nbt.getIntArray("conY");
int[] conZ = nbt.getIntArray("conZ");
int[][] con = new int[conX.length][3];
for(int i = 0; i < conX.length; i++) {
con[i][0] = conX[i];
con[i][1] = conY[i];
con[i][2] = conZ[i];
}
scheduleConnectionCheck = true;
scheduleBuffer = con;
}
@Override
public void writeToNBT(NBTTagCompound nbt) {
super.writeToNBT(nbt);
int[][] con = TileEntityPylonRedWire.convertListToArray(connected);
int[] conX = new int[con.length];
int[] conY = new int[con.length];
int[] conZ = new int[con.length];
for(int i = 0; i < conX.length; i++) {
conX[i] = con[i][0];
conY[i] = con[i][1];
conZ[i] = con[i][2];
}
nbt.setIntArray("conX", conX);
nbt.setIntArray("conY", conY);
nbt.setIntArray("conZ", conZ);
}
public static List<int[]> convertArrayToList(int[][] array, World worldObj) {
List<int[]> list = new ArrayList<int[]>();
for(int i = 0; i < array.length; i++) {
list.add(new int[] {array[i][0], array[i][1], array[i][2]});
}
return list;
}
public static int[][] convertListToArray(List<int[]> list) {
int[][] array = new int[list.size()][3];
for(int i = 0; i < list.size(); i++) {
int[] pos = list.get(i);
array[i][0] = pos[0];
array[i][1] = pos[1];
array[i][2] = pos[2];
}
return array;
}
public void addTileEntityBasedOnCoords(int x, int y, int z) {
TileEntity te = worldObj.getTileEntity(x, y, z);
if(te != null && te instanceof TileEntityPylonRedWire)
this.connected.add(new int[]{x, y, z});
}
@Override
public AxisAlignedBB getRenderBoundingBox() {
return TileEntity.INFINITE_EXTENT_AABB;
}
@Override
@SideOnly(Side.CLIENT)
public double getMaxRenderDistanceSquared()
{
return 65536.0D;
}
}

View File

@ -64,7 +64,7 @@ public class TileEntityChungus extends TileEntity implements IFluidAcceptor, IFl
power += (Integer)outs[3] * cycles; power += (Integer)outs[3] * cycles;
ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata() - BlockDummyable.offset); ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata() - BlockDummyable.offset);
this.sendPower(worldObj, xCoord + dir.offsetX * 11, yCoord, zCoord + dir.offsetZ * 11, dir); this.sendPower(worldObj, xCoord - dir.offsetX * 11, yCoord, zCoord - dir.offsetZ * 11, dir);
if(power > maxPower) if(power > maxPower)
power = maxPower; power = maxPower;

View File

@ -29,7 +29,7 @@ public class TileEntityMachineMiniRTG extends TileEntity implements IEnergyGener
power = getMaxPower(); power = getMaxPower();
for(ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) for(ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS)
this.sendPower(worldObj, xCoord, yCoord, zCoord, dir); this.sendPower(worldObj, xCoord + dir.offsetX, yCoord + dir.offsetY, zCoord + dir.offsetZ, dir);
} }
} }

View File

@ -128,7 +128,7 @@ public class TileEntityMachinePlasmaHeater extends TileEntityMachineBase impleme
this.getBlockMetadata(); this.getBlockMetadata();
ForgeDirection dir = ForgeDirection.getOrientation(this.blockMetadata); ForgeDirection dir = ForgeDirection.getOrientation(this.blockMetadata - BlockDummyable.offset);
ForgeDirection side = dir.getRotation(ForgeDirection.UP); ForgeDirection side = dir.getRotation(ForgeDirection.UP);
for(int i = 1; i < 4; i++) { for(int i = 1; i < 4; i++) {

View File

@ -25,13 +25,13 @@ public class TileEntityMachinePumpjack extends TileEntityOilDrillBase {
@Override @Override
protected void updateConnections() { protected void updateConnections() {
this.getBlockMetadata(); this.getBlockMetadata();
ForgeDirection dir = ForgeDirection.getOrientation(this.blockMetadata); ForgeDirection dir = ForgeDirection.getOrientation(this.blockMetadata - BlockDummyable.offset);
ForgeDirection rot = dir.getRotation(ForgeDirection.DOWN); ForgeDirection rot = dir.getRotation(ForgeDirection.DOWN);
this.trySubscribe(worldObj, xCoord + rot.offsetX * 3 + 1, yCoord, zCoord + rot.offsetZ * 3 + 1); this.trySubscribe(worldObj, xCoord + rot.offsetX * 2 + dir.offsetX * 2, yCoord, zCoord + rot.offsetZ * 2 + dir.offsetZ * 2);
this.trySubscribe(worldObj, xCoord + rot.offsetX * 3 + 1, yCoord, zCoord + rot.offsetZ * 3 - 1); this.trySubscribe(worldObj, xCoord + rot.offsetX * 2 + dir.offsetX * 2, yCoord, zCoord + rot.offsetZ * 4 - dir.offsetZ * 2);
this.trySubscribe(worldObj, xCoord + rot.offsetX * 3 - 1, yCoord, zCoord + rot.offsetZ * 3 + 1); this.trySubscribe(worldObj, xCoord + rot.offsetX * 4 - dir.offsetX * 2, yCoord, zCoord + rot.offsetZ * 4 + dir.offsetZ * 2);
this.trySubscribe(worldObj, xCoord + rot.offsetX * 3 - 1, yCoord, zCoord + rot.offsetZ * 3 - 1); this.trySubscribe(worldObj, xCoord + rot.offsetX * 4 - dir.offsetX * 2, yCoord, zCoord + rot.offsetZ * 2 - dir.offsetZ * 2);
} }
@Override @Override

View File

@ -18,29 +18,34 @@ public class TileEntityCableBaseNT extends TileEntity implements IEnergyConducto
//we got here either because the net doesn't exist or because it's not valid, so that's safe to assume //we got here either because the net doesn't exist or because it's not valid, so that's safe to assume
this.setPowerNet(null); this.setPowerNet(null);
for(ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) { this.connect();
TileEntity te = worldObj.getTileEntity(xCoord + dir.offsetX, yCoord + dir.offsetY, zCoord + dir.offsetZ);
if(te instanceof IEnergyConductor) {
IEnergyConductor conductor = (IEnergyConductor) te;
if(this.getPowerNet() == null && conductor.getPowerNet() != null) {
conductor.getPowerNet().joinLink(this);
}
if(this.getPowerNet() != null && conductor.getPowerNet() != null && this.getPowerNet() != conductor.getPowerNet()) {
conductor.getPowerNet().joinNetworks(this.getPowerNet());
}
}
}
if(this.getPowerNet() == null) { if(this.getPowerNet() == null) {
new PowerNet().joinLink(this); new PowerNet().joinLink(this);
} }
} }
} }
protected void connect() {
for(ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) {
TileEntity te = worldObj.getTileEntity(xCoord + dir.offsetX, yCoord + dir.offsetY, zCoord + dir.offsetZ);
if(te instanceof IEnergyConductor) {
IEnergyConductor conductor = (IEnergyConductor) te;
if(this.getPowerNet() == null && conductor.getPowerNet() != null) {
conductor.getPowerNet().joinLink(this);
}
if(this.getPowerNet() != null && conductor.getPowerNet() != null && this.getPowerNet() != conductor.getPowerNet()) {
conductor.getPowerNet().joinNetworks(this.getPowerNet());
}
}
}
}
@Override @Override
public void invalidate() { public void invalidate() {

View File

@ -1,13 +1,12 @@
package com.hbm.tileentity.network; package com.hbm.tileentity.network;
import net.minecraft.tileentity.TileEntity; import api.hbm.energy.PowerNet;
public class TileEntityCableSwitch extends TileEntityCableBaseNT { public class TileEntityCableSwitch extends TileEntityCableBaseNT {
@Override @Override
public boolean canUpdate() { public boolean canUpdate() {
//only update if the meta is 1 (ON), updating causes the net to form and allows transmission return this.worldObj != null && this.getBlockMetadata() == 1 && super.canUpdate();
return this.getBlockMetadata() == 1 && super.canUpdate();
} }
public void updateState() { public void updateState() {
@ -18,5 +17,13 @@ public class TileEntityCableSwitch extends TileEntityCableBaseNT {
this.network.destroy(); this.network.destroy();
this.network = null; this.network = null;
} }
if(this.getBlockMetadata() == 1) {
this.connect();
if(this.getPowerNet() == null) {
new PowerNet().joinLink(this);
}
}
} }
} }

View File

@ -0,0 +1,53 @@
package com.hbm.tileentity.network;
import api.hbm.energy.IEnergyConductor;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.Vec3;
import net.minecraftforge.common.util.ForgeDirection;
public class TileEntityPylon extends TileEntityPylonBase {
@Override
public ConnectionType getConnectionType() {
return ConnectionType.SINGLE;
}
@Override
public Vec3 getMountPos() {
return Vec3.createVectorHelper(xCoord + 0.5, yCoord + 5.4, zCoord + 0.5);
}
@Override
public double getMaxWireLength() {
return 25D;
}
@Override
protected void connect() {
/*
* Apparently super.super does not exist, and the mentally damaged folk from heckoverflow pretend like that's a good thing.
* Look at this shit, you think that's good? "Write Everything Twice"? You like that, huh?
*/
for(ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) {
TileEntity te = worldObj.getTileEntity(xCoord + dir.offsetX, yCoord + dir.offsetY, zCoord + dir.offsetZ);
if(te instanceof IEnergyConductor) {
IEnergyConductor conductor = (IEnergyConductor) te;
if(this.getPowerNet() == null && conductor.getPowerNet() != null) {
conductor.getPowerNet().joinLink(this);
}
if(this.getPowerNet() != null && conductor.getPowerNet() != null && this.getPowerNet() != conductor.getPowerNet()) {
conductor.getPowerNet().joinNetworks(this.getPowerNet());
}
}
}
super.connect();
}
}

View File

@ -0,0 +1,161 @@
package com.hbm.tileentity.network;
import java.util.ArrayList;
import java.util.List;
import api.hbm.energy.IEnergyConductor;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.network.NetworkManager;
import net.minecraft.network.Packet;
import net.minecraft.network.play.server.S35PacketUpdateTileEntity;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.util.Vec3;
import net.minecraft.world.WorldServer;
public abstract class TileEntityPylonBase extends TileEntityCableBaseNT {
public List<int[]> connected = new ArrayList<int[]>();
public static boolean canConnect(TileEntityPylonBase first, TileEntityPylonBase second) {
if(first.getConnectionType() != second.getConnectionType())
return false;
double len = Math.min(first.getMaxWireLength(), second.getMaxWireLength());
double lenSq = len * len;
Vec3 firstPos = first.getMountPos();
Vec3 secondPos = second.getMountPos();
double deltaSq = Math.pow(secondPos.xCoord - firstPos.xCoord, 2) + Math.pow(secondPos.yCoord - firstPos.yCoord, 2) + Math.pow(secondPos.zCoord - firstPos.zCoord, 2);
return lenSq >= deltaSq;
}
public void addConnection(int x, int y, int z) {
connected.add(new int[] {x, y, z});
if(this.getPowerNet() != null) {
this.getPowerNet().destroy();
this.setPowerNet(null);
}
this.markDirty();
if(worldObj instanceof WorldServer) {
WorldServer world = (WorldServer) worldObj;
world.getPlayerManager().markBlockForUpdate(xCoord, yCoord, zCoord);
}
}
public void disconnectAll() {
for(int[] pos : connected) {
TileEntity te = worldObj.getTileEntity(pos[0], pos[1], pos[2]);
if(te instanceof TileEntityPylonBase) {
TileEntityPylonBase pylon = (TileEntityPylonBase) te;
for(int i = 0; i < pylon.connected.size(); i++) {
int[] conPos = pylon.connected.get(i);
if(conPos[0] == xCoord && conPos[1] == yCoord && conPos[2] == zCoord) {
pylon.connected.remove(i);
i--;
}
}
pylon.markDirty();
if(worldObj instanceof WorldServer) {
WorldServer world = (WorldServer) worldObj;
world.getPlayerManager().markBlockForUpdate(pylon.xCoord, pylon.yCoord, pylon.zCoord);
}
}
}
}
@Override
protected void connect() {
for(int[] pos : connected) {
TileEntity te = worldObj.getTileEntity(pos[0], pos[1], pos[2]);
if(te instanceof IEnergyConductor) {
IEnergyConductor conductor = (IEnergyConductor) te;
if(this.getPowerNet() == null && conductor.getPowerNet() != null) {
conductor.getPowerNet().joinLink(this);
}
if(this.getPowerNet() != null && conductor.getPowerNet() != null && this.getPowerNet() != conductor.getPowerNet()) {
conductor.getPowerNet().joinNetworks(this.getPowerNet());
}
}
}
}
public abstract ConnectionType getConnectionType();
public abstract Vec3 getMountPos();
public abstract double getMaxWireLength();
@Override
public void writeToNBT(NBTTagCompound nbt) {
super.writeToNBT(nbt);
nbt.setInteger("conCount", connected.size());
for(int i = 0; i < connected.size(); i++) {
nbt.setIntArray("con" + i, connected.get(i));
}
}
@Override
public void readFromNBT(NBTTagCompound nbt) {
super.readFromNBT(nbt);
int count = nbt.getInteger("conCount");
this.connected.clear();
for(int i = 0; i < count; i++) {
connected.add(nbt.getIntArray("con" + i));
}
}
@Override
public Packet getDescriptionPacket() {
NBTTagCompound nbt = new NBTTagCompound();
this.writeToNBT(nbt);
return new S35PacketUpdateTileEntity(this.xCoord, this.yCoord, this.zCoord, 0, nbt);
}
@Override
public void onDataPacket(NetworkManager net, S35PacketUpdateTileEntity pkt) {
this.readFromNBT(pkt.func_148857_g());
}
public static enum ConnectionType {
SINGLE
//more to follow
}
@Override
public AxisAlignedBB getRenderBoundingBox() {
return TileEntity.INFINITE_EXTENT_AABB;
}
@Override
@SideOnly(Side.CLIENT)
public double getMaxRenderDistanceSquared() {
return 65536.0D;
}
}

View File

@ -240,7 +240,7 @@ public abstract class TileEntityTurretBaseNT extends TileEntityMachineBase imple
} }
private void updateConnections() { private void updateConnections() {
ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata() - BlockDummyable.offset); ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata() - BlockDummyable.offset).getOpposite();
ForgeDirection rot = dir.getRotation(ForgeDirection.UP); ForgeDirection rot = dir.getRotation(ForgeDirection.UP);
this.trySubscribe(worldObj, xCoord + dir.offsetX * -1 + rot.offsetX * 0, yCoord, zCoord + dir.offsetZ * -1 + rot.offsetZ * 0); this.trySubscribe(worldObj, xCoord + dir.offsetX * -1 + rot.offsetX * 0, yCoord, zCoord + dir.offsetZ * -1 + rot.offsetZ * 0);

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 810 B

After

Width:  |  Height:  |  Size: 825 B