Compare commits

..
21 Commits
Author SHA1 Message Date
Martin Robertz d60fc9b436 update 2024-05-20 11:07:51 +02:00
Martin Robertz 6ad43b2e0d Merge remote-tracking branch 'TheUnderTaker11/git-please' into dev 2024-05-20 11:07:22 +02:00
CreditScore 77f3e6974f Travel Staff Blink Keybind fixes.
Fixes 2 separate bugs with the SoT keybind.
1. Staff of Teleportation in GTNH pack specifically didn't work due to reporting as having 0 power through the RF API. Fixed this by having it always report that it's full of power since it has infinite.
2. BlackSteelSword and EndSteelSword (The Ender and MKII) both were quite funky with keybind, causing no teleports to happen when they really should have.
Fixed this through tweaks to how this is handled in a number of places to allow for proper handling while not changing the default held/shift held behavior.

Tested in SP, Anchor behavior while holding staffs and Swords with travel thing on them work as expected. Keybind now works and is able to use swords with travel thing on them.
One quirk is that if you are holding a sword with travel upgrade, but NOT shifting, the sword itself stops counting as a valid travel item. So if ONLY using sword no separate SoT the keybind will not work unless you hold shift. If you have another SoT in your inventory it will identify and use that and still blink you upon hitting keybind.
This quirk doesn't really matter in most cases, just something worth noting I guess.
2024-05-19 15:13:50 -05:00
Martin Robertz 42573b3fa4 update 2024-05-09 10:04:12 +02:00
Martin Robertz c4cbe05dfe Merge branch 'master' into dev
# Conflicts:
#	dependencies.gradle
2024-05-09 10:03:47 +02:00
Martin Robertz a591baf426 update 2024-05-06 09:55:08 +02:00
Martin Robertz 4131a1e7b7 Merge remote-tracking branch 'origin/tweak-teleport-staff' into dev 2024-05-06 09:54:22 +02:00
github-actions[bot]andGitHub GTNH Actions 32c251d805 spotlessApply (#161)
Co-authored-by: GitHub GTNH Actions <>
2024-04-23 19:03:07 -06:00
D-Cysteine b237c6cb4d 2-in-1 TP: find destination client-side 2024-04-23 18:59:06 -06:00
D-Cysteine 58e8bf712c Limit backwards teleport check 2024-04-14 13:01:17 -06:00
D-Cysteine f1978a6a15 Handle server-side travelToLocation 2024-04-13 16:14:42 -06:00
D-Cysteine 5bd58bd981 Check anchor accessibility and require player != null 2024-04-13 16:14:25 -06:00
D-Cysteine b0f7c8600a Check for obstructed anchor on long-distance teleport 2024-04-13 15:35:40 -06:00
D-Cysteine 1b2c38cf0a Clear stored anchors on world load 2024-04-13 15:35:26 -06:00
D-Cysteine e6c216ab31 Add server-side handling for two-in-one teleport action 2024-04-13 15:35:08 -06:00
D-Cysteine 745b6ed528 Various TP fixes
* Allow TP to unloaded anchor
* Improve TP through wall by checking every 0.5 instead of 2 distance
* Fix blink placing player one block too high
* Fix anchor being incorrectly selected sometimes by constraining to visual angle
2024-04-13 14:46:20 -06:00
D-Cysteine 9422337282 Add configs for teleport staff actions 2024-04-13 14:44:43 -06:00
github-actions[bot]andGitHub GTNH Actions 3b0025500e spotlessApply (#159)
Co-authored-by: GitHub GTNH Actions <>
2024-04-13 17:36:56 +02:00
D-Cysteine dd739ba58e Fix logic 2024-04-13 09:11:50 -06:00
D-Cysteine edbd5621c3 Fix comment 2024-04-13 09:10:10 -06:00
D-Cysteine d90c7dae1b Tweak teleport staff controls 2024-04-13 09:06:16 -06:00
26 changed files with 354 additions and 295 deletions

No files matched your search

+11 -11
View File
@@ -2,21 +2,21 @@
dependencies {
api('com.github.GTNewHorizons:EnderCore:0.4.6:dev') {transitive = false}
compileOnly('com.github.GTNewHorizons:ForestryMC:4.9.21:dev')
compileOnly('com.github.GTNewHorizons:NotEnoughItems:2.6.53-GTNH:dev')
api("com.github.GTNewHorizons:GTNHLib:0.5.23:dev")
compileOnly('com.github.GTNewHorizons:ForestryMC:4.9.0:dev')
compileOnly('com.github.GTNewHorizons:NotEnoughItems:2.6.0-GTNH:dev')
compileOnly("com.github.GTNewHorizons:GTNHLib:0.2.11:dev")
compileOnly('com.github.GTNewHorizons:BuildCraft:7.1.39:dev')
api('curse.maven:cofh-lib-220333:2388748') // https://www.curseforge.com/minecraft/mc-mods/cofh-lib/files/2388748
shadowImplementation('cglib:cglib-nodep:3.3.0')
compileOnly('com.github.GTNewHorizons:waila:1.8.2:api') {transitive = false}
compileOnly('com.github.GTNewHorizons:Applied-Energistics-2-Unofficial:rv3-beta-484-GTNH:api') {transitive = false}
compileOnly('com.github.GTNewHorizons:waila:1.7.3:api') {transitive = false}
compileOnly('com.github.GTNewHorizons:Applied-Energistics-2-Unofficial:rv3-beta-400-GTNH:api') {transitive = false}
compileOnly('com.github.GTNewHorizons:Baubles:1.0.4:dev') {transitive = false}
compileOnly('com.github.GTNewHorizons:GT5-Unofficial:5.09.50.113:dev') {transitive = false}
compileOnly('com.github.GTNewHorizons:Railcraft:9.15.16:api') {transitive = false}
compileOnly('com.github.GTNewHorizons:StorageDrawers:2.0.5-GTNH:api') {transitive = false}
compileOnly('com.github.GTNewHorizons:Chisel:2.15.4-GTNH:dev') {transitive = false}
compileOnly('com.github.GTNewHorizons:OpenComputers:1.10.28-GTNH:api') {transitive = false}
compileOnly('com.github.GTNewHorizons:GT5-Unofficial:5.09.46.18:dev') {transitive = false}
compileOnly('com.github.GTNewHorizons:Railcraft:9.15.8:api') {transitive = false}
compileOnly('com.github.GTNewHorizons:StorageDrawers:1.13.5-GTNH:api') {transitive = false}
compileOnly('com.github.GTNewHorizons:Chisel:2.15.0-GTNH:dev') {transitive = false}
compileOnly('com.github.GTNewHorizons:OpenComputers:1.10.11-GTNH:api') {transitive = false}
compileOnly('curse.maven:minefactory-reloaded-66672:2366150') // https://www.curseforge.com/minecraft/mc-mods/minefactory-reloaded/files/2366150
compileOnly('thaumcraft:Thaumcraft:1.7.10-4.2.3.5:dev')
compileOnly('curse.maven:ee3-65509:2305023') // https://www.curseforge.com/minecraft/mc-mods/ee3/files/2305023
@@ -24,5 +24,5 @@ dependencies {
compileOnly(rfg.deobf('curse.maven:mekanism-268560:2475797')) // https://www.curseforge.com/minecraft/mc-mods/mekanism/files/2475797
compileOnly(rfg.deobf('maven.modrinth:immibis-microblocks:59.1.2')) // https://modrinth.com/mod/immibis-microblocks/version/59.1.2
compileOnlyApi('com.github.GTNewHorizons:Angelica:1.0.0-beta28:api') {transitive = false}
compileOnlyApi('com.github.GTNewHorizons:Angelica:1.0.0-alpha50:api') {transitive = false}
}
+1 -12
View File
@@ -85,11 +85,6 @@ accessTransformersFile =
# Provides setup for Mixins if enabled. If you don't know what mixins are: Keep it disabled!
usesMixins = false
# Set to a non-empty string to configure mixins in a separate source set under src/VALUE, instead of src/main.
# This can speed up compile times thanks to not running the mixin annotation processor on all input sources.
# Mixin classes will have access to "main" classes, but not the other way around.
separateMixinSourceSet =
# Adds some debug arguments like verbose output and class export.
usesMixinDebug = false
@@ -122,15 +117,9 @@ minimizeShadowedDependencies = true
# If disabled, won't rename the shadowed classes.
relocateShadowedDependencies = true
# Adds CurseMaven, Modrinth, and some more well-known 1.7.10 repositories.
# Adds the GTNH maven, CurseMaven, Modrinth, and some more well-known 1.7.10 repositories.
includeWellKnownRepositories = true
# A list of repositories to exclude from the includeWellKnownRepositories setting. Should be a space separated
# list of strings, with the acceptable keys being(case does not matter):
# cursemaven
# modrinth
excludeWellKnownRepositories =
# Change these to your Maven coordinates if you want to publish to a custom Maven repository instead of the default GTNH Maven.
# Authenticate with the MAVEN_USER and MAVEN_PASSWORD environment variables.
# If you need a more complex setup disable maven publishing here and add a publishing repository to addon.gradle.
Binary file not shown.
+1 -1
View File
@@ -1,6 +1,6 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
Vendored
+2 -5
View File
@@ -15,8 +15,6 @@
# See the License for the specific language governing permissions and
# limitations under the License.
#
# SPDX-License-Identifier: Apache-2.0
#
##############################################################################
#
@@ -57,7 +55,7 @@
# Darwin, MinGW, and NonStop.
#
# (3) This script is generated from the Groovy template
# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
# within the Gradle project.
#
# You can find Gradle at https://github.com/gradle/gradle/.
@@ -86,8 +84,7 @@ done
# shellcheck disable=SC2034
APP_BASE_NAME=${0##*/}
# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)
APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s
' "$PWD" ) || exit
APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD=maximum
Vendored
-2
View File
@@ -13,8 +13,6 @@
@rem See the License for the specific language governing permissions and
@rem limitations under the License.
@rem
@rem SPDX-License-Identifier: Apache-2.0
@rem
@if "%DEBUG%"=="" @echo off
@rem ##########################################################################
+1 -1
View File
@@ -17,7 +17,7 @@ pluginManagement {
}
plugins {
id 'com.gtnewhorizons.gtnhsettingsconvention' version '1.0.30'
id 'com.gtnewhorizons.gtnhsettingsconvention' version '1.0.22'
}
@@ -27,6 +27,7 @@ import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import crazypants.enderio.conduit.BlockConduitBundle;
import crazypants.enderio.conduit.IConduit;
import crazypants.enderio.conduit.TileConduitBundle;
import crazypants.enderio.conduit.facade.FacadeRenderer;
import crazypants.enderio.conduit.gas.GasConduit;
import crazypants.enderio.conduit.gas.GasUtil;
@@ -377,6 +378,7 @@ public class ClientProxy extends CommonProxy {
cbr = new ConduitBundleRenderer((float) Config.conduitScale);
BlockConduitBundle.rendererId = RenderingRegistry.getNextAvailableRenderId();
RenderingRegistry.registerBlockHandler(cbr);
ClientRegistry.bindTileEntitySpecialRenderer(TileConduitBundle.class, cbr);
ClientRegistry.bindTileEntitySpecialRenderer(TileTravelAnchor.class, new TravelEntitySpecialRenderer());
@@ -186,7 +186,7 @@ import crazypants.util.EE3Util;
modid = MODID,
name = MOD_NAME,
version = VERSION,
dependencies = "required-after:CoFHLib@(1.0.3B3,);after:endercore;after:MineFactoryReloaded;after:Forestry;after:Waila@[1.5.8,);after:Thaumcraft;after:appliedenergistics2@[rv2-beta-8,);after:chisel;required-after:gtnhlib@[0.2.10,)",
dependencies = "required-after:CoFHLib@(1.0.3B3,);after:endercore;after:MineFactoryReloaded;after:Forestry;after:Waila@[1.5.8,);after:Thaumcraft;after:appliedenergistics2@[rv2-beta-8,);after:chisel",
guiFactory = "crazypants.enderio.config.ConfigFactoryEIO")
public class EnderIO {
@@ -25,7 +25,6 @@ import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fluids.FluidTankInfo;
import com.enderio.core.client.render.BoundingBox;
import com.gtnewhorizon.gtnhlib.concurrent.cas.CasList;
import appeng.api.networking.IGridNode;
import appeng.api.util.AECableType;
@@ -67,7 +66,7 @@ public class TileConduitBundle extends TileEntityEio implements IConduitBundle {
public static final short NBT_VERSION = 1;
private final List<IConduit> conduits = new CasList<>();
private final List<IConduit> conduits = new ArrayList<IConduit>();
private Block facadeId = null;
private int facadeMeta = 0;
@@ -75,9 +74,9 @@ public class TileConduitBundle extends TileEntityEio implements IConduitBundle {
private boolean facadeChanged;
private final List<CollidableComponent> cachedCollidables = new ArrayList<>();
private final List<CollidableComponent> cachedCollidables = new ArrayList<CollidableComponent>();
private final List<CollidableComponent> cachedConnectors = new ArrayList<>();
private final List<CollidableComponent> cachedConnectors = new ArrayList<CollidableComponent>();
private boolean conduitsDirty = true;
private boolean collidablesDirty = true;
@@ -537,7 +536,7 @@ public class TileConduitBundle extends TileEntityEio implements IConduitBundle {
@Override
public List<CollidableComponent> getConnectors() {
List<CollidableComponent> result = new ArrayList<>();
List<CollidableComponent> result = new ArrayList<CollidableComponent>();
addConnectors(result);
return result;
}
@@ -143,7 +143,7 @@ public class LiquidConduit extends AbstractTankConduit {
}
}
if (!foundFluid) {
continue;
return;
}
FluidStack couldDrain = extTank.drain(dir.getOpposite(), MAX_EXTRACT_PER_TICK, false);
@@ -1,11 +1,11 @@
package crazypants.enderio.conduit.liquid;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.WeakHashMap;
import java.util.concurrent.ConcurrentHashMap;
import net.minecraft.client.renderer.RenderBlocks;
import net.minecraft.client.renderer.Tessellator;
@@ -56,17 +56,10 @@ public class LiquidConduitRenderer extends DefaultConduitRenderer implements IRe
super.renderEntity(conduitBundleRenderer, te, conduit, x, y, z, partialTick, worldLight, rb);
}
public void renderDynamicEntity(ConduitBundleRenderer conduitBundleRenderer, IConduitBundle te, IConduit conduit,
double x, double y, double z, float partialTick, float worldLight) {
}
@Override
protected void renderConduit(IIcon tex, IConduit conduit, CollidableComponent component, float brightness) {
Tessellator tessellator = Tessellator.instance;
if (isNSEWUD(component.dir)) {
LiquidConduit lc = (LiquidConduit) conduit;
IIcon fluidTex = conduit.getTransmitionTextureForState(component);
FluidStack fluid = lc.getFluidType();
if (fluid != null) {
renderFluidOutline(component, fluid);
@@ -74,40 +67,33 @@ public class LiquidConduitRenderer extends DefaultConduitRenderer implements IRe
BoundingBox[] cubes = toCubes(component.bound);
for (BoundingBox cube : cubes) {
drawSection(cube, tex.getMinU(), tex.getMaxU(), tex.getMinV(), tex.getMaxV(), component.dir, false);
// This check is kinda broken, but whatever, it was like that when this was done in a TESR too
if (lc.getTank().getFilledRatio() <= 0) {
continue;
}
tessellator.setColorOpaque_F(0.7f, 0.7f, 0.7f);
drawSection(
cube,
fluidTex.getMinU(),
fluidTex.getMaxU(),
fluidTex.getMinV(),
fluidTex.getMaxV(),
component.dir,
true);
}
if (conduit.getConnectionMode(component.dir) == ConnectionMode.DISABLED) {
final CubeRenderer cr = CubeRenderer.get();
int i;
tex = EnderIO.blockConduitBundle.getConnectorIcon(component.data);
List<Vertex> corners = component.bound.getCornersWithUvForFace(
component.dir,
tex.getMinU(),
tex.getMaxU(),
tex.getMinV(),
tex.getMaxV());
for (i = corners.size() - 1; i >= 0; i--) {
Vertex c = corners.get(i);
cr.addVecWithUV(c.xyz, c.uv.x, c.uv.y);
}
// back face
for (i = corners.size() - 1; i >= 0; i--) {
Vertex c = corners.get(i);
cr.addVecWithUV(c.xyz, c.uv.x, c.uv.y);
}
} else {
drawSection(
component.bound,
tex.getMinU(),
tex.getMaxU(),
tex.getMinV(),
tex.getMaxV(),
component.dir,
true);
}
if (conduit.getConnectionMode(component.dir) == ConnectionMode.DISABLED) {
final CubeRenderer cr = CubeRenderer.get();
int i;
tex = EnderIO.blockConduitBundle.getConnectorIcon(component.data);
List<Vertex> corners = component.bound
.getCornersWithUvForFace(component.dir, tex.getMinU(), tex.getMaxU(), tex.getMinV(), tex.getMaxV());
for (i = corners.size() - 1; i >= 0; i--) {
Vertex c = corners.get(i);
cr.addVecWithUV(c.xyz, c.uv.x, c.uv.y);
}
// back face
for (i = corners.size() - 1; i >= 0; i--) {
Vertex c = corners.get(i);
cr.addVecWithUV(c.xyz, c.uv.x, c.uv.y);
}
}
}
@@ -127,29 +113,27 @@ public class LiquidConduitRenderer extends DefaultConduitRenderer implements IRe
}
}
private static final Map<CollidableComponent, Map<Fluid, List<CachableRenderStatement>>> cache = Collections
.synchronizedMap(new WeakHashMap<>());
private static Map<CollidableComponent, Map<Fluid, List<CachableRenderStatement>>> cache = new WeakHashMap<CollidableComponent, Map<Fluid, List<CachableRenderStatement>>>();
public static List<CachableRenderStatement> computeFluidOutlineToCache(CollidableComponent component, Fluid fluid,
double scaleFactor, float outlineWidth) {
// Only init once per component across all threads so the cache stays accurate.
Map<Fluid, List<CachableRenderStatement>> cache0 = cache
.computeIfAbsent(component, _k -> new ConcurrentHashMap<>());
// The rest of this function 'should' be in a `computeIfAbsent` as well for:
// `cache0.computeIfAbsent(fluid, _k -> ...)` but that won't cause a bug in this case,
// just a bit more garbage.
Map<Fluid, List<CachableRenderStatement>> cache0 = cache.get(component);
if (cache0 == null) {
cache0 = new HashMap<Fluid, List<CachableRenderStatement>>();
cache.put(component, cache0);
}
List<CachableRenderStatement> data = cache0.get(fluid);
if (data != null) {
return data;
}
data = new ArrayList<>();
data = new ArrayList<CachableRenderStatement>();
cache0.put(fluid, data);
IIcon texture = fluid.getStillIcon();
if (texture == null) {
texture = fluid.getIcon();
if (texture == null) {
cache0.put(fluid, data);
return data;
}
}
@@ -208,7 +192,6 @@ public class LiquidConduitRenderer extends DefaultConduitRenderer implements IRe
}
}
}
cache0.put(fluid, data);
return data;
}
@@ -256,6 +239,49 @@ public class LiquidConduitRenderer extends DefaultConduitRenderer implements IRe
// done in the dynamic section
}
@Override
public boolean isDynamic() {
return true;
}
@Override
public void renderDynamicEntity(ConduitBundleRenderer conduitBundleRenderer, IConduitBundle te, IConduit conduit,
double x, double y, double z, float partialTick, float worldLight) {
if (((LiquidConduit) conduit).getTank().getFilledRatio() <= 0) {
return;
}
Collection<CollidableComponent> components = conduit.getCollidableComponents();
Tessellator tessellator = Tessellator.instance;
calculateRatios((LiquidConduit) conduit);
transmissionScaleFactor = conduit.getTransmitionGeometryScale();
IIcon tex;
for (CollidableComponent component : components) {
if (renderComponent(component)) {
if (isNSEWUD(component.dir) && conduit.getTransmitionTextureForState(component) != null) {
tessellator.setColorOpaque_F(1, 1, 1);
tex = conduit.getTransmitionTextureForState(component);
BoundingBox[] cubes = toCubes(component.bound);
for (BoundingBox cube : cubes) {
drawSection(
cube,
tex.getMinU(),
tex.getMaxU(),
tex.getMinV(),
tex.getMaxV(),
component.dir,
true);
}
}
}
}
}
@Override
protected void setVerticesForTransmission(BoundingBox bound, ForgeDirection id) {
@@ -15,7 +15,8 @@ public class ItemMEConduit extends AbstractItemConduit {
private static ItemConduitSubtype[] subtypes = new ItemConduitSubtype[] {
new ItemConduitSubtype(ModObject.itemMEConduit.name(), "enderio:itemMeConduit"),
new ItemConduitSubtype(ModObject.itemMEConduit.name() + "Dense", "enderio:itemMeConduitDense") };
new ItemConduitSubtype(ModObject.itemMEConduit.name() + "Dense", "enderio:itemMeConduitDense"),
new ItemConduitSubtype(ModObject.itemMEConduit.name() + "DenseUltra", "enderio:itemMeConduitDenseUltra") };
public static ItemMEConduit create() {
ItemMEConduit result = new ItemMEConduit();
@@ -11,6 +11,7 @@ import net.minecraft.client.Minecraft;
import net.minecraft.client.entity.EntityClientPlayerMP;
import net.minecraft.client.renderer.RenderBlocks;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
import net.minecraft.init.Blocks;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.IIcon;
@@ -18,9 +19,13 @@ import net.minecraft.util.MathHelper;
import net.minecraft.world.IBlockAccess;
import net.minecraftforge.common.util.ForgeDirection;
import org.lwjgl.opengl.GL11;
import org.lwjgl.opengl.GL12;
import com.enderio.core.client.render.BoundingBox;
import com.enderio.core.client.render.CubeRenderer;
import com.enderio.core.client.render.IconUtil;
import com.enderio.core.client.render.RenderUtil;
import com.enderio.core.common.util.BlockCoord;
import com.enderio.core.common.util.IBlockAccessWrapper;
import com.google.common.collect.Lists;
@@ -48,12 +53,59 @@ import crazypants.util.RenderPassHelper;
@SideOnly(Side.CLIENT)
@ThreadSafeISBRH(perThread = false)
public class ConduitBundleRenderer implements ISimpleBlockRenderingHandler {
public class ConduitBundleRenderer extends TileEntitySpecialRenderer implements ISimpleBlockRenderingHandler {
public ConduitBundleRenderer(float conduitScale) {}
public ConduitBundleRenderer() {}
@Override
public void renderTileEntityAt(TileEntity te, double x, double y, double z, float partialTick) {
IConduitBundle bundle = (IConduitBundle) te;
EntityClientPlayerMP player = Minecraft.getMinecraft().thePlayer;
if (bundle == null || (bundle.hasFacade() && bundle.getFacadeId().isOpaqueCube()
&& !ConduitUtil.isFacadeHidden(bundle, player))) {
return;
}
final Tessellator tessellator = Tessellator.instance;
float brightness = -1;
for (IConduit con : bundle.getConduits()) {
if (ConduitUtil.renderConduit(player, con)) {
final ConduitRenderer renderer = con.getRenderer();
if (renderer.isDynamic()) {
if (brightness == -1) {
BlockCoord loc = bundle.getLocation();
brightness = bundle.getEntity().getWorldObj()
.getLightBrightnessForSkyBlocks(loc.x, loc.y, loc.z, 0);
RenderUtil.bindBlockTexture();
GL11.glPushAttrib(GL11.GL_ENABLE_BIT | GL11.GL_LIGHTING_BIT);
GL11.glEnable(GL12.GL_RESCALE_NORMAL);
GL11.glEnable(GL11.GL_BLEND);
GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
GL11.glShadeModel(GL11.GL_SMOOTH);
GL11.glPushMatrix();
GL11.glTranslated(x, y, z);
tessellator.startDrawingQuads();
}
renderer.renderDynamicEntity(this, bundle, con, x, y, z, partialTick, brightness);
}
}
}
if (brightness != -1) {
tessellator.draw();
GL11.glShadeModel(GL11.GL_FLAT);
GL11.glPopMatrix();
GL11.glPopAttrib();
}
}
@Override
public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId,
RenderBlocks rb) {
@@ -10,4 +10,8 @@ public interface ConduitRenderer {
void renderEntity(ConduitBundleRenderer conduitBundleRenderer, IConduitBundle te, IConduit con, double x, double y,
double z, float partialTick, float worldLight, RenderBlocks rb);
boolean isDynamic();
void renderDynamicEntity(ConduitBundleRenderer conduitBundleRenderer, IConduitBundle te, IConduit con, double x,
double y, double z, float partialTick, float worldLight);
}
@@ -63,6 +63,10 @@ public class DefaultConduitRenderer implements ConduitRenderer {
}
}
@Override
public void renderDynamicEntity(ConduitBundleRenderer conduitBundleRenderer, IConduitBundle te, IConduit con,
double x, double y, double z, float partialTick, float worldLight) {}
protected void renderConduit(IIcon tex, IConduit conduit, CollidableComponent component, float brightness) {
final CubeRenderer cr = CubeRenderer.get();
@@ -345,4 +349,8 @@ public class DefaultConduitRenderer implements ConduitRenderer {
return new BoundingBox[] { bb };
}
@Override
public boolean isDynamic() {
return false;
}
}
@@ -174,6 +174,8 @@ public final class Config {
* The distance travelled when no block is found within {@link #teleportStaffMaxBlinkDistance}.
*/
public static int teleportStaffFailedBlinkDistance = 64;
/** If true, use the original staff of teleportation controls. */
public static boolean teleportStaffOriginalControls = false;
/**
* Sets the teleport staff right-click action.
@@ -186,6 +188,9 @@ public final class Config {
* <li><b>2:</b> Teleport to anchor
* <li><b>3:</b> Teleport to anchor, or to look if no anchor <em>(default)</em>
* </ul>
*
* <p>
* Overridden if {@link #teleportStaffOriginalControls} is true.
*/
public static int teleportStaffAction = 3;
@@ -200,6 +205,9 @@ public final class Config {
* <li><b>2:</b> Teleport to anchor
* <li><b>3:</b> Teleport to anchor, or to look if no anchor
* </ul>
*
* <p>
* Overridden if {@link #teleportStaffOriginalControls} is true.
*/
public static int teleportStaffSneakAction = 1;
@@ -1299,25 +1307,35 @@ public final class Config {
"Number of blocks teleported when no block is being looked at.")
.getInt(teleportStaffFailedBlinkDistance);
teleportStaffOriginalControls = config.get(
sectionPersonal.name,
"teleportStaffOriginalControls",
teleportStaffOriginalControls,
"If true, the staff of teleportation will use its original controls: R-Click for teleport to look, Shift R-Click for teleport to anchor.")
.getBoolean(teleportStaffOriginalControls);
teleportStaffAction = config.get(
sectionStaff.name,
sectionPersonal.name,
"teleportStaffAction",
teleportStaffAction,
"Sets the action for right-click with the staff of teleportation. Values:\n" + " 0: Do nothing\n"
+ " 1: Teleport to look\n"
+ " 2: Teleport to anchor\n"
+ " 3: Teleport to anchor, or look if no anchor (default)")
+ " 3: Teleport to anchor, or look if no anchor (default)\n"
+ "Overridden if teleportStaffOriginalControls is true.")
.getInt(teleportStaffAction);
teleportStaffSneakAction = config.get(
sectionStaff.name,
"teleportStaffSneakAction",
teleportStaffSneakAction,
"Sets the action for sneak right-click with the staff of teleportation. Values:\n"
+ " 0: Do nothing\n"
+ " 1: Teleport to look (default)\n"
+ " 2: Teleport to anchor\n"
+ " 3: Teleport to anchor, or look if no anchor")
teleportStaffSneakAction = config
.get(
sectionPersonal.name,
"teleportStaffSneakAction",
teleportStaffSneakAction,
"Sets the action for sneak right-click with the staff of teleportation. Values:\n"
+ " 0: Do nothing\n"
+ " 1: Teleport to look (default)\n"
+ " 2: Teleport to anchor\n"
+ " 3: Teleport to anchor, or look if no anchor\n"
+ "Overridden if teleportStaffOriginalControls is true.")
.getInt(teleportStaffSneakAction);
enderIoRange = config.get(
@@ -168,8 +168,7 @@ public abstract class AbstractMachineEntity extends TileEntityEio
public final boolean isItemValidForSlot(int i, ItemStack itemstack) {
if (slotDefinition.isUpgradeSlot(i)) {
return itemstack != null && itemstack.getItem() == EnderIO.itemBasicCapacitor
&& itemstack.getItemDamage() > 0
&& itemstack.getItemDamage() != 7;
&& itemstack.getItemDamage() > 0;
}
return isMachineItemValidForSlot(i, itemstack);
}
@@ -40,11 +40,6 @@ public class TileZombieGenerator extends AbstractGeneratorEntity
public String getMachineName() {
return ModObject.blockFrankenzombieGenerator.unlocalisedName;
}
@Override
public GeneratorType getGeneratorType() {
return GeneratorType.FRANKENZOMBIE;
}
}
public static class TileEnderGenerator extends TileZombieGenerator {
@@ -63,11 +58,6 @@ public class TileZombieGenerator extends AbstractGeneratorEntity
protected Fluid getFluidType() {
return EnderIO.fluidEnderDistillation;
}
@Override
public GeneratorType getGeneratorType() {
return GeneratorType.ENDER;
}
}
private static int IO_MB_TICK = 250;
@@ -336,7 +326,7 @@ public class TileZombieGenerator extends AbstractGeneratorEntity
}
public GeneratorType getGeneratorType() {
return GeneratorType.ZOMBIE;
return ((BlockZombieGenerator) worldObj.getBlock(xCoord, yCoord, zCoord)).getGeneratorType();
}
public int getOutputPerTick() {
@@ -5,7 +5,6 @@ import java.util.Random;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
@@ -57,10 +56,9 @@ public class BlockLightNode extends BlockEio {
@Override
public void breakBlock(World world, int x, int y, int z, Block par5, int par6) {
TileEntity te = world.getTileEntity(x, y, z);
if (te instanceof TileLightNode) {
TileLightNode light = (TileLightNode) te;
light.onBlockRemoved();
TileLightNode te = (TileLightNode) world.getTileEntity(x, y, z);
if (te != null) {
te.onBlockRemoved();
}
}
@@ -33,10 +33,9 @@ public enum Alloy {
if (oreDictName != null) {
this.oreIngots.add("ingot" + StringUtils.capitalize(oreDictName));
this.oreBlocks.add("block" + StringUtils.capitalize(oreDictName));
} else {
this.oreIngots.add("ingot" + StringUtils.capitalize(baseName));
this.oreBlocks.add("block" + StringUtils.capitalize(baseName));
}
this.oreIngots.add("ingot" + StringUtils.capitalize(baseName));
this.oreBlocks.add("block" + StringUtils.capitalize(baseName));
this.hardness = hardness;
}
@@ -103,7 +103,7 @@ public class ItemCapacitor extends Item implements ICapacitorItem {
@Override
@SideOnly(Side.CLIENT)
public void addInformation(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, List par3List, boolean par4) {
if (par1ItemStack != null && par1ItemStack.getItemDamage() > 0 && par1ItemStack.getItemDamage() != 7) {
if (par1ItemStack != null && par1ItemStack.getItemDamage() > 0) {
par3List.add(EnderIO.lang.localize("machine.tooltip.upgrade"));
if (SpecialTooltipHandler.showAdvancedTooltips()) {
SpecialTooltipHandler.addDetailedTooltipFromResources(par3List, "enderio.machine.tooltip.upgrade");
@@ -57,28 +57,38 @@ public class ItemTeleportStaff extends ItemTravelStaff {
@Override
public ItemStack onItemRightClick(ItemStack equipped, World world, EntityPlayer player) {
if (world.isRemote) {
int action = player.isSneaking() ? Config.teleportStaffSneakAction : Config.teleportStaffAction;
switch (action) {
case 0:
// Do nothing.
break;
case 1:
TravelController.instance.doTeleport(player);
player.swingItem();
break;
case 2:
if (Config.teleportStaffOriginalControls) {
if (player.isSneaking()) {
TravelController.instance
.activateTravelAccessable(equipped, world, player, TravelSource.TELEPORT_STAFF);
player.swingItem();
break;
} else {
TravelController.instance.doTeleport(player);
}
player.swingItem();
} else {
int action = player.isSneaking() ? Config.teleportStaffSneakAction : Config.teleportStaffAction;
switch (action) {
case 0:
// Do nothing.
break;
case 3:
TravelController.instance
.activateTravelAccessable(equipped, world, player, TravelSource.TELEPORT_STAFF, true);
player.swingItem();
break;
case 1:
TravelController.instance.doTeleport(player);
player.swingItem();
break;
case 2:
TravelController.instance
.activateTravelAccessable(equipped, world, player, TravelSource.TELEPORT_STAFF);
player.swingItem();
break;
case 3:
TravelController.instance
.activateTravelAccessable(equipped, world, player, TravelSource.TELEPORT_STAFF, true);
player.swingItem();
break;
}
}
}
return equipped;
@@ -46,6 +46,7 @@ import com.google.common.collect.Table;
import com.google.common.collect.TreeBasedTable;
import com.gtnewhorizon.gtnhlib.GTNHLib;
import cpw.mods.fml.common.Loader;
import cpw.mods.fml.common.ObfuscationReflectionHelper;
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
import cpw.mods.fml.common.gameevent.TickEvent;
@@ -199,11 +200,12 @@ public class TravelController {
public boolean activateTravelAccessable(ItemStack equipped, World world, EntityPlayer player, TravelSource source,
boolean alsoDoTeleport) {
if (!hasTarget()) {
PacketLongDistanceTravelEvent p = new PacketLongDistanceTravelEvent(player, false, source);
if (alsoDoTeleport) {
Optional<BlockCoord> destinationOptional = findTeleportDestination(player);
if (destinationOptional.isPresent()) {
BlockCoord destination = destinationOptional.get();
PacketLongDistanceTravelEvent p = new PacketLongDistanceTravelEvent(
p = new PacketLongDistanceTravelEvent(
player,
false,
source,
@@ -211,18 +213,12 @@ public class TravelController {
destination.x,
destination.y,
destination.z);
PacketHandler.INSTANCE.sendToServer(p);
// We have no way of knowing if it will succeed, so just return false.
return false;
}
}
PacketLongDistanceTravelEvent p = new PacketLongDistanceTravelEvent(player, false, source);
PacketHandler.INSTANCE.sendToServer(p);
// We have no way of knowing if it will succeed, so just return false.
return false;
}
BlockCoord target = selectedCoord;
TileEntity te = world.getTileEntity(target.x, target.y, target.z);
if (te instanceof ITravelAccessable) {
@@ -344,11 +340,111 @@ public class TravelController {
public boolean doTeleport(EntityPlayer player) {
Optional<BlockCoord> destinationOptional = findTeleportDestination(player);
if (destinationOptional.isPresent()) {
return travelToLocation(player, TravelSource.TELEPORT_STAFF_BLINK, destinationOptional.get(), false);
return travelToLocation(player, TravelSource.TELEPORT_STAFF_BLINK, destinationOptional.get(), true);
}
return false;
}
/** Finds the destination for the teleport staff super-teleport, or returns empty optional if unsuccessful. */
public Optional<BlockCoord> findTeleportDestination(EntityPlayer player) {
TravelSource source = TravelSource.TELEPORT_STAFF_BLINK;
Vector3d eye = Util.getEyePositionEio(player);
Vector3d look = Util.getLookVecEio(player);
double playerHeight = player.yOffset;
// +2 to compensate for the standard distance decrement of -2
double teleDistance = Config.teleportStaffFailedBlinkDistance + 2;
Vec3 eye3 = Vec3.createVectorHelper(eye.x, eye.y, eye.z);
// rayTraceBlocks has a limit of 200 distance.
double maxDistance = Config.teleportStaffMaxBlinkDistance;
double currDistance = 0;
Vec3 pos = eye3;
boolean loop = true;
while (loop) {
double distance = 200;
if (maxDistance - currDistance < 200) {
distance = maxDistance - currDistance;
loop = false;
}
Vector3d sample = new Vector3d(look);
sample.scale(distance);
sample.add(eye);
Vec3 end = Vec3.createVectorHelper(sample.x, sample.y, sample.z);
MovingObjectPosition p = player.worldObj
.rayTraceBlocks(pos, end, !Config.travelStaffBlinkThroughClearBlocksEnabled);
if (p != null) {
teleDistance = VecmathUtil.distance(eye, new Vector3d(p.blockX + 0.5, p.blockY + 0.5, p.blockZ + 0.5));
break;
}
pos = end;
currDistance += distance;
}
Vector3d sample = new Vector3d(look);
sample.scale(Config.teleportStaffMaxBlinkDistance);
sample.add(eye);
Vec3 end = Vec3.createVectorHelper(sample.x, sample.y, sample.z);
MovingObjectPosition p = player.worldObj
.rayTraceBlocks(eye3, end, !Config.travelStaffBlinkThroughClearBlocksEnabled);
if (p != null) {
teleDistance = VecmathUtil.distance(eye, new Vector3d(p.blockX + 0.5, p.blockY + 0.5, p.blockZ + 0.5));
}
double distanceIncrement = -2;
int maxIter = Math.min(8, (int) teleDistance / 2);
// Special case: if the targeted block is too close, we'll try to teleport through it.
if (teleDistance < 4) {
distanceIncrement = 0.5;
maxIter = 32;
}
for (int i = 0; i < maxIter; i++) {
teleDistance += distanceIncrement;
sample.set(look);
sample.scale(teleDistance);
sample.add(eye);
// we test against our feets location
sample.y -= playerHeight;
Optional<BlockCoord> destinationOptional = findNearbyDestination(player, source, sample);
if (destinationOptional.isPresent()) {
return destinationOptional;
}
}
return Optional.empty();
}
/** Finds a long-distance travel anchor, or returns empty optional if unsuccessful. */
public Optional<BlockCoord> findTravelDestination(EntityPlayer player, TravelSource source) {
double maxDistance = source.getMaxDistanceTravelled();
double maxMessageDistance = 1.25 * maxDistance;
// Find possible destinations within about 5 degrees.
RowSortedTable<Double, Double, BlockCoord> possibleDestinations = findBlocksWithinAngle(
player,
travelDestinations.get(player.worldObj.provider.dimensionId),
0.087,
maxMessageDistance);
for (Table.Cell<Double, Double, BlockCoord> cell : possibleDestinations.cellSet()) {
if (cell.getColumnKey() <= maxDistance) {
return Optional.of(cell.getValue());
}
}
if (!possibleDestinations.isEmpty()) {
// We found at least one block within maxMessageDistance, but no blocks within maxDistance.
showMessage(player, new ChatComponentTranslation("enderio.blockTravelPlatform.outOfRange"));
}
return Optional.empty();
}
private boolean isBlackListedBlock(EntityPlayer player, MovingObjectPosition pos, Block hitBlock) {
UniqueIdentifier ui = GameRegistry.findUniqueIdentifierFor(hitBlock);
if (ui == null) {
@@ -529,9 +625,9 @@ public class TravelController {
return getTravelItemTravelSource(ep, checkInventoryAndBaubles) != null;
}
/** Currently, we only hide travel targets for the teleport staff, in certain action modes. */
public boolean shouldHideTargets(EntityPlayer ep) {
if (getTravelItemTravelSource(ep, false) != TravelSource.TELEPORT_STAFF) {
if (getTravelItemTravelSource(ep, false) != TravelSource.TELEPORT_STAFF
|| Config.teleportStaffOriginalControls) {
return false;
}
@@ -638,106 +734,6 @@ public class TravelController {
return travelItemSlot;
}
/** Finds the destination for the teleport staff super-teleport, or returns empty optional if unsuccessful. */
public Optional<BlockCoord> findTeleportDestination(EntityPlayer player) {
TravelSource source = TravelSource.TELEPORT_STAFF_BLINK;
Vector3d eye = Util.getEyePositionEio(player);
Vector3d look = Util.getLookVecEio(player);
double playerHeight = player.yOffset;
// +2 to compensate for the standard distance decrement of -2
double teleDistance = Config.teleportStaffFailedBlinkDistance + 2;
Vec3 eye3 = Vec3.createVectorHelper(eye.x, eye.y, eye.z);
// rayTraceBlocks has a limit of 200 distance.
double maxDistance = Config.teleportStaffMaxBlinkDistance;
double currDistance = 0;
Vec3 pos = eye3;
boolean loop = true;
while (loop) {
double distance = 200;
if (maxDistance - currDistance < 200) {
distance = maxDistance - currDistance;
loop = false;
}
Vector3d sample = new Vector3d(look);
sample.scale(distance);
sample.add(eye);
Vec3 end = Vec3.createVectorHelper(sample.x, sample.y, sample.z);
MovingObjectPosition p = player.worldObj
.rayTraceBlocks(pos, end, !Config.travelStaffBlinkThroughClearBlocksEnabled);
if (p != null) {
teleDistance = VecmathUtil.distance(eye, new Vector3d(p.blockX + 0.5, p.blockY + 0.5, p.blockZ + 0.5));
break;
}
pos = end;
currDistance += distance;
}
Vector3d sample = new Vector3d(look);
sample.scale(Config.teleportStaffMaxBlinkDistance);
sample.add(eye);
Vec3 end = Vec3.createVectorHelper(sample.x, sample.y, sample.z);
MovingObjectPosition p = player.worldObj
.rayTraceBlocks(eye3, end, !Config.travelStaffBlinkThroughClearBlocksEnabled);
if (p != null) {
teleDistance = VecmathUtil.distance(eye, new Vector3d(p.blockX + 0.5, p.blockY + 0.5, p.blockZ + 0.5));
}
double distanceIncrement = -2;
int maxIter = Math.min(8, (int) teleDistance / 2);
// Special case: if the targeted block is too close, we'll try to teleport through it.
if (teleDistance < 4) {
distanceIncrement = 0.5;
maxIter = 32;
}
for (int i = 0; i < maxIter; i++) {
teleDistance += distanceIncrement;
sample.set(look);
sample.scale(teleDistance);
sample.add(eye);
// we test against our feets location
sample.y -= playerHeight;
Optional<BlockCoord> destinationOptional = findNearbyDestination(player, source, sample);
if (destinationOptional.isPresent()) {
return destinationOptional;
}
}
return Optional.empty();
}
/** Finds a long-distance travel anchor, or returns empty optional if unsuccessful. */
public Optional<BlockCoord> findTravelDestination(EntityPlayer player, TravelSource source) {
double maxDistance = source.getMaxDistanceTravelled();
double maxMessageDistance = 1.25 * maxDistance;
// Find possible destinations within about 5 degrees.
RowSortedTable<Double, Double, BlockCoord> possibleDestinations = findBlocksWithinAngle(
player,
travelDestinations.get(player.worldObj.provider.dimensionId),
0.087,
maxMessageDistance);
for (Table.Cell<Double, Double, BlockCoord> cell : possibleDestinations.cellSet()) {
if (cell.getColumnKey() <= maxDistance) {
return Optional.of(cell.getValue());
}
}
if (!possibleDestinations.isEmpty()) {
// We found at least one block within maxMessageDistance, but no blocks within maxDistance.
showMessage(player, new ChatComponentTranslation("enderio.blockTravelPlatform.outOfRange"));
}
return Optional.empty();
}
/** Finds a valid destination near the provided vector, or returns empty optional if unsuccessful. */
private Optional<BlockCoord> findNearbyDestination(EntityPlayer player, TravelSource source, Vector3d sample) {
Optional<BlockCoord> destinationOptional = findValidDestination(
@@ -1193,15 +1189,19 @@ public class TravelController {
}
public static void showMessage(EntityPlayer player, IChatComponent chatComponent) {
if (player instanceof EntityPlayerMP) {
chatComponent.setChatStyle(new ChatStyle().setColor(EnumChatFormatting.WHITE));
GTNHLib.proxy.sendMessageAboveHotbar((EntityPlayerMP) player, chatComponent, 60, true, true);
if (Loader.isModLoaded("gtnhlib")) {
if (player instanceof EntityPlayerMP) {
chatComponent.setChatStyle(new ChatStyle().setColor(EnumChatFormatting.WHITE));
GTNHLib.proxy.sendMessageAboveHotbar((EntityPlayerMP) player, chatComponent, 60, true, true);
} else {
GTNHLib.proxy.printMessageAboveHotbar(
EnumChatFormatting.WHITE + chatComponent.getFormattedText(),
60,
true,
true);
}
} else {
GTNHLib.proxy.printMessageAboveHotbar(
EnumChatFormatting.WHITE + chatComponent.getFormattedText(),
60,
true,
true);
player.addChatComponentMessage(chatComponent);
}
}
}
@@ -337,9 +337,6 @@ public class TileTravelAnchor extends TileEntityEio implements ITravelAccessable
public void validate() {
super.validate();
if (isTravelSource()) {
// Note: travelDestinations is a SetMultimap, which does not allow duplicate entries.
// So it's okay if this gets called multiple times with the same BlockCoord.
// Though, I think that it's not currently getting called multiple times, anyway.
TravelController.instance.travelDestinations.put(worldObj.provider.dimensionId, getLocation());
}
}
@@ -19,7 +19,6 @@ item.enderio.itemEnderface.name=Enderface
#Conduits
enderio.blockConduitBundle=Conduit Bundle
tile.blockConduitFacade.name=Conduit Facade
enderio.blockConduitFacade=Conduit Facade
item.enderio.itemConduitFacade.name=Conduit Facade
item.enderio.itemConduitFacade.hardened.name=Hardened Conduit Facade
@@ -30,12 +29,10 @@ item.enderio.itemConduitFacade.tooltip.detailed.line3=Hidden when a wrench or co
item.enderio.itemConduitFacade.tooltip.detailed.line4=is equipped
item.enderio.itemConduitFacade.hardened.tooltip=Hardened: Resists breaking and explosions
item.itemPowerConduit.name=Energy Conduit
enderio.itemPowerConduit.name=Energy Conduit
enderio.itemPowerConduitEnhanced.name=Enhanced Energy Conduit
enderio.itemPowerConduitEnder.name=Ender Energy Conduit
item.itemPowerConduitEndergy.name=Energy Conduit
enderio.itemPowerConduitEndergyCrude.name=Clay Compound Energy Conduit
enderio.itemPowerConduitEndergyIron.name=Iron Energy Conduit
enderio.itemPowerConduitEndergyAluminum.name=Aluminum Energy Conduit
@@ -49,12 +46,10 @@ enderio.itemPowerConduitEndergyCrystallinePinkSlime.name=Crystalline Pink Slime
enderio.itemPowerConduitEndergyMelodic.name=Melodic Energy Conduit
enderio.itemPowerConduitEndergyStellar.name=Stellar Energy Conduit
item.itemRedstoneConduit.name=Redstone Conduit
enderio.itemRedstoneConduit.name=Redstone Conduit
enderio.itemRedstoneConduitSwitch.name=Conduit Switch
enderio.itemRedstoneConduitInsulated.name=Insulated Redstone Conduit
item.itemLiquidConduit.name=Fluid Conduit
enderio.itemLiquidConduit.name=Fluid Conduit
enderio.itemLiquidConduitAdvanced.name=Pressurized Fluid Conduit
enderio.itemLiquidConduitEnder.name=Ender Fluid Conduit
@@ -76,13 +71,10 @@ enderio.itemLiquidConduitEnder.tooltip.detailed.line1=Instant fluid teleportatio
enderio.itemLiquidConduitEnder.tooltip.detailed.line2=allows multiple fluids to be
enderio.itemLiquidConduitEnder.tooltip.detailed.line3=transported on the same line
item.itemItemConduit.name=Item Conduit
enderio.itemItemConduit.name=Item Conduit
item.itemBasicFilterUpgrade.name=Item Filter
enderio.filterUpgradeBasic.name=Basic Item Filter
enderio.filterUpgradeAdvanced.name=Advanced Item Filter
item.itemBigFilterUpgrade.name=Big Item Filter
enderio.filterUpgradeBig.name=Big Item Filter
enderio.filterUpgradeBigAdvanced.name=Big Advanced Item Filter
enderio.itemConduitFilterUpgrade=Upgrade for item conduits
@@ -127,7 +119,6 @@ item.itemExtractSpeedDowngrade.tooltip.basic.line1=Downgrade for item conduits
item.itemExtractSpeedDowngrade.tooltip.detailed.line1=Reduces speed to 1
item.itemExtractSpeedDowngrade.tooltip.detailed.line2=item per extraction
item.itemFunctionUpgrade.name=Remote Awareness Upgrade
item.itemInventoryPanelUpgrade.name=Remote Awareness Upgrade
item.itemInventoryPanelUpgrade.tooltip.basic.line1=Inventory Panel Remote Awareness
item.itemInventoryPanelUpgrade.tooltip.detailed.line1=Function upgrade for item conduits
@@ -143,13 +134,11 @@ enderio.itemGasConduit.tooltip.maxExtract=Max Extract:
enderio.itemGasConduit.tooltip.maxIo=Max IO:
enderio.itemGasConduit.tooltip.detailed.line1=Transfers Mekanism-compatible gases
item.itemMEConduit.name=ME Conduit
enderio.itemMEConduit.name=ME Conduit
enderio.itemMEConduitDense.name=Dense ME Conduit
enderio.itemMEConduitDenseUltra.name=Ultra Dense ME Conduit
enderio.itemMEConduit.channelsUsed={0,number} of {1,number} Channels
item.itemOCConduit.name=Network Conduit (OC)
enderio.itemOCConduit.name=Network Conduit (OC)
#Entity
@@ -157,12 +146,11 @@ entity.witherSkeleton.name=Wither Skeleton
#Materials
enderio.itemMaterial.name=Materials
item.itemMaterial.name=Materials
enderio.silicon.name=Silicon
enderio.conduitBinder.name=Conduit Binder
enderio.binderComposite.name=Binder Composite
enderio.phasedIronNugget.name=Pulsating Iron Nugget
tile.blockDarkIronBars.name=Dark Steel Bars
tile.blockDarkIronBars.name=Dark Iron Bars
tile.blockSoulariumBars.name=Soularium Bars
tile.blockEndSteelBars.name=End Steel Bars
tile.blockEndermanSkull.name=Enderman Skull
@@ -234,7 +222,6 @@ enderio.gas.gasTick=Gas/t
#Materials
enderio.itemMachinePart.name=Machine Parts
item.itemMachinePart.name=Machine Parts
enderio.machineChassi.name=Machine Chassis
enderio.basicGear.name=Basic Gear
enderio.soulMachineChassi.name=Soul Machine Chassis
@@ -245,7 +232,6 @@ enderio.enderCrystal.name=Ender Crystal
enderio.attractorCrystal.name=Enticing Crystal
enderio.weatherCrystal.name=Weather Crystal
item.itemGrindingBall.name=Grinding Ball
enderio.darkGrindingBall.name=Dark Steel Ball
enderio.electricalGrindingBall.name=Electrical Steel Ball
enderio.energeticGrindingBall.name=Energetic Alloy Ball
@@ -279,7 +265,6 @@ enderio.itemPowderIngot=Powders & Ingots
#Alloys
enderio.itemAlloy.name=Alloy
item.itemAlloy.name=Alloy
enderio.electricalSteel.name=Electrical Steel
enderio.energeticAlloy.name=Energetic Alloy
enderio.phasedGold.name=Vibrant Alloy
@@ -292,7 +277,6 @@ enderio.soularium.name=Soularium
enderio.endSteel.name=End Steel
enderio.endSteelNugget.name=End Steel Nugget
item.itemAlloyEndergy.name=Alloy
enderio.crudeSteel.name=Clay Compound
enderio.crystallineAlloy.name=Crystalline Alloy
enderio.melodicAlloy.name=Melodic Alloy
@@ -301,7 +285,6 @@ enderio.crystallinePinkSlime.name=Crystalline Pink Slime
enderio.energeticSilver.name=Energetic Silver
enderio.vividAlloy.name=Vivid Alloy
item.itemGrindingBallEndergy.name=Grinding Ball
enderio.crudeSteelGrindingBall.name=Clay Compound Grinding Ball
enderio.crystallineAlloyGrindingBall.name=Crystalline Alloy Grinding Ball
enderio.melodicAlloyGrindingBall.name=Melodic Alloy Grinding Ball
@@ -340,7 +323,6 @@ tile.enderio.darkSteel.name=Dark Steel Block
tile.enderio.soularium.name=Soularium Block
tile.enderio.endSteel.name=End Steel Block
tile.blockIngotStorageEndergy.name=Alloy Block
tile.enderio.crudeSteel.name=Clay Compound Block
tile.enderio.crystallineAlloy.name=Crystalline Alloy Block
tile.enderio.melodicAlloy.name=Melodic Alloy Block
@@ -350,7 +332,6 @@ tile.enderio.energeticSilver.name=Energetic Silver Block
tile.enderio.vividAlloy.name=Vivid Alloy Block
#Powder / Ingot
item.itemPowderIngot.name=Powder
enderio.powderCoal.name=Coal Powder
enderio.powderIron.name=Iron Powder
enderio.powderGold.name=Gold Powder
@@ -362,7 +343,6 @@ enderio.ingotEnderiumBase.name=Enderium Base
#Capacitors
enderio.itemBasicCapacitor.name=Capacitor
item.itemBasicCapacitor.name=Capacitor
enderio.basicCapacitor.name=Basic Capacitor
enderio.activatedCapacitor.name=Double-Layer Capacitor
enderio.enderCapacitor.name=Octadic Capacitor
@@ -411,7 +391,6 @@ enderio.maxSolorProduction=Max Output
enderio.tooltip.efficiency=Efficiency
enderio.tooltip.sunlightBlocked=Sky Blocked!
tile.blockElectricLight.name=Powered Light
item.itemElectricLight.name=Powered Light
item.itemElectricLight.tooltip.detailed.line1=Lights a large area when supplied with
item.itemElectricLight.tooltip.detailed.line2=power and a redstone signal.
@@ -429,8 +408,6 @@ item.itemLightInverted.name=Light (Inverted)
item.itemLightInverted.tooltip.detailed.line1=Emits light, disable with
item.itemLightInverted.tooltip.detailed.line2=a redstone signal.
tile.blockLightNode.name=Light Node
item.itemWirelessLight.name=Wireless Powered Light
item.itemWirelessLight.tooltip.detailed.line1=Lights a large area when supplied with
item.itemWirelessLight.tooltip.detailed.line2=power and a redstone signal.
@@ -448,7 +425,6 @@ tile.blockCapacitorBank.tooltip.detailed.line1=Convert to new block by placing
tile.blockCapacitorBank.tooltip.detailed.line2=in a crafting grid
tile.blockCapacitorBank.tooltipPrefix=Contains
tile.blockCapBank.name=Capacitor Bank
tile.blockCapBank.creative.name=Creative Capacitor Bank
tile.blockCapBank.simple.name=Basic Capacitor Bank
tile.blockCapBank.activated.name=Capacitor Bank
@@ -646,7 +622,6 @@ tile.blockWeatherObelisk.tooltip.detailed.line1=Changes the current weather
tile.blockWeatherObelisk.tooltip.detailed.line2=Requires a lot of power and
tile.blockWeatherObelisk.tooltip.detailed.line3=a catalyst item
tile.blockBuffer.name=Buffer
tile.blockBuffer.item.name=Item Buffer
tile.blockBuffer.power.name=Power Buffer
tile.blockBuffer.omni.name=Omni Buffer
@@ -721,7 +696,6 @@ tile.blockDarkSteelPressurePlate.silent.tooltip.detailed.line2=Can be painted in
tile.blockDarkSteelPressurePlate.silent.tooltip.detailed.line3=invisible when painted with Quite
tile.blockDarkSteelPressurePlate.silent.tooltip.detailed.line4=Clear Glass
tile.blockDarkSteelAnvil.name=Dark Steel Anvil
tile.blockDarkSteelAnvil.intact.name=Dark Steel Anvil
tile.blockDarkSteelAnvil.slightlyDamaged.name=Slightly Damaged Dark Steel Anvil
tile.blockDarkSteelAnvil.veryDamaged.name=Very Damaged Dark Steel Anvil
@@ -785,7 +759,6 @@ tile.blockPaintedFenceGate.name=Painted Gate
tile.blockPaintedWall.name=Painted Wall
tile.blockPaintedStair.name=Painted Stairs
tile.blockPaintedSlab.name=Painted Slab
tile.blockPaintedSlabDouble.name=Painted Slab
tile.blockPaintedDoubleSlab.name=Painted Slab
tile.blockPaintedGlowstone.name=Painted Glowstone
tile.blockPaintedCarpet.name=Painted Carpet
@@ -837,7 +810,6 @@ item.itemXpTransfer.tooltip.detailed.line2=liquid XP to gain levels
item.itemXpTransfer.tooltip.detailed.line3=Shift-R-Click to transfer levels to
item.itemXpTransfer.tooltip.detailed.line4=the tank
item.itemFrankenSkull.name=Zombie Electrode
skullZombieElectrode.name=Zombie Electrode
skullZombieController.name=Z-Logic Controller
skullZombieFrankenstien.name=Frank'N'Zombie