Compare commits

..
Author SHA1 Message Date
Martin Robertz d757a64025 update 2024-05-20 11:34:20 +02:00
Martin Robertz 508bcb3b35 Merge remote-tracking branch 'origin/projectred-wires' into dev 2024-05-20 11:22:24 +02:00
Lyfts a70f256a6b Add signal strength indicator for projectred wires 2024-05-19 21:28:38 +02:00
Quarri6343 4b1223a137 fixed broken Maintained mod 2024-05-09 02:54:31 +09:00
Quarri6343 152d446d87 spotless 2024-05-09 01:34:36 +09:00
Quarri6343 6bdc0776d6 fixed NBT required by old tooltips are unreachable when the new mode is enabled 2024-05-09 01:29:08 +09:00
Quarri6343 051a7a3154 embed WailaHarvestability 2024-05-09 01:11:14 +09:00
Quarri6343 2089056dd8 convert old Tooltip into new Probe format if possible 2024-05-08 18:06:13 +09:00
Quarri6343 408f47115d add Jade styled progress bar 2024-05-08 16:38:12 +09:00
Quarri6343 df80d81c2b fixed unreachable config option by make screen scrollable 2024-05-08 15:09:57 +09:00
Quarri6343 9af4543135 very minor naming fix 2024-05-08 10:47:03 +09:00
Quarri6343 4384079fe2 spotlessapply 2024-05-07 18:53:58 +09:00
Quarri6343 6589f1abc0 added detailed text configuration 2024-05-07 18:43:30 +09:00
Quarri6343 a585652bab fix typo and npe 2024-05-07 15:51:55 +09:00
Quarri6343 123e0eb902 packet access for IProbeDataProvider 2024-05-07 13:13:57 +09:00
Quarri6343 0de14a79a4 add a config to help debugging between old and new style 2024-05-07 09:24:12 +09:00
Quarri6343 b3c662ee3a add progress bar 2024-05-07 09:01:36 +09:00
Quarri6343 fff19357bc fix itemstack lighting issue 2024-05-07 07:06:44 +09:00
Quarri6343 07e733b548 introduce itemstack rendering 2024-05-07 02:13:25 +09:00
Quarri6343 320561c7bf finish new rendering foundation 2024-05-07 01:18:31 +09:00
mist475 2f738bc728 Add option to hide invisible players (#20)
* add option to hide invisible players

* fix some warnings
2024-04-17 08:25:25 +02:00
Mist475 8329a4f186 improve mod detection logging 2024-04-17 08:25:00 +02:00
Mist475 e5ab6193a5 update buildscript 2024-04-17 08:25:00 +02:00
mist475 18560992cd Cleanup codebase (#19)
* update buildscript + deps

* applyDecompilerCleanupToMain

* remove commented out code

* move to tags based injected version

* cleanup code

* remove .bak files
2024-04-01 20:42:52 +02:00
Martin Robertz a767b0f922 update 2024-02-22 13:21:43 +01:00
connor135246 61f8fbe1ce Fix vanilla Anvils, Saplings, and Slabs (#18)
* Fix Anvil display

* Fix growth stage 1 Saplings

* Fix top slabs and "smooth" double slabs

* comment on modded anvils

* spotless apply

* Only fix vanilla anvil

modded anvils can do it themselves

* Simplify

Thinking about this, I don't think there's a need to worry about the smooth double slabs.
There's a few reasons:
These blocks can only be obtained with commands. The only one this actually matters for is the sandstone one (43:9), since that's the only one that is visually different as well as has the wrong name. Holding 43:9 in your inventory will still have the wrong name anyway. Mods that add the modern minecraft ways of accessing these blocks create their own versions instead of using the old ones.
2024-02-22 11:33:30 +01:00
Raven Szewczyk a8a49f2b6e [ci skip] upgraded build system 2024-02-04 20:02:54 +00:00
Martin Robertz bf7cc86247 update bs+deps 2024-01-12 21:23:08 +01:00
Raven Szewczyk d6650f6cc4 [ci skip] upgraded build system 2024-01-08 21:30:25 +00:00
185 changed files with 3425 additions and 4092 deletions

No files matched your search

+2 -1607
View File
File diff suppressed because it is too large. Load diff
+1 -1
View File
@@ -1,7 +1,7 @@
// Add your dependencies here
dependencies {
implementation('com.github.GTNewHorizons:NotEnoughItems:2.4.13-GTNH:dev')
implementation('com.github.GTNewHorizons:NotEnoughItems:2.6.0-GTNH:dev')
shadowImplementation('au.com.bytecode:opencsv:2.4')
}
+153 -24
View File
@@ -1,63 +1,192 @@
# ExampleMod tag to use as Blowdryer (Spotless, etc.) settings version, leave empty to disable.
# LOCAL to test local config updates.
gtnh.settings.blowdryerTag = 0.2.0
# Human-readable mod name, available for mcmod.info population.
modName = Waila
# This is a case-sensitive string to identify your mod. Convention is to use lower case.
# Case-sensitive identifier string, available for mcmod.info population and used for automatic mixin JSON generation.
# Conventionally lowercase.
modId = Waila
# Root package of the mod, used to find various classes in other properties,
# mcmod.info substitution, enabling assertions in run tasks, etc.
modGroup = mcp.mobius.waila
# WHY is there no version field?
# The build script relies on git to provide a version via tags. It is super easy and will enable you to always know the
# code base or your binary. Check out this tutorial: https://blog.mattclemente.com/2017/10/13/versioning-with-git-tags/
# 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.
useModGroupForPublishing = false
# Will update your build.gradle automatically whenever an update is available
# Updates your build.gradle and settings.gradle automatically whenever an update is available.
autoUpdateBuildScript = false
# Version of Minecraft to target
minecraftVersion = 1.7.10
# Version of Minecraft Forge to target
forgeVersion = 10.13.4.1614
# Select a username for testing your mod with breakpoints. You may leave this empty for a random username each time you
# restart Minecraft in development. Choose this dependent on your mod:
# Do you need consistent player progressing (for example Thaumcraft)? -> Select a name
# Do you need to test how your custom blocks interacts with a player that is not the owner? -> leave name empty
# Specify an MCP channel for dependency deobfuscation and the deobfParams task.
channel = stable
# Specify an MCP mappings version for dependency deobfuscation and the deobfParams task.
mappingsVersion = 12
# Defines other MCP mappings for dependency deobfuscation.
remoteMappings = https\://raw.githubusercontent.com/MinecraftForge/FML/1.7.10/conf/
# Select a default username for testing your mod. You can always override this per-run by running
# `./gradlew runClient --username=AnotherPlayer`, or configuring this command in your IDE.
developmentEnvironmentUserName = Developer
# Define a source file of your project with:
# public static final String VERSION = "GRADLETOKEN_VERSION";
# The string's content will be replaced with your mod's version when compiled. You should use this to specify your mod's
# version in @Mod([...], version = VERSION, [...])
# Leave these properties empty to skip individual token replacements
replaceGradleTokenInFile = Waila.java
gradleTokenModId =
gradleTokenModName =
# 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 = 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 = 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.
# If gradleTokenVersion is empty or missing, the field will not be present in the class.
generateGradleTokenClass = mcp.mobius.waila.Tags
# Name of the token containing the project's current version to generate/replace.
gradleTokenVersion = GRADLETOKEN_VERSION
# [DEPRECATED] Mod ID replacement token.
gradleTokenModId =
# [DEPRECATED] Mod name replacement token.
gradleTokenModName =
# [DEPRECATED] Mod Group replacement token.
gradleTokenGroupName =
# In case your mod provides an API for other mods to implement you may declare its package here. Otherwise you can
# [DEPRECATED]
# Multiple source files can be defined here by providing a comma-separated list: Class1.java,Class2.java,Class3.java
# public static final String VERSION = "GRADLETOKEN_VERSION";
# The string's content will be replaced with your mod's version when compiled. You should use this to specify your mod's
# version in @Mod([...], version = VERSION, [...]).
# Leave these properties empty to skip individual token replacements.
replaceGradleTokenInFile =
# In case your mod provides an API for other mods to implement you may declare its package here. Otherwise, you can
# leave this property empty.
# Example value: apiPackage = api + modGroup = com.myname.mymodid -> com.myname.mymodid.api
# Example value: (apiPackage = api) + (modGroup = com.myname.mymodid) -> com.myname.mymodid.api
apiPackage = api
# Specify the configuration file for Forge's access transformers here. It must be placed into /src/main/resources/META-INF/
# Example value: mymodid_at.cfg
# There can be multiple files in a space-separated list.
# Example value: mymodid_at.cfg nei_at.cfg
accessTransformersFile = Waila_at.cfg
# Provides setup for Mixins if enabled. If you don't know what mixins are: Keep it disabled!
usesMixins = false
# Adds some debug arguments like verbose output and class export.
usesMixinDebug = false
# Specify the location of your implementation of IMixinConfigPlugin. Leave it empty otherwise.
mixinPlugin =
# Specify the package that contains all of your Mixins. You may only place Mixins in this package or the build will fail!
mixinsPackage =
# Specify the core mod entry class if you use a core mod. This class must implement IFMLLoadingPlugin!
# This parameter is for legacy compatibility only
# Example value: coreModClass = asm.FMLPlugin + modGroup = com.myname.mymodid -> com.myname.mymodid.asm.FMLPlugin
# Example value: (coreModClass = asm.FMLPlugin) + (modGroup = com.myname.mymodid) -> com.myname.mymodid.asm.FMLPlugin
coreModClass =
# If your project is only a consolidation of mixins or a core mod and does NOT contain a 'normal' mod ( = some class
# that is annotated with @Mod) you want this to be true. When in doubt: leave it on false!
containsMixinsAndOrCoreModOnly = false
# If enabled, you may use 'shadowImplementation' for dependencies. They will be integrated in your jar. It is your
# responsibility check the licence and request permission for distribution, if required.
# Enables Mixins even if this mod doesn't use them, useful if one of the dependencies uses mixins.
forceEnableMixins = false
# If enabled, you may use 'shadowCompile' for dependencies. They will be integrated into your jar. It is your
# responsibility to check the license and request permission for distribution if required.
usesShadowedDependencies = true
# Adds the GTNH maven, CurseMaven, IC2/Player maven, and some more well-known 1.7.10 repositories
# If disabled, won't remove unused classes from shadowed dependencies. Some libraries use reflection to access
# their own classes, making the minimization unreliable.
minimizeShadowedDependencies = true
# If disabled, won't rename the shadowed classes.
relocateShadowedDependencies = true
# Adds the GTNH maven, CurseMaven, Modrinth, and some more well-known 1.7.10 repositories.
includeWellKnownRepositories = true
# 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.
usesMavenPublishing = true
# Maven repository to publish the mod to.
# mavenPublishUrl = https\://nexus.gtnewhorizons.com/repository/releases/
# Publishing to Modrinth requires you to set the MODRINTH_TOKEN environment variable to your current Modrinth API token.
#
# The project's ID on Modrinth. Can be either the slug or the ID.
# Leave this empty if you don't want to publish to Modrinth.
modrinthProjectId =
# The project's relations on Modrinth. You can use this to refer to other projects on Modrinth.
# Syntax: scope1-type1:name1;scope2-type2:name2;...
# Where scope can be one of [required, optional, incompatible, embedded],
# 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
modrinthRelations =
# Publishing to CurseForge requires you to set the CURSEFORGE_TOKEN environment variable to one of your CurseForge API tokens.
#
# The project's numeric ID on CurseForge. You can find this in the About Project box.
# Leave this empty if you don't want to publish on CurseForge.
curseForgeProjectId =
# The project's relations on CurseForge. You can use this to refer to other projects on CurseForge.
# Syntax: type1:name1;type2:name2;...
# Where type can be one of [requiredDependency, embeddedLibrary, optionalDependency, tool, incompatible],
# and the name is the CurseForge project slug of the other mod.
# Example: requiredDependency:railcraft;embeddedLibrary:cofhlib;incompatible:buildcraft
# Note: UniMixins is automatically set as a required dependency if usesMixins = true.
curseForgeRelations =
# Optional parameter to customize the produced artifacts. Use this to preserve artifact naming when migrating older
# projects. New projects should not use this parameter.
# customArchiveBaseName =
# Optional parameter to have the build automatically fail if an illegal version is used.
# This can be useful if you e.g. only want to allow versions in the form of '1.1.xxx'.
# The check is ONLY performed if the version is a git tag.
# Note: the specified string must be escaped, so e.g. 1\\.1\\.\\d+ instead of 1\.1\.\d+
# versionPattern =
# Uncomment to prevent the source code from being published.
# noPublishedSources = true
# Uncomment this to disable Spotless checks.
# This should only be uncommented to keep it easier to sync with upstream/other forks.
# That is, if there is no other active fork/upstream, NEVER change this.
# disableSpotless = true
# Uncomment this to disable Checkstyle checks (currently wildcard import check).
# disableCheckstyle = true
# Override the IDEA build type. Valid values are: "" (leave blank, do not override), "idea" (force use native IDEA build), "gradle"
# (force use delegated build).
# This is meant to be set in $HOME/.gradle/gradle.properties.
# e.g. add "systemProp.org.gradle.project.ideaOverrideBuildType=idea" will override the build type to be native build.
# WARNING: If you do use this option, it will overwrite whatever you have in your existing projects. This might not be what you want!
# Usually there is no need to uncomment this here as other developers do not necessarily use the same build type as you.
# ideaOverrideBuildType = idea
# Whether IDEA should run spotless checks when pressing the Build button.
# This is meant to be set in $HOME/.gradle/gradle.properties.
# ideaCheckSpotlessOnBuild = true
Binary file not shown.
+2 -1
View File
@@ -1,6 +1,7 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.2.1-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
Vendored
+17 -12
View File
@@ -83,10 +83,8 @@ done
# This is normally unused
# shellcheck disable=SC2034
APP_BASE_NAME=${0##*/}
APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
# 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
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD=maximum
@@ -133,10 +131,13 @@ location of your Java installation."
fi
else
JAVACMD=java
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
if ! command -v java >/dev/null 2>&1
then
die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
fi
# Increase the maximum file descriptors if we can.
@@ -144,7 +145,7 @@ if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
case $MAX_FD in #(
max*)
# In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.
# shellcheck disable=SC3045
# shellcheck disable=SC2039,SC3045
MAX_FD=$( ulimit -H -n ) ||
warn "Could not query maximum file descriptor limit"
esac
@@ -152,7 +153,7 @@ if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
'' | soft) :;; #(
*)
# In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.
# shellcheck disable=SC3045
# shellcheck disable=SC2039,SC3045
ulimit -n "$MAX_FD" ||
warn "Could not set maximum file descriptor limit to $MAX_FD"
esac
@@ -197,11 +198,15 @@ if "$cygwin" || "$msys" ; then
done
fi
# Collect all arguments for the java command;
# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of
# shell script including quotes and variable substitutions, so put them in
# double quotes to make sure that they get re-expanded; and
# * put everything else in single quotes, so that it's not re-expanded.
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
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,
# 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.
set -- \
"-Dorg.gradle.appname=$APP_BASE_NAME" \
Vendored
+10 -10
View File
@@ -43,11 +43,11 @@ set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
if %ERRORLEVEL% equ 0 goto execute
echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
echo. 1>&2
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2
echo. 1>&2
echo Please set the JAVA_HOME variable in your environment to match the 1>&2
echo location of your Java installation. 1>&2
goto fail
@@ -57,11 +57,11 @@ set JAVA_EXE=%JAVA_HOME%/bin/java.exe
if exist "%JAVA_EXE%" goto execute
echo.
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
echo. 1>&2
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2
echo. 1>&2
echo Please set the JAVA_HOME variable in your environment to match the 1>&2
echo location of your Java installation. 1>&2
goto fail
+5 -10
View File
@@ -4,10 +4,10 @@ pluginManagement {
maven {
// RetroFuturaGradle
name "GTNH Maven"
url "http://jenkins.usrv.eu:8081/nexus/content/groups/public/"
allowInsecureProtocol = true
url "https://nexus.gtnewhorizons.com/repository/public/"
mavenContent {
includeGroup("com.gtnewhorizons.retrofuturagradle")
includeGroup("com.gtnewhorizons")
includeGroupByRegex("com\\.gtnewhorizons\\..+")
}
}
gradlePluginPortal()
@@ -17,12 +17,7 @@ pluginManagement {
}
plugins {
id 'com.diffplug.blowdryerSetup' version '1.6.0'
id 'org.gradle.toolchains.foojay-resolver-convention' version '0.4.0' // Provides java toolchains
id 'com.gtnewhorizons.gtnhsettingsconvention' version '1.0.22'
}
blowdryerSetup {
repoSubfolder 'gtnhShared'
github('GTNewHorizons/ExampleMod1.7.10', 'tag', '0.2.0')
//devLocal '.' // Use this when testing config updates locally
}
+41 -35
View File
@@ -1,6 +1,7 @@
package mcp.mobius.waila;
import java.lang.reflect.Field;
import java.util.Map;
import net.minecraftforge.common.MinecraftForge;
@@ -10,22 +11,21 @@ import org.apache.logging.log4j.Logger;
import com.google.common.eventbus.EventBus;
import com.google.common.eventbus.Subscribe;
import cpw.mods.fml.common.FMLCommonHandler;
import cpw.mods.fml.common.FMLModContainer;
import cpw.mods.fml.common.Mod;
import cpw.mods.fml.common.*;
import cpw.mods.fml.common.Mod.EventHandler;
import cpw.mods.fml.common.Mod.Instance;
import cpw.mods.fml.common.SidedProxy;
import cpw.mods.fml.common.event.FMLInitializationEvent;
import cpw.mods.fml.common.event.FMLInterModComms;
import cpw.mods.fml.common.event.*;
import cpw.mods.fml.common.event.FMLInterModComms.IMCMessage;
import cpw.mods.fml.common.event.FMLLoadCompleteEvent;
import cpw.mods.fml.common.event.FMLPostInitializationEvent;
import cpw.mods.fml.common.event.FMLPreInitializationEvent;
import cpw.mods.fml.common.event.FMLServerStartingEvent;
import cpw.mods.fml.common.network.NetworkCheckHandler;
import cpw.mods.fml.common.versioning.ArtifactVersion;
import cpw.mods.fml.common.versioning.DefaultArtifactVersion;
import cpw.mods.fml.relauncher.Side;
import mcp.mobius.waila.addons.harvestability.MissingHarvestInfo;
import mcp.mobius.waila.addons.harvestability.proxy.ProxyIguanaTweaks;
import mcp.mobius.waila.addons.vanillamc.TestRegistrar;
import mcp.mobius.waila.api.impl.ConfigHandler;
import mcp.mobius.waila.api.impl.ModuleRegistrar;
import mcp.mobius.waila.api.impl.elements.ModuleProbeRegistrar;
import mcp.mobius.waila.client.KeyEvent;
import mcp.mobius.waila.commands.CommandDumpHandlers;
import mcp.mobius.waila.network.NetworkHandler;
@@ -39,15 +39,9 @@ import mcp.mobius.waila.utils.ModIdentification;
@Mod(
modid = "Waila",
name = "Waila",
version = "GRADLETOKEN_VERSION",
version = Tags.GRADLETOKEN_VERSION,
dependencies = "after:NotEnoughItems@[1.0.4.0,)",
acceptableRemoteVersions = "*")
/*
* @NetworkMod(channels = {"Waila"},clientSideRequired=false, serverSideRequired=false, connectionHandler =
* WailaConnectionHandler.class, packetHandler = WailaPacketHandler.class, versionBounds="[1.5.0,)") //packetHandler =
* WailaPacketHandler.class)
*/
public class Waila {
// The instance of your mod that Forge uses.
@@ -58,6 +52,7 @@ public class Waila {
public static ProxyServer proxy;
public static Logger log = LogManager.getLogger("Waila");
public boolean serverPresent = false;
private final ArtifactVersion minimumClientJoinVersion = new DefaultArtifactVersion("1.7.3");
/* INIT SEQUENCE */
@EventHandler
@@ -75,7 +70,7 @@ public class Waila {
eBus.setAccessible(true);
EventBus FMLbus = (EventBus) eBus.get(FMLCommonHandler.instance().findContainerFor(this));
FMLbus.register(this);
} catch (Throwable t) {}
} catch (Throwable ignored) {}
if (FMLCommonHandler.instance().getEffectiveSide() == Side.CLIENT) {
MinecraftForge.EVENT_BUS.register(new DecoratorRenderer());
@@ -84,35 +79,25 @@ public class Waila {
}
FMLCommonHandler.instance().bus().register(new NetworkHandler());
MissingHarvestInfo.init();
TestRegistrar.init();
}
@EventHandler
public void postInit(FMLPostInitializationEvent event) {
proxy.registerHandlers();
ModIdentification.init();
/*
* if (ConfigHandler.instance().getConfig(Configuration.CATEGORY_GENERAL, Constants.CFG_WAILA_KEYBIND, true)){
* for (String key: ModIdentification.keyhandlerStrings.keySet()){ String orig = I18n.getString(key); if
* (orig.equals(key)) orig = LanguageRegistry.instance().getStringLocalization(key); if (orig.equals(key)) orig
* = LangUtil.translateG(key); if (orig.isEmpty()) orig = key; String modif; if (orig.startsWith("[") ||
* orig.contains(":")) modif = orig; else{ String id = ModIdentification.keyhandlerStrings.get(key); if
* (id.contains(".")) id = id.split("\\.")[0]; if (id.length() > 10) id = id.substring(0, 11); if (id.isEmpty())
* id = "????"; modif = String.format("[%s] %s", id, orig); }
* LanguageRegistry.instance().addStringLocalization(key, modif); } }
*/
if (Loader.isModLoaded("IguanaTweaksTConstruct")) {
ProxyIguanaTweaks.init();
}
}
@Subscribe
public void loadComplete(FMLLoadCompleteEvent event) {
proxy.registerMods();
proxy.registerIMCs();
/*
* String[] ores = OreDictionary.getOreNames(); for (String s : ores) for (ItemStack stack :
* OreDictionary.getOres(s)) System.out.printf("%s : %s\n", s, stack);
*/
}
@EventHandler
@@ -146,6 +131,15 @@ public class Waila {
imcMessage.getStringValue()));
ModuleRegistrar.instance().addIMCRequest(imcMessage.getStringValue(), imcMessage.getSender());
}
if (imcMessage.key.equalsIgnoreCase("elementregister")) {
Waila.log.info(
String.format(
"Receiving registration request from [ %s ] for method %s",
imcMessage.getSender(),
imcMessage.getStringValue()));
ModuleProbeRegistrar.instance().addIMCRequest(imcMessage.getStringValue(), imcMessage.getSender());
}
}
}
@@ -153,4 +147,16 @@ public class Waila {
public void serverStarting(FMLServerStartingEvent event) {
event.registerServerCommand(new CommandDumpHandlers());
}
/**
* Block any clients older than 1.7.3 to ensure the vanilla.show_invisible_players property is respected
*/
@SuppressWarnings("unused")
@NetworkCheckHandler
public boolean checkModList(Map<String, String> versions, Side side) {
if (side == Side.CLIENT && versions.containsKey("Waila")) {
return minimumClientJoinVersion.compareTo(new DefaultArtifactVersion(versions.get("Waila"))) <= 0;
}
return true;
}
}
@@ -0,0 +1,44 @@
package mcp.mobius.waila.addons;
import static mcp.mobius.waila.api.SpecialChars.*;
import java.util.ArrayList;
import net.minecraft.item.ItemStack;
import mcp.mobius.waila.api.IWailaConfigHandler;
import mcp.mobius.waila.api.IWailaDataAccessor;
import mcp.mobius.waila.api.elements.IProbeInfo;
import mcp.mobius.waila.handlers.HUDHandlerBlocks;
import mcp.mobius.waila.utils.ModIdentification;
public class DefaultProbeInfoProvider {
public static void addStandardBlockInfo(ItemStack itemStack, IProbeInfo probeInfo, IWailaDataAccessor accessor,
IWailaConfigHandler config) {
// TODO: item icon, horizontal layout
// if (!itemStack.isEmpty()) {
// if (Tools.show(mode, config.getShowModName())) {
// probeInfo.horizontal().item(pickBlock).vertical().itemLabel(pickBlock).text(TextStyleClass.MODNAME + modid);
// } else {
// probeInfo.horizontal(probeInfo.defaultLayoutStyle().alignment(ElementAlignment.ALIGN_CENTER)).item(pickBlock).itemLabel(pickBlock);
// }
// } else if (Tools.show(mode, config.getShowModName())) {
// probeInfo.vertical().text(TextStyleClass.NAME + getBlockUnlocalizedName(block)).text(TextStyleClass.MODNAME +
// modid);
// } else {
// probeInfo.vertical().text(TextStyleClass.NAME + getBlockUnlocalizedName(block));
// }
HUDHandlerBlocks hudHandlerBlocks = new HUDHandlerBlocks();
IProbeInfo row = probeInfo.horizontal();
row.item(itemStack);
IProbeInfo row_vertical = row.vertical();
row_vertical.text(hudHandlerBlocks.getWailaHead(itemStack, new ArrayList<>(), accessor, config).get(0));
String modName = ModIdentification.nameFromStack(itemStack);
if (modName != null && !modName.isEmpty()) {
row_vertical.text(BLUE + ITALIC + modName);
}
}
}
@@ -7,11 +7,11 @@ import mcp.mobius.waila.api.impl.ModuleRegistrar;
public class AgricultureModule {
public static Class BlockCrop = null;
public static Class<?> BlockCrop = null;
public static void register() {
try {
Class Agriculture = Class.forName("com.teammetallurgy.agriculture.Agriculture");
Class.forName("com.teammetallurgy.agriculture.Agriculture");
Waila.log.log(Level.INFO, "Agriculture mod found.");
} catch (ClassNotFoundException e) {
Waila.log.log(Level.INFO, "[Agriculture] Agriculture mod not found.");
@@ -11,14 +11,9 @@ import mcp.mobius.waila.api.impl.ModuleRegistrar;
public class BCModule {
public static Class TileTank = null;
public static Class<?> TileTank = null;
public static Method TileTank_getTankInfo = null;
// public static Class IPowerReceptor = null;
// public static Class PipeTransportPower = null;
// public static Class TileGenericPipe = null;
// public static Class TileEngine = null;
public static void register() {
try {
TileTank = Class.forName("buildcraft.factory.TileTank");
@@ -29,13 +24,11 @@ public class BCModule {
ModuleRegistrar.instance().registerHeadProvider(new HUDHandlerBCTanks(), TileTank);
ModuleRegistrar.instance().registerBodyProvider(new HUDHandlerBCTanks(), TileTank);
} catch (ClassNotFoundException e) {
Waila.log.log(Level.WARN, "[BC] Class not found. " + e);
return;
} catch (NoSuchMethodException e) {
Waila.log.log(Level.WARN, "[BC] Method not found." + e);
} catch (ClassNotFoundException | NoSuchMethodException e) {
Waila.log.log(Level.INFO, "[BC] Buildcraft mod not found.");
return;
}
Waila.log.log(Level.INFO, "Buildcraft mod found.");
}
@@ -50,8 +50,7 @@ public class HUDHandlerBCTanks implements IWailaDataProvider {
int liquidAmount = stack != null ? stack.amount : 0;
int capacity = tank != null ? tank.capacity : 0;
if (ConfigHandler.instance().getConfig("bc.tankamount"))
currenttip.add(String.valueOf(liquidAmount) + "/" + String.valueOf(capacity) + " mB");
if (ConfigHandler.instance().getConfig("bc.tankamount")) currenttip.add(liquidAmount + "/" + capacity + " mB");
return currenttip;
}
@@ -63,14 +62,12 @@ public class HUDHandlerBCTanks implements IWailaDataProvider {
}
public FluidTankInfo getTank(IWailaDataAccessor accessor) {
FluidTankInfo tank = null;
FluidTankInfo tank;
try {
tank = ((FluidTankInfo[]) BCModule.TileTank_getTankInfo
.invoke(BCModule.TileTank.cast(accessor.getTileEntity()), ForgeDirection.UNKNOWN))[0];
} catch (Exception e) {
Waila.log.log(
Level.ERROR,
"[BC] Unhandled exception trying to access a tank for display !.\n" + String.valueOf(e));
Waila.log.log(Level.ERROR, "[BC] Unhandled exception trying to access a tank for display !.\n" + e);
return null;
}
return tank;
@@ -2,26 +2,6 @@ package mcp.mobius.waila.addons.carpenters;
public class CarpentersModule {
public static Class TEBase = null;
public static Class BlockCarpentersDoor = null;
public static Class BlockCarpentersHatch = null;
public static void register() {
/*
* try{ Class CarpentersBlocks = Class.forName("carpentersblocks.CarpentersBlocks"); Waila.log.log(Level.INFO,
* "CarpentersBlocks mod found."); } catch (ClassNotFoundException e){ Waila.log.log(Level.INFO,
* "[CarpentersBlocks] CarpentersBlocks mod not found."); return; } try{ TEBase =
* Class.forName("carpentersblocks.tileentity.TEBase"); BlockCarpentersDoor =
* Class.forName("carpentersblocks.block.BlockCarpentersDoor"); BlockCarpentersHatch =
* Class.forName("carpentersblocks.block.BlockCarpentersHatch"); } catch (ClassNotFoundException e){
* Waila.log.log(Level.WARNING, "[CarpentersBlocks] Class not found. " + e); return; } catch (Exception e) {
* Waila.log.log(Level.WARNING, "[CarpentersBlocks] Error while loading module. " + e); return; }
* ModuleRegistrar.instance().addConfig("Carpenter's Blocks", "carpenters.hide");
* ModuleRegistrar.instance().registerStackProvider(new HUDCarpentersBlocksTE(), BlockCarpentersDoor);
* ModuleRegistrar.instance().registerStackProvider(new HUDCarpentersBlocksTE(), BlockCarpentersHatch);
* ModuleRegistrar.instance().registerSyncedNBTKey("data", TEBase);
* ModuleRegistrar.instance().registerSyncedNBTKey("cover_6", TEBase);
*/
}
public static void register() {}
}
@@ -16,15 +16,6 @@ public class HUDCarpentersBlocksTE implements IWailaDataProvider {
@Override
public ItemStack getWailaStack(IWailaDataAccessor accessor, IWailaConfigHandler config) {
/*
* if (!config.getConfig("carpenters.hide")) return null; NBTTagCompound tag = accessor.getNBTData(); short data
* = tag.getShort("data"); short cover = tag.getShort("cover_6");
* if(CarpentersModule.BlockCarpentersDoor.isInstance(accessor.getBlock())){ int type = data & 0x7; if (type !=
* 5) return null; if (cover == 0) return null; return new ItemStack(cover & 0xfff, 0, (cover & 0xf000) >>> 12);
* } else if (CarpentersModule.BlockCarpentersHatch.isInstance(accessor.getBlock())){ int type = data & 0x7; if
* (type != 0) return null; if (cover == 0) return null; return new ItemStack(cover & 0xfff, 0, (cover & 0xf000)
* >>> 12); }
*/
return null;
}
@@ -9,18 +9,18 @@ import mcp.mobius.waila.api.impl.ModuleRegistrar;
public class EnderIOModule {
public static Class TileCapacitorBank = null;
public static Class<?> TileCapacitorBank = null;
public static Method TCB_getMaxInput = null;
public static Method TCB_getMaxOutput = null;
public static Method TCB_getEnergyStored = null;
public static Method TCB_getMaxEnergyStored = null;
public static Method TCB_getMaxIO = null;
public static Class TileTesseract = null;
public static Class<?> TileTesseract = null;
public static void register() {
try {
Class ModClass = Class.forName("crazypants.enderio.EnderIO");
Class.forName("crazypants.enderio.EnderIO");
Waila.log.log(Level.INFO, "EnderIO mod found.");
} catch (ClassNotFoundException e) {
Waila.log.log(Level.INFO, "[EnderIO] EnderIO mod not found.");
@@ -44,9 +44,6 @@ public class EnderIOModule {
} catch (NoSuchMethodException e) {
Waila.log.log(Level.WARN, "[EnderStorage] Method not found." + e);
return;
// } catch (NoSuchFieldException e){
// mod_Waila.log.log(Level.WARNING, "[EnderStorage] Field not found." + e);
// return;
} catch (Exception e) {
Waila.log.log(Level.WARN, "[EnderStorage] Unhandled exception." + e);
return;
@@ -1,9 +1,6 @@
package mcp.mobius.waila.addons.enderio;
import static mcp.mobius.waila.api.SpecialChars.ALIGNRIGHT;
import static mcp.mobius.waila.api.SpecialChars.RESET;
import static mcp.mobius.waila.api.SpecialChars.TAB;
import static mcp.mobius.waila.api.SpecialChars.WHITE;
import static mcp.mobius.waila.api.SpecialChars.*;
import java.util.List;
@@ -1,8 +1,6 @@
package mcp.mobius.waila.addons.enderio;
import static mcp.mobius.waila.api.SpecialChars.RESET;
import static mcp.mobius.waila.api.SpecialChars.TAB;
import static mcp.mobius.waila.api.SpecialChars.WHITE;
import static mcp.mobius.waila.api.SpecialChars.*;
import java.util.List;
@@ -39,7 +37,6 @@ public class HUDHandlerTesseract implements IWailaDataProvider {
String channel = "%s : %s%s%s %s";
String freq;
String frequser;
String owner;
if (config.getConfig("enderio.channel")) {
@@ -10,17 +10,17 @@ import mcp.mobius.waila.api.impl.ModuleRegistrar;
public class EnderStorageModule {
public static Class TileFrequencyOwner = null;
public static Class<?> TileFrequencyOwner = null;
public static Field TileFrequencyOwner_Freq = null;
public static Class EnderStorageManager = null;
public static Class<?> EnderStorageManager = null;
public static Method GetColourFromFreq = null;
public static Class TileEnderTank = null;
public static Class<?> TileEnderTank = null;
public static void register() {
try {
Class EnderStorage = Class.forName("codechicken.enderstorage.EnderStorage");
Class.forName("codechicken.enderstorage.EnderStorage");
Waila.log.log(Level.INFO, "EnderStorage mod found.");
} catch (ClassNotFoundException e) {
Waila.log.log(Level.INFO, "[EnderStorage] EnderStorage mod not found.");
@@ -9,18 +9,14 @@ import mcp.mobius.waila.api.impl.ModuleRegistrar;
public class ETBModule {
public static Class TileSocket = null;
public static Class<?> TileSocket = null;
public static Field Socket_sides = null;
public static Field Socket_configs = null;
// public static Field Socket_sideID = null;
// public static Field Socket_sideMeta = null;
// public static Field Socket_facID = null;
// public static Field Socket_facMeta = null;
public static Class SocketsMod = null;
public static Class<?> SocketsMod = null;
public static Field module = null;
public static Class SideConfig = null;
public static Class<?> SideConfig = null;
public static Field SC_tank = null;
public static Field SC_inventory = null;
public static Field SC_rsControl = null;
@@ -28,7 +24,7 @@ public class ETBModule {
public static void register() {
try {
Class ModClass = Class.forName("emasher.sockets.TileSocket");
Class.forName("emasher.sockets.TileSocket");
Waila.log.log(Level.INFO, "Engineer Toolbox mod found.");
} catch (ClassNotFoundException e) {
Waila.log.log(Level.INFO, "[Engineer Toolbox] Engineer Toolbox mod not found.");
@@ -40,18 +36,9 @@ public class ETBModule {
TileSocket = Class.forName("emasher.sockets.TileSocket");
Socket_sides = TileSocket.getField("sides");
Socket_configs = TileSocket.getField("configs");
// Socket_sideID = TileSocket.getField("sideID");
// Socket_sideMeta = TileSocket.getField("sideMeta");
// Socket_facID = TileSocket.getField("facID");
// Socket_facMeta = TileSocket.getField("facMeta");
SocketsMod = Class.forName("emasher.sockets.SocketsMod");
module = SocketsMod.getField("module");
// module = (Item)SocketsMod.getField("module").get(null);
/*
* if (module == null){ mod_Waila.log.log(Level.WARNING, "[Engineer Toolbox] module field is null !");
* return; }
*/
SideConfig = Class.forName("emasher.api.SideConfig");
SC_tank = SideConfig.getField("tank");
@@ -62,9 +49,6 @@ public class ETBModule {
} catch (ClassNotFoundException e) {
Waila.log.log(Level.WARN, "[Engineer Toolbox] Class not found. " + e);
return;
// } catch (NoSuchMethodException e){
// Waila.log.log(Level.WARN, "[Engineer Toolbox] Method not found." + e);
// return;
} catch (NoSuchFieldException e) {
Waila.log.log(Level.WARN, "[Engineer Toolbox] Field not found." + e);
return;
@@ -52,9 +52,9 @@ public class HUDHandlerSocket implements IWailaDataProvider {
String configstr = "[ ";
if (tank != -1) configstr += "\u00a79" + String.valueOf(tank) + " ";
if (tank != -1) configstr += "\u00a79" + tank + " ";
if (inventory != -1) configstr += "\u00a7a" + String.valueOf(inventory) + " ";
if (inventory != -1) configstr += "\u00a7a" + inventory + " ";
if (rsControl[0] || rsControl[1] || rsControl[2]) {
configstr += "\u00a7c";
@@ -76,12 +76,6 @@ public class HUDHandlerSocket implements IWailaDataProvider {
if (!configstr.equals("[ \u00a7r]")) tipstr += " " + configstr;
/*
* if ((tank != -1) && (inventory != -1)) tipstr += String.format("[ \u00a79%d \u00a7a%d \u00a7r]",
* tank, inventory); else if (tank != -1) tipstr += String.format("[ \u00a79%d \u00a7r]", tank);
* else if (inventory != -1) tipstr += String.format("[ \u00a7a%d \u00a7r]", inventory);
*/
currenttip.add(tipstr);
}
}
@@ -7,13 +7,12 @@ import mcp.mobius.waila.api.impl.ModuleRegistrar;
public class ExtraUtilitiesModule {
public static Class ModExtraUtilities = null;
public static Class TileEntityDrum = null;
public static Class<?> TileEntityDrum = null;
public static void register() {
try {
Class ModExtraUtilities = Class.forName("com.rwtema.extrautils.ExtraUtils");
Class.forName("com.rwtema.extrautils.ExtraUtils");
Waila.log.log(Level.INFO, "ExtraUtilities mod found.");
} catch (ClassNotFoundException e) {
Waila.log.log(Level.INFO, "[ExtraUtilities] ExtraUtilities mod not found.");
@@ -7,12 +7,12 @@ import mcp.mobius.waila.api.impl.ModuleRegistrar;
public class GravestoneModule {
public static Class BlockGraveStone = null;
public static Class<?> BlockGraveStone = null;
public static void register() {
try {
Class ModGravestone = Class.forName("GraveStone.ModGraveStone");
Class.forName("GraveStone.ModGraveStone");
Waila.log.log(Level.INFO, "GraveStone mod found.");
} catch (ClassNotFoundException e) {
Waila.log.log(Level.INFO, "[GraveStone] GraveStone mod not found.");
@@ -0,0 +1,14 @@
package mcp.mobius.waila.addons.harvestability;
public class Config {
public static final String MINIMAL_SEPARATOR_STRING = " : ";
public static final String CURRENTLY_HARVESTABLE_STRING = "\u2714";
public static final String NOT_CURRENTLY_HARVESTABLE_STRING = "\u2718";
public static final String SHEARABILITY_STRING = "\u2702";
public static final String SILK_TOUCHABILITY_STRING = "\u2712";
}
@@ -0,0 +1,338 @@
package mcp.mobius.waila.addons.harvestability;
import java.util.*;
import net.minecraft.block.Block;
import net.minecraft.enchantment.EnchantmentHelper;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.init.Blocks;
import net.minecraft.item.Item;
import net.minecraft.item.ItemBlock;
import net.minecraft.item.ItemShears;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.EnumChatFormatting;
import net.minecraft.util.MovingObjectPosition;
import net.minecraft.util.StatCollector;
import net.minecraft.world.World;
import net.minecraftforge.common.ForgeHooks;
import net.minecraftforge.common.IShearable;
import net.minecraftforge.common.config.Configuration;
import mcp.mobius.waila.addons.harvestability.helpers.*;
import mcp.mobius.waila.addons.harvestability.proxy.ProxyCreativeBlocks;
import mcp.mobius.waila.addons.harvestability.proxy.ProxyGregTech;
import mcp.mobius.waila.api.IWailaConfigHandler;
import mcp.mobius.waila.api.IWailaDataAccessor;
import mcp.mobius.waila.api.IWailaDataProvider;
import mcp.mobius.waila.api.ProbeMode;
import mcp.mobius.waila.api.elements.IProbeDataProvider;
import mcp.mobius.waila.api.elements.IProbeInfo;
import mcp.mobius.waila.api.impl.ConfigHandler;
import mcp.mobius.waila.api.impl.ModuleRegistrar;
import mcp.mobius.waila.api.impl.elements.ModuleProbeRegistrar;
import mcp.mobius.waila.utils.Constants;
public class HUDHandlerHarvestability implements IWailaDataProvider, IProbeDataProvider {
@Override
public ItemStack getWailaStack(IWailaDataAccessor accessor, IWailaConfigHandler config) {
return null;
}
@Override
public List<String> getWailaHead(ItemStack itemStack, List<String> toolTip, IWailaDataAccessor accessor,
IWailaConfigHandler config) {
return toolTip;
}
@Override
public List<String> getWailaBody(ItemStack itemStack, List<String> toolTip, IWailaDataAccessor accessor,
IWailaConfigHandler config) {
if (!ConfigHandler.instance()
.getConfig(Configuration.CATEGORY_GENERAL, Constants.CFG_WAILA_FORCE_LEGACY_MODE, false)) {
return toolTip;
}
Block block = accessor.getBlock();
int meta = accessor.getMetadata();
if (ProxyCreativeBlocks.isCreativeBlock(block, meta)) return toolTip;
EntityPlayer player = accessor.getPlayer();
// for disguised blocks
if (itemStack.getItem() instanceof ItemBlock && !ProxyGregTech.isOreBlock(block)
&& !ProxyGregTech.isCasing(block)
&& !ProxyGregTech.isMachine(block)) {
block = Block.getBlockFromItem(itemStack.getItem());
meta = itemStack.getItemDamage();
}
boolean minimalLayout = config.getConfig("harvestability.minimal", false);
List<String> stringParts = new ArrayList<String>();
getHarvestability(stringParts, player, block, meta, accessor.getPosition(), config, minimalLayout);
if (!stringParts.isEmpty()) {
if (minimalLayout) toolTip.add(
StringHelper.concatenateStringList(
stringParts,
EnumChatFormatting.RESET + Config.MINIMAL_SEPARATOR_STRING));
else toolTip.addAll(stringParts);
}
return toolTip;
}
public void getHarvestability(List<String> stringList, EntityPlayer player, Block block, int meta,
MovingObjectPosition position, IWailaConfigHandler config, boolean minimalLayout) {
boolean isSneaking = player.isSneaking();
boolean showHarvestLevel = config.getConfig("harvestability.harvestlevel")
&& (!config.getConfig("harvestability.harvestlevel.sneakingonly") || isSneaking);
boolean showHarvestLevelNum = config.getConfig("harvestability.harvestlevelnum")
&& (!config.getConfig("harvestability.harvestlevelnum.sneakingonly") || isSneaking);
boolean showEffectiveTool = config.getConfig("harvestability.effectivetool")
&& (!config.getConfig("harvestability.effectivetool.sneakingonly") || isSneaking);
boolean showCurrentlyHarvestable = config.getConfig("harvestability.currentlyharvestable")
&& (!config.getConfig("harvestability.currentlyharvestable.sneakingonly") || isSneaking);
boolean hideWhileHarvestable = config.getConfig("harvestability.unharvestableonly", false);
boolean showOresOnly = config.getConfig("harvestability.oresonly", false);
boolean toolRequiredOnly = config.getConfig("harvestability.toolrequiredonly");
if (showHarvestLevel || showEffectiveTool || showCurrentlyHarvestable) {
if (showOresOnly && !OreHelper.isBlockAnOre(block, meta)) {
return;
}
if (!player.isCurrentToolAdventureModeExempt(position.blockX, position.blockY, position.blockZ)
|| BlockHelper.isBlockUnbreakable(
block,
player.worldObj,
position.blockX,
position.blockY,
position.blockZ)) {
String unbreakableString = ColorHelper.getBooleanColor(false) + Config.NOT_CURRENTLY_HARVESTABLE_STRING
+ (!minimalLayout
? EnumChatFormatting.RESET
+ StatCollector.translateToLocal("wailaharvestability.harvestable")
: "");
stringList.add(unbreakableString);
return;
}
// needed to stop array index out of bounds exceptions on mob spawners
// block.getHarvestLevel/getHarvestTool are only 16 elements big
if (meta >= 16) meta = 0;
int harvestLevel = block.getHarvestLevel(meta);
String effectiveTool = BlockHelper.getEffectiveToolOf(
player.worldObj,
position.blockX,
position.blockY,
position.blockZ,
block,
meta);
if (effectiveTool != null && harvestLevel < 0) harvestLevel = 0;
boolean blockHasEffectiveTools = harvestLevel >= 0 && effectiveTool != null;
String shearability = getShearabilityString(player, block, meta, position, config);
String silkTouchability = getSilkTouchabilityString(player, block, meta, position, config);
if (toolRequiredOnly && block.getMaterial().isToolNotRequired()
&& !blockHasEffectiveTools
&& shearability.isEmpty()
&& silkTouchability.isEmpty())
return;
boolean canHarvest = false;
boolean isEffective = false;
boolean isAboveMinHarvestLevel = false;
boolean isHoldingTinkersTool = false;
boolean isHoldingGTTool = false;
ItemStack itemHeld = player.getHeldItem();
if (itemHeld != null) {
isHoldingTinkersTool = ToolHelper.hasToolTag(itemHeld);
isHoldingGTTool = ProxyGregTech.isGTTool(itemHeld);
isAboveMinHarvestLevel = (showCurrentlyHarvestable || showHarvestLevel)
&& ToolHelper.canToolHarvestLevel(itemHeld, block, meta, harvestLevel);
isEffective = showEffectiveTool
&& ToolHelper.isToolEffectiveAgainst(itemHeld, block, meta, effectiveTool);
if (isHoldingGTTool) {
// GT tool don't care net.minecraft.block.material.Material#isToolNotRequired
canHarvest = itemHeld.func_150998_b(block);
} else {
canHarvest = ToolHelper.canToolHarvestBlock(itemHeld, block, meta)
|| (!isHoldingTinkersTool && block.canHarvestBlock(player, meta));
}
}
boolean isCurrentlyHarvestable = (canHarvest && isAboveMinHarvestLevel)
|| (!isHoldingTinkersTool && ForgeHooks.canHarvestBlock(block, player, meta));
if (hideWhileHarvestable && isCurrentlyHarvestable) return;
String currentlyHarvestable = showCurrentlyHarvestable
? ColorHelper.getBooleanColor(isCurrentlyHarvestable)
+ (isCurrentlyHarvestable ? Config.CURRENTLY_HARVESTABLE_STRING
: Config.NOT_CURRENTLY_HARVESTABLE_STRING)
+ (!minimalLayout
? EnumChatFormatting.RESET
+ StatCollector.translateToLocal("wailaharvestability.currentlyharvestable")
: "")
: "";
if (!currentlyHarvestable.isEmpty() || !shearability.isEmpty() || !silkTouchability.isEmpty()) {
String separator = (!shearability.isEmpty() || !silkTouchability.isEmpty() ? " " : "");
stringList.add(
currentlyHarvestable + separator
+ silkTouchability
+ (!silkTouchability.isEmpty() ? separator : "")
+ shearability);
}
if (harvestLevel != -1 && showEffectiveTool && effectiveTool != null) {
String effectiveToolString;
if (StatCollector.canTranslate("wailaharvestability.toolclass." + effectiveTool))
effectiveToolString = StatCollector
.translateToLocal("wailaharvestability.toolclass." + effectiveTool);
else effectiveToolString = effectiveTool.substring(0, 1).toUpperCase() + effectiveTool.substring(1);
stringList.add(
(!minimalLayout ? StatCollector.translateToLocal("wailaharvestability.effectivetool") : "")
+ ColorHelper.getBooleanColor(
isEffective && (!isHoldingTinkersTool || canHarvest),
isHoldingTinkersTool && isEffective && !canHarvest)
+ effectiveToolString);
}
if (harvestLevel >= 1 && (showHarvestLevel || showHarvestLevelNum)) {
String harvestLevelString = "";
String harvestLevelName = StringHelper.stripFormatting(StringHelper.getHarvestLevelName(harvestLevel));
String harvestLevelNum = String.valueOf(harvestLevel);
// only show harvest level number and name if they are different
showHarvestLevelNum = showHarvestLevelNum
&& (!showHarvestLevel || !harvestLevelName.equals(harvestLevelNum));
if (showHarvestLevel) harvestLevelString = harvestLevelName
+ (showHarvestLevelNum ? String.format(" (%d)", harvestLevel) : "");
else if (showHarvestLevelNum) harvestLevelString = harvestLevelNum;
stringList.add(
(!minimalLayout ? StatCollector.translateToLocal("wailaharvestability.harvestlevel") : "")
+ ColorHelper.getBooleanColor(isAboveMinHarvestLevel && canHarvest)
+ harvestLevelString);
}
}
}
public String getShearabilityString(EntityPlayer player, Block block, int meta, MovingObjectPosition position,
IWailaConfigHandler config) {
boolean isSneaking = player.isSneaking();
boolean showShearability = config.getConfig("harvestability.shearability")
&& (!config.getConfig("harvestability.shearability.sneakingonly") || isSneaking);
if (showShearability && (block instanceof IShearable || block == Blocks.deadbush
|| (block == Blocks.double_plant && block.getItemDropped(meta, new Random(), 0) == null))) {
ItemStack itemHeld = player.getHeldItem();
boolean isHoldingShears = itemHeld != null && itemHeld.getItem() instanceof ItemShears;
boolean isShearable = isHoldingShears && ((IShearable) block)
.isShearable(itemHeld, player.worldObj, position.blockX, position.blockY, position.blockZ);
return ColorHelper.getBooleanColor(isShearable, !isShearable && isHoldingShears)
+ Config.SHEARABILITY_STRING;
}
return "";
}
public String getSilkTouchabilityString(EntityPlayer player, Block block, int meta, MovingObjectPosition position,
IWailaConfigHandler config) {
boolean isSneaking = player.isSneaking();
boolean showSilkTouchability = config.getConfig("harvestability.silktouchability")
&& (!config.getConfig("harvestability.silktouchability.sneakingonly") || isSneaking);
if (showSilkTouchability && block
.canSilkHarvest(player.worldObj, player, position.blockX, position.blockY, position.blockZ, meta)) {
Item itemDropped = block.getItemDropped(meta, new Random(), 0);
boolean silkTouchMatters = (itemDropped instanceof ItemBlock && itemDropped != Item.getItemFromBlock(block))
|| block.quantityDropped(new Random()) <= 0;
if (silkTouchMatters) {
boolean hasSilkTouch = EnchantmentHelper.getSilkTouchModifier(player);
return ColorHelper.getBooleanColor(hasSilkTouch) + Config.SILK_TOUCHABILITY_STRING;
}
}
return "";
}
@Override
public List<String> getWailaTail(ItemStack itemStack, List<String> toolTip, IWailaDataAccessor accessor,
IWailaConfigHandler config) {
return toolTip;
}
public static HashMap<String, Boolean> configOptions = new HashMap<String, Boolean>();
static {
configOptions.put("harvestability.harvestlevel", true);
configOptions.put("harvestability.harvestlevelnum", false);
configOptions.put("harvestability.effectivetool", true);
configOptions.put("harvestability.currentlyharvestable", true);
configOptions.put("harvestability.harvestlevel.sneakingonly", false);
configOptions.put("harvestability.harvestlevelnum.sneakingonly", false);
configOptions.put("harvestability.effectivetool.sneakingonly", false);
configOptions.put("harvestability.currentlyharvestable.sneakingonly", false);
configOptions.put("harvestability.oresonly", false);
configOptions.put("harvestability.minimal", false);
configOptions.put("harvestability.unharvestableonly", false);
configOptions.put("harvestability.toolrequiredonly", true);
configOptions.put("harvestability.shearability", true);
configOptions.put("harvestability.shearability.sneakingonly", false);
configOptions.put("harvestability.silktouchability", true);
configOptions.put("harvestability.silktouchability.sneakingonly", false);
}
public void addProbeInfo(ProbeMode probeMode, ItemStack itemStack, IProbeInfo probeInfo,
IWailaDataAccessor accessor, IWailaConfigHandler config) {
Block block = accessor.getBlock();
int meta = accessor.getMetadata();
if (ProxyCreativeBlocks.isCreativeBlock(block, meta)) return;
EntityPlayer player = accessor.getPlayer();
// for disguised blocks
if (itemStack.getItem() instanceof ItemBlock && !ProxyGregTech.isOreBlock(block)
&& !ProxyGregTech.isCasing(block)
&& !ProxyGregTech.isMachine(block)) {
block = Block.getBlockFromItem(itemStack.getItem());
meta = itemStack.getItemDamage();
}
List<String> stringParts = new ArrayList<String>();
getHarvestability(stringParts, player, block, meta, accessor.getPosition(), config, true);
if (!stringParts.isEmpty()) {
probeInfo.text(
StringHelper.concatenateStringList(
stringParts,
EnumChatFormatting.RESET + Config.MINIMAL_SEPARATOR_STRING));
}
}
public static void register() {
for (Map.Entry<String, Boolean> entry : configOptions.entrySet()) {
// hacky way to set default values to anything but true
ConfigHandler.instance().getConfig(entry.getKey(), entry.getValue());
ModuleRegistrar.instance().addConfig("Harvestability", entry.getKey(), "option." + entry.getKey());
}
ModuleProbeRegistrar.instance().registerProbeProvider(new HUDHandlerHarvestability(), Block.class);
ModuleRegistrar.instance().registerBodyProvider(new HUDHandlerHarvestability(), Block.class);
}
@Override
public NBTTagCompound getNBTData(EntityPlayerMP player, TileEntity te, NBTTagCompound tag, World world, int x,
int y, int z) {
return tag;
}
}
@@ -0,0 +1,14 @@
package mcp.mobius.waila.addons.harvestability;
import net.minecraft.init.Blocks;
public class MissingHarvestInfo {
public static void init() {
vanilla();
}
public static void vanilla() {
Blocks.web.setHarvestLevel("sword", 0);
}
}
@@ -0,0 +1,43 @@
package mcp.mobius.waila.addons.harvestability.helpers;
import java.util.HashMap;
import java.util.Map;
import net.minecraft.block.Block;
import net.minecraft.init.Items;
import net.minecraft.item.ItemStack;
import net.minecraft.item.ItemTool;
import net.minecraft.world.World;
public class BlockHelper {
private static final HashMap<String, ItemStack> testTools = new HashMap<String, ItemStack>();
static {
testTools.put("pickaxe", new ItemStack(Items.wooden_pickaxe));
testTools.put("shovel", new ItemStack(Items.wooden_shovel));
testTools.put("axe", new ItemStack(Items.wooden_axe));
}
public static String getEffectiveToolOf(World world, int x, int y, int z, Block block, int metadata) {
String effectiveTool = block.getHarvestTool(metadata);
if (effectiveTool == null) {
float hardness = block.getBlockHardness(world, x, y, z);
if (hardness > 0f) {
for (Map.Entry<String, ItemStack> testToolEntry : testTools.entrySet()) {
ItemStack testTool = testToolEntry.getValue();
if (testTool != null && testTool.getItem() instanceof ItemTool
&& testTool.func_150997_a(block) >= ((ItemTool) testTool.getItem()).func_150913_i()
.getEfficiencyOnProperMaterial()) {
effectiveTool = testToolEntry.getKey();
break;
}
}
}
}
return effectiveTool;
}
public static boolean isBlockUnbreakable(Block block, World world, int x, int y, int z) {
return block.getBlockHardness(world, x, y, z) == -1.0f;
}
}
@@ -0,0 +1,32 @@
package mcp.mobius.waila.addons.harvestability.helpers;
import net.minecraft.util.EnumChatFormatting;
public class ColorHelper {
private static final EnumChatFormatting colorRange[] = { EnumChatFormatting.DARK_RED, EnumChatFormatting.RED,
EnumChatFormatting.GOLD, EnumChatFormatting.YELLOW, EnumChatFormatting.DARK_GREEN, EnumChatFormatting.GREEN,
EnumChatFormatting.AQUA };
private static final EnumChatFormatting booleanColorRange[] = { EnumChatFormatting.DARK_RED, EnumChatFormatting.RED,
EnumChatFormatting.DARK_GREEN, EnumChatFormatting.GREEN };
public static String getRelativeColor(double val, double min, double max) {
if (min == max) return EnumChatFormatting.RESET.toString();
else if ((max > min && val > max) || (min > max && val < max))
return EnumChatFormatting.WHITE.toString() + EnumChatFormatting.BOLD;
else if ((max > min && val < min) || (min > max && val > min))
return colorRange[0].toString() + EnumChatFormatting.BOLD;
int index = (int) (((val - min) / (max - min)) * (colorRange.length - 1));
return colorRange[Math.max(0, Math.min(colorRange.length - 1, index))].toString();
}
public static String getBooleanColor(boolean val) {
return getBooleanColor(val, false);
}
public static String getBooleanColor(boolean val, boolean modified) {
return booleanColorRange[(val ? 2 : 0) + (modified ? 1 : 0)].toString();
}
}
@@ -0,0 +1,22 @@
package mcp.mobius.waila.addons.harvestability.helpers;
import net.minecraft.client.Minecraft;
import org.lwjgl.input.Keyboard;
public class KeyHelper {
public static boolean isCtrlKeyDown() {
// prioritize CONTROL, but allow OPTION as well on Mac (note: GuiScreen's isCtrlKeyDown only checks for the
// OPTION key on Mac)
boolean isCtrlKeyDown = Keyboard.isKeyDown(Keyboard.KEY_LCONTROL) || Keyboard.isKeyDown(Keyboard.KEY_RCONTROL);
if (!isCtrlKeyDown && Minecraft.isRunningOnMac)
isCtrlKeyDown = Keyboard.isKeyDown(Keyboard.KEY_LMETA) || Keyboard.isKeyDown(Keyboard.KEY_RMETA);
return isCtrlKeyDown;
}
public static boolean isShiftKeyDown() {
return Keyboard.isKeyDown(Keyboard.KEY_LSHIFT) || Keyboard.isKeyDown(Keyboard.KEY_RSHIFT);
}
}
@@ -0,0 +1,32 @@
package mcp.mobius.waila.addons.harvestability.helpers;
import net.minecraft.block.Block;
import net.minecraft.item.ItemStack;
import net.minecraftforge.oredict.OreDictionary;
public class OreHelper {
public static boolean isBlockAnOre(Block block) {
return isBlockAnOre(block, 0);
}
public static boolean isBlockAnOre(Block block, int metadata) {
return isItemAnOre(new ItemStack(block, 1, metadata));
}
public static boolean isItemAnOre(ItemStack itemStack) {
// check the ore dictionary to see if it starts with "ore"
int[] oreIDs = OreDictionary.getOreIDs(itemStack);
for (int oreID : oreIDs) {
if (OreDictionary.getOreName(oreID).startsWith("ore")) return true;
}
// ore in the display name (but not part of another word)
if (itemStack.getDisplayName().matches(".*(^|\\s)([oO]re)($|\\s).*")) return true;
// ore as the start of the unlocalized name
if (itemStack.getUnlocalizedName().startsWith("ore")) return true;
return false;
}
}
@@ -0,0 +1,52 @@
package mcp.mobius.waila.addons.harvestability.helpers;
import java.lang.reflect.Method;
import java.util.List;
import net.minecraft.util.EnumChatFormatting;
import net.minecraft.util.StatCollector;
import cpw.mods.fml.common.Loader;
import mcp.mobius.waila.addons.harvestability.proxy.ProxyIguanaTweaks;
public class StringHelper {
public static Class<?> HarvestLevels = null;
public static Method getHarvestLevelName = null;
static {
try {
HarvestLevels = Class.forName("tconstruct.library.util.HarvestLevels");
getHarvestLevelName = HarvestLevels.getDeclaredMethod("getHarvestLevelName", int.class);
} catch (Exception e) {}
}
public static String getHarvestLevelName(int num) {
if (getHarvestLevelName != null) {
try {
return (String) getHarvestLevelName.invoke(null, num);
} catch (Exception e) {}
}
if (Loader.isModLoaded("IguanaTweaksTConstruct")) return ProxyIguanaTweaks.getHarvestLevelName(num);
String unlocalized = "wailaharvestability.harvestlevel" + (num + 1);
if (StatCollector.canTranslate(unlocalized)) return StatCollector.translateToLocal(unlocalized);
return String.valueOf(num);
}
public static String concatenateStringList(List<String> strings, String separator) {
StringBuilder sb = new StringBuilder();
String sep = "";
for (String s : strings) {
sb.append(sep).append(s);
sep = separator;
}
return sb.toString();
}
public static String stripFormatting(String str) {
return EnumChatFormatting.getTextWithoutFormattingCodes(str);
}
}
@@ -0,0 +1,115 @@
package mcp.mobius.waila.addons.harvestability.helpers;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import net.minecraft.block.Block;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraftforge.common.ForgeHooks;
import cpw.mods.fml.common.Loader;
public class ToolHelper {
// tinkers construct
private static Class<?> HarvestTool = null;
private static Class<?> DualHarvestTool = null;
private static Method getHarvestType = null;
private static Method getSecondHarvestType = null;
public static boolean tinkersConstructLoaded = false;
public static void init() {
if (Loader.isModLoaded("TConstruct")) {
try {
HarvestTool = Class.forName("tconstruct.library.tools.HarvestTool");
DualHarvestTool = Class.forName("tconstruct.library.tools.DualHarvestTool");
getHarvestType = HarvestTool.getDeclaredMethod("getHarvestType");
getSecondHarvestType = DualHarvestTool.getDeclaredMethod("getSecondHarvestType");
getHarvestType.setAccessible(true);
getSecondHarvestType.setAccessible(true);
tinkersConstructLoaded = true;
} catch (Exception e) {
return;
}
}
}
public static boolean hasToolTag(ItemStack itemStack) {
return itemStack.hasTagCompound() && itemStack.getTagCompound().hasKey("InfiTool");
}
public static NBTTagCompound getToolTag(ItemStack tool) {
NBTTagCompound tag = null;
if (tool.hasTagCompound()) tag = tool.getTagCompound().getCompoundTag("InfiTool");
return tag;
}
public static int getPrimaryHarvestLevel(NBTTagCompound toolTag) {
return toolTag.getInteger("HarvestLevel");
}
public static int getSecondaryHarvestLevel(NBTTagCompound toolTag) {
return toolTag.getInteger("HarvestLevel2");
}
public static Set<String> getToolClassesOf(ItemStack tool) {
return tool.getItem().getToolClasses(tool);
}
public static boolean isToolOfClass(ItemStack tool, String toolClass) {
return getToolClassesOf(tool).contains(toolClass);
}
public static boolean toolHasAnyToolClass(ItemStack tool) {
return !getToolClassesOf(tool).isEmpty();
}
public static boolean isToolEffectiveAgainst(ItemStack tool, Block block, int metadata, String effectiveToolClass) {
if (tinkersConstructLoaded && HarvestTool.isInstance(tool.getItem())) {
Item item = tool.getItem();
List<String> harvestTypes = new ArrayList<String>();
try {
harvestTypes.add((String) getHarvestType.invoke(item));
} catch (Exception e) {
e.printStackTrace();
tinkersConstructLoaded = false;
}
if (DualHarvestTool.isInstance(item)) {
try {
harvestTypes.add((String) getSecondHarvestType.invoke(item));
} catch (Exception e) {
e.printStackTrace();
tinkersConstructLoaded = false;
}
}
return harvestTypes.contains(effectiveToolClass);
}
return ForgeHooks.isToolEffective(tool, block, metadata)
|| (toolHasAnyToolClass(tool) ? isToolOfClass(tool, effectiveToolClass)
: tool.getItem().getDigSpeed(tool, block, metadata) > 1.5f);
}
public static boolean canToolHarvestLevel(ItemStack tool, Block block, int metadata, int harvestLevel) {
boolean canTinkersToolHarvestBlock = false;
NBTTagCompound toolTag = ToolHelper.getToolTag(tool);
if (toolTag != null) {
int toolHarvestLevel = Math
.max(ToolHelper.getPrimaryHarvestLevel(toolTag), ToolHelper.getSecondaryHarvestLevel(toolTag));
canTinkersToolHarvestBlock = toolHarvestLevel >= harvestLevel;
}
return canTinkersToolHarvestBlock || ForgeHooks.canToolHarvestBlock(block, metadata, tool);
}
public static boolean canToolHarvestBlock(ItemStack tool, Block block, int metadata) {
return block.getMaterial().isToolNotRequired() || tool.func_150998_b(block); // func_150998_b = canHarvestBlock
}
}
@@ -0,0 +1,33 @@
package mcp.mobius.waila.addons.harvestability.proxy;
import java.lang.reflect.Method;
import net.minecraft.block.Block;
import cpw.mods.fml.common.Loader;
public class ProxyCreativeBlocks {
private static Class<?> CreativeBlocks = null;
private static Method isCreativeBlock = null;
static {
if (Loader.isModLoaded("CreativeBlocks")) {
try {
CreativeBlocks = Class.forName("squeek.creativeblocks.CreativeBlocks");
isCreativeBlock = CreativeBlocks.getDeclaredMethod("isCreativeBlock", Block.class, int.class);
} catch (Exception e) {
e.printStackTrace();
}
}
}
public static boolean isCreativeBlock(Block block, int meta) {
if (isCreativeBlock != null) {
try {
return (Boolean) isCreativeBlock.invoke(null, block, meta);
} catch (Exception e) {}
}
return false;
}
}
@@ -0,0 +1,35 @@
package mcp.mobius.waila.addons.harvestability.proxy;
import net.minecraft.block.Block;
import net.minecraft.item.ItemStack;
import cpw.mods.fml.common.Loader;
import cpw.mods.fml.common.registry.GameRegistry;
public class ProxyGregTech {
public static final String modID = "gregtech";
public static final String oreBlockID = "gt.blockores";
public static final String oreBlockUniqueIdentifier = modID + ":" + oreBlockID;
public static final String casingID = "gt.blockcasings";
public static final String casingUniqueIdentifier = modID + ":" + casingID;
public static final String machineID = "gt.blockmachines";
public static final String machineUniqueIdentifier = modID + ":" + machineID;
public static boolean isModLoaded = Loader.isModLoaded(modID);
public static boolean isOreBlock(Block block) {
return isModLoaded && GameRegistry.findUniqueIdentifierFor(block).toString().equals(oreBlockUniqueIdentifier);
}
public static boolean isCasing(Block block) {
return isModLoaded && GameRegistry.findUniqueIdentifierFor(block).toString().equals(casingUniqueIdentifier);
}
public static boolean isMachine(Block block) {
return isModLoaded && GameRegistry.findUniqueIdentifierFor(block).toString().equals(machineUniqueIdentifier);
}
public static boolean isGTTool(ItemStack itemStack) {
return isModLoaded && itemStack.hasTagCompound() && itemStack.getTagCompound().hasKey("GT.ToolStats");
}
}
@@ -0,0 +1,30 @@
package mcp.mobius.waila.addons.harvestability.proxy;
import java.lang.reflect.Method;
public class ProxyIguanaTweaks {
private static Class<?> HarvestLevels = null;
private static Method proxyGetHarvestLevelName;
public static void init() {
try {
HarvestLevels = Class.forName("iguanaman.iguanatweakstconstruct.util.HarvestLevels");
proxyGetHarvestLevelName = HarvestLevels.getDeclaredMethod("getHarvestLevelName", int.class);
} catch (Exception e) {
e.printStackTrace();
}
}
public static String getHarvestLevelName(int num) {
String harvestLevelName = "<Unknown>";
try {
harvestLevelName = (String) proxyGetHarvestLevelName.invoke(null, num);
} catch (Exception e) {
e.printStackTrace();
}
return harvestLevelName;
}
}
@@ -7,11 +7,11 @@ import mcp.mobius.waila.api.impl.ModuleRegistrar;
public class HarvestcraftModule {
public static Class TileEntityPamCrop = null;
public static Class<?> TileEntityPamCrop = null;
public static void register() {
try {
Class PamHarvestCraft = Class.forName("assets.pamharvestcraft.PamHarvestCraft");
Class.forName("assets.pamharvestcraft.PamHarvestCraft");
Waila.log.log(Level.INFO, "PamHarvestCraft mod found.");
} catch (ClassNotFoundException e) {
Waila.log.log(Level.INFO, "[PamHarvestCraft] PamHarvestCraft mod not found.");
@@ -82,32 +82,32 @@ public class HUDHandlerTEGenerator implements IWailaDataProvider {
if (IC2Module.TileBaseGenerator.isInstance(te)) {
storage = IC2Module.TileBaseGenerator_storage.getDouble(te);
production = (long) IC2Module.TileBaseGenerator_production.getInt(te);
maxStorage = (long) IC2Module.TileBaseGenerator_maxStorage.getShort(te);
production = IC2Module.TileBaseGenerator_production.getInt(te);
maxStorage = IC2Module.TileBaseGenerator_maxStorage.getShort(te);
}
else if (IC2Module.TileGeoGenerator.isInstance(te)) {
storage = IC2Module.TileGeoGenerator_storage.getDouble(te);
production = (long) IC2Module.TileGeoGenerator_production.getInt(te);
maxStorage = (long) IC2Module.TileGeoGenerator_maxStorage.getShort(te);
production = IC2Module.TileGeoGenerator_production.getInt(te);
maxStorage = IC2Module.TileGeoGenerator_maxStorage.getShort(te);
}
else if (IC2Module.TileKineticGenerator.isInstance(te)) {
storage = IC2Module.TileKineticGenerator_storage.getDouble(te);
production = MathHelper.floor_double_long(IC2Module.TileKineticGenerator_production.getDouble(te));
maxStorage = (long) IC2Module.TileKineticGenerator_maxStorage.getInt(te);
maxStorage = IC2Module.TileKineticGenerator_maxStorage.getInt(te);
}
else if (IC2Module.TileSemifluidGenerator.isInstance(te)) {
storage = IC2Module.TileSemifluidGenerator_storage.getDouble(te);
production = MathHelper.floor_double_long(IC2Module.TileSemifluidGenerator_production.getDouble(te));
maxStorage = (long) IC2Module.TileSemifluidGenerator_maxStorage.getShort(te);
maxStorage = IC2Module.TileSemifluidGenerator_maxStorage.getShort(te);
}
else if (IC2Module.TileStirlingGenerator.isInstance(te)) {
storage = IC2Module.TileStirlingGenerator_storage.getDouble(te);
production = MathHelper.floor_double_long(IC2Module.TileStirlingGenerator_production.getDouble(te));
maxStorage = (long) IC2Module.TileStirlingGenerator_maxStorage.getShort(te);
maxStorage = IC2Module.TileStirlingGenerator_maxStorage.getShort(te);
}
tag.setDouble("storage", storage);
@@ -9,27 +9,27 @@ import mcp.mobius.waila.api.impl.ModuleRegistrar;
public class IC2Module {
public static Class TileBaseGenerator = null;
public static Class<?> TileBaseGenerator = null;
public static Field TileBaseGenerator_storage = null;
public static Field TileBaseGenerator_maxStorage = null;
public static Field TileBaseGenerator_production = null;
public static Class TileGeoGenerator = null;
public static Class<?> TileGeoGenerator = null;
public static Field TileGeoGenerator_storage = null;
public static Field TileGeoGenerator_maxStorage = null;
public static Field TileGeoGenerator_production = null;
public static Class TileKineticGenerator = null;
public static Class<?> TileKineticGenerator = null;
public static Field TileKineticGenerator_storage = null;
public static Field TileKineticGenerator_maxStorage = null;
public static Field TileKineticGenerator_production = null;
public static Class TileSemifluidGenerator = null;
public static Class<?> TileSemifluidGenerator = null;
public static Field TileSemifluidGenerator_storage = null;
public static Field TileSemifluidGenerator_maxStorage = null;
public static Field TileSemifluidGenerator_production = null;
public static Class TileStirlingGenerator = null;
public static Class<?> TileStirlingGenerator = null;
public static Field TileStirlingGenerator_storage = null;
public static Field TileStirlingGenerator_maxStorage = null;
public static Field TileStirlingGenerator_production = null;
@@ -68,7 +68,6 @@ public class IC2Module {
TileStirlingGenerator_maxStorage = TileStirlingGenerator.getDeclaredField("maxEUStorage");
TileStirlingGenerator_production = TileStirlingGenerator.getDeclaredField("production");
// ModuleRegistrar.instance().addConfigRemote("Thermal Expansion", "thermalexpansion.energyhandler");
ModuleRegistrar.instance().registerBodyProvider(new HUDHandlerTEGenerator(), TileBaseGenerator);
ModuleRegistrar.instance().registerBodyProvider(new HUDHandlerTEGenerator(), TileGeoGenerator);
ModuleRegistrar.instance().registerBodyProvider(new HUDHandlerTEGenerator(), TileKineticGenerator);
@@ -85,8 +84,14 @@ public class IC2Module {
ModuleRegistrar.instance().addConfigRemote("IndustrialCraft2", "ic2.outputeu");
} catch (Exception e) {
Waila.log.log(Level.WARN, "[IndustrialCraft 2] Error while loading generator hooks." + e);
if (e instanceof ClassNotFoundException || e instanceof NoSuchFieldException) {
Waila.log.log(Level.INFO, "[IndustrialCraft 2] IndustrialCraft 2 mod not found.");
} else {
Waila.log.log(Level.WARN, "[IndustrialCraft 2] Error while loading generator hooks." + e);
}
return;
}
Waila.log.log(Level.INFO, "IndustrialCraft 2 mod found.");
}
}
@@ -7,11 +7,11 @@ import mcp.mobius.waila.api.impl.ModuleRegistrar;
public class MagicalCropsModule {
public static Class BlockMagicalCrops = null;
public static Class<?> BlockMagicalCrops = null;
public static void register() {
try {
Class MagicalCrops = Class.forName("magicalcrops.mod_sCrops");
Class.forName("magicalcrops.mod_sCrops");
Waila.log.log(Level.INFO, "MagicalCrops mod found.");
} catch (ClassNotFoundException e) {
Waila.log.log(Level.INFO, "[MagicalCrops] MagicalCrops mod not found.");
@@ -7,12 +7,11 @@ import mcp.mobius.waila.api.impl.ModuleRegistrar;
public class OpenBlocksModule {
public static Class ModOpenBlocks = null;
public static Class TileEntityTank = null;
public static Class<?> TileEntityTank = null;
public static void register() {
try {
Class ModOpenBlocks = Class.forName("openblocks.OpenBlocks");
Class.forName("openblocks.OpenBlocks");
Waila.log.log(Level.INFO, "OpenBlocks mod found.");
} catch (ClassNotFoundException e) {
Waila.log.log(Level.INFO, "[OpenBlocks] OpenBlocks mod not found.");
@@ -41,12 +41,9 @@ public class HUDDecoratorRsGateLogic implements IWailaFMPDecorator {
subID = NBTUtil.getNBTInteger(accessor.getNBTData(), "subID");
shape = NBTUtil.getNBTInteger(accessor.getNBTData(), "shape");
// orient = orient - ((orient & 0x10) + (orient & 0x8) + (orient & 0x4));
int hOrient = orient & 0x3;
ForgeDirection vOrient = ForgeDirection.getOrientation((orient - (orient & 0x3)) >> 2);
// System.out.printf("%s\n", ForgeDirection.getOrientation(vOrient));
if (vOrient == ForgeDirection.EAST) hOrient -= 1;
if (vOrient == ForgeDirection.WEST) hOrient += 1;
@@ -1,9 +1,6 @@
package mcp.mobius.waila.addons.projectred;
import static mcp.mobius.waila.api.SpecialChars.ALIGNRIGHT;
import static mcp.mobius.waila.api.SpecialChars.GRAY;
import static mcp.mobius.waila.api.SpecialChars.TAB;
import static mcp.mobius.waila.api.SpecialChars.WHITE;
import static mcp.mobius.waila.api.SpecialChars.*;
import java.util.List;
@@ -0,0 +1,41 @@
package mcp.mobius.waila.addons.projectred;
import java.util.List;
import net.minecraft.item.ItemStack;
import mcp.mobius.waila.api.ITaggedList;
import mcp.mobius.waila.api.IWailaConfigHandler;
import mcp.mobius.waila.api.IWailaFMPAccessor;
import mcp.mobius.waila.api.IWailaFMPProvider;
import mcp.mobius.waila.cbcore.LangUtil;
import mcp.mobius.waila.utils.NBTUtil;
public class HUDFMPWires implements IWailaFMPProvider {
@Override
public List<String> getWailaHead(ItemStack itemStack, List<String> currenttip, IWailaFMPAccessor accessor,
IWailaConfigHandler config) {
return currenttip;
}
@Override
public List<String> getWailaBody(ItemStack itemStack, List<String> currenttip, IWailaFMPAccessor accessor,
IWailaConfigHandler config) {
if (!config.getConfig("pr.showsignal")) return currenttip;
ITaggedList<String, String> tagList = (ITaggedList<String, String>) currenttip;
int signal = ((NBTUtil.getNBTInteger(accessor.getNBTData(), "signal") & 0xff) + 16) / 17;
if (tagList.getEntries("signal").isEmpty()) {
tagList.add(String.format("%s : %s", LangUtil.translateG("hud.msg.power"), signal), "signal");
}
return currenttip;
}
@Override
public List<String> getWailaTail(ItemStack itemStack, List<String> currenttip, IWailaFMPAccessor accessor,
IWailaConfigHandler config) {
return currenttip;
}
}
@@ -9,7 +9,7 @@ public class ProjectRedModule {
public static void register() {
try {
Class ModClass = Class.forName("mrtjp.projectred.ProjectRedIntegration");
Class.forName("mrtjp.projectred.ProjectRedIntegration");
Waila.log.log(Level.INFO, "ProjectRed|Integration mod found.");
} catch (ClassNotFoundException e) {
Waila.log.log(Level.INFO, "[ProjectRed] ProjectRed|Integration mod not found.");
@@ -18,6 +18,7 @@ public class ProjectRedModule {
ModuleRegistrar.instance().addConfigRemote("Project:Red", "pr.showio");
ModuleRegistrar.instance().addConfigRemote("Project:Red", "pr.showdata");
ModuleRegistrar.instance().addConfigRemote("Project:Red", "pr.showsignal");
ModuleRegistrar.instance().registerBodyProvider(new HUDFMPGateLogic(), "pr_sgate");
ModuleRegistrar.instance().registerBodyProvider(new HUDFMPGateLogic(), "pr_igate");
@@ -25,6 +26,10 @@ public class ProjectRedModule {
ModuleRegistrar.instance().registerBodyProvider(new HUDFMPGateLogic(), "pr_bgate");
ModuleRegistrar.instance().registerBodyProvider(new HUDFMPGateLogic(), "pr_agate");
ModuleRegistrar.instance().registerBodyProvider(new HUDFMPGateLogic(), "pr_rgate");
ModuleRegistrar.instance().registerBodyProvider(new HUDFMPWires(), "pr_redwire");
ModuleRegistrar.instance().registerBodyProvider(new HUDFMPWires(), "pr_insulated");
ModuleRegistrar.instance().registerBodyProvider(new HUDFMPWires(), "pr_fredwire");
ModuleRegistrar.instance().registerBodyProvider(new HUDFMPWires(), "pr_finsulated");
ModuleRegistrar.instance().registerDecorator(new HUDDecoratorRsGateLogic(), "pr_sgate");
ModuleRegistrar.instance().registerDecorator(new HUDDecoratorRsGateLogic(), "pr_igate");
@@ -32,10 +37,6 @@ public class ProjectRedModule {
ModuleRegistrar.instance().registerDecorator(new HUDDecoratorRsGateLogic(), "pr_bgate");
ModuleRegistrar.instance().registerDecorator(new HUDDecoratorRsGateLogic(), "pr_agate");
ModuleRegistrar.instance().registerDecorator(new HUDDecoratorRsGateLogic(), "pr_rgate");
// ModuleRegistrar.instance().registerBlockDecorator(new HUDDecoratorRsGateLogic(), BlockMultipart);
// ModuleRegistrar.instance().registerBodyProvider(new HUDHandlerRsGateLogic(), BlockMultipart);
// ModuleRegistrar.instance().registerSyncedNBTKey("*", BlockMultipart);
}
}
@@ -9,14 +9,13 @@ import mcp.mobius.waila.api.impl.ModuleRegistrar;
public class RailcraftModule {
public static Class TileTankBase = null;
public static Class ITankTile = null;
public static Class<?> TileTankBase = null;
public static Class<?> ITankTile = null;
public static Method ITankTile_getTank = null;
// public static Class StandardTank = null;
public static void register() {
try {
Class ModRailcraft = Class.forName("mods.railcraft.common.core.Railcraft");
Class.forName("mods.railcraft.common.core.Railcraft");
Waila.log.log(Level.INFO, "Railcraft mod found.");
} catch (ClassNotFoundException e) {
Waila.log.log(Level.INFO, "[Railcraft] Railcraft mod not found.");
@@ -27,7 +26,6 @@ public class RailcraftModule {
TileTankBase = Class.forName("mods.railcraft.common.blocks.machine.beta.TileTankBase");
ITankTile = Class.forName("mods.railcraft.common.blocks.machine.ITankTile");
ITankTile_getTank = ITankTile.getMethod("getTank");
// StandardTank = Class.forName("mods.railcraft.common.fluids.tanks.StandardTank");
} catch (ClassNotFoundException e) {
Waila.log.log(Level.WARN, "[Railcraft] Class not found. " + e);
@@ -16,15 +16,6 @@ public class HUDTileEntityCamo implements IWailaDataProvider {
@Override
public ItemStack getWailaStack(IWailaDataAccessor accessor, IWailaConfigHandler config) {
/*
* if (!config.getConfig("secretrooms.hide")) return null; if (
* SecretRoomsModule.BlockCamoTrapDoor.isInstance(accessor.getBlock()) ){ return
* this.getTrapDoorBlock(accessor); } else if (
* SecretRoomsModule.BlockTorchLever.isInstance(accessor.getBlock()) ){ return new ItemStack(Blocks.torch); }
* else if (accessor.getNBTData() != null){ NBTTagCompound tag = accessor.getNBTData(); if (tag.hasKey("copyID")
* && tag.hasKey("copyMeta")){ int copyID = accessor.getNBTInteger(tag, "copyID"); int copyMeta =
* accessor.getNBTInteger(tag, "copyMeta"); return new ItemStack(copyID, 1, copyMeta); } }
*/
return null;
}
@@ -47,14 +38,6 @@ public class HUDTileEntityCamo implements IWailaDataProvider {
}
private ItemStack getTrapDoorBlock(IWailaDataAccessor accessor) {
// modify coordinates to get hinge Block.
/*
* int i = accessor.getMetadata(); int j = accessor.getPosition().blockX; int k = accessor.getPosition().blockZ;
* if ((i & 3) == 0) { k++; } if ((i & 3) == 1) { k--; } if ((i & 3) == 2) { j++; } if ((i & 3) == 3) { j--; }
* int blockID = accessor.getWorld().getBlockId(j, accessor.getPosition().blockY, k); int blockMeta =
* accessor.getWorld().getBlockMetadata(j, accessor.getPosition().blockY, k); return new ItemStack(blockID, 1,
* blockMeta);
*/
return null;
}
@@ -2,27 +2,6 @@ package mcp.mobius.waila.addons.secretrooms;
public class SecretRoomsModule {
public static Class TileEntityCamo = null;
public static Class BlockTorchLever = null;
public static Class BlockCamoTrapDoor = null;
public static void register() {
/*
* try{ Class SecretRooms = Class.forName("com.github.AbrarSyed.secretroomsmod.common.SecretRooms");
* Waila.log.log(Level.INFO, "SecretRooms mod found."); } catch (ClassNotFoundException e){
* Waila.log.log(Level.INFO, "[SecretRooms] SecretRooms mod not found."); return; } try{ TileEntityCamo =
* Class.forName("com.github.AbrarSyed.secretroomsmod.blocks.TileEntityCamo"); BlockTorchLever =
* Class.forName("com.github.AbrarSyed.secretroomsmod.blocks.BlockTorchLever"); BlockCamoTrapDoor =
* Class.forName("com.github.AbrarSyed.secretroomsmod.blocks.BlockCamoTrapDoor"); } catch
* (ClassNotFoundException e){ Waila.log.log(Level.WARNING, "[SecretRooms] Class not found. " + e); return; }
* catch (Exception e) { Waila.log.log(Level.WARNING, "[SecretRooms] Error while loading module. " + e); return;
* } ModuleRegistrar.instance().addConfig("SecretRooms", "secretrooms.hide");
* ModuleRegistrar.instance().registerStackProvider(new HUDTileEntityCamo(), TileEntityCamo);
* ModuleRegistrar.instance().registerStackProvider(new HUDTileEntityCamo(), BlockTorchLever);
* ModuleRegistrar.instance().registerStackProvider(new HUDTileEntityCamo(), BlockCamoTrapDoor);
* ModuleRegistrar.instance().registerSyncedNBTKey("copyID", TileEntityCamo);
* ModuleRegistrar.instance().registerSyncedNBTKey("copyMeta", TileEntityCamo);
*/
}
public static void register() {}
}
@@ -1,8 +1,6 @@
package mcp.mobius.waila.addons.statues;
import static mcp.mobius.waila.api.SpecialChars.BLUE;
import static mcp.mobius.waila.api.SpecialChars.ITALIC;
import static mcp.mobius.waila.api.SpecialChars.WHITE;
import static mcp.mobius.waila.api.SpecialChars.*;
import java.util.List;
@@ -29,7 +27,7 @@ public class HUDHandlerStatues implements IWailaDataProvider {
IWailaConfigHandler config) {
try {
String skinName = (String) StatuesModule.skinName.get(accessor.getTileEntity());
if (skinName.equals("")) {
if (skinName.isEmpty()) {
TileEntity belowEnt = accessor.getWorld().getTileEntity(
accessor.getPosition().blockX,
accessor.getPosition().blockY - 1,
@@ -38,7 +36,7 @@ public class HUDHandlerStatues implements IWailaDataProvider {
skinName = (String) StatuesModule.skinName.get(belowEnt);
}
if (skinName.equals("")) {
if (skinName.isEmpty()) {
currenttip.clear();
currenttip.add(WHITE + "Statue : Unknown");
} else {
@@ -50,12 +48,6 @@ public class HUDHandlerStatues implements IWailaDataProvider {
currenttip = WailaExceptionHandler.handleErr(e, accessor.getTileEntity().getClass().getName(), currenttip);
}
/*
* String skinName = accessor.getNBTData().getString("skin"); if (skinName.equals("")){ if
* (accessor.getWorld().getBlockTileEntity(accessor.getPosition().blockX, accessor.getPosition().blockY - 1,
* accessor.getPosition().blockZ) != null){ } }
*/
return currenttip;
}
@@ -9,12 +9,12 @@ import mcp.mobius.waila.api.impl.ModuleRegistrar;
public class StatuesModule {
public static Class TileEntityStatue = null;
public static Class<?> TileEntityStatue = null;
public static Field skinName = null;
public static void register() {
try {
Class Statues = Class.forName("info.jbcs.minecraft.statues.Statues");
Class.forName("info.jbcs.minecraft.statues.Statues");
Waila.log.log(Level.INFO, "Statues mod found.");
} catch (ClassNotFoundException e) {
Waila.log.log(Level.INFO, "[Statues] Statues mod not found.");
@@ -24,10 +24,7 @@ public class StatuesModule {
try {
TileEntityStatue = Class.forName("info.jbcs.minecraft.statues.TileEntityStatue");
skinName = TileEntityStatue.getDeclaredField("skinName");
} catch (ClassNotFoundException e) {
Waila.log.log(Level.WARN, "[Statues] Class not found. " + e);
return;
} catch (NoSuchFieldException e) {
} catch (ClassNotFoundException | NoSuchFieldException e) {
Waila.log.log(Level.WARN, "[Statues] Class not found. " + e);
return;
}
@@ -1,10 +1,6 @@
package mcp.mobius.waila.addons.stevescarts;
import static mcp.mobius.waila.api.SpecialChars.ALIGNRIGHT;
import static mcp.mobius.waila.api.SpecialChars.GRAY;
import static mcp.mobius.waila.api.SpecialChars.ITALIC;
import static mcp.mobius.waila.api.SpecialChars.TAB;
import static mcp.mobius.waila.api.SpecialChars.WHITE;
import static mcp.mobius.waila.api.SpecialChars.*;
import java.util.ArrayList;
import java.util.List;
@@ -22,8 +18,8 @@ import mcp.mobius.waila.utils.WailaExceptionHandler;
public class HUDCargoManager implements IWailaDataProvider {
private static String colors[] = { "NA", "Red", "Blue", "Yellow", "Green", "Dis." };
private static String sides[] = { "Yellow", "Blue", "Green", "Red" };
private static String[] colors = { "NA", "Red", "Blue", "Yellow", "Green", "Dis." };
private static String[] sides = { "Yellow", "Blue", "Green", "Red" };
@Override
public ItemStack getWailaStack(IWailaDataAccessor accessor, IWailaConfigHandler config) {
@@ -73,15 +69,14 @@ public class HUDCargoManager implements IWailaDataProvider {
int doReturn = accessor.getNBTInteger(tag, "doReturn");
for (int i = 0; i < 4; i++) {
int target = accessor.getNBTInteger(tag, "target" + String.valueOf(i));
int color = accessor.getNBTInteger(tag, "color" + String.valueOf(i));
int amount = accessor.getNBTInteger(tag, "amount" + String.valueOf(i));
int target = accessor.getNBTInteger(tag, "target" + i);
int color = accessor.getNBTInteger(tag, "color" + i);
int amount = accessor.getNBTInteger(tag, "amount" + i);
if (color == 5) continue;
String direction = (toCart & (1 << i)) != 0 ? "Load" : "Unload";
String shouldReturn = (doReturn & (1 << i)) != 0 ? "Ret." : "Cont.";
String sAmount = amount == 0 ? "All"
: String.valueOf(this.getAmount(amount) + " " + this.getAmountType(amount));
String sAmount = amount == 0 ? "All" : this.getAmount(amount) + " " + this.getAmountType(amount);
String selection = (String) StevesCartsModule.GetSelectionName
.invoke(StevesCartsModule.CargoItemSelection.cast(itemSelection.get(target)));
@@ -112,40 +107,17 @@ public class HUDCargoManager implements IWailaDataProvider {
}
public int getAmount(int id) {
switch (id) {
case 1:
return 1;
case 2:
return 3;
case 3:
return 8;
case 4:
return 16;
case 5:
return 32;
case 6:
return 64;
case 7:
return 1;
case 8:
return 2;
case 9:
return 3;
case 10:
return 5;
default:
return 0;
}
return switch (id) {
case 1, 7 -> 1;
case 2, 9 -> 3;
case 3 -> 8;
case 4 -> 16;
case 5 -> 32;
case 6 -> 64;
case 8 -> 2;
case 10 -> 5;
default -> 0;
};
}
// 0 - MAX
@@ -28,25 +28,6 @@ public class HUDCartAssembler implements IWailaDataProvider {
@Override
public List<String> getWailaBody(ItemStack itemStack, List<String> currenttip, IWailaDataAccessor accessor,
IWailaConfigHandler config) {
/*
* if (!config.getConfig("stevescarts.showall")) return currenttip; if
* (config.getConfig("stevescarts.shifttoggle") && !accessor.getPlayer().isSneaking()){ currenttip.add(ITALIC +
* "Press shift for more data"); return currenttip; } int currTime =
* accessor.getNBTInteger(accessor.getNBTData(), "currentTime"); int maxTime =
* accessor.getNBTInteger(accessor.getNBTData(), "maxTime"); int isAssembling =
* accessor.getNBTInteger(accessor.getNBTData(), "isAssembling"); NBTTagList slots =
* accessor.getNBTData().getTagList("Items"); boolean hasOutput = false; Item ItemCartModule = null; try {
* ItemCartModule = (Item)StevesCartsModule.ItemCartModule.get(null); } catch (Exception e) { currenttip =
* WailaExceptionHandler.handleErr(e, accessor.getTileEntity().getClass().getName(), currenttip); return
* currenttip; } for (int i = 0; i < slots.tagCount(); i++){ NBTTagCompound subtag =
* (NBTTagCompound)(slots.tagAt(i)); byte slot = subtag.getByte("Slot"); if (slot == 30) hasOutput = true; } if
* (isAssembling == 1){ currenttip.add(String.format("Time remaining : %.1f sec", (maxTime - currTime) /
* 20.0f)); NBTTagCompound output = accessor.getNBTData().getCompoundTag("Output"); short outID =
* output.getShort("id"); byte[] metas = output.getCompoundTag("tag").getByteArray("Modules"); for (byte b :
* metas){ currenttip.add(new ItemStack(ItemCartModule, 1, b).getDisplayName()); } } else if (hasOutput)
* currenttip.add(String.format("Time remaining : <Done>")); else
* currenttip.add(String.format("Time remaining : <Idle>"));
*/
return currenttip;
}
@@ -1,10 +1,6 @@
package mcp.mobius.waila.addons.stevescarts;
import static mcp.mobius.waila.api.SpecialChars.ALIGNRIGHT;
import static mcp.mobius.waila.api.SpecialChars.GRAY;
import static mcp.mobius.waila.api.SpecialChars.ITALIC;
import static mcp.mobius.waila.api.SpecialChars.TAB;
import static mcp.mobius.waila.api.SpecialChars.WHITE;
import static mcp.mobius.waila.api.SpecialChars.*;
import java.util.List;
@@ -20,8 +16,8 @@ import mcp.mobius.waila.api.IWailaDataProvider;
public class HUDLiquidManager implements IWailaDataProvider {
private static String colors[] = { "NA", "Red", "Blue", "Yellow", "Green", "Dis." };
private static String sides[] = { "Yellow", "Blue", "Green", "Red" };
private static String[] colors = { "NA", "Red", "Blue", "Yellow", "Green", "Dis." };
private static String[] sides = { "Yellow", "Blue", "Green", "Red" };
@Override
public ItemStack getWailaStack(IWailaDataAccessor accessor, IWailaConfigHandler config) {
@@ -67,9 +63,8 @@ public class HUDLiquidManager implements IWailaDataProvider {
int doReturn = accessor.getNBTInteger(tag, "doReturn");
for (int i = 0; i < 4; i++) {
int target = accessor.getNBTInteger(tag, "target" + String.valueOf(i));
int color = accessor.getNBTInteger(tag, "color" + String.valueOf(i));
int amount = accessor.getNBTInteger(tag, "amount" + String.valueOf(i));
int color = accessor.getNBTInteger(tag, "color" + i);
int amount = accessor.getNBTInteger(tag, "amount" + i);
String fluidName = "<Empty>";
int fluidAmount = 0;
@@ -84,10 +79,8 @@ public class HUDLiquidManager implements IWailaDataProvider {
String direction = (toCart & (1 << i)) != 0 ? "Load" : "Unload";
String shouldReturn = (doReturn & (1 << i)) != 0 ? "Ret." : "Cont.";
String sAmount = amount == 0 ? "All" : String.valueOf(this.getMaxAmountBuckets(amount)) + " mB";
String sAmount = amount == 0 ? "All" : this.getMaxAmountBuckets(amount) + " mB";
// String selection = (String)
// StevesCartsModule.GetSelectionName.invoke(StevesCartsModule.CargoItemSelection.cast(itemSelection.get(target)));
currenttip.add(
String.format(
"Side %s %s[ %s ]%s[ %s , %s]%s[ %s ]",
@@ -112,30 +105,19 @@ public class HUDLiquidManager implements IWailaDataProvider {
}
public int getMaxAmountBuckets(int id) {
switch (id) {
case 1:
return 250;
case 2:
return 500;
case 3:
return 750;
case 4:
return 1000;
case 5:
return 2000;
case 6:
return 3000;
case 7:
return 5000;
case 8:
return 7500;
case 9:
return 10000;
case 10:
return 15000;
default:
return 0;
}
return switch (id) {
case 1 -> 250;
case 2 -> 500;
case 3 -> 750;
case 4 -> 1000;
case 5 -> 2000;
case 6 -> 3000;
case 7 -> 5000;
case 8 -> 7500;
case 9 -> 10000;
case 10 -> 15000;
default -> 0;
};
}
@Override
@@ -1,10 +1,6 @@
package mcp.mobius.waila.addons.stevescarts;
import static mcp.mobius.waila.api.SpecialChars.ALIGNRIGHT;
import static mcp.mobius.waila.api.SpecialChars.GRAY;
import static mcp.mobius.waila.api.SpecialChars.ITALIC;
import static mcp.mobius.waila.api.SpecialChars.TAB;
import static mcp.mobius.waila.api.SpecialChars.WHITE;
import static mcp.mobius.waila.api.SpecialChars.*;
import java.util.List;
@@ -60,16 +56,16 @@ public class HUDMinecartModular implements IWailaEntityProvider {
byte[] metas = tag.getByteArray("Modules");
for (int i = 0; i < metas.length; i++) {
if (tag.hasKey("module" + String.valueOf(i) + "Fuel")) {
if (tag.hasKey("module" + i + "Fuel")) {
int fuel = accessor.getNBTInteger(tag, "module" + String.valueOf(i) + "Fuel");
int fuel = accessor.getNBTInteger(tag, "module" + i + "Fuel");
currenttip.add(
new ItemStack(ItemCartModule, 1, metas[i])
.getDisplayName() + TAB + ALIGNRIGHT + " [ " + WHITE + fuel + GRAY + " POW ]");
} else if (tag.hasKey("module" + String.valueOf(i) + "Fluid")) {
} else if (tag.hasKey("module" + i + "Fluid")) {
NBTTagCompound subtag = tag.getCompoundTag("module" + String.valueOf(i) + "Fluid");
NBTTagCompound subtag = tag.getCompoundTag("module" + i + "Fluid");
if (subtag.hasKey("Amount")) {
int amount = accessor.getNBTInteger(subtag, "Amount");
String fluid = subtag.getString("FluidName");
@@ -78,7 +74,7 @@ public class HUDMinecartModular implements IWailaEntityProvider {
+ ALIGNRIGHT
+ " [ "
+ WHITE
+ String.valueOf(amount)
+ amount
+ GRAY
+ " mB of "
+ WHITE
@@ -5,50 +5,13 @@ import java.lang.reflect.Method;
public class StevesCartsModule {
public static Class TileEntityCartAssembler = null;
public static Class TileEntityCargo = null;
public static Class TileEntityLiquid = null;
public static Class MinecartModular = null;
public static Class StevesItems = null;
public static Class CargoItemSelection = null;
public static Class<?> CargoItemSelection = null;
public static Field ItemCartComponent = null; // Items.component
public static Field ItemCartModule = null; // Items.modules
public static Field ItemSelections = null; // TileEntityCargo.itemSelections
public static Method GetSelectionName = null; // CargoItemSelection.getName
public static void register() {
/*
* try{ Class ModStevesCarts = Class.forName("vswe.stevescarts.StevesCarts"); Waila.log.log(Level.INFO,
* "StevesCarts mod found."); } catch (ClassNotFoundException e){ Waila.log.log(Level.INFO,
* "[StevesCarts] StevesCarts mod not found."); return; } try{ TileEntityCartAssembler =
* Class.forName("vswe.stevescarts.TileEntities.TileEntityCartAssembler"); TileEntityCargo =
* Class.forName("vswe.stevescarts.TileEntities.TileEntityCargo"); TileEntityLiquid =
* Class.forName("vswe.stevescarts.TileEntities.TileEntityLiquid"); MinecartModular =
* Class.forName("vswe.stevescarts.Carts.MinecartModular"); StevesItems =
* Class.forName("vswe.stevescarts.Items.Items"); CargoItemSelection =
* Class.forName("vswe.stevescarts.Helpers.CargoItemSelection"); ItemCartComponent =
* StevesItems.getDeclaredField("component"); ItemCartModule = StevesItems.getDeclaredField("modules");
* ItemSelections = TileEntityCargo.getDeclaredField("itemSelections"); GetSelectionName =
* CargoItemSelection.getDeclaredMethod("getName"); } catch (ClassNotFoundException e){
* Waila.log.log(Level.WARNING, "[StevesCarts] Class not found. " + e); return; } catch (NoSuchFieldException e)
* { Waila.log.log(Level.WARNING, "[StevesCarts] Field not found. " + e); return; } catch (NoSuchMethodException
* e) { Waila.log.log(Level.WARNING, "[StevesCarts] Method not found. " + e); return; } catch (Exception e) {
* Waila.log.log(Level.WARNING, "[StevesCarts] Error while loading module. " + e); return; }
* ModuleRegistrar.instance().addConfigRemote("Steve's carts", "stevescarts.showall");
* ModuleRegistrar.instance().addConfigRemote("Steve's carts", "stevescarts.colorblind");
* ModuleRegistrar.instance().addConfigRemote("Steve's carts", "stevescarts.shifttoggle");
* ModuleRegistrar.instance().registerBodyProvider(new HUDCartAssembler(), TileEntityCartAssembler);
* ModuleRegistrar.instance().registerBodyProvider(new HUDCargoManager(), TileEntityCargo);
* ModuleRegistrar.instance().registerBodyProvider(new HUDLiquidManager(), TileEntityLiquid);
* ModuleRegistrar.instance().registerHeadProvider(new HUDMinecartModular(), MinecartModular);
* ModuleRegistrar.instance().registerBodyProvider(new HUDMinecartModular(), MinecartModular);
* ModuleRegistrar.instance().registerSyncedNBTKey("*", TileEntityCartAssembler);
* ModuleRegistrar.instance().registerSyncedNBTKey("*", MinecartModular);
* ModuleRegistrar.instance().registerSyncedNBTKey("*", TileEntityCargo);
* ModuleRegistrar.instance().registerSyncedNBTKey("*", TileEntityLiquid);
*/
}
public static void register() {}
}
@@ -1,8 +1,6 @@
package mcp.mobius.waila.addons.thaumcraft;
import static mcp.mobius.waila.api.SpecialChars.ALIGNRIGHT;
import static mcp.mobius.waila.api.SpecialChars.TAB;
import static mcp.mobius.waila.api.SpecialChars.WHITE;
import static mcp.mobius.waila.api.SpecialChars.*;
import java.util.ArrayList;
import java.util.LinkedHashMap;
@@ -43,7 +41,7 @@ public class HUDHandlerIAspectContainer implements IWailaDataProvider {
if (tag.hasKey("Aspects")) {
NBTTagList taglist = tag.getTagList("Aspects", 10);
List<String> unknownAspects = new ArrayList<String>();
List<String> unknownAspects = new ArrayList<>();
for (int i = 0; i < taglist.tagCount(); i++) {
NBTTagCompound subtag = taglist.getCompoundTagAt(i);
@@ -97,26 +95,21 @@ public class HUDHandlerIAspectContainer implements IWailaDataProvider {
}
for (Object o : tileAspects.keySet()) {
if ((Integer) tileAspects.get(o) > 0) {
if (tileAspects.get(o) > 0) {
if (playerAspects.containsKey(o)) {
NBTTagCompound cmptag = new NBTTagCompound();
cmptag.setString("key", (String) ThaumcraftModule.Aspect_getName.invoke(o));
cmptag.setInteger("value", (Integer) tileAspects.get(o));
cmptag.setInteger("value", tileAspects.get(o));
aspects.appendTag(cmptag);
} else {
NBTTagCompound cmptag = new NBTTagCompound();
cmptag.setString("key", "???");
cmptag.setInteger("value", (Integer) tileAspects.get(o));
cmptag.setInteger("value", tileAspects.get(o));
aspects.appendTag(cmptag);
}
}
}
// for (int i = 0; i < aspects.tagCount(); i++){
// System.out.printf("%s : %s\n", aspects.getCompoundTagAt(i).getString("key"),
// aspects.getCompoundTagAt(i).getString("value"));
// }
} catch (Exception e) {
throw new RuntimeException(e);
}
@@ -34,8 +34,6 @@ public class ThaumcraftModule {
public static Class<?> IGoggles = null;
// public static Class<?> TileAlchemyFurnace = null;
public static void register() {
try {
Thaumcraft = Class.forName("thaumcraft.common.Thaumcraft");
@@ -68,12 +66,13 @@ public class ThaumcraftModule {
ModuleRegistrar.instance().registerNBTProvider(new HUDHandlerIAspectContainer(), TileAlchemyFurnace);
} catch (ClassNotFoundException e) {
Waila.log.log(Level.WARN, "[Thaumcraft] Class not found. " + e);
Waila.log.log(Level.INFO, "[Thaumcraft] Thaumcraft mod not found.");
return;
} catch (Exception e) {
Waila.log.log(Level.WARN, "[Thaumcraft] Unhandled exception." + e);
Waila.log.log(Level.WARN, "[Thaumcraft] Unhandled exception. {}", e);
return;
}
Waila.log.log(Level.INFO, "Thaumcraft mod found.");
}
@@ -7,7 +7,7 @@ import mcp.mobius.waila.api.impl.ModuleRegistrar;
public class ThermalDynamicsModule {
public static Class TileFluidDuct = null;
public static Class<?> TileFluidDuct = null;
public static void register() {
// XXX : We register the Fluiduct
@@ -21,19 +21,14 @@ public class ThermalDynamicsModule {
ModuleRegistrar.instance().registerNBTProvider(new HUDHandlerDuct(), TileFluidDuct);
} catch (Exception e) {
Waila.log.log(Level.WARN, "[Thermal Dynamics] Error while loading FluidDuct hooks." + e);
if (e instanceof ClassNotFoundException) {
Waila.log.log(Level.INFO, "[Thermal Dynamics] Thermal Dynamics mod not found.");
} else {
Waila.log.log(Level.WARN, "[Thermal Dynamics] Error while loading FluidDuct hooks. {}", e);
}
return;
}
// XXX : We register the IBlockInfo interface
/*
* try{ IBlockInfo = Class.forName("cofh.api.block.IBlockInfo"); IBlockInfo_getBlockInfo =
* IBlockInfo.getMethod("getBlockInfo", IBlockAccess.class, int.class, int.class, int.class,
* ForgeDirection.class, EntityPlayer.class, List.class, boolean.class);
* //ModuleRegistrar.instance().addConfigRemote("Thermal Expansion", "thermalexpansion.energyhandler");
* ModuleRegistrar.instance().registerBodyProvider(new HUDHandlerIBlockInfo(), IBlockInfo);
* ModuleRegistrar.instance().registerNBTProvider (new HUDHandlerIBlockInfo(), IBlockInfo); } catch (Exception
* e){ Waila.log.log(Level.WARN, "[Thermal Expansion] Error while loading IBlockInfo hooks." + e); }
*/
Waila.log.log(Level.INFO, "Thermal Dynamics mod found.");
}
}
@@ -91,9 +91,7 @@ public class HUDHandlerCache implements IWailaDataProvider {
try {
tag.setInteger("MaxStored", (Integer) ThermalExpansionModule.TileCache_getMaxStored.invoke(te));
tag.setInteger("Stored", (Integer) ThermalExpansionModule.TileCache_getStored.invoke(te));
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
} catch (InvocationTargetException | IllegalAccessException e) {
e.printStackTrace();
}
return tag;
@@ -44,7 +44,7 @@ public class HUDHandlerIBlockInfo implements IWailaDataProvider {
public NBTTagCompound getNBTData(EntityPlayerMP player, TileEntity te, NBTTagCompound tag, World world, int x,
int y, int z) {
try {
List info = new ArrayList();
List<Object> info = new ArrayList<>();
Block block = world.getBlock(x, y, z);
ThermalExpansionModule.IBlockInfo_getBlockInfo
.invoke(block, world, x, y, z, ForgeDirection.UNKNOWN, player, info, false);
@@ -37,18 +37,12 @@ public class HUDHandlerISecureTile implements IWailaDataProvider {
if (owner.equals("[None]")) return currenttip;
String access = "INVALID";
switch (iaccess) {
case 0:
access = LangUtil.translateG("hud.msg.public");
break;
case 1:
access = LangUtil.translateG("hud.msg.restricted");
break;
case 2:
access = LangUtil.translateG("hud.msg.private");
break;
}
String access = switch (iaccess) {
case 0 -> LangUtil.translateG("hud.msg.public");
case 1 -> LangUtil.translateG("hud.msg.restricted");
case 2 -> LangUtil.translateG("hud.msg.private");
default -> "INVALID";
};
currenttip.add(
String.format("%s : \u00a7f%s\u00a7r [ %s ]", LangUtil.translateG("hud.msg.owner"), owner, access));
@@ -69,7 +63,7 @@ public class HUDHandlerISecureTile implements IWailaDataProvider {
int y, int z) {
try {
String owner = (String) ThermalExpansionModule.ISecureTile_getOwnerName.invoke(te);
int access = ((Enum) ThermalExpansionModule.ISecureTile_getAccess.invoke(te)).ordinal();
int access = ((Enum<?>) ThermalExpansionModule.ISecureTile_getAccess.invoke(te)).ordinal();
tag.setString("Owner", owner);
tag.setInteger("Access", access);
@@ -12,48 +12,46 @@ import mcp.mobius.waila.api.impl.ModuleRegistrar;
public class ThermalExpansionModule {
public static Class IEnergyProvider = null;
public static Class<?> IEnergyProvider = null;
public static Method IEnergyProvider_getMaxStorage = null;
public static Method IEnergyProvider_getCurStorage = null;
public static Class IEnergyReceiver = null;
public static Class<?> IEnergyReceiver = null;
public static Method IEnergyReceiver_getMaxStorage = null;
public static Method IEnergyReceiver_getCurStorage = null;
public static Class IEnergyInfo = null;
public static Class<?> IEnergyInfo = null;
public static Method IEnergyInfo_getMaxStorage = null;
public static Method IEnergyInfo_getCurStorage = null;
public static Class TileEnergyCell = null;
public static Class<?> TileEnergyCell = null;
public static Field TileEnergyCell_Recv = null;
public static Field TileEnergyCell_Send = null;
public static Class TileTank = null;
public static Class<?> TileTank = null;
public static Method TileTank_getTankFluid = null;
public static Method TileTank_getTankCapacity = null;
public static Method TileTank_getTankAmount = null;
public static Field TileTank_mode = null;
public static Class TileTesseract = null;
public static Class<?> TileTesseract = null;
public static Field TileTesseract_Item = null;
public static Field TileTesseract_Fluid = null;
public static Field TileTesseract_Energy = null;
public static Class ISecureTile = null;
public static Class<?> ISecureTile = null;
public static Method ISecureTile_getAccess = null;
public static Method ISecureTile_getOwnerName = null;
public static Class TileCache = null;
public static Class<?> TileCache = null;
public static Method TileCache_getItemStack = null;
public static Method TileCache_getMaxStored = null;
public static Method TileCache_getStored = null;
public static Class BlockMultipart = null;
public static Class IBlockInfo = null;
public static Method IBlockInfo_getBlockInfo = null;
public static void register() {
boolean printedThermalExpansionNotFound = false;
// XXX : We register the Energy interface first
try {
IEnergyProvider = Class.forName("cofh.api.energy.IEnergyProvider");
@@ -77,7 +75,12 @@ public class ThermalExpansionModule {
ModuleRegistrar.instance().registerNBTProvider(new HUDHandlerIEnergyHandler(), IEnergyInfo);
} catch (Exception e) {
Waila.log.log(Level.WARN, "[Thermal Expansion] Error while loading Energy hooks." + e);
if (e instanceof ClassNotFoundException) {
Waila.log.log(Level.INFO, "[Thermal Expansion] Thermal Expansion mod not found.");
printedThermalExpansionNotFound = true;
} else {
Waila.log.log(Level.WARN, "[Thermal Expansion] Error while loading Energy hooks. {}", e);
}
}
// XXX : We register the energy cell
@@ -91,7 +94,14 @@ public class ThermalExpansionModule {
ModuleRegistrar.instance().registerNBTProvider(new HUDHandlerEnergyCell(), TileEnergyCell);
} catch (Exception e) {
Waila.log.log(Level.WARN, "[Thermal Expansion] Error while loading Energy Cell hooks." + e);
if (e instanceof ClassNotFoundException || e instanceof NoSuchFieldException) {
if (!printedThermalExpansionNotFound) {
printedThermalExpansionNotFound = true;
Waila.log.log(Level.INFO, "[Thermal Expansion] Thermal Expansion mod not found.");
}
} else {
Waila.log.log(Level.WARN, "[Thermal Expansion] Error while loading Energy Cell hooks. {}", e);
}
}
// XXX : We register the Tank interface
@@ -110,7 +120,14 @@ public class ThermalExpansionModule {
ModuleRegistrar.instance().registerNBTProvider(new HUDHandlerTank(), TileTank);
} catch (Exception e) {
Waila.log.log(Level.WARN, "[Thermal Expansion] Error while loading Tank hooks." + e);
if (e instanceof ClassNotFoundException || e instanceof NoSuchFieldException) {
if (!printedThermalExpansionNotFound) {
printedThermalExpansionNotFound = true;
Waila.log.log(Level.INFO, "[Thermal Expansion] Thermal Expansion mod not found.");
}
} else {
Waila.log.log(Level.WARN, "[Thermal Expansion] Error while loading Tank hooks. {}", e);
}
}
// XXX : We register the Tesseract interface
@@ -126,7 +143,14 @@ public class ThermalExpansionModule {
ModuleRegistrar.instance().registerNBTProvider(new HUDHandlerTesseract(), TileTesseract);
} catch (Exception e) {
Waila.log.log(Level.WARN, "[Thermal Expansion] Error while loading Tesseract hooks." + e);
if (e instanceof ClassNotFoundException || e instanceof NoSuchFieldException) {
if (!printedThermalExpansionNotFound) {
printedThermalExpansionNotFound = true;
Waila.log.log(Level.INFO, "[Thermal Expansion] Thermal Expansion mod not found.");
}
} else {
Waila.log.log(Level.WARN, "[Thermal Expansion] Error while loading Tesseract hooks. {}", e);
}
}
// XXX : We register the ISecureTile interface
@@ -138,11 +162,16 @@ public class ThermalExpansionModule {
ModuleRegistrar.instance().addConfigRemote("Thermal Expansion", "thermalexpansion.owner");
ModuleRegistrar.instance().registerBodyProvider(new HUDHandlerISecureTile(), ISecureTile);
ModuleRegistrar.instance().registerNBTProvider(new HUDHandlerISecureTile(), ISecureTile);
// ModuleRegistrar.instance().registerSyncedNBTKey("Owner", ISecureTile);
// ModuleRegistrar.instance().registerSyncedNBTKey("Access", ISecureTile);
} catch (Exception e) {
Waila.log.log(Level.WARN, "[Thermal Expansion] Error while loading ISecureTile hooks." + e);
if (e instanceof ClassNotFoundException) {
if (!printedThermalExpansionNotFound) {
printedThermalExpansionNotFound = true;
Waila.log.log(Level.INFO, "[Thermal Expansion] Thermal Expansion mod not found.");
}
} else {
Waila.log.log(Level.WARN, "[Thermal Expansion] Error while loading ISecureTile hooks. {}", e);
}
}
// XXX : We register the Cache interface
@@ -158,19 +187,18 @@ public class ThermalExpansionModule {
ModuleRegistrar.instance().registerNBTProvider(new HUDHandlerCache(), TileCache);
} catch (Exception e) {
Waila.log.log(Level.WARN, "[Thermal Expansion] Error while loading Tesseract hooks." + e);
if (e instanceof ClassNotFoundException) {
if (!printedThermalExpansionNotFound) {
printedThermalExpansionNotFound = true;
Waila.log.log(Level.INFO, "[Thermal Expansion] Thermal Expansion mod not found.");
}
} else {
Waila.log.log(Level.WARN, "[Thermal Expansion] Error while loading Tesseract hooks. {}", e);
}
}
if (!printedThermalExpansionNotFound) {
Waila.log.log(Level.INFO, "Thermal Expansion mod found.");
}
// XXX : We register the IBlockInfo interface
/*
* try{ IBlockInfo = Class.forName("cofh.api.block.IBlockInfo"); IBlockInfo_getBlockInfo =
* IBlockInfo.getMethod("getBlockInfo", IBlockAccess.class, int.class, int.class, int.class,
* ForgeDirection.class, EntityPlayer.class, List.class, boolean.class);
* //ModuleRegistrar.instance().addConfigRemote("Thermal Expansion", "thermalexpansion.energyhandler");
* ModuleRegistrar.instance().registerBodyProvider(new HUDHandlerIBlockInfo(), IBlockInfo);
* ModuleRegistrar.instance().registerNBTProvider (new HUDHandlerIBlockInfo(), IBlockInfo); } catch (Exception
* e){ Waila.log.log(Level.WARN, "[Thermal Expansion] Error while loading IBlockInfo hooks." + e); }
*/
}
}
@@ -7,14 +7,14 @@ import mcp.mobius.waila.api.impl.ModuleRegistrar;
public class TwilightForestModule {
public static Class BlockTFRoots = null;
public static Class BlockTFPlant = null;
public static Class BlockTFSapling = null;
public static Class<?> BlockTFRoots = null;
public static Class<?> BlockTFPlant = null;
public static Class<?> BlockTFSapling = null;
public static void register() {
try {
Class TwilightForestMod = Class.forName("twilightforest.TwilightForestMod");
Class.forName("twilightforest.TwilightForestMod");
Waila.log.log(Level.INFO, "TwilightForestMod mod found.");
} catch (ClassNotFoundException e) {
Waila.log.log(Level.INFO, "[TwilightForestMod] TwilightForestMod mod not found.");
@@ -15,8 +15,6 @@ public class HUDDecoratorVanilla implements IWailaBlockDecorator {
Tessellator tessellator = Tessellator.instance;
// UIHelper.drawBillboardText(itemStack.getDisplayName(), accessor.getRenderingPosition(), 0.5F, 1.5F, 0.5F,
// accessor.getPartialFrame());
UIHelper.drawFloatingText("IN", accessor.getRenderingPosition(), 0.5F, 0.2F, -0.2F, 90F, 0F, 0F);
UIHelper.drawFloatingText("OUT", accessor.getRenderingPosition(), -0.2F, 0.2F, 0.5F, 90F, 90F, 0F);
UIHelper.drawFloatingText("OUT", accessor.getRenderingPosition(), 1.2F, 0.2F, 0.5F, 90F, -90F, 0F);
@@ -0,0 +1,83 @@
package mcp.mobius.waila.addons.vanillamc;
import net.minecraft.init.Blocks;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;
import mcp.mobius.waila.api.IWailaConfigHandler;
import mcp.mobius.waila.api.IWailaDataAccessor;
import mcp.mobius.waila.api.NumberFormat;
import mcp.mobius.waila.api.ProbeMode;
import mcp.mobius.waila.api.elements.IProbeDataProvider;
import mcp.mobius.waila.api.elements.IProbeInfo;
import mcp.mobius.waila.api.elements.ITextStyle;
import mcp.mobius.waila.overlay.DisplayUtil;
/**
* Example class for testing various elements
*/
public class HUDElementHandlerFurnace implements IProbeDataProvider {
@Override
public void addProbeInfo(ProbeMode probeMode, ItemStack itemStack, IProbeInfo probeInfo, IWailaDataAccessor data,
IWailaConfigHandler config) {
int cookTime = data.getNBTData().getShort("CookTime");
if (cookTime != 0) {
cookTime = Math.round(cookTime / 20.0f);
probeInfo.vertical().progress(
cookTime,
10,
probeInfo.defaultProgressStyle().text("Smelting: " + cookTime + " / 10 s").filledColor(0xFF4CBB17)
.alternateFilledColor(0xFF4CBB17).borderColor(0xFF555555)
.numberFormat(NumberFormat.COMMAS));
}
if (probeMode != ProbeMode.EXTENDED) {
return;
}
int burnTime = data.getNBTData().getInteger("BurnTime") / 20;
if (burnTime > 0) {
probeInfo.horizontal().text("Burn")
.item(new ItemStack(Blocks.fire), probeInfo.defaultItemStyle().width(8).height(8))
.text(": " + burnTime + " " + "Seconds Remaining");
}
ItemStack[] items = new ItemStack[3];
NBTTagList itemsTag = data.getNBTData().getTagList("Items", 10);
for (int i = 0; i < itemsTag.tagCount(); i++) {
NBTTagCompound itemTag = itemsTag.getCompoundTagAt(i);
byte slot = itemTag.getByte("Slot");
if (slot >= 0 && slot < items.length) {
items[slot] = ItemStack.loadItemStackFromNBT(itemTag);
}
}
ITextStyle itemPaddedStyle = probeInfo.defaultTextStyle().vPadding(2);
IProbeInfo itemSection = probeInfo.vertical(probeInfo.defaultLayoutStyle().borderColor(0xff00ffff));
if (items[0] != null) {
itemSection.horizontal().text("In: ", itemPaddedStyle)
.item(items[0], probeInfo.defaultItemStyle().width(10).height(10)).text(
" " + DisplayUtil.itemDisplayNameShort(items[0]) + " x" + items[0].stackSize,
itemPaddedStyle);
}
if (items[2] != null) {
itemSection.horizontal().text("Out: ", itemPaddedStyle)
.item(items[2], probeInfo.defaultItemStyle().width(10).height(10)).text(
" " + DisplayUtil.itemDisplayNameShort(items[2]) + " x" + items[2].stackSize,
itemPaddedStyle);
}
if (items[1] != null) {
itemSection.horizontal().text("Fuel: ", itemPaddedStyle)
.item(items[1], probeInfo.defaultItemStyle().width(10).height(10)).text(
" " + DisplayUtil.itemDisplayNameShort(items[1]) + " x" + items[1].stackSize,
itemPaddedStyle);
}
}
}
@@ -87,8 +87,5 @@ public class HUDHandlerFurnace implements IWailaDataProvider {
return tag;
}
public static void register() {
// ModuleRegistrar.instance().registerBodyProvider(new HUDHandlerFurnace(), TileEntityFurnace.class);
// ModuleRegistrar.instance().registerNBTProvider(new HUDHandlerFurnace(), TileEntityFurnace.class);
}
public static void register() {}
}
@@ -4,6 +4,8 @@ import java.util.List;
import net.minecraft.block.Block;
import net.minecraft.block.BlockRedstoneOre;
import net.minecraft.block.BlockStoneSlab;
import net.minecraft.block.BlockWoodSlab;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.init.Blocks;
import net.minecraft.init.Items;
@@ -44,6 +46,8 @@ public class HUDHandlerVanilla implements IWailaDataProvider {
static Block log = Blocks.log;
static Block log2 = Blocks.log2;
static Block quartz = Blocks.quartz_block;
static Block anvil = Blocks.anvil;
static Block sapling = Blocks.sapling;
@Override
public ItemStack getWailaStack(IWailaDataAccessor accessor, IWailaConfigHandler config) {
@@ -51,16 +55,12 @@ public class HUDHandlerVanilla implements IWailaDataProvider {
if (block == silverfish && config.getConfig("vanilla.silverfish")) {
int metadata = accessor.getMetadata();
switch (metadata) {
case 0:
return new ItemStack(Blocks.stone);
case 1:
return new ItemStack(Blocks.cobblestone);
case 2:
return new ItemStack(Blocks.brick_block);
default:
return null;
}
return switch (metadata) {
case 0 -> new ItemStack(Blocks.stone);
case 1 -> new ItemStack(Blocks.cobblestone);
case 2 -> new ItemStack(Blocks.brick_block);
default -> null;
};
}
if (block == redstone) {
@@ -96,6 +96,18 @@ public class HUDHandlerVanilla implements IWailaDataProvider {
return new ItemStack(block, 1, 2);
}
if (block == anvil) {
return new ItemStack(block, 1, block.damageDropped(accessor.getMetadata()));
}
if (block == sapling) {
return new ItemStack(block, 1, block.damageDropped(accessor.getMetadata()));
}
if (block instanceof BlockStoneSlab || block instanceof BlockWoodSlab) {
return new ItemStack(block, 1, block.damageDropped(accessor.getMetadata()));
}
return null;
}
@@ -190,9 +202,7 @@ public class HUDHandlerVanilla implements IWailaDataProvider {
if (config.getConfig("vanilla.comparator")) if ((block == comparatorIdl) || (block == comparatorAct)) {
String mode = ((accessor.getMetadata() >> 2) & 1) == 0 ? LangUtil.translateG("hud.msg.comparator")
: LangUtil.translateG("hud.msg.substractor");
// int outputSignal = ((TileEntityComparator)entity).func_96100_a();
currenttip.add("Mode : " + mode);
// currenttip.add(String.format("Out : %s", outputSignal));
return currenttip;
}
@@ -201,13 +211,6 @@ public class HUDHandlerVanilla implements IWailaDataProvider {
return currenttip;
}
/*
* if (config.getConfig("vanilla.jukebox")) if (block == jukebox){ NBTTagCompound tag = accessor.getNBTData();
* Item record = null; if (tag.hasKey("Record")){ record = Item.itemsList[accessor.getNBTInteger(tag,
* "Record")]; currenttip.add(((ItemRecord)record).getRecordTitle()); } else {
* currenttip.add(LangUtil.translateG("hud.msg.empty")); } }
*/
return currenttip;
}
@@ -232,6 +235,7 @@ public class HUDHandlerVanilla implements IWailaDataProvider {
ModuleRegistrar.instance().addConfig("VanillaMC", "vanilla.redstone");
ModuleRegistrar.instance().addConfig("VanillaMC", "vanilla.silverfish");
ModuleRegistrar.instance().addConfigRemote("VanillaMC", "vanilla.jukebox");
ModuleRegistrar.instance().addConfigRemote("VanillaMC", "vanilla.show_invisible_players");
IWailaDataProvider provider = new HUDHandlerVanilla();
@@ -245,8 +249,11 @@ public class HUDHandlerVanilla implements IWailaDataProvider {
ModuleRegistrar.instance().registerStackProvider(provider, log.getClass());
ModuleRegistrar.instance().registerStackProvider(provider, log2.getClass());
ModuleRegistrar.instance().registerStackProvider(provider, quartz.getClass());
ModuleRegistrar.instance().registerStackProvider(provider, anvil.getClass());
ModuleRegistrar.instance().registerStackProvider(provider, sapling.getClass());
ModuleRegistrar.instance().registerStackProvider(provider, BlockStoneSlab.class);
ModuleRegistrar.instance().registerStackProvider(provider, BlockWoodSlab.class);
// ModuleRegistrar.instance().registerStackProvider(provider, Block.class);
ModuleRegistrar.instance().registerHeadProvider(provider, mobSpawner.getClass());
ModuleRegistrar.instance().registerHeadProvider(provider, melonStem.getClass());
ModuleRegistrar.instance().registerHeadProvider(provider, pumpkinStem.getClass());
@@ -254,8 +261,7 @@ public class HUDHandlerVanilla implements IWailaDataProvider {
ModuleRegistrar.instance().registerBodyProvider(provider, crops.getClass());
ModuleRegistrar.instance().registerBodyProvider(provider, melonStem.getClass());
ModuleRegistrar.instance().registerBodyProvider(provider, pumpkinStem.getClass());
// ModuleRegistrar.instance().registerBodyProvider(provider, carrot.getClass());
// ModuleRegistrar.instance().registerBodyProvider(provider, potato.getClass());
ModuleRegistrar.instance().registerBodyProvider(provider, lever.getClass());
ModuleRegistrar.instance().registerBodyProvider(provider, repeaterIdle.getClass());
ModuleRegistrar.instance().registerBodyProvider(provider, repeaterActv.getClass());
@@ -283,10 +289,6 @@ public class HUDHandlerVanilla implements IWailaDataProvider {
ModuleRegistrar.instance().registerNBTProvider(provider, cocoa.getClass());
ModuleRegistrar.instance().registerNBTProvider(provider, netherwart.getClass());
ModuleRegistrar.instance().registerNBTProvider(provider, silverfish.getClass());
// ModuleRegistrar.instance().registerDocTextFile("/mcp/mobius/waila/addons/vanillamc/WikiData.csv");
// ExternalModulesHandler.instance().registerBlockDecorator(new HUDDecoratorVanilla(), repeaterIdle);
}
}
@@ -0,0 +1,18 @@
package mcp.mobius.waila.addons.vanillamc;
import net.minecraft.block.BlockFurnace;
import cpw.mods.fml.common.event.FMLInterModComms;
import mcp.mobius.waila.api.elements.IProbeRegistrar;
// example class for registering IMC
public class TestRegistrar {
public static void callbackRegister(IProbeRegistrar register) {
register.registerProbeProvider(new HUDElementHandlerFurnace(), BlockFurnace.class);
}
public static void init() {
FMLInterModComms.sendMessage("Waila", "elementregister", TestRegistrar.class.getName() + ".callbackRegister");
}
}
@@ -6,25 +6,25 @@ import java.util.Set;
public interface ITaggedList<E, T> extends List<E> {
public boolean add(E e, T tag);
boolean add(E e, T tag);
public boolean add(E e, Collection<? extends T> taglst);
boolean add(E e, Collection<? extends T> taglst);
public Set<T> getTags(E e);
Set<T> getTags(E e);
public Set<T> getTags(int index);
Set<T> getTags(int index);
public void addTag(E e, T tag);
void addTag(E e, T tag);
public void addTag(int index, T tag);
void addTag(int index, T tag);
public void removeTag(E e, T tag);
void removeTag(E e, T tag);
public void removeTag(int index, T tag);
void removeTag(int index, T tag);
public Set<E> getEntries(T tag);
Set<E> getEntries(T tag);
public void removeEntries(T tag);
void removeEntries(T tag);
public String getTagsAsString(E e);
String getTagsAsString(E e);
}
@@ -15,18 +15,15 @@ public interface IWailaConfigHandler {
/**
* Returns a set of all the currently loaded modules in the config handler.
*
* @return
*/
public Set<String> getModuleNames();
Set<String> getModuleNames();
/**
* Returns all the currently available options for a given module
*
* @param modName Module name
* @return
*/
public HashMap<String, String> getConfigKeys(String modName);
HashMap<String, String> getConfigKeys(String modName);
/**
* Returns the current value of an option (true/false) with a default value if not set.
@@ -35,7 +32,7 @@ public interface IWailaConfigHandler {
* @param defvalue Default values
* @return Value of the option or defvalue if not set.
*/
public boolean getConfig(String key, boolean defvalue);
boolean getConfig(String key, boolean defvalue);
/**
* Returns the current value of an option (true/false) with a default value true if not set
@@ -43,5 +40,5 @@ public interface IWailaConfigHandler {
* @param key Option to lookup
* @return Value of the option or true if not set.
*/
public boolean getConfig(String key);
boolean getConfig(String key);
}
@@ -23,58 +23,58 @@ package mcp.mobius.waila.api;
public interface IWailaRegistrar {
/* Add a config option in the section modname with displayed text configtext and access key keyname */
public void addConfig(String modname, String keyname, String configtext);
void addConfig(String modname, String keyname, String configtext);
public void addConfig(String modname, String keyname, String configtext, boolean defvalue);
void addConfig(String modname, String keyname, String configtext, boolean defvalue);
public void addConfigRemote(String modname, String keyname, String configtext);
void addConfigRemote(String modname, String keyname, String configtext);
public void addConfigRemote(String modname, String keyname, String configtext, boolean defvalue);
void addConfigRemote(String modname, String keyname, String configtext, boolean defvalue);
public void addConfig(String modname, String keyname);
void addConfig(String modname, String keyname);
public void addConfig(String modname, String keyname, boolean defvalue);
void addConfig(String modname, String keyname, boolean defvalue);
public void addConfigRemote(String modname, String keyname);
void addConfigRemote(String modname, String keyname);
public void addConfigRemote(String modname, String keyname, boolean defvalue);
void addConfigRemote(String modname, String keyname, boolean defvalue);
/* Register a stack overrider for the given blockID */
public void registerStackProvider(IWailaDataProvider dataProvider, Class block);
void registerStackProvider(IWailaDataProvider dataProvider, Class block);
/* Same thing, but works on a class hierarchy instead */
public void registerHeadProvider(IWailaDataProvider dataProvider, Class block);
void registerHeadProvider(IWailaDataProvider dataProvider, Class block);
public void registerBodyProvider(IWailaDataProvider dataProvider, Class block);
void registerBodyProvider(IWailaDataProvider dataProvider, Class block);
public void registerTailProvider(IWailaDataProvider dataProvider, Class block);
void registerTailProvider(IWailaDataProvider dataProvider, Class block);
/* Registering an NBT Provider provides a way to override the default "writeToNBT" way of doing things. */
public void registerNBTProvider(IWailaDataProvider dataProvider, Class block);
void registerNBTProvider(IWailaDataProvider dataProvider, Class block);
/* Entity text registration methods */
public void registerHeadProvider(IWailaEntityProvider dataProvider, Class entity);
void registerHeadProvider(IWailaEntityProvider dataProvider, Class entity);
public void registerBodyProvider(IWailaEntityProvider dataProvider, Class entity);
void registerBodyProvider(IWailaEntityProvider dataProvider, Class entity);
public void registerTailProvider(IWailaEntityProvider dataProvider, Class entity);
void registerTailProvider(IWailaEntityProvider dataProvider, Class entity);
public void registerOverrideEntityProvider(IWailaEntityProvider dataProvider, Class entity);
void registerOverrideEntityProvider(IWailaEntityProvider dataProvider, Class entity);
/* Registering an NBT Provider provides a way to override the default "writeToNBT" way of doing things. */
public void registerNBTProvider(IWailaEntityProvider dataProvider, Class entity);
void registerNBTProvider(IWailaEntityProvider dataProvider, Class entity);
/* FMP Providers */
public void registerHeadProvider(IWailaFMPProvider dataProvider, String name);
void registerHeadProvider(IWailaFMPProvider dataProvider, String name);
public void registerBodyProvider(IWailaFMPProvider dataProvider, String name);
void registerBodyProvider(IWailaFMPProvider dataProvider, String name);
public void registerTailProvider(IWailaFMPProvider dataProvider, String name);
void registerTailProvider(IWailaFMPProvider dataProvider, String name);
/* The block decorators */
public void registerDecorator(IWailaBlockDecorator decorator, Class block);
void registerDecorator(IWailaBlockDecorator decorator, Class block);
public void registerDecorator(IWailaFMPDecorator decorator, String name);
void registerDecorator(IWailaFMPDecorator decorator, String name);
/*
* Selective NBT key syncing. Will register a key to sync over the network for the given class (block, te or ent).
@@ -83,11 +83,7 @@ public interface IWailaRegistrar {
* is deprecated in favor to registerNBTProvider. It will be removed in MC 1.8 !!!
*/
@Deprecated
public void registerSyncedNBTKey(String key, Class target);
void registerSyncedNBTKey(String key, Class target);
public void registerTooltipRenderer(String name, IWailaTooltipRenderer renderer);
/* UNUSED FOR NOW (Will be used for the ingame wiki */
// public void registerDocTextFile (String filename);
// public void registerShortDataProvider (IWailaSummaryProvider dataProvider, Class item);
void registerTooltipRenderer(String name, IWailaTooltipRenderer renderer);
}
@@ -5,18 +5,8 @@ import java.util.LinkedHashMap;
import net.minecraft.item.ItemStack;
public interface IWailaSummaryProvider {
/* This interface is used to control the display data in the description screen */
/* BASIC TOOLS & ITEMS DATA */
// EnumToolMaterial getMaterial(ItemStack stack);
// String getMaterialName(ItemStack stack);
// String getEffectiveBlock(ItemStack stack);
// int getHarvestLevel(ItemStack stack);
// float getEfficiencyOnProperMaterial(ItemStack stack);
// int getEnchantability(ItemStack stack);
// int getDamageVsEntity(ItemStack stack);
// int getDurability(ItemStack stack);
LinkedHashMap<String, String> getSummary(ItemStack stack, LinkedHashMap<String, String> currentSummary,
IWailaConfigHandler config);
}
@@ -1,6 +1,6 @@
package mcp.mobius.waila.api;
import java.awt.Dimension;
import java.awt.*;
public interface IWailaTooltipRenderer {
@@ -0,0 +1,11 @@
package mcp.mobius.waila.api;
public enum NumberFormat {
FULL,
COMPACT,
COMMAS,
NONE;
private NumberFormat() {}
}
@@ -0,0 +1,7 @@
package mcp.mobius.waila.api;
public enum ProbeMode {
NORMAL, // Normal display. What a user expects to see
EXTENDED, // Extended. This is used when the player is sneaking
DEBUG // Creative only. This is used when the player holds a creative probe
}
@@ -67,17 +67,13 @@ public class SpecialChars {
/**
* Helper method to get a proper RENDER string. Just put the name of the renderer and the params in, and it will
* give back a directly usable String for the tooltip.
*
* @param name
* @param params
* @return
*/
public static String getRenderString(String name, String... params) {
String result = RENDER + "{" + name;
StringBuilder result = new StringBuilder(RENDER + "{" + name);
for (String s : params) {
result += "," + s;
result.append(",").append(s);
}
result += "}";
return result;
result.append("}");
return result.toString();
}
}
@@ -0,0 +1,7 @@
package mcp.mobius.waila.api.elements;
public enum ElementAlignment {
ALIGN_TOPLEFT,
ALIGN_CENTER,
ALIGN_BOTTOMRIGHT
}
@@ -0,0 +1,10 @@
package mcp.mobius.waila.api.elements;
public interface IElement {
void render(int var1, int var2);
int getWidth();
int getHeight();
}
@@ -0,0 +1,12 @@
package mcp.mobius.waila.api.elements;
public interface IItemStyle {
IItemStyle width(int var1);
IItemStyle height(int var1);
int getWidth();
int getHeight();
}
@@ -0,0 +1,16 @@
package mcp.mobius.waila.api.elements;
public interface ILayoutStyle {
ILayoutStyle borderColor(Integer var1);
ILayoutStyle spacing(int var1);
ILayoutStyle alignment(ElementAlignment var1);
Integer getBorderColor();
int getSpacing();
ElementAlignment getAlignment();
}
@@ -0,0 +1,23 @@
package mcp.mobius.waila.api.elements;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
import mcp.mobius.waila.api.IWailaConfigHandler;
import mcp.mobius.waila.api.IWailaDataAccessor;
import mcp.mobius.waila.api.ProbeMode;
public interface IProbeDataProvider {
default void addProbeInfo(ProbeMode probeMode, ItemStack itemStack, IProbeInfo probeInfo,
IWailaDataAccessor accessor, IWailaConfigHandler config) {}
default NBTTagCompound getNBTData(EntityPlayerMP player, TileEntity te, NBTTagCompound tag, World world, int x,
int y, int z) {
if (te != null) te.writeToNBT(tag);
return tag;
}
}
@@ -0,0 +1,50 @@
package mcp.mobius.waila.api.elements;
import net.minecraft.item.ItemStack;
public interface IProbeInfo {
/**
* Create a default layout style for the horizontal or vertical elements
*/
ILayoutStyle defaultLayoutStyle();
/**
* Create a default style for the progress bar
*/
IProgressStyle defaultProgressStyle();
/**
* Create a default style for the text element
*/
ITextStyle defaultTextStyle();
/**
* Create a default style for the item element
*/
IItemStyle defaultItemStyle();
IProbeInfo text(String text, ITextStyle style);
IProbeInfo text(String text);
IProbeInfo vertical(ILayoutStyle style);
IProbeInfo vertical();
IProbeInfo horizontal(ILayoutStyle style);
IProbeInfo horizontal();
IProbeInfo item(ItemStack stack, IItemStyle style);
IProbeInfo item(ItemStack stack);
IProbeInfo progress(int var1, int var2, IProgressStyle var3);
IProbeInfo progress(int var1, int var2);
IProbeInfo progress(long var1, long var3, IProgressStyle var5);
IProbeInfo progress(long var1, long var3);
}
@@ -0,0 +1,6 @@
package mcp.mobius.waila.api.elements;
public interface IProbeRegistrar {
void registerProbeProvider(IProbeDataProvider dataProvider, Class<?> block);
}
@@ -0,0 +1,65 @@
package mcp.mobius.waila.api.elements;
import mcp.mobius.waila.api.NumberFormat;
public interface IProgressStyle {
/// The color that is used for the border of the progress bar
IProgressStyle borderColor(int c);
/// The color that is used for the background of the progress bar
IProgressStyle backgroundColor(int c);
/// The color that is used for the filled part of the progress bar
IProgressStyle filledColor(int c);
/// If this is different from the filledColor then the fill color will alternate
IProgressStyle alternateFilledColor(int c);
/// If true then text is shown inside the progress bar
IProgressStyle showText(boolean b);
/// The number format to use for the text inside the progress bar
IProgressStyle numberFormat(NumberFormat f);
IProgressStyle text(String text);
IProgressStyle textColor(int color);
IProgressStyle textShadow(boolean b);
/// If the progressbar is a lifebar then this is the maximum width
IProgressStyle width(int w);
IProgressStyle height(int h);
IProgressStyle lifeBar(boolean b);
IProgressStyle armorBar(boolean b);
int getBorderColor();
int getBackgroundColor();
int getFilledColor();
int getAlternatefilledColor();
boolean isShowText();
NumberFormat getNumberFormat();
String getText();
int getTextColor();
boolean isTextShadow();
int getWidth();
int getHeight();
boolean isLifeBar();
boolean isArmorBar();
}
@@ -0,0 +1,61 @@
package mcp.mobius.waila.api.elements;
import mcp.mobius.waila.api.impl.elements.TextStyle;
public interface ITextStyle {
/// Allows copying the state for easier template creation
ITextStyle copy();
default ITextStyle padding(int padding) {
return topPadding(padding).bottomPadding(padding).leftPadding(padding).rightPadding(padding);
}
default ITextStyle vPadding(int padding) {
return topPadding(padding).bottomPadding(padding);
}
default ITextStyle hPadding(int padding) {
return leftPadding(padding).rightPadding(padding);
}
ITextStyle topPadding(int padding);
ITextStyle bottomPadding(int padding);
ITextStyle leftPadding(int padding);
ITextStyle rightPadding(int padding);
default ITextStyle bounds(Integer width, Integer height) {
return width(width).height(height);
}
ITextStyle width(Integer width);
ITextStyle height(Integer height);
ITextStyle alignment(ElementAlignment align);
TextStyle color(int color);
TextStyle shadow(boolean shadow);
int getLeftPadding();
int getRightPadding();
int getTopPadding();
int getBottomPadding();
Integer getWidth();
Integer getHeight();
ElementAlignment getAlignment();
int getColor();
boolean getShadow();
}
@@ -29,9 +29,9 @@ public class ConfigHandler implements IWailaConfigHandler {
}
/* === */
private LinkedHashMap<String, ConfigModule> modules = new LinkedHashMap<String, ConfigModule>();
private ArrayList<String> serverconfigs = new ArrayList<String>();
public HashMap<String, Boolean> forcedConfigs = new HashMap<String, Boolean>();
private LinkedHashMap<String, ConfigModule> modules = new LinkedHashMap<>();
private ArrayList<String> serverconfigs = new ArrayList<>();
public HashMap<String, Boolean> forcedConfigs = new HashMap<>();
public Configuration config = null;
public void addModule(String modName, HashMap<String, String> options) {
@@ -145,13 +145,12 @@ public class ConfigHandler implements IWailaConfigHandler {
config.get(Configuration.CATEGORY_GENERAL, Constants.CFG_WAILA_METADATA, false);
config.get(Configuration.CATEGORY_GENERAL, Constants.CFG_WAILA_KEYBIND, true);
config.get(Configuration.CATEGORY_GENERAL, Constants.CFG_WAILA_NEWFILTERS, true);
config.get(Configuration.CATEGORY_GENERAL, Constants.CFG_WAILA_FORCE_LEGACY_MODE, false);
OverlayConfig.posX = config.get(Configuration.CATEGORY_GENERAL, Constants.CFG_WAILA_POSX, 5000).getInt();
OverlayConfig.posY = config.get(Configuration.CATEGORY_GENERAL, Constants.CFG_WAILA_POSY, 100).getInt();
OverlayConfig.alpha = config.get(Configuration.CATEGORY_GENERAL, Constants.CFG_WAILA_ALPHA, 80).getInt();
OverlayConfig.breakprogress = config
.get(Configuration.CATEGORY_GENERAL, Constants.CFG_WAILA_BREAK_PROGRESS, true).getBoolean();
OverlayConfig.bgcolor = config.get(Configuration.CATEGORY_GENERAL, Constants.CFG_WAILA_BGCOLOR, 0x100010)
.getInt();
OverlayConfig.gradient1 = config.get(Configuration.CATEGORY_GENERAL, Constants.CFG_WAILA_GRADIENT1, 0x5000ff)
@@ -9,7 +9,7 @@ public class ConfigModule {
public ConfigModule(String _modName) {
this.modName = _modName;
this.options = new HashMap<String, String>();
this.options = new HashMap<>();
}
public ConfigModule(String _modName, HashMap<String, String> _options) {
@@ -22,7 +22,8 @@ import mcp.mobius.waila.utils.NBTUtil;
public class DataAccessorCommon implements IWailaCommonAccessor, IWailaDataAccessor, IWailaEntityAccessor {
private static final Minecraft MC = Minecraft.getMinecraft();
private static final Minecraft mc = Minecraft.getMinecraft();
public World world;
public EntityPlayer player;
public MovingObjectPosition mop;
@@ -58,10 +59,10 @@ public class DataAccessorCommon implements IWailaCommonAccessor, IWailaDataAcces
this.entity = null;
this.blockID = Block.getIdFromBlock(this.block);
this.blockResource = GameData.getBlockRegistry().getNameForObject(this.block);
this.blockBreakDamage = MC.playerController.curBlockDamageMP;
this.blockBreakDamage = mc.playerController.curBlockDamageMP;
try {
this.stack = new ItemStack(this.block, 1, this.metadata);
} catch (Exception e) {}
} catch (Exception ignored) {}
} else if (this.mop.typeOfHit == MovingObjectType.ENTITY) {
this.block = null;
@@ -135,7 +136,7 @@ public class DataAccessorCommon implements IWailaCommonAccessor, IWailaDataAcces
NBTTagCompound tag = new NBTTagCompound();
try {
this.tileEntity.writeToNBT(tag);
} catch (Exception e) {}
} catch (Exception ignored) {}
return tag;
}
@@ -10,9 +10,9 @@ import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.MovingObjectPosition;
import net.minecraft.world.World;
import net.minecraftforge.common.config.Configuration;
import mcp.mobius.waila.Waila;
import mcp.mobius.waila.api.IWailaBlock;
@@ -22,27 +22,24 @@ import mcp.mobius.waila.cbcore.Layout;
import mcp.mobius.waila.network.Message0x01TERequest;
import mcp.mobius.waila.network.Message0x03EntRequest;
import mcp.mobius.waila.network.WailaPacketHandler;
import mcp.mobius.waila.utils.Constants;
import mcp.mobius.waila.utils.WailaExceptionHandler;
public class MetaDataProvider {
private Map<Integer, List<IWailaDataProvider>> headBlockProviders = new TreeMap<Integer, List<IWailaDataProvider>>();
private Map<Integer, List<IWailaDataProvider>> bodyBlockProviders = new TreeMap<Integer, List<IWailaDataProvider>>();
private Map<Integer, List<IWailaDataProvider>> tailBlockProviders = new TreeMap<Integer, List<IWailaDataProvider>>();
private final Map<Integer, List<IWailaDataProvider>> headBlockProviders = new TreeMap<>();
private final Map<Integer, List<IWailaDataProvider>> bodyBlockProviders = new TreeMap<>();
private Map<Integer, List<IWailaDataProvider>> tailBlockProviders = new TreeMap<>();
private Map<Integer, List<IWailaEntityProvider>> headEntityProviders = new TreeMap<Integer, List<IWailaEntityProvider>>();
private Map<Integer, List<IWailaEntityProvider>> bodyEntityProviders = new TreeMap<Integer, List<IWailaEntityProvider>>();
private Map<Integer, List<IWailaEntityProvider>> tailEntityProviders = new TreeMap<Integer, List<IWailaEntityProvider>>();
private Class prevBlock = null;
private Class prevTile = null;
private final Map<Integer, List<IWailaEntityProvider>> headEntityProviders = new TreeMap<>();
private final Map<Integer, List<IWailaEntityProvider>> bodyEntityProviders = new TreeMap<>();
private final Map<Integer, List<IWailaEntityProvider>> tailEntityProviders = new TreeMap<>();
public ItemStack identifyBlockHighlight(World world, EntityPlayer player, MovingObjectPosition mop,
DataAccessorCommon accessor) {
Block block = accessor.getBlock();
int blockID = accessor.getBlockID();
if (IWailaBlock.class.isInstance(block)) {
if (block instanceof IWailaBlock) {
try {
return ((IWailaBlock) block).getWailaStack(accessor, ConfigHandler.instance());
} catch (Throwable e) {
@@ -71,9 +68,11 @@ public class MetaDataProvider {
if (accessor.getTileEntity() != null && Waila.instance.serverPresent
&& accessor.isTimeElapsed(250)
&& ConfigHandler.instance().showTooltip()) {
&& ConfigHandler.instance().showTooltip()
&& ConfigHandler.instance()
.getConfig(Configuration.CATEGORY_GENERAL, Constants.CFG_WAILA_FORCE_LEGACY_MODE, false)) {
accessor.resetTimer();
HashSet<String> keys = new HashSet<String>();
HashSet<String> keys = new HashSet<>();
if (ModuleRegistrar.instance().hasSyncedNBTKeys(block))
keys.addAll(ModuleRegistrar.instance().getSyncedNBTKeys(block));
@@ -81,9 +80,10 @@ public class MetaDataProvider {
if (ModuleRegistrar.instance().hasSyncedNBTKeys(accessor.getTileEntity()))
keys.addAll(ModuleRegistrar.instance().getSyncedNBTKeys(accessor.getTileEntity()));
if (keys.size() != 0 || ModuleRegistrar.instance().hasNBTProviders(block)
if (!keys.isEmpty() || ModuleRegistrar.instance().hasNBTProviders(block)
|| ModuleRegistrar.instance().hasNBTProviders(accessor.getTileEntity()))
WailaPacketHandler.INSTANCE.sendToServer(new Message0x01TERequest(accessor.getTileEntity(), keys));
WailaPacketHandler.INSTANCE
.sendToServer(new Message0x01TERequest(accessor.getTileEntity(), keys, false));
} else if (accessor.getTileEntity() != null && !Waila.instance.serverPresent
&& accessor.isTimeElapsed(250)
@@ -99,8 +99,7 @@ public class MetaDataProvider {
}
/* Interface IWailaBlock */
if (IWailaBlock.class.isInstance(block)) {
TileEntity entity = world.getTileEntity(mop.blockX, mop.blockY, mop.blockZ);
if (block instanceof IWailaBlock) {
if (layout == Layout.HEADER) try {
return ((IWailaBlock) block).getWailaHead(itemStack, currenttip, accessor, ConfigHandler.instance());
} catch (Throwable e) {
@@ -173,12 +172,12 @@ public class MetaDataProvider {
if (accessor.getEntity() != null && Waila.instance.serverPresent && accessor.isTimeElapsed(250)) {
accessor.resetTimer();
HashSet<String> keys = new HashSet<String>();
HashSet<String> keys = new HashSet<>();
if (ModuleRegistrar.instance().hasSyncedNBTKeys(accessor.getEntity()))
keys.addAll(ModuleRegistrar.instance().getSyncedNBTKeys(accessor.getEntity()));
if (keys.size() != 0 || ModuleRegistrar.instance().hasNBTEntityProviders(accessor.getEntity()))
if (!keys.isEmpty() || ModuleRegistrar.instance().hasNBTEntityProviders(accessor.getEntity()))
WailaPacketHandler.INSTANCE.sendToServer(new Message0x03EntRequest(accessor.getEntity(), keys));
} else if (accessor.getEntity() != null && !Waila.instance.serverPresent && accessor.isTimeElapsed(250)) {
@@ -4,24 +4,11 @@ import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
import java.util.*;
import au.com.bytecode.opencsv.CSVReader;
import mcp.mobius.waila.Waila;
import mcp.mobius.waila.api.IWailaBlockDecorator;
import mcp.mobius.waila.api.IWailaDataProvider;
import mcp.mobius.waila.api.IWailaEntityProvider;
import mcp.mobius.waila.api.IWailaFMPDecorator;
import mcp.mobius.waila.api.IWailaFMPProvider;
import mcp.mobius.waila.api.IWailaRegistrar;
import mcp.mobius.waila.api.IWailaSummaryProvider;
import mcp.mobius.waila.api.IWailaTooltipRenderer;
import mcp.mobius.waila.api.*;
import mcp.mobius.waila.cbcore.LangUtil;
import mcp.mobius.waila.utils.Constants;
@@ -29,34 +16,34 @@ public class ModuleRegistrar implements IWailaRegistrar {
private static ModuleRegistrar instance = null;
public LinkedHashMap<Class, ArrayList<IWailaDataProvider>> headBlockProviders = new LinkedHashMap<Class, ArrayList<IWailaDataProvider>>();
public LinkedHashMap<Class, ArrayList<IWailaDataProvider>> bodyBlockProviders = new LinkedHashMap<Class, ArrayList<IWailaDataProvider>>();
public LinkedHashMap<Class, ArrayList<IWailaDataProvider>> tailBlockProviders = new LinkedHashMap<Class, ArrayList<IWailaDataProvider>>();
public LinkedHashMap<Class, ArrayList<IWailaDataProvider>> stackBlockProviders = new LinkedHashMap<Class, ArrayList<IWailaDataProvider>>();
public LinkedHashMap<Class, ArrayList<IWailaDataProvider>> NBTDataProviders = new LinkedHashMap<Class, ArrayList<IWailaDataProvider>>();
public LinkedHashMap<Class, ArrayList<IWailaDataProvider>> headBlockProviders = new LinkedHashMap<>();
public LinkedHashMap<Class, ArrayList<IWailaDataProvider>> bodyBlockProviders = new LinkedHashMap<>();
public LinkedHashMap<Class, ArrayList<IWailaDataProvider>> tailBlockProviders = new LinkedHashMap<>();
public LinkedHashMap<Class, ArrayList<IWailaDataProvider>> stackBlockProviders = new LinkedHashMap<>();
public LinkedHashMap<Class, ArrayList<IWailaDataProvider>> NBTDataProviders = new LinkedHashMap<>();
public LinkedHashMap<Class, ArrayList<IWailaBlockDecorator>> blockClassDecorators = new LinkedHashMap<Class, ArrayList<IWailaBlockDecorator>>();
public LinkedHashMap<Class, ArrayList<IWailaBlockDecorator>> blockClassDecorators = new LinkedHashMap<>();
public LinkedHashMap<Class, ArrayList<IWailaEntityProvider>> headEntityProviders = new LinkedHashMap<Class, ArrayList<IWailaEntityProvider>>();
public LinkedHashMap<Class, ArrayList<IWailaEntityProvider>> bodyEntityProviders = new LinkedHashMap<Class, ArrayList<IWailaEntityProvider>>();
public LinkedHashMap<Class, ArrayList<IWailaEntityProvider>> tailEntityProviders = new LinkedHashMap<Class, ArrayList<IWailaEntityProvider>>();
public LinkedHashMap<Class, ArrayList<IWailaEntityProvider>> overrideEntityProviders = new LinkedHashMap<Class, ArrayList<IWailaEntityProvider>>();
public LinkedHashMap<Class, ArrayList<IWailaEntityProvider>> NBTEntityProviders = new LinkedHashMap<Class, ArrayList<IWailaEntityProvider>>();
public LinkedHashMap<Class, ArrayList<IWailaEntityProvider>> headEntityProviders = new LinkedHashMap<>();
public LinkedHashMap<Class, ArrayList<IWailaEntityProvider>> bodyEntityProviders = new LinkedHashMap<>();
public LinkedHashMap<Class, ArrayList<IWailaEntityProvider>> tailEntityProviders = new LinkedHashMap<>();
public LinkedHashMap<Class, ArrayList<IWailaEntityProvider>> overrideEntityProviders = new LinkedHashMap<>();
public LinkedHashMap<Class, ArrayList<IWailaEntityProvider>> NBTEntityProviders = new LinkedHashMap<>();
public LinkedHashMap<String, ArrayList<IWailaFMPProvider>> headFMPProviders = new LinkedHashMap<String, ArrayList<IWailaFMPProvider>>();
public LinkedHashMap<String, ArrayList<IWailaFMPProvider>> bodyFMPProviders = new LinkedHashMap<String, ArrayList<IWailaFMPProvider>>();
public LinkedHashMap<String, ArrayList<IWailaFMPProvider>> tailFMPProviders = new LinkedHashMap<String, ArrayList<IWailaFMPProvider>>();
public LinkedHashMap<String, ArrayList<IWailaFMPProvider>> headFMPProviders = new LinkedHashMap<>();
public LinkedHashMap<String, ArrayList<IWailaFMPProvider>> bodyFMPProviders = new LinkedHashMap<>();
public LinkedHashMap<String, ArrayList<IWailaFMPProvider>> tailFMPProviders = new LinkedHashMap<>();
public LinkedHashMap<String, ArrayList<IWailaFMPDecorator>> FMPClassDecorators = new LinkedHashMap<String, ArrayList<IWailaFMPDecorator>>();
public LinkedHashMap<String, ArrayList<IWailaFMPDecorator>> FMPClassDecorators = new LinkedHashMap<>();
public LinkedHashMap<Class, HashSet<String>> syncedNBTKeys = new LinkedHashMap<Class, HashSet<String>>();
public LinkedHashMap<Class, HashSet<String>> syncedNBTKeys = new LinkedHashMap<>();
public LinkedHashMap<String, LinkedHashMap<String, LinkedHashMap<String, String>>> wikiDescriptions = new LinkedHashMap<String, LinkedHashMap<String, LinkedHashMap<String, String>>>();
public LinkedHashMap<Class, ArrayList<IWailaSummaryProvider>> summaryProviders = new LinkedHashMap<Class, ArrayList<IWailaSummaryProvider>>();
public LinkedHashMap<String, LinkedHashMap<String, LinkedHashMap<String, String>>> wikiDescriptions = new LinkedHashMap<>();
public LinkedHashMap<Class, ArrayList<IWailaSummaryProvider>> summaryProviders = new LinkedHashMap<>();
public LinkedHashMap<String, String> IMCRequests = new LinkedHashMap<String, String>();
public LinkedHashMap<String, String> IMCRequests = new LinkedHashMap<>();
public LinkedHashMap<String, IWailaTooltipRenderer> tooltipRenderers = new LinkedHashMap<String, IWailaTooltipRenderer>();
public LinkedHashMap<String, IWailaTooltipRenderer> tooltipRenderers = new LinkedHashMap<>();
private ModuleRegistrar() {
instance = this;
@@ -201,7 +188,7 @@ public class ModuleRegistrar implements IWailaRegistrar {
dataProvider.getClass().getName(),
clazz));
if (!target.containsKey(clazz)) target.put(clazz, new ArrayList<T>());
if (!target.containsKey(clazz)) target.put(clazz, new ArrayList<>());
ArrayList<T> providers = target.get(clazz);
if (providers.contains(dataProvider)) return;
@@ -212,7 +199,7 @@ public class ModuleRegistrar implements IWailaRegistrar {
@Deprecated
@Override
public void registerSyncedNBTKey(String key, Class target) {
if (!this.syncedNBTKeys.containsKey(target)) this.syncedNBTKeys.put(target, new HashSet<String>());
if (!this.syncedNBTKeys.containsKey(target)) this.syncedNBTKeys.put(target, new HashSet<>());
this.syncedNBTKeys.get(target).add(key);
}
@@ -298,7 +285,7 @@ public class ModuleRegistrar implements IWailaRegistrar {
}
private <T> Map<Integer, List<T>> getProviders(Object obj, LinkedHashMap<Class, ArrayList<T>> target) {
Map<Integer, List<T>> returnList = new TreeMap<Integer, List<T>>();
Map<Integer, List<T>> returnList = new TreeMap<>();
Integer index = 0;
for (Class clazz : target.keySet()) {
@@ -311,14 +298,14 @@ public class ModuleRegistrar implements IWailaRegistrar {
}
private <T> Map<Integer, List<T>> getProviders(String name, LinkedHashMap<String, ArrayList<T>> target) {
Map<Integer, List<T>> returnList = new TreeMap<Integer, List<T>>();
Map<Integer, List<T>> returnList = new TreeMap<>();
returnList.put(0, target.get(name));
return returnList;
}
@Deprecated
public HashSet<String> getSyncedNBTKeys(Object target) {
HashSet<String> returnList = new HashSet<String>();
HashSet<String> returnList = new HashSet<>();
for (Class clazz : this.syncedNBTKeys.keySet())
if (clazz.isInstance(target)) returnList.addAll(this.syncedNBTKeys.get(clazz));
@@ -407,24 +394,6 @@ public class ModuleRegistrar implements IWailaRegistrar {
}
/* ----------------- */
/*
* @Override public void registerDocTextFile(String filename) { List<String[]> docData = null; int nentries = 0;
* try{ docData = this.readFileAsString(filename); } catch (IOException e){ Waila.log.log(Level.WARN,
* String.format("Error while accessing file %s : %s", filename, e)); return; } for (String[] ss : docData){ String
* modid = ss[0]; String name = ss[1]; String meta = ss[2]; String desc = ss[5].replace('$', '\n'); if
* (!(desc.trim().equals(""))){ if (!this.wikiDescriptions.containsKey(modid)) this.wikiDescriptions.put(modid, new
* LinkedHashMap <String, LinkedHashMap <String, String>>()); if
* (!this.wikiDescriptions.get(modid).containsKey(name)) this.wikiDescriptions.get(modid).put(name, new
* LinkedHashMap<String, String>()); this.wikiDescriptions.get(modid).get(name).put(meta, desc);
* System.out.printf("Registered %s %s %s\n", modid, name, meta); nentries += 1; } } // String[] sections =
* docData.split(">>>>"); // for (String s : sections){ // s.trim(); // if (!s.equals("")){ // try{ // String name =
* s.split("\r?\n",2)[0].trim(); // String desc = s.split("\r?\n",2)[1].trim(); // if
* (!this.wikiDescriptions.containsKey(modid)) // this.wikiDescriptions.put(modid, new LinkedHashMap <String,
* String>()); // this.wikiDescriptions.get(modid).put(name, desc); // nentries += 1; // }catch (Exception e){ //
* System.out.printf("%s\n", e); // } // } // } Waila.log.log(Level.INFO,
* String.format("Registered %s entries from %s", nentries, filename)); }
*/
public boolean hasDocTextModID(String modid) {
return this.wikiDescriptions.containsKey(modid);
}
@@ -465,10 +434,6 @@ public class ModuleRegistrar implements IWailaRegistrar {
}
private List<String[]> readFileAsString(String filePath) throws IOException {
// URL fileURL = this.getClass().getResource(filePath);
// File filedata = new File(fileURL);
// Reader paramReader = new InputStreamReader(this.getClass().getResourceAsStream(filePath));
InputStream in = getClass().getResourceAsStream(filePath);
BufferedReader input = new BufferedReader(new InputStreamReader(in));
CSVReader reader = new CSVReader(input);
@@ -477,10 +442,5 @@ public class ModuleRegistrar implements IWailaRegistrar {
reader.close();
return myEntries;
/*
* StringBuffer fileData = new StringBuffer(); //BufferedReader reader = new BufferedReader(paramReader); char[]
* buf = new char[1024]; int numRead=0; while((numRead=input.read(buf)) != -1){ String readData =
* String.valueOf(buf, 0, numRead); fileData.append(readData); } input.close(); return fileData.toString();
*/
}
}
@@ -1,29 +1,24 @@
package mcp.mobius.waila.api.impl;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.*;
import java.util.Map.Entry;
import java.util.Set;
import mcp.mobius.waila.api.ITaggedList;
public class TipList<E, T> extends ArrayList<E> implements ITaggedList<E, T> {
Map<E, Set<T>> tags = new HashMap();
Map<E, Set<T>> tags = new HashMap<>();
@Override
public boolean add(E e, T tag) {
if (!tags.containsKey(e)) tags.put(e, new HashSet<T>());
if (!tags.containsKey(e)) tags.put(e, new HashSet<>());
tags.get(e).add(tag);
return super.add(e);
}
@Override
public boolean add(E e, Collection<? extends T> taglst) {
if (!tags.containsKey(e)) tags.put(e, new HashSet<T>());
if (!tags.containsKey(e)) tags.put(e, new HashSet<>());
tags.get(e).addAll(taglst);
return super.add(e);
@@ -33,7 +28,7 @@ public class TipList<E, T> extends ArrayList<E> implements ITaggedList<E, T> {
public Set<T> getTags(E e) {
Set<T> ret = tags.get(e);
if (ret == null && this.contains(e)) {
tags.put(e, new HashSet<T>());
tags.put(e, new HashSet<>());
ret = tags.get(e);
}
return ret;
@@ -46,7 +41,7 @@ public class TipList<E, T> extends ArrayList<E> implements ITaggedList<E, T> {
@Override
public void addTag(E e, T tag) {
if (this.contains(e) && !tags.containsKey(e)) tags.put(e, new HashSet<T>());
if (this.contains(e) && !tags.containsKey(e)) tags.put(e, new HashSet<>());
tags.get(e).add(tag);
}
@@ -58,7 +53,7 @@ public class TipList<E, T> extends ArrayList<E> implements ITaggedList<E, T> {
@Override
public void removeTag(E e, T tag) {
if (this.contains(e) && !tags.containsKey(e)) tags.put(e, new HashSet<T>());
if (this.contains(e) && !tags.containsKey(e)) tags.put(e, new HashSet<>());
tags.get(e).remove(tag);
}
@@ -70,7 +65,7 @@ public class TipList<E, T> extends ArrayList<E> implements ITaggedList<E, T> {
@Override
public Set<E> getEntries(T tag) {
Set<E> ret = new HashSet();
Set<E> ret = new HashSet<>();
for (Entry<E, Set<T>> s : tags.entrySet()) {
if (s.getValue().contains(tag)) ret.add(s.getKey());
}
@@ -84,12 +79,13 @@ public class TipList<E, T> extends ArrayList<E> implements ITaggedList<E, T> {
@Override
public String getTagsAsString(E e) {
String ret = "";
for (T s : tags.get(e)) ret += s.toString() + ",";
StringBuilder ret = new StringBuilder();
for (T s : tags.get(e)) ret.append(s.toString()).append(",");
if (ret.length() > 0) ret = ret.substring(0, ret.length() - 1);
// noinspection SizeReplaceableByIsEmpty
if (ret.length() > 0) ret = new StringBuilder(ret.substring(0, ret.length() - 1));
return ret;
return ret.toString();
}
@Override
@@ -0,0 +1,126 @@
package mcp.mobius.waila.api.impl.elements;
import java.util.ArrayList;
import java.util.List;
import net.minecraft.client.gui.Gui;
import net.minecraft.item.ItemStack;
import mcp.mobius.waila.api.elements.*;
public abstract class AbstractElementPanel implements IElement, IProbeInfo {
protected List<IElement> children = new ArrayList();
protected Integer borderColor;
protected int spacing;
protected ElementAlignment alignment;
public void render(int x, int y) {
if (this.borderColor != null) {
int w = this.getWidth();
int h = this.getHeight();
drawHorizontalLine(x, y, x + w - 1, this.borderColor);
drawHorizontalLine(x, y + h - 1, x + w - 1, this.borderColor);
drawVerticalLine(x, y, y + h - 1, this.borderColor);
drawVerticalLine(x + w - 1, y, y + h, this.borderColor);
}
}
public AbstractElementPanel(Integer borderColor, int spacing, ElementAlignment alignment) {
this.borderColor = borderColor;
this.spacing = spacing;
this.alignment = alignment;
}
public IProbeInfo text(String text, ITextStyle style) {
this.children.add(new ElementText(text, style));
return this;
}
public IProbeInfo text(String text) {
this.children.add(new ElementText(text));
return this;
}
public IProbeInfo vertical(ILayoutStyle style) {
ElementVertical e = new ElementVertical(style.getBorderColor(), style.getSpacing(), style.getAlignment());
this.children.add(e);
return e;
}
public IProbeInfo vertical() {
ElementVertical e = new ElementVertical(null, 2, ElementAlignment.ALIGN_TOPLEFT);
this.children.add(e);
return e;
}
public IProbeInfo horizontal(ILayoutStyle style) {
ElementHorizontal e = new ElementHorizontal(style.getBorderColor(), style.getSpacing(), style.getAlignment());
this.children.add(e);
return e;
}
public IProbeInfo horizontal() {
ElementHorizontal e = new ElementHorizontal((Integer) null, this.spacing, ElementAlignment.ALIGN_TOPLEFT);
this.children.add(e);
return e;
}
public IProbeInfo item(ItemStack stack, IItemStyle style) {
this.children.add(new ElementItemStack(stack, style));
return this;
}
public IProbeInfo item(ItemStack stack) {
return this.item(stack, new ItemStyle());
}
public IProbeInfo progress(int current, int max) {
return this.progress(current, max, new ProgressStyle());
}
public IProbeInfo progress(int current, int max, IProgressStyle style) {
this.children.add(new ElementProgress((long) current, (long) max, style));
return this;
}
public IProbeInfo progress(long current, long max) {
return this.progress(current, max, new ProgressStyle());
}
public IProbeInfo progress(long current, long max, IProgressStyle style) {
this.children.add(new ElementProgress(current, max, style));
return this;
}
// tmp
public static void drawHorizontalLine(int x1, int y1, int x2, int color) {
Gui.drawRect(x1, y1, x2, y1 + 1, color);
}
// tmp
public static void drawVerticalLine(int x1, int y1, int y2, int color) {
Gui.drawRect(x1, y1, x1 + 1, y2, color);
}
@Override
public ILayoutStyle defaultLayoutStyle() {
return new LayoutStyle();
}
@Override
public IProgressStyle defaultProgressStyle() {
return new ProgressStyle();
}
@Override
public ITextStyle defaultTextStyle() {
return new TextStyle();
}
@Override
public IItemStyle defaultItemStyle() {
return new ItemStyle();
}
}
@@ -0,0 +1,64 @@
package mcp.mobius.waila.api.impl.elements;
import mcp.mobius.waila.api.elements.ElementAlignment;
import mcp.mobius.waila.api.elements.IElement;
public class ElementHorizontal extends AbstractElementPanel {
public static final int SPACING = 5;
public ElementHorizontal(Integer borderColor, int spacing, ElementAlignment alignment) {
super(borderColor, spacing, alignment);
}
@Override
public void render(int x, int y) {
super.render(x, y);
if (borderColor != null) {
x += 3;
y += 3;
}
int totHeight = getHeight();
for (IElement element : children) {
int h = element.getHeight();
int cy = y;
switch (alignment) {
case ALIGN_TOPLEFT:
break;
case ALIGN_CENTER:
cy = y + (totHeight - h) / 2;
break;
case ALIGN_BOTTOMRIGHT:
cy = y + totHeight - h;
break;
}
element.render(x, cy);
x += element.getWidth() + spacing;
}
}
private int getBorderSpacing() {
return borderColor == null ? 0 : 6;
}
@Override
public int getWidth() {
int w = 0;
for (IElement element : children) {
w += element.getWidth();
}
return w + spacing * (children.size() - 1) + getBorderSpacing();
}
@Override
public int getHeight() {
int h = 0;
for (IElement element : children) {
int hh = element.getHeight();
if (hh > h) {
h = hh;
}
}
return h + getBorderSpacing();
}
}
@@ -0,0 +1,37 @@
package mcp.mobius.waila.api.impl.elements;
import net.minecraft.item.ItemStack;
import org.lwjgl.opengl.GL11;
import mcp.mobius.waila.api.elements.IElement;
import mcp.mobius.waila.api.elements.IItemStyle;
import mcp.mobius.waila.overlay.DisplayUtil;
public class ElementItemStack implements IElement {
private final ItemStack itemStack;
private final IItemStyle style;
public ElementItemStack(ItemStack itemStack, IItemStyle style) {
this.itemStack = itemStack;
this.style = style;
}
@Override
public void render(int x, int y) {
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
DisplayUtil.elementRenderStack(x, y, itemStack, style);
}
@Override
public int getWidth() {
return style.getWidth();
}
@Override
public int getHeight() {
return style.getHeight();
}
}
@@ -0,0 +1,117 @@
package mcp.mobius.waila.api.impl.elements;
import java.text.DecimalFormat;
import mcp.mobius.waila.api.NumberFormat;
import mcp.mobius.waila.api.elements.IElement;
import mcp.mobius.waila.api.elements.IProgressStyle;
import mcp.mobius.waila.overlay.DisplayUtil;
public class ElementProgress implements IElement {
private final long current;
private final long max;
private final IProgressStyle style;
public ElementProgress(long current, long max, IProgressStyle style) {
this.current = current;
this.max = max;
this.style = style;
}
private static DecimalFormat dfCommas = new DecimalFormat("###,###");
/**
* If the suffix starts with 'm' we can possibly drop that
*/
public static String format(long in, NumberFormat style, String suffix) {
switch (style) {
case FULL:
return Long.toString(in) + suffix;
case COMPACT: {
int unit = 1000;
if (in < unit) {
return Long.toString(in) + " " + suffix;
}
int exp = (int) (Math.log(in) / Math.log(unit));
char pre;
if (suffix.startsWith("m")) {
suffix = suffix.substring(1);
if (exp - 2 >= 0) {
pre = "kMGTPE".charAt(exp - 2);
return String.format("%.1f %s", in / Math.pow(unit, exp), pre) + suffix;
} else {
return String.format("%.1f %s", in / Math.pow(unit, exp), suffix);
}
} else {
pre = "kMGTPE".charAt(exp - 1);
return String.format("%.1f %s", in / Math.pow(unit, exp), pre) + suffix;
}
}
case COMMAS:
return dfCommas.format(in) + suffix;
case NONE:
return suffix;
}
return Long.toString(in);
}
@Override
public void render(int x, int y) {
render(style, current, max, x, y, getWidth(), getHeight());
}
private static void render(IProgressStyle style, long current, long max, int x, int y, int w, int h) {
DisplayUtil.drawThickBeveledBox(
x,
y,
x + w,
y + h,
1,
style.getBorderColor(),
style.getBorderColor(),
style.getBackgroundColor());
if (current > 0L && max > 0L) {
int dx = (int) Math.min(current * (long) (w - 2) / max, (long) (w - 2));
if (style.getFilledColor() == style.getAlternatefilledColor()) {
if (dx > 0) {
DisplayUtil.drawThickBeveledBox(
x + 1,
y + 1,
x + dx + 1,
y + h - 1,
1,
style.getFilledColor(),
style.getFilledColor(),
style.getFilledColor());
}
} else {
for (int xx = x + 1; xx <= x + dx + 1; ++xx) {
int color = (xx & 1) == 0 ? style.getFilledColor() : style.getAlternatefilledColor();
DisplayUtil.drawVerticalLine(xx, y + 1, y + h - 1, color);
}
}
}
if (style.isShowText()) {
DisplayUtil.drawString(style.getText(), x + 3, y + 2, style.getTextColor(), style.isTextShadow());
}
}
@Override
public int getWidth() {
if (style.isLifeBar()) {
if (current * 4 >= style.getWidth()) {
return 100;
} else {
return (int) (current * 4 + 2);
}
}
return style.getWidth();
}
@Override
public int getHeight() {
return style.getHeight();
}
}
@@ -0,0 +1,68 @@
package mcp.mobius.waila.api.impl.elements;
import net.minecraft.client.Minecraft;
import mcp.mobius.waila.api.elements.IElement;
import mcp.mobius.waila.api.elements.ITextStyle;
import mcp.mobius.waila.overlay.DisplayUtil;
public class ElementText implements IElement {
private final String text;
private final ITextStyle style;
private static final int DEFAULT_HEIGHT = 10;
public ElementText(String text) {
this(text, new TextStyle());
}
public ElementText(String text, ITextStyle style) {
this.text = text;
this.style = style;
}
public void render(int x, int y) {
int width = getTextWidth();
switch (style.getAlignment()) {
case ALIGN_BOTTOMRIGHT -> DisplayUtil.drawString(
text,
(x + getInternalWidth() - width) + style.getLeftPadding(),
y + style.getTopPadding(),
style.getColor(),
style.getShadow());
case ALIGN_CENTER -> DisplayUtil.drawString(
text,
((x + (getInternalWidth() / 2)) - (width / 2)) + style.getLeftPadding(),
y + style.getTopPadding(),
style.getColor(),
style.getShadow());
case ALIGN_TOPLEFT -> DisplayUtil.drawString(
text,
x + style.getLeftPadding(),
y + style.getTopPadding(),
style.getColor(),
style.getShadow());
}
}
public int getTextWidth() {
return Minecraft.getMinecraft().fontRenderer.getStringWidth(text);
}
protected int getInternalWidth() {
return (style.getWidth() != null ? style.getWidth() : getTextWidth());
}
@Override
public int getWidth() {
return style.getLeftPadding() + (style.getWidth() != null ? style.getWidth() : getTextWidth())
+ style.getRightPadding();
}
@Override
public int getHeight() {
return style.getTopPadding() + (style.getHeight() != null ? style.getHeight() : DEFAULT_HEIGHT)
+ style.getBottomPadding();
}
}
@@ -0,0 +1,73 @@
package mcp.mobius.waila.api.impl.elements;
import java.util.Iterator;
import mcp.mobius.waila.api.elements.ElementAlignment;
import mcp.mobius.waila.api.elements.IElement;
public class ElementVertical extends AbstractElementPanel {
public ElementVertical(Integer borderColor, int spacing, ElementAlignment alignment) {
super(borderColor, spacing, alignment);
}
public void render(int x, int y) {
super.render(x, y);
if (this.borderColor != null) {
x += 3;
y += 3;
}
int totWidth = this.getWidth();
IElement element;
for (Iterator var4 = this.children.iterator(); var4.hasNext(); y += element.getHeight() + this.spacing) {
element = (IElement) var4.next();
int w = element.getWidth();
int cx = x;
switch (this.alignment) {
case ALIGN_TOPLEFT:
default:
break;
case ALIGN_CENTER:
cx = x + (totWidth - w) / 2;
break;
case ALIGN_BOTTOMRIGHT:
cx = x + totWidth - w;
}
element.render(cx, y);
}
}
private int getBorderSpacing() {
return this.borderColor == null ? 0 : 6;
}
public int getHeight() {
int h = 0;
IElement element;
for (Iterator var2 = this.children.iterator(); var2.hasNext(); h += element.getHeight()) {
element = (IElement) var2.next();
}
return h + this.spacing * (this.children.size() - 1) + this.getBorderSpacing();
}
public int getWidth() {
int w = 0;
Iterator var2 = this.children.iterator();
while (var2.hasNext()) {
IElement element = (IElement) var2.next();
int ww = element.getWidth();
if (ww > w) {
w = ww;
}
}
return w + this.getBorderSpacing();
}
}
@@ -0,0 +1,34 @@
package mcp.mobius.waila.api.impl.elements;
import mcp.mobius.waila.api.elements.IItemStyle;
public class ItemStyle implements IItemStyle {
private int width = 20;
private int height = 20;
public ItemStyle(int w, int h) {
width = w;
height = h;
}
public ItemStyle() {}
public IItemStyle width(int w) {
this.width = w;
return this;
}
public IItemStyle height(int h) {
this.height = h;
return this;
}
public int getWidth() {
return this.width;
}
public int getHeight() {
return this.height;
}
}
@@ -0,0 +1,43 @@
package mcp.mobius.waila.api.impl.elements;
import mcp.mobius.waila.api.elements.ElementAlignment;
import mcp.mobius.waila.api.elements.ILayoutStyle;
public class LayoutStyle implements ILayoutStyle {
private Integer borderColor = null;
private ElementAlignment alignment;
private int spacing;
public LayoutStyle() {
this.alignment = ElementAlignment.ALIGN_TOPLEFT;
this.spacing = -1;
}
public ILayoutStyle alignment(ElementAlignment alignment) {
this.alignment = alignment;
return this;
}
public ElementAlignment getAlignment() {
return this.alignment;
}
public LayoutStyle borderColor(Integer c) {
this.borderColor = c;
return this;
}
public LayoutStyle spacing(int f) {
this.spacing = f;
return this;
}
public Integer getBorderColor() {
return this.borderColor;
}
public int getSpacing() {
return this.spacing;
}
}
@@ -0,0 +1,99 @@
package mcp.mobius.waila.api.impl.elements;
import java.util.HashSet;
import java.util.List;
import net.minecraft.block.Block;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.MovingObjectPosition;
import net.minecraft.world.World;
import net.minecraftforge.common.config.Configuration;
import mcp.mobius.waila.Waila;
import mcp.mobius.waila.addons.DefaultProbeInfoProvider;
import mcp.mobius.waila.api.ProbeMode;
import mcp.mobius.waila.api.elements.IProbeDataProvider;
import mcp.mobius.waila.api.impl.ConfigHandler;
import mcp.mobius.waila.api.impl.DataAccessorCommon;
import mcp.mobius.waila.network.Message0x01TERequest;
import mcp.mobius.waila.network.WailaPacketHandler;
import mcp.mobius.waila.utils.Constants;
import mcp.mobius.waila.utils.WailaExceptionHandler;
public class MetaProbeDataProvider {
public ProbeInfo handleBlockElementData(ItemStack itemStack, World world, EntityPlayer player,
MovingObjectPosition mop, DataAccessorCommon accessor) {
Block block = accessor.getBlock();
ProbeInfo probeInfo = new ProbeInfo();
DefaultProbeInfoProvider.addStandardBlockInfo(itemStack, probeInfo, accessor, ConfigHandler.instance());
if (!ModuleProbeRegistrar.instance().hasProviders(block)
&& !ModuleProbeRegistrar.instance().hasProviders(accessor.getTileEntity())) {
return probeInfo;
}
ProbeMode probeMode = player.isSneaking() ? ProbeMode.EXTENDED
: player.capabilities.isCreativeMode ? ProbeMode.DEBUG : ProbeMode.NORMAL;
if (accessor.getTileEntity() != null && Waila.instance.serverPresent
&& accessor.isTimeElapsed(250)
&& ConfigHandler.instance().showTooltip()
&& !ConfigHandler.instance()
.getConfig(Configuration.CATEGORY_GENERAL, Constants.CFG_WAILA_FORCE_LEGACY_MODE, false)) {
accessor.resetTimer();
HashSet<String> keys = new HashSet<>();
if (ModuleProbeRegistrar.instance().hasProviders(block)
|| ModuleProbeRegistrar.instance().hasProviders(accessor.getTileEntity()))
WailaPacketHandler.INSTANCE
.sendToServer(new Message0x01TERequest(accessor.getTileEntity(), keys, true));
} else if (accessor.getTileEntity() != null && !Waila.instance.serverPresent
&& accessor.isTimeElapsed(250)
&& ConfigHandler.instance().showTooltip()) {
try {
NBTTagCompound tag = new NBTTagCompound();
accessor.getTileEntity().writeToNBT(tag);
accessor.setNBTData(tag);
} catch (Exception e) {
WailaExceptionHandler.handleErr(e, this.getClass().getName(), null);
}
}
/* Lookup by class (for blocks) */
if (ModuleProbeRegistrar.instance().hasProviders(block)) {
List<IProbeDataProvider> probeDataProviders = ModuleProbeRegistrar.instance().getProviders(block);
for (IProbeDataProvider probeDataProvider : probeDataProviders) {
probeDataProvider.addProbeInfo(probeMode, itemStack, probeInfo, accessor, ConfigHandler.instance());
}
}
/* Lookup by class (for tileentities) */
if (ModuleProbeRegistrar.instance().hasProviders(accessor.getTileEntity())) {
List<IProbeDataProvider> probeDataProviders = ModuleProbeRegistrar.instance()
.getProviders(accessor.getTileEntity());
for (IProbeDataProvider probeDataProvider : probeDataProviders) {
probeDataProvider.addProbeInfo(probeMode, itemStack, probeInfo, accessor, ConfigHandler.instance());
}
}
return probeInfo;
}
// append legacy Tooltip into new ProbeInfo if possible
public ProbeInfo appendTooltipData(ProbeInfo probeInfo, List<String> tooltip, ItemStack itemStack,
DataAccessorCommon accessor) {
if (tooltip.isEmpty()) {
return probeInfo;
}
for (String s : tooltip) {
probeInfo.text(s);
}
return probeInfo;
}
}
@@ -0,0 +1,64 @@
package mcp.mobius.waila.api.impl.elements;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import mcp.mobius.waila.api.elements.IProbeDataProvider;
import mcp.mobius.waila.api.elements.IProbeRegistrar;
public class ModuleProbeRegistrar implements IProbeRegistrar {
private static ModuleProbeRegistrar instance = null;
public LinkedHashMap<Class<?>, ArrayList<IProbeDataProvider>> probeProviders = new LinkedHashMap<>();;
public LinkedHashMap<String, String> IMCRequests = new LinkedHashMap<>();
private ModuleProbeRegistrar() {
instance = this;
}
public static ModuleProbeRegistrar instance() {
if (ModuleProbeRegistrar.instance == null) ModuleProbeRegistrar.instance = new ModuleProbeRegistrar();
return ModuleProbeRegistrar.instance;
}
/* IMC HANDLING */
public void addIMCRequest(String method, String modname) {
this.IMCRequests.put(method, modname);
}
@Override
public void registerProbeProvider(IProbeDataProvider dataProvider, Class<?> block) {
this.registerProvider(dataProvider, block, this.probeProviders);
}
private void registerProvider(IProbeDataProvider dataProvider, Class<?> clazz,
LinkedHashMap<Class<?>, ArrayList<IProbeDataProvider>> target) {
if (clazz == null || dataProvider == null) throw new RuntimeException(
"Trying to register a null provider or null block ! Please check the stacktrace to know what was the original registration method.");
if (!target.containsKey(clazz)) target.put(clazz, new ArrayList<>());
ArrayList<IProbeDataProvider> providers = target.get(clazz);
if (providers.contains(dataProvider)) return;
target.get(clazz).add(dataProvider);
}
public boolean hasProviders(Object obj) {
for (Class clazz : probeProviders.keySet()) if (clazz.isInstance(obj)) return true;
return false;
}
public List<IProbeDataProvider> getProviders(Object obj) {
List<IProbeDataProvider> returnList = new ArrayList<>();
for (Class clazz : probeProviders.keySet()) {
if (clazz.isInstance(obj)) returnList.addAll(probeProviders.get(clazz));
}
return returnList;
}
}
Loaded 100 of 185 files, more files were not shown because too many files have changed in this diff. Show more