Compare commits

...
80 Commits
Author SHA1 Message Date
Worive ffe4296ef6 Improve NetworkedInventory robustness (#210) 2025-12-10 09:27:33 +01:00
Alexdoru 5083fb2a60 Delete brute forcing of items to generate Thaumcraft aspects (#213) 2025-11-30 07:45:12 +01:00
Alexdoru 05ee12955d Fix World leak in ConduitNetworkTickHandler (#211) 2025-11-22 00:56:09 +01:00
Martin Robertz a7acc7e224 update 2025-10-19 20:30:47 +02:00
Martin Robertz a59bb21e59 update 2025-10-12 20:30:55 +02:00
chochem 5b6c13ff0a Dont register several duplicate items in case of GTNH (#209) 2025-10-12 01:14:36 +01:00
Martin Robertz 6f8b6e2a9c update 2025-10-04 14:26:40 +02:00
TheYoingLadandMartin Robertz 479c8328b4 Added the ability for the farming station to plant Pam's nether seeds (#208)
Co-authored-by: Martin Robertz <[email protected]>
2025-10-04 12:24:54 +00:00
Wilhelm Schuster 0c23f4937d Handle mouse button keybinds (#204) 2025-09-25 19:55:57 +02:00
Wilhelm Schusterandgithub-actions[bot] cde2e4fa60 Fix crash when breaking Painted Glowstone placed by Better Builders Wand (#206)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2025-09-25 19:35:30 +02:00
Ranzu abbb6dc151 Update bauble slot background in capacitor ui (#203) 2025-09-25 15:20:59 +02:00
Martin Robertz b3def82cde update 2025-09-24 16:49:42 +02:00
EmperorSuper 8b4e7f7ec3 Cap the length of the baubles inventory (#202) 2025-09-24 11:10:22 +02:00
Alexdoru d69d77ecae fix NPE in BlockConduitBundle#onPlaySound (#201) 2025-07-25 08:21:32 +07:00
Dream Master a233f6ba30 update 2025-07-18 09:47:57 +07:00
boubou19andAlexdoru 581150178f Speed up forge event registration (#200)
Co-authored-by: Alexdoru <[email protected]>
2025-07-17 22:37:03 +00:00
Dream Master 313a243bf5 update 2025-07-17 22:29:13 +07:00
Dream Master d5f1008b08 update 2025-07-17 22:28:51 +07:00
koolkrafter5 e1e1f06dc6 Break Dependency Chain (#199) 2025-07-17 02:40:36 +00:00
Martin Robertz aad9c092b1 update 2025-06-12 23:33:37 +02:00
slprime f8c56939cd Update NEI Handlers (#198) 2025-06-12 23:32:01 +02:00
Martin Robertz e2e22d6103 update 2025-05-26 19:22:34 +02:00
dibbydoda a798d2146d Remove deprecated CapacitorBank (#197) 2025-05-26 07:38:39 -04:00
Martin Robertz e829c4168b update 2025-05-23 23:46:07 +02:00
dibbydoda b1f8d99da9 Comparator refactor and Vacuum Chest logic (#196)
Add comparator logic to the Vacuum Chest and refactor comparator logic for Capacitor Banks and Tanks
2025-05-20 04:24:45 -04:00
Maya 304fdef5ec update 2025-05-18 10:35:07 -05:00
glowredman 1f05312ded Small Cleanup (#195) 2025-05-18 10:34:59 -05:00
Maya eb88b1cfe0 update 2025-05-06 17:46:36 -05:00
glowredmanandMaya d4256bda6e Make Fused Quartz blast resistance configurable (#194)
Co-authored-by: Maya <[email protected]>
2025-05-06 17:45:43 -05:00
bda8902709 Feature: Automatable weather obelisk (#193)
Co-authored-by: Martin Robertz <[email protected]>
Co-authored-by: koolkrafter5 <[email protected]>
2025-05-04 19:38:08 -04:00
Maya 63971381cc update 2025-04-24 17:20:42 -05:00
__felix__and__felix__ 09238b09ef Change hazmat Optional decorators' modid from gregtech to gregtech_nh to add gt6 compat (#191)
Co-authored-by: __felix__ <134875831+48a3efa65c881ef567345b17f3910e06@users.noreply.github.com>
2025-04-24 17:19:59 -05:00
Maya 32556e078e update 2025-04-08 16:28:20 -05:00
Niclas Klugmann ace514f628 Move End Steel/ Stellar Armor to GT Hazard API (#189) 2025-04-08 16:27:01 -05:00
Niclas Klugmann 0102b89c33 fix trackman's goggles config (#188) 2025-03-22 14:45:52 +00:00
Maya b65afde754 fix dependencies 2025-03-22 09:01:45 -05:00
Maya 4a0a427186 update 2025-03-22 08:55:17 -05:00
Niclas KlugmannandMaya e04e2e3411 Add trackman's goggles upgrade support to the Dark Helm (#186)
Co-authored-by: Maya <[email protected]>
2025-03-22 08:54:08 -05:00
Niclas Klugmann 316db4bd77 Fix naturalist's eyes (#187) 2025-03-22 08:32:29 -05:00
Maya f43936c29a update 2025-02-14 11:57:41 -06:00
Maya c6471ed6b0 Mark EnderCore as a required dependency (#185) 2025-02-14 17:57:27 +00:00
Maya 654b95da1a update 2025-02-03 15:05:58 -06:00
Dioxop d70263f3af Adding "show range" button to multiple machines (#184) 2025-02-03 15:04:20 -06:00
Martin Robertz c10f74486b update 2024-12-31 14:36:18 +01:00
glowredman c7db2c4840 Add Localizations (#183) 2024-12-30 17:44:29 -06:00
Martin Robertz 948a021f3e update 2024-12-29 18:01:20 +01:00
Simon Zünd 346bbf4e53 Remove left-over code and textures for ultra dense ME conduits (#182) 2024-12-29 16:25:03 +00:00
Martin Robertz 5769ebe3cb update 2024-12-22 01:21:47 +01:00
Pascal 4558f194be ensure TileLightNode instance at breakBlock (#181) 2024-12-21 10:31:30 -06:00
Martin Robertz e12142890e update 2024-11-16 15:28:59 +01:00
Kogepan229andboubou19 e6ebb5dfec Fix Zombie Generator NPE (#180)
Co-authored-by: boubou19 <[email protected]>
2024-11-14 19:22:20 +00:00
54M44R 1d4f6831dd Prevent Silver Capacitor from being used as Upgrade (#178) 2024-11-14 13:32:38 +00:00
Dream Master 726ce46475 update 2024-11-12 12:15:49 +01:00
Noc d01de95e8e removed conduit subtype (#179) 2024-11-12 08:35:28 +01:00
Martin Robertz b15d357f1a update 2024-10-21 21:56:28 +02:00
Darren Eberly 0fbf6f05ba No more TESR on conduits (#176)
* Goodbye TESR, Hello ISBRH

* More fluid conduit rendering work

* more stuff

* spotless

* Add empty check to fluid conduit renderer
2024-10-21 20:08:58 +02:00
Martin Robertz bf9c2cd2c7 update 2024-10-02 15:16:09 +02:00
chochem 51b4c4e74c dont double apply oredicts (#175) 2024-10-01 20:16:52 +01:00
Dream Master cf6b678dd9 update 2024-07-15 23:45:30 +07:00
Under 6c205150b1 Travel Staff Blink Keybind fixes. (#163)
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-07-15 23:43:39 +07:00
Zoltán Szepesi e39a1e1eb6 Fix LiquidConduit not attempting to pull fluids from all directions if one of external tanks are empty (#174) 2024-07-15 19:09:16 +07:00
glowredman 4a94c1ba90 Remove isModLoaded check for GTNH Lib (#172) 2024-07-11 08:44:35 -05:00
Jason Mitchell 0fc382dd13 Update dependencies.gradle (#170)
Fix server test
2024-07-11 03:31:46 -05:00
Jason Mitchell 04964e15e4 hard dep on gtnhlib 2024-07-10 14:09:43 -07:00
Jason Mitchell 085ccc9d21 Try a CasList, since the Collections.synchronizedList actually needed the reads to be synchronized... 2024-07-10 13:40:46 -07:00
Dream Master 1903589e29 update 2024-07-08 13:26:52 +07:00
Ethryan 46971bbe0e Rename Dark Iron Bars to Dark Steel (#167) 2024-07-05 13:20:31 +07:00
Martin Robertz 4ccecf7bc0 update 2024-07-02 23:50:19 +02:00
Jason Mitchell 92fb58f0c6 Work around CME
* Not entirely sure why it's being concurrently modified.. so let's just make it safe for now
2024-06-30 14:15:24 -07:00
Martin Robertz 54c6db0afc update 2024-06-05 22:49:08 +02:00
OvermindDL1 84d9dcaf00 Fix another thread data race issue introduced in #164. 2024-06-04 21:53:01 -07:00
Jason Mitchell af923d1977 Probably less thread unsafe. (#164) 2024-06-04 18:53:14 -07:00
Martin Robertz efb918fc6d update 2024-06-02 23:05:27 +02:00
6447ffb4d5 Tweaks to EnderIO travel + teleportation (#158)
* Tweak teleport staff controls

* Fix comment

* Fix logic

* spotlessApply (#159)

Co-authored-by: GitHub GTNH Actions <>

* Add configs for teleport staff actions

* 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

* Add server-side handling for two-in-one teleport action

* Clear stored anchors on world load

* Check for obstructed anchor on long-distance teleport

* Check anchor accessibility and require `player != null`

* Handle server-side `travelToLocation`

* Limit backwards teleport check

* 2-in-1 TP: find destination client-side

* spotlessApply (#161)

Co-authored-by: GitHub GTNH Actions <>

* Don't conserve momentum

* Address review comments

* Refactor packet instantiation

---------

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2024-06-02 17:20:23 +02:00
Martin Robertz fb4c9bde59 update 2024-05-09 10:02:46 +02:00
Oleg Ivanov bd47a39c83 Add config entries for Farming Station particles (#162)
* Decrease number of Farming Station particles

* Set default values for range & number of particles to original
2024-05-08 20:48:35 +02:00
Martin Robertz 43d74c9a7a update 2024-04-24 21:47:04 +02:00
PT400C Jomcraft 6d3a631bb0 Improve FarmingStation portal texture rendering (#157) 2024-04-24 21:26:51 +02:00
Martin Robertz ccdef03296 update 2024-04-18 20:42:39 +02:00
Drathonix 56e163c234 Conduit Replacement Retains Connection Data (#160)
* Replacing Conduits Now maintains all Connection Settings

* Only write/read connection nbt.

* Use Correct Connectionset
2024-04-18 10:24:59 +02:00
288 changed files with 2571 additions and 5029 deletions

No files matched your search

+1
View File
@@ -27,3 +27,4 @@ whitelist.json
*.iws
src/main/resources/mixins.*.json
*.bat
layout.json
+17 -14
View File
@@ -1,22 +1,24 @@
// Add your dependencies here
dependencies {
api('com.github.GTNewHorizons:EnderCore:0.4.5:dev') {transitive = false}
compileOnly('com.github.GTNewHorizons:ForestryMC:4.8.4:dev')
compileOnly('com.github.GTNewHorizons:NotEnoughItems:2.5.21-GTNH:dev')
compileOnly("com.github.GTNewHorizons:GTNHLib:0.2.9:dev")
compileOnly('com.github.GTNewHorizons:BuildCraft:7.1.39:dev')
api('com.github.GTNewHorizons:EnderCore:0.5.0:dev') {transitive = false}
compileOnly('com.github.GTNewHorizons:ForestryMC:4.10.17:dev')
compileOnly('com.github.GTNewHorizons:NotEnoughItems:2.8.19-GTNH:dev')
api("com.github.GTNewHorizons:GTNHLib:0.7.0:dev")
compileOnly('com.github.GTNewHorizons:BuildCraft:7.1.45: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')
api("com.github.GTNewHorizons:TinkersConstruct:1.14.6-GTNH:dev")
compileOnly('com.github.GTNewHorizons:waila:1.7.1:api') {transitive = false}
compileOnly('com.github.GTNewHorizons:Applied-Energistics-2-Unofficial:rv3-beta-328-GTNH:api') {transitive = false}
compileOnly('com.github.GTNewHorizons:Baubles:1.0.4:dev') {transitive = false}
compileOnly('com.github.GTNewHorizons:GT5-Unofficial:5.09.45.79:dev') {transitive = false}
compileOnly('com.github.GTNewHorizons:Railcraft:9.15.5:api') {transitive = false}
compileOnly('com.github.GTNewHorizons:StorageDrawers:1.13.3-GTNH:api') {transitive = false}
compileOnly('com.github.GTNewHorizons:Chisel:2.14.1-GTNH:dev') {transitive = false}
compileOnly('com.github.GTNewHorizons:OpenComputers:1.10.6-GTNH:api') {transitive = false}
compileOnly('com.github.GTNewHorizons:waila:1.9.2:api') {transitive = false}
compileOnly('com.github.GTNewHorizons:Applied-Energistics-2-Unofficial:rv3-beta-717-GTNH:api') {transitive = false}
compileOnly('com.github.GTNewHorizons:Baubles-Expanded:2.2.1-GTNH:dev') {transitive = false}
compileOnly('com.github.GTNewHorizons:GT5-Unofficial:5.09.52.60:dev') {transitive = false}
compileOnly("com.github.GTNewHorizons:ModularUI2:2.3.4-1.7.10:dev") {transitive = false}
compileOnly('com.github.GTNewHorizons:Railcraft:9.17.0:dev') {transitive = false}
compileOnly('com.github.GTNewHorizons:StorageDrawers:2.2.0-GTNH:api') {transitive = false}
compileOnly('com.github.GTNewHorizons:Chisel:2.17.0-GTNH:dev') {transitive = false}
compileOnly('com.github.GTNewHorizons:OpenComputers:1.12.2-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 +26,6 @@ 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-alpha30:api') {transitive = false}
compileOnlyApi('com.github.GTNewHorizons:Angelica:1.0.0-beta62:api') {transitive = false}
compileOnly("com.github.GTNewHorizons:Hodgepodge:2.7.3:dev")
}
+17 -6
View File
@@ -14,7 +14,7 @@ modId = EnderIO
modGroup = crazypants.enderio
# Whether to use modGroup as the maven publishing group.
# Due to a history of using JitPack, the default is com.github.GTNewHorizons for all mods.
# When false, com.github.GTNewHorizons is used.
useModGroupForPublishing = false
# Updates your build.gradle and settings.gradle automatically whenever an update is available.
@@ -41,11 +41,11 @@ developmentEnvironmentUserName = Developer
# Enables using modern Java syntax (up to version 17) via Jabel, while still targeting JVM 8.
# See https://github.com/bsideup/jabel for details on how this works.
enableModernJavaSyntax = false
enableModernJavaSyntax = true
# Enables injecting missing generics into the decompiled source code for a better coding experience.
# Turns most publicly visible List, Map, etc. into proper List<E>, Map<K, V> types.
enableGenericInjection = false
enableGenericInjection = true
# Generate a class with a String field for the mod version named as defined below.
# If generateGradleTokenClass is empty or not missing, no such class will be generated.
@@ -80,11 +80,16 @@ apiPackage = api
# Specify the configuration file for Forge's access transformers here. It must be placed into /src/main/resources/META-INF/
# There can be multiple files in a space-separated list.
# Example value: mymodid_at.cfg nei_at.cfg
accessTransformersFile =
accessTransformersFile = enderio_at.cfg
# 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
@@ -117,9 +122,15 @@ minimizeShadowedDependencies = true
# If disabled, won't rename the shadowed classes.
relocateShadowedDependencies = true
# Adds the GTNH maven, CurseMaven, IC2/Player maven, and some more well-known 1.7.10 repositories.
# Adds 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.
@@ -140,7 +151,7 @@ modrinthProjectId =
# type can be one of [project, version],
# and the name is the Modrinth project or version slug/id of the other mod.
# Example: required-project:fplib;optional-project:gasstation;incompatible-project:gregtech
# Note: GTNH Mixins is automatically set as a required dependency if usesMixins = true
# Note: UniMixins is automatically set as a required dependency if usesMixins = true.
modrinthRelations =
# Publishing to CurseForge requires you to set the CURSEFORGE_TOKEN environment variable to one of your CurseForge API tokens.
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.6-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
Vendored
+5 -3
View File
@@ -15,6 +15,8 @@
# See the License for the specific language governing permissions and
# limitations under the License.
#
# SPDX-License-Identifier: Apache-2.0
#
##############################################################################
#
@@ -55,7 +57,7 @@
# Darwin, MinGW, and NonStop.
#
# (3) This script is generated from the Groovy template
# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
# within the Gradle project.
#
# You can find Gradle at https://github.com/gradle/gradle/.
@@ -84,7 +86,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 "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit
APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD=maximum
@@ -203,7 +205,7 @@ fi
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
# Collect all arguments for the java command:
# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,
# * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,
# and any embedded shellness will be escaped.
# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be
# treated as '${Hostname}' itself on the command line.
Vendored
+2
View File
@@ -13,6 +13,8 @@
@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.14'
id 'com.gtnewhorizons.gtnhsettingsconvention' version '1.0.44'
}
@@ -27,7 +27,6 @@ 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;
@@ -104,11 +103,8 @@ import crazypants.enderio.machine.painter.BlockPaintedFenceGateRenderer;
import crazypants.enderio.machine.painter.BlockPaintedGlowstone;
import crazypants.enderio.machine.painter.PaintedBlockRenderer;
import crazypants.enderio.machine.painter.PaintedItemRenderer;
import crazypants.enderio.machine.power.BlockCapacitorBank;
import crazypants.enderio.machine.power.CapBankRenderer2;
import crazypants.enderio.machine.power.CapacitorBankRenderer;
import crazypants.enderio.machine.ranged.RangeEntity;
import crazypants.enderio.machine.ranged.RangeRenerer;
import crazypants.enderio.machine.ranged.RangeRenderer;
import crazypants.enderio.machine.reservoir.ReservoirRenderer;
import crazypants.enderio.machine.reservoir.TileReservoir;
import crazypants.enderio.machine.solar.BlockSolarPanel;
@@ -322,13 +318,6 @@ public class ClientProxy extends CommonProxy {
ClientRegistry.bindTileEntitySpecialRenderer(TileCapBank.class, newCbr);
}
CapacitorBankRenderer capr = new CapacitorBankRenderer();
MinecraftForgeClient.registerItemRenderer(Item.getItemFromBlock(EnderIO.blockCapacitorBank), capr);
BlockCapacitorBank.renderId = RenderingRegistry.getNextAvailableRenderId();
CapBankRenderer2 cbr2 = new CapBankRenderer2();
RenderingRegistry.registerBlockHandler(cbr2);
BlockVacuumChest.renderId = RenderingRegistry.getNextAvailableRenderId();
VacuumChestRenderer vcr = new VacuumChestRenderer();
RenderingRegistry.registerBlockHandler(vcr);
@@ -378,7 +367,6 @@ 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());
@@ -421,7 +409,7 @@ public class ClientProxy extends CommonProxy {
FMLCommonHandler.instance().bus().register(KeyTracker.instance);
RenderingRegistry.registerEntityRenderingHandler(SoundEntity.class, new SoundRenderer());
RenderingRegistry.registerEntityRenderingHandler(RangeEntity.class, new RangeRenerer());
RenderingRegistry.registerEntityRenderingHandler(RangeEntity.class, new RangeRenderer());
MinecraftForge.EVENT_BUS.register(SoundDetector.instance);
FMLCommonHandler.instance().bus().register(SoundDetector.instance);
@@ -9,12 +9,18 @@ import net.minecraft.util.ResourceLocation;
import net.minecraft.world.World;
import cpw.mods.fml.common.FMLCommonHandler;
import cpw.mods.fml.common.event.FMLServerAboutToStartEvent;
import cpw.mods.fml.common.event.FMLServerStartedEvent;
import cpw.mods.fml.common.event.FMLServerStoppedEvent;
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
import cpw.mods.fml.common.gameevent.TickEvent.ClientTickEvent;
import cpw.mods.fml.common.gameevent.TickEvent.Phase;
import cpw.mods.fml.common.gameevent.TickEvent.ServerTickEvent;
import crazypants.enderio.conduit.ConduitNetworkTickHandler;
import crazypants.enderio.conduit.IConduit;
import crazypants.enderio.conduit.render.ConduitRenderer;
import crazypants.enderio.machine.hypercube.HyperCubeRegister;
import crazypants.enderio.machine.transceiver.ServerChannelRegister;
public class CommonProxy {
@@ -23,6 +29,7 @@ public class CommonProxy {
protected long serverTickCount = 0;
protected long clientTickCount = 0;
protected final TickTimer tickTimer = new TickTimer();
public ConduitNetworkTickHandler conduitNetworkTickHandler = null;
public CommonProxy() {}
@@ -44,7 +51,7 @@ public class CommonProxy {
}
public void loadIcons() {
;
}
public void load() {
@@ -76,6 +83,22 @@ public class CommonProxy {
return new ResourceLocation(EnderIO.DOMAIN + TEXTURE_PATH + name + TEXTURE_EXT);
}
public void onServerAboutToStart(FMLServerAboutToStartEvent event) {
conduitNetworkTickHandler = new ConduitNetworkTickHandler();
FMLCommonHandler.instance().bus().register(conduitNetworkTickHandler);
}
public void onServerStarted(FMLServerStartedEvent event) {
HyperCubeRegister.load();
ServerChannelRegister.load();
}
public void onServerStopped(FMLServerStoppedEvent event) {
HyperCubeRegister.unload();
FMLCommonHandler.instance().bus().unregister(conduitNetworkTickHandler);
conduitNetworkTickHandler = null;
}
public final class TickTimer {
@SubscribeEvent
+38 -27
View File
@@ -38,6 +38,7 @@ import cpw.mods.fml.common.event.FMLLoadCompleteEvent;
import cpw.mods.fml.common.event.FMLMissingMappingsEvent;
import cpw.mods.fml.common.event.FMLPostInitializationEvent;
import cpw.mods.fml.common.event.FMLPreInitializationEvent;
import cpw.mods.fml.common.event.FMLServerAboutToStartEvent;
import cpw.mods.fml.common.event.FMLServerStartedEvent;
import cpw.mods.fml.common.event.FMLServerStoppedEvent;
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
@@ -111,7 +112,6 @@ import crazypants.enderio.machine.generator.zombie.BlockZombieGenerator.BlockEnd
import crazypants.enderio.machine.generator.zombie.BlockZombieGenerator.BlockFrankenZombieGenerator;
import crazypants.enderio.machine.generator.zombie.PacketNutrientTank;
import crazypants.enderio.machine.hypercube.BlockHyperCube;
import crazypants.enderio.machine.hypercube.HyperCubeRegister;
import crazypants.enderio.machine.invpanel.BlockInventoryPanel;
import crazypants.enderio.machine.killera.BlockKillerJoe;
import crazypants.enderio.machine.light.BlockElectricLight;
@@ -132,7 +132,6 @@ import crazypants.enderio.machine.painter.BlockPaintedStair;
import crazypants.enderio.machine.painter.BlockPaintedWall;
import crazypants.enderio.machine.painter.BlockPainter;
import crazypants.enderio.machine.painter.PaintSourceValidator;
import crazypants.enderio.machine.power.BlockCapacitorBank;
import crazypants.enderio.machine.ranged.RangeEntity;
import crazypants.enderio.machine.reservoir.BlockReservoir;
import crazypants.enderio.machine.slicensplice.BlockSliceAndSplice;
@@ -182,12 +181,17 @@ import crazypants.enderio.thaumcraft.ThaumcraftCompat;
import crazypants.enderio.tool.EnderIOCrashCallable;
import crazypants.util.EE3Util;
@Mod(
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",
guiFactory = "crazypants.enderio.config.ConfigFactoryEIO")
@Mod(modid = MODID, name = MOD_NAME, version = VERSION, dependencies = """
required-after:CoFHLib@[1.7.10R1.0.3B3,);\
required-after:endercore;\
required-after:gtnhlib@[0.2.10,);\
after:MineFactoryReloaded;\
after:Forestry;\
after:Waila@[1.5.8,);\
after:Thaumcraft;\
after:appliedenergistics2@[rv2-beta-8,);\
after:Railcraft@[9.16.7,)\
""", guiFactory = "crazypants.enderio.config.ConfigFactoryEIO")
public class EnderIO {
public static final String MODID = "EnderIO";
@@ -208,7 +212,8 @@ public class EnderIO {
public static final Lang lang = new Lang("enderio");
public static final boolean hasLwjgl3 = Loader.isModLoaded("lwjgl3ify");
public static final boolean hasGT5 = Loader.isModLoaded("gregtech") && !Loader.isModLoaded("gregapi_post");
public static final boolean hasGT5 = Loader.isModLoaded("gregtech") && !Loader.isModLoaded("gregapi");
public static final boolean hasHP = Loader.isModLoaded("hodgepodge");
// Materials
public static ItemCapacitor itemBasicCapacitor;
@@ -280,7 +285,6 @@ public class EnderIO {
public static BlockSolarPanel blockSolarPanel;
public static BlockReservoir blockReservoir;
public static BlockAlloySmelter blockAlloySmelter;
public static BlockCapacitorBank blockCapacitorBank;
public static BlockCapBank blockCapBank;
public static BlockWirelessCharger blockWirelessCharger;
public static BlockCrusher blockCrusher;
@@ -390,7 +394,6 @@ public class EnderIO {
blockCrusher = BlockCrusher.create();
blockAlloySmelter = BlockAlloySmelter.create();
blockCapacitorBank = BlockCapacitorBank.create();
blockCapBank = BlockCapBank.create();
blockPainter = BlockPainter.create();
@@ -484,7 +487,9 @@ public class EnderIO {
itemGrindingBall = ItemGrindingBall.create();
itemAlloyEndergy = ItemAlloyEndergy.create();
itemGrindingBallEndergy = ItemGrindingBallEndergy.create();
itemPowderIngot = ItemPowderIngot.create();
if (!hasGT5) {
itemPowderIngot = ItemPowderIngot.create();
}
registerFluids();
@@ -724,7 +729,9 @@ public class EnderIO {
SkeletonHandler.registerSkeleton(this);
}
MaterialRecipes.registerDependantOresInDictionary();
if (!hasGT5) {
MaterialRecipes.registerDependantOresInDictionary();
}
EnderfaceRecipes.addRecipes();
MaterialRecipes.addRecipes();
@@ -810,7 +817,6 @@ public class EnderIO {
return Config.xpJuiceName;
}
@SuppressWarnings("unchecked")
private void addModIntegration() {
if (Loader.isModLoaded("TConstruct")) {
@@ -821,6 +827,7 @@ public class EnderIO {
Class<?> modFluxClass = Class.forName("tconstruct.modifiers.tools.ModFlux");
Field batteriesField = modFluxClass.getField("batteries");
@SuppressWarnings("unchecked")
List<ItemStack> batteries = (List<ItemStack>) batteriesField.get(modFluxInst);
batteries.add(new ItemStack(blockCapBank));
Log.info("Registered Capacitor Banks as Tinkers Construct Flux Upgrades");
@@ -887,22 +894,18 @@ public class EnderIO {
}
@EventHandler
public void serverStarted(FMLServerStartedEvent event) {
HyperCubeRegister.load();
ServerChannelRegister.load();
}
@SubscribeEvent
public void worldSaved(WorldEvent.Save event) {
// Only save together with the overworld, because this gets called for every dimension separately
if (event.world.provider != null && event.world.provider.dimensionId == 0) {
ServerChannelRegister.store();
}
public void onServerAboutToStart(FMLServerAboutToStartEvent event) {
proxy.onServerAboutToStart(event);
}
@EventHandler
public void serverStopped(FMLServerStoppedEvent event) {
HyperCubeRegister.unload();
public void onServerStarted(FMLServerStartedEvent event) {
proxy.onServerStarted(event);
}
@EventHandler
public void onServerStopped(FMLServerStoppedEvent event) {
proxy.onServerStopped(event);
}
@EventHandler
@@ -914,4 +917,12 @@ public class EnderIO {
}
}
}
@SubscribeEvent
public void worldSaved(WorldEvent.Save event) {
// Only save together with the overworld, because this gets called for every dimension separately
if (event.world.provider != null && event.world.provider.dimensionId == 0) {
ServerChannelRegister.store();
}
}
}
@@ -55,7 +55,6 @@ public enum ModObject {
blockReservoir,
blockAlloySmelter,
blockSolarPanel,
blockCapacitorBank,
blockCapBank,
blockSagMill,
blockHyperCube,
@@ -148,10 +148,9 @@ public class BlockDarkSteelPressurePlate extends BlockPressurePlate
return super.colorMultiplier(world, x, y, z);
}
@SuppressWarnings({ "unchecked", "rawtypes" })
@Override
@SideOnly(Side.CLIENT)
public void getSubBlocks(Item arg0, CreativeTabs arg1, List items) {
public void getSubBlocks(Item arg0, CreativeTabs arg1, List<ItemStack> items) {
items.add(new ItemStack(this, 1, 0));
items.add(new ItemStack(this, 1, 1));
}
@@ -23,7 +23,6 @@ public class ContainerDarkSteelAnvil extends ContainerRepair {
private final Field _materialCost = ReflectionHelper
.findField(ContainerRepair.class, "materialCost", "stackSizeToBeUsedInRepair", "field_82856_l");
@SuppressWarnings("unchecked")
public ContainerDarkSteelAnvil(InventoryPlayer playerInv, final World world, final int x, final int y, final int z,
EntityPlayer player) {
super(playerInv, world, x, y, z, player);
@@ -7,6 +7,8 @@ import java.util.List;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
import crazypants.enderio.EnderIO;
// I=base type, I is the base class of the implementations accepted by the network
public abstract class AbstractConduitNetwork<T extends IConduit, I extends T> {
@@ -64,7 +66,7 @@ public abstract class AbstractConduitNetwork<T extends IConduit, I extends T> {
public void addConduit(I con) {
if (!conduits.contains(con)) {
if (conduits.isEmpty()) {
ConduitNetworkTickHandler.instance.registerNetwork(this);
EnderIO.proxy.conduitNetworkTickHandler.registerNetwork(this);
}
conduits.add(con);
}
@@ -75,7 +77,7 @@ public abstract class AbstractConduitNetwork<T extends IConduit, I extends T> {
con.setNetwork(null);
}
conduits.clear();
ConduitNetworkTickHandler.instance.unregisterNetwork(this);
EnderIO.proxy.conduitNetworkTickHandler.unregisterNetwork(this);
}
public List<I> getConduits() {
@@ -67,7 +67,6 @@ public abstract class AbstractItemConduit extends Item implements IConduitItem {
if (MicroblocksUtil.supportMicroblocks() && tryAddToMicroblocks(stack, player, world, x, y, z, side)) {
return true;
}
BlockCoord placeAt = Util.canPlaceItem(stack, EnderIO.blockConduitBundle, player, world, x, y, z, side);
if (placeAt != null) {
if (!world.isRemote) {
@@ -84,9 +83,7 @@ public abstract class AbstractItemConduit extends Item implements IConduitItem {
stack.stackSize--;
}
return true;
} else {
ForgeDirection dir = ForgeDirection.values()[side];
int placeX = x + dir.offsetX;
int placeY = y + dir.offsetY;
@@ -116,7 +113,6 @@ public abstract class AbstractItemConduit extends Item implements IConduitItem {
}
}
}
return false;
}
@@ -162,8 +158,7 @@ public abstract class AbstractItemConduit extends Item implements IConduitItem {
System.out.println("AbstractItemConduit.onItemUse: Conduit null.");
return false;
}
bundle.removeConduit(existingConduit);
bundle.addConduit(newConduit);
bundle.replaceConduit(existingConduit, newConduit);
if (!player.capabilities.isCreativeMode) {
stack.stackSize--;
for (ItemStack drop : existingConduit.getDrops()) {
@@ -195,9 +190,8 @@ public abstract class AbstractItemConduit extends Item implements IConduitItem {
}
@Override
@SuppressWarnings({ "rawtypes", "unchecked" })
@SideOnly(Side.CLIENT)
public void getSubItems(Item par1, CreativeTabs par2CreativeTabs, List par3List) {
public void getSubItems(Item par1, CreativeTabs par2CreativeTabs, List<ItemStack> par3List) {
for (int j = 0; j < subtypes.length; ++j) {
par3List.add(new ItemStack(this, 1, j));
}
@@ -32,7 +32,6 @@ import com.enderio.core.client.render.BoundingBox;
import com.enderio.core.common.util.BlockCoord;
import com.enderio.core.common.util.Util;
import cpw.mods.fml.common.FMLCommonHandler;
import cpw.mods.fml.common.Optional;
import cpw.mods.fml.common.Optional.Interface;
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
@@ -93,9 +92,6 @@ public class BlockConduitBundle extends BlockEio
public static BlockConduitBundle create() {
MinecraftForge.EVENT_BUS.register(ConduitNetworkTickHandler.instance);
FMLCommonHandler.instance().bus().register(ConduitNetworkTickHandler.instance);
PacketHandler.INSTANCE
.registerMessage(PacketFluidLevel.class, PacketFluidLevel.class, PacketHandler.nextID(), Side.CLIENT);
PacketHandler.INSTANCE
@@ -160,7 +156,6 @@ public class BlockConduitBundle extends BlockEio
BlockConduitBundle result = new BlockConduitBundle();
result.init();
MinecraftForge.EVENT_BUS.register(result);
return result;
}
@@ -292,41 +287,6 @@ public class BlockConduitBundle extends BlockEio
effectRenderer.addEffect(digFX);
}
@SideOnly(Side.CLIENT)
@SubscribeEvent
public void onPlaySound(PlaySoundSourceEvent event) {
String path = event.sound.getPositionedSoundLocation().getResourcePath();
if ("silence.step".equals(path)) {
ISound snd = event.sound;
World world = EnderIO.proxy.getClientWorld();
BlockCoord bc = new BlockCoord(snd.getXPosF(), snd.getYPosF(), snd.getZPosF());
TileEntity te = bc.getTileEntity(world);
if (te instanceof TileConduitBundle && ((TileConduitBundle) te).hasFacade()) {
Block facade = getFacade(world, bc.x, bc.y, bc.z, -1);
ConduitUtil.playHitSound(facade.stepSound, world, bc.x, bc.y, bc.z);
} else {
ConduitUtil.playHitSound(Block.soundTypeMetal, world, bc.x, bc.y, bc.z);
}
}
}
@SideOnly(Side.CLIENT)
@SubscribeEvent
public void onPlaySoundAtEntity(PlaySoundAtEntityEvent event) {
String path = event.name;
World world = event.entity.worldObj;
if ("EnderIO:silence.step".equals(path) && world.isRemote) {
BlockCoord bc = new BlockCoord(event.entity.posX, event.entity.posY - 2, event.entity.posZ);
TileEntity te = bc.getTileEntity(world);
if (te instanceof TileConduitBundle && ((TileConduitBundle) te).hasFacade()) {
Block facade = getFacade(world, bc.x, bc.y, bc.z, -1);
ConduitUtil.playStepSound(facade.stepSound, world, bc.x, bc.y, bc.z);
} else {
ConduitUtil.playStepSound(Block.soundTypeMetal, world, bc.x, bc.y, bc.z);
}
}
}
@Override
protected void init() {
super.init();
@@ -334,6 +294,7 @@ public class BlockConduitBundle extends BlockEio
EnderIO.guiHandler.registerGuiHandler(GuiHandler.GUI_ID_EXTERNAL_CONNECTION_BASE + dir.ordinal(), this);
}
EnderIO.guiHandler.registerGuiHandler(GuiHandler.GUI_ID_EXTERNAL_CONNECTION_SELECTOR, this);
MinecraftForge.EVENT_BUS.register(new EventHandler());
}
@Override
@@ -473,24 +434,6 @@ public class BlockConduitBundle extends BlockEio
: resist;
}
@SubscribeEvent
public void onBreakSpeed(BreakSpeed event) {
if (event.block == this) {
ItemStack held = event.entityPlayer.getCurrentEquippedItem();
if (held == null || held.getItem().getHarvestLevel(held, "pickaxe") == -1) {
event.newSpeed += 2;
}
IConduitBundle te = (IConduitBundle) event.entity.worldObj.getTileEntity(event.x, event.y, event.z);
if (te != null && te.getFacadeType() == FacadeType.HARDENED) {
if (!ConduitUtil.isSolidFacadeRendered(te, event.entityPlayer)) {
event.newSpeed *= 6;
} else {
event.newSpeed *= 2;
}
}
}
}
@Override
@SideOnly(Side.CLIENT)
public int getRenderBlockPass() {
@@ -923,7 +866,7 @@ public class BlockConduitBundle extends BlockEio
@Override
public void addCollisionBoxesToList(World world, int x, int y, int z, AxisAlignedBB axisalignedbb,
@SuppressWarnings("rawtypes") List arraylist, Entity par7Entity) {
List<AxisAlignedBB> arraylist, Entity par7Entity) {
if (MicroblocksUtil.supportMicroblocks()) {
IM__addCollisionBoxesToList(world, x, y, z, axisalignedbb, arraylist, par7Entity);
@@ -1261,9 +1204,8 @@ public class BlockConduitBundle extends BlockEio
return IMultipartSystem.instance.hook_collisionRayTrace(cur, world, x, y, z, src, dst);
}
@SuppressWarnings({ "rawtypes", "unchecked" })
private void IM__addCollisionBoxesToList(World world, int x, int y, int z, AxisAlignedBB mask, List list,
Entity entity) {
private void IM__addCollisionBoxesToList(World world, int x, int y, int z, AxisAlignedBB mask,
List<AxisAlignedBB> list, Entity entity) {
IMultipartSystem.instance.hook_addCollisionBoxesToList(world, x, y, z, mask, list, entity);
}
@@ -1275,4 +1217,61 @@ public class BlockConduitBundle extends BlockEio
private boolean hasMicroblocks(IConduitBundle bundle) {
return !bundle.getCoverSystem().getAllParts().isEmpty();
}
public class EventHandler {
@SideOnly(Side.CLIENT)
@SubscribeEvent
public void onPlaySound(PlaySoundSourceEvent event) {
String path = event.sound.getPositionedSoundLocation().getResourcePath();
if ("silence.step".equals(path)) {
ISound snd = event.sound;
World world = EnderIO.proxy.getClientWorld();
if (world == null) return;
BlockCoord bc = new BlockCoord(snd.getXPosF(), snd.getYPosF(), snd.getZPosF());
TileEntity te = bc.getTileEntity(world);
if (te instanceof TileConduitBundle && ((TileConduitBundle) te).hasFacade()) {
Block facade = getFacade(world, bc.x, bc.y, bc.z, -1);
ConduitUtil.playHitSound(facade.stepSound, world, bc.x, bc.y, bc.z);
} else {
ConduitUtil.playHitSound(Block.soundTypeMetal, world, bc.x, bc.y, bc.z);
}
}
}
@SideOnly(Side.CLIENT)
@SubscribeEvent
public void onPlaySoundAtEntity(PlaySoundAtEntityEvent event) {
String path = event.name;
World world = event.entity.worldObj;
if ("EnderIO:silence.step".equals(path) && world.isRemote) {
BlockCoord bc = new BlockCoord(event.entity.posX, event.entity.posY - 2, event.entity.posZ);
TileEntity te = bc.getTileEntity(world);
if (te instanceof TileConduitBundle && ((TileConduitBundle) te).hasFacade()) {
Block facade = getFacade(world, bc.x, bc.y, bc.z, -1);
ConduitUtil.playStepSound(facade.stepSound, world, bc.x, bc.y, bc.z);
} else {
ConduitUtil.playStepSound(Block.soundTypeMetal, world, bc.x, bc.y, bc.z);
}
}
}
@SubscribeEvent
public void onBreakSpeed(BreakSpeed event) {
if (event.block == BlockConduitBundle.this) {
ItemStack held = event.entityPlayer.getCurrentEquippedItem();
if (held == null || held.getItem().getHarvestLevel(held, "pickaxe") == -1) {
event.newSpeed += 2;
}
IConduitBundle te = (IConduitBundle) event.entity.worldObj.getTileEntity(event.x, event.y, event.z);
if (te != null && te.getFacadeType() == FacadeType.HARDENED) {
if (!ConduitUtil.isSolidFacadeRendered(te, event.entityPlayer)) {
event.newSpeed *= 6;
} else {
event.newSpeed *= 2;
}
}
}
}
}
}
@@ -10,18 +10,15 @@ import cpw.mods.fml.common.gameevent.TickEvent.Phase;
public class ConduitNetworkTickHandler {
public static final ConduitNetworkTickHandler instance = new ConduitNetworkTickHandler();
public interface TickListener {
public static interface TickListener {
void tickStart(TickEvent.ServerTickEvent evt);
public void tickStart(TickEvent.ServerTickEvent evt);
public void tickEnd(TickEvent.ServerTickEvent evt);
void tickEnd(TickEvent.ServerTickEvent evt);
}
private final List<TickListener> listeners = new ArrayList<TickListener>();
private final IdentityHashMap<AbstractConduitNetwork<?, ?>, Boolean> networks = new IdentityHashMap<AbstractConduitNetwork<?, ?>, Boolean>();
private final List<TickListener> listeners = new ArrayList<>();
private final IdentityHashMap<AbstractConduitNetwork<?, ?>, Boolean> networks = new IdentityHashMap<>();
public void addListener(TickListener listener) {
listeners.add(listener);
@@ -688,7 +688,7 @@ public class ConduitRecipes {
String fluix = "crystalFluix";
String pureFluix = "crystalPureFluix";
ItemStack quartzFiber = AEApi.instance().parts().partQuartzFiber.stack(1).copy();
ItemStack quartzFiber = AEApi.instance().definitions().parts().quartzFiber().maybeStack(1).get().copy();
ItemStack conduitBinder = new ItemStack(EnderIO.itemMaterial, 1, Material.CONDUIT_BINDER.ordinal());
ItemStack res = new ItemStack(EnderIO.itemMEConduit, Config.numConduitsPerRecipe / 2);
@@ -697,10 +697,6 @@ public class ConduitRecipes {
res.stackSize = 1;
ItemStack resDense = new ItemStack(EnderIO.itemMEConduit, 1, 1);
ItemStack resUltra = new ItemStack(EnderIO.itemMEConduit, 1, 2);
addShaped(resDense, "bCb", "CbC", "bCb", 'b', conduitBinder, 'C', res);
if (Config.enableMEUltraDenseConduits) {
addShaped(resUltra, "bCb", "CbC", "bCb", 'b', conduitBinder, 'C', resDense);
}
}
}
@@ -43,7 +43,7 @@ public class ConduitUtil {
public static final Random RANDOM = new Random();
@SuppressWarnings({ "rawtypes", "unchecked" })
@SuppressWarnings("unchecked")
public static void ensureValidNetwork(IConduit conduit) {
TileEntity te = conduit.getBundle().getEntity();
World world = te.getWorldObj();
@@ -54,13 +54,15 @@ public class ConduitUtil {
return;
}
@SuppressWarnings("rawtypes")
AbstractConduitNetwork res = conduit.createNetworkForType();
res.init(conduit.getBundle(), connections, world);
return;
}
@SuppressWarnings({ "unchecked", "rawtypes" })
@SuppressWarnings("unchecked")
private static boolean reuseNetwork(IConduit con, Collection<? extends IConduit> connections, World world) {
@SuppressWarnings("rawtypes")
AbstractConduitNetwork network = null;
for (IConduit conduit : connections) {
if (network == null) {
@@ -49,6 +49,8 @@ public interface IConduitBundle extends IInternalPowerHandler, IFluidHandler, II
void addConduit(IConduit conduit);
void replaceConduit(IConduit original, IConduit replacement);
void removeConduit(IConduit conduit);
Collection<IConduit> getConduits();
@@ -25,6 +25,7 @@ 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;
@@ -66,7 +67,7 @@ public class TileConduitBundle extends TileEntityEio implements IConduitBundle {
public static final short NBT_VERSION = 1;
private final List<IConduit> conduits = new ArrayList<IConduit>();
private final List<IConduit> conduits = new CasList<>();
private Block facadeId = null;
private int facadeMeta = 0;
@@ -74,9 +75,9 @@ public class TileConduitBundle extends TileEntityEio implements IConduitBundle {
private boolean facadeChanged;
private final List<CollidableComponent> cachedCollidables = new ArrayList<CollidableComponent>();
private final List<CollidableComponent> cachedCollidables = new ArrayList<>();
private final List<CollidableComponent> cachedConnectors = new ArrayList<CollidableComponent>();
private final List<CollidableComponent> cachedConnectors = new ArrayList<>();
private boolean conduitsDirty = true;
private boolean collidablesDirty = true;
@@ -404,6 +405,29 @@ public class TileConduitBundle extends TileEntityEio implements IConduitBundle {
dirty();
}
@Override
public void replaceConduit(IConduit original, IConduit replacement) {
if (worldObj.isRemote) {
return;
}
// If you're wondering why I am not using conduit.writeToNBT, it is because there is some data that should not
// persist, some of which causes crashes with energy conduits.
NBTTagCompound[] originalData = new NBTTagCompound[ForgeDirection.values().length];
for (ForgeDirection conduitConnection : original.getExternalConnections()) {
NBTTagCompound tag = new NBTTagCompound();
original.writeConnectionSettingsToNBT(conduitConnection, tag);
originalData[conduitConnection.ordinal()] = tag;
}
removeConduit(original);
addConduit(replacement);
for (int i = 0; i < originalData.length; i++) {
NBTTagCompound nbt = originalData[i];
if (nbt != null) {
replacement.readConduitSettingsFromNBT(ForgeDirection.values()[i], nbt);
}
}
}
@Override
public void removeConduit(IConduit conduit) {
if (conduit != null) {
@@ -513,11 +537,12 @@ public class TileConduitBundle extends TileEntityEio implements IConduitBundle {
@Override
public List<CollidableComponent> getConnectors() {
List<CollidableComponent> result = new ArrayList<CollidableComponent>();
List<CollidableComponent> result = new ArrayList<>();
addConnectors(result);
return result;
}
@SuppressWarnings("unchecked")
private void addConnectors(List<CollidableComponent> result) {
if (conduits.isEmpty()) {
@@ -941,7 +966,6 @@ public class TileConduitBundle extends TileEntityEio implements IConduitBundle {
return (IGridNode) node;
}
@SuppressWarnings("cast")
@Override
@Method(modid = "appliedenergistics2")
public void setGridNode(Object node) {
@@ -109,7 +109,6 @@ public class BlockConduitFacade extends BlockEio implements IPaintedBlock, Clone
}
Block block = cb.getFacadeId();
int meta = cb.getFacadeMetadata();
if (block == null || block == this) {
return;
}
@@ -65,10 +65,9 @@ public class ItemConduitFacade extends Item implements IAdvancedTooltipProvider,
GameRegistry.registerItem(this, ModObject.itemConduitFacade.unlocalisedName);
}
@SuppressWarnings({ "unchecked", "rawtypes" })
@Override
@SideOnly(Side.CLIENT)
public void getSubItems(Item item, CreativeTabs p_150895_2_, List list) {
public void getSubItems(Item item, CreativeTabs p_150895_2_, List<ItemStack> list) {
for (FacadeType t : FacadeType.values()) {
list.add(new ItemStack(item, 1, t.ordinal()));
}
@@ -171,10 +170,9 @@ public class ItemConduitFacade extends Item implements IAdvancedTooltipProvider,
return result;
}
@SuppressWarnings("rawtypes")
@Override
@SideOnly(Side.CLIENT)
public void addInformation(ItemStack item, EntityPlayer par2EntityPlayer, List list, boolean par4) {
public void addInformation(ItemStack item, EntityPlayer par2EntityPlayer, List<String> list, boolean par4) {
super.addInformation(item, par2EntityPlayer, list, par4);
}
@@ -183,15 +181,13 @@ public class ItemConduitFacade extends Item implements IAdvancedTooltipProvider,
return getUnlocalizedName();
}
@SuppressWarnings("rawtypes")
@Override
@SideOnly(Side.CLIENT)
public void addCommonEntries(ItemStack itemstack, EntityPlayer entityplayer, List list, boolean flag) {}
public void addCommonEntries(ItemStack itemstack, EntityPlayer entityplayer, List<String> list, boolean flag) {}
@SuppressWarnings({ "unchecked", "rawtypes" })
@Override
@SideOnly(Side.CLIENT)
public void addBasicEntries(ItemStack itemstack, EntityPlayer entityplayer, List list, boolean flag) {
public void addBasicEntries(ItemStack itemstack, EntityPlayer entityplayer, List<String> list, boolean flag) {
if (PainterUtil.getSourceBlock(itemstack) == null) {
list.add(EnderIO.lang.localize("item.itemConduitFacade.tooltip.notpainted"));
} else {
@@ -199,10 +195,9 @@ public class ItemConduitFacade extends Item implements IAdvancedTooltipProvider,
}
}
@SuppressWarnings({ "unchecked", "rawtypes" })
@Override
@SideOnly(Side.CLIENT)
public void addDetailedEntries(ItemStack itemstack, EntityPlayer entityplayer, List list, boolean flag) {
public void addDetailedEntries(ItemStack itemstack, EntityPlayer entityplayer, List<String> list, boolean flag) {
SpecialTooltipHandler.addDetailedTooltipFromResources(list, itemstack);
if (itemstack.getItemDamage() == FacadeType.HARDENED.ordinal()) {
list.add("");
@@ -10,7 +10,6 @@ import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
import com.enderio.core.client.render.IconUtil;
import com.enderio.core.common.util.BlockCoord;
import cpw.mods.fml.common.Optional.Method;
import cpw.mods.fml.relauncher.Side;
@@ -88,7 +87,6 @@ public class GasConduit extends AbstractGasTankConduit {
}
private void doExtract() {
BlockCoord loc = getLocation();
if (!hasConnectionMode(ConnectionMode.INPUT)) {
return;
}
@@ -103,7 +101,6 @@ public class GasConduit extends AbstractGasTankConduit {
return;
}
Gas f = tank.getGas() == null ? null : tank.getGas().getGas();
for (ForgeDirection dir : externalConnections) {
if (autoExtractForDir(dir)) {
if (network.extractFrom(this, dir, MAX_EXTRACT_PER_TICK)) {
@@ -56,15 +56,15 @@ public class ItemGasConduit extends AbstractItemConduit implements IAdvancedTool
@Override
@SideOnly(Side.CLIENT)
public void addCommonEntries(ItemStack itemstack, EntityPlayer entityplayer, List list, boolean flag) {}
public void addCommonEntries(ItemStack itemstack, EntityPlayer entityplayer, List<String> list, boolean flag) {}
@Override
@SideOnly(Side.CLIENT)
public void addBasicEntries(ItemStack itemstack, EntityPlayer entityplayer, List list, boolean flag) {}
public void addBasicEntries(ItemStack itemstack, EntityPlayer entityplayer, List<String> list, boolean flag) {}
@Override
@SideOnly(Side.CLIENT)
public void addDetailedEntries(ItemStack itemstack, EntityPlayer entityplayer, List list, boolean flag) {
public void addDetailedEntries(ItemStack itemstack, EntityPlayer entityplayer, List<String> list, boolean flag) {
String gpt = " " + EnderIO.lang.localize("gas.gasTick");
int extractRate = Config.gasConduitExtractRate;
int maxIo = Config.gasConduitMaxIoRate;
@@ -103,8 +103,6 @@ public class GasSettings extends BaseSettingsPanel {
protected void renderCustomOptions(int top, float par1, int par2, int par3) {
boolean isInput = isInput();
if (isInput) {
int x = gui.getGuiLeft() + gap + gui.getFontRenderer().getStringWidth(autoExtractStr) + gap + 2;
int y = customTop;
gui.getFontRenderer().drawString(autoExtractStr, left, top, ColorUtil.getRGB(Color.DARK_GRAY));
}
}
@@ -107,7 +107,7 @@ public class BasicItemFilterGui implements IItemFilterGui {
useNbtB.setPaintSelectedBorder(false);
x += 16;
fuzzyB = new CycleButton(gui, ID_FUZZY + buttonIdOffset, x, y, FuzzyMode.class);
fuzzyB = new CycleButton<>(gui, ID_FUZZY + buttonIdOffset, x, y, FuzzyMode.class);
}
public void createFilterSlots() {
@@ -92,7 +92,7 @@ public class BigItemFilterGui implements IItemFilterGui {
useNbtB.setPaintSelectedBorder(false);
x += 16;
fuzzyB = new CycleButton(gui, ID_FUZZY + buttonIdOffset, x, y, FuzzyMode.class);
fuzzyB = new CycleButton<>(gui, ID_FUZZY + buttonIdOffset, x, y, FuzzyMode.class);
x += 16;
stickyB = new ToggleButton(
@@ -101,7 +101,7 @@ public class LimitedItemFilterGui implements IItemFilterGui {
useNbtB.setPaintSelectedBorder(false);
x += 16;
fuzzyB = new CycleButton(gui, ID_FUZZY + buttonIdOffset, x, y, FuzzyMode.class);
fuzzyB = new CycleButton<>(gui, ID_FUZZY + buttonIdOffset, x, y, FuzzyMode.class);
}
public void createFilterSlots() {
@@ -64,9 +64,8 @@ public class ItemExtractSpeedUpgrade extends Item implements IResourceTooltipPro
}
@Override
@SuppressWarnings({ "rawtypes", "unchecked" })
@SideOnly(Side.CLIENT)
public void getSubItems(Item par1, CreativeTabs par2CreativeTabs, List par3List) {
public void getSubItems(Item par1, CreativeTabs par2CreativeTabs, List<ItemStack> par3List) {
for (int j = 0; j < UPGRADES.length; ++j) {
par3List.add(new ItemStack(par1, 1, j));
}
@@ -64,9 +64,8 @@ public class ItemFunctionUpgrade extends Item implements IResourceTooltipProvide
}
@Override
@SuppressWarnings({ "rawtypes", "unchecked" })
@SideOnly(Side.CLIENT)
public void getSubItems(Item par1, CreativeTabs par2CreativeTabs, List par3List) {
public void getSubItems(Item par1, CreativeTabs par2CreativeTabs, List<ItemStack> par3List) {
for (int j = 0; j < UPGRADES.length; ++j) {
par3List.add(new ItemStack(par1, 1, j));
}
@@ -10,7 +10,6 @@ import net.minecraft.inventory.IInventory;
import net.minecraft.inventory.ISidedInventory;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.tileentity.TileEntityChest;
import net.minecraft.util.StatCollector;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
@@ -41,8 +40,8 @@ public class NetworkedInventory {
int tickDeficit;
// work around for a vanilla chest changing into a double chest without doing unneeded checks all the time
boolean recheckInv = false;
private TileEntity connectedTileEntity;
// Hack for TiC crafting station not working correctly when setting output slot to null
boolean ticHack = false;
@@ -61,19 +60,13 @@ public class NetworkedInventory {
this.location = location;
world = con.getBundle().getWorld();
TileEntity te = world.getTileEntity(location.x, location.y, location.z);
if (te.getClass().getName().equals("tconstruct.tools.logic.CraftingStationLogic")) {
ticHack = true;
} else if (te.getClass().getName().contains("cpw.mods.ironchest")) {
recheckInv = true;
} else if (te instanceof TileEntityChest) {
recheckInv = true;
} else if (te instanceof TileInventoryPanel) {
inventoryPanel = true;
}
updateInventory();
}
public boolean isInvalid() {
return connectedTileEntity == null || connectedTileEntity.isInvalid();
}
public boolean hasTarget(IItemConduit conduit, ForgeDirection dir) {
for (Target t : sendPriority) {
if (t.inv.con == conduit && t.inv.conDir == dir) {
@@ -110,6 +103,13 @@ public class NetworkedInventory {
}
public void onTick() {
if (isInvalid()) {
updateInventory();
if (isInvalid()) {
return;
}
}
if (tickDeficit > 0 || !canExtract() || !con.isExtractionRedstoneConditionMet(conDir)) {
// do nothing
} else {
@@ -144,11 +144,6 @@ public class NetworkedInventory {
}
private boolean transferItems() {
if (recheckInv) {
updateInventory();
}
int[] slotIndices = getInventory().getAccessibleSlotsFromSide(inventorySide);
if (slotIndices == null) {
return false;
@@ -257,9 +252,6 @@ public class NetworkedInventory {
matchedStickyInput = of != null && of.isValid() && of.doesItemPassFilter(this, toExtract);
}
if (target.stickyInput || !matchedStickyInput) {
if (target.inv.recheckInv) {
target.inv.updateInventory();
}
int inserted = target.inv.insertItem(toExtract);
if (inserted > 0) {
toExtract.stackSize -= inserted;
@@ -281,15 +273,38 @@ public class NetworkedInventory {
}
public final void updateInventory() {
TileEntity te = world.getTileEntity(location.x, location.y, location.z);
if (te instanceof ISidedInventory) {
inv = (ISidedInventory) te;
} else if (te instanceof IInventory) {
inv = new InventoryWrapper((IInventory) te);
TileEntity newTe = world.getTileEntity(location.x, location.y, location.z);
if (newTe != connectedTileEntity) {
connectedTileEntity = newTe;
ticHack = false;
inventoryPanel = false;
if (connectedTileEntity != null) {
if (connectedTileEntity.getClass().getName().equals("tconstruct.tools.logic.CraftingStationLogic")) {
ticHack = true;
} else if (connectedTileEntity instanceof TileInventoryPanel) {
inventoryPanel = true;
}
}
network.routesChanged();
}
if (connectedTileEntity instanceof ISidedInventory) {
inv = (ISidedInventory) connectedTileEntity;
} else if (connectedTileEntity instanceof IInventory) {
inv = new InventoryWrapper((IInventory) connectedTileEntity);
} else {
inv = null;
}
}
private int insertItem(ItemStack item) {
if (isInvalid()) {
updateInventory();
if (isInvalid()) {
return 0;
}
}
if (!canInsert() || item == null) {
return 0;
}
@@ -410,7 +425,7 @@ public class NetworkedInventory {
}
public ISidedInventory getInventoryRecheck() {
if (recheckInv) {
if (isInvalid()) {
updateInventory();
}
return inv;
@@ -82,9 +82,8 @@ public class ItemBasicItemFilter extends Item implements IItemFilterUpgrade {
}
@Override
@SuppressWarnings({ "rawtypes", "unchecked" })
@SideOnly(Side.CLIENT)
public void getSubItems(Item par1, CreativeTabs par2CreativeTabs, List par3List) {
public void getSubItems(Item par1, CreativeTabs par2CreativeTabs, List<ItemStack> par3List) {
for (int j = 0; j < 2; ++j) {
par3List.add(new ItemStack(this, 1, j));
}
@@ -92,7 +91,8 @@ public class ItemBasicItemFilter extends Item implements IItemFilterUpgrade {
@Override
@SideOnly(Side.CLIENT)
public void addInformation(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, List par3List, boolean par4) {
public void addInformation(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, List<String> par3List,
boolean par4) {
if (FilterRegister.isFilterSet(par1ItemStack)) {
if (!SpecialTooltipHandler.showAdvancedTooltips()) {
par3List.add(EnderIO.lang.localize("itemConduitFilterUpgrade"));
@@ -89,7 +89,8 @@ public class ItemExistingItemFilter extends Item implements IItemFilterUpgrade,
@Override
@SideOnly(Side.CLIENT)
public void addInformation(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, List par3List, boolean par4) {
public void addInformation(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, List<String> par3List,
boolean par4) {
if (FilterRegister.isFilterSet(par1ItemStack)) {
if (SpecialTooltipHandler.showAdvancedTooltips()) {
par3List.add(EnumChatFormatting.ITALIC + EnderIO.lang.localize("itemConduitFilterUpgrade.configured"));
@@ -91,11 +91,10 @@ public class ItemFilter implements IInventory, IItemFilter {
return doesItemPassFilter(item);
}
@SuppressWarnings("SimplifiableConditionalExpression")
public boolean doesItemPassFilter(ItemStack item) {
boolean allow = isValid() && itemMatched(item);
return isBlacklist ? !allow : allow;
return isBlacklist ^ allow;
}
protected boolean itemMatched(ItemStack item) {
@@ -60,7 +60,8 @@ public class ItemLimitedItemFilter extends Item implements IItemFilterUpgrade, I
@Override
@SideOnly(Side.CLIENT)
public void addInformation(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, List par3List, boolean par4) {
public void addInformation(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, List<String> par3List,
boolean par4) {
if (FilterRegister.isFilterSet(par1ItemStack)) {
if (SpecialTooltipHandler.showAdvancedTooltips()) {
par3List.add(EnumChatFormatting.ITALIC + EnderIO.lang.localize("itemConduitFilterUpgrade.configured"));
@@ -60,7 +60,8 @@ public class ItemModItemFilter extends Item implements IItemFilterUpgrade, IReso
@Override
@SideOnly(Side.CLIENT)
public void addInformation(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, List par3List, boolean par4) {
public void addInformation(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, List<String> par3List,
boolean par4) {
if (FilterRegister.isFilterSet(par1ItemStack)) {
if (SpecialTooltipHandler.showAdvancedTooltips()) {
par3List.add(EnumChatFormatting.ITALIC + EnderIO.lang.localize("itemConduitFilterUpgrade.configured"));
@@ -308,7 +308,6 @@ public abstract class AbstractEnderLiquidConduit extends AbstractLiquidConduit {
}
private void doExtract() {
BlockCoord loc = getLocation();
if (!hasExtractableMode()) {
return;
}
@@ -14,7 +14,6 @@ import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fluids.FluidTankInfo;
import com.enderio.core.client.render.IconUtil;
import com.enderio.core.common.util.BlockCoord;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
@@ -92,7 +91,6 @@ public class AdvancedLiquidConduit extends AbstractTankConduit {
}
private void doExtract() {
BlockCoord loc = getLocation();
// Extraction can happen on extract mode or in/out mode
if (!hasExtractableMode()) {
return;
@@ -108,7 +106,6 @@ public class AdvancedLiquidConduit extends AbstractTankConduit {
return;
}
Fluid f = tank.getFluid() == null ? null : tank.getFluid().getFluid();
for (ForgeDirection dir : externalConnections) {
if (autoExtractForDir(dir)) {
if (network.extractFrom(this, dir, MAX_EXTRACT_PER_TICK)) {
@@ -134,7 +134,7 @@ public class ConduitTank implements IFluidTank {
addAmount(-used);
}
FluidStack drained = new FluidStack(fluid.getFluidID(), used);
FluidStack drained = new FluidStack(fluid.getFluid(), used);
if (fluid.amount < 0) {
fluid.amount = 0;
@@ -77,15 +77,15 @@ public class ItemLiquidConduit extends AbstractItemConduit implements IAdvancedT
@Override
@SideOnly(Side.CLIENT)
public void addCommonEntries(ItemStack itemstack, EntityPlayer entityplayer, List list, boolean flag) {}
public void addCommonEntries(ItemStack itemstack, EntityPlayer entityplayer, List<String> list, boolean flag) {}
@Override
@SideOnly(Side.CLIENT)
public void addBasicEntries(ItemStack itemstack, EntityPlayer entityplayer, List list, boolean flag) {}
public void addBasicEntries(ItemStack itemstack, EntityPlayer entityplayer, List<String> list, boolean flag) {}
@Override
@SideOnly(Side.CLIENT)
public void addDetailedEntries(ItemStack itemstack, EntityPlayer entityplayer, List list, boolean flag) {
public void addDetailedEntries(ItemStack itemstack, EntityPlayer entityplayer, List<String> list, boolean flag) {
int extractRate;
int maxIo;
@@ -143,7 +143,7 @@ public class LiquidConduit extends AbstractTankConduit {
}
}
if (!foundFluid) {
return;
continue;
}
FluidStack couldDrain = extTank.drain(dir.getOpposite(), MAX_EXTRACT_PER_TICK, false);
@@ -360,7 +360,7 @@ public class LiquidConduit extends AbstractTankConduit {
return false;
}
AbstractTankConduitNetwork n = (AbstractTankConduitNetwork) network;
AbstractTankConduitNetwork<?> n = (AbstractTankConduitNetwork<?>) network;
if (tank.getFluid() == null) {
tank.setLiquid(n.getFluidType() == null ? null : n.getFluidType().copy());
} else if (n.getFluidType() == null) {
@@ -279,13 +279,11 @@ public class LiquidConduitNetwork extends AbstractTankConduitNetwork<LiquidCondu
loc.y,
loc.z,
ILiquidConduit.class);
int numTargets = 0;
for (ILiquidConduit n : connections) {
LiquidConduit neighbour = (LiquidConduit) n;
if (canFlowTo(con, neighbour)) { // can only flow within same network
totalAmount += neighbour.getTank().getFluidAmount();
totalCapacity += neighbour.getTank().getCapacity();
numTargets++;
}
}
@@ -1,11 +1,11 @@
package crazypants.enderio.conduit.liquid;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Collections;
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,10 +56,17 @@ 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);
@@ -67,33 +74,40 @@ 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);
}
} 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);
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);
}
}
}
}
@@ -113,27 +127,29 @@ public class LiquidConduitRenderer extends DefaultConduitRenderer implements IRe
}
}
private static Map<CollidableComponent, Map<Fluid, List<CachableRenderStatement>>> cache = new WeakHashMap<CollidableComponent, Map<Fluid, List<CachableRenderStatement>>>();
private static final Map<CollidableComponent, Map<Fluid, List<CachableRenderStatement>>> cache = Collections
.synchronizedMap(new WeakHashMap<>());
public static List<CachableRenderStatement> computeFluidOutlineToCache(CollidableComponent component, Fluid fluid,
double scaleFactor, float outlineWidth) {
Map<Fluid, List<CachableRenderStatement>> cache0 = cache.get(component);
if (cache0 == null) {
cache0 = new HashMap<Fluid, List<CachableRenderStatement>>();
cache.put(component, cache0);
}
// 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.
List<CachableRenderStatement> data = cache0.get(fluid);
if (data != null) {
return data;
}
data = new ArrayList<CachableRenderStatement>();
cache0.put(fluid, data);
data = new ArrayList<>();
IIcon texture = fluid.getStillIcon();
if (texture == null) {
texture = fluid.getIcon();
if (texture == null) {
cache0.put(fluid, data);
return data;
}
}
@@ -192,6 +208,7 @@ public class LiquidConduitRenderer extends DefaultConduitRenderer implements IRe
}
}
}
cache0.put(fluid, data);
return data;
}
@@ -239,49 +256,6 @@ 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) {
@@ -14,7 +14,5 @@ public interface IMEConduit extends IConduit {
boolean isDense();
boolean isDenseUltra();
int getChannelsInUse();
}
@@ -15,8 +15,7 @@ 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() + "DenseUltra", "enderio:itemMeConduitDenseUltra") };
new ItemConduitSubtype(ModObject.itemMEConduit.name() + "Dense", "enderio:itemMeConduitDense") };
public static ItemMEConduit create() {
ItemMEConduit result = new ItemMEConduit();
@@ -16,7 +16,6 @@ import com.enderio.core.client.render.IconUtil;
import com.enderio.core.common.util.BlockCoord;
import appeng.api.AEApi;
import appeng.api.networking.GridFlags;
import appeng.api.networking.IGridConnection;
import appeng.api.networking.IGridHost;
import appeng.api.networking.IGridNode;
@@ -51,7 +50,6 @@ public class MEConduit extends AbstractConduit implements IMEConduit {
public static IIcon[] longTextures;
private boolean isDense;
private boolean isDenseUltra;
private int playerID = -1;
public MEConduit() {
@@ -59,7 +57,6 @@ public class MEConduit extends AbstractConduit implements IMEConduit {
}
public MEConduit(int itemDamage) {
isDenseUltra = itemDamage == 2;
isDense = itemDamage == 1;
}
@@ -68,16 +65,14 @@ public class MEConduit extends AbstractConduit implements IMEConduit {
@Override
public void registerIcons(IIconRegister register) {
coreTextures = new IIcon[3];
longTextures = new IIcon[3];
coreTextures = new IIcon[2];
longTextures = new IIcon[2];
coreTextures[0] = register.registerIcon(EnderIO.DOMAIN + ":meConduitCore");
coreTextures[1] = register.registerIcon(EnderIO.DOMAIN + ":meConduitCoreDense");
coreTextures[2] = register.registerIcon(EnderIO.DOMAIN + ":meConduitCoreDenseUltra");
longTextures[0] = register.registerIcon(EnderIO.DOMAIN + ":meConduit");
longTextures[1] = register.registerIcon(EnderIO.DOMAIN + ":meConduitDense");
longTextures[2] = register.registerIcon(EnderIO.DOMAIN + ":meConduitDenseUltra");
}
@Override
@@ -87,10 +82,7 @@ public class MEConduit extends AbstractConduit implements IMEConduit {
});
}
public static int getDamageForState(boolean isDense, boolean isDenseUltra) {
if (isDenseUltra) {
return 2;
}
public static int getDamageForState(boolean isDense) {
if (isDense) {
return 1;
}
@@ -104,7 +96,7 @@ public class MEConduit extends AbstractConduit implements IMEConduit {
@Override
public ItemStack createItem() {
return new ItemStack(EnderIO.itemMEConduit, 1, getDamageForState(isDense, isDenseUltra));
return new ItemStack(EnderIO.itemMEConduit, 1, getDamageForState(isDense));
}
@Override
@@ -122,7 +114,6 @@ public class MEConduit extends AbstractConduit implements IMEConduit {
public void writeToNBT(NBTTagCompound nbtRoot) {
super.writeToNBT(nbtRoot);
nbtRoot.setBoolean("isDense", isDense);
nbtRoot.setBoolean("isDenseUltra", isDenseUltra);
nbtRoot.setInteger("playerID", playerID);
}
@@ -135,9 +126,6 @@ public class MEConduit extends AbstractConduit implements IMEConduit {
} else {
playerID = -1;
}
if (nbtRoot.hasKey("isDenseUltra")) {
isDenseUltra = nbtRoot.getBoolean("isDenseUltra");
}
}
public void setPlayerID(int playerID) {
@@ -208,22 +196,12 @@ public class MEConduit extends AbstractConduit implements IMEConduit {
@Method(modid = "appliedenergistics2")
private Boolean canConnectToGridNode(IGridNode node, ForgeDirection dir) {
if (node.getGridBlock().getConnectableSides().contains(dir.getOpposite())) {
if (isDenseUltra()) {
return node.hasFlag(GridFlags.ULTRA_DENSE_CAPACITY)
|| ((node.hasFlag(GridFlags.DENSE_CAPACITY)) && !node.hasFlag(GridFlags.CANNOT_CARRY));
} else if (isDense()) {
return true;
} else {
return !node.hasFlag(GridFlags.ULTRA_DENSE_CAPACITY);
}
}
return false;
return node.getGridBlock().getConnectableSides().contains(dir.getOpposite());
}
@Override
public IIcon getTextureForState(CollidableComponent component) {
int state = getDamageForState(isDense, isDenseUltra);
int state = getDamageForState(isDense);
if (component.dir == ForgeDirection.UNKNOWN) {
return coreTextures[state];
} else {
@@ -400,9 +378,4 @@ public class MEConduit extends AbstractConduit implements IMEConduit {
public boolean isDense() {
return isDense;
}
@Override
public boolean isDenseUltra() {
return isDenseUltra;
}
}
@@ -43,9 +43,6 @@ public class MEConduitGrid implements IGridBlock {
@Override
public EnumSet<GridFlags> getFlags() {
if (conduit.isDenseUltra()) {
return EnumSet.of(GridFlags.ULTRA_DENSE_CAPACITY);
}
if (conduit.isDense()) {
return EnumSet.of(GridFlags.DENSE_CAPACITY);
}
@@ -12,8 +12,8 @@ import crazypants.enderio.ModObject;
import crazypants.enderio.conduit.AbstractItemConduit;
import crazypants.enderio.conduit.IConduit;
import crazypants.enderio.conduit.ItemConduitSubtype;
import crazypants.enderio.machine.power.PowerDisplayUtil;
import crazypants.enderio.power.ICapacitor;
import crazypants.enderio.power.PowerDisplayUtil;
public class ItemPowerConduit extends AbstractItemConduit {
@@ -51,7 +51,7 @@ public class ItemPowerConduit extends AbstractItemConduit {
@Override
@SideOnly(Side.CLIENT)
public void addInformation(ItemStack itemStack, EntityPlayer par2EntityPlayer, List list, boolean par4) {
public void addInformation(ItemStack itemStack, EntityPlayer par2EntityPlayer, List<String> list, boolean par4) {
if (PREFIX == null) {
POSTFIX = " " + PowerDisplayUtil.abrevation() + PowerDisplayUtil.perTickStr();
PREFIX = EnderIO.lang.localize("power.maxOutput") + " ";
@@ -266,7 +266,6 @@ public class NetworkPowerManager {
float filledRatio = (float) energyStored / maxEnergyStored;
int energyLeft = energyStored;
int given = 0;
for (IPowerConduit con : network.getConduits()) {
if (energyLeft > 0) {
// NB: use ceil to ensure we dont through away any energy due to
@@ -276,7 +275,6 @@ public class NetworkPowerManager {
give = Math.min(give, con.getMaxEnergyStored());
give = Math.min(give, energyLeft);
con.setEnergyStored(give);
given += give;
energyLeft -= give;
} else {
con.setEnergyStored(0);
@@ -137,7 +137,7 @@ public class PowerConduit extends AbstractConduit implements IPowerConduit {
DyeColor col = DyeColor.getColorFromDye(player.getCurrentEquippedItem());
if (ConduitUtil.isProbeEquipped(player)) {
if (!player.worldObj.isRemote) {
new PacketConduitProbe().sendInfoMessage(player, this);
PacketConduitProbe.sendInfoMessage(player, this);
}
return true;
} else if (col != null && res.component != null && isColorBandRendered(res.component.dir)) {
@@ -283,7 +283,6 @@ public class PowerConduit extends AbstractConduit implements IPowerConduit {
}
private boolean isRedstoneEnabled(ForgeDirection dir) {
boolean result;
RedstoneControlMode mode = getExtractionRedstoneMode(dir);
if (mode == RedstoneControlMode.NEVER) {
return false;
@@ -298,10 +297,12 @@ public class PowerConduit extends AbstractConduit implements IPowerConduit {
boolean res;
if (mode == RedstoneControlMode.OFF) {
// if checking for no signal, must be no signal from both
res = mode.isConditionMet(mode, signal) && (col != DyeColor.RED || mode.isConditionMet(mode, exSig));
res = RedstoneControlMode.isConditionMet(mode, signal)
&& (col != DyeColor.RED || RedstoneControlMode.isConditionMet(mode, exSig));
} else {
// if checking for a signal, either is fine
res = mode.isConditionMet(mode, signal) || (col == DyeColor.RED && mode.isConditionMet(mode, exSig));
res = RedstoneControlMode.isConditionMet(mode, signal)
|| (col == DyeColor.RED && RedstoneControlMode.isConditionMet(mode, exSig));
}
return res;
}
@@ -60,7 +60,6 @@ public class PowerConduitRenderer extends DefaultConduitRenderer {
Tessellator tessellator = Tessellator.instance;
tessellator.setColorOpaque_I(c);
Offset offset = conduit.getBundle().getOffset(IPowerConduit.class, component.dir);
BoundingBox bound = component.bound;
if (conMode != ConnectionMode.IN_OUT) {
Vector3d trans = ForgeDirectionOffsets.offsetScaled(component.dir, -0.075);
@@ -13,8 +13,8 @@ import crazypants.enderio.conduit.IConduit;
import crazypants.enderio.conduit.ItemConduitSubtype;
import crazypants.enderio.conduit.power.IPowerConduit;
import crazypants.enderio.conduit.power.ItemPowerConduit;
import crazypants.enderio.machine.power.PowerDisplayUtil;
import crazypants.enderio.power.ICapacitor;
import crazypants.enderio.power.PowerDisplayUtil;
public class ItemPowerConduitEndergy extends ItemPowerConduit {
@@ -75,7 +75,7 @@ public class ItemPowerConduitEndergy extends ItemPowerConduit {
@Override
@SideOnly(Side.CLIENT)
public void addInformation(ItemStack itemStack, EntityPlayer par2EntityPlayer, List list, boolean par4) {
public void addInformation(ItemStack itemStack, EntityPlayer par2EntityPlayer, List<String> list, boolean par4) {
if (PREFIX == null) {
POSTFIX = " " + PowerDisplayUtil.abrevation() + PowerDisplayUtil.perTickStr();
PREFIX = EnderIO.lang.localize("power.maxOutput") + " ";
@@ -72,10 +72,9 @@ public class RedstoneConduit extends AbstractConduit implements IRedstoneConduit
protected boolean neighbourDirty = true;
@SuppressWarnings("unused")
public RedstoneConduit() {
for (ForgeDirection ignored : ForgeDirection.VALID_DIRECTIONS) {
externalSignals.add(new HashSet<Signal>());
for (int i = 0; i < ForgeDirection.VALID_DIRECTIONS.length; i++) {
externalSignals.add(new HashSet<>());
}
}
@@ -11,7 +11,6 @@ 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;
@@ -19,13 +18,9 @@ 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;
@@ -53,59 +48,12 @@ import crazypants.util.RenderPassHelper;
@SideOnly(Side.CLIENT)
@ThreadSafeISBRH(perThread = false)
public class ConduitBundleRenderer extends TileEntitySpecialRenderer implements ISimpleBlockRenderingHandler {
public class ConduitBundleRenderer 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,8 +10,4 @@ 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,10 +63,6 @@ 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();
@@ -97,7 +93,6 @@ public class DefaultConduitRenderer implements ConduitRenderer {
tex.getMaxU(),
tex.getMinV(),
tex.getMaxV());
Tessellator tessellator = Tessellator.instance;
for (Vertex c : corners) {
cr.addVecWithUV(c.xyz, c.uv.x, c.uv.y);
}
@@ -349,8 +344,4 @@ public class DefaultConduitRenderer implements ConduitRenderer {
return new BoundingBox[] { bb };
}
@Override
public boolean isDynamic() {
return false;
}
}
@@ -74,7 +74,6 @@ public final class Config {
public static final Section sectionMobConfig = new Section("Mob Config", "mobconfig");
public static final Section sectionRailConfig = new Section("Rail", "railconfig");
public static final Section sectionEnchantments = new Section("Enchantments", "enchantments");
public static final Section sectionWeather = new Section("Weather", "weather");
public static final Section sectionTelepad = new Section("Telepad", "telepad");
public static final Section sectionInventoryPanel = new Section("InventoryPanel", "inventorypanel");
public static final Section sectionMisc = new Section("Misc", "misc");
@@ -175,6 +174,34 @@ public final class Config {
*/
public static int teleportStaffFailedBlinkDistance = 64;
/**
* Sets the teleport staff right-click action.
*
* <p>
* Values:
* <ul>
* <li><b>0:</b> Do nothing
* <li><b>1:</b> Teleport to look
* <li><b>2:</b> Teleport to anchor
* <li><b>3:</b> Teleport to anchor, or to look if no anchor <em>(default)</em>
* </ul>
*/
public static int teleportStaffAction = 3;
/**
* Sets the teleport staff sneak right-click action.
*
* <p>
* Values:
* <ul>
* <li><b>0:</b> Do nothing
* <li><b>1:</b> Teleport to look <em>(default)</em>
* <li><b>2:</b> Teleport to anchor
* <li><b>3:</b> Teleport to anchor, or to look if no anchor
* </ul>
*/
public static int teleportStaffSneakAction = 1;
public static int enderIoRange = 8;
public static boolean enderIoMeAccessEnabled = true;
@@ -257,6 +284,8 @@ public final class Config {
public static int darkSteelApiaristArmorCost = 10;
public static int darkSteelTrackmanGogglesCost = 10;
public static int darkSteelSwimCost = 10;
public static int darkSteelNightVisionCost = 10;
@@ -361,6 +390,8 @@ public final class Config {
"TwilightForest:item.steeleafHoe", "TwilightForest:item.ironwoodHoe", "IC2:itemToolBronzeHoe" };
public static List<ItemStack> farmHoes = new ArrayList<ItemStack>();
public static int farmSaplingReserveAmount = 8;
public static double farmParticlesMaxRange = 64;
public static int farmParticlesCount = 15;
public static int magnetPowerUsePerSecondRF = 1;
public static int magnetPowerCapacityRF = 100000;
@@ -445,7 +476,6 @@ public final class Config {
public static boolean isGasConduitEnabled = true;
public static boolean enableMEConduits = true;
public static boolean enableMEUltraDenseConduits = false;
public static boolean enableOCConduits = true;
public static boolean enableOCConduitsAnimatedTexture = true;
@@ -513,10 +543,6 @@ public final class Config {
public static boolean spawnGuardStopAllSlimesDebug = false;
public static boolean spawnGuardStopAllSquidSpawning = false;
public static int weatherObeliskClearFluid = 2000;
public static int weatherObeliskRainFluid = 500;
public static int weatherObeliskThunderFluid = 1000;
// Loot Defaults
public static boolean lootDarkSteel = true;
public static boolean lootItemConduitProbe = true;
@@ -569,6 +595,8 @@ public final class Config {
public static boolean strictTPItemChecking = true;
public static float fusedQuartzExplosionResistance = 2000.0f;
public static void load(FMLPreInitializationEvent event) {
PacketHandler.INSTANCE
.registerMessage(PacketConfigSync.class, PacketConfigSync.class, PacketHandler.nextID(), Side.CLIENT);
@@ -1269,6 +1297,27 @@ public final class Config {
"Number of blocks teleported when no block is being looked at.")
.getInt(teleportStaffFailedBlinkDistance);
teleportStaffAction = config.get(
sectionStaff.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)")
.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")
.getInt(teleportStaffSneakAction);
enderIoRange = config.get(
sectionEfficiency.name,
"enderIoRange",
@@ -1559,6 +1608,14 @@ public final class Config {
darkSteelApiaristArmorCost,
"Number of levels required for the Apiarist Armor upgrade.").getInt(darkSteelApiaristArmorCost);
darkSteelTrackmanGogglesCost = config
.get(
sectionDarkSteel.name,
"darkSteelTrackmanGogglesCost",
darkSteelTrackmanGogglesCost,
"Number of levels required for the Trackman's Goggles upgrade.")
.getInt(darkSteelTrackmanGogglesCost);
darkSteelTravelCost = config.get(
sectionDarkSteel.name,
"darkSteelTravelCost",
@@ -2060,6 +2117,18 @@ public final class Config {
+ "always shear all leaves.")
.getInt(farmSaplingReserveAmount);
farmParticlesMaxRange = config.get(
sectionFarm.name,
"farmParticlesMaxRange",
farmParticlesMaxRange,
"The max range of the farm action particles.").getDouble(farmParticlesMaxRange);
farmParticlesCount = config.get(
sectionFarm.name,
"farmParticlesCount",
farmParticlesCount,
"The number of particles produces by farm action.").getInt(farmParticlesCount);
combustionGeneratorUseOpaqueModel = config
.get(
sectionAesthetic.name,
@@ -2352,11 +2421,6 @@ public final class Config {
sectionItems.name,
enableMEConduits,
"Allows ME conduits. Only has an effect with AE2 installed.");
enableMEUltraDenseConduits = config.getBoolean(
"enableMEUltraDenseConduits",
sectionItems.name,
enableMEUltraDenseConduits,
"Allows ME Ultra Dense conduits. Only has an effect with AE2 installed.");
enableOCConduits = config.getBoolean(
"enableOCConduits",
sectionItems.name,
@@ -2679,22 +2743,6 @@ public final class Config {
spawnGuardStopAllSquidSpawning,
"When true no squid will be spawned.");
weatherObeliskClearFluid = config.get(
sectionWeather.name,
"weatherObeliskClearFluid",
weatherObeliskClearFluid,
"The fluid required (in mB) to set the world to clear weather").getInt();
weatherObeliskRainFluid = config.get(
sectionWeather.name,
"weatherObeliskRainFluid",
weatherObeliskRainFluid,
"The fluid required (in mB) to set the world to rainy weather").getInt();
weatherObeliskThunderFluid = config.get(
sectionWeather.name,
"weatherObeliskThunderFluid",
weatherObeliskThunderFluid,
"The fluid required (in mB) to set the world to thundering weather").getInt();
// Loot Config
lootDarkSteel = config.getBoolean(
"lootDarkSteel",
@@ -2923,6 +2971,13 @@ public final class Config {
strictTPItemChecking,
"If true, turn on strict checking of item energy checking. This might cause traveling tools from third party mods to fire fake security warnings on server side and not function correctly.")
.getBoolean(strictTPItemChecking);
fusedQuartzExplosionResistance = config.getFloat(
"fusedQuartzExplosionResistance",
sectionMisc.name,
fusedQuartzExplosionResistance,
0.0f,
Float.MAX_VALUE,
"How blast resistant the three Fused Quartz blocks should be.");
}
public static void checkYetaAccess() {
@@ -1,6 +1,9 @@
package crazypants.enderio.enderface;
import java.util.List;
import net.minecraft.inventory.Slot;
import net.minecraft.item.ItemStack;
public class ContainerWrapper extends net.minecraft.inventory.Container {
@@ -28,9 +31,8 @@ public class ContainerWrapper extends net.minecraft.inventory.Container {
return wrapped.getSlot(arg0);
}
@SuppressWarnings("rawtypes")
@Override
public java.util.List getInventory() {
public List<ItemStack> getInventory() {
return wrapped.getInventory();
}
@@ -214,7 +214,7 @@ public class GuiEnderface extends GuiScreen {
if (hit != null) {
Block block = world.getBlock(hit.blockX, hit.blockY, hit.blockZ);
if (block == EnderIO.blockHyperCube || block == EnderIO.blockCapacitorBank) {
if (block == EnderIO.blockHyperCube) {
block.onBlockActivated(world, hit.blockX, hit.blockY, hit.blockZ, player, 0, 0, 0, 0);
} else {
openInterface(hit.blockX, hit.blockY, hit.blockZ, hit.sideHit, hit.hitVec);
@@ -538,34 +538,13 @@ public class GuiEnderface extends GuiScreen {
int h = gh;
int left = guiLeft;
int top = guiTop;
int cx = left + w / 2;
int cy = top + h / 2;
// black outline
drawRect(left, top, left + w, top + h, 0xFF000000);
left += 1;
top += 1;
w -= 2;
h -= 2;
// border
int topH = 0xFFFFFFFF;
int botH = 0xFF555555;
int rightH = 0xFF555555;
int leftH = 0xFFFFFFFF;
if (animateInX) {
leftH = 0xFF555555;
rightH = 0xFFFFFFFF;
}
if (animateInY) {
topH = 0xFF555555;
botH = 0xFFFFFFFF;
}
left += 1;
top += 1;
w -= 2;
h -= 2;
left += 2;
top += 2;
w -= 4;
h -= 4;
drawRect(left, top, left + w, top + h, 0xFF00331C);
}
@@ -14,7 +14,7 @@ import crazypants.enderio.config.Config;
import crazypants.enderio.machine.AbstractMachineEntity;
import crazypants.enderio.machine.generator.stirling.StirlingGeneratorContainer;
import crazypants.enderio.machine.generator.stirling.TileEntityStirlingGenerator;
import crazypants.enderio.machine.power.PowerDisplayUtil;
import crazypants.enderio.power.PowerDisplayUtil;
public class TooltipHandlerBurnTime implements ITooltipCallback {
@@ -15,7 +15,7 @@ import crazypants.enderio.EnderIO;
import crazypants.enderio.fluid.FluidFuelRegister;
import crazypants.enderio.fluid.IFluidCoolant;
import crazypants.enderio.fluid.IFluidFuel;
import crazypants.enderio.machine.power.PowerDisplayUtil;
import crazypants.enderio.power.PowerDisplayUtil;
public class TooltipHandlerFluid implements ITooltipCallback {
@@ -97,7 +97,6 @@ public class ItemConduitProbe extends Item implements IResourceTooltipProvider,
if (!(te instanceof IConduitBundle)) {
return false;
}
IConduitBundle cb = (IConduitBundle) te;
if (itemStack.getItemDamage() == 0) {
if (PacketConduitProbe.canCreatePacket(world, x, y, z)) {
if (world.isRemote) {
@@ -133,9 +133,8 @@ public class ItemEnderFood extends ItemFood implements IResourceTooltipProvider
setHasSubtypes(true);
}
@SuppressWarnings({ "unchecked", "rawtypes" })
@Override
public void getSubItems(Item item, CreativeTabs tab, List list) {
public void getSubItems(Item item, CreativeTabs tab, List<ItemStack> list) {
for (EnderFood f : EnderFood.VALUES) {
list.add(f.getStack());
}
@@ -28,7 +28,7 @@ import crazypants.enderio.EnderIOTab;
import crazypants.enderio.ModObject;
import crazypants.enderio.config.Config;
import crazypants.enderio.item.darksteel.DarkSteelItems;
import crazypants.enderio.machine.power.PowerDisplayUtil;
import crazypants.enderio.power.PowerDisplayUtil;
import crazypants.util.BaublesUtil;
@Optional.Interface(iface = "baubles.api.IBauble", modid = "Baubles|API")
@@ -96,7 +96,7 @@ public class ItemMagnet extends ItemEnergyContainer implements IResourceTooltipP
@Override
@SideOnly(Side.CLIENT)
public void getSubItems(Item item, CreativeTabs par2CreativeTabs, List par3List) {
public void getSubItems(Item item, CreativeTabs par2CreativeTabs, List<ItemStack> par3List) {
ItemStack is = new ItemStack(this);
setFull(is);
par3List.add(is);
@@ -108,7 +108,7 @@ public class ItemMagnet extends ItemEnergyContainer implements IResourceTooltipP
@Override
@SideOnly(Side.CLIENT)
public void addInformation(ItemStack itemStack, EntityPlayer par2EntityPlayer, List list, boolean par4) {
public void addInformation(ItemStack itemStack, EntityPlayer par2EntityPlayer, List<String> list, boolean par4) {
super.addInformation(itemStack, par2EntityPlayer, list, par4);
String str = PowerDisplayUtil.formatPower(getEnergyStored(itemStack)) + "/"
+ PowerDisplayUtil.formatPower(getMaxEnergyStored(itemStack))
@@ -367,7 +367,8 @@ public class ItemSoulVessel extends Item implements IResourceTooltipProvider {
@Override
@SideOnly(Side.CLIENT)
public void addInformation(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, List par3List, boolean par4) {
public void addInformation(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, List<String> par3List,
boolean par4) {
if (par1ItemStack != null) {
String mobName = getMobTypeFromStack(par1ItemStack);
if (mobName != null) {
@@ -190,18 +190,14 @@ public class ItemYetaWrench extends Item
}
/* IAdvancedTooltipProvider */
@SuppressWarnings("rawtypes")
@Override
public void addBasicEntries(ItemStack itemstack, EntityPlayer entityplayer, List list, boolean flag) {}
public void addBasicEntries(ItemStack itemstack, EntityPlayer entityplayer, List<String> list, boolean flag) {}
@SuppressWarnings("rawtypes")
@Override
public void addCommonEntries(ItemStack itemstack, EntityPlayer entityplayer, List list, boolean flag) {}
public void addCommonEntries(ItemStack itemstack, EntityPlayer entityplayer, List<String> list, boolean flag) {}
@SuppressWarnings({ "rawtypes", "unchecked" })
@Override
public void addDetailedEntries(ItemStack itemstack, EntityPlayer entityplayer, List list, boolean flag) {
public void addDetailedEntries(ItemStack itemstack, EntityPlayer entityplayer, List<String> list, boolean flag) {
ArrayList<String> tmp = new ArrayList<String>();
SpecialTooltipHandler.addDetailedTooltipFromResources(tmp, getUnlocalizedName());
String keyName = Keyboard.getKeyName(KeyTracker.instance.getYetaWrenchMode().getKeyCode());
@@ -11,12 +11,14 @@ import net.minecraft.item.ItemStack;
import net.minecraft.util.ChatComponentTranslation;
import org.lwjgl.input.Keyboard;
import org.lwjgl.input.Mouse;
import com.enderio.core.common.util.ChatUtil;
import cpw.mods.fml.client.registry.ClientRegistry;
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
import cpw.mods.fml.common.gameevent.InputEvent.KeyInputEvent;
import cpw.mods.fml.common.gameevent.InputEvent.MouseInputEvent;
import crazypants.enderio.EnderIO;
import crazypants.enderio.api.teleport.IItemOfTravel;
import crazypants.enderio.api.tool.IConduitControl;
@@ -25,16 +27,19 @@ import crazypants.enderio.config.Config;
import crazypants.enderio.item.PacketMagnetState.SlotType;
import crazypants.enderio.item.darksteel.DarkSteelController;
import crazypants.enderio.item.darksteel.DarkSteelItems;
import crazypants.enderio.item.darksteel.ItemDarkSteelArmor;
import crazypants.enderio.item.darksteel.PacketUpgradeState;
import crazypants.enderio.item.darksteel.PacketUpgradeState.Type;
import crazypants.enderio.item.darksteel.SoundDetector;
import crazypants.enderio.item.darksteel.upgrade.JumpUpgrade;
import crazypants.enderio.item.darksteel.upgrade.SoundDetectorUpgrade;
import crazypants.enderio.item.darksteel.upgrade.SpeedUpgrade;
import crazypants.enderio.item.darksteel.upgrade.TrackmanGogglesUpgrade;
import crazypants.enderio.network.PacketHandler;
import crazypants.enderio.teleport.TravelController;
import crazypants.enderio.thaumcraft.GogglesOfRevealingUpgrade;
import crazypants.util.BaublesUtil;
import mods.railcraft.api.core.items.IToolGoggles;
public class KeyTracker {
@@ -54,6 +59,8 @@ public class KeyTracker {
private final KeyBinding gogglesKey;
private final KeyBinding trackmansGogglesKey;
private final KeyBinding yetaWrenchMode;
private final KeyBinding magnetKey;
@@ -84,6 +91,12 @@ public class KeyTracker {
EnderIO.lang.localize("category.darksteelarmor"));
ClientRegistry.registerKeyBinding(gogglesKey);
trackmansGogglesKey = new KeyBinding(
EnderIO.lang.localize("keybind.trackmansgoggles"),
Keyboard.KEY_NONE,
EnderIO.lang.localize("category.darksteelarmor"));
ClientRegistry.registerKeyBinding(trackmansGogglesKey);
stepAssistKey = new KeyBinding(
EnderIO.lang.localize("keybind.stepassist"),
Keyboard.KEY_NONE,
@@ -123,11 +136,24 @@ public class KeyTracker {
@SubscribeEvent
public void onKeyInput(KeyInputEvent event) {
handleInput();
}
// mouse button presses arrive on a separate event
@SubscribeEvent
public void onMouseInput(MouseInputEvent event) {
if (Mouse.getEventButton() >= 0) {
handleInput();
}
}
private void handleInput() {
handleGlide();
handleSoundDetector();
handleNightVision();
handleYetaWrench();
handleGoggles();
handleTrackmanGoggles();
handleStepAssist();
handleSpeed();
handleJump();
@@ -154,7 +180,8 @@ public class KeyTracker {
if (player != null) {
ItemStack travelItem = player.getHeldItem();
if (travelItem == null || travelItem.getItem() == null
|| !(travelItem.getItem() instanceof IItemOfTravel)) {
|| !(travelItem.getItem() instanceof IItemOfTravel)
|| !((IItemOfTravel) travelItem.getItem()).isActive(player, travelItem)) {
travelItem = TravelController.instance.findTravelItemInInventoryOrBaubles(player);
}
@@ -231,6 +258,22 @@ public class KeyTracker {
}
}
private void handleTrackmanGoggles() {
if (trackmansGogglesKey.isPressed()) {
EntityPlayer player = Minecraft.getMinecraft().thePlayer;
if (!TrackmanGogglesUpgrade.isUpgradeEquipped(player)) {
return;
}
ItemStack helmet = player.getEquipmentInSlot(4);
((ItemDarkSteelArmor) helmet.getItem()).incrementAura(helmet);
IToolGoggles.displaySwitchMessage(
Minecraft.getMinecraft().theWorld,
Minecraft.getMinecraft().thePlayer,
((ItemDarkSteelArmor) helmet.getItem()).getCurrentAura(helmet));
return;
}
}
private void handleGoggles() {
if (gogglesKey.isPressed()) {
EntityPlayer player = Minecraft.getMinecraft().thePlayer;
@@ -120,6 +120,7 @@ public class MagnetController {
}
}
@SuppressWarnings("unchecked")
private List<Entity> selectEntitiesWithinAABB(World world, AxisAlignedBB bb) {
List<Entity> arraylist = null;
@@ -24,10 +24,10 @@ import crazypants.enderio.conduit.power.IPowerConduit;
import crazypants.enderio.conduit.power.NetworkPowerManager;
import crazypants.enderio.conduit.power.PowerConduitNetwork;
import crazypants.enderio.conduit.power.PowerTracker;
import crazypants.enderio.machine.power.PowerDisplayUtil;
import crazypants.enderio.power.EnergyHandlerPI;
import crazypants.enderio.power.IInternalPowerReceiver;
import crazypants.enderio.power.IInternalPoweredTile;
import crazypants.enderio.power.PowerDisplayUtil;
import io.netty.buffer.ByteBuf;
public class PacketConduitProbe implements IMessage, IMessageHandler<PacketConduitProbe, IMessage> {
@@ -33,6 +33,7 @@ import crazypants.enderio.item.darksteel.upgrade.SoundDetectorUpgrade;
import crazypants.enderio.item.darksteel.upgrade.SpeedUpgrade;
import crazypants.enderio.item.darksteel.upgrade.SpoonUpgrade;
import crazypants.enderio.item.darksteel.upgrade.SwimUpgrade;
import crazypants.enderio.item.darksteel.upgrade.TrackmanGogglesUpgrade;
import crazypants.enderio.item.darksteel.upgrade.TravelUpgrade;
import crazypants.enderio.material.Alloy;
import crazypants.enderio.material.endergy.AlloyEndergy;
@@ -75,6 +76,9 @@ public class DarkSteelRecipeManager {
upgrades.add(ApiaristArmorUpgrade.LEGS);
upgrades.add(ApiaristArmorUpgrade.BOOTS);
}
if (Loader.isModLoaded("Railcraft")) {
upgrades.add(TrackmanGogglesUpgrade.INSTANCE);
}
}
@SubscribeEvent
@@ -140,8 +144,8 @@ public class DarkSteelRecipeManager {
public static int getEnchantmentRepairCost(ItemStack itemStack) {
// derived from ContainerRepair
int res = 0;
Map map1 = EnchantmentHelper.getEnchantments(itemStack);
Iterator iter = map1.keySet().iterator();
Map<Integer, Integer> map1 = EnchantmentHelper.getEnchantments(itemStack);
Iterator<Integer> iter = map1.keySet().iterator();
while (iter.hasNext()) {
int i1 = ((Integer) iter.next()).intValue();
Enchantment enchantment = Enchantment.enchantmentsList[i1];
@@ -182,7 +186,8 @@ public class DarkSteelRecipeManager {
return upgrades;
}
public void addCommonTooltipEntries(ItemStack itemstack, EntityPlayer entityplayer, List list, boolean flag) {
public void addCommonTooltipEntries(ItemStack itemstack, EntityPlayer entityplayer, List<String> list,
boolean flag) {
for (IDarkSteelUpgrade upgrade : upgrades) {
if (upgrade.hasUpgrade(itemstack)) {
upgrade.addCommonEntries(itemstack, entityplayer, list, flag);
@@ -190,7 +195,8 @@ public class DarkSteelRecipeManager {
}
}
public void addBasicTooltipEntries(ItemStack itemstack, EntityPlayer entityplayer, List list, boolean flag) {
public void addBasicTooltipEntries(ItemStack itemstack, EntityPlayer entityplayer, List<String> list,
boolean flag) {
for (IDarkSteelUpgrade upgrade : upgrades) {
if (upgrade.hasUpgrade(itemstack)) {
upgrade.addBasicEntries(itemstack, entityplayer, list, flag);
@@ -198,7 +204,8 @@ public class DarkSteelRecipeManager {
}
}
public void addAdvancedTooltipEntries(ItemStack itemstack, EntityPlayer entityplayer, List list, boolean flag) {
public void addAdvancedTooltipEntries(ItemStack itemstack, EntityPlayer entityplayer, List<String> list,
boolean flag) {
List<IDarkSteelUpgrade> applyableUpgrades = new ArrayList<IDarkSteelUpgrade>();
for (IDarkSteelUpgrade upgrade : upgrades) {
@@ -10,6 +10,7 @@ import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemArmor;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.DamageSource;
import net.minecraft.util.EnumChatFormatting;
import net.minecraftforge.common.ISpecialArmor;
@@ -34,9 +35,13 @@ import crazypants.enderio.item.darksteel.upgrade.ApiaristArmorUpgrade;
import crazypants.enderio.item.darksteel.upgrade.EnergyUpgrade;
import crazypants.enderio.item.darksteel.upgrade.IDarkSteelUpgrade;
import crazypants.enderio.item.darksteel.upgrade.NaturalistEyeUpgrade;
import crazypants.enderio.item.darksteel.upgrade.TrackmanGogglesUpgrade;
import crazypants.enderio.thaumcraft.GogglesOfRevealingUpgrade;
import forestry.api.apiculture.IArmorApiarist;
import forestry.api.core.IArmorNaturalist;
import mods.railcraft.api.core.items.IToolGoggles;
import mods.railcraft.common.core.RailcraftConfig;
import mods.railcraft.common.items.ItemGoggles.GoggleAura;
import thaumcraft.api.IGoggles;
import thaumcraft.api.IVisDiscountGear;
import thaumcraft.api.aspects.Aspect;
@@ -45,11 +50,12 @@ import thaumcraft.api.nodes.IRevealer;
@InterfaceList({ @Interface(iface = "thaumcraft.api.IGoggles", modid = "Thaumcraft"),
@Interface(iface = "thaumcraft.api.IVisDiscountGear", modid = "Thaumcraft"),
@Interface(iface = "thaumcraft.api.nodes.IRevealer", modid = "Thaumcraft"),
@Interface(iface = "mods.railcraft.api.core.items.IToolGoggles", modid = "Railcraft"),
@Interface(iface = "forestry.api.apiculture.IArmorApiarist", modid = "Forestry"),
@Interface(iface = "forestry.api.core.IArmorNaturalist", modid = "Forestry") })
public class ItemDarkSteelArmor extends ItemArmor
implements IEnergyContainerItem, ISpecialArmor, IAdvancedTooltipProvider, IDarkSteelItem, IGoggles, IRevealer,
IVisDiscountGear, IArmorApiarist, IArmorNaturalist {
IVisDiscountGear, IArmorApiarist, IArmorNaturalist, IToolGoggles {
public static final ArmorMaterial MATERIAL = EnumHelper
.addArmorMaterial("darkSteel", 35, new int[] { 2, 6, 5, 2 }, 15);
@@ -125,10 +131,9 @@ public class ItemDarkSteelArmor extends ItemArmor
GameRegistry.registerItem(this, getUnlocalizedName());
}
@SuppressWarnings({ "unchecked", "rawtypes" })
@Override
@SideOnly(Side.CLIENT)
public void getSubItems(Item item, CreativeTabs par2CreativeTabs, List par3List) {
public void getSubItems(Item item, CreativeTabs par2CreativeTabs, List<ItemStack> par3List) {
ItemStack is = new ItemStack(this);
par3List.add(is);
@@ -163,17 +168,17 @@ public class ItemDarkSteelArmor extends ItemArmor
}
@Override
public void addCommonEntries(ItemStack itemstack, EntityPlayer entityplayer, List list, boolean flag) {
public void addCommonEntries(ItemStack itemstack, EntityPlayer entityplayer, List<String> list, boolean flag) {
DarkSteelRecipeManager.instance.addCommonTooltipEntries(itemstack, entityplayer, list, flag);
}
@Override
public void addBasicEntries(ItemStack itemstack, EntityPlayer entityplayer, List list, boolean flag) {
public void addBasicEntries(ItemStack itemstack, EntityPlayer entityplayer, List<String> list, boolean flag) {
DarkSteelRecipeManager.instance.addBasicTooltipEntries(itemstack, entityplayer, list, flag);
}
@Override
public void addDetailedEntries(ItemStack itemstack, EntityPlayer entityplayer, List list, boolean flag) {
public void addDetailedEntries(ItemStack itemstack, EntityPlayer entityplayer, List<String> list, boolean flag) {
if (!Config.addDurabilityTootip) {
list.add(ItemUtil.getDurabilityString(itemstack));
}
@@ -322,9 +327,45 @@ public class ItemDarkSteelArmor extends ItemArmor
@Override
@Method(modid = "Forestry")
public boolean canSeePollination(EntityPlayer player, ItemStack armor, boolean doSee) {
if (armor == null || DarkSteelItems.isArmorPart(armor.getItem(), 0)) {
if (armor == null || !DarkSteelItems.isArmorPart(armor.getItem(), 0)) {
return false;
}
return NaturalistEyeUpgrade.isUpgradeEquipped(player);
}
// Railcraft
public void incrementAura(ItemStack goggles) {
if (goggles != null && goggles.getItem() instanceof ItemDarkSteelArmor
&& DarkSteelItems.isArmorPart(goggles.getItem(), 0)) {
NBTTagCompound data = goggles.getTagCompound();
if (data == null) {
data = new NBTTagCompound();
goggles.setTagCompound(data);
}
byte aura = data.getByte("aura");
aura++;
if (aura >= GoggleAura.VALUES.length) aura = 0;
data.setByte("aura", aura);
if (this.getCurrentAura(goggles) == GoggleAura.TRACKING && !RailcraftConfig.isTrackingAuraEnabled()) {
incrementAura(goggles);
}
}
}
@Override
@Method(modid = "Railcraft")
public GoggleAura getCurrentAura(ItemStack goggles) {
if (TrackmanGogglesUpgrade.loadFromItem(goggles) != null) {
NBTTagCompound data = goggles.getTagCompound();
if (data != null) {
return GoggleAura.VALUES[data.getByte("aura")];
} else {
return GoggleAura.NONE;
}
} else {
return GoggleAura.NONE;
}
}
}
@@ -67,7 +67,6 @@ public class ItemDarkSteelAxe extends ItemAxe
public static ItemDarkSteelAxe create() {
ItemDarkSteelAxe res = new ItemDarkSteelAxe();
MinecraftForge.EVENT_BUS.register(res);
res.init();
return res;
}
@@ -96,7 +95,7 @@ public class ItemDarkSteelAxe extends ItemAxe
@Override
@SideOnly(Side.CLIENT)
public void getSubItems(Item item, CreativeTabs par2CreativeTabs, List par3List) {
public void getSubItems(Item item, CreativeTabs par2CreativeTabs, List<ItemStack> par3List) {
ItemStack is = new ItemStack(this);
par3List.add(is);
@@ -188,18 +187,6 @@ public class ItemDarkSteelAxe extends ItemAxe
return usedPower;
}
@SubscribeEvent
public void onBreakSpeedEvent(PlayerEvent.BreakSpeed evt) {
if (evt.entityPlayer.isSneaking()
&& isEquippedAndPowered(evt.entityPlayer, Config.darkSteelAxePowerUsePerDamagePointMultiHarvest)
&& isLog(evt.block, evt.metadata)) {
evt.newSpeed = evt.originalSpeed / Config.darkSteelAxeSpeedPenaltyMultiHarvest;
}
if (isEquipped(evt.entityPlayer) && evt.block.getMaterial() == Material.leaves) {
evt.newSpeed = 6;
}
}
@Override
public boolean onItemUse(ItemStack item, EntityPlayer player, World world, int x, int y, int z, int side,
float par8, float par9, float par10) {
@@ -258,6 +245,7 @@ public class ItemDarkSteelAxe extends ItemAxe
protected void init() {
GameRegistry.registerItem(this, getUnlocalizedName());
MinecraftForge.EVENT_BUS.register(new EventHandler());
}
@Override
@@ -287,17 +275,17 @@ public class ItemDarkSteelAxe extends ItemAxe
}
@Override
public void addCommonEntries(ItemStack itemstack, EntityPlayer entityplayer, List list, boolean flag) {
public void addCommonEntries(ItemStack itemstack, EntityPlayer entityplayer, List<String> list, boolean flag) {
DarkSteelRecipeManager.instance.addCommonTooltipEntries(itemstack, entityplayer, list, flag);
}
@Override
public void addBasicEntries(ItemStack itemstack, EntityPlayer entityplayer, List list, boolean flag) {
public void addBasicEntries(ItemStack itemstack, EntityPlayer entityplayer, List<String> list, boolean flag) {
DarkSteelRecipeManager.instance.addBasicTooltipEntries(itemstack, entityplayer, list, flag);
}
@Override
public void addDetailedEntries(ItemStack itemstack, EntityPlayer entityplayer, List list, boolean flag) {
public void addDetailedEntries(ItemStack itemstack, EntityPlayer entityplayer, List<String> list, boolean flag) {
if (!Config.addDurabilityTootip) {
list.add(ItemUtil.getDurabilityString(itemstack));
}
@@ -328,7 +316,7 @@ public class ItemDarkSteelAxe extends ItemAxe
public int compare(BlockCoord arg0, BlockCoord arg1) {
int d1 = refPoint.getDistSq(arg0);
int d2 = refPoint.getDistSq(arg1);
return compare(d1, d1);
return compare(d1, d2);
}
// NB: Copy of Integer.compare, which i sonly in Java 1.7+
@@ -336,4 +324,19 @@ public class ItemDarkSteelAxe extends ItemAxe
return (x < y) ? -1 : ((x == y) ? 0 : 1);
}
}
public class EventHandler {
@SubscribeEvent
public void onBreakSpeedEvent(PlayerEvent.BreakSpeed evt) {
if (evt.entityPlayer.isSneaking()
&& isEquippedAndPowered(evt.entityPlayer, Config.darkSteelAxePowerUsePerDamagePointMultiHarvest)
&& isLog(evt.block, evt.metadata)) {
evt.newSpeed = evt.originalSpeed / Config.darkSteelAxeSpeedPenaltyMultiHarvest;
}
if (isEquipped(evt.entityPlayer) && evt.block.getMaterial() == Material.leaves) {
evt.newSpeed = 6;
}
}
}
}
@@ -16,7 +16,6 @@ import net.minecraft.item.ItemStack;
import net.minecraft.util.EnumChatFormatting;
import net.minecraft.world.World;
import net.minecraftforge.common.ForgeHooks;
import net.minecraftforge.common.MinecraftForge;
import com.enderio.core.api.client.gui.IAdvancedTooltipProvider;
import com.enderio.core.common.util.ItemUtil;
@@ -34,7 +33,7 @@ import crazypants.enderio.config.Config;
import crazypants.enderio.item.darksteel.upgrade.EnergyUpgrade;
import crazypants.enderio.item.darksteel.upgrade.SpoonUpgrade;
import crazypants.enderio.item.darksteel.upgrade.TravelUpgrade;
import crazypants.enderio.machine.power.PowerDisplayUtil;
import crazypants.enderio.power.PowerDisplayUtil;
import crazypants.enderio.teleport.TravelController;
public class ItemDarkSteelPickaxe extends ItemPickaxe
@@ -61,7 +60,6 @@ public class ItemDarkSteelPickaxe extends ItemPickaxe
public static ItemDarkSteelPickaxe create() {
ItemDarkSteelPickaxe res = new ItemDarkSteelPickaxe();
res.init();
MinecraftForge.EVENT_BUS.register(res);
return res;
}
@@ -83,7 +81,7 @@ public class ItemDarkSteelPickaxe extends ItemPickaxe
@Override
@SideOnly(Side.CLIENT)
public void getSubItems(Item item, CreativeTabs par2CreativeTabs, List par3List) {
public void getSubItems(Item item, CreativeTabs par2CreativeTabs, List<ItemStack> par3List) {
ItemStack is = new ItemStack(this);
par3List.add(is);
@@ -274,17 +272,17 @@ public class ItemDarkSteelPickaxe extends ItemPickaxe
}
@Override
public void addCommonEntries(ItemStack itemstack, EntityPlayer entityplayer, List list, boolean flag) {
public void addCommonEntries(ItemStack itemstack, EntityPlayer entityplayer, List<String> list, boolean flag) {
DarkSteelRecipeManager.instance.addCommonTooltipEntries(itemstack, entityplayer, list, flag);
}
@Override
public void addBasicEntries(ItemStack itemstack, EntityPlayer entityplayer, List list, boolean flag) {
public void addBasicEntries(ItemStack itemstack, EntityPlayer entityplayer, List<String> list, boolean flag) {
DarkSteelRecipeManager.instance.addBasicTooltipEntries(itemstack, entityplayer, list, flag);
}
@Override
public void addDetailedEntries(ItemStack itemstack, EntityPlayer entityplayer, List list, boolean flag) {
public void addDetailedEntries(ItemStack itemstack, EntityPlayer entityplayer, List<String> list, boolean flag) {
if (!Config.addDurabilityTootip) {
list.add(ItemUtil.getDurabilityString(itemstack));
}
@@ -62,13 +62,12 @@ public class ItemDarkSteelShears extends ItemShears
public static ItemDarkSteelShears create() {
ItemDarkSteelShears res = new ItemDarkSteelShears();
MinecraftForge.EVENT_BUS.register(res);
res.init();
return res;
}
protected final MultiHarvestComparator harvestComparator = new MultiHarvestComparator();
protected final EntityComparator entityComparator = new EntityComparator();
private final MultiHarvestComparator harvestComparator = new MultiHarvestComparator();
private final EntityComparator entityComparator = new EntityComparator();
protected String name;
protected ItemDarkSteelShears(String name) {
@@ -92,7 +91,7 @@ public class ItemDarkSteelShears extends ItemShears
@Override
@SideOnly(Side.CLIENT)
public void getSubItems(Item item, CreativeTabs par2CreativeTabs, List par3List) {
public void getSubItems(Item item, CreativeTabs par2CreativeTabs, List<ItemStack> par3List) {
ItemStack is = new ItemStack(this);
par3List.add(is);
@@ -163,6 +162,7 @@ public class ItemDarkSteelShears extends ItemShears
}
};
@SuppressWarnings("unchecked")
@Override
public boolean itemInteractionForEntity(ItemStack itemstack, EntityPlayer player, EntityLivingBase entity) {
if (entity.worldObj.isRemote) {
@@ -182,15 +182,15 @@ public class ItemDarkSteelShears extends ItemShears
entity.posX + Config.darkSteelShearsEntityAreaBoostWhenPowered,
entity.posY + Config.darkSteelShearsEntityAreaBoostWhenPowered,
entity.posZ + Config.darkSteelShearsEntityAreaBoostWhenPowered);
List<Entity> sortedTargets = new ArrayList<Entity>(
List<IShearable> sortedTargets = new ArrayList<>(
entity.worldObj.selectEntitiesWithinAABB(IShearable.class, bb, selectShearable));
entityComparator.refPoint = entity;
Collections.sort(sortedTargets, entityComparator);
Collections.sort((List<Entity>) (Object) sortedTargets, entityComparator);
boolean result = false;
int maxSheep = Math.min(sortedTargets.size(), powerStored / Config.darkSteelShearsPowerUsePerDamagePoint);
for (int i = 0; i < maxSheep; i++) {
Entity entity2 = sortedTargets.get(i);
Entity entity2 = (Entity) sortedTargets.get(i);
if (entity2 instanceof EntityLivingBase
&& super.itemInteractionForEntity(itemstack, player, (EntityLivingBase) entity2)) {
result = true;
@@ -201,14 +201,6 @@ public class ItemDarkSteelShears extends ItemShears
return false;
}
@SubscribeEvent
public void onBreakSpeedEvent(PlayerEvent.BreakSpeed evt) {
if (evt.originalSpeed > 2.0
&& isEquippedAndPowered(evt.entityPlayer, Config.darkSteelShearsPowerUsePerDamagePoint)) {
evt.newSpeed = evt.originalSpeed * Config.darkSteelShearsEffeciencyBoostWhenPowered;
}
}
@Override
public void setDamage(ItemStack stack, int newDamage) {
int oldDamage = getDamage(stack);
@@ -230,6 +222,7 @@ public class ItemDarkSteelShears extends ItemShears
protected void init() {
GameRegistry.registerItem(this, getUnlocalizedName());
MinecraftForge.EVENT_BUS.register(new EventHandler());
}
@Override
@@ -264,17 +257,17 @@ public class ItemDarkSteelShears extends ItemShears
}
@Override
public void addCommonEntries(ItemStack itemstack, EntityPlayer entityplayer, List list, boolean flag) {
public void addCommonEntries(ItemStack itemstack, EntityPlayer entityplayer, List<String> list, boolean flag) {
DarkSteelRecipeManager.instance.addCommonTooltipEntries(itemstack, entityplayer, list, flag);
}
@Override
public void addBasicEntries(ItemStack itemstack, EntityPlayer entityplayer, List list, boolean flag) {
public void addBasicEntries(ItemStack itemstack, EntityPlayer entityplayer, List<String> list, boolean flag) {
DarkSteelRecipeManager.instance.addBasicTooltipEntries(itemstack, entityplayer, list, flag);
}
@Override
public void addDetailedEntries(ItemStack itemstack, EntityPlayer entityplayer, List list, boolean flag) {
public void addDetailedEntries(ItemStack itemstack, EntityPlayer entityplayer, List<String> list, boolean flag) {
if (!Config.addDurabilityTootip) {
list.add(ItemUtil.getDurabilityString(itemstack));
}
@@ -329,4 +322,15 @@ public class ItemDarkSteelShears extends ItemShears
return 0;
}
}
public static class EventHandler {
@SubscribeEvent
public void onBreakSpeedEvent(PlayerEvent.BreakSpeed evt) {
if (evt.originalSpeed > 2.0
&& isEquippedAndPowered(evt.entityPlayer, Config.darkSteelShearsPowerUsePerDamagePoint)) {
evt.newSpeed = evt.originalSpeed * Config.darkSteelShearsEffeciencyBoostWhenPowered;
}
}
}
}
@@ -72,7 +72,6 @@ public class ItemDarkSteelSword extends ItemSword
public static ItemDarkSteelSword create() {
ItemDarkSteelSword res = new ItemDarkSteelSword();
res.init();
MinecraftForge.EVENT_BUS.register(res);
return res;
}
@@ -96,7 +95,7 @@ public class ItemDarkSteelSword extends ItemSword
@Override
@SideOnly(Side.CLIENT)
public void getSubItems(Item item, CreativeTabs par2CreativeTabs, List par3List) {
public void getSubItems(Item item, CreativeTabs par2CreativeTabs, List<ItemStack> par3List) {
ItemStack is = new ItemStack(this);
par3List.add(is);
@@ -117,71 +116,6 @@ public class ItemDarkSteelSword extends ItemSword
return false;
}
@SubscribeEvent
public void onEnderTeleport(EnderTeleportEvent evt) {
if (evt.entityLiving.getEntityData().getBoolean("hitByDarkSteelSword")) {
evt.setCanceled(true);
}
}
// Set priorty to lowest in the hope any other mod adding head drops will have already added them
// by the time this is called to prevent multiple head drops
@SubscribeEvent(priority = EventPriority.LOWEST)
public void onEntityDrop(LivingDropsEvent evt) {
if (!(evt.source.getEntity() instanceof EntityPlayer)) {
return;
}
EntityPlayer player = (EntityPlayer) evt.source.getEntity();
// Handle TiC weapons with beheading differently
if (handleBeheadingWeapons(player, evt)) {
return;
}
double skullDropChance = getSkullDropChance(player, evt);
if (player instanceof FakePlayer) {
skullDropChance *= Config.fakePlayerSkullChance;
}
if (Math.random() <= skullDropChance) {
dropSkull(evt, player);
}
// Special handling for ender pear drops
if (isEquipped(player)) {
String name = EntityList.getEntityString(evt.entityLiving);
if (evt.entityLiving instanceof EntityEnderman || ENDERZOO_ENDERMINY.equals(name)) {
int numPearls = 0;
if (Math.random() <= Config.darkSteelSwordEnderPearlDropChance) {
numPearls++;
}
for (int i = 0; i < evt.lootingLevel; i++) {
if (Math.random() <= Config.darkSteelSwordEnderPearlDropChancePerLooting) {
numPearls++;
}
}
int existing = 0;
for (EntityItem stack : evt.drops) {
if (stack.getEntityItem() != null && stack.getEntityItem().getItem() == Items.ender_pearl) {
existing += stack.getEntityItem().stackSize;
}
}
int toDrop = numPearls - existing;
if (toDrop > 0) {
evt.drops.add(
Util.createDrop(
player.worldObj,
new ItemStack(Items.ender_pearl, toDrop, 0),
evt.entityLiving.posX,
evt.entityLiving.posY,
evt.entityLiving.posZ,
false));
}
}
}
}
protected void dropSkull(LivingDropsEvent evt, EntityPlayer player) {
ItemStack skull = getSkullForEntity(evt.entityLiving);
if (skull != null && !containsDrop(evt, skull)) {
@@ -292,6 +226,7 @@ public class ItemDarkSteelSword extends ItemSword
protected void init() {
GameRegistry.registerItem(this, getUnlocalizedName());
MinecraftForge.EVENT_BUS.register(new EventHandler());
}
@Override
@@ -354,17 +289,17 @@ public class ItemDarkSteelSword extends ItemSword
}
@Override
public void addCommonEntries(ItemStack itemstack, EntityPlayer entityplayer, List list, boolean flag) {
public void addCommonEntries(ItemStack itemstack, EntityPlayer entityplayer, List<String> list, boolean flag) {
DarkSteelRecipeManager.instance.addCommonTooltipEntries(itemstack, entityplayer, list, flag);
}
@Override
public void addBasicEntries(ItemStack itemstack, EntityPlayer entityplayer, List list, boolean flag) {
public void addBasicEntries(ItemStack itemstack, EntityPlayer entityplayer, List<String> list, boolean flag) {
DarkSteelRecipeManager.instance.addBasicTooltipEntries(itemstack, entityplayer, list, flag);
}
@Override
public void addDetailedEntries(ItemStack itemstack, EntityPlayer entityplayer, List list, boolean flag) {
public void addDetailedEntries(ItemStack itemstack, EntityPlayer entityplayer, List<String> list, boolean flag) {
if (!Config.addDurabilityTootip) {
list.add(ItemUtil.getDurabilityString(itemstack));
}
@@ -386,7 +321,15 @@ public class ItemDarkSteelSword extends ItemSword
@Override
public boolean isActive(EntityPlayer ep, ItemStack equipped) {
return isTravelUpgradeActive(ep, equipped);
if (ep != null && equipped != null && isTravelUpgradeActive(ep, equipped)) {
// Only "active" if held while sneaking. But still "active" for the purposes of travel keybind if not held
if (isEquipped(ep)) {
return ep.isSneaking();
} else {
return true;
}
}
return false;
}
@Override
@@ -400,12 +343,12 @@ public class ItemDarkSteelSword extends ItemSword
}
private boolean isTravelUpgradeActive(EntityPlayer ep, ItemStack equipped) {
return isEquipped(ep) && ep.isSneaking() && TravelUpgrade.loadFromItem(equipped) != null;
return ep != null && equipped != null && TravelUpgrade.loadFromItem(equipped) != null;
}
@Override
public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) {
if (isTravelUpgradeActive(player, stack)) {
if (isActive(player, stack)) {
if (world.isRemote) {
if (TravelController.instance.activateTravelAccessable(stack, world, player, TravelSource.STAFF)) {
player.swingItem();
@@ -429,4 +372,73 @@ public class ItemDarkSteelSword extends ItemSword
return super.onItemRightClick(stack, world, player);
}
public class EventHandler {
@SubscribeEvent
public void onEnderTeleport(EnderTeleportEvent evt) {
if (evt.entityLiving.getEntityData().getBoolean("hitByDarkSteelSword")) {
evt.setCanceled(true);
}
}
// Set priorty to lowest in the hope any other mod adding head drops will have already added them
// by the time this is called to prevent multiple head drops
@SubscribeEvent(priority = EventPriority.LOWEST)
public void onEntityDrop(LivingDropsEvent evt) {
if (!(evt.source.getEntity() instanceof EntityPlayer)) {
return;
}
EntityPlayer player = (EntityPlayer) evt.source.getEntity();
// Handle TiC weapons with beheading differently
if (handleBeheadingWeapons(player, evt)) {
return;
}
double skullDropChance = getSkullDropChance(player, evt);
if (player instanceof FakePlayer) {
skullDropChance *= Config.fakePlayerSkullChance;
}
if (Math.random() <= skullDropChance) {
dropSkull(evt, player);
}
// Special handling for ender pear drops
if (isEquipped(player)) {
String name = EntityList.getEntityString(evt.entityLiving);
if (evt.entityLiving instanceof EntityEnderman || ENDERZOO_ENDERMINY.equals(name)) {
int numPearls = 0;
if (Math.random() <= Config.darkSteelSwordEnderPearlDropChance) {
numPearls++;
}
for (int i = 0; i < evt.lootingLevel; i++) {
if (Math.random() <= Config.darkSteelSwordEnderPearlDropChancePerLooting) {
numPearls++;
}
}
int existing = 0;
for (EntityItem stack : evt.drops) {
if (stack.getEntityItem() != null && stack.getEntityItem().getItem() == Items.ender_pearl) {
existing += stack.getEntityItem().stackSize;
}
}
int toDrop = numPearls - existing;
if (toDrop > 0) {
evt.drops.add(
Util.createDrop(
player.worldObj,
new ItemStack(Items.ender_pearl, toDrop, 0),
evt.entityLiving.posX,
evt.entityLiving.posY,
evt.entityLiving.posZ,
false));
}
}
}
}
}
}
@@ -8,13 +8,17 @@ import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraftforge.common.util.EnumHelper;
import cpw.mods.fml.common.Optional;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import crazypants.enderio.item.darksteel.IDarkSteelItem.IEndSteelItem;
import crazypants.enderio.item.darksteel.upgrade.EnergyUpgrade;
import crazypants.enderio.item.darksteel.upgrade.IDarkSteelUpgrade;
import gregtech.api.hazards.Hazard;
import gregtech.api.hazards.IHazardProtector;
public class ItemEndSteelArmor extends ItemDarkSteelArmor implements IEndSteelItem {
@Optional.InterfaceList({ @Optional.Interface(iface = "gregtech.api.hazards.IHazardProtector", modid = "gregtech_nh") })
public class ItemEndSteelArmor extends ItemDarkSteelArmor implements IEndSteelItem, IHazardProtector {
public static final ArmorMaterial MATERIAL = EnumHelper
.addArmorMaterial("endSteel", 50, new int[] { 4, 7, 10, 5 }, 25);
@@ -56,10 +60,9 @@ public class ItemEndSteelArmor extends ItemDarkSteelArmor implements IEndSteelIt
return 0;
}
@SuppressWarnings({ "unchecked", "rawtypes" })
@Override
@SideOnly(Side.CLIENT)
public void getSubItems(Item item, CreativeTabs par2CreativeTabs, List par3List) {
public void getSubItems(Item item, CreativeTabs par2CreativeTabs, List<ItemStack> par3List) {
ItemStack is = new ItemStack(this);
par3List.add(is);
@@ -77,4 +80,11 @@ public class ItemEndSteelArmor extends ItemDarkSteelArmor implements IEndSteelIt
par3List.add(is);
}
/// GT5 Hazmat protection
@Optional.Method(modid = "gregtech_nh")
@Override
public boolean protectsAgainst(ItemStack itemStack, Hazard hazard) {
return true;
}
}
@@ -6,7 +6,6 @@ import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraftforge.common.MinecraftForge;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
@@ -30,7 +29,6 @@ public class ItemEndSteelAxe extends ItemDarkSteelAxe implements IEndSteelItem {
public static ItemEndSteelAxe create() {
ItemEndSteelAxe res = new ItemEndSteelAxe();
res.init();
MinecraftForge.EVENT_BUS.register(res);
return res;
}
@@ -40,7 +38,7 @@ public class ItemEndSteelAxe extends ItemDarkSteelAxe implements IEndSteelItem {
@Override
@SideOnly(Side.CLIENT)
public void getSubItems(Item item, CreativeTabs par2CreativeTabs, List par3List) {
public void getSubItems(Item item, CreativeTabs par2CreativeTabs, List<ItemStack> par3List) {
ItemStack is = new ItemStack(this);
par3List.add(is);
@@ -6,7 +6,6 @@ import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraftforge.common.MinecraftForge;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
@@ -30,7 +29,6 @@ public class ItemEndSteelPickaxe extends ItemDarkSteelPickaxe implements IEndSte
public static ItemEndSteelPickaxe create() {
ItemEndSteelPickaxe res = new ItemEndSteelPickaxe();
res.init();
MinecraftForge.EVENT_BUS.register(res);
return res;
}
@@ -40,7 +38,7 @@ public class ItemEndSteelPickaxe extends ItemDarkSteelPickaxe implements IEndSte
@Override
@SideOnly(Side.CLIENT)
public void getSubItems(Item item, CreativeTabs par2CreativeTabs, List par3List) {
public void getSubItems(Item item, CreativeTabs par2CreativeTabs, List<ItemStack> par3List) {
ItemStack is = new ItemStack(this);
par3List.add(is);
@@ -6,7 +6,6 @@ import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.common.util.EnumHelper;
import cpw.mods.fml.relauncher.Side;
@@ -35,7 +34,6 @@ public class ItemEndSteelSword extends ItemDarkSteelSword implements IEndSteelIt
public static ItemEndSteelSword create() {
ItemEndSteelSword res = new ItemEndSteelSword();
res.init();
MinecraftForge.EVENT_BUS.register(res);
return res;
}
@@ -45,7 +43,7 @@ public class ItemEndSteelSword extends ItemDarkSteelSword implements IEndSteelIt
@Override
@SideOnly(Side.CLIENT)
public void getSubItems(Item item, CreativeTabs par2CreativeTabs, List par3List) {
public void getSubItems(Item item, CreativeTabs par2CreativeTabs, List<ItemStack> par3List) {
ItemStack is = new ItemStack(this);
par3List.add(is);
@@ -70,9 +70,8 @@ public class ItemGliderWing extends Item implements IResourceTooltipProvider {
}
@Override
@SuppressWarnings({ "rawtypes", "unchecked" })
@SideOnly(Side.CLIENT)
public void getSubItems(Item par1, CreativeTabs par2CreativeTabs, List par3List) {
public void getSubItems(Item par1, CreativeTabs par2CreativeTabs, List<ItemStack> par3List) {
for (int j = 0; j < 2; ++j) {
par3List.add(new ItemStack(par1, 1, j));
}
@@ -8,13 +8,17 @@ import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraftforge.common.util.EnumHelper;
import cpw.mods.fml.common.Optional;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import crazypants.enderio.item.darksteel.IDarkSteelItem.IStellarItem;
import crazypants.enderio.item.darksteel.upgrade.EnergyUpgrade;
import crazypants.enderio.item.darksteel.upgrade.IDarkSteelUpgrade;
import gregtech.api.hazards.Hazard;
import gregtech.api.hazards.IHazardProtector;
public class ItemStellarArmor extends ItemDarkSteelArmor implements IStellarItem {
@Optional.InterfaceList({ @Optional.Interface(iface = "gregtech.api.hazards.IHazardProtector", modid = "gregtech_nh") })
public class ItemStellarArmor extends ItemDarkSteelArmor implements IStellarItem, IHazardProtector {
public static final ArmorMaterial MATERIAL = EnumHelper
.addArmorMaterial("stellarAlloy", 75, new int[] { 8, 14, 18, 7 }, 25);
@@ -57,10 +61,9 @@ public class ItemStellarArmor extends ItemDarkSteelArmor implements IStellarItem
return 0;
}
@SuppressWarnings({ "unchecked", "rawtypes" })
@Override
@SideOnly(Side.CLIENT)
public void getSubItems(Item item, CreativeTabs par2CreativeTabs, List par3List) {
public void getSubItems(Item item, CreativeTabs par2CreativeTabs, List<ItemStack> par3List) {
ItemStack is = new ItemStack(this);
par3List.add(is);
@@ -78,4 +81,11 @@ public class ItemStellarArmor extends ItemDarkSteelArmor implements IStellarItem
par3List.add(is);
}
/// GT5 Hazmat protection
@Optional.Method(modid = "gregtech_nh")
@Override
public boolean protectsAgainst(ItemStack itemStack, Hazard hazard) {
return true;
}
}
@@ -6,7 +6,6 @@ import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraftforge.common.MinecraftForge;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
@@ -30,7 +29,6 @@ public class ItemStellarAxe extends ItemDarkSteelAxe implements IStellarItem {
public static ItemStellarAxe create() {
ItemStellarAxe res = new ItemStellarAxe();
res.init();
MinecraftForge.EVENT_BUS.register(res);
return res;
}
@@ -40,7 +38,7 @@ public class ItemStellarAxe extends ItemDarkSteelAxe implements IStellarItem {
@Override
@SideOnly(Side.CLIENT)
public void getSubItems(Item item, CreativeTabs par2CreativeTabs, List par3List) {
public void getSubItems(Item item, CreativeTabs par2CreativeTabs, List<ItemStack> par3List) {
ItemStack is = new ItemStack(this);
par3List.add(is);
@@ -6,7 +6,6 @@ import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraftforge.common.MinecraftForge;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
@@ -30,7 +29,6 @@ public class ItemStellarPickaxe extends ItemDarkSteelPickaxe implements IStellar
public static ItemStellarPickaxe create() {
ItemStellarPickaxe res = new ItemStellarPickaxe();
res.init();
MinecraftForge.EVENT_BUS.register(res);
return res;
}
@@ -40,7 +38,7 @@ public class ItemStellarPickaxe extends ItemDarkSteelPickaxe implements IStellar
@Override
@SideOnly(Side.CLIENT)
public void getSubItems(Item item, CreativeTabs par2CreativeTabs, List par3List) {
public void getSubItems(Item item, CreativeTabs par2CreativeTabs, List<ItemStack> par3List) {
ItemStack is = new ItemStack(this);
par3List.add(is);
@@ -6,7 +6,6 @@ import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.common.util.EnumHelper;
import cpw.mods.fml.relauncher.Side;
@@ -35,7 +34,6 @@ public class ItemStellarSword extends ItemDarkSteelSword implements IStellarItem
public static ItemStellarSword create() {
ItemStellarSword res = new ItemStellarSword();
res.init();
MinecraftForge.EVENT_BUS.register(res);
return res;
}
@@ -45,7 +43,7 @@ public class ItemStellarSword extends ItemDarkSteelSword implements IStellarItem
@Override
@SideOnly(Side.CLIENT)
public void getSubItems(Item item, CreativeTabs par2CreativeTabs, List par3List) {
public void getSubItems(Item item, CreativeTabs par2CreativeTabs, List<ItemStack> par3List) {
ItemStack is = new ItemStack(this);
par3List.add(is);
@@ -32,8 +32,6 @@ public class SoundRenderer extends RenderEntity {
GL11.glColor4f(1, 1, 1, alpha);
float scale = se.lifeSpan / 20f;
EntityClientPlayerMP player = Minecraft.getMinecraft().thePlayer;
GL11.glPushMatrix();
GL11.glTranslatef((float) x, (float) y, (float) z);
@@ -66,19 +66,19 @@ public abstract class AbstractUpgrade implements IDarkSteelUpgrade {
@Override
@SideOnly(Side.CLIENT)
public void addCommonEntries(ItemStack itemstack, EntityPlayer entityplayer, List list, boolean flag) {
public void addCommonEntries(ItemStack itemstack, EntityPlayer entityplayer, List<String> list, boolean flag) {
SpecialTooltipHandler.addCommonTooltipFromResources(list, getUnlocalizedName());
}
@Override
@SideOnly(Side.CLIENT)
public void addBasicEntries(ItemStack itemstack, EntityPlayer entityplayer, List list, boolean flag) {
public void addBasicEntries(ItemStack itemstack, EntityPlayer entityplayer, List<String> list, boolean flag) {
list.add(EnumChatFormatting.DARK_AQUA + EnderIO.lang.localizeExact(getUnlocalizedName() + ".name"));
}
@Override
@SideOnly(Side.CLIENT)
public void addDetailedEntries(ItemStack itemstack, EntityPlayer entityplayer, List list, boolean flag) {
public void addDetailedEntries(ItemStack itemstack, EntityPlayer entityplayer, List<String> list, boolean flag) {
list.add(EnumChatFormatting.DARK_AQUA + EnderIO.lang.localizeExact(getUnlocalizedName() + ".name"));
SpecialTooltipHandler.addDetailedTooltipFromResources(list, getUnlocalizedName());
}
@@ -17,8 +17,8 @@ import crazypants.enderio.EnderIO;
import crazypants.enderio.config.Config;
import crazypants.enderio.item.darksteel.IDarkSteelItem;
import crazypants.enderio.item.darksteel.IDarkSteelItem.IEndSteelItem;
import crazypants.enderio.machine.power.PowerDisplayUtil;
import crazypants.enderio.material.Material;
import crazypants.enderio.power.PowerDisplayUtil;
public class EnergyUpgrade extends AbstractUpgrade {
@@ -216,7 +216,7 @@ public class EnergyUpgrade extends AbstractUpgrade {
@Override
@SideOnly(Side.CLIENT)
public void addDetailedEntries(ItemStack itemstack, EntityPlayer entityplayer, List list, boolean flag) {
public void addDetailedEntries(ItemStack itemstack, EntityPlayer entityplayer, List<String> list, boolean flag) {
List<String> upgradeStr = new ArrayList<String>();
upgradeStr.add(EnumChatFormatting.DARK_AQUA + EnderIO.lang.localizeExact(getUnlocalizedName() + ".name"));
@@ -0,0 +1,85 @@
package crazypants.enderio.item.darksteel.upgrade;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import cpw.mods.fml.common.registry.GameRegistry;
import crazypants.enderio.config.Config;
import crazypants.enderio.item.darksteel.DarkSteelItems;
public class TrackmanGogglesUpgrade extends AbstractUpgrade {
private static String UPGRADE_NAME = "trackmansGoggles";
public static final TrackmanGogglesUpgrade INSTANCE = new TrackmanGogglesUpgrade();
public static ItemStack getGoggles() {
Item i = GameRegistry.findItem("Railcraft", "armor.goggles");
if (i != null) {
return new ItemStack(i);
}
return null;
}
public static TrackmanGogglesUpgrade loadFromItem(ItemStack stack) {
if (stack == null) {
return null;
}
if (stack.stackTagCompound == null) {
return null;
}
if (!stack.stackTagCompound.hasKey(KEY_UPGRADE_PREFIX + UPGRADE_NAME)) {
return null;
}
return new TrackmanGogglesUpgrade(
(NBTTagCompound) stack.stackTagCompound.getTag(KEY_UPGRADE_PREFIX + UPGRADE_NAME));
}
public static boolean isUpgradeEquipped(EntityPlayer player) {
ItemStack helmet = player.getEquipmentInSlot(4);
return TrackmanGogglesUpgrade.loadFromItem(helmet) != null;
}
public TrackmanGogglesUpgrade(NBTTagCompound tag) {
super(UPGRADE_NAME, tag);
}
public TrackmanGogglesUpgrade() {
super(
UPGRADE_NAME,
"enderio.darksteel.upgrade.trackmansGoggles",
getGoggles(),
Config.darkSteelTrackmanGogglesCost);
}
@Override
public boolean canAddToItem(ItemStack stack) {
if (stack == null || !DarkSteelItems.isArmorPart(stack.getItem(), 0) || getUpgradeItem() == null) {
return false;
}
TrackmanGogglesUpgrade up = loadFromItem(stack);
return up == null;
}
@Override
public void writeUpgradeToNBT(NBTTagCompound upgradeRoot) {}
@Override
public ItemStack getUpgradeItem() {
if (upgradeItem != null) {
return upgradeItem;
}
upgradeItem = getGoggles();
return upgradeItem;
}
@Override
public String getUpgradeItemName() {
if (getUpgradeItem() == null) {
return "Trackman's Helmet";
}
return super.getUpgradeItemName();
}
}
@@ -29,9 +29,8 @@ public class ItemEndermanSkull extends ItemBlockWithMetadata {
}
@Override
@SuppressWarnings({ "rawtypes", "unchecked" })
@SideOnly(Side.CLIENT)
public void getSubItems(Item par1, CreativeTabs par2CreativeTabs, List par3List) {
public void getSubItems(Item par1, CreativeTabs par2CreativeTabs, List<ItemStack> par3List) {
for (int j = 0; j < SkullType.values().length; ++j) {
if (!SkullType.values()[j].showEyes) {
par3List.add(new ItemStack(par1, 1, j));
@@ -168,7 +168,8 @@ 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() > 0
&& itemstack.getItemDamage() != 7;
}
return isMachineItemValidForSlot(i, itemstack);
}
@@ -221,15 +221,12 @@ public abstract class AbstractPoweredTaskEntity extends AbstractPowerConsumerEnt
protected int mergeItemResult(ItemStack item, List<ItemStack> outputStacks) {
int res = 0;
ItemStack copy = item.copy();
// try to add it to existing stacks first
for (ItemStack outStack : outputStacks) {
if (outStack != null && copy != null) {
int num = getNumCanMerge(outStack, copy);
outStack.stackSize += num;
res += num;
copy.stackSize -= num;
if (copy.stackSize <= 0) {
return item.stackSize;
@@ -28,7 +28,6 @@ import crazypants.enderio.item.skull.BlockEndermanSkull;
import crazypants.enderio.machine.buffer.BlockItemBuffer.Type;
import crazypants.enderio.machine.capbank.BlockItemCapBank;
import crazypants.enderio.machine.capbank.CapBankType;
import crazypants.enderio.machine.capbank.ConvertOldRecipe;
import crazypants.enderio.machine.light.BlockItemElectricLight;
import crazypants.enderio.material.FrankenSkull;
import crazypants.enderio.material.MachinePart;
@@ -343,9 +342,6 @@ public class MachineRecipes {
.createItemStackWithPower(CapBankType.getMetaFromType(CapBankType.VIBRANT), 0);
RecipeUtil.addShaped(capBank3, "bcb", "cmc", "bcb", 'b', electricalSteel, 'c', capacitor3, 'm', vibCry);
ConvertOldRecipe convertRecipe = new ConvertOldRecipe();
GameRegistry.addRecipe(convertRecipe);
GameRegistry.addRecipe(
new UpgradeCapBankRecipe(
capBank2,
@@ -25,7 +25,6 @@ public class OverlayRenderer implements IRenderFace {
this.te = te;
}
@SuppressWarnings("unchecked")
@Override
public void renderFace(CustomRenderBlocks rb, ForgeDirection face, Block par1Block, double x, double y, double z,
IIcon texture, List<Vertex> refVertices, boolean translateToXyz) {
@@ -41,6 +40,7 @@ public class OverlayRenderer implements IRenderFace {
Tessellator.instance.addTranslation((float) offset.x, (float) offset.y, (float) offset.z);
IoMode mode = te.getIoMode(face);
@SuppressWarnings("unchecked")
IIcon tex = ((AbstractMachineBlock<AbstractMachineEntity>) par1Block).getOverlayIconForMode(te, face, mode);
if (tex != null) {
ccr.getCustomRenderBlocks().setRenderBoundsFromBlock(par1Block);
@@ -47,10 +47,10 @@ public class TechneMachineRenderer<T extends AbstractMachineEntity> extends Tech
super.renderInventoryBlock(block, metadata, modelId, renderer);
}
@SuppressWarnings("unchecked")
@Override
public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId,
RenderBlocks renderer) {
@SuppressWarnings("unchecked")
T te = (T) world.getTileEntity(x, y, z);
if (te != null) {
setFacingDir(te.getFacingDir());
@@ -38,14 +38,13 @@ public class GuiAlloySmelter extends GuiPoweredMachineBase<TileAlloySmelter> {
vanillaFurnaceButton.setSize(BUTTON_SIZE, BUTTON_SIZE);
vanillaFurnaceTooltip = new GuiToolTip(
new Rectangle(xSize - 5 - BUTTON_SIZE, 62, BUTTON_SIZE, BUTTON_SIZE),
new Rectangle(xSize - 5 - BUTTON_SIZE, 43, BUTTON_SIZE, BUTTON_SIZE),
(String[]) null);
addProgressTooltip(55, 35, 14, 14);
addProgressTooltip(103, 35, 14, 14);
}
@SuppressWarnings("unchecked")
@Override
public void initGui() {
super.initGui();
@@ -102,7 +102,6 @@ public class VanillaSmeltingRecipe implements IMachineRecipe {
@Override
public ResultStack[] getCompletedResult(float chance, MachineRecipeInput... inputs) {
ItemStack output = null;
int inputCount = 0;
for (MachineRecipeInput ri : inputs) {
if (ri != null && ri.item != null && output == null) {
output = FurnaceRecipes.smelting().getSmeltingResult(ri.item);
@@ -53,10 +53,9 @@ public class BlockItemBuffer extends ItemBlockWithMetadata {
super(block, block);
}
@SuppressWarnings({ "rawtypes", "unchecked" })
@Override
@SideOnly(Side.CLIENT)
public void getSubItems(Item item, CreativeTabs tab, List list) {
public void getSubItems(Item item, CreativeTabs tab, List<ItemStack> list) {
for (Type type : Type.values()) {
list.add(new ItemStack(item, 1, type.ordinal()));
}
@@ -11,8 +11,8 @@ import com.enderio.core.client.render.RenderUtil;
import crazypants.enderio.EnderIO;
import crazypants.enderio.machine.IoMode;
import crazypants.enderio.machine.gui.GuiPoweredMachineBase;
import crazypants.enderio.machine.power.PowerDisplayUtil;
import crazypants.enderio.network.PacketHandler;
import crazypants.enderio.power.PowerDisplayUtil;
public class GuiBuffer extends GuiPoweredMachineBase<TileBuffer> {
@@ -93,11 +93,6 @@ public class GuiBuffer extends GuiPoweredMachineBase<TileBuffer> {
PacketHandler.INSTANCE.sendToServer(new PacketBufferIO(getTileEntity(), lastInput, lastOutput));
}
@Override
protected boolean showRecipeButton() {
return false;
}
@Override
protected boolean renderPowerBar() {
return getTileEntity().hasPower();
Loaded 100 of 288 files, more files were not shown because too many files have changed in this diff. Show more