aboutsummaryrefslogtreecommitdiff
path: root/src/main
diff options
context:
space:
mode:
authorkekzdealer <kekzdealer@gmail.com>2020-05-18 02:10:10 +0200
committerkekzdealer <kekzdealer@gmail.com>2020-05-18 02:10:10 +0200
commit79191dd848796b231a1021db67d68568e869dd05 (patch)
treece20406794e76322a79537ff09981052098b71e5 /src/main
parent548f30161b62baf8f676e41f3170cfa62f261bdf (diff)
downloadGT5-Unofficial-79191dd848796b231a1021db67d68568e869dd05.tar.gz
GT5-Unofficial-79191dd848796b231a1021db67d68568e869dd05.tar.bz2
GT5-Unofficial-79191dd848796b231a1021db67d68568e869dd05.zip
moved renderer package to client package, added Space Elevator Tether and a TESR, added Space Elevator Capacitor
Diffstat (limited to 'src/main')
-rw-r--r--src/main/java/client/renderer/ConduitRenderer.java (renamed from src/main/java/render/ConduitRenderer.java)5
-rw-r--r--src/main/java/client/renderer/TetherRenderer.java81
-rw-r--r--src/main/java/common/Blocks.java4
-rw-r--r--src/main/java/common/blocks/Block_ItemProxyCable.java8
-rw-r--r--src/main/java/common/blocks/Block_SpaceElevator.java12
-rw-r--r--src/main/java/common/blocks/Block_SpaceElevatorCapacitor.java49
-rw-r--r--src/main/java/common/blocks/Block_SpaceElevatorTether.java70
-rw-r--r--src/main/java/common/tileentities/TE_SpaceElevatorTether.java7
-rw-r--r--src/main/java/kekztech/KekzCore.java6
-rw-r--r--src/main/resources/assets/kekztech/lang/en_US.lang4
-rw-r--r--src/main/resources/assets/kekztech/textures/blocks/SpaceElevatorBase_side.pngbin203 -> 242 bytes
-rw-r--r--src/main/resources/assets/kekztech/textures/blocks/SpaceElevatorBase_top.pngbin242 -> 203 bytes
-rw-r--r--src/main/resources/assets/kekztech/textures/blocks/SpaceElevatorCapacitor_side_0.pngbin0 -> 184 bytes
-rw-r--r--src/main/resources/assets/kekztech/textures/blocks/SpaceElevatorCapacitor_side_fullbase.pngbin0 -> 183 bytes
-rw-r--r--src/main/resources/assets/kekztech/textures/blocks/SpaceElevatorCapacitor_top_fullbase.pngbin0 -> 213 bytes
-rw-r--r--src/main/resources/assets/kekztech/textures/blocks/Tether_side.pngbin0 -> 168 bytes
-rw-r--r--src/main/resources/assets/kekztech/textures/blocks/Tether_top.pngbin0 -> 224 bytes
-rw-r--r--src/main/resources/assets/kekztech/textures/effects/Tether_beam.pngbin0 -> 195 bytes
18 files changed, 228 insertions, 18 deletions
diff --git a/src/main/java/render/ConduitRenderer.java b/src/main/java/client/renderer/ConduitRenderer.java
index e1b083004c..9619a73241 100644
--- a/src/main/java/render/ConduitRenderer.java
+++ b/src/main/java/client/renderer/ConduitRenderer.java
@@ -1,16 +1,13 @@
-package render;
+package client.renderer;
import common.tileentities.TE_ItemProxyCable;
import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler;
import cpw.mods.fml.client.registry.RenderingRegistry;
import net.minecraft.block.Block;
import net.minecraft.client.renderer.RenderBlocks;
-import net.minecraft.client.renderer.Tessellator;
import net.minecraft.tileentity.TileEntity;
-import net.minecraft.util.IIcon;
import net.minecraft.world.IBlockAccess;
import net.minecraftforge.common.util.ForgeDirection;
-import org.lwjgl.opengl.GL11;
public class ConduitRenderer implements ISimpleBlockRenderingHandler {
diff --git a/src/main/java/client/renderer/TetherRenderer.java b/src/main/java/client/renderer/TetherRenderer.java
new file mode 100644
index 0000000000..6484da7cef
--- /dev/null
+++ b/src/main/java/client/renderer/TetherRenderer.java
@@ -0,0 +1,81 @@
+package client.renderer;
+
+import common.tileentities.TE_SpaceElevatorTether;
+import kekztech.KekzCore;
+import net.minecraft.client.renderer.OpenGlHelper;
+import net.minecraft.client.renderer.Tessellator;
+import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
+import net.minecraft.tileentity.TileEntity;
+import net.minecraft.util.MathHelper;
+import net.minecraft.util.ResourceLocation;
+import org.lwjgl.opengl.GL11;
+
+public class TetherRenderer extends TileEntitySpecialRenderer {
+
+ private static final ResourceLocation tetherBeamTexture = new ResourceLocation(KekzCore.MODID, "textures/effects/Tether_beam.png");
+
+ public void renderTileEntityAt(TE_SpaceElevatorTether teTether, double x, double y, double z, float partialTick) {
+ float sthBeamLength = 1.0F; // 0.1F is about 30 or so blocks?
+ GL11.glAlphaFunc(GL11.GL_GREATER, 0.1F);
+
+ // Get Tessellator instance
+ final Tessellator tessellator = Tessellator.instance;
+ // Bind beam texture and set texture params
+ super.bindTexture(tetherBeamTexture);
+ GL11.glTexParameterf(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_S, 10497.0F);
+ GL11.glTexParameterf(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_T, 10497.0F);
+ // Set render flags for inner beam
+ GL11.glDisable(GL11.GL_LIGHTING);
+ GL11.glDisable(GL11.GL_CULL_FACE);
+ GL11.glDisable(GL11.GL_BLEND);
+ GL11.glDepthMask(true);
+ OpenGlHelper.glBlendFunc(770, 1, 1, 0);
+ // Prepare Tessellator
+ tessellator.startDrawingQuads();
+ tessellator.setColorRGBA(255, 255, 255, 32);
+ // Variables stuff II
+ double halfBeamWidth = 0.38D;
+ double d_rot1 = 0.5D + Math.cos(2.356194490192345D) * halfBeamWidth; // rotates the beam...
+ double d_rot2 = 0.5D + Math.sin(2.356194490192345D) * halfBeamWidth;
+ double d_rot3 = 0.5D + Math.cos((Math.PI / 4D)) * halfBeamWidth;
+ double d_rot4 = 0.5D + Math.sin((Math.PI / 4D)) * halfBeamWidth;
+ double d_rot5 = 0.5D + Math.cos(3.9269908169872414D) * halfBeamWidth;
+ double d_rot6 = 0.5D + Math.sin(3.9269908169872414D) * halfBeamWidth;
+ double d_rot7 = 0.5D + Math.cos(5.497787143782138D) * halfBeamWidth;
+ double d_rot8 = 0.5D + Math.sin(5.497787143782138D) * halfBeamWidth; // ...until here
+ double d23 = 256.0F * sthBeamLength;
+ double uv_x1 = 0.0D;
+ double uv_x2 = 1.0D;
+ double uv_y1 = -1.0D; // This makes the beam stream upwards if you add a time sensitive number to it
+ double uv_y2 = (double)(256.0F * sthBeamLength) * (0.5D / halfBeamWidth) + uv_y1;
+ // Construct mesh with texture
+ tessellator.addVertexWithUV(x + d_rot1, y + d23, z + d_rot2, uv_x2, uv_y2);
+ tessellator.addVertexWithUV(x + d_rot1, y, z + d_rot2, uv_x2, uv_y1);
+ tessellator.addVertexWithUV(x + d_rot3, y, z + d_rot4, uv_x1, uv_y1);
+ tessellator.addVertexWithUV(x + d_rot3, y + d23, z + d_rot4, uv_x1, uv_y2);
+ tessellator.addVertexWithUV(x + d_rot7, y + d23, z + d_rot8, uv_x2, uv_y2);
+ tessellator.addVertexWithUV(x + d_rot7, y, z + d_rot8, uv_x2, uv_y1);
+ tessellator.addVertexWithUV(x + d_rot5, y, z + d_rot6, uv_x1, uv_y1);
+ tessellator.addVertexWithUV(x + d_rot5, y + d23, z + d_rot6, uv_x1, uv_y2);
+ tessellator.addVertexWithUV(x + d_rot3, y + d23, z + d_rot4, uv_x2, uv_y2);
+ tessellator.addVertexWithUV(x + d_rot3, y, z + d_rot4, uv_x2, uv_y1);
+ tessellator.addVertexWithUV(x + d_rot7, y, z + d_rot8, uv_x1, uv_y1);
+ tessellator.addVertexWithUV(x + d_rot7, y + d23, z + d_rot8, uv_x1, uv_y2);
+ tessellator.addVertexWithUV(x + d_rot5, y + d23, z + d_rot6, uv_x2, uv_y2);
+ tessellator.addVertexWithUV(x + d_rot5, y, z + d_rot6, uv_x2, uv_y1);
+ tessellator.addVertexWithUV(x + d_rot1, y, z + d_rot2, uv_x1, uv_y1);
+ tessellator.addVertexWithUV(x + d_rot1, y + d23, z + d_rot2, uv_x1, uv_y2);
+ // Draw!
+ tessellator.draw();
+
+ // Reset render flags
+ GL11.glEnable(GL11.GL_LIGHTING);
+ GL11.glEnable(GL11.GL_TEXTURE_2D);
+ GL11.glDepthMask(true);
+ }
+
+ @Override
+ public void renderTileEntityAt(TileEntity te, double p_147500_2_, double p_147500_4_, double p_147500_6_, float p_147500_8_) {
+ this.renderTileEntityAt((TE_SpaceElevatorTether) te, p_147500_2_, p_147500_4_, p_147500_6_, p_147500_8_);
+ }
+}
diff --git a/src/main/java/common/Blocks.java b/src/main/java/common/Blocks.java
index 4b26ddc133..18725b6000 100644
--- a/src/main/java/common/Blocks.java
+++ b/src/main/java/common/Blocks.java
@@ -35,6 +35,8 @@ public class Blocks {
public static Block lscLapotronicEnergyUnit;
public static Block spaceElevatorStructure;
+ public static Block spaceElevatorCapacitor;
+ public static Block spaceElevatorTether;
public static void preInit() {
KekzCore.LOGGER.info("Registering blocks...");
@@ -95,6 +97,8 @@ public class Blocks {
private static void registerBlocks_SpaceElevator() {
spaceElevatorStructure = Block_SpaceElevator.registerBlock();
+ spaceElevatorCapacitor = Block_SpaceElevatorCapacitor.registerBlock();
+ spaceElevatorTether = Block_SpaceElevatorTether.registerBlock();
}
}
diff --git a/src/main/java/common/blocks/Block_ItemProxyCable.java b/src/main/java/common/blocks/Block_ItemProxyCable.java
index 8682a2a6dc..ce2f1e9820 100644
--- a/src/main/java/common/blocks/Block_ItemProxyCable.java
+++ b/src/main/java/common/blocks/Block_ItemProxyCable.java
@@ -2,7 +2,6 @@ package common.blocks;
import common.itemBlocks.IB_ItemProxyCable;
import common.tileentities.TE_ItemProxyCable;
-import cpw.mods.fml.common.FMLCommonHandler;
import cpw.mods.fml.common.registry.GameRegistry;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
@@ -12,7 +11,7 @@ import net.minecraft.block.material.Material;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
-import render.ConduitRenderer;
+import client.renderer.ConduitRenderer;
public class Block_ItemProxyCable extends Block {
@@ -57,10 +56,7 @@ public class Block_ItemProxyCable extends Block {
@Override
public int getRenderType() {
- if (FMLCommonHandler.instance().getSide().isClient()) {
- return ConduitRenderer.RID;
- } else
- return 0;
+ return ConduitRenderer.RID;
}
@Override
diff --git a/src/main/java/common/blocks/Block_SpaceElevator.java b/src/main/java/common/blocks/Block_SpaceElevator.java
index 39e8fdaf28..524f34ba46 100644
--- a/src/main/java/common/blocks/Block_SpaceElevator.java
+++ b/src/main/java/common/blocks/Block_SpaceElevator.java
@@ -29,7 +29,6 @@ public class Block_SpaceElevator extends BaseGTUpdateableBlock {
final String blockName = "kekztech_spaceelevator_block";
INSTANCE.setBlockName(blockName);
INSTANCE.setCreativeTab(CreativeTabs.tabMisc);
- INSTANCE.setBlockTextureName(KekzCore.MODID + ":" + "ControlRod");
INSTANCE.setHardness(7.0f);
INSTANCE.setResistance(10.0f);
GameRegistry.registerBlock(INSTANCE, IB_SpaceElevator.class, blockName);
@@ -39,8 +38,8 @@ public class Block_SpaceElevator extends BaseGTUpdateableBlock {
@Override
public void registerBlockIcons(IIconRegister ir) {
- baseTop = ir.registerIcon("kekztech:SpaceElevatorBase_side");
- baseSide = ir.registerIcon("kekztech:SpaceElevatorBase_top");
+ baseTop = ir.registerIcon("kekztech:SpaceElevatorBase_top");
+ baseSide = ir.registerIcon("kekztech:SpaceElevatorBase_side");
coilHolder = ir.registerIcon("kekztech:CoilHolder");
}
@@ -53,9 +52,10 @@ public class Block_SpaceElevator extends BaseGTUpdateableBlock {
@Override
public IIcon getIcon(int side, int meta) {
- switch(meta) {
- case 0: return (side < 2) ? baseTop : baseSide;
- default: return coilHolder;
+ if(meta == 0) {
+ return (side < 2) ? baseTop : baseSide;
+ } else {
+ return coilHolder;
}
}
}
diff --git a/src/main/java/common/blocks/Block_SpaceElevatorCapacitor.java b/src/main/java/common/blocks/Block_SpaceElevatorCapacitor.java
new file mode 100644
index 0000000000..1e8bde9d40
--- /dev/null
+++ b/src/main/java/common/blocks/Block_SpaceElevatorCapacitor.java
@@ -0,0 +1,49 @@
+package common.blocks;
+
+import common.itemBlocks.IB_SpaceElevator;
+import cpw.mods.fml.common.registry.GameRegistry;
+import kekztech.KekzCore;
+import net.minecraft.block.Block;
+import net.minecraft.block.material.Material;
+import net.minecraft.client.renderer.texture.IIconRegister;
+import net.minecraft.creativetab.CreativeTabs;
+import net.minecraft.util.IIcon;
+
+public class Block_SpaceElevatorCapacitor extends BaseGTUpdateableBlock {
+
+ private static final Block_SpaceElevatorCapacitor INSTANCE = new Block_SpaceElevatorCapacitor();
+
+ private IIcon top;
+ private IIcon side;
+
+ private Block_SpaceElevatorCapacitor() {
+ super(Material.iron);
+ }
+
+ public static Block registerBlock() {
+ final String blockName = "kekztech_spaceelevatorcapacitor_block";
+ INSTANCE.setBlockName(blockName);
+ INSTANCE.setCreativeTab(CreativeTabs.tabMisc);
+ INSTANCE.setHardness(5.0f);
+ INSTANCE.setResistance(3.0f);
+ GameRegistry.registerBlock(INSTANCE, blockName);
+
+ return INSTANCE;
+ }
+
+ @Override
+ public void registerBlockIcons(IIconRegister ir) {
+ top = ir.registerIcon("kekztech:SpaceElevatorCapacitor_top_fullbase");
+ side = ir.registerIcon("kekztech:SpaceElevatorCapacitor_side_fullbase");
+ }
+
+ @Override
+ public IIcon getIcon(int side, int meta) {
+ return (side < 2) ? this.top : this.side;
+ }
+
+ @Override
+ public int getLightValue() {
+ return 2;
+ }
+}
diff --git a/src/main/java/common/blocks/Block_SpaceElevatorTether.java b/src/main/java/common/blocks/Block_SpaceElevatorTether.java
new file mode 100644
index 0000000000..3031cd8a12
--- /dev/null
+++ b/src/main/java/common/blocks/Block_SpaceElevatorTether.java
@@ -0,0 +1,70 @@
+package common.blocks;
+
+import common.tileentities.TE_ItemProxyCable;
+import common.tileentities.TE_SpaceElevatorTether;
+import cpw.mods.fml.common.registry.GameRegistry;
+import kekztech.KekzCore;
+import net.minecraft.block.Block;
+import net.minecraft.block.material.Material;
+import net.minecraft.client.renderer.texture.IIconRegister;
+import net.minecraft.creativetab.CreativeTabs;
+import net.minecraft.tileentity.TileEntity;
+import net.minecraft.util.IIcon;
+import net.minecraft.world.World;
+
+public class Block_SpaceElevatorTether extends BaseGTUpdateableBlock {
+
+ private static final Block_SpaceElevatorTether INSTANCE = new Block_SpaceElevatorTether();
+
+ private IIcon top;
+ private IIcon side;
+
+ private Block_SpaceElevatorTether() {
+ super(Material.glass);
+ }
+
+ public static Block registerBlock() {
+ final String blockName = "kekztech_spaceelevatortether_block";
+ INSTANCE.setBlockName(blockName);
+ INSTANCE.setCreativeTab(CreativeTabs.tabMisc);
+ INSTANCE.setHardness(15.0f);
+ INSTANCE.setResistance(15.0f);
+ GameRegistry.registerBlock(INSTANCE, blockName);
+
+ return INSTANCE;
+ }
+
+ @Override
+ public void registerBlockIcons(IIconRegister ir) {
+ top = ir.registerIcon("kekztech:Tether_top");
+ side = ir.registerIcon("kekztech:Tether_side");
+ }
+
+ @Override
+ public IIcon getIcon(int side, int meta) {
+ return (side < 2) ? this.top : this.side;
+ }
+
+ @Override
+ public TileEntity createTileEntity(World world, int p_149915_2_) {
+ return new TE_SpaceElevatorTether();
+ }
+
+ @Override
+ public boolean hasTileEntity(int metadata) {
+ return true;
+ }
+
+ @Override
+ public boolean isOpaqueCube()
+ {
+ return false;
+ }
+
+ @Override
+ public boolean renderAsNormalBlock()
+ {
+ return false;
+ }
+
+}
diff --git a/src/main/java/common/tileentities/TE_SpaceElevatorTether.java b/src/main/java/common/tileentities/TE_SpaceElevatorTether.java
new file mode 100644
index 0000000000..83a2f566ce
--- /dev/null
+++ b/src/main/java/common/tileentities/TE_SpaceElevatorTether.java
@@ -0,0 +1,7 @@
+package common.tileentities;
+
+import net.minecraft.tileentity.TileEntity;
+
+public class TE_SpaceElevatorTether extends TileEntity {
+
+}
diff --git a/src/main/java/kekztech/KekzCore.java b/src/main/java/kekztech/KekzCore.java
index cc46b25fd8..a160c3b7e7 100644
--- a/src/main/java/kekztech/KekzCore.java
+++ b/src/main/java/kekztech/KekzCore.java
@@ -1,9 +1,11 @@
package kekztech;
+import client.renderer.TetherRenderer;
import common.Blocks;
import common.Recipes;
import common.Researches;
import common.tileentities.*;
+import cpw.mods.fml.client.registry.ClientRegistry;
import cpw.mods.fml.common.Mod;
import cpw.mods.fml.common.event.FMLInitializationEvent;
import cpw.mods.fml.common.event.FMLPostInitializationEvent;
@@ -67,13 +69,15 @@ public class KekzCore {
GameRegistry.registerTileEntity(TE_ItemProxyCable.class, "kekztech_itemproxycable_tile");
GameRegistry.registerTileEntity(TE_ItemProxySource.class, "kekztech_itemproxysource_tile");
GameRegistry.registerTileEntity(TE_ItemProxyEndpoint.class, "kekztech_itemproxyendpoint_tile");
-
GameRegistry.registerTileEntity(TE_ThaumiumReinforcedJar.class, "kekztech_thaumiumreinforcedjar");
GameRegistry.registerTileEntity(TE_IchorJar.class, "kekztech_ichorjar");
// Register guis
NetworkRegistry.INSTANCE.registerGuiHandler(instance, new GuiHandler());
+ // Register TESR
+ ClientRegistry.bindTileEntitySpecialRenderer(TE_SpaceElevatorTether.class, new TetherRenderer());
+
Researches.preInit();
}
diff --git a/src/main/resources/assets/kekztech/lang/en_US.lang b/src/main/resources/assets/kekztech/lang/en_US.lang
index 537823ee70..f922219b1c 100644
--- a/src/main/resources/assets/kekztech/lang/en_US.lang
+++ b/src/main/resources/assets/kekztech/lang/en_US.lang
@@ -179,4 +179,6 @@ kekztech.research_page.ICHORJAR.0=This is it!<BR><BR>By infusing a jar with just
# -------- Space Elevator: Block
tile.kekztech_spaceelevator_block.0.name=Space Elevator Base
tile.kekztech_spaceelevator_block.1.name=Space Elevator Coil Holder
-tile.kekztech_spaceelevator_block.desc=Part of the Space Elevator Base Station \ No newline at end of file
+tile.kekztech_spaceelevator_block.desc=Part of the Space Elevator Base Station
+tile.kekztech_spaceelevatorcapacitor_block.name=Space Elevator Capacitor
+tile.kekztech_spaceelevatortether_block.name=Space Elevator Tether \ No newline at end of file
diff --git a/src/main/resources/assets/kekztech/textures/blocks/SpaceElevatorBase_side.png b/src/main/resources/assets/kekztech/textures/blocks/SpaceElevatorBase_side.png
index 05afd9318a..876c26f8cb 100644
--- a/src/main/resources/assets/kekztech/textures/blocks/SpaceElevatorBase_side.png
+++ b/src/main/resources/assets/kekztech/textures/blocks/SpaceElevatorBase_side.png
Binary files differ
diff --git a/src/main/resources/assets/kekztech/textures/blocks/SpaceElevatorBase_top.png b/src/main/resources/assets/kekztech/textures/blocks/SpaceElevatorBase_top.png
index 876c26f8cb..05afd9318a 100644
--- a/src/main/resources/assets/kekztech/textures/blocks/SpaceElevatorBase_top.png
+++ b/src/main/resources/assets/kekztech/textures/blocks/SpaceElevatorBase_top.png
Binary files differ
diff --git a/src/main/resources/assets/kekztech/textures/blocks/SpaceElevatorCapacitor_side_0.png b/src/main/resources/assets/kekztech/textures/blocks/SpaceElevatorCapacitor_side_0.png
new file mode 100644
index 0000000000..4715a813ed
--- /dev/null
+++ b/src/main/resources/assets/kekztech/textures/blocks/SpaceElevatorCapacitor_side_0.png
Binary files differ
diff --git a/src/main/resources/assets/kekztech/textures/blocks/SpaceElevatorCapacitor_side_fullbase.png b/src/main/resources/assets/kekztech/textures/blocks/SpaceElevatorCapacitor_side_fullbase.png
new file mode 100644
index 0000000000..84f5909b9e
--- /dev/null
+++ b/src/main/resources/assets/kekztech/textures/blocks/SpaceElevatorCapacitor_side_fullbase.png
Binary files differ
diff --git a/src/main/resources/assets/kekztech/textures/blocks/SpaceElevatorCapacitor_top_fullbase.png b/src/main/resources/assets/kekztech/textures/blocks/SpaceElevatorCapacitor_top_fullbase.png
new file mode 100644
index 0000000000..f1c045b5af
--- /dev/null
+++ b/src/main/resources/assets/kekztech/textures/blocks/SpaceElevatorCapacitor_top_fullbase.png
Binary files differ
diff --git a/src/main/resources/assets/kekztech/textures/blocks/Tether_side.png b/src/main/resources/assets/kekztech/textures/blocks/Tether_side.png
new file mode 100644
index 0000000000..4cf0b8dda9
--- /dev/null
+++ b/src/main/resources/assets/kekztech/textures/blocks/Tether_side.png
Binary files differ
diff --git a/src/main/resources/assets/kekztech/textures/blocks/Tether_top.png b/src/main/resources/assets/kekztech/textures/blocks/Tether_top.png
new file mode 100644
index 0000000000..987ebcba5c
--- /dev/null
+++ b/src/main/resources/assets/kekztech/textures/blocks/Tether_top.png
Binary files differ
diff --git a/src/main/resources/assets/kekztech/textures/effects/Tether_beam.png b/src/main/resources/assets/kekztech/textures/effects/Tether_beam.png
new file mode 100644
index 0000000000..ca8274820b
--- /dev/null
+++ b/src/main/resources/assets/kekztech/textures/effects/Tether_beam.png
Binary files differ