paintable pylon wires

This commit is contained in:
Boblet 2024-04-16 14:54:06 +02:00
parent ef169ac06e
commit 5b41c3d83a
12 changed files with 114 additions and 7 deletions

View File

@ -1,4 +1,3 @@
## Fixed
* Fixed battery connection priority being broken, all battery blocks present during the previous updates will now have their priority default to LOW
* Fixed batteries sometimes ending up transferring themselves, wasting their entire receiving and sending speed on doing effectively nothing
* Energy tracking is still a bit flakey so there could be issues that remain with buffer mode batteries, however the transfer caps should mitigate most potential issues
## Changed
* All pylons and electrical connectors are now dyeable, using any dye (even modded ones, based on ore dict) to change the color of the cable
* Colors are based on the connecting pylon, not the cables themselves, meaning that using one dye will change all wires connected to that pylon right up to the half way point

View File

@ -6,6 +6,7 @@ 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.entity.player.EntityPlayer;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
@ -41,4 +42,16 @@ public abstract class PylonBase extends BlockContainer implements ITooltipProvid
public boolean renderAsNormalBlock() {
return false;
}
@Override
public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) {
if(world.isRemote) {
return true;
} else if(!player.isSneaking()) {
TileEntityPylonBase te = (TileEntityPylonBase) world.getTileEntity(x, y, z);
return te.setColor(player.getHeldItem());
} else {
return false;
}
}
}

View File

@ -82,4 +82,17 @@ public class PylonLarge extends BlockDummyable implements ITooltipProvider {
return dir.ordinal() + offset;
}
@Override
public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) {
if(world.isRemote) {
return true;
} else if(!player.isSneaking()) {
int[] pos = this.findCore(world, x, y, z);
TileEntityPylonBase te = (TileEntityPylonBase) world.getTileEntity(pos[0], pos[1], pos[2]);
return te.setColor(player.getHeldItem());
} else {
return false;
}
}
}

View File

@ -50,4 +50,17 @@ public class PylonMedium extends BlockDummyable implements ITooltipProvider {
if(te instanceof TileEntityPylonBase) ((TileEntityPylonBase)te).disconnectAll();
super.breakBlock(world, x, y, z, b, m);
}
@Override
public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) {
if(world.isRemote) {
return true;
} else if(!player.isSneaking()) {
int[] pos = this.findCore(world, x, y, z);
TileEntityPylonBase te = (TileEntityPylonBase) world.getTileEntity(pos[0], pos[1], pos[2]);
return te.setColor(player.getHeldItem());
} else {
return false;
}
}
}

View File

@ -72,4 +72,17 @@ public class Substation extends BlockDummyable implements ITooltipProvider {
this.makeExtra(world, x + dir.offsetX * o - 1, y, z + dir.offsetZ * o + 1);
this.makeExtra(world, x + dir.offsetX * o - 1, y, z + dir.offsetZ * o - 1);
}
@Override
public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) {
if(world.isRemote) {
return true;
} else if(!player.isSneaking()) {
int[] pos = this.findCore(world, x, y, z);
TileEntityPylonBase te = (TileEntityPylonBase) world.getTileEntity(pos[0], pos[1], pos[2]);
return te.setColor(player.getHeldItem());
} else {
return false;
}
}
}

View File

@ -788,6 +788,7 @@ public class ResourceManager {
public static final ResourceLocation pylon_large_tex = new ResourceLocation(RefStrings.MODID, "textures/models/network/pylon_large.png");
public static final ResourceLocation substation_tex = new ResourceLocation(RefStrings.MODID, "textures/models/network/substation.png");
public static final ResourceLocation wire_tex = new ResourceLocation(RefStrings.MODID, "textures/models/network/wire.png");
public static final ResourceLocation wire_greyscale_tex = new ResourceLocation(RefStrings.MODID, "textures/models/network/wire_greyscale.png");
//Radiolysis
public static final ResourceLocation radiolysis_tex = new ResourceLocation(RefStrings.MODID, "textures/models/radiolysis.png");

View File

@ -24,7 +24,7 @@ public abstract class RenderPylonBase extends TileEntitySpecialRenderer {
*/
public void renderLinesGeneric(TileEntityPylonBase pyl, double x, double y, double z) {
this.bindTexture(ResourceManager.wire_tex);
this.bindTexture(pyl.color == 0 ? ResourceManager.wire_tex : ResourceManager.wire_greyscale_tex);
for(int i = 0; i < pyl.connected.size(); i++) {
@ -127,6 +127,8 @@ public abstract class RenderPylonBase extends TileEntitySpecialRenderer {
int brightness = world.getLightBrightnessForSkyBlocks(MathHelper.floor_double(ix), MathHelper.floor_double(iy), MathHelper.floor_double(iz), 0);
tess.setBrightness(brightness);
tess.setColorOpaque_I(pyl.color == 0 ? 0xffffff : pyl.color);
drawLineSegment(tess,
x0 + (deltaX * j / count),
y0 + (deltaY * j / count) - sagJ,
@ -180,7 +182,6 @@ public abstract class RenderPylonBase extends TileEntitySpecialRenderer {
jX *= -1;
}
tessellator.setColorOpaque_I(0xffffff);
tessellator.addVertexWithUV(x + iX, y + iY, z + iZ, 0, 0);
tessellator.addVertexWithUV(x - iX, y - iY, z - iZ, 0, 1);
tessellator.addVertexWithUV(a - iX, b - iY, c - iZ, wrap, 1);

View File

@ -3,6 +3,7 @@ package com.hbm.tileentity.network;
import java.util.ArrayList;
import java.util.List;
import com.hbm.util.ColorUtil;
import com.hbm.util.fauxpointtwelve.BlockPos;
import com.hbm.util.fauxpointtwelve.DirPos;
@ -10,6 +11,7 @@ import api.hbm.energymk2.Nodespace;
import api.hbm.energymk2.Nodespace.PowerNode;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.network.NetworkManager;
import net.minecraft.network.Packet;
@ -23,6 +25,7 @@ import net.minecraftforge.common.util.ForgeDirection;
public abstract class TileEntityPylonBase extends TileEntityCableBaseNT {
public List<int[]> connected = new ArrayList<int[]>();
public int color;
public static int canConnect(TileEntityPylonBase first, TileEntityPylonBase second) {
@ -45,6 +48,22 @@ public abstract class TileEntityPylonBase extends TileEntityCableBaseNT {
return len >= delta.lengthVector() ? 0 : 3;
}
public boolean setColor(ItemStack stack) {
if(stack == null) return false;
int color = ColorUtil.getColorFromDye(stack);
if(color == 0 || color == this.color) return false;
stack.stackSize--;
this.color = color;
this.markDirty();
if(worldObj instanceof WorldServer) {
WorldServer world = (WorldServer) worldObj;
world.getPlayerManager().markBlockForUpdate(xCoord, yCoord, zCoord);
}
return true;
}
@Override
public PowerNode createNode() {
@ -120,8 +139,9 @@ public abstract class TileEntityPylonBase extends TileEntityCableBaseNT {
@Override
public void writeToNBT(NBTTagCompound nbt) {
super.writeToNBT(nbt);
nbt.setInteger("conCount", connected.size());
nbt.setInteger("color", color);
for(int i = 0; i < connected.size(); i++) {
nbt.setIntArray("con" + i, connected.get(i));
@ -133,6 +153,7 @@ public abstract class TileEntityPylonBase extends TileEntityCableBaseNT {
super.readFromNBT(nbt);
int count = nbt.getInteger("conCount");
this.color = nbt.getInteger("color");
this.connected.clear();

View File

@ -7,6 +7,7 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import javax.imageio.ImageIO;
@ -182,4 +183,36 @@ public class ColorUtil {
float[] hsb = Color.RGBtoHSB(color.getRed(), color.getGreen(), color.getBlue(), new float[3]);
return hsb[2];
}
public static HashMap<String, Integer> nameToColor = new HashMap() {{
put("black", 1973019);
put("red", 11743532);
put("green", 3887386);
put("brown", 5320730);
put("blue", 2437522);
put("purple", 8073150);
put("cyan", 2651799);
put("silver", 11250603);
put("gray", 4408131);
put("pink", 14188952);
put("lime", 4312372);
put("yellow", 14602026);
put("lightBlue", 6719955);
put("magenta", 12801229);
put("orange", 15435844);
put("white", 15790320);
}};
public static int getColorFromDye(ItemStack stack) {
List<String> oreNames = ItemStackUtil.getOreDictNames(stack);
for(String dict : oreNames) {
if(dict.length() > 3 && dict.startsWith("dye")) {
String color = dict.substring(3).toLowerCase(Locale.US);
if(nameToColor.containsKey(color)) return nameToColor.get(color);
}
}
return 0;
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 137 B