mirror of
https://github.com/GTNewHorizons/ForestryMC.git
synced 2026-11-15 17:44:55 +00:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c9941de0ad |
No files matched your search
@@ -3,9 +3,17 @@ Forestry
|
||||
|
||||
### What is it?
|
||||
|
||||
This is the GTNH fork of Forestry for 1.7.10. Do not report any issues to the original Forestry team. This fork is maintained by the GTNH team and is not supported by the original Forestry team.
|
||||
Forestry is a modification for the game Minecraft and known primarily for its farms and bees.
|
||||
|
||||
### Homepage
|
||||
|
||||
[Wiki](http://forestry.sengir.net/)
|
||||
|
||||
[Latest Builds for 1.7.10](http://jenkins.ic2.player.to/job/Forestry_Dev/)
|
||||
|
||||
[IRC #forestry on esper.net](http://webchat.esper.net/?nick=ForestryGithub...&channels=forestry&prompt=1)
|
||||
|
||||
For those interested in developement, you can also visit #forestry-dev.
|
||||
|
||||
### Building
|
||||
|
||||
@@ -23,6 +31,8 @@ Beware of ugly code.
|
||||
|
||||
Bugfixes are generally welcome. If you want to contribute something which changes game mechanics, please talk to someone with commit privileges first. Nothing is more frustrating than putting a lot of work and effort into a new game mechanic and then having the PR rejected because it doesn’t fit gameplay-wise.
|
||||
|
||||
**If you submit a PR you must accept the [Contributor License Agreement](https://cla-assistant.io/ForestryMC/ForestryMC). There is no way around that, since otherwise changing the license later - even to something more permissive! - , becomes close to impossible.**
|
||||
|
||||
### License & Copyright
|
||||
|
||||
Forestry is (c) 2011 - 2014 SirSengir and licensed under LGPL v3. See the LICENSE.txt for all the gory details or go to http://www.gnu.org/licenses/lgpl-3.0.txt for more information. Forestry also contains code contributed by CovertJaguar, Player, MysteriousAges, Binnie, RichardG, cpw, the GTNH Team, and others.
|
||||
Forestry is (c) 2011 - 2014 SirSengir and licensed under LGPL v3. See the LICENSE.txt for all the gory details or go to http://www.gnu.org/licenses/lgpl-3.0.txt for more information. Forestry also contains code contributed by CovertJaguar, Player, MysteriousAges, Binnie, RichardG, cpw and others.
|
||||
+1621
-3
File diff suppressed because it is too large.
Load diff
+3
-4
@@ -2,10 +2,9 @@
|
||||
|
||||
dependencies {
|
||||
api('curse.maven:cofh-lib-220333:2388748')
|
||||
compileOnlyApi('com.github.GTNewHorizons:Angelica:1.0.0-alpha33:api')
|
||||
devOnlyNonPublishable('com.github.GTNewHorizons:NotEnoughItems:2.5.23-GTNH:dev')
|
||||
compileOnly('com.github.GTNewHorizons:inventory-tweaks:1.6.2:api')
|
||||
compileOnly('com.github.GTNewHorizons:BuildCraft:7.1.39:api')
|
||||
devOnlyNonPublishable('com.github.GTNewHorizons:NotEnoughItems:2.3.81-GTNH:dev')
|
||||
compileOnly('com.github.GTNewHorizons:inventory-tweaks:1.5.16:api')
|
||||
compileOnly('com.github.GTNewHorizons:BuildCraft:7.1.36:api')
|
||||
compileOnly('net.industrial-craft:industrialcraft-2:2.2.828-experimental:dev')
|
||||
compileOnly('curse.maven:craftguide-75557:2459320')
|
||||
}
|
||||
+22
-154
@@ -1,192 +1,60 @@
|
||||
# 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 = Forestry
|
||||
|
||||
# Case-sensitive identifier string, available for mcmod.info population and used for automatic mixin JSON generation.
|
||||
# Conventionally lowercase.
|
||||
# This is a case-sensitive string to identify your mod. Convention is to use lower case.
|
||||
modId = Forestry
|
||||
|
||||
# Root package of the mod, used to find various classes in other properties,
|
||||
# mcmod.info substitution, enabling assertions in run tasks, etc.
|
||||
modGroup = forestry
|
||||
|
||||
# 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
|
||||
# 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/
|
||||
|
||||
# Updates your build.gradle and settings.gradle automatically whenever an update is available.
|
||||
# Will update your build.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
|
||||
|
||||
# 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.
|
||||
# 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
|
||||
developmentEnvironmentUserName = Developer
|
||||
|
||||
# Enables using modern Java syntax (up to version 17) via Jabel, while still targeting JVM 8.
|
||||
# See https://github.com/bsideup/jabel for details on how this works.
|
||||
enableModernJavaSyntax = 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 = forestry.Tags
|
||||
|
||||
# Name of the token containing the project's current version to generate/replace.
|
||||
gradleTokenVersion = VERSION
|
||||
|
||||
# [DEPRECATED] Mod ID replacement token.
|
||||
gradleTokenModId =
|
||||
|
||||
# [DEPRECATED] Mod name replacement token.
|
||||
gradleTokenModName =
|
||||
|
||||
# [DEPRECATED] Mod Group replacement token.
|
||||
gradleTokenGroupName =
|
||||
|
||||
# [DEPRECATED]
|
||||
# Multiple source files can be defined here by providing a comma-separated list: Class1.java,Class2.java,Class3.java
|
||||
# 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 =
|
||||
# version in @Mod([...], version = VERSION, [...])
|
||||
# Leave these properties empty to skip individual token replacements
|
||||
replaceGradleTokenInFile = Constants.java
|
||||
gradleTokenModId =
|
||||
gradleTokenModName =
|
||||
gradleTokenVersion = GRADLETOKEN_VERSION
|
||||
gradleTokenGroupName =
|
||||
|
||||
# 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/
|
||||
# There can be multiple files in a space-separated list.
|
||||
# Example value: mymodid_at.cfg nei_at.cfg
|
||||
# Example value: mymodid_at.cfg
|
||||
accessTransformersFile =
|
||||
|
||||
# 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
|
||||
|
||||
# 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.
|
||||
# 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.
|
||||
usesShadowedDependencies = false
|
||||
|
||||
# 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, IC2/Player maven, 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
|
||||
|
||||
Vendored
BIN
Binary file not shown.
+1
-2
@@ -1,7 +1,6 @@
|
||||
distributionBase=GRADLE_USER_HOME
|
||||
distributionPath=wrapper/dists
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.6-bin.zip
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.2.1-bin.zip
|
||||
networkTimeout=10000
|
||||
validateDistributionUrl=true
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
zipStorePath=wrapper/dists
|
||||
@@ -83,8 +83,7 @@ done
|
||||
# This is normally unused
|
||||
# shellcheck disable=SC2034
|
||||
APP_BASE_NAME=${0##*/}
|
||||
# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)
|
||||
APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit
|
||||
APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit
|
||||
|
||||
# Use the maximum available, or set MAX_FD != -1 to use that value.
|
||||
MAX_FD=maximum
|
||||
@@ -131,13 +130,10 @@ location of your Java installation."
|
||||
fi
|
||||
else
|
||||
JAVACMD=java
|
||||
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.
|
||||
which java >/dev/null 2>&1 || 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.
|
||||
@@ -145,7 +141,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=SC2039,SC3045
|
||||
# shellcheck disable=SC3045
|
||||
MAX_FD=$( ulimit -H -n ) ||
|
||||
warn "Could not query maximum file descriptor limit"
|
||||
esac
|
||||
@@ -153,7 +149,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=SC2039,SC3045
|
||||
# shellcheck disable=SC3045
|
||||
ulimit -n "$MAX_FD" ||
|
||||
warn "Could not set maximum file descriptor limit to $MAX_FD"
|
||||
esac
|
||||
@@ -202,11 +198,11 @@ fi
|
||||
# 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.
|
||||
# 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.
|
||||
|
||||
set -- \
|
||||
"-Dorg.gradle.appname=$APP_BASE_NAME" \
|
||||
|
||||
Vendored
+10
-10
@@ -43,11 +43,11 @@ set JAVA_EXE=java.exe
|
||||
%JAVA_EXE% -version >NUL 2>&1
|
||||
if %ERRORLEVEL% equ 0 goto execute
|
||||
|
||||
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
|
||||
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.
|
||||
|
||||
goto fail
|
||||
|
||||
@@ -57,11 +57,11 @@ set JAVA_EXE=%JAVA_HOME%/bin/java.exe
|
||||
|
||||
if exist "%JAVA_EXE%" goto execute
|
||||
|
||||
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
|
||||
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.
|
||||
|
||||
goto fail
|
||||
|
||||
|
||||
+10
-5
@@ -4,10 +4,10 @@ pluginManagement {
|
||||
maven {
|
||||
// RetroFuturaGradle
|
||||
name "GTNH Maven"
|
||||
url "https://nexus.gtnewhorizons.com/repository/public/"
|
||||
url "http://jenkins.usrv.eu:8081/nexus/content/groups/public/"
|
||||
allowInsecureProtocol = true
|
||||
mavenContent {
|
||||
includeGroup("com.gtnewhorizons")
|
||||
includeGroupByRegex("com\\.gtnewhorizons\\..+")
|
||||
includeGroup("com.gtnewhorizons.retrofuturagradle")
|
||||
}
|
||||
}
|
||||
gradlePluginPortal()
|
||||
@@ -17,7 +17,12 @@ pluginManagement {
|
||||
}
|
||||
|
||||
plugins {
|
||||
id 'com.gtnewhorizons.gtnhsettingsconvention' version '1.0.15'
|
||||
id 'com.diffplug.blowdryerSetup' version '1.6.0'
|
||||
id 'org.gradle.toolchains.foojay-resolver-convention' version '0.4.0' // Provides java toolchains
|
||||
}
|
||||
|
||||
|
||||
blowdryerSetup {
|
||||
repoSubfolder 'gtnhShared'
|
||||
github('GTNewHorizons/ExampleMod1.7.10', 'tag', '0.2.0')
|
||||
//devLocal '.' // Use this when testing config updates locally
|
||||
}
|
||||
@@ -34,8 +34,7 @@ public enum FarmDirection {
|
||||
return SOUTH;
|
||||
case WEST:
|
||||
return WEST;
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -115,7 +115,7 @@ public class BeekeepingLogic implements IBeekeepingLogic, IStreamable {
|
||||
|
||||
Stack<ItemStack> spawnCopy = new Stack<>();
|
||||
if (spawn.size() < 128) spawnCopy.addAll(spawn);
|
||||
else for (int b = 0; b < 128; ++b) spawnCopy.add(spawn.get(b));
|
||||
else for (byte b = 0; b < 128; ++b) spawnCopy.add(spawn.get(b));
|
||||
NBTTagList nbttaglist = new NBTTagList();
|
||||
while (!spawnCopy.isEmpty() && spawnCopy.size() <= 128) {
|
||||
NBTTagCompound nbttagcompound1 = new NBTTagCompound();
|
||||
|
||||
@@ -12,13 +12,12 @@ import forestry.api.core.Tabs;
|
||||
import forestry.apiculture.items.ItemBlockCandle;
|
||||
import forestry.core.blocks.BlockBase;
|
||||
import forestry.core.blocks.BlockRegistry;
|
||||
import forestry.core.blocks.IMachineProperties;
|
||||
import forestry.core.items.ItemBlockForestry;
|
||||
|
||||
public class BlockRegistryApiculture extends BlockRegistry {
|
||||
|
||||
public final BlockApiculture apiculture;
|
||||
public final BlockBase<? extends IMachineProperties> apicultureChest;
|
||||
public final BlockBase apicultureChest;
|
||||
public final BlockBeehives beehives;
|
||||
public final BlockCandle candle;
|
||||
public final BlockStump stump;
|
||||
@@ -27,7 +26,7 @@ public class BlockRegistryApiculture extends BlockRegistry {
|
||||
public BlockRegistryApiculture() {
|
||||
apiculture = registerBlock(new BlockApiculture(), ItemBlockForestry.class, "apiculture");
|
||||
|
||||
apicultureChest = registerBlock(new BlockBase<>(true), ItemBlockForestry.class, "apicultureChest");
|
||||
apicultureChest = registerBlock(new BlockBase(true), ItemBlockForestry.class, "apicultureChest");
|
||||
apicultureChest.setCreativeTab(Tabs.tabApiculture);
|
||||
apicultureChest.setHarvestLevel("axe", 0);
|
||||
|
||||
|
||||
@@ -8,9 +8,8 @@
|
||||
******************************************************************************/
|
||||
package forestry.apiculture.multiblock;
|
||||
|
||||
import java.util.ArrayDeque;
|
||||
import java.util.Deque;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.Stack;
|
||||
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.inventory.ISidedInventory;
|
||||
@@ -40,7 +39,7 @@ import forestry.core.utils.ItemStackUtil;
|
||||
public class TileAlvearySwarmer extends TileAlveary implements ISidedInventory, IActivatable, IAlvearyComponent.Active {
|
||||
|
||||
private final InventorySwarmer inventory;
|
||||
private final Deque<ItemStack> pendingSpawns = new ArrayDeque<>();
|
||||
private final Stack<ItemStack> pendingSpawns = new Stack<>();
|
||||
private boolean active;
|
||||
|
||||
public TileAlvearySwarmer() {
|
||||
|
||||
@@ -15,14 +15,11 @@ import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.util.IIcon;
|
||||
import net.minecraft.world.IBlockAccess;
|
||||
|
||||
import com.gtnewhorizons.angelica.api.ThreadSafeISBRH;
|
||||
|
||||
import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler;
|
||||
import forestry.apiculture.blocks.BlockCandle;
|
||||
import forestry.apiculture.tiles.TileCandle;
|
||||
import forestry.core.proxy.Proxies;
|
||||
|
||||
@ThreadSafeISBRH(perThread = false)
|
||||
public class RenderCandleBlock implements ISimpleBlockRenderingHandler {
|
||||
|
||||
@Override
|
||||
@@ -61,7 +58,7 @@ public class RenderCandleBlock implements ISimpleBlockRenderingHandler {
|
||||
IIcon iconB = block.getTextureFromPassAndLit(1, isLit);
|
||||
|
||||
int colour = tileCandle.getColour();
|
||||
final Tessellator tessellator = Tessellator.instance;
|
||||
Tessellator tessellator = Tessellator.instance;
|
||||
tessellator.setBrightness(world.getLightBrightnessForSkyBlocks(x, y, z, block.getLightValue(world, x, y, z)));
|
||||
tessellator.setColorOpaque_F(1.0F, 1.0F, 1.0F);
|
||||
double d0 = 0.4000000059604645D;
|
||||
@@ -90,7 +87,7 @@ public class RenderCandleBlock implements ISimpleBlockRenderingHandler {
|
||||
|
||||
private static void renderCandleAtAngle(IIcon icon, double x, double y, double z, double par8, double par10,
|
||||
int colour) {
|
||||
final Tessellator tessellator = Tessellator.instance;
|
||||
Tessellator tessellator = Tessellator.instance;
|
||||
double minU = icon.getMinU();
|
||||
double minV = icon.getMinV();
|
||||
double maxU = icon.getMaxU();
|
||||
|
||||
@@ -99,7 +99,7 @@ public class ComponentVillageBeeHouse extends StructureVillagePieces.House1 {
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressWarnings({ "rawtypes", "unchecked" })
|
||||
@SuppressWarnings("rawtypes")
|
||||
public static ComponentVillageBeeHouse buildComponent(StructureVillagePieces.Start startPiece, List par1List,
|
||||
Random random, int par3, int par4, int par5, int par6, int par7) {
|
||||
StructureBoundingBox bbox = StructureBoundingBox
|
||||
|
||||
@@ -28,6 +28,7 @@ import forestry.plugins.PluginApiculture;
|
||||
|
||||
public abstract class HiveDecorator {
|
||||
|
||||
@SuppressWarnings("rawtypes")
|
||||
private static final EventType EVENT_TYPE = EnumHelper
|
||||
.addEnum(EventType.class, "FORESTRY_HIVES", new Class[0], new Object[0]);
|
||||
|
||||
|
||||
@@ -168,7 +168,6 @@ public class BlockForestryLeaves extends BlockNewLeaf implements ITileEntityProv
|
||||
|
||||
@Override
|
||||
public ItemStack getPickBlock(MovingObjectPosition target, World world, int x, int y, int z) {
|
||||
@SuppressWarnings("deprecation")
|
||||
ItemStack itemStack = super.getPickBlock(target, world, x, y, z);
|
||||
TileLeaves leaves = getLeafTile(world, x, y, z);
|
||||
NBTTagCompound leavesNBT = new NBTTagCompound();
|
||||
|
||||
@@ -61,7 +61,6 @@ public class BlockFruitPod extends BlockCocoa {
|
||||
tile.onBlockTick();
|
||||
}
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
@Override
|
||||
public boolean removedByPlayer(World world, EntityPlayer player, int x, int y, int z) {
|
||||
if (!world.isRemote) {
|
||||
|
||||
@@ -1059,8 +1059,6 @@ public enum TreeDefinition implements ITreeDefinition, ITreeGenerator {
|
||||
case WEST:
|
||||
vanillaWoodMeta |= 1 << 2;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
world.setBlock(x, y, z, vanillaWoodBlock, vanillaWoodMeta, Constants.FLAG_BLOCK_SYNCH);
|
||||
|
||||
@@ -15,14 +15,11 @@ import net.minecraft.client.renderer.Tessellator;
|
||||
import net.minecraft.util.IIcon;
|
||||
import net.minecraft.world.IBlockAccess;
|
||||
|
||||
import com.gtnewhorizons.angelica.api.ThreadSafeISBRH;
|
||||
|
||||
import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler;
|
||||
import forestry.arboriculture.blocks.BlockFruitPod;
|
||||
import forestry.arboriculture.tiles.TileFruitPod;
|
||||
import forestry.plugins.PluginArboriculture;
|
||||
|
||||
@ThreadSafeISBRH(perThread = false)
|
||||
public class RenderFruitPodBlock implements ISimpleBlockRenderingHandler {
|
||||
|
||||
@Override
|
||||
@@ -40,7 +37,7 @@ public class RenderFruitPodBlock implements ISimpleBlockRenderingHandler {
|
||||
maturity = pod.getMaturity();
|
||||
}
|
||||
|
||||
final Tessellator tessellator = Tessellator.instance;
|
||||
Tessellator tessellator = Tessellator.instance;
|
||||
tessellator.setBrightness(blockPod.getMixedBrightnessForBlock(world, x, y, z));
|
||||
tessellator.setColorOpaque_F(1.0f, 1.0f, 1.0f);
|
||||
int metadata = world.getBlockMetadata(x, y, z);
|
||||
|
||||
@@ -14,8 +14,6 @@ import net.minecraft.client.renderer.RenderBlocks;
|
||||
import net.minecraft.util.IIcon;
|
||||
import net.minecraft.world.IBlockAccess;
|
||||
|
||||
import com.gtnewhorizons.angelica.api.ThreadSafeISBRH;
|
||||
|
||||
import forestry.arboriculture.blocks.BlockForestryLeaves;
|
||||
import forestry.arboriculture.tiles.TileLeaves;
|
||||
import forestry.core.render.RenderOverlayBlock;
|
||||
@@ -24,7 +22,6 @@ import forestry.plugins.PluginArboriculture;
|
||||
/**
|
||||
* Ugly but serviceable renderer for leaves, taking fruits into account.
|
||||
*/
|
||||
@ThreadSafeISBRH(perThread = false)
|
||||
public class RenderLeavesBlock extends RenderOverlayBlock {
|
||||
|
||||
@Override
|
||||
|
||||
@@ -15,8 +15,6 @@ import net.minecraft.client.renderer.Tessellator;
|
||||
import net.minecraft.util.IIcon;
|
||||
import net.minecraft.world.IBlockAccess;
|
||||
|
||||
import com.gtnewhorizons.angelica.api.ThreadSafeISBRH;
|
||||
|
||||
import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler;
|
||||
import forestry.api.arboriculture.EnumGermlingType;
|
||||
import forestry.api.arboriculture.IAlleleTreeSpecies;
|
||||
@@ -24,9 +22,10 @@ import forestry.arboriculture.blocks.BlockSapling;
|
||||
import forestry.arboriculture.tiles.TileSapling;
|
||||
import forestry.plugins.PluginArboriculture;
|
||||
|
||||
@ThreadSafeISBRH(perThread = false)
|
||||
public class RenderSaplingBlock implements ISimpleBlockRenderingHandler {
|
||||
|
||||
private static int renderLayer = 0;
|
||||
|
||||
@Override
|
||||
public void renderInventoryBlock(Block block, int metadata, int modelID, RenderBlocks renderer) {}
|
||||
|
||||
@@ -46,8 +45,10 @@ public class RenderSaplingBlock implements ISimpleBlockRenderingHandler {
|
||||
|
||||
IAlleleTreeSpecies species = tile.getTree().getGenome().getPrimary();
|
||||
|
||||
renderCrossedSquares(species, world, block, x, y, z, 0);
|
||||
renderCrossedSquares(species, world, block, x, y, z, 1);
|
||||
renderCrossedSquares(species, world, block, x, y, z);
|
||||
renderLayer = 1;
|
||||
renderCrossedSquares(species, world, block, x, y, z);
|
||||
renderLayer = 0;
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -62,9 +63,9 @@ public class RenderSaplingBlock implements ISimpleBlockRenderingHandler {
|
||||
}
|
||||
|
||||
private static boolean renderCrossedSquares(IAlleleTreeSpecies species, IBlockAccess world, Block block, int x,
|
||||
int y, int z, int renderLayer) {
|
||||
int y, int z) {
|
||||
|
||||
final Tessellator tess = Tessellator.instance;
|
||||
Tessellator tess = Tessellator.instance;
|
||||
|
||||
tess.setBrightness(block.getMixedBrightnessForBlock(world, x, y, z));
|
||||
int colourMultiplier = species.getGermlingColour(EnumGermlingType.SAPLING, renderLayer);
|
||||
@@ -80,14 +81,14 @@ public class RenderSaplingBlock implements ISimpleBlockRenderingHandler {
|
||||
}
|
||||
|
||||
tess.setColorOpaque_F(r, g, b);
|
||||
drawCrossedSquares(species, x, y, z, 1.0f, renderLayer);
|
||||
drawCrossedSquares(species, x, y, z, 1.0f);
|
||||
return true;
|
||||
}
|
||||
|
||||
private static void drawCrossedSquares(IAlleleTreeSpecies species, double par3, double par5, double par7, float mod,
|
||||
int renderLayer) {
|
||||
private static void drawCrossedSquares(IAlleleTreeSpecies species, double par3, double par5, double par7,
|
||||
float mod) {
|
||||
|
||||
final Tessellator tess = Tessellator.instance;
|
||||
Tessellator tess = Tessellator.instance;
|
||||
IIcon icon = species.getGermlingIcon(EnumGermlingType.SAPLING, renderLayer);
|
||||
|
||||
double d3 = (double) icon.getMinU();
|
||||
|
||||
@@ -35,7 +35,6 @@ public abstract class BlockForestry extends BlockContainer {
|
||||
setCreativeTab(CreativeTabForestry.tabForestry);
|
||||
}
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
@Override
|
||||
public boolean removedByPlayer(World world, EntityPlayer player, int x, int y, int z) {
|
||||
TileEntity tile = world.getTileEntity(x, y, z);
|
||||
|
||||
@@ -16,6 +16,7 @@ import net.minecraft.inventory.IInventory;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.util.ChatComponentText;
|
||||
import net.minecraft.util.StatCollector;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
import com.mojang.authlib.GameProfile;
|
||||
@@ -49,22 +50,29 @@ public abstract class BlockStructure extends BlockForestry {
|
||||
}
|
||||
|
||||
TileEntity tile = world.getTileEntity(x, y, z);
|
||||
if (!(tile instanceof MultiblockTileEntityForestry<?>part)) {
|
||||
if (!(tile instanceof MultiblockTileEntityForestry)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
MultiblockTileEntityForestry part = (MultiblockTileEntityForestry) tile;
|
||||
IMultiblockController controller = part.getMultiblockLogic().getController();
|
||||
|
||||
// If the player's hands are empty and they right-click on a multiblock, they get a
|
||||
// multiblock-debugging message if the machine is not assembled.
|
||||
if (player.getCurrentEquippedItem() == null && !controller.isAssembled()) {
|
||||
String validationError = controller.getLastValidationError();
|
||||
if (validationError != null) {
|
||||
long tick = world.getTotalWorldTime();
|
||||
if (tick > previousMessageTick + 20) {
|
||||
player.addChatMessage(new ChatComponentText(validationError));
|
||||
previousMessageTick = tick;
|
||||
if (controller != null) {
|
||||
String validationError = controller.getLastValidationError();
|
||||
if (validationError != null) {
|
||||
long tick = world.getTotalWorldTime();
|
||||
if (tick > previousMessageTick + 20) {
|
||||
player.addChatMessage(new ChatComponentText(validationError));
|
||||
previousMessageTick = tick;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
} else {
|
||||
player.addChatMessage(
|
||||
new ChatComponentText(StatCollector.translateToLocal("for.multiblock.error.notConnected")));
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -86,12 +94,13 @@ public abstract class BlockStructure extends BlockForestry {
|
||||
return;
|
||||
}
|
||||
|
||||
if (entityLiving instanceof EntityPlayer player) {
|
||||
if (entityLiving instanceof EntityPlayer) {
|
||||
TileEntity tile = world.getTileEntity(i, j, k);
|
||||
|
||||
if (tile instanceof MultiblockTileEntityForestry<?>tileForestry) {
|
||||
if (tile instanceof MultiblockTileEntityForestry) {
|
||||
EntityPlayer player = (EntityPlayer) entityLiving;
|
||||
GameProfile gameProfile = player.getGameProfile();
|
||||
tileForestry.setOwner(gameProfile);
|
||||
((MultiblockTileEntityForestry) tile).setOwner(gameProfile);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,5 +2,5 @@ package forestry.core.blocks;
|
||||
|
||||
public interface IItemTyped {
|
||||
|
||||
Enum<?> getTypeFromMeta(int meta);
|
||||
Enum getTypeFromMeta(int meta);
|
||||
}
|
||||
@@ -109,6 +109,6 @@ public class CircuitRegistry implements ICircuitRegistry {
|
||||
return null;
|
||||
}
|
||||
|
||||
return new CircuitBoard<>(nbttagcompound);
|
||||
return new CircuitBoard(nbttagcompound);
|
||||
}
|
||||
}
|
||||
@@ -79,6 +79,7 @@ public class GuiSolderingIron extends GuiForestry<ContainerSolderingIron, ItemIn
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
@Override
|
||||
public void initGui() {
|
||||
super.initGui();
|
||||
|
||||
@@ -75,7 +75,7 @@ public class ItemCircuitBoard extends ItemForestryMultiPass {
|
||||
|
||||
public static ItemStack createCircuitboard(EnumCircuitBoardType type, ICircuitLayout layout, ICircuit[] circuits) {
|
||||
ItemStack chipset = PluginCore.items.circuitboards.get(type);
|
||||
saveChipset(chipset, new CircuitBoard<>(type, layout, circuits));
|
||||
saveChipset(chipset, new CircuitBoard(type, layout, circuits));
|
||||
return chipset;
|
||||
}
|
||||
|
||||
|
||||
@@ -164,6 +164,7 @@ public class CommandHelpers {
|
||||
return false;
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public static List<String> getListOfStringsMatchingLastWord(String[] strings, String... lastWords) {
|
||||
return CommandBase.getListOfStringsMatchingLastWord(strings, lastWords);
|
||||
}
|
||||
|
||||
@@ -26,11 +26,24 @@ public class CommandVersion extends SubCommand {
|
||||
|
||||
@Override
|
||||
public void processSubCommand(ICommandSender sender, String[] args) {
|
||||
ChatStyle style = new ChatStyle();
|
||||
if (Version.isOutdated()) {
|
||||
style.setColor(EnumChatFormatting.RED);
|
||||
} else {
|
||||
style.setColor(EnumChatFormatting.GREEN);
|
||||
}
|
||||
|
||||
CommandHelpers.sendLocalizedChatMessage(
|
||||
sender,
|
||||
new ChatStyle().setColor(EnumChatFormatting.GREEN),
|
||||
style,
|
||||
"for.chat.version",
|
||||
Version.getVersion(),
|
||||
Proxies.common.getMinecraftVersion());
|
||||
Proxies.common.getMinecraftVersion(),
|
||||
Version.getRecommendedVersion());
|
||||
if (Version.isOutdated()) {
|
||||
for (String updateLine : Version.getChangelog()) {
|
||||
CommandHelpers.sendChatMessage(sender, EnumChatFormatting.BLUE + updateLine);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -74,7 +74,7 @@ public class RootCommand extends CommandBase implements IForestryCommand {
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> addTabCompletionOptions(ICommandSender sender, String[] incomplete) {
|
||||
public List addTabCompletionOptions(ICommandSender sender, String[] incomplete) {
|
||||
return CommandHelpers.addStandardTabCompletionOptions(this, sender, incomplete);
|
||||
}
|
||||
|
||||
|
||||
@@ -8,7 +8,6 @@
|
||||
******************************************************************************/
|
||||
package forestry.core.config;
|
||||
|
||||
import forestry.Tags;
|
||||
import forestry.api.core.IForestryConstants;
|
||||
|
||||
public class Constants implements IForestryConstants {
|
||||
@@ -16,7 +15,7 @@ public class Constants implements IForestryConstants {
|
||||
// System
|
||||
public static final String MOD = "Forestry";
|
||||
public static final String ID = "forestry";
|
||||
public static final String VERSION = Tags.VERSION;
|
||||
public static final String VERSION = "GRADLETOKEN_VERSION";
|
||||
public static final String URL = "http://forestry.sengir.net/";
|
||||
|
||||
public static final int FLAG_BLOCK_UPDATE = 1;
|
||||
|
||||
@@ -25,7 +25,6 @@ public class ForestryGuiConfig extends GuiConfig {
|
||||
super(parent, getConfigCategories(), Constants.MOD, true, true, Constants.MOD);
|
||||
}
|
||||
|
||||
@SuppressWarnings("rawtypes")
|
||||
private static List<IConfigElement> getConfigCategories() {
|
||||
List<IConfigElement> configElements = new ArrayList<>();
|
||||
|
||||
@@ -33,13 +32,13 @@ public class ForestryGuiConfig extends GuiConfig {
|
||||
.asList("crafting", "difficulty", "genetics", "performance", "structures", "tweaks", "world");
|
||||
for (String categoryName : commonCategoryNames) {
|
||||
ConfigCategory category = Config.configCommon.getCategory(categoryName);
|
||||
configElements.add(new ConfigElement<>(category));
|
||||
configElements.add(new ConfigElement(category));
|
||||
}
|
||||
|
||||
List<String> fluidCategoryNames = Arrays.asList("enableFluid", "enableFluidBlock");
|
||||
for (String categoryName : fluidCategoryNames) {
|
||||
ConfigCategory category = Config.configFluid.getCategory(categoryName);
|
||||
configElements.add(new ConfigElement<>(category));
|
||||
configElements.add(new ConfigElement(category));
|
||||
}
|
||||
|
||||
return configElements;
|
||||
|
||||
@@ -8,7 +8,21 @@
|
||||
******************************************************************************/
|
||||
package forestry.core.config;
|
||||
|
||||
import forestry.Tags;
|
||||
import java.io.BufferedReader;
|
||||
import java.io.File;
|
||||
import java.io.InputStreamReader;
|
||||
import java.net.HttpURLConnection;
|
||||
import java.net.URL;
|
||||
import java.util.ArrayList;
|
||||
|
||||
import net.minecraftforge.common.config.Configuration;
|
||||
import net.minecraftforge.common.config.Property;
|
||||
|
||||
import cpw.mods.fml.common.FMLCommonHandler;
|
||||
import cpw.mods.fml.common.versioning.DefaultArtifactVersion;
|
||||
import forestry.Forestry;
|
||||
import forestry.core.proxy.Proxies;
|
||||
import forestry.core.utils.Log;
|
||||
|
||||
/**
|
||||
* With permission from pahimar.
|
||||
@@ -17,51 +31,163 @@ import forestry.Tags;
|
||||
*/
|
||||
public class Version {
|
||||
|
||||
@Deprecated
|
||||
public enum EnumUpdateState {
|
||||
CURRENT,
|
||||
OUTDATED,
|
||||
CONNECTION_ERROR
|
||||
}
|
||||
|
||||
public static final String VERSION = Tags.VERSION;
|
||||
@Deprecated
|
||||
public static final String BUILD_NUMBER = "";
|
||||
@Deprecated
|
||||
public static final String VERSION = "@VERSION@";
|
||||
public static final String BUILD_NUMBER = "@BUILD_NUMBER@";
|
||||
public static final String[] FAILED_CHANGELOG = new String[] {
|
||||
String.format("Unable to retrieve changelog for %s", Constants.MOD) };
|
||||
@Deprecated
|
||||
private static final String REMOTE_VERSION_FILE = "http://bit.ly/forestryver";
|
||||
private static final String REMOTE_CHANGELOG_ROOT = "https://dl.dropbox.com/u/44760587/forestry/changelog/";
|
||||
public static EnumUpdateState currentVersion = EnumUpdateState.CURRENT;
|
||||
private static String recommendedVersion;
|
||||
private static String[] cachedChangelog = FAILED_CHANGELOG;
|
||||
|
||||
public static String getVersion() {
|
||||
return VERSION;
|
||||
return VERSION + " (" + BUILD_NUMBER + ")";
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
public static boolean isOutdated() {
|
||||
return false;
|
||||
return currentVersion == EnumUpdateState.OUTDATED;
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
public static boolean needsUpdateNoticeAndMarkAsSeen() {
|
||||
return false;
|
||||
if (!isOutdated()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
File versionFile = new File(Forestry.instance.getConfigFolder(), Config.CATEGORY_COMMON + ".cfg");
|
||||
Configuration config = new Configuration(versionFile);
|
||||
Property property = config.get("version", "seen", VERSION);
|
||||
property.comment = "indicates the last version the user has been informed about and will suppress further notices on it.";
|
||||
String seenVersion = property.getString();
|
||||
|
||||
if (recommendedVersion == null || recommendedVersion.equals(seenVersion)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
property.set(recommendedVersion);
|
||||
config.save();
|
||||
return true;
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
public static String getRecommendedVersion() {
|
||||
return VERSION;
|
||||
return recommendedVersion;
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
public static void versionCheck() {}
|
||||
private static class VersionChecker extends Thread {
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
try {
|
||||
String location = REMOTE_VERSION_FILE;
|
||||
HttpURLConnection conn = null;
|
||||
while (location != null && !location.isEmpty()) {
|
||||
URL url = new URL(location);
|
||||
conn = (HttpURLConnection) url.openConnection();
|
||||
conn.setRequestProperty(
|
||||
"User-Agent",
|
||||
"Mozilla/5.0 (Windows; U; Windows NT 6.0; ru; rv:1.9.0.11) Gecko/2009060215 Firefox/3.0.11 (.NET CLR 3.5.30729)");
|
||||
conn.connect();
|
||||
location = conn.getHeaderField("Location");
|
||||
}
|
||||
|
||||
BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
|
||||
|
||||
String line;
|
||||
String mcVersion = Proxies.common.getMinecraftVersion();
|
||||
while ((line = reader.readLine()) != null) {
|
||||
if (line.startsWith(mcVersion) && line.contains(Constants.MOD)) {
|
||||
String[] tokens = line.split(":");
|
||||
recommendedVersion = tokens[2];
|
||||
}
|
||||
}
|
||||
|
||||
if (recommendedVersion == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
int result = FMLCommonHandler.instance().findContainerFor(Forestry.instance).getProcessedVersion()
|
||||
.compareTo(new DefaultArtifactVersion(recommendedVersion));
|
||||
if (result >= 0) {
|
||||
Log.finer(
|
||||
"Using the latest version [" + VERSION
|
||||
+ " (build:"
|
||||
+ BUILD_NUMBER
|
||||
+ ")] for Minecraft "
|
||||
+ mcVersion);
|
||||
currentVersion = EnumUpdateState.CURRENT;
|
||||
return;
|
||||
}
|
||||
|
||||
cachedChangelog = grabChangelog(recommendedVersion);
|
||||
|
||||
Log.warning(
|
||||
"Using outdated version [" + VERSION
|
||||
+ " (build:"
|
||||
+ BUILD_NUMBER
|
||||
+ ")] for Minecraft "
|
||||
+ mcVersion
|
||||
+ ". Consider updating.");
|
||||
currentVersion = EnumUpdateState.OUTDATED;
|
||||
|
||||
} catch (Exception e) {
|
||||
// e.printStackTrace();
|
||||
Log.warning("Unable to read from remote version authority.");
|
||||
currentVersion = EnumUpdateState.CONNECTION_ERROR;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void versionCheck() {
|
||||
new VersionChecker().start();
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
public static String[] getChangelog() {
|
||||
return FAILED_CHANGELOG;
|
||||
return cachedChangelog;
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
public static String[] grabChangelog(String version) {
|
||||
return FAILED_CHANGELOG;
|
||||
|
||||
try {
|
||||
String location = REMOTE_CHANGELOG_ROOT + version;
|
||||
HttpURLConnection conn;
|
||||
do {
|
||||
URL url = new URL(location);
|
||||
conn = (HttpURLConnection) url.openConnection();
|
||||
conn.setRequestProperty(
|
||||
"User-Agent",
|
||||
"Mozilla/5.0 (Windows; U; Windows NT 6.0; ru; rv:1.9.0.11) Gecko/2009060215 Firefox/3.0.11 (.NET CLR 3.5.30729)");
|
||||
conn.connect();
|
||||
location = conn.getHeaderField("Location");
|
||||
} while (location != null && !location.isEmpty());
|
||||
|
||||
BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
|
||||
|
||||
String line;
|
||||
ArrayList<String> changelog = new ArrayList<>();
|
||||
while ((line = reader.readLine()) != null) {
|
||||
if (line.startsWith("#")) {
|
||||
continue;
|
||||
}
|
||||
if (line.isEmpty()) {
|
||||
continue;
|
||||
}
|
||||
|
||||
changelog.add(line);
|
||||
}
|
||||
|
||||
return changelog.toArray(new String[changelog.size()]);
|
||||
|
||||
} catch (Exception ex) {
|
||||
// ex.printStackTrace();
|
||||
Log.warning("Unable to read changelog from remote site.");
|
||||
}
|
||||
|
||||
return new String[] { String.format("Unable to retrieve changelog for %s %s", Constants.MOD, version) };
|
||||
}
|
||||
}
|
||||
@@ -10,6 +10,7 @@ package forestry.core.fluids;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import net.minecraft.entity.player.EntityPlayerMP;
|
||||
import net.minecraft.inventory.Container;
|
||||
import net.minecraft.inventory.ICrafting;
|
||||
import net.minecraftforge.common.util.ForgeDirection;
|
||||
@@ -30,7 +31,7 @@ public class FakeTankManager implements ITankManager {
|
||||
public void containerAdded(Container container, ICrafting player) {}
|
||||
|
||||
@Override
|
||||
public void updateGuiData(Container container, List<ICrafting> crafters) {}
|
||||
public void updateGuiData(Container container, List<EntityPlayerMP> crafters) {}
|
||||
|
||||
@Override
|
||||
public void containerRemoved(Container container) {}
|
||||
|
||||
@@ -10,6 +10,7 @@ package forestry.core.fluids;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import net.minecraft.entity.player.EntityPlayerMP;
|
||||
import net.minecraft.inventory.Container;
|
||||
import net.minecraft.inventory.ICrafting;
|
||||
import net.minecraftforge.fluids.FluidStack;
|
||||
@@ -20,7 +21,7 @@ public interface ITankManager extends IFluidHandler {
|
||||
|
||||
void containerAdded(Container container, ICrafting player);
|
||||
|
||||
void updateGuiData(Container container, List<ICrafting> crafters);
|
||||
void updateGuiData(Container container, List<EntityPlayerMP> crafters);
|
||||
|
||||
void containerRemoved(Container container);
|
||||
|
||||
|
||||
@@ -17,7 +17,6 @@ import java.util.List;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.entity.player.EntityPlayerMP;
|
||||
import net.minecraft.inventory.Container;
|
||||
import net.minecraft.inventory.ICrafting;
|
||||
@@ -135,7 +134,7 @@ public class TankManager implements ITankManager, ITankUpdateHandler, IStreamabl
|
||||
return;
|
||||
}
|
||||
|
||||
List<ICrafting> crafters = Collections.singletonList(player);
|
||||
List<EntityPlayerMP> crafters = Collections.singletonList((EntityPlayerMP) player);
|
||||
|
||||
for (StandardTank tank : tanks) {
|
||||
sendTankUpdate(container, tank, crafters);
|
||||
@@ -150,13 +149,13 @@ public class TankManager implements ITankManager, ITankUpdateHandler, IStreamabl
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateGuiData(Container container, List<ICrafting> crafters) {
|
||||
public void updateGuiData(Container container, List<EntityPlayerMP> crafters) {
|
||||
for (StandardTank tank : tanks) {
|
||||
updateGuiData(container, crafters, tank.getTankIndex());
|
||||
}
|
||||
}
|
||||
|
||||
private void updateGuiData(Container container, List<ICrafting> crafters, int tankIndex) {
|
||||
private void updateGuiData(Container container, List<EntityPlayerMP> crafters, int tankIndex) {
|
||||
StandardTank tank = tanks.get(tankIndex);
|
||||
if (tank == null) {
|
||||
return;
|
||||
@@ -171,12 +170,12 @@ public class TankManager implements ITankManager, ITankUpdateHandler, IStreamabl
|
||||
sendTankUpdate(container, tank, crafters);
|
||||
}
|
||||
|
||||
private void sendTankUpdate(Container container, StandardTank tank, Iterable<ICrafting> crafters) {
|
||||
private void sendTankUpdate(Container container, StandardTank tank, Iterable<EntityPlayerMP> crafters) {
|
||||
int tankIndex = tank.getTankIndex();
|
||||
FluidStack fluid = tank.getFluid();
|
||||
IForestryPacketClient packet = new PacketTankLevelUpdate(tile, tankIndex, fluid);
|
||||
for (ICrafting player : crafters) {
|
||||
Proxies.net.sendToPlayer(packet, (EntityPlayer) player);
|
||||
for (EntityPlayerMP player : crafters) {
|
||||
Proxies.net.sendToPlayer(packet, player);
|
||||
}
|
||||
|
||||
if (fluid == null) {
|
||||
|
||||
@@ -133,9 +133,8 @@ public class StandardTank extends FluidTank implements IStreamable {
|
||||
case DEFAULT:
|
||||
case INPUT:
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public boolean canBeDrainedExternally() {
|
||||
@@ -143,9 +142,8 @@ public class StandardTank extends FluidTank implements IStreamable {
|
||||
case DEFAULT:
|
||||
case OUTPUT:
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public boolean canFill(Fluid fluid, int amount) {
|
||||
|
||||
@@ -33,7 +33,7 @@ public class AlleleHelper implements IAlleleHelper {
|
||||
private static final String modId = Constants.ID;
|
||||
public static AlleleHelper instance;
|
||||
|
||||
private final Map<Class<?>, Map<?, ? extends IAllele>> alleleMaps = new HashMap<>();
|
||||
private final Map<Class, Map<?, ? extends IAllele>> alleleMaps = new HashMap<>();
|
||||
|
||||
public void init() {
|
||||
if (PluginManager.Module.APICULTURE.isEnabled()) {
|
||||
|
||||
@@ -38,6 +38,7 @@ public abstract class ContainerLiquidTanks<T extends TileEntity & ILiquidTankTil
|
||||
}
|
||||
|
||||
@Override
|
||||
@SuppressWarnings("unchecked")
|
||||
public void detectAndSendChanges() {
|
||||
super.detectAndSendChanges();
|
||||
tile.getTankManager().updateGuiData(this, crafters);
|
||||
|
||||
@@ -43,6 +43,7 @@ public abstract class ContainerLiquidTanksSocketed<T extends TileEntity & ILiqui
|
||||
}
|
||||
|
||||
@Override
|
||||
@SuppressWarnings("unchecked")
|
||||
public void detectAndSendChanges() {
|
||||
super.detectAndSendChanges();
|
||||
tile.getTankManager().updateGuiData(this, crafters);
|
||||
|
||||
@@ -8,11 +8,10 @@
|
||||
******************************************************************************/
|
||||
package forestry.core.gui;
|
||||
|
||||
import java.util.ArrayDeque;
|
||||
import java.util.Deque;
|
||||
import java.util.HashMap;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
import java.util.Stack;
|
||||
|
||||
import net.minecraft.client.renderer.RenderHelper;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
@@ -209,7 +208,7 @@ public abstract class GuiAlyzer extends GuiForestry<ContainerAlyzer, IInventory>
|
||||
textLayout.drawLine(StringUtil.localize("gui.alyzer.classification") + ":", 12);
|
||||
textLayout.newLine();
|
||||
|
||||
Deque<IClassification> hierarchy = new ArrayDeque<>();
|
||||
Stack<IClassification> hierarchy = new Stack<>();
|
||||
IClassification classification = individual.getGenome().getPrimary().getBranch();
|
||||
while (classification != null) {
|
||||
|
||||
|
||||
@@ -302,7 +302,7 @@ public abstract class GuiForestry<C extends Container, I extends IInventory> ext
|
||||
@Optional.Method(modid = "NotEnoughItems")
|
||||
public boolean hideItemPanelSlot(GuiContainer gui, int x, int y, int w, int h) {
|
||||
if (gui instanceof GuiForestry) {
|
||||
return ((GuiForestry<?, ?>) gui).ledgerManager.ledgerOverlaps(x, y, w, h);
|
||||
return ((GuiForestry) gui).ledgerManager.ledgerOverlaps(x, y, w, h);
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -94,6 +94,7 @@ public class GuiNaturalistInventory extends GuiForestry<Container, IPagedInvento
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
@Override
|
||||
public void initGui() {
|
||||
super.initGui();
|
||||
|
||||
@@ -70,6 +70,7 @@ public class GuiTextBox extends GuiTextField {
|
||||
return text.substring(0, cursorPos) + "_" + text.substring(cursorPos);
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
private void drawScrolledSplitString(String text, int startX, int startY, int width, int textColour) {
|
||||
List<String> lines = fontRendererObj.listFormattedStringToWidth(text, width);
|
||||
maxLines = lines.size();
|
||||
|
||||
@@ -25,7 +25,7 @@ import forestry.core.gui.tooltips.ToolTipLine;
|
||||
|
||||
public class GuiUtil {
|
||||
|
||||
public static void drawItemStack(GuiForestry<?, ?> gui, ItemStack stack, int xPos, int yPos) {
|
||||
public static void drawItemStack(GuiForestry gui, ItemStack stack, int xPos, int yPos) {
|
||||
GL11.glPushAttrib(GL11.GL_ENABLE_BIT);
|
||||
RenderHelper.enableGUIStandardItemLighting();
|
||||
|
||||
@@ -50,7 +50,7 @@ public class GuiUtil {
|
||||
GL11.glPopAttrib();
|
||||
}
|
||||
|
||||
public static void drawToolTips(GuiForestry<?, ?> gui, ToolTip toolTips, int mouseX, int mouseY) {
|
||||
public static void drawToolTips(GuiForestry gui, ToolTip toolTips, int mouseX, int mouseY) {
|
||||
if (toolTips == null) {
|
||||
return;
|
||||
}
|
||||
@@ -144,7 +144,7 @@ public class GuiUtil {
|
||||
itemRender.zLevel = 0.0F;
|
||||
}
|
||||
|
||||
public static void drawToolTips(GuiForestry<?, ?> gui, Collection<?> objects, int mouseX, int mouseY) {
|
||||
public static void drawToolTips(GuiForestry gui, Collection<?> objects, int mouseX, int mouseY) {
|
||||
for (Object obj : objects) {
|
||||
if (!(obj instanceof IToolTipProvider)) {
|
||||
continue;
|
||||
|
||||
@@ -9,8 +9,6 @@
|
||||
package forestry.core.gui;
|
||||
|
||||
import net.minecraft.client.gui.FontRenderer;
|
||||
import net.minecraft.inventory.Container;
|
||||
import net.minecraft.inventory.IInventory;
|
||||
|
||||
import org.lwjgl.opengl.GL11;
|
||||
|
||||
@@ -20,7 +18,7 @@ public class TextLayoutHelper {
|
||||
|
||||
private static final int LINE_HEIGHT = 12;
|
||||
|
||||
private final GuiForestry<? extends Container, ? extends IInventory> guiForestry;
|
||||
private final GuiForestry guiForestry;
|
||||
private final int defaultFontColor;
|
||||
private FontRenderer fontRendererObj;
|
||||
|
||||
@@ -29,7 +27,7 @@ public class TextLayoutHelper {
|
||||
public int column2;
|
||||
public int line;
|
||||
|
||||
public TextLayoutHelper(GuiForestry<? extends Container, ? extends IInventory> guiForestry, FontColour fontColour) {
|
||||
public TextLayoutHelper(GuiForestry guiForestry, FontColour fontColour) {
|
||||
this.guiForestry = guiForestry;
|
||||
this.defaultFontColor = fontColour.get("gui.screen");
|
||||
}
|
||||
|
||||
@@ -227,10 +227,12 @@ public abstract class Ledger {
|
||||
protected int drawSplitText(String string, int x, int y, int width, int color, boolean shadow) {
|
||||
int originalY = y;
|
||||
Minecraft minecraft = Proxies.common.getClientInstance();
|
||||
List<String> strings = minecraft.fontRenderer.listFormattedStringToWidth(string, width);
|
||||
for (String obj : strings) {
|
||||
minecraft.fontRenderer.drawString(obj, x, y, color, shadow);
|
||||
y += minecraft.fontRenderer.FONT_HEIGHT;
|
||||
List strings = minecraft.fontRenderer.listFormattedStringToWidth(string, width);
|
||||
for (Object obj : strings) {
|
||||
if (obj instanceof String) {
|
||||
minecraft.fontRenderer.drawString((String) obj, x, y, color, shadow);
|
||||
y += minecraft.fontRenderer.FONT_HEIGHT;
|
||||
}
|
||||
}
|
||||
return y - originalY;
|
||||
}
|
||||
|
||||
@@ -11,9 +11,6 @@ package forestry.core.gui.ledgers;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import net.minecraft.inventory.Container;
|
||||
import net.minecraft.inventory.IInventory;
|
||||
|
||||
import org.lwjgl.opengl.GL11;
|
||||
|
||||
import forestry.api.core.IErrorSource;
|
||||
@@ -32,9 +29,9 @@ public class LedgerManager {
|
||||
private IErrorSource errorSource;
|
||||
private final int maxWidth;
|
||||
|
||||
public final GuiForestry<? extends Container, ? extends IInventory> gui;
|
||||
public final GuiForestry gui;
|
||||
|
||||
public LedgerManager(GuiForestry<? extends Container, ? extends IInventory> gui, int maxWidth) {
|
||||
public LedgerManager(GuiForestry gui, int maxWidth) {
|
||||
this.gui = gui;
|
||||
this.errorSource = FakeErrorSource.instance;
|
||||
this.maxWidth = maxWidth;
|
||||
|
||||
@@ -39,7 +39,7 @@ public class ToolTip extends ForwardingList<ToolTipLine> {
|
||||
return add(new ToolTipLine(line));
|
||||
}
|
||||
|
||||
public boolean add(List<?> lines) {
|
||||
public boolean add(List lines) {
|
||||
boolean changed = false;
|
||||
for (Object line : lines) {
|
||||
if (line instanceof String) {
|
||||
|
||||
@@ -54,6 +54,7 @@ public class SocketWidget extends Widget {
|
||||
|
||||
private final ToolTip toolTip = new ToolTip(250) {
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
@Override
|
||||
public void refresh() {
|
||||
toolTip.clear();
|
||||
|
||||
@@ -12,8 +12,6 @@ import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.inventory.Container;
|
||||
import net.minecraft.inventory.IInventory;
|
||||
|
||||
import org.lwjgl.opengl.GL11;
|
||||
|
||||
@@ -22,11 +20,11 @@ import forestry.core.proxy.Proxies;
|
||||
|
||||
public class WidgetManager {
|
||||
|
||||
public final GuiForestry<? extends Container, ? extends IInventory> gui;
|
||||
public final GuiForestry gui;
|
||||
public final Minecraft minecraft;
|
||||
protected final List<Widget> widgets = new ArrayList<>();
|
||||
|
||||
public WidgetManager(GuiForestry<? extends Container, ? extends IInventory> gui) {
|
||||
public WidgetManager(GuiForestry gui) {
|
||||
this.gui = gui;
|
||||
this.minecraft = Proxies.common.getClientInstance();
|
||||
}
|
||||
|
||||
@@ -120,7 +120,7 @@ public abstract class MultiblockControllerBase implements IMultiblockControllerI
|
||||
coord);
|
||||
}
|
||||
|
||||
MultiblockLogic<?> logic = (MultiblockLogic<?>) part.getMultiblockLogic();
|
||||
MultiblockLogic logic = (MultiblockLogic) part.getMultiblockLogic();
|
||||
|
||||
logic.setController(this);
|
||||
this.onBlockAdded(part);
|
||||
@@ -138,7 +138,7 @@ public abstract class MultiblockControllerBase implements IMultiblockControllerI
|
||||
TileEntity te = this.worldObj.getTileEntity(referenceCoord.posX, referenceCoord.posY, referenceCoord.posZ);
|
||||
if (te instanceof IMultiblockComponent) {
|
||||
IMultiblockComponent tePart = (IMultiblockComponent) te;
|
||||
MultiblockLogic<?> teLogic = (MultiblockLogic<?>) tePart.getMultiblockLogic();
|
||||
MultiblockLogic teLogic = (MultiblockLogic) tePart.getMultiblockLogic();
|
||||
teLogic.forfeitMultiblockSaveDelegate();
|
||||
}
|
||||
|
||||
@@ -219,7 +219,7 @@ public abstract class MultiblockControllerBase implements IMultiblockControllerI
|
||||
*/
|
||||
private void onDetachBlock(IMultiblockComponent part) {
|
||||
// Strip out this part
|
||||
MultiblockLogic<?> logic = (MultiblockLogic<?>) part.getMultiblockLogic();
|
||||
MultiblockLogic logic = (MultiblockLogic) part.getMultiblockLogic();
|
||||
logic.setController(null);
|
||||
this.onBlockRemoved(part);
|
||||
logic.forfeitMultiblockSaveDelegate();
|
||||
@@ -361,7 +361,7 @@ public abstract class MultiblockControllerBase implements IMultiblockControllerI
|
||||
}
|
||||
|
||||
connectedParts.add(acquiredPart);
|
||||
MultiblockLogic<?> logic = (MultiblockLogic<?>) acquiredPart.getMultiblockLogic();
|
||||
MultiblockLogic logic = (MultiblockLogic) acquiredPart.getMultiblockLogic();
|
||||
logic.setController(this);
|
||||
this.onBlockAdded(acquiredPart);
|
||||
}
|
||||
@@ -383,7 +383,7 @@ public abstract class MultiblockControllerBase implements IMultiblockControllerI
|
||||
.getTileEntity(referenceCoord.posX, referenceCoord.posY, referenceCoord.posZ);
|
||||
if (te instanceof IMultiblockComponent) {
|
||||
IMultiblockComponent part = (IMultiblockComponent) te;
|
||||
MultiblockLogic<?> logic = (MultiblockLogic<?>) part.getMultiblockLogic();
|
||||
MultiblockLogic logic = (MultiblockLogic) part.getMultiblockLogic();
|
||||
logic.forfeitMultiblockSaveDelegate();
|
||||
}
|
||||
}
|
||||
@@ -745,7 +745,7 @@ public abstract class MultiblockControllerBase implements IMultiblockControllerI
|
||||
continue;
|
||||
}
|
||||
|
||||
MultiblockLogic<?> logic = (MultiblockLogic<?>) part.getMultiblockLogic();
|
||||
MultiblockLogic logic = (MultiblockLogic) part.getMultiblockLogic();
|
||||
|
||||
logic.setUnvisited();
|
||||
logic.forfeitMultiblockSaveDelegate();
|
||||
@@ -769,7 +769,7 @@ public abstract class MultiblockControllerBase implements IMultiblockControllerI
|
||||
MultiblockRegistry.addDeadController(worldObj, this);
|
||||
return Collections.emptySet();
|
||||
} else {
|
||||
MultiblockLogic<?> logic = (MultiblockLogic<?>) referencePart.getMultiblockLogic();
|
||||
MultiblockLogic logic = (MultiblockLogic) referencePart.getMultiblockLogic();
|
||||
logic.becomeMultiblockSaveDelegate();
|
||||
}
|
||||
|
||||
@@ -781,7 +781,7 @@ public abstract class MultiblockControllerBase implements IMultiblockControllerI
|
||||
|
||||
while (!partsToCheck.isEmpty()) {
|
||||
part = partsToCheck.removeFirst();
|
||||
MultiblockLogic<?> partLogic = (MultiblockLogic<?>) part.getMultiblockLogic();
|
||||
MultiblockLogic partLogic = (MultiblockLogic) part.getMultiblockLogic();
|
||||
partLogic.setVisited();
|
||||
|
||||
List<IMultiblockComponent> nearbyParts = MultiblockUtil.getNeighboringParts(worldObj, part); // Chunk-safe
|
||||
@@ -790,7 +790,7 @@ public abstract class MultiblockControllerBase implements IMultiblockControllerI
|
||||
// client
|
||||
for (IMultiblockComponent nearbyPart : nearbyParts) {
|
||||
// Ignore different machines
|
||||
MultiblockLogic<?> nearbyPartLogic = (MultiblockLogic<?>) nearbyPart.getMultiblockLogic();
|
||||
MultiblockLogic nearbyPartLogic = (MultiblockLogic) nearbyPart.getMultiblockLogic();
|
||||
if (nearbyPartLogic.getController() != this) {
|
||||
continue;
|
||||
}
|
||||
@@ -805,7 +805,7 @@ public abstract class MultiblockControllerBase implements IMultiblockControllerI
|
||||
// Finally, remove all parts that remain disconnected.
|
||||
Set<IMultiblockComponent> removedParts = new HashSet<>();
|
||||
for (IMultiblockComponent orphanCandidate : connectedParts) {
|
||||
MultiblockLogic<?> logic = (MultiblockLogic<?>) orphanCandidate.getMultiblockLogic();
|
||||
MultiblockLogic logic = (MultiblockLogic) orphanCandidate.getMultiblockLogic();
|
||||
if (!logic.isVisited()) {
|
||||
deadParts.add(orphanCandidate);
|
||||
onDetachBlock(orphanCandidate);
|
||||
@@ -877,7 +877,7 @@ public abstract class MultiblockControllerBase implements IMultiblockControllerI
|
||||
}
|
||||
|
||||
if (theChosenOne != null) {
|
||||
MultiblockLogic<?> logic = (MultiblockLogic<?>) theChosenOne.getMultiblockLogic();
|
||||
MultiblockLogic logic = (MultiblockLogic) theChosenOne.getMultiblockLogic();
|
||||
logic.becomeMultiblockSaveDelegate();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,8 +8,6 @@ package forestry.core.multiblock;
|
||||
*/
|
||||
public class MultiblockValidationException extends Exception {
|
||||
|
||||
private static final long serialVersionUID = -3255564315819077747L;
|
||||
|
||||
public MultiblockValidationException(String reason) {
|
||||
super(reason);
|
||||
}
|
||||
|
||||
@@ -135,7 +135,7 @@ public class MultiblockWorldRegistry {
|
||||
if (compatibleControllers.size() == 0) {
|
||||
// FOREVER ALONE! Create and register a new controller.
|
||||
// THIS IS THE ONLY PLACE WHERE NEW CONTROLLERS ARE CREATED.
|
||||
MultiblockLogic<?> logic = (MultiblockLogic<?>) orphan.getMultiblockLogic();
|
||||
MultiblockLogic logic = (MultiblockLogic) orphan.getMultiblockLogic();
|
||||
IMultiblockControllerInternal newController = logic.createNewController(worldObj);
|
||||
newController.attachBlock(orphan);
|
||||
this.controllers.add(newController);
|
||||
@@ -263,7 +263,7 @@ public class MultiblockWorldRegistry {
|
||||
// list, and will be checked next tick to see if their chunk is still loaded.
|
||||
for (IMultiblockComponent part : detachedParts) {
|
||||
// Ensure parts know they're detached
|
||||
MultiblockLogic<?> logic = (MultiblockLogic<?>) part.getMultiblockLogic();
|
||||
MultiblockLogic logic = (MultiblockLogic) part.getMultiblockLogic();
|
||||
logic.assertDetached(part);
|
||||
}
|
||||
|
||||
@@ -276,7 +276,7 @@ public class MultiblockWorldRegistry {
|
||||
Set<IMultiblockControllerInternal> controllers = new HashSet<>();
|
||||
IMultiblockControllerInternal bestController = null;
|
||||
|
||||
MultiblockLogic<?> logic = (MultiblockLogic<?>) part.getMultiblockLogic();
|
||||
MultiblockLogic logic = (MultiblockLogic) part.getMultiblockLogic();
|
||||
Class<?> controllerClass = logic.getControllerClass();
|
||||
// Look for a compatible controller in our neighboring parts.
|
||||
List<IMultiblockComponent> partsToCheck = MultiblockUtil.getNeighboringParts(worldObj, part);
|
||||
@@ -367,7 +367,7 @@ public class MultiblockWorldRegistry {
|
||||
}
|
||||
}
|
||||
|
||||
MultiblockLogic<?> logic = (MultiblockLogic<?>) part.getMultiblockLogic();
|
||||
MultiblockLogic logic = (MultiblockLogic) part.getMultiblockLogic();
|
||||
logic.assertDetached(part);
|
||||
}
|
||||
|
||||
|
||||
@@ -75,7 +75,7 @@ public class DataInputStreamForestry extends DataInputStream {
|
||||
public <T extends IStreamable> T readStreamable(Class<T> streamableClass) throws IOException {
|
||||
if (readBoolean()) {
|
||||
try {
|
||||
T streamable = streamableClass.getConstructor().newInstance();
|
||||
T streamable = streamableClass.newInstance();
|
||||
streamable.readData(this);
|
||||
return streamable;
|
||||
} catch (ReflectiveOperationException e) {
|
||||
|
||||
@@ -46,7 +46,7 @@ public class PacketGuiEnergy extends ForestryPacket implements IForestryPacketCl
|
||||
@Override
|
||||
public void onPacketData(DataInputStreamForestry data, EntityPlayer player) throws IOException {
|
||||
if (player.openContainer instanceof ContainerTile && player.openContainer.windowId == windowId) {
|
||||
((ContainerTile<?>) player.openContainer).onGuiEnergy(value);
|
||||
((ContainerTile) player.openContainer).onGuiEnergy(value);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -34,7 +34,7 @@ import forestry.factory.inventory.InventoryCraftingForestry;
|
||||
|
||||
public abstract class RecipeUtil {
|
||||
|
||||
static List<IRecipe> cachedRecipes = new ArrayList<>();
|
||||
static List<Object> cachedRecipes = new ArrayList<Object>();
|
||||
|
||||
public static void addFermenterRecipes(ItemStack resource, int fermentationValue, Fluids output) {
|
||||
if (RecipeManagers.fermenterManager == null) {
|
||||
@@ -183,14 +183,15 @@ public abstract class RecipeUtil {
|
||||
}
|
||||
|
||||
List<ItemStack> matchingRecipes = new ArrayList<>();
|
||||
List<Integer> matchingIndex = new ArrayList<>();
|
||||
List<IRecipe> matchingRecipeMap = new ArrayList<>();
|
||||
List<Integer> matchingIndex = new ArrayList();
|
||||
List<Object> matchingRecipeMap = new ArrayList();
|
||||
int index = 0;
|
||||
|
||||
if (Config.cacheWorktableRecipes) {
|
||||
// Check across the whole cached recipe map
|
||||
// Add each recipe to the matchingRecipes list
|
||||
for (IRecipe irecipe : cachedRecipes) {
|
||||
for (Object recipe : cachedRecipes) {
|
||||
IRecipe irecipe = (IRecipe) recipe;
|
||||
|
||||
if (irecipe.matches(inventory, world)) {
|
||||
ItemStack result = irecipe.getCraftingResult(inventory);
|
||||
@@ -205,7 +206,8 @@ public abstract class RecipeUtil {
|
||||
}
|
||||
}
|
||||
// Only do this if there were no cached recipes hit
|
||||
for (IRecipe irecipe : CraftingManager.getInstance().getRecipeList()) {
|
||||
for (Object recipe : CraftingManager.getInstance().getRecipeList()) {
|
||||
IRecipe irecipe = (IRecipe) recipe;
|
||||
|
||||
if (irecipe.matches(inventory, world)) {
|
||||
ItemStack result = irecipe.getCraftingResult(inventory);
|
||||
@@ -214,8 +216,8 @@ public abstract class RecipeUtil {
|
||||
if (Config.promoteWorktableRecipesToFrontOfGlobalRecipemap || Config.cacheWorktableRecipes) {
|
||||
// Add to the back of the list. That way when we cycle through the list
|
||||
// moving items to the front, the index locations for the following items doesn't change
|
||||
matchingRecipeMap.add(irecipe);
|
||||
matchingIndex.add(index);
|
||||
matchingRecipeMap.add(recipe);
|
||||
matchingIndex.add(new Integer(index));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -225,7 +227,7 @@ public abstract class RecipeUtil {
|
||||
if (Config.promoteWorktableRecipesToFrontOfGlobalRecipemap) {
|
||||
// Only move the recipes if the last one was beyond 500 in the recipeMap (in GTNH about 57k recipes)
|
||||
if (matchingIndex.get(matchingIndex.size() - 1) > 500) {
|
||||
List<IRecipe> recipeMap = CraftingManager.getInstance().getRecipeList();
|
||||
List recipeMap = CraftingManager.getInstance().getRecipeList();
|
||||
// System.out.println( "Highest recipe found at " + matchingIndex.get(matchingIndex.size()-1) + ",
|
||||
// moving " + matchingIndex.size() + " to front" );
|
||||
// System.out.println( "Size of recipe map " + recipeMap.size() );
|
||||
@@ -293,10 +295,12 @@ public abstract class RecipeUtil {
|
||||
addRecipe(new ItemStack(item), obj);
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public static void addRecipe(ItemStack itemstack, Object... obj) {
|
||||
CraftingManager.getInstance().getRecipeList().add(new ShapedRecipeCustom(itemstack, obj));
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public static void addPriorityRecipe(ItemStack itemStack, Object... obj) {
|
||||
CraftingManager.getInstance().getRecipeList().add(0, new ShapedRecipeCustom(itemStack, obj));
|
||||
}
|
||||
@@ -305,6 +309,7 @@ public abstract class RecipeUtil {
|
||||
addShapelessRecipe(new ItemStack(item), obj);
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public static void addShapelessRecipe(ItemStack itemstack, Object... obj) {
|
||||
CraftingManager.getInstance().getRecipeList().add(new ShapelessOreRecipe(itemstack, obj));
|
||||
}
|
||||
@@ -395,7 +400,7 @@ public abstract class RecipeUtil {
|
||||
} else if (recipeIngredient instanceof ItemStack) {
|
||||
return ItemStackUtil.isCraftingEquivalent((ItemStack) recipeIngredient, resource);
|
||||
} else if (recipeIngredient instanceof Iterable) {
|
||||
for (Object item : (Iterable<?>) recipeIngredient) {
|
||||
for (Object item : (Iterable) recipeIngredient) {
|
||||
if (checkIngredientMatch(item, resource)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -35,7 +35,7 @@ public class PositionedStackAdv extends PositionedStack {
|
||||
return new Rectangle(this.relx - 1, this.rely - 1, 18, 18);
|
||||
}
|
||||
|
||||
public List<String> handleTooltip(GuiRecipe<?> guiRecipe, List<String> currenttip) {
|
||||
public List<String> handleTooltip(GuiRecipe guiRecipe, List<String> currenttip) {
|
||||
if (!this.tooltip.isEmpty()) {
|
||||
for (String tip : this.tooltip) {
|
||||
currenttip.add(tip);
|
||||
|
||||
@@ -139,7 +139,7 @@ public abstract class RecipeHandlerBase extends TemplateRecipeHandler implements
|
||||
return currenttip;
|
||||
}
|
||||
|
||||
public List<String> provideTooltip(GuiRecipe<?> guiRecipe, List<String> currenttip, CachedBaseRecipe crecipe,
|
||||
public List<String> provideTooltip(GuiRecipe guiRecipe, List<String> currenttip, CachedBaseRecipe crecipe,
|
||||
Point relMouse) {
|
||||
if (crecipe.getFluidTanks() != null) {
|
||||
for (PositionedFluidTank tank : crecipe.getFluidTanks()) {
|
||||
@@ -151,7 +151,7 @@ public abstract class RecipeHandlerBase extends TemplateRecipeHandler implements
|
||||
return currenttip;
|
||||
}
|
||||
|
||||
public List<String> provideItemTooltip(GuiRecipe<?> guiRecipe, ItemStack itemStack, List<String> currenttip,
|
||||
public List<String> provideItemTooltip(GuiRecipe guiRecipe, ItemStack itemStack, List<String> currenttip,
|
||||
CachedBaseRecipe crecipe, Point relMouse) {
|
||||
for (PositionedStack stack : crecipe.getIngredients()) {
|
||||
if (stack instanceof PositionedStackAdv && ((PositionedStackAdv) stack).getRect().contains(relMouse)) {
|
||||
@@ -171,7 +171,7 @@ public abstract class RecipeHandlerBase extends TemplateRecipeHandler implements
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean keyTyped(GuiRecipe<?> gui, char keyChar, int keyCode, int recipe) {
|
||||
public boolean keyTyped(GuiRecipe gui, char keyChar, int keyCode, int recipe) {
|
||||
if (keyCode == NEIClientConfig.getKeyBinding("gui.recipe")) {
|
||||
if (this.transferFluidTank(gui, recipe, false)) {
|
||||
return true;
|
||||
@@ -185,7 +185,7 @@ public abstract class RecipeHandlerBase extends TemplateRecipeHandler implements
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean mouseClicked(GuiRecipe<?> gui, int button, int recipe) {
|
||||
public boolean mouseClicked(GuiRecipe gui, int button, int recipe) {
|
||||
if (button == 0) {
|
||||
if (this.transferFluidTank(gui, recipe, false)) {
|
||||
return true;
|
||||
@@ -198,7 +198,7 @@ public abstract class RecipeHandlerBase extends TemplateRecipeHandler implements
|
||||
return super.mouseClicked(gui, button, recipe);
|
||||
}
|
||||
|
||||
protected boolean transferFluidTank(GuiRecipe<?> guiRecipe, int recipe, boolean usage) {
|
||||
protected boolean transferFluidTank(GuiRecipe guiRecipe, int recipe, boolean usage) {
|
||||
CachedBaseRecipe crecipe = (CachedBaseRecipe) this.arecipes.get(recipe);
|
||||
Point mousepos = GuiDraw.getMousePosition();
|
||||
Point offset = guiRecipe.getRecipePosition(recipe);
|
||||
|
||||
@@ -14,15 +14,11 @@ import net.minecraft.block.Block;
|
||||
import net.minecraft.client.renderer.RenderBlocks;
|
||||
import net.minecraft.world.IBlockAccess;
|
||||
|
||||
import com.gtnewhorizons.angelica.api.ThreadSafeISBRH;
|
||||
|
||||
import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler;
|
||||
import forestry.core.proxy.Proxies;
|
||||
|
||||
@ThreadSafeISBRH(perThread = false)
|
||||
public class RenderBlock implements ISimpleBlockRenderingHandler {
|
||||
|
||||
// Seems to be set during registration - should be fine to not use a concurrent hashmap
|
||||
public static final HashMap<TileRendererIndex, IBlockRenderer> byBlockRenderer = new HashMap<>();
|
||||
|
||||
@Override
|
||||
|
||||
@@ -14,11 +14,8 @@ import net.minecraft.client.renderer.Tessellator;
|
||||
import net.minecraft.util.IIcon;
|
||||
import net.minecraft.world.IBlockAccess;
|
||||
|
||||
import com.gtnewhorizons.angelica.api.ThreadSafeISBRH;
|
||||
|
||||
import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler;
|
||||
|
||||
@ThreadSafeISBRH(perThread = false)
|
||||
public abstract class RenderOverlayBlock implements ISimpleBlockRenderingHandler {
|
||||
|
||||
protected static final double OVERLAY_SHIFT = 0.001;
|
||||
|
||||
@@ -31,7 +31,6 @@ import forestry.core.config.Constants;
|
||||
import forestry.core.tiles.TileEngine;
|
||||
import forestry.core.utils.vect.Vect;
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public abstract class BlockUtil {
|
||||
|
||||
private static final int slabWoodId = OreDictionary.getOreID("slabWood");
|
||||
|
||||
@@ -59,11 +59,13 @@ public abstract class EntityUtil {
|
||||
Log.finer("Registered entity %s (%s) with id %s.", ident, entityClass.toString(), id);
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public static <T extends Entity> List<T> getEntitiesWithinAABB(World world, Class<T> entityClass,
|
||||
AxisAlignedBB boundingBox) {
|
||||
return world.getEntitiesWithinAABB(entityClass, boundingBox);
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public static <T extends Entity> List<T> selectEntitiesWithinAABB(World world, EntitySelector<T> entitySelector,
|
||||
AxisAlignedBB boundingBox) {
|
||||
return world.selectEntitiesWithinAABB(entitySelector.getEntityClass(), boundingBox, entitySelector);
|
||||
|
||||
@@ -123,7 +123,7 @@ public abstract class Log {
|
||||
LogManager.getLogger(Constants.MOD).log(level, new MessageFormatMessage(msg, args), error);
|
||||
}
|
||||
|
||||
public static void logErrorAPI(String mod, Throwable error, Class<?> classFile) {
|
||||
public static void logErrorAPI(String mod, Throwable error, Class classFile) {
|
||||
StringBuilder msg = new StringBuilder(mod);
|
||||
msg.append(" API error, please update your mods. Error: ").append(error);
|
||||
logThrowable(Level.ERROR, msg.toString(), 2, error);
|
||||
|
||||
@@ -62,8 +62,8 @@ public abstract class SlotUtil {
|
||||
return stack;
|
||||
}
|
||||
|
||||
public static ItemStack transferStackInSlot(List<Slot> inventorySlots, EntityPlayer player, int slotIndex) {
|
||||
Slot slot = inventorySlots.get(slotIndex);
|
||||
public static ItemStack transferStackInSlot(List inventorySlots, EntityPlayer player, int slotIndex) {
|
||||
Slot slot = (Slot) inventorySlots.get(slotIndex);
|
||||
if (slot == null || !slot.getHasStack()) {
|
||||
return null;
|
||||
}
|
||||
@@ -93,7 +93,7 @@ public abstract class SlotUtil {
|
||||
return originalStack;
|
||||
}
|
||||
|
||||
private static boolean shiftItemStack(List<Slot> inventorySlots, ItemStack stackInSlot, int slotIndex, int numSlots,
|
||||
private static boolean shiftItemStack(List inventorySlots, ItemStack stackInSlot, int slotIndex, int numSlots,
|
||||
boolean fromCraftingSlot) {
|
||||
if (isInPlayerInventory(slotIndex)) {
|
||||
if (shiftToMachineInventory(inventorySlots, stackInSlot, numSlots)) {
|
||||
@@ -160,14 +160,13 @@ public abstract class SlotUtil {
|
||||
slot.putStack(phantomStack);
|
||||
}
|
||||
|
||||
private static boolean shiftItemStackToRange(List<Slot> inventorySlots, ItemStack stackToShift, int start,
|
||||
int count) {
|
||||
private static boolean shiftItemStackToRange(List inventorySlots, ItemStack stackToShift, int start, int count) {
|
||||
boolean changed = shiftItemStackToRangeMerge(inventorySlots, stackToShift, start, count);
|
||||
changed |= shiftItemStackToRangeOpenSlots(inventorySlots, stackToShift, start, count);
|
||||
return changed;
|
||||
}
|
||||
|
||||
private static boolean shiftItemStackToRangeMerge(List<Slot> inventorySlots, ItemStack stackToShift, int start,
|
||||
private static boolean shiftItemStackToRangeMerge(List inventorySlots, ItemStack stackToShift, int start,
|
||||
int count) {
|
||||
if (stackToShift == null || !stackToShift.isStackable() || stackToShift.stackSize <= 0) {
|
||||
return false;
|
||||
@@ -175,7 +174,7 @@ public abstract class SlotUtil {
|
||||
|
||||
boolean changed = false;
|
||||
for (int slotIndex = start; stackToShift.stackSize > 0 && slotIndex < start + count; slotIndex++) {
|
||||
Slot slot = inventorySlots.get(slotIndex);
|
||||
Slot slot = (Slot) inventorySlots.get(slotIndex);
|
||||
ItemStack stackInSlot = slot.getStack();
|
||||
if (stackInSlot != null && ItemStackUtil.isIdenticalItem(stackInSlot, stackToShift)) {
|
||||
int resultingStackSize = stackInSlot.stackSize + stackToShift.stackSize;
|
||||
@@ -196,7 +195,7 @@ public abstract class SlotUtil {
|
||||
return changed;
|
||||
}
|
||||
|
||||
private static boolean shiftItemStackToRangeOpenSlots(List<Slot> inventorySlots, ItemStack stackToShift, int start,
|
||||
private static boolean shiftItemStackToRangeOpenSlots(List inventorySlots, ItemStack stackToShift, int start,
|
||||
int count) {
|
||||
if (stackToShift == null || stackToShift.stackSize <= 0) {
|
||||
return false;
|
||||
@@ -204,7 +203,7 @@ public abstract class SlotUtil {
|
||||
|
||||
boolean changed = false;
|
||||
for (int slotIndex = start; stackToShift.stackSize > 0 && slotIndex < start + count; slotIndex++) {
|
||||
Slot slot = inventorySlots.get(slotIndex);
|
||||
Slot slot = (Slot) inventorySlots.get(slotIndex);
|
||||
ItemStack stackInSlot = slot.getStack();
|
||||
if (stackInSlot == null) {
|
||||
int max = Math.min(stackToShift.getMaxStackSize(), slot.getSlotStackLimit());
|
||||
@@ -230,7 +229,7 @@ public abstract class SlotUtil {
|
||||
return SlotUtil.isSlotInRange(slotIndex, playerInventorySize - playerHotbarSize, playerInventorySize);
|
||||
}
|
||||
|
||||
private static boolean shiftToPlayerInventory(List<Slot> inventorySlots, ItemStack stackInSlot) {
|
||||
private static boolean shiftToPlayerInventory(List inventorySlots, ItemStack stackInSlot) {
|
||||
int playerHotbarStart = playerInventorySize - playerHotbarSize;
|
||||
|
||||
// try to merge with existing stacks, hotbar first
|
||||
@@ -243,17 +242,17 @@ public abstract class SlotUtil {
|
||||
return shifted;
|
||||
}
|
||||
|
||||
private static boolean shiftToPlayerInventoryNoHotbar(List<Slot> inventorySlots, ItemStack stackInSlot) {
|
||||
private static boolean shiftToPlayerInventoryNoHotbar(List inventorySlots, ItemStack stackInSlot) {
|
||||
int playerHotbarStart = playerInventorySize - playerHotbarSize;
|
||||
return shiftItemStackToRange(inventorySlots, stackInSlot, 0, playerHotbarStart);
|
||||
}
|
||||
|
||||
private static boolean shiftToHotbar(List<Slot> inventorySlots, ItemStack stackInSlot) {
|
||||
private static boolean shiftToHotbar(List inventorySlots, ItemStack stackInSlot) {
|
||||
int playerHotbarStart = playerInventorySize - playerHotbarSize;
|
||||
return shiftItemStackToRange(inventorySlots, stackInSlot, playerHotbarStart, playerHotbarSize);
|
||||
}
|
||||
|
||||
private static boolean shiftToMachineInventory(List<Slot> inventorySlots, ItemStack stackToShift, int numSlots) {
|
||||
private static boolean shiftToMachineInventory(List inventorySlots, ItemStack stackToShift, int numSlots) {
|
||||
boolean success = false;
|
||||
if (stackToShift.isStackable()) {
|
||||
success = shiftToMachineInventory(inventorySlots, stackToShift, numSlots, true);
|
||||
@@ -265,7 +264,7 @@ public abstract class SlotUtil {
|
||||
}
|
||||
|
||||
// if mergeOnly = true, don't shift into empty slots.
|
||||
private static boolean shiftToMachineInventory(List<Slot> inventorySlots, ItemStack stackToShift, int numSlots,
|
||||
private static boolean shiftToMachineInventory(List inventorySlots, ItemStack stackToShift, int numSlots,
|
||||
boolean mergeOnly) {
|
||||
for (int machineIndex = playerInventorySize; machineIndex < numSlots; machineIndex++) {
|
||||
// System.out.println("SlotUtil::shiftToMachineinventory");
|
||||
|
||||
@@ -16,7 +16,7 @@ import forestry.api.farming.FarmDirection;
|
||||
/**
|
||||
* Represents a position or dimensions.
|
||||
*/
|
||||
public interface IVect extends Comparable<IVect> {
|
||||
public interface IVect {
|
||||
|
||||
int getX();
|
||||
|
||||
@@ -34,32 +34,5 @@ public interface IVect extends Comparable<IVect> {
|
||||
|
||||
IVect add(ChunkCoordinates coordinates);
|
||||
|
||||
IVect multiply(int factor);
|
||||
|
||||
IVect multiply(float factor);
|
||||
|
||||
int[] toArray();
|
||||
|
||||
Vect asImmutable();
|
||||
|
||||
MutableVect asMutable();
|
||||
|
||||
// NOTE: All classes implementing this must implement the same hashCode and equals methods as Vect
|
||||
int hashCode();
|
||||
|
||||
boolean equals(Object obj);
|
||||
|
||||
default int compareTo(IVect other) {
|
||||
int x = this.getX() - other.getX();
|
||||
if (x != 0) {
|
||||
return x;
|
||||
}
|
||||
|
||||
int y = this.getY() - other.getY();
|
||||
if (y != 0) {
|
||||
return y;
|
||||
}
|
||||
|
||||
return this.getZ() - other.getZ();
|
||||
}
|
||||
}
|
||||
@@ -22,10 +22,6 @@ public class MutableVect implements IVect {
|
||||
public int y;
|
||||
public int z;
|
||||
|
||||
public MutableVect() {
|
||||
this(0, 0, 0);
|
||||
}
|
||||
|
||||
public MutableVect(int x, int y, int z) {
|
||||
this.x = x;
|
||||
this.y = y;
|
||||
@@ -100,16 +96,7 @@ public class MutableVect implements IVect {
|
||||
return new int[] { x, y, z };
|
||||
}
|
||||
|
||||
@Override
|
||||
public MutableVect multiply(float factor) {
|
||||
this.x = Math.round(x * factor);
|
||||
this.y = Math.round(y * factor);
|
||||
this.z = Math.round(z * factor);
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public IVect multiply(int factor) {
|
||||
this.x *= factor;
|
||||
this.y *= factor;
|
||||
this.z *= factor;
|
||||
@@ -153,82 +140,4 @@ public class MutableVect implements IVect {
|
||||
public int getZ() {
|
||||
return z;
|
||||
}
|
||||
|
||||
public MutableVect setX(int x) {
|
||||
this.x = x;
|
||||
return this;
|
||||
}
|
||||
|
||||
public MutableVect setY(int y) {
|
||||
this.y = y;
|
||||
return this;
|
||||
}
|
||||
|
||||
public MutableVect setZ(int z) {
|
||||
this.z = z;
|
||||
return this;
|
||||
}
|
||||
|
||||
public MutableVect set(int x, int y, int z) {
|
||||
this.x = x;
|
||||
this.y = y;
|
||||
this.z = z;
|
||||
return this;
|
||||
}
|
||||
|
||||
public MutableVect set(IVect vect) {
|
||||
this.x = vect.getX();
|
||||
this.y = vect.getY();
|
||||
this.z = vect.getZ();
|
||||
return this;
|
||||
}
|
||||
|
||||
public MutableVect set(ChunkCoordinates coordinates) {
|
||||
this.x = coordinates.posX;
|
||||
this.y = coordinates.posY;
|
||||
this.z = coordinates.posZ;
|
||||
return this;
|
||||
}
|
||||
|
||||
public MutableVect set(ForgeDirection direction) {
|
||||
this.x = direction.offsetX;
|
||||
this.y = direction.offsetY;
|
||||
this.z = direction.offsetZ;
|
||||
return this;
|
||||
}
|
||||
|
||||
public MutableVect set(FarmDirection direction) {
|
||||
return set(direction.getForgeDirection());
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
final int prime = 31;
|
||||
int result = 1;
|
||||
result = prime * result + x;
|
||||
result = prime * result + y;
|
||||
result = prime * result + z;
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
if (this == obj) {
|
||||
return true;
|
||||
}
|
||||
if (obj instanceof IVect other) {
|
||||
return x == other.getX() && y == other.getY() && z == other.getZ();
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Vect asImmutable() {
|
||||
return new Vect(x, y, z);
|
||||
}
|
||||
|
||||
@Override
|
||||
public MutableVect asMutable() {
|
||||
return this;
|
||||
}
|
||||
}
|
||||
@@ -121,12 +121,10 @@ public class Vect implements IVect {
|
||||
return new int[] { x, y, z };
|
||||
}
|
||||
|
||||
@Override
|
||||
public Vect multiply(int factor) {
|
||||
return new Vect(x * factor, y * factor, z * factor);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Vect multiply(float factor) {
|
||||
return new Vect(Math.round(x * factor), Math.round(y * factor), Math.round(z * factor));
|
||||
}
|
||||
@@ -151,10 +149,11 @@ public class Vect implements IVect {
|
||||
if (this == obj) {
|
||||
return true;
|
||||
}
|
||||
if ((obj instanceof IVect other)) {
|
||||
return (x == other.getX()) && (y == other.getY()) && (z == other.getZ());
|
||||
if (!(obj instanceof Vect)) {
|
||||
return false;
|
||||
}
|
||||
return false;
|
||||
Vect other = (Vect) obj;
|
||||
return (x == other.x) && (y == other.y) && (z == other.z);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -171,15 +170,4 @@ public class Vect implements IVect {
|
||||
public int getZ() {
|
||||
return z;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Vect asImmutable() {
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public MutableVect asMutable() {
|
||||
return new MutableVect(this);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -51,9 +51,8 @@ public class EnergyManager implements IEnergyHandler, IStreamable {
|
||||
case EXTRACT:
|
||||
case BOTH:
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private boolean canReceive() {
|
||||
@@ -61,9 +60,8 @@ public class EnergyManager implements IEnergyHandler, IStreamable {
|
||||
case RECEIVE:
|
||||
case BOTH:
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/* NBT */
|
||||
|
||||
@@ -67,7 +67,8 @@ public class BlockEngine extends BlockBase<BlockEngineType> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addCollisionBoxesToList(World world, int x, int y, int z, AxisAlignedBB mask, List<AxisAlignedBB> list,
|
||||
@SuppressWarnings("unchecked")
|
||||
public void addCollisionBoxesToList(World world, int x, int y, int z, AxisAlignedBB mask, List list,
|
||||
Entity colliding) {
|
||||
TileEngine tile = TileUtil.getTile(world, x, y, z, TileEngine.class);
|
||||
if (tile == null) {
|
||||
|
||||
@@ -32,6 +32,7 @@ public class ContainerEngineBiogas extends ContainerLiquidTanks<TileEngineBiogas
|
||||
}
|
||||
|
||||
@Override
|
||||
@SuppressWarnings("unchecked")
|
||||
public void detectAndSendChanges() {
|
||||
super.detectAndSendChanges();
|
||||
|
||||
|
||||
@@ -32,6 +32,7 @@ public class ContainerGenerator extends ContainerLiquidTanks<TileGenerator> {
|
||||
}
|
||||
|
||||
@Override
|
||||
@SuppressWarnings("unchecked")
|
||||
public void detectAndSendChanges() {
|
||||
super.detectAndSendChanges();
|
||||
|
||||
|
||||
@@ -69,6 +69,7 @@ public class ContainerFabricator extends ContainerLiquidTanks<TileFabricator> im
|
||||
}
|
||||
|
||||
@Override
|
||||
@SuppressWarnings("unchecked")
|
||||
public void detectAndSendChanges() {
|
||||
super.detectAndSendChanges();
|
||||
|
||||
|
||||
@@ -37,6 +37,7 @@ public class ContainerFermenter extends ContainerLiquidTanks<TileFermenter> {
|
||||
}
|
||||
|
||||
@Override
|
||||
@SuppressWarnings("unchecked")
|
||||
public void detectAndSendChanges() {
|
||||
super.detectAndSendChanges();
|
||||
|
||||
|
||||
@@ -58,6 +58,7 @@ public class ContainerMoistener extends ContainerLiquidTanks<TileMoistener> impl
|
||||
}
|
||||
|
||||
@Override
|
||||
@SuppressWarnings("unchecked")
|
||||
public void detectAndSendChanges() {
|
||||
super.detectAndSendChanges();
|
||||
|
||||
|
||||
@@ -34,6 +34,7 @@ public class ContainerRaintank extends ContainerLiquidTanks<TileRaintank> {
|
||||
}
|
||||
|
||||
@Override
|
||||
@SuppressWarnings("unchecked")
|
||||
public void detectAndSendChanges() {
|
||||
super.detectAndSendChanges();
|
||||
|
||||
|
||||
@@ -111,6 +111,7 @@ public class GuiWorktable extends GuiForestryTitled<ContainerWorktable, TileWork
|
||||
GL11.glEnable(GL11.GL_LIGHTING);
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
private void addButtons() {
|
||||
buttonList.add(new GuiBetterButton(0, guiLeft + 76, guiTop + 56, StandardButtonTextureSets.LEFT_BUTTON_SMALL));
|
||||
buttonList.add(new GuiBetterButton(1, guiLeft + 85, guiTop + 56, StandardButtonTextureSets.RIGHT_BUTTON_SMALL));
|
||||
|
||||
@@ -32,17 +32,17 @@ public class CarpenterRecipeManager implements ICarpenterManager {
|
||||
private static final Set<Fluid> recipeFluids = new HashSet<>();
|
||||
|
||||
@Override
|
||||
public void addRecipe(ItemStack box, ItemStack product, Object... materials) {
|
||||
public void addRecipe(ItemStack box, ItemStack product, Object materials[]) {
|
||||
addRecipe(5, null, box, product, materials);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addRecipe(int packagingTime, ItemStack box, ItemStack product, Object... materials) {
|
||||
public void addRecipe(int packagingTime, ItemStack box, ItemStack product, Object materials[]) {
|
||||
addRecipe(packagingTime, null, box, product, materials);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addRecipe(int packagingTime, FluidStack liquid, ItemStack box, ItemStack product, Object... materials) {
|
||||
public void addRecipe(int packagingTime, FluidStack liquid, ItemStack box, ItemStack product, Object materials[]) {
|
||||
ICarpenterRecipe recipe = new CarpenterRecipe(
|
||||
packagingTime,
|
||||
liquid,
|
||||
|
||||
@@ -85,7 +85,7 @@ public class NEIHandlerCarpenter extends RecipeHandlerBase {
|
||||
continue;
|
||||
} else if (item instanceof ItemStack[] && ((ItemStack[]) item).length == 0) {
|
||||
continue;
|
||||
} else if (item instanceof List && ((List<?>) item).size() == 0) {
|
||||
} else if (item instanceof List && ((List) item).size() == 0) {
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
@@ -85,7 +85,7 @@ public class NEIHandlerFabricator extends RecipeHandlerBase {
|
||||
continue;
|
||||
} else if (item instanceof ItemStack[] && ((ItemStack[]) item).length == 0) {
|
||||
continue;
|
||||
} else if (item instanceof List && ((List<?>) item).size() == 0) {
|
||||
} else if (item instanceof List && ((List) item).size() == 0) {
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -199,7 +199,7 @@ public class NEIHandlerFabricator extends RecipeHandlerBase {
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> provideItemTooltip(GuiRecipe<?> guiRecipe, ItemStack itemStack, List<String> currenttip,
|
||||
public List<String> provideItemTooltip(GuiRecipe guiRecipe, ItemStack itemStack, List<String> currenttip,
|
||||
CachedBaseRecipe crecipe, Point relMouse) {
|
||||
super.provideItemTooltip(guiRecipe, itemStack, currenttip, crecipe, relMouse);
|
||||
|
||||
|
||||
@@ -56,7 +56,7 @@ public class TileCarpenter extends TilePowered
|
||||
|
||||
private final FilteredTank resourceTank;
|
||||
private final TankManager tankManager;
|
||||
private final InventoryAdapterTile<?> craftingInventory;
|
||||
private final InventoryAdapterTile craftingInventory;
|
||||
private final InventoryCraftResult craftPreviewInventory;
|
||||
|
||||
@Nullable
|
||||
|
||||
@@ -56,7 +56,7 @@ public class TileFabricator extends TilePowered
|
||||
|
||||
private static final int MAX_HEAT = 5000;
|
||||
|
||||
private final InventoryAdapterTile<?> craftingInventory;
|
||||
private final InventoryAdapterTile craftingInventory;
|
||||
private final TankManager tankManager;
|
||||
private final FilteredTank moltenTank;
|
||||
private int heat = 0;
|
||||
|
||||
@@ -38,7 +38,7 @@ import forestry.factory.recipes.RecipeMemory;
|
||||
public class TileWorktable extends TileBase implements ICrafterWorktable {
|
||||
|
||||
private final RecipeMemory recipeMemory;
|
||||
private final InventoryAdapterTile<?> craftingDisplay;
|
||||
private final InventoryAdapterTile craftingDisplay;
|
||||
private MemorizedRecipe currentRecipe;
|
||||
private long savedTick = 0;
|
||||
private long savedSystemTimeExpiration = 0;
|
||||
|
||||
@@ -71,7 +71,6 @@ public class BlockFarm extends BlockStructure {
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
@Override
|
||||
public ItemStack getPickBlock(MovingObjectPosition target, World world, int x, int y, int z) {
|
||||
ArrayList<ItemStack> drops = getDrops(world, x, y, z, 0, 0);
|
||||
|
||||
@@ -42,6 +42,7 @@ public class CircuitFarmLogic extends Circuit {
|
||||
}
|
||||
|
||||
@Override
|
||||
@SuppressWarnings("rawtypes")
|
||||
public void onInsertion(int slot, Object tile) {
|
||||
IFarmHousing housing = getCircuitable(tile);
|
||||
if (housing == null) {
|
||||
|
||||
@@ -16,7 +16,6 @@ import net.minecraft.world.World;
|
||||
|
||||
import forestry.api.farming.ICrop;
|
||||
import forestry.core.config.Constants;
|
||||
import forestry.core.utils.vect.IVect;
|
||||
import forestry.core.utils.vect.Vect;
|
||||
|
||||
public abstract class Crop implements ICrop {
|
||||
@@ -29,21 +28,21 @@ public abstract class Crop implements ICrop {
|
||||
this.position = position;
|
||||
}
|
||||
|
||||
protected final void setBlock(IVect position, Block block, int meta) {
|
||||
world.setBlock(position.getX(), position.getY(), position.getZ(), block, meta, Constants.FLAG_BLOCK_SYNCH);
|
||||
protected final void setBlock(Vect position, Block block, int meta) {
|
||||
world.setBlock(position.x, position.y, position.z, block, meta, Constants.FLAG_BLOCK_SYNCH);
|
||||
}
|
||||
|
||||
protected final Block getBlock(IVect position) {
|
||||
return world.getBlock(position.getX(), position.getY(), position.getZ());
|
||||
protected final Block getBlock(Vect position) {
|
||||
return world.getBlock(position.x, position.y, position.z);
|
||||
}
|
||||
|
||||
protected final int getBlockMeta(IVect position) {
|
||||
return world.getBlockMetadata(position.getX(), position.getY(), position.getZ());
|
||||
protected final int getBlockMeta(Vect position) {
|
||||
return world.getBlockMetadata(position.x, position.y, position.z);
|
||||
}
|
||||
|
||||
protected abstract boolean isCrop(IVect pos);
|
||||
protected abstract boolean isCrop(Vect pos);
|
||||
|
||||
protected abstract Collection<ItemStack> harvestBlock(IVect pos);
|
||||
protected abstract Collection<ItemStack> harvestBlock(Vect pos);
|
||||
|
||||
@Override
|
||||
public Collection<ItemStack> harvest() {
|
||||
|
||||
@@ -19,7 +19,6 @@ import net.minecraft.world.World;
|
||||
|
||||
import forestry.core.config.Constants;
|
||||
import forestry.core.proxy.Proxies;
|
||||
import forestry.core.utils.vect.IVect;
|
||||
import forestry.core.utils.vect.Vect;
|
||||
|
||||
public class CropBasicAgriCraft extends Crop {
|
||||
@@ -34,21 +33,21 @@ public class CropBasicAgriCraft extends Crop {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean isCrop(IVect pos) {
|
||||
protected boolean isCrop(Vect pos) {
|
||||
return getBlock(pos) == block && getBlockMeta(pos) == meta;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Collection<ItemStack> harvestBlock(IVect pos) {
|
||||
ArrayList<ItemStack> harvest = block.getDrops(world, pos.getX(), pos.getY(), pos.getZ(), meta, 0);
|
||||
protected Collection<ItemStack> harvestBlock(Vect pos) {
|
||||
ArrayList<ItemStack> harvest = block.getDrops(world, pos.x, pos.y, pos.z, meta, 0);
|
||||
if (harvest.size() > 1) {
|
||||
harvest.remove(1); // AgriCraft returns cropsticks in 0, seeds in 1 in getDrops, removing since harvesting
|
||||
// doesn't
|
||||
// return them.
|
||||
}
|
||||
harvest.remove(0);
|
||||
Proxies.common.addBlockDestroyEffects(world, pos.getX(), pos.getY(), pos.getZ(), Blocks.melon_block, 0);
|
||||
world.setBlockMetadataWithNotify(pos.getX(), pos.getY(), pos.getZ(), 0, Constants.FLAG_BLOCK_SYNCH);
|
||||
Proxies.common.addBlockDestroyEffects(world, pos.x, pos.y, pos.z, Blocks.melon_block, 0);
|
||||
world.setBlockMetadataWithNotify(pos.x, pos.y, pos.z, 0, Constants.FLAG_BLOCK_SYNCH);
|
||||
harvest.removeAll(Collections.singleton(null)); // sanatize nulls that get thru from Agricraft+Harvestcraft
|
||||
// (sesameseed)
|
||||
return harvest;
|
||||
|
||||
@@ -16,7 +16,6 @@ import net.minecraft.world.World;
|
||||
|
||||
import forestry.core.config.Constants;
|
||||
import forestry.core.proxy.Proxies;
|
||||
import forestry.core.utils.vect.IVect;
|
||||
import forestry.core.utils.vect.Vect;
|
||||
|
||||
public class CropBasicFruit extends Crop {
|
||||
@@ -31,15 +30,15 @@ public class CropBasicFruit extends Crop {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean isCrop(IVect pos) {
|
||||
protected boolean isCrop(Vect pos) {
|
||||
return getBlock(pos) == block && getBlockMeta(pos) == meta;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Collection<ItemStack> harvestBlock(IVect pos) {
|
||||
Collection<ItemStack> harvested = block.getDrops(world, pos.getX(), pos.getY(), pos.getZ(), meta, 0);
|
||||
Proxies.common.addBlockDestroyEffects(world, pos.getX(), pos.getY(), pos.getZ(), block, 0);
|
||||
world.setBlock(pos.getX(), pos.getY(), pos.getZ(), block, 0, Constants.FLAG_BLOCK_SYNCH);
|
||||
protected Collection<ItemStack> harvestBlock(Vect pos) {
|
||||
Collection<ItemStack> harvested = block.getDrops(world, pos.x, pos.y, pos.z, meta, 0);
|
||||
Proxies.common.addBlockDestroyEffects(world, pos.x, pos.y, pos.z, block, 0);
|
||||
world.setBlock(pos.x, pos.y, pos.z, block, 0, Constants.FLAG_BLOCK_SYNCH);
|
||||
return harvested;
|
||||
}
|
||||
|
||||
|
||||
@@ -17,7 +17,6 @@ import net.minecraft.world.World;
|
||||
|
||||
import forestry.core.config.Constants;
|
||||
import forestry.core.proxy.Proxies;
|
||||
import forestry.core.utils.vect.IVect;
|
||||
import forestry.core.utils.vect.Vect;
|
||||
|
||||
public class CropBasicGrowthCraft extends Crop {
|
||||
@@ -36,26 +35,26 @@ public class CropBasicGrowthCraft extends Crop {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean isCrop(IVect pos) {
|
||||
protected boolean isCrop(Vect pos) {
|
||||
return getBlock(pos) == block && getBlockMeta(pos) == meta;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Collection<ItemStack> harvestBlock(IVect pos) {
|
||||
ArrayList<ItemStack> harvest = block.getDrops(world, pos.getX(), pos.getY(), pos.getZ(), meta, 0);
|
||||
protected Collection<ItemStack> harvestBlock(Vect pos) {
|
||||
ArrayList<ItemStack> harvest = block.getDrops(world, pos.x, pos.y, pos.z, meta, 0);
|
||||
if (harvest.size() > 1) {
|
||||
harvest.remove(0); // Hops have rope as first drop.
|
||||
}
|
||||
Proxies.common.addBlockDestroyEffects(world, pos.getX(), pos.getY(), pos.getZ(), block, 0);
|
||||
Proxies.common.addBlockDestroyEffects(world, pos.x, pos.y, pos.z, block, 0);
|
||||
if (isGrape) {
|
||||
world.setBlockToAir(pos.getX(), pos.getY(), pos.getZ());
|
||||
world.setBlockToAir(pos.x, pos.y, pos.z);
|
||||
|
||||
} else {
|
||||
world.setBlockMetadataWithNotify(pos.getX(), pos.getY(), pos.getZ(), 0, Constants.FLAG_BLOCK_SYNCH);
|
||||
world.setBlockMetadataWithNotify(pos.x, pos.y, pos.z, 0, Constants.FLAG_BLOCK_SYNCH);
|
||||
}
|
||||
|
||||
if (isRice) {
|
||||
world.setBlockMetadataWithNotify(pos.getX(), pos.getY() - 1, pos.getZ(), 7, Constants.FLAG_BLOCK_SYNCH);
|
||||
world.setBlockMetadataWithNotify(pos.x, pos.y - 1, pos.z, 7, Constants.FLAG_BLOCK_SYNCH);
|
||||
}
|
||||
|
||||
return harvest;
|
||||
|
||||
@@ -6,7 +6,6 @@ import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
import forestry.core.utils.vect.IVect;
|
||||
import forestry.core.utils.vect.Vect;
|
||||
import forestry.plugins.compat.PluginIC2;
|
||||
|
||||
@@ -20,12 +19,12 @@ public class CropBasicIC2Crop extends Crop {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean isCrop(IVect pos) {
|
||||
protected boolean isCrop(Vect pos) {
|
||||
return PluginIC2.instance.canHarvestCrop(this.tileEntity);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Collection<ItemStack> harvestBlock(IVect pos) {
|
||||
protected Collection<ItemStack> harvestBlock(Vect pos) {
|
||||
return PluginIC2.instance.getCropDrops(this.tileEntity);
|
||||
}
|
||||
}
|
||||
@@ -15,7 +15,6 @@ import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
import forestry.core.proxy.Proxies;
|
||||
import forestry.core.utils.vect.IVect;
|
||||
import forestry.core.utils.vect.Vect;
|
||||
|
||||
public class CropBlock extends Crop {
|
||||
@@ -30,16 +29,16 @@ public class CropBlock extends Crop {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean isCrop(IVect pos) {
|
||||
protected boolean isCrop(Vect pos) {
|
||||
return getBlock(pos) == block && getBlockMeta(pos) == meta;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Collection<ItemStack> harvestBlock(IVect pos) {
|
||||
Collection<ItemStack> harvested = block.getDrops(world, pos.getX(), pos.getY(), pos.getZ(), meta, 0);
|
||||
Proxies.common.addBlockDestroyEffects(world, pos.getX(), pos.getY(), pos.getZ(), block, 0);
|
||||
protected Collection<ItemStack> harvestBlock(Vect pos) {
|
||||
Collection<ItemStack> harvested = block.getDrops(world, pos.x, pos.y, pos.z, meta, 0);
|
||||
Proxies.common.addBlockDestroyEffects(world, pos.x, pos.y, pos.z, block, 0);
|
||||
// Block.breakBlock() is called by vanilla itself, removing TEs.
|
||||
world.setBlockToAir(pos.getX(), pos.getY(), pos.getZ());
|
||||
world.setBlockToAir(pos.x, pos.y, pos.z);
|
||||
return harvested;
|
||||
}
|
||||
|
||||
|
||||
@@ -18,7 +18,6 @@ import net.minecraft.world.World;
|
||||
import forestry.api.genetics.IFruitBearer;
|
||||
import forestry.core.network.packets.PacketFXSignal;
|
||||
import forestry.core.proxy.Proxies;
|
||||
import forestry.core.utils.vect.IVect;
|
||||
import forestry.core.utils.vect.Vect;
|
||||
|
||||
public class CropFruit extends Crop {
|
||||
@@ -28,8 +27,8 @@ public class CropFruit extends Crop {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean isCrop(IVect pos) {
|
||||
TileEntity tile = world.getTileEntity(pos.getX(), pos.getY(), pos.getZ());
|
||||
protected boolean isCrop(Vect pos) {
|
||||
TileEntity tile = world.getTileEntity(pos.x, pos.y, pos.z);
|
||||
if (!(tile instanceof IFruitBearer)) {
|
||||
return false;
|
||||
}
|
||||
@@ -45,8 +44,8 @@ public class CropFruit extends Crop {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Collection<ItemStack> harvestBlock(IVect pos) {
|
||||
TileEntity tile = world.getTileEntity(pos.getX(), pos.getY(), pos.getZ());
|
||||
protected Collection<ItemStack> harvestBlock(Vect pos) {
|
||||
TileEntity tile = world.getTileEntity(pos.x, pos.y, pos.z);
|
||||
if (!(tile instanceof IFruitBearer)) {
|
||||
return new ArrayList<>();
|
||||
}
|
||||
@@ -55,10 +54,10 @@ public class CropFruit extends Crop {
|
||||
PacketFXSignal.VisualFXType.BLOCK_DESTROY,
|
||||
PacketFXSignal.SoundFXType.LEAF,
|
||||
world,
|
||||
pos.getX(),
|
||||
pos.getY(),
|
||||
pos.getZ(),
|
||||
world.getBlock(pos.getX(), pos.getY(), pos.getZ()),
|
||||
pos.x,
|
||||
pos.y,
|
||||
pos.z,
|
||||
world.getBlock(pos.x, pos.y, pos.z),
|
||||
0);
|
||||
return ((IFruitBearer) tile).pickFruit(null);
|
||||
}
|
||||
|
||||
@@ -19,7 +19,6 @@ import net.minecraft.world.World;
|
||||
|
||||
import forestry.core.blocks.BlockSoil;
|
||||
import forestry.core.proxy.Proxies;
|
||||
import forestry.core.utils.vect.IVect;
|
||||
import forestry.core.utils.vect.Vect;
|
||||
import forestry.plugins.PluginCore;
|
||||
|
||||
@@ -30,7 +29,7 @@ public class CropPeat extends Crop {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean isCrop(IVect pos) {
|
||||
protected boolean isCrop(Vect pos) {
|
||||
Block block = getBlock(pos);
|
||||
if (!(block instanceof BlockSoil)) {
|
||||
return false;
|
||||
@@ -42,17 +41,11 @@ public class CropPeat extends Crop {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Collection<ItemStack> harvestBlock(IVect pos) {
|
||||
protected Collection<ItemStack> harvestBlock(Vect pos) {
|
||||
List<ItemStack> drops = new ArrayList<>();
|
||||
drops.add(PluginCore.items.peat.getItemStack());
|
||||
|
||||
Proxies.common.addBlockDestroyEffects(
|
||||
world,
|
||||
pos.getX(),
|
||||
pos.getY(),
|
||||
pos.getZ(),
|
||||
world.getBlock(pos.getX(), pos.getY(), pos.getZ()),
|
||||
0);
|
||||
Proxies.common.addBlockDestroyEffects(world, pos.x, pos.y, pos.z, world.getBlock(pos.x, pos.y, pos.z), 0);
|
||||
setBlock(pos, Blocks.dirt, 0);
|
||||
return drops;
|
||||
}
|
||||
|
||||
@@ -17,7 +17,6 @@ import net.minecraft.world.World;
|
||||
|
||||
import forestry.core.config.Constants;
|
||||
import forestry.core.proxy.Proxies;
|
||||
import forestry.core.utils.vect.IVect;
|
||||
import forestry.core.utils.vect.Vect;
|
||||
import forestry.plugins.compat.PluginIC2;
|
||||
|
||||
@@ -28,11 +27,11 @@ public class CropRubber extends CropBlock {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Collection<ItemStack> harvestBlock(IVect pos) {
|
||||
protected Collection<ItemStack> harvestBlock(Vect pos) {
|
||||
Collection<ItemStack> harvested = new ArrayList<>();
|
||||
harvested.add(PluginIC2.resin.copy());
|
||||
Proxies.common.addBlockDestroyEffects(world, pos.getX(), pos.getY(), pos.getZ(), block, 0);
|
||||
world.setBlock(pos.getX(), pos.getY(), pos.getZ(), block, meta + 6, Constants.FLAG_BLOCK_SYNCH);
|
||||
Proxies.common.addBlockDestroyEffects(world, pos.x, pos.y, pos.z, block, 0);
|
||||
world.setBlock(pos.x, pos.y, pos.z, block, meta + 6, Constants.FLAG_BLOCK_SYNCH);
|
||||
return harvested;
|
||||
}
|
||||
}
|
||||
@@ -27,7 +27,6 @@ import forestry.core.config.Constants;
|
||||
import forestry.core.entities.EntitySelector;
|
||||
import forestry.core.render.SpriteSheet;
|
||||
import forestry.core.utils.EntityUtil;
|
||||
import forestry.core.utils.vect.MutableVect;
|
||||
import forestry.core.utils.vect.Vect;
|
||||
|
||||
public abstract class FarmLogic implements IFarmLogic {
|
||||
@@ -65,10 +64,8 @@ public abstract class FarmLogic implements IFarmLogic {
|
||||
&& world.getBlockMetadata(position.x, position.y, position.z) == 0;
|
||||
}
|
||||
|
||||
protected final MutableVect mutableVect = new MutableVect();
|
||||
|
||||
protected final Vect translateWithOffset(int x, int y, int z, FarmDirection farmDirection, int step) {
|
||||
return new Vect(mutableVect.set(farmDirection.getForgeDirection()).multiply(step).add(x, y, z));
|
||||
return new Vect(farmDirection.getForgeDirection()).multiply(step).add(x, y, z);
|
||||
}
|
||||
|
||||
protected final void setBlock(Vect position, Block block, int meta) {
|
||||
|
||||
@@ -8,14 +8,13 @@
|
||||
******************************************************************************/
|
||||
package forestry.farming.logic;
|
||||
|
||||
import java.util.ArrayDeque;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.Deque;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
import java.util.Stack;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.init.Blocks;
|
||||
@@ -33,7 +32,6 @@ import forestry.api.farming.IFarmHousing;
|
||||
import forestry.api.farming.IFarmable;
|
||||
import forestry.core.blocks.BlockSoil;
|
||||
import forestry.core.render.SpriteSheet;
|
||||
import forestry.core.utils.vect.MutableVect;
|
||||
import forestry.core.utils.vect.Vect;
|
||||
import forestry.core.utils.vect.VectUtil;
|
||||
import forestry.plugins.PluginCore;
|
||||
@@ -130,7 +128,7 @@ public class FarmLogicArboreal extends FarmLogicHomogeneous {
|
||||
World world = getWorld();
|
||||
|
||||
Set<Vect> seen = new HashSet<>();
|
||||
Deque<ICrop> crops = new ArrayDeque<>();
|
||||
Stack<ICrop> crops = new Stack<>();
|
||||
|
||||
// Determine what type we want to harvest.
|
||||
IFarmable germling = null;
|
||||
@@ -164,7 +162,7 @@ public class FarmLogicArboreal extends FarmLogicHomogeneous {
|
||||
return crops;
|
||||
}
|
||||
|
||||
private ArrayList<Vect> processHarvestBlock(IFarmable germling, Deque<ICrop> crops, Set<Vect> seen, Vect start,
|
||||
private ArrayList<Vect> processHarvestBlock(IFarmable germling, Stack<ICrop> crops, Set<Vect> seen, Vect start,
|
||||
Vect position) {
|
||||
|
||||
World world = getWorld();
|
||||
@@ -172,32 +170,30 @@ public class FarmLogicArboreal extends FarmLogicHomogeneous {
|
||||
ArrayList<Vect> candidates = new ArrayList<>();
|
||||
|
||||
// Get additional candidates to return
|
||||
MutableVect mutable = new MutableVect();
|
||||
for (int x = -1; x < 2; x++) {
|
||||
for (int y = -1; y < 2; y++) {
|
||||
for (int z = -1; z < 2; z++) {
|
||||
mutable.set(position).add(x, y, z);
|
||||
if (mutable.equals(position)) {
|
||||
Vect candidate = position.add(x, y, z);
|
||||
if (candidate.equals(position)) {
|
||||
continue;
|
||||
}
|
||||
if (Math.abs(mutable.x - start.x) > BRANCH_RANGE) {
|
||||
if (Math.abs(candidate.x - start.x) > BRANCH_RANGE) {
|
||||
continue;
|
||||
}
|
||||
if (Math.abs(mutable.z - start.z) > BRANCH_RANGE) {
|
||||
if (Math.abs(candidate.z - start.z) > BRANCH_RANGE) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// See whether the given position has already been processed
|
||||
if (seen.contains(mutable)) {
|
||||
if (seen.contains(candidate)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
ICrop crop = germling.getCropAt(world, mutable.x, mutable.y, mutable.z);
|
||||
ICrop crop = germling.getCropAt(world, candidate.x, candidate.y, candidate.z);
|
||||
if (crop != null) {
|
||||
Vect immutable = mutable.asImmutable();
|
||||
crops.push(crop);
|
||||
candidates.add(immutable);
|
||||
seen.add(immutable);
|
||||
candidates.add(candidate);
|
||||
seen.add(candidate);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,13 +8,12 @@
|
||||
******************************************************************************/
|
||||
package forestry.farming.logic;
|
||||
|
||||
import java.util.ArrayDeque;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Deque;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
import java.util.Stack;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.BlockLog;
|
||||
@@ -30,7 +29,6 @@ import forestry.api.farming.FarmDirection;
|
||||
import forestry.api.farming.ICrop;
|
||||
import forestry.api.farming.IFarmHousing;
|
||||
import forestry.api.farming.IFarmable;
|
||||
import forestry.core.utils.vect.IVect;
|
||||
import forestry.core.utils.vect.MutableVect;
|
||||
import forestry.core.utils.vect.Vect;
|
||||
import forestry.core.utils.vect.VectUtil;
|
||||
@@ -162,7 +160,7 @@ public class FarmLogicCocoa extends FarmLogic {
|
||||
private Collection<ICrop> getHarvestBlocks(Vect position) {
|
||||
|
||||
Set<Vect> seen = new HashSet<>();
|
||||
Deque<ICrop> crops = new ArrayDeque<>();
|
||||
Stack<ICrop> crops = new Stack<>();
|
||||
|
||||
// Determine what type we want to harvest.
|
||||
Block block = VectUtil.getBlock(getWorld(), position);
|
||||
@@ -195,43 +193,40 @@ public class FarmLogicCocoa extends FarmLogic {
|
||||
return crops;
|
||||
}
|
||||
|
||||
private ArrayList<Vect> processHarvestBlock(Deque<ICrop> crops, Set<Vect> seen, Vect start, IVect position) {
|
||||
private ArrayList<Vect> processHarvestBlock(Stack<ICrop> crops, Set<Vect> seen, Vect start, Vect position) {
|
||||
|
||||
World world = getWorld();
|
||||
|
||||
ArrayList<Vect> candidates = new ArrayList<>();
|
||||
|
||||
// Get additional candidates to return
|
||||
MutableVect mutable = new MutableVect();
|
||||
for (int i = -1; i < 2; i++) {
|
||||
for (int j = 0; j < 2; j++) {
|
||||
for (int k = -1; k < 2; k++) {
|
||||
mutable.set(position).add(i, j, k);
|
||||
if (mutable.equals(position)) {
|
||||
Vect candidate = position.add(i, j, k);
|
||||
if (candidate.equals(position)) {
|
||||
continue;
|
||||
}
|
||||
if (Math.abs(mutable.x - start.x) > 5) {
|
||||
if (Math.abs(candidate.x - start.x) > 5) {
|
||||
continue;
|
||||
}
|
||||
if (Math.abs(mutable.z - start.z) > 5) {
|
||||
if (Math.abs(candidate.z - start.z) > 5) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// See whether the given position has already been processed
|
||||
if (seen.contains(mutable)) {
|
||||
if (seen.contains(candidate)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
ICrop crop = cocoa.getCropAt(world, mutable.x, mutable.y, mutable.z);
|
||||
ICrop crop = cocoa.getCropAt(world, candidate.x, candidate.y, candidate.z);
|
||||
if (crop != null) {
|
||||
Vect immutable = mutable.asImmutable();
|
||||
crops.push(crop);
|
||||
candidates.add(immutable);
|
||||
seen.add(immutable);
|
||||
} else if (VectUtil.isWoodBlock(world, mutable)) {
|
||||
Vect immutable = mutable.asImmutable();
|
||||
candidates.add(immutable);
|
||||
seen.add(immutable);
|
||||
candidates.add(candidate);
|
||||
seen.add(candidate);
|
||||
} else if (VectUtil.isWoodBlock(world, candidate)) {
|
||||
candidates.add(candidate);
|
||||
seen.add(candidate);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,9 +8,8 @@
|
||||
******************************************************************************/
|
||||
package forestry.farming.logic;
|
||||
|
||||
import java.util.ArrayDeque;
|
||||
import java.util.Collection;
|
||||
import java.util.Deque;
|
||||
import java.util.Stack;
|
||||
|
||||
import net.minecraft.init.Blocks;
|
||||
import net.minecraft.item.ItemStack;
|
||||
@@ -112,7 +111,7 @@ public abstract class FarmLogicCrops extends FarmLogicWatered {
|
||||
public Collection<ICrop> harvest(int x, int y, int z, FarmDirection direction, int extent) {
|
||||
World world = getWorld();
|
||||
|
||||
Deque<ICrop> crops = new ArrayDeque<>();
|
||||
Stack<ICrop> crops = new Stack<>();
|
||||
for (int i = 0; i < extent; i++) {
|
||||
Vect position = translateWithOffset(x, y + 1, z, direction, i);
|
||||
for (IFarmable seed : seeds) {
|
||||
|
||||
@@ -8,9 +8,8 @@
|
||||
******************************************************************************/
|
||||
package forestry.farming.logic;
|
||||
|
||||
import java.util.ArrayDeque;
|
||||
import java.util.Collection;
|
||||
import java.util.Deque;
|
||||
import java.util.Stack;
|
||||
|
||||
import net.minecraft.init.Blocks;
|
||||
import net.minecraft.init.Items;
|
||||
@@ -69,7 +68,7 @@ public class FarmLogicEnder extends FarmLogicHomogeneous {
|
||||
public Collection<ICrop> harvest(int x, int y, int z, FarmDirection direction, int extent) {
|
||||
World world = getWorld();
|
||||
|
||||
Deque<ICrop> crops = new ArrayDeque<>();
|
||||
Stack<ICrop> crops = new Stack<>();
|
||||
for (int i = 0; i < extent; i++) {
|
||||
Vect position = translateWithOffset(x, y + 1, z, direction, i);
|
||||
for (IFarmable farmable : germlings) {
|
||||
|
||||
Loaded 100 of 131 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user