Compare commits

..
13 Commits
Author SHA1 Message Date
Martin Robertz 64ab23f8c8 update 2024-02-18 10:47:50 +01:00
Jason Mitchell 6c1ddc9268 Allocation reduction 2024-02-17 15:25:51 -08:00
Raven Szewczyk 576afde7b7 [ci skip] upgraded build system 2024-02-04 19:58:32 +00:00
bombcar 7f133a5e2a [bs] fix buildscripts for jenkins (#61) 2024-01-09 12:11:19 -06:00
Raven Szewczyk 0135b39309 [ci skip] upgraded build system 2024-01-08 21:25:44 +00:00
glowredman 2bcd3bb46c Misc cleanup
- add missing `serialVersionUID` fields
- addess vararg warnings
2023-12-29 13:26:43 +01:00
glowredman 646988aae8 Addess some deprecation warnings 2023-12-29 13:26:43 +01:00
glowredman 331c8a8c7b Fix generics 2023-12-29 13:26:43 +01:00
glowredman 68ab1b98bd Add default cases to switch statements 2023-12-29 13:26:43 +01:00
glowredman 9140f84d57 Remove VersionChecker 2023-12-29 13:26:43 +01:00
glowredman bf23ca2317 Update gradle.properties 2023-12-29 13:26:43 +01:00
bombcar 0e4f38b3d1 update buildscript 2023-12-20 19:29:15 +01:00
bombcar eeb29cd7f0 add a name for butterflyGE 2023-12-20 19:29:15 +01:00
122 changed files with 687 additions and 2160 deletions

No files matched your search

+2 -1620
View File
File diff suppressed because it is too large. Load diff
+3 -3
View File
@@ -2,9 +2,9 @@
dependencies {
api('curse.maven:cofh-lib-220333:2388748')
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')
devOnlyNonPublishable('com.github.GTNewHorizons:NotEnoughItems:2.5.18-GTNH:dev')
compileOnly('com.github.GTNewHorizons:inventory-tweaks:1.6.2:api')
compileOnly('com.github.GTNewHorizons:BuildCraft:7.1.39:api')
compileOnly('net.industrial-craft:industrialcraft-2:2.2.828-experimental:dev')
compileOnly('curse.maven:craftguide-75557:2459320')
}
+154 -22
View File
@@ -1,60 +1,192 @@
# ExampleMod tag to use as Blowdryer (Spotless, etc.) settings version, leave empty to disable.
# LOCAL to test local config updates.
gtnh.settings.blowdryerTag = 0.2.0
# Human-readable mod name, available for mcmod.info population.
modName = Forestry
# This is a case-sensitive string to identify your mod. Convention is to use lower case.
# Case-sensitive identifier string, available for mcmod.info population and used for automatic mixin JSON generation.
# Conventionally lowercase.
modId = 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
# WHY is there no version field?
# The build script relies on git to provide a version via tags. It is super easy and will enable you to always know the
# code base or your binary. Check out this tutorial: https://blog.mattclemente.com/2017/10/13/versioning-with-git-tags/
# Whether to use modGroup as the maven publishing group.
# Due to a history of using JitPack, the default is com.github.GTNewHorizons for all mods.
useModGroupForPublishing = false
# Will update your build.gradle automatically whenever an update is available
# Updates your build.gradle and settings.gradle automatically whenever an update is available.
autoUpdateBuildScript = false
# Version of Minecraft to target
minecraftVersion = 1.7.10
# Version of Minecraft Forge to target
forgeVersion = 10.13.4.1614
# Select a username for testing your mod with breakpoints. You may leave this empty for a random username each time you
# restart Minecraft in development. Choose this dependent on your mod:
# Do you need consistent player progressing (for example Thaumcraft)? -> Select a name
# Do you need to test how your custom blocks interacts with a player that is not the owner? -> leave name empty
# Specify an MCP channel for dependency deobfuscation and the deobfParams task.
channel = stable
# Specify an MCP mappings version for dependency deobfuscation and the deobfParams task.
mappingsVersion = 12
# Defines other MCP mappings for dependency deobfuscation.
remoteMappings = https\://raw.githubusercontent.com/MinecraftForge/FML/1.7.10/conf/
# Select a default username for testing your mod. You can always override this per-run by running
# `./gradlew runClient --username=AnotherPlayer`, or configuring this command in your IDE.
developmentEnvironmentUserName = Developer
# Define a source file of your project with:
# 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
# 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 = Constants.java
gradleTokenModId =
gradleTokenModName =
gradleTokenVersion = GRADLETOKEN_VERSION
gradleTokenGroupName =
# version in @Mod([...], version = VERSION, [...]).
# Leave these properties empty to skip individual token replacements.
replaceGradleTokenInFile =
# In case your mod provides an API for other mods to implement you may declare its package here. Otherwise, you can
# leave this property empty.
# Example value: apiPackage = api + modGroup = com.myname.mymodid -> com.myname.mymodid.api
# Example value: (apiPackage = api) + (modGroup = com.myname.mymodid) -> com.myname.mymodid.api
apiPackage = api
# Specify the configuration file for Forge's access transformers here. It must be placed into /src/main/resources/META-INF/
# Example value: mymodid_at.cfg
# There can be multiple files in a space-separated list.
# Example value: mymodid_at.cfg nei_at.cfg
accessTransformersFile =
# Provides setup for Mixins if enabled. If you don't know what mixins are: Keep it disabled!
usesMixins = false
# Adds some debug arguments like verbose output and class export.
usesMixinDebug = false
# Specify the location of your implementation of IMixinConfigPlugin. Leave it empty otherwise.
mixinPlugin =
# Specify the package that contains all of your Mixins. You may only place Mixins in this package or the build will fail!
mixinsPackage =
# Specify the core mod entry class if you use a core mod. This class must implement IFMLLoadingPlugin!
# This parameter is for legacy compatibility only
# Example value: coreModClass = asm.FMLPlugin + modGroup = com.myname.mymodid -> com.myname.mymodid.asm.FMLPlugin
# Example value: (coreModClass = asm.FMLPlugin) + (modGroup = com.myname.mymodid) -> com.myname.mymodid.asm.FMLPlugin
coreModClass =
# If your project is only a consolidation of mixins or a core mod and does NOT contain a 'normal' mod ( = some class
# that is annotated with @Mod) you want this to be true. When in doubt: leave it on false!
containsMixinsAndOrCoreModOnly = false
# If enabled, you may use 'shadowImplementation' for dependencies. They will be integrated in your jar. It is your
# responsibility check the licence and request permission for distribution, if required.
# Enables Mixins even if this mod doesn't use them, useful if one of the dependencies uses mixins.
forceEnableMixins = false
# If enabled, you may use 'shadowCompile' for dependencies. They will be integrated into your jar. It is your
# responsibility to check the license and request permission for distribution if required.
usesShadowedDependencies = 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
Binary file not shown.
+2 -1
View File
@@ -1,6 +1,7 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.2.1-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-8.6-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
Vendored
+13 -9
View File
@@ -83,7 +83,8 @@ done
# This is normally unused
# shellcheck disable=SC2034
APP_BASE_NAME=${0##*/}
APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit
# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)
APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD=maximum
@@ -130,10 +131,13 @@ location of your Java installation."
fi
else
JAVACMD=java
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
if ! command -v java >/dev/null 2>&1
then
die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
fi
# Increase the maximum file descriptors if we can.
@@ -141,7 +145,7 @@ if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
case $MAX_FD in #(
max*)
# In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.
# shellcheck disable=SC3045
# shellcheck disable=SC2039,SC3045
MAX_FD=$( ulimit -H -n ) ||
warn "Could not query maximum file descriptor limit"
esac
@@ -149,7 +153,7 @@ if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
'' | soft) :;; #(
*)
# In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.
# shellcheck disable=SC3045
# shellcheck disable=SC2039,SC3045
ulimit -n "$MAX_FD" ||
warn "Could not set maximum file descriptor limit to $MAX_FD"
esac
@@ -198,11 +202,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, 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.
# Collect all arguments for the java command:
# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,
# and any embedded shellness will be escaped.
# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be
# treated as '${Hostname}' itself on the command line.
set -- \
"-Dorg.gradle.appname=$APP_BASE_NAME" \
Vendored
+10 -10
View File
@@ -43,11 +43,11 @@ set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
if %ERRORLEVEL% equ 0 goto execute
echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
echo. 1>&2
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2
echo. 1>&2
echo Please set the JAVA_HOME variable in your environment to match the 1>&2
echo location of your Java installation. 1>&2
goto fail
@@ -57,11 +57,11 @@ set JAVA_EXE=%JAVA_HOME%/bin/java.exe
if exist "%JAVA_EXE%" goto execute
echo.
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
echo. 1>&2
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2
echo. 1>&2
echo Please set the JAVA_HOME variable in your environment to match the 1>&2
echo location of your Java installation. 1>&2
goto fail
+5 -10
View File
@@ -4,10 +4,10 @@ pluginManagement {
maven {
// RetroFuturaGradle
name "GTNH Maven"
url "http://jenkins.usrv.eu:8081/nexus/content/groups/public/"
allowInsecureProtocol = true
url "https://nexus.gtnewhorizons.com/repository/public/"
mavenContent {
includeGroup("com.gtnewhorizons.retrofuturagradle")
includeGroup("com.gtnewhorizons")
includeGroupByRegex("com\\.gtnewhorizons\\..+")
}
}
gradlePluginPortal()
@@ -17,12 +17,7 @@ pluginManagement {
}
plugins {
id 'com.diffplug.blowdryerSetup' version '1.6.0'
id 'org.gradle.toolchains.foojay-resolver-convention' version '0.4.0' // Provides java toolchains
id 'com.gtnewhorizons.gtnhsettingsconvention' version '1.0.14'
}
blowdryerSetup {
repoSubfolder 'gtnhShared'
github('GTNewHorizons/ExampleMod1.7.10', 'tag', '0.2.0')
//devLocal '.' // Use this when testing config updates locally
}
@@ -34,7 +34,8 @@ 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 (byte b = 0; b < 128; ++b) spawnCopy.add(spawn.get(b));
else for (int 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,12 +12,13 @@ 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 apicultureChest;
public final BlockBase<? extends IMachineProperties> apicultureChest;
public final BlockBeehives beehives;
public final BlockCandle candle;
public final BlockStump stump;
@@ -26,7 +27,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,8 +8,9 @@
******************************************************************************/
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;
@@ -39,7 +40,7 @@ import forestry.core.utils.ItemStackUtil;
public class TileAlvearySwarmer extends TileAlveary implements ISidedInventory, IActivatable, IAlvearyComponent.Active {
private final InventorySwarmer inventory;
private final Stack<ItemStack> pendingSpawns = new Stack<>();
private final Deque<ItemStack> pendingSpawns = new ArrayDeque<>();
private boolean active;
public TileAlvearySwarmer() {
@@ -99,7 +99,7 @@ public class ComponentVillageBeeHouse extends StructureVillagePieces.House1 {
}
}
@SuppressWarnings("rawtypes")
@SuppressWarnings({ "rawtypes", "unchecked" })
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,7 +28,6 @@ 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,6 +168,7 @@ 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,6 +61,7 @@ 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,6 +1059,8 @@ 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);
@@ -35,6 +35,7 @@ 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,7 +16,6 @@ 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;
@@ -50,29 +49,22 @@ public abstract class BlockStructure extends BlockForestry {
}
TileEntity tile = world.getTileEntity(x, y, z);
if (!(tile instanceof MultiblockTileEntityForestry)) {
if (!(tile instanceof MultiblockTileEntityForestry<?>part)) {
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()) {
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;
String validationError = controller.getLastValidationError();
if (validationError != null) {
long tick = world.getTotalWorldTime();
if (tick > previousMessageTick + 20) {
player.addChatMessage(new ChatComponentText(validationError));
previousMessageTick = tick;
}
} else {
player.addChatMessage(
new ChatComponentText(StatCollector.translateToLocal("for.multiblock.error.notConnected")));
return true;
}
}
@@ -94,13 +86,12 @@ public abstract class BlockStructure extends BlockForestry {
return;
}
if (entityLiving instanceof EntityPlayer) {
if (entityLiving instanceof EntityPlayer player) {
TileEntity tile = world.getTileEntity(i, j, k);
if (tile instanceof MultiblockTileEntityForestry) {
EntityPlayer player = (EntityPlayer) entityLiving;
if (tile instanceof MultiblockTileEntityForestry<?>tileForestry) {
GameProfile gameProfile = player.getGameProfile();
((MultiblockTileEntityForestry) tile).setOwner(gameProfile);
tileForestry.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,7 +79,6 @@ 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,7 +164,6 @@ public class CommandHelpers {
return false;
}
@SuppressWarnings("unchecked")
public static List<String> getListOfStringsMatchingLastWord(String[] strings, String... lastWords) {
return CommandBase.getListOfStringsMatchingLastWord(strings, lastWords);
}
@@ -26,24 +26,11 @@ 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,
style,
new ChatStyle().setColor(EnumChatFormatting.GREEN),
"for.chat.version",
Version.getVersion(),
Proxies.common.getMinecraftVersion(),
Version.getRecommendedVersion());
if (Version.isOutdated()) {
for (String updateLine : Version.getChangelog()) {
CommandHelpers.sendChatMessage(sender, EnumChatFormatting.BLUE + updateLine);
}
}
Proxies.common.getMinecraftVersion());
}
}
@@ -74,7 +74,7 @@ public class RootCommand extends CommandBase implements IForestryCommand {
}
@Override
public List addTabCompletionOptions(ICommandSender sender, String[] incomplete) {
public List<String> addTabCompletionOptions(ICommandSender sender, String[] incomplete) {
return CommandHelpers.addStandardTabCompletionOptions(this, sender, incomplete);
}
@@ -8,6 +8,7 @@
******************************************************************************/
package forestry.core.config;
import forestry.Tags;
import forestry.api.core.IForestryConstants;
public class Constants implements IForestryConstants {
@@ -15,7 +16,7 @@ public class Constants implements IForestryConstants {
// System
public static final String MOD = "Forestry";
public static final String ID = "forestry";
public static final String VERSION = "GRADLETOKEN_VERSION";
public static final String VERSION = Tags.VERSION;
public static final String URL = "http://forestry.sengir.net/";
public static final int FLAG_BLOCK_UPDATE = 1;
@@ -25,6 +25,7 @@ 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<>();
@@ -32,13 +33,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;
+20 -146
View File
@@ -8,21 +8,7 @@
******************************************************************************/
package forestry.core.config;
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;
import forestry.Tags;
/**
* With permission from pahimar.
@@ -31,163 +17,51 @@ import forestry.core.utils.Log;
*/
public class Version {
@Deprecated
public enum EnumUpdateState {
CURRENT,
OUTDATED,
CONNECTION_ERROR
}
public static final String VERSION = "@VERSION@";
public static final String BUILD_NUMBER = "@BUILD_NUMBER@";
public static final String VERSION = Tags.VERSION;
@Deprecated
public static final String BUILD_NUMBER = "";
@Deprecated
public static final String[] FAILED_CHANGELOG = new String[] {
String.format("Unable to retrieve changelog for %s", Constants.MOD) };
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/";
@Deprecated
public static EnumUpdateState currentVersion = EnumUpdateState.CURRENT;
private static String recommendedVersion;
private static String[] cachedChangelog = FAILED_CHANGELOG;
public static String getVersion() {
return VERSION + " (" + BUILD_NUMBER + ")";
return VERSION;
}
@Deprecated
public static boolean isOutdated() {
return currentVersion == EnumUpdateState.OUTDATED;
return false;
}
@Deprecated
public static boolean needsUpdateNoticeAndMarkAsSeen() {
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;
return false;
}
@Deprecated
public static String getRecommendedVersion() {
return recommendedVersion;
return VERSION;
}
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 void versionCheck() {}
@Deprecated
public static String[] getChangelog() {
return cachedChangelog;
return FAILED_CHANGELOG;
}
@Deprecated
public static String[] grabChangelog(String version) {
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) };
return FAILED_CHANGELOG;
}
}
@@ -10,7 +10,6 @@ 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;
@@ -31,7 +30,7 @@ public class FakeTankManager implements ITankManager {
public void containerAdded(Container container, ICrafting player) {}
@Override
public void updateGuiData(Container container, List<EntityPlayerMP> crafters) {}
public void updateGuiData(Container container, List<ICrafting> crafters) {}
@Override
public void containerRemoved(Container container) {}
@@ -10,7 +10,6 @@ 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;
@@ -21,7 +20,7 @@ public interface ITankManager extends IFluidHandler {
void containerAdded(Container container, ICrafting player);
void updateGuiData(Container container, List<EntityPlayerMP> crafters);
void updateGuiData(Container container, List<ICrafting> crafters);
void containerRemoved(Container container);
@@ -17,6 +17,7 @@ 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;
@@ -134,7 +135,7 @@ public class TankManager implements ITankManager, ITankUpdateHandler, IStreamabl
return;
}
List<EntityPlayerMP> crafters = Collections.singletonList((EntityPlayerMP) player);
List<ICrafting> crafters = Collections.singletonList(player);
for (StandardTank tank : tanks) {
sendTankUpdate(container, tank, crafters);
@@ -149,13 +150,13 @@ public class TankManager implements ITankManager, ITankUpdateHandler, IStreamabl
}
@Override
public void updateGuiData(Container container, List<EntityPlayerMP> crafters) {
public void updateGuiData(Container container, List<ICrafting> crafters) {
for (StandardTank tank : tanks) {
updateGuiData(container, crafters, tank.getTankIndex());
}
}
private void updateGuiData(Container container, List<EntityPlayerMP> crafters, int tankIndex) {
private void updateGuiData(Container container, List<ICrafting> crafters, int tankIndex) {
StandardTank tank = tanks.get(tankIndex);
if (tank == null) {
return;
@@ -170,12 +171,12 @@ public class TankManager implements ITankManager, ITankUpdateHandler, IStreamabl
sendTankUpdate(container, tank, crafters);
}
private void sendTankUpdate(Container container, StandardTank tank, Iterable<EntityPlayerMP> crafters) {
private void sendTankUpdate(Container container, StandardTank tank, Iterable<ICrafting> crafters) {
int tankIndex = tank.getTankIndex();
FluidStack fluid = tank.getFluid();
IForestryPacketClient packet = new PacketTankLevelUpdate(tile, tankIndex, fluid);
for (EntityPlayerMP player : crafters) {
Proxies.net.sendToPlayer(packet, player);
for (ICrafting player : crafters) {
Proxies.net.sendToPlayer(packet, (EntityPlayer) player);
}
if (fluid == null) {
@@ -133,8 +133,9 @@ public class StandardTank extends FluidTank implements IStreamable {
case DEFAULT:
case INPUT:
return true;
default:
return false;
}
return false;
}
public boolean canBeDrainedExternally() {
@@ -142,8 +143,9 @@ 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,7 +38,6 @@ public abstract class ContainerLiquidTanks<T extends TileEntity & ILiquidTankTil
}
@Override
@SuppressWarnings("unchecked")
public void detectAndSendChanges() {
super.detectAndSendChanges();
tile.getTankManager().updateGuiData(this, crafters);
@@ -43,7 +43,6 @@ public abstract class ContainerLiquidTanksSocketed<T extends TileEntity & ILiqui
}
@Override
@SuppressWarnings("unchecked")
public void detectAndSendChanges() {
super.detectAndSendChanges();
tile.getTankManager().updateGuiData(this, crafters);
@@ -8,10 +8,11 @@
******************************************************************************/
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;
@@ -208,7 +209,7 @@ public abstract class GuiAlyzer extends GuiForestry<ContainerAlyzer, IInventory>
textLayout.drawLine(StringUtil.localize("gui.alyzer.classification") + ":", 12);
textLayout.newLine();
Stack<IClassification> hierarchy = new Stack<>();
Deque<IClassification> hierarchy = new ArrayDeque<>();
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,7 +94,6 @@ public class GuiNaturalistInventory extends GuiForestry<Container, IPagedInvento
}
}
@SuppressWarnings("unchecked")
@Override
public void initGui() {
super.initGui();
@@ -70,7 +70,6 @@ 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();
+3 -3
View File
@@ -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,6 +9,8 @@
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;
@@ -18,7 +20,7 @@ public class TextLayoutHelper {
private static final int LINE_HEIGHT = 12;
private final GuiForestry guiForestry;
private final GuiForestry<? extends Container, ? extends IInventory> guiForestry;
private final int defaultFontColor;
private FontRenderer fontRendererObj;
@@ -27,7 +29,7 @@ public class TextLayoutHelper {
public int column2;
public int line;
public TextLayoutHelper(GuiForestry guiForestry, FontColour fontColour) {
public TextLayoutHelper(GuiForestry<? extends Container, ? extends IInventory> guiForestry, FontColour fontColour) {
this.guiForestry = guiForestry;
this.defaultFontColor = fontColour.get("gui.screen");
}
@@ -227,12 +227,10 @@ 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 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;
}
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;
}
return y - originalY;
}
@@ -11,6 +11,9 @@ 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;
@@ -29,9 +32,9 @@ public class LedgerManager {
private IErrorSource errorSource;
private final int maxWidth;
public final GuiForestry gui;
public final GuiForestry<? extends Container, ? extends IInventory> gui;
public LedgerManager(GuiForestry gui, int maxWidth) {
public LedgerManager(GuiForestry<? extends Container, ? extends IInventory> 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,7 +54,6 @@ public class SocketWidget extends Widget {
private final ToolTip toolTip = new ToolTip(250) {
@SuppressWarnings("unchecked")
@Override
public void refresh() {
toolTip.clear();
@@ -12,6 +12,8 @@ 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;
@@ -20,11 +22,11 @@ import forestry.core.proxy.Proxies;
public class WidgetManager {
public final GuiForestry gui;
public final GuiForestry<? extends Container, ? extends IInventory> gui;
public final Minecraft minecraft;
protected final List<Widget> widgets = new ArrayList<>();
public WidgetManager(GuiForestry gui) {
public WidgetManager(GuiForestry<? extends Container, ? extends IInventory> 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,6 +8,8 @@ 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.newInstance();
T streamable = streamableClass.getConstructor().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<Object> cachedRecipes = new ArrayList<Object>();
static List<IRecipe> cachedRecipes = new ArrayList<>();
public static void addFermenterRecipes(ItemStack resource, int fermentationValue, Fluids output) {
if (RecipeManagers.fermenterManager == null) {
@@ -183,15 +183,14 @@ public abstract class RecipeUtil {
}
List<ItemStack> matchingRecipes = new ArrayList<>();
List<Integer> matchingIndex = new ArrayList();
List<Object> matchingRecipeMap = new ArrayList();
List<Integer> matchingIndex = new ArrayList<>();
List<IRecipe> matchingRecipeMap = new ArrayList<>();
int index = 0;
if (Config.cacheWorktableRecipes) {
// Check across the whole cached recipe map
// Add each recipe to the matchingRecipes list
for (Object recipe : cachedRecipes) {
IRecipe irecipe = (IRecipe) recipe;
for (IRecipe irecipe : cachedRecipes) {
if (irecipe.matches(inventory, world)) {
ItemStack result = irecipe.getCraftingResult(inventory);
@@ -206,8 +205,7 @@ public abstract class RecipeUtil {
}
}
// Only do this if there were no cached recipes hit
for (Object recipe : CraftingManager.getInstance().getRecipeList()) {
IRecipe irecipe = (IRecipe) recipe;
for (IRecipe irecipe : CraftingManager.getInstance().getRecipeList()) {
if (irecipe.matches(inventory, world)) {
ItemStack result = irecipe.getCraftingResult(inventory);
@@ -216,8 +214,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(recipe);
matchingIndex.add(new Integer(index));
matchingRecipeMap.add(irecipe);
matchingIndex.add(index);
}
}
}
@@ -227,7 +225,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 recipeMap = CraftingManager.getInstance().getRecipeList();
List<IRecipe> 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() );
@@ -295,12 +293,10 @@ 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));
}
@@ -309,7 +305,6 @@ 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));
}
@@ -400,7 +395,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);
@@ -31,6 +31,7 @@ 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,13 +59,11 @@ 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);
+1 -1
View File
@@ -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);
+14 -13
View File
@@ -62,8 +62,8 @@ public abstract class SlotUtil {
return stack;
}
public static ItemStack transferStackInSlot(List inventorySlots, EntityPlayer player, int slotIndex) {
Slot slot = (Slot) inventorySlots.get(slotIndex);
public static ItemStack transferStackInSlot(List<Slot> inventorySlots, EntityPlayer player, int slotIndex) {
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 inventorySlots, ItemStack stackInSlot, int slotIndex, int numSlots,
private static boolean shiftItemStack(List<Slot> inventorySlots, ItemStack stackInSlot, int slotIndex, int numSlots,
boolean fromCraftingSlot) {
if (isInPlayerInventory(slotIndex)) {
if (shiftToMachineInventory(inventorySlots, stackInSlot, numSlots)) {
@@ -160,13 +160,14 @@ public abstract class SlotUtil {
slot.putStack(phantomStack);
}
private static boolean shiftItemStackToRange(List inventorySlots, ItemStack stackToShift, int start, int count) {
private static boolean shiftItemStackToRange(List<Slot> 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 inventorySlots, ItemStack stackToShift, int start,
private static boolean shiftItemStackToRangeMerge(List<Slot> inventorySlots, ItemStack stackToShift, int start,
int count) {
if (stackToShift == null || !stackToShift.isStackable() || stackToShift.stackSize <= 0) {
return false;
@@ -174,7 +175,7 @@ public abstract class SlotUtil {
boolean changed = false;
for (int slotIndex = start; stackToShift.stackSize > 0 && slotIndex < start + count; slotIndex++) {
Slot slot = (Slot) inventorySlots.get(slotIndex);
Slot slot = inventorySlots.get(slotIndex);
ItemStack stackInSlot = slot.getStack();
if (stackInSlot != null && ItemStackUtil.isIdenticalItem(stackInSlot, stackToShift)) {
int resultingStackSize = stackInSlot.stackSize + stackToShift.stackSize;
@@ -195,7 +196,7 @@ public abstract class SlotUtil {
return changed;
}
private static boolean shiftItemStackToRangeOpenSlots(List inventorySlots, ItemStack stackToShift, int start,
private static boolean shiftItemStackToRangeOpenSlots(List<Slot> inventorySlots, ItemStack stackToShift, int start,
int count) {
if (stackToShift == null || stackToShift.stackSize <= 0) {
return false;
@@ -203,7 +204,7 @@ public abstract class SlotUtil {
boolean changed = false;
for (int slotIndex = start; stackToShift.stackSize > 0 && slotIndex < start + count; slotIndex++) {
Slot slot = (Slot) inventorySlots.get(slotIndex);
Slot slot = inventorySlots.get(slotIndex);
ItemStack stackInSlot = slot.getStack();
if (stackInSlot == null) {
int max = Math.min(stackToShift.getMaxStackSize(), slot.getSlotStackLimit());
@@ -229,7 +230,7 @@ public abstract class SlotUtil {
return SlotUtil.isSlotInRange(slotIndex, playerInventorySize - playerHotbarSize, playerInventorySize);
}
private static boolean shiftToPlayerInventory(List inventorySlots, ItemStack stackInSlot) {
private static boolean shiftToPlayerInventory(List<Slot> inventorySlots, ItemStack stackInSlot) {
int playerHotbarStart = playerInventorySize - playerHotbarSize;
// try to merge with existing stacks, hotbar first
@@ -242,17 +243,17 @@ public abstract class SlotUtil {
return shifted;
}
private static boolean shiftToPlayerInventoryNoHotbar(List inventorySlots, ItemStack stackInSlot) {
private static boolean shiftToPlayerInventoryNoHotbar(List<Slot> inventorySlots, ItemStack stackInSlot) {
int playerHotbarStart = playerInventorySize - playerHotbarSize;
return shiftItemStackToRange(inventorySlots, stackInSlot, 0, playerHotbarStart);
}
private static boolean shiftToHotbar(List inventorySlots, ItemStack stackInSlot) {
private static boolean shiftToHotbar(List<Slot> inventorySlots, ItemStack stackInSlot) {
int playerHotbarStart = playerInventorySize - playerHotbarSize;
return shiftItemStackToRange(inventorySlots, stackInSlot, playerHotbarStart, playerHotbarSize);
}
private static boolean shiftToMachineInventory(List inventorySlots, ItemStack stackToShift, int numSlots) {
private static boolean shiftToMachineInventory(List<Slot> inventorySlots, ItemStack stackToShift, int numSlots) {
boolean success = false;
if (stackToShift.isStackable()) {
success = shiftToMachineInventory(inventorySlots, stackToShift, numSlots, true);
@@ -264,7 +265,7 @@ public abstract class SlotUtil {
}
// if mergeOnly = true, don't shift into empty slots.
private static boolean shiftToMachineInventory(List inventorySlots, ItemStack stackToShift, int numSlots,
private static boolean shiftToMachineInventory(List<Slot> inventorySlots, ItemStack stackToShift, int numSlots,
boolean mergeOnly) {
for (int machineIndex = playerInventorySize; machineIndex < numSlots; machineIndex++) {
// System.out.println("SlotUtil::shiftToMachineinventory");
@@ -34,5 +34,13 @@ public interface IVect {
IVect add(ChunkCoordinates coordinates);
IVect multiply(int factor);
IVect multiply(float factor);
int[] toArray();
Vect asImmutable();
MutableVect asMutable();
}
@@ -22,6 +22,10 @@ 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;
@@ -96,7 +100,16 @@ 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;
@@ -140,4 +153,82 @@ 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,10 +121,12 @@ 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));
}
@@ -149,11 +151,10 @@ public class Vect implements IVect {
if (this == obj) {
return true;
}
if (!(obj instanceof Vect)) {
return false;
if ((obj instanceof IVect other)) {
return (x == other.getX()) && (y == other.getY()) && (z == other.getZ());
}
Vect other = (Vect) obj;
return (x == other.x) && (y == other.y) && (z == other.z);
return false;
}
@Override
@@ -170,4 +171,15 @@ 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,8 +51,9 @@ public class EnergyManager implements IEnergyHandler, IStreamable {
case EXTRACT:
case BOTH:
return true;
default:
return false;
}
return false;
}
private boolean canReceive() {
@@ -60,8 +61,9 @@ public class EnergyManager implements IEnergyHandler, IStreamable {
case RECEIVE:
case BOTH:
return true;
default:
return false;
}
return false;
}
/* NBT */
@@ -67,8 +67,7 @@ public class BlockEngine extends BlockBase<BlockEngineType> {
}
@Override
@SuppressWarnings("unchecked")
public void addCollisionBoxesToList(World world, int x, int y, int z, AxisAlignedBB mask, List list,
public void addCollisionBoxesToList(World world, int x, int y, int z, AxisAlignedBB mask, List<AxisAlignedBB> list,
Entity colliding) {
TileEngine tile = TileUtil.getTile(world, x, y, z, TileEngine.class);
if (tile == null) {
@@ -32,7 +32,6 @@ public class ContainerEngineBiogas extends ContainerLiquidTanks<TileEngineBiogas
}
@Override
@SuppressWarnings("unchecked")
public void detectAndSendChanges() {
super.detectAndSendChanges();
@@ -32,7 +32,6 @@ public class ContainerGenerator extends ContainerLiquidTanks<TileGenerator> {
}
@Override
@SuppressWarnings("unchecked")
public void detectAndSendChanges() {
super.detectAndSendChanges();
@@ -69,7 +69,6 @@ public class ContainerFabricator extends ContainerLiquidTanks<TileFabricator> im
}
@Override
@SuppressWarnings("unchecked")
public void detectAndSendChanges() {
super.detectAndSendChanges();
@@ -37,7 +37,6 @@ public class ContainerFermenter extends ContainerLiquidTanks<TileFermenter> {
}
@Override
@SuppressWarnings("unchecked")
public void detectAndSendChanges() {
super.detectAndSendChanges();
@@ -58,7 +58,6 @@ public class ContainerMoistener extends ContainerLiquidTanks<TileMoistener> impl
}
@Override
@SuppressWarnings("unchecked")
public void detectAndSendChanges() {
super.detectAndSendChanges();
@@ -34,7 +34,6 @@ public class ContainerRaintank extends ContainerLiquidTanks<TileRaintank> {
}
@Override
@SuppressWarnings("unchecked")
public void detectAndSendChanges() {
super.detectAndSendChanges();
@@ -111,7 +111,6 @@ 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,6 +71,7 @@ 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,7 +42,6 @@ public class CircuitFarmLogic extends Circuit {
}
@Override
@SuppressWarnings("rawtypes")
public void onInsertion(int slot, Object tile) {
IFarmHousing housing = getCircuitable(tile);
if (housing == null) {
@@ -16,6 +16,7 @@ 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 {
@@ -28,21 +29,21 @@ public abstract class Crop implements ICrop {
this.position = position;
}
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 void setBlock(IVect position, Block block, int meta) {
world.setBlock(position.getX(), position.getY(), position.getZ(), block, meta, Constants.FLAG_BLOCK_SYNCH);
}
protected final Block getBlock(Vect position) {
return world.getBlock(position.x, position.y, position.z);
protected final Block getBlock(IVect position) {
return world.getBlock(position.getX(), position.getY(), position.getZ());
}
protected final int getBlockMeta(Vect position) {
return world.getBlockMetadata(position.x, position.y, position.z);
protected final int getBlockMeta(IVect position) {
return world.getBlockMetadata(position.getX(), position.getY(), position.getZ());
}
protected abstract boolean isCrop(Vect pos);
protected abstract boolean isCrop(IVect pos);
protected abstract Collection<ItemStack> harvestBlock(Vect pos);
protected abstract Collection<ItemStack> harvestBlock(IVect pos);
@Override
public Collection<ItemStack> harvest() {
@@ -19,6 +19,7 @@ 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 {
@@ -33,21 +34,21 @@ public class CropBasicAgriCraft extends Crop {
}
@Override
protected boolean isCrop(Vect pos) {
protected boolean isCrop(IVect pos) {
return getBlock(pos) == block && getBlockMeta(pos) == meta;
}
@Override
protected Collection<ItemStack> harvestBlock(Vect pos) {
ArrayList<ItemStack> harvest = block.getDrops(world, pos.x, pos.y, pos.z, meta, 0);
protected Collection<ItemStack> harvestBlock(IVect pos) {
ArrayList<ItemStack> harvest = block.getDrops(world, pos.getX(), pos.getY(), pos.getZ(), 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.x, pos.y, pos.z, Blocks.melon_block, 0);
world.setBlockMetadataWithNotify(pos.x, pos.y, pos.z, 0, Constants.FLAG_BLOCK_SYNCH);
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);
harvest.removeAll(Collections.singleton(null)); // sanatize nulls that get thru from Agricraft+Harvestcraft
// (sesameseed)
return harvest;
@@ -16,6 +16,7 @@ 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 {
@@ -30,15 +31,15 @@ public class CropBasicFruit extends Crop {
}
@Override
protected boolean isCrop(Vect pos) {
protected boolean isCrop(IVect pos) {
return getBlock(pos) == block && getBlockMeta(pos) == meta;
}
@Override
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);
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);
return harvested;
}
@@ -17,6 +17,7 @@ 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 {
@@ -35,26 +36,26 @@ public class CropBasicGrowthCraft extends Crop {
}
@Override
protected boolean isCrop(Vect pos) {
protected boolean isCrop(IVect pos) {
return getBlock(pos) == block && getBlockMeta(pos) == meta;
}
@Override
protected Collection<ItemStack> harvestBlock(Vect pos) {
ArrayList<ItemStack> harvest = block.getDrops(world, pos.x, pos.y, pos.z, meta, 0);
protected Collection<ItemStack> harvestBlock(IVect pos) {
ArrayList<ItemStack> harvest = block.getDrops(world, pos.getX(), pos.getZ(), pos.getZ(), meta, 0);
if (harvest.size() > 1) {
harvest.remove(0); // Hops have rope as first drop.
}
Proxies.common.addBlockDestroyEffects(world, pos.x, pos.y, pos.z, block, 0);
Proxies.common.addBlockDestroyEffects(world, pos.getX(), pos.getZ(), pos.getZ(), block, 0);
if (isGrape) {
world.setBlockToAir(pos.x, pos.y, pos.z);
world.setBlockToAir(pos.getX(), pos.getZ(), pos.getZ());
} else {
world.setBlockMetadataWithNotify(pos.x, pos.y, pos.z, 0, Constants.FLAG_BLOCK_SYNCH);
world.setBlockMetadataWithNotify(pos.getX(), pos.getZ(), pos.getZ(), 0, Constants.FLAG_BLOCK_SYNCH);
}
if (isRice) {
world.setBlockMetadataWithNotify(pos.x, pos.y - 1, pos.z, 7, Constants.FLAG_BLOCK_SYNCH);
world.setBlockMetadataWithNotify(pos.getX(), pos.getZ() - 1, pos.getZ(), 7, Constants.FLAG_BLOCK_SYNCH);
}
return harvest;
@@ -6,6 +6,7 @@ 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;
@@ -19,12 +20,12 @@ public class CropBasicIC2Crop extends Crop {
}
@Override
protected boolean isCrop(Vect pos) {
protected boolean isCrop(IVect pos) {
return PluginIC2.instance.canHarvestCrop(this.tileEntity);
}
@Override
protected Collection<ItemStack> harvestBlock(Vect pos) {
protected Collection<ItemStack> harvestBlock(IVect pos) {
return PluginIC2.instance.getCropDrops(this.tileEntity);
}
}
@@ -15,6 +15,7 @@ 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 {
@@ -29,16 +30,16 @@ public class CropBlock extends Crop {
}
@Override
protected boolean isCrop(Vect pos) {
protected boolean isCrop(IVect pos) {
return getBlock(pos) == block && getBlockMeta(pos) == meta;
}
@Override
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);
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);
// Block.breakBlock() is called by vanilla itself, removing TEs.
world.setBlockToAir(pos.x, pos.y, pos.z);
world.setBlockToAir(pos.getX(), pos.getY(), pos.getZ());
return harvested;
}
@@ -18,6 +18,7 @@ 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 {
@@ -27,8 +28,8 @@ public class CropFruit extends Crop {
}
@Override
protected boolean isCrop(Vect pos) {
TileEntity tile = world.getTileEntity(pos.x, pos.y, pos.z);
protected boolean isCrop(IVect pos) {
TileEntity tile = world.getTileEntity(pos.getX(), pos.getY(), pos.getZ());
if (!(tile instanceof IFruitBearer)) {
return false;
}
@@ -44,8 +45,8 @@ public class CropFruit extends Crop {
}
@Override
protected Collection<ItemStack> harvestBlock(Vect pos) {
TileEntity tile = world.getTileEntity(pos.x, pos.y, pos.z);
protected Collection<ItemStack> harvestBlock(IVect pos) {
TileEntity tile = world.getTileEntity(pos.getX(), pos.getY(), pos.getZ());
if (!(tile instanceof IFruitBearer)) {
return new ArrayList<>();
}
@@ -54,10 +55,10 @@ public class CropFruit extends Crop {
PacketFXSignal.VisualFXType.BLOCK_DESTROY,
PacketFXSignal.SoundFXType.LEAF,
world,
pos.x,
pos.y,
pos.z,
world.getBlock(pos.x, pos.y, pos.z),
pos.getX(),
pos.getY(),
pos.getZ(),
world.getBlock(pos.getX(), pos.getY(), pos.getZ()),
0);
return ((IFruitBearer) tile).pickFruit(null);
}
@@ -19,6 +19,7 @@ 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;
@@ -29,7 +30,7 @@ public class CropPeat extends Crop {
}
@Override
protected boolean isCrop(Vect pos) {
protected boolean isCrop(IVect pos) {
Block block = getBlock(pos);
if (!(block instanceof BlockSoil)) {
return false;
@@ -41,11 +42,17 @@ public class CropPeat extends Crop {
}
@Override
protected Collection<ItemStack> harvestBlock(Vect pos) {
protected Collection<ItemStack> harvestBlock(IVect pos) {
List<ItemStack> drops = new ArrayList<>();
drops.add(PluginCore.items.peat.getItemStack());
Proxies.common.addBlockDestroyEffects(world, pos.x, pos.y, pos.z, world.getBlock(pos.x, pos.y, pos.z), 0);
Proxies.common.addBlockDestroyEffects(
world,
pos.getX(),
pos.getY(),
pos.getZ(),
world.getBlock(pos.getX(), pos.getY(), pos.getZ()),
0);
setBlock(pos, Blocks.dirt, 0);
return drops;
}
@@ -17,6 +17,7 @@ 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;
@@ -27,11 +28,11 @@ public class CropRubber extends CropBlock {
}
@Override
protected Collection<ItemStack> harvestBlock(Vect pos) {
protected Collection<ItemStack> harvestBlock(IVect pos) {
Collection<ItemStack> harvested = new ArrayList<>();
harvested.add(PluginIC2.resin.copy());
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);
Proxies.common.addBlockDestroyEffects(world, pos.getX(), pos.getZ(), pos.getZ(), block, 0);
world.setBlock(pos.getX(), pos.getZ(), pos.getZ(), block, meta + 6, Constants.FLAG_BLOCK_SYNCH);
return harvested;
}
}
@@ -27,6 +27,7 @@ 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 {
@@ -64,8 +65,10 @@ 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(farmDirection.getForgeDirection()).multiply(step).add(x, y, z);
return new Vect(mutableVect.set(farmDirection.getForgeDirection()).multiply(step).add(x, y, z));
}
protected final void setBlock(Vect position, Block block, int meta) {
@@ -8,13 +8,14 @@
******************************************************************************/
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;
@@ -32,6 +33,7 @@ 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;
@@ -128,7 +130,7 @@ public class FarmLogicArboreal extends FarmLogicHomogeneous {
World world = getWorld();
Set<Vect> seen = new HashSet<>();
Stack<ICrop> crops = new Stack<>();
Deque<ICrop> crops = new ArrayDeque<>();
// Determine what type we want to harvest.
IFarmable germling = null;
@@ -162,7 +164,7 @@ public class FarmLogicArboreal extends FarmLogicHomogeneous {
return crops;
}
private ArrayList<Vect> processHarvestBlock(IFarmable germling, Stack<ICrop> crops, Set<Vect> seen, Vect start,
private ArrayList<Vect> processHarvestBlock(IFarmable germling, Deque<ICrop> crops, Set<Vect> seen, Vect start,
Vect position) {
World world = getWorld();
@@ -170,30 +172,33 @@ 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++) {
Vect candidate = position.add(x, y, z);
if (candidate.equals(position)) {
// Vect candidate = position.add(x, y, z);
mutable.set(position).add(x, y, z);
if (mutable.equals(position)) {
continue;
}
if (Math.abs(candidate.x - start.x) > BRANCH_RANGE) {
if (Math.abs(mutable.x - start.x) > BRANCH_RANGE) {
continue;
}
if (Math.abs(candidate.z - start.z) > BRANCH_RANGE) {
if (Math.abs(mutable.z - start.z) > BRANCH_RANGE) {
continue;
}
// See whether the given position has already been processed
if (seen.contains(candidate)) {
if (seen.contains(mutable)) {
continue;
}
ICrop crop = germling.getCropAt(world, candidate.x, candidate.y, candidate.z);
ICrop crop = germling.getCropAt(world, mutable.x, mutable.y, mutable.z);
if (crop != null) {
Vect immutable = mutable.asImmutable();
crops.push(crop);
candidates.add(candidate);
seen.add(candidate);
candidates.add(immutable);
seen.add(immutable);
}
}
}
@@ -8,12 +8,13 @@
******************************************************************************/
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;
@@ -29,6 +30,7 @@ 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;
@@ -159,8 +161,8 @@ public class FarmLogicCocoa extends FarmLogic {
private Collection<ICrop> getHarvestBlocks(Vect position) {
Set<Vect> seen = new HashSet<>();
Stack<ICrop> crops = new Stack<>();
Set<IVect> seen = new HashSet<>();
Deque<ICrop> crops = new ArrayDeque<>();
// Determine what type we want to harvest.
Block block = VectUtil.getBlock(getWorld(), position);
@@ -193,40 +195,44 @@ public class FarmLogicCocoa extends FarmLogic {
return crops;
}
private ArrayList<Vect> processHarvestBlock(Stack<ICrop> crops, Set<Vect> seen, Vect start, Vect position) {
private ArrayList<Vect> processHarvestBlock(Deque<ICrop> crops, Set<IVect> seen, Vect start, IVect 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++) {
Vect candidate = position.add(i, j, k);
if (candidate.equals(position)) {
// Vect candidate = position.add(i, j, k);
mutable.set(position).add(i, j, k);
if (mutable.equals(position)) {
continue;
}
if (Math.abs(candidate.x - start.x) > 5) {
if (Math.abs(mutable.x - start.x) > 5) {
continue;
}
if (Math.abs(candidate.z - start.z) > 5) {
if (Math.abs(mutable.z - start.z) > 5) {
continue;
}
// See whether the given position has already been processed
if (seen.contains(candidate)) {
if (seen.contains(mutable)) {
continue;
}
ICrop crop = cocoa.getCropAt(world, candidate.x, candidate.y, candidate.z);
ICrop crop = cocoa.getCropAt(world, mutable.x, mutable.y, mutable.z);
if (crop != null) {
Vect immutable = mutable.asImmutable();
crops.push(crop);
candidates.add(candidate);
seen.add(candidate);
} else if (VectUtil.isWoodBlock(world, candidate)) {
candidates.add(candidate);
seen.add(candidate);
candidates.add(immutable);
seen.add(immutable);
} else if (VectUtil.isWoodBlock(world, mutable)) {
Vect immutable = mutable.asImmutable();
candidates.add(immutable);
seen.add(immutable);
}
}
}
@@ -8,8 +8,9 @@
******************************************************************************/
package forestry.farming.logic;
import java.util.ArrayDeque;
import java.util.Collection;
import java.util.Stack;
import java.util.Deque;
import net.minecraft.init.Blocks;
import net.minecraft.item.ItemStack;
@@ -111,7 +112,7 @@ public abstract class FarmLogicCrops extends FarmLogicWatered {
public Collection<ICrop> harvest(int x, int y, int z, FarmDirection direction, int extent) {
World world = getWorld();
Stack<ICrop> crops = new Stack<>();
Deque<ICrop> crops = new ArrayDeque<>();
for (int i = 0; i < extent; i++) {
Vect position = translateWithOffset(x, y + 1, z, direction, i);
for (IFarmable seed : seeds) {
@@ -8,8 +8,9 @@
******************************************************************************/
package forestry.farming.logic;
import java.util.ArrayDeque;
import java.util.Collection;
import java.util.Stack;
import java.util.Deque;
import net.minecraft.init.Blocks;
import net.minecraft.init.Items;
@@ -68,7 +69,7 @@ public class FarmLogicEnder extends FarmLogicHomogeneous {
public Collection<ICrop> harvest(int x, int y, int z, FarmDirection direction, int extent) {
World world = getWorld();
Stack<ICrop> crops = new Stack<>();
Deque<ICrop> crops = new ArrayDeque<>();
for (int i = 0; i < extent; i++) {
Vect position = translateWithOffset(x, y + 1, z, direction, i);
for (IFarmable farmable : germlings) {
@@ -8,8 +8,9 @@
******************************************************************************/
package forestry.farming.logic;
import java.util.ArrayDeque;
import java.util.Collection;
import java.util.Stack;
import java.util.Deque;
import net.minecraft.init.Items;
import net.minecraft.item.ItemStack;
@@ -85,7 +86,7 @@ public class FarmLogicGourd extends FarmLogic {
public Collection<ICrop> harvest(int x, int y, int z, FarmDirection direction, int extent) {
World world = getWorld();
Stack<ICrop> crops = new Stack<>();
Deque<ICrop> crops = new ArrayDeque<>();
for (int i = 0; i < extent; i++) {
Vect position = translateWithOffset(x, y + 1, z, direction, i);
for (IFarmable seed : seeds) {
@@ -8,8 +8,9 @@
******************************************************************************/
package forestry.farming.logic;
import java.util.ArrayDeque;
import java.util.Collection;
import java.util.Stack;
import java.util.Deque;
import net.minecraft.init.Blocks;
import net.minecraft.init.Items;
@@ -68,7 +69,7 @@ public class FarmLogicInfernal extends FarmLogicHomogeneous {
public Collection<ICrop> harvest(int x, int y, int z, FarmDirection direction, int extent) {
World world = getWorld();
Stack<ICrop> crops = new Stack<>();
Deque<ICrop> crops = new ArrayDeque<>();
for (int i = 0; i < extent; i++) {
Vect position = translateWithOffset(x, y + 1, z, direction, i);
for (IFarmable farmable : germlings) {
@@ -8,13 +8,14 @@
******************************************************************************/
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.List;
import java.util.Set;
import java.util.Stack;
import net.minecraft.block.Block;
import net.minecraft.init.Blocks;
@@ -35,6 +36,8 @@ import forestry.api.farming.IFarmHousing;
import forestry.api.farming.IFarmable;
import forestry.api.farming.IFarmableBasic;
import forestry.api.genetics.IFruitBearer;
import forestry.core.utils.vect.IVect;
import forestry.core.utils.vect.MutableVect;
import forestry.core.utils.vect.Vect;
import forestry.core.utils.vect.VectUtil;
import forestry.plugins.PluginCore;
@@ -144,8 +147,8 @@ public class FarmLogicOrchard extends FarmLogic {
private Collection<ICrop> getHarvestBlocks(Vect position) {
Set<Vect> seen = new HashSet<>();
Stack<ICrop> crops = new Stack<>();
Set<IVect> seen = new HashSet<>();
Deque<ICrop> crops = new ArrayDeque<>();
World world = getWorld();
@@ -158,8 +161,8 @@ public class FarmLogicOrchard extends FarmLogic {
List<Vect> candidates = processHarvestBlock(crops, seen, position, position);
List<Vect> temp = new ArrayList<>();
while (!candidates.isEmpty() && crops.size() < 20) {
for (Vect candidate : candidates) {
temp.addAll(processHarvestBlock(crops, seen, position, candidate));
for (int i = 0; i < candidates.size(); i++) {
temp.addAll(processHarvestBlock(crops, seen, position, candidates.get(i)));
}
candidates.clear();
candidates.addAll(temp);
@@ -169,39 +172,41 @@ public class FarmLogicOrchard extends FarmLogic {
return crops;
}
private List<Vect> processHarvestBlock(Stack<ICrop> crops, Set<Vect> seen, Vect start, Vect position) {
private List<Vect> processHarvestBlock(Deque<ICrop> crops, Set<IVect> seen, IVect start, IVect position) {
World world = getWorld();
List<Vect> candidates = new ArrayList<>();
final MutableVect mutable = new MutableVect();
// Get additional candidates to return
for (int i = -2; i < 3; i++) {
for (int j = 0; j < 2; j++) {
for (int k = -1; k < 2; k++) {
Vect candidate = position.add(i, j, k);
if (Math.abs(candidate.x - start.x) > 5) {
mutable.set(position).add(i, j, k);
if (Math.abs(mutable.getX() - start.getX()) > 5) {
continue;
}
if (Math.abs(candidate.z - start.z) > 5) {
if (Math.abs(mutable.getZ() - start.getZ()) > 5) {
continue;
}
// See whether the given position has already been processed
if (seen.contains(candidate)) {
if (seen.contains(mutable)) {
continue;
}
if (VectUtil.isAirBlock(world, candidate)) {
if (VectUtil.isAirBlock(world, mutable)) {
continue;
}
if (VectUtil.isWoodBlock(world, candidate)
|| isBlockTraversable(world, candidate, traversalBlocks)) {
candidates.add(candidate);
seen.add(candidate);
} else if (isFruitBearer(world, candidate)) {
candidates.add(candidate);
seen.add(candidate);
if (VectUtil.isWoodBlock(world, mutable) || isBlockTraversable(world, mutable, traversalBlocks)) {
final Vect immutable = new Vect(mutable);
candidates.add(immutable);
seen.add(immutable);
} else if (isFruitBearer(world, mutable)) {
final Vect immutable = new Vect(mutable);
candidates.add(immutable);
seen.add(immutable);
ICrop crop = getCrop(world, candidate);
ICrop crop = getCrop(world, immutable);
if (crop != null) {
crops.push(crop);
}
@@ -213,20 +218,20 @@ public class FarmLogicOrchard extends FarmLogic {
return candidates;
}
private boolean isFruitBearer(World world, Vect position) {
private boolean isFruitBearer(World world, IVect position) {
TileEntity tile = world.getTileEntity(position.x, position.y, position.z);
TileEntity tile = world.getTileEntity(position.getX(), position.getY(), position.getZ());
if (tile instanceof IFruitBearer) {
return true;
}
Block block = precalcBlockType ? world.getBlock(position.x, position.y, position.z) : null;
int meta = precalcBlockMeta ? world.getBlockMetadata(position.x, position.y, position.z) : -1;
Block block = precalcBlockType ? world.getBlock(position.getX(), position.getY(), position.getZ()) : null;
int meta = precalcBlockMeta ? world.getBlockMetadata(position.getX(), position.getY(), position.getZ()) : -1;
for (IFarmable farmable : farmables) {
if (farmable instanceof IFarmableBasic) {
if (((IFarmableBasic) farmable).isSapling(block, meta)) return true;
} else if (farmable.isSaplingAt(world, position.x, position.y, position.z)) {
} else if (farmable.isSaplingAt(world, position.getX(), position.getY(), position.getZ())) {
return true;
}
}
@@ -234,29 +239,28 @@ public class FarmLogicOrchard extends FarmLogic {
return false;
}
private static boolean isBlockTraversable(World world, Vect position, ImmutableList<Block> traversalBlocks) {
private static boolean isBlockTraversable(World world, IVect position, ImmutableList<Block> traversalBlocks) {
Block candidate = VectUtil.getBlock(world, position);
for (Block block : traversalBlocks) {
if (block == (candidate)) {
for (int i = 0; i < traversalBlocks.size(); i++) {
if (candidate == traversalBlocks.get(i)) {
return true;
}
}
return false;
}
private ICrop getCrop(World world, Vect position) {
private ICrop getCrop(World world, IVect position) {
TileEntity tile = world.getTileEntity(position.x, position.y, position.z);
TileEntity tile = world.getTileEntity(position.getX(), position.getY(), position.getZ());
if (tile instanceof IFruitBearer) {
IFruitBearer fruitBearer = (IFruitBearer) tile;
if (tile instanceof IFruitBearer fruitBearer) {
if (fruitBearer.hasFruit() && fruitBearer.getRipeness() >= 0.9f) {
return new CropFruit(world, position);
return new CropFruit(world, position.asImmutable());
}
} else {
for (IFarmable seed : farmables) {
ICrop crop = seed.getCropAt(world, position.x, position.y, position.z);
ICrop crop = seed.getCropAt(world, position.getX(), position.getY(), position.getZ());
if (crop != null) {
return crop;
}
@@ -8,8 +8,9 @@
******************************************************************************/
package forestry.farming.logic;
import java.util.ArrayDeque;
import java.util.Collection;
import java.util.Stack;
import java.util.Deque;
import net.minecraft.block.Block;
import net.minecraft.item.ItemStack;
@@ -77,7 +78,7 @@ public class FarmLogicPeat extends FarmLogicWatered {
public Collection<ICrop> harvest(int x, int y, int z, FarmDirection direction, int extent) {
World world = getWorld();
Stack<ICrop> crops = new Stack<>();
Deque<ICrop> crops = new ArrayDeque<>();
for (int i = 0; i < extent; i++) {
Vect position = translateWithOffset(x, y, z, direction, i);
ItemStack occupant = VectUtil.getAsItemStack(world, position);
@@ -8,8 +8,9 @@
******************************************************************************/
package forestry.farming.logic;
import java.util.ArrayDeque;
import java.util.Collection;
import java.util.Stack;
import java.util.Deque;
import net.minecraft.init.Blocks;
import net.minecraft.init.Items;
@@ -99,7 +100,7 @@ public class FarmLogicReeds extends FarmLogic {
public Collection<ICrop> harvest(int x, int y, int z, FarmDirection direction, int extent) {
World world = getWorld();
Stack<ICrop> crops = new Stack<>();
Deque<ICrop> crops = new ArrayDeque<>();
for (int i = 0; i < extent; i++) {
Vect position = translateWithOffset(x, y + 1, z, direction, i);
for (IFarmable seed : germlings) {
@@ -8,12 +8,13 @@
******************************************************************************/
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.init.Items;
@@ -28,6 +29,8 @@ import forestry.api.farming.ICrop;
import forestry.api.farming.IFarmHousing;
import forestry.core.utils.ItemStackUtil;
import forestry.core.utils.Log;
import forestry.core.utils.vect.IVect;
import forestry.core.utils.vect.MutableVect;
import forestry.core.utils.vect.Vect;
import forestry.core.utils.vect.VectUtil;
import forestry.plugins.compat.PluginIC2;
@@ -122,8 +125,8 @@ public class FarmLogicRubber extends FarmLogic {
private Collection<ICrop> getHarvestBlocks(Vect position) {
Set<Vect> seen = new HashSet<>();
Stack<ICrop> crops = new Stack<>();
Set<IVect> seen = new HashSet<>();
Deque<ICrop> crops = new ArrayDeque<>();
World world = getWorld();
@@ -152,31 +155,34 @@ public class FarmLogicRubber extends FarmLogic {
return crops;
}
private ArrayList<Vect> processHarvestBlock(Stack<ICrop> crops, Set<Vect> seen, Vect position) {
private ArrayList<Vect> processHarvestBlock(Deque<ICrop> crops, Set<IVect> seen, Vect position) {
World world = getWorld();
ArrayList<Vect> candidates = new ArrayList<>();
// Get additional candidates to return
final MutableVect mutable = new MutableVect();
for (int j = 0; j < 2; j++) {
Vect candidate = new Vect(position.x, position.y + j, position.z);
if (candidate.equals(position)) {
// Vect candidate = new Vect(position.x, position.y + j, position.z);
mutable.y = position.y + j;
if (mutable.equals(position)) {
continue;
}
// See whether the given position has already been processed
if (seen.contains(candidate)) {
if (seen.contains(mutable)) {
continue;
}
Block block = VectUtil.getBlock(world, candidate);
Block block = VectUtil.getBlock(world, mutable);
if (ItemStackUtil.equals(block, PluginIC2.rubberwood)) {
int meta = VectUtil.getBlockMeta(world, candidate);
final Vect immutable = new Vect(mutable);
int meta = VectUtil.getBlockMeta(world, immutable);
if (meta >= 2 && meta <= 5) {
crops.push(new CropRubber(world, block, meta, candidate));
crops.push(new CropRubber(world, block, meta, immutable));
}
candidates.add(candidate);
seen.add(candidate);
candidates.add(immutable);
seen.add(immutable);
}
}
@@ -8,8 +8,9 @@
******************************************************************************/
package forestry.farming.logic;
import java.util.ArrayDeque;
import java.util.Collection;
import java.util.Stack;
import java.util.Deque;
import net.minecraft.init.Blocks;
import net.minecraft.init.Items;
@@ -99,7 +100,7 @@ public class FarmLogicSucculent extends FarmLogic {
public Collection<ICrop> harvest(int x, int y, int z, FarmDirection direction, int extent) {
World world = getWorld();
Stack<ICrop> crops = new Stack<>();
Deque<ICrop> crops = new ArrayDeque<>();
for (int i = 0; i < extent; i++) {
Vect position = translateWithOffset(x, y + 1, z, direction, i);
for (IFarmable seed : germlings) {
Loaded 100 of 122 files, more files were not shown because too many files have changed in this diff. Show more