diff --git a/CHANGELOG.md b/CHANGELOG.md index d8a433918..2e0483c18 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,44 @@ # Refined Storage Changelog +### 1.9.15 + +- Fixed Refined Storage Addons compatibility (Darkere) + +### 1.9.14 + +- Implemented Curios support (Darkere) + +### 1.9.13 + +- Fixed count on Storage Monitor having Z fighting (tivec) +- Fixed items on Storage Monitor not being flat (raoulvdberge) +- Removed experimental pipeline nagging message (raoulvdberge) +- Fixed crash when using an External Storage on a fluid inventory (jeremiahwinsley) +- Added some performance improvements for autocrafting (necauqua, Darkere) +- Fixed a memory leak in the pattern cache (necauqua) +- Fixed Detector crashing when dyed (Darkere) +- Fixed autocrafting being stuck after clicking "Start" (necauqua) +- Fixed Crafting Monitor not being able to show hours (Darkere) +- Fixed capacity rendering of infinite storages (Darkere) +- Fixed wrong alignment for the JEI request autocrafting tooltip (Darkere) +- Fixed mobs getting stuck in Refined Storage cables (Darkere) +- Fixed dismantling storage blocks ignoring stack size (Darkere) +- Fixed Ice and Fire banners breaking with Refined Storage (Darkere, necauqua) +- Fixed empty keybinding causing GL errors (Darkere) +- Fixed some parts of the Japanese translation (akihironagai) +- Fixed rendering issue on blocks when using OptiFine (ylou) + +### 1.9.12 + +- Fixed some issues when using the Grid when it's offline (Darkere) +- Fixed crafting events not being fired in some cases in the Grid (Darkere) +- Fixed not being able to set fluid filter slot output quantity (Darkere) +- Fixed mod id search not working for Industrial Foregoing (Darkere) +- Fixed fluid autocrafting duplicating fluids (Darkere) +- Fixed some Grid crashes (ScoreUnder) +- Fixed constructor not using compare mode correctly in some cases (ScoreUnder) +- Fixed duplication bug in the Interface (Darkere) + ### 1.9.11 - Fixed disks and network devices not loading when they did not previously exist diff --git a/Jenkinsfile b/Jenkinsfile index 0c161fe52..23b8b26ca 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -22,9 +22,4 @@ node { stage('Publish artifacts') { sh "./gradlew publish" } - stage('SonarQube analysis') { - withCredentials([string(credentialsId: 'SONAR_TOKEN', variable: 'SONAR_TOKEN')]) { - sh "./gradlew sonarqube -Dsonar.login=$SONAR_TOKEN" - } - } } diff --git a/build.gradle b/build.gradle index 53df1b6f4..f4caed76d 100755 --- a/build.gradle +++ b/build.gradle @@ -1,16 +1,14 @@ buildscript { repositories { - maven { url = 'https://files.minecraftforge.net/maven' } - jcenter() + maven { url = 'https://maven.minecraftforge.net' } mavenCentral() } dependencies { - classpath group: 'net.minecraftforge.gradle', name: 'ForgeGradle', version: '3.+', changing: true + classpath group: 'net.minecraftforge.gradle', name: 'ForgeGradle', version: '4.1.+', changing: true } } plugins { - id "org.sonarqube" version "3.0" id 'info.solidsoft.pitest' version '1.5.1' } @@ -19,15 +17,13 @@ repositories { url = "https://dvs1.progwml6.com/files/maven/" } maven { - url "https://minecraft.curseforge.com/api/maven/" + url "https://www.cursemaven.com" + content { + includeGroup "curse.maven" + } } -} - -sonarqube { - properties { - property "sonar.projectKey", "refinedmods_refinedstorage" - property "sonar.organization", "refinedmods" - property "sonar.host.url", "https://sonarcloud.io" + maven { + url = "https://maven.theillusivec4.top/" } } @@ -40,7 +36,7 @@ pitest { junit5PluginVersion = "0.12" } -version = '1.9.12' +version = '1.9.15' def env = System.getenv() if (env.BUILD_NUMBER) { version = version + "+" + "${env.BUILD_NUMBER}" @@ -48,10 +44,10 @@ if (env.BUILD_NUMBER) { group = 'com.refinedmods' archivesBaseName = 'refinedstorage' -sourceCompatibility = targetCompatibility = compileJava.sourceCompatibility = compileJava.targetCompatibility = '1.8' +java.toolchain.languageVersion = JavaLanguageVersion.of(8) minecraft { - mappings channel: 'snapshot', version: '20200723-1.16.1' + mappings channel: 'snapshot', version: '20210309-1.16.5' accessTransformer = file('src/main/resources/META-INF/accesstransformer.cfg') runs { @@ -116,14 +112,17 @@ processResources { } dependencies { - minecraft 'net.minecraftforge:forge:1.16.3-34.1.0' + minecraft 'net.minecraftforge:forge:1.16.5-36.1.31' - compileOnly fg.deobf("mezz.jei:jei-1.16.3:7.3.2.36:api") - runtimeOnly fg.deobf("mezz.jei:jei-1.16.3:7.3.2.36") + compileOnly fg.deobf("mezz.jei:jei-1.16.5:7.7.0.106:api") + runtimeOnly fg.deobf("mezz.jei:jei-1.16.5:7.7.0.106") - compileOnly 'mouse-tweaks:MouseTweaks:2.13:mc1.16.2' + compileOnly fg.deobf('curse.maven:mouse-tweaks-60089:3202662') - runtimeOnly fg.deobf('crafting-tweaks:CraftingTweaks_1.16.2:12.1.0') + compileOnly fg.deobf('curse.maven:crafting-tweaks-233071:3330406') + + runtimeOnly fg.deobf("top.theillusivec4.curios:curios-forge:1.16.5-4.0.5.2") + compileOnly fg.deobf("top.theillusivec4.curios:curios-forge:1.16.5-4.0.5.2:api") testImplementation('org.junit.jupiter:junit-jupiter-api:5.6.2') testRuntime('org.junit.jupiter:junit-jupiter-engine:5.6.2') diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 7a3265ee9..e708b1c02 100644 Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 086b56fe1..549d84424 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-6.9-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.6-bin.zip diff --git a/gradlew b/gradlew index cccdd3d51..4f906e0c8 100755 --- a/gradlew +++ b/gradlew @@ -1,5 +1,21 @@ #!/usr/bin/env sh +# +# Copyright 2015 the original author or authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + ############################################################################## ## ## Gradle start up script for UN*X @@ -28,7 +44,7 @@ APP_NAME="Gradle" APP_BASE_NAME=`basename "$0"` # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS="" +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD="maximum" @@ -66,6 +82,7 @@ esac CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + # Determine the Java command to use to start the JVM. if [ -n "$JAVA_HOME" ] ; then if [ -x "$JAVA_HOME/jre/sh/java" ] ; then @@ -109,10 +126,11 @@ if $darwin; then GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" fi -# For Cygwin, switch paths to Windows format before running java -if $cygwin ; then +# For Cygwin or MSYS, switch paths to Windows format before running java +if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then APP_HOME=`cygpath --path --mixed "$APP_HOME"` CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + JAVACMD=`cygpath --unix "$JAVACMD"` # We build the pattern for arguments to be converted via cygpath @@ -138,19 +156,19 @@ if $cygwin ; then else eval `echo args$i`="\"$arg\"" fi - i=$((i+1)) + i=`expr $i + 1` done case $i in - (0) set -- ;; - (1) set -- "$args0" ;; - (2) set -- "$args0" "$args1" ;; - (3) set -- "$args0" "$args1" "$args2" ;; - (4) set -- "$args0" "$args1" "$args2" "$args3" ;; - (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; - (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; - (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; - (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; - (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + 0) set -- ;; + 1) set -- "$args0" ;; + 2) set -- "$args0" "$args1" ;; + 3) set -- "$args0" "$args1" "$args2" ;; + 4) set -- "$args0" "$args1" "$args2" "$args3" ;; + 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; esac fi @@ -159,14 +177,9 @@ save () { for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done echo " " } -APP_ARGS=$(save "$@") +APP_ARGS=`save "$@"` # Collect all arguments for the java command, following the shell quoting and substitution rules eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" -# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong -if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then - cd "$(dirname "$0")" -fi - exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat index f9553162f..107acd32c 100755 --- a/gradlew.bat +++ b/gradlew.bat @@ -1,3 +1,19 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + @if "%DEBUG%" == "" @echo off @rem ########################################################################## @rem @@ -13,15 +29,18 @@ if "%DIRNAME%" == "" set DIRNAME=. set APP_BASE_NAME=%~n0 set APP_HOME=%DIRNAME% +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS= +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" @rem Find java.exe if defined JAVA_HOME goto findJavaFromJavaHome set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto init +if "%ERRORLEVEL%" == "0" goto execute echo. echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. @@ -35,7 +54,7 @@ goto fail set JAVA_HOME=%JAVA_HOME:"=% set JAVA_EXE=%JAVA_HOME%/bin/java.exe -if exist "%JAVA_EXE%" goto init +if exist "%JAVA_EXE%" goto execute echo. echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% @@ -45,28 +64,14 @@ echo location of your Java installation. goto fail -:init -@rem Get command-line arguments, handling Windows variants - -if not "%OS%" == "Windows_NT" goto win9xME_args - -:win9xME_args -@rem Slurp the command line arguments. -set CMD_LINE_ARGS= -set _SKIP=2 - -:win9xME_args_slurp -if "x%~1" == "x" goto execute - -set CMD_LINE_ARGS=%* - :execute @rem Setup the command line set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + @rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* :end @rem End local scope for the variables with windows NT shell diff --git a/src/main/java/com/refinedmods/refinedstorage/RS.java b/src/main/java/com/refinedmods/refinedstorage/RS.java index 0ab8860ba..d39a983eb 100644 --- a/src/main/java/com/refinedmods/refinedstorage/RS.java +++ b/src/main/java/com/refinedmods/refinedstorage/RS.java @@ -4,6 +4,7 @@ import com.refinedmods.refinedstorage.apiimpl.API; import com.refinedmods.refinedstorage.config.ClientConfig; import com.refinedmods.refinedstorage.config.ServerConfig; import com.refinedmods.refinedstorage.datageneration.DataGenerators; +import com.refinedmods.refinedstorage.integration.curios.CuriosIntegration; import com.refinedmods.refinedstorage.item.group.MainItemGroup; import com.refinedmods.refinedstorage.network.NetworkHandler; import com.refinedmods.refinedstorage.setup.ClientSetup; @@ -49,6 +50,7 @@ public final class RS { FMLJavaModLoadingContext.get().getModEventBus().addGenericListener(IRecipeSerializer.class, commonSetup::onRegisterRecipeSerializers); FMLJavaModLoadingContext.get().getModEventBus().addGenericListener(ContainerType.class, commonSetup::onRegisterContainers); FMLJavaModLoadingContext.get().getModEventBus().register(new DataGenerators()); + FMLJavaModLoadingContext.get().getModEventBus().register(new CuriosIntegration()); API.deliver(); } diff --git a/src/main/java/com/refinedmods/refinedstorage/apiimpl/autocrafting/task/v6/node/NodeRequirements.java b/src/main/java/com/refinedmods/refinedstorage/apiimpl/autocrafting/task/v6/node/NodeRequirements.java index 7f3c91f8d..c98288228 100644 --- a/src/main/java/com/refinedmods/refinedstorage/apiimpl/autocrafting/task/v6/node/NodeRequirements.java +++ b/src/main/java/com/refinedmods/refinedstorage/apiimpl/autocrafting/task/v6/node/NodeRequirements.java @@ -12,6 +12,7 @@ import net.minecraft.nbt.ListNBT; import net.minecraftforge.common.util.Constants; import net.minecraftforge.fluids.FluidStack; +import javax.annotation.Nullable; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.List; @@ -30,6 +31,11 @@ public class NodeRequirements { private final Map> fluidRequirements = new LinkedHashMap<>(); private final Map fluidsNeededPerCraft = new LinkedHashMap<>(); + @Nullable + private IStackList cachedSimulatedItemRequirementSet = null; + @Nullable + private IStackList cachedSimulatedFluidRequirementSet = null; + public void addItemRequirement(int ingredientNumber, ItemStack stack, int size, int perCraft) { if (!itemsNeededPerCraft.containsKey(ingredientNumber)) { itemsNeededPerCraft.put(ingredientNumber, perCraft); @@ -37,6 +43,7 @@ public class NodeRequirements { IStackList list = itemRequirements.computeIfAbsent(ingredientNumber, key -> API.instance().createItemStackList()); list.add(stack, size); + cachedSimulatedItemRequirementSet = null; } public void addFluidRequirement(int ingredientNumber, FluidStack stack, int size, int perCraft) { @@ -46,9 +53,15 @@ public class NodeRequirements { IStackList list = fluidRequirements.computeIfAbsent(ingredientNumber, key -> API.instance().createFluidStackList()); list.add(stack, size); + cachedSimulatedFluidRequirementSet = null; } public IStackList getSingleItemRequirementSet(boolean simulate) { + IStackList cached = cachedSimulatedItemRequirementSet; + if (simulate && cached != null) { + return cached; + } + IStackList toReturn = API.instance().createItemStackList(); for (int i = 0; i < itemRequirements.size(); i++) { @@ -83,10 +96,17 @@ public class NodeRequirements { } } + cachedSimulatedItemRequirementSet = simulate ? toReturn : null; + return toReturn; } public IStackList getSingleFluidRequirementSet(boolean simulate) { + IStackList cached = cachedSimulatedFluidRequirementSet; + if (simulate && cached != null) { + return cached; + } + IStackList toReturn = API.instance().createFluidStackList(); for (int i = 0; i < fluidRequirements.size(); i++) { @@ -121,6 +141,8 @@ public class NodeRequirements { } } + cachedSimulatedFluidRequirementSet = simulate ? toReturn : null; + return toReturn; } diff --git a/src/main/java/com/refinedmods/refinedstorage/apiimpl/autocrafting/task/v6/node/ProcessingNode.java b/src/main/java/com/refinedmods/refinedstorage/apiimpl/autocrafting/task/v6/node/ProcessingNode.java index c56f5fc3b..6c718d520 100644 --- a/src/main/java/com/refinedmods/refinedstorage/apiimpl/autocrafting/task/v6/node/ProcessingNode.java +++ b/src/main/java/com/refinedmods/refinedstorage/apiimpl/autocrafting/task/v6/node/ProcessingNode.java @@ -132,9 +132,11 @@ public class ProcessingNode extends Node { if (canInsertFullAmount) { canInsertFullAmount = IoUtil.insertIntoInventory(container.getConnectedFluidInventory(), extractedFluids.getStacks(), Action.SIMULATE); } + } else { + break; } - if (hasAllRequirements && !canInsertFullAmount) { + if (!canInsertFullAmount) { if (allRejected) { this.state = ProcessingState.MACHINE_DOES_NOT_ACCEPT; } @@ -144,21 +146,19 @@ public class ProcessingNode extends Node { allRejected = false; } - if (hasAllRequirements && canInsertFullAmount) { - this.state = ProcessingState.READY; + this.state = ProcessingState.READY; - extractedItems = IoUtil.extractFromInternalItemStorage(requirements.getSingleItemRequirementSet(false), internalStorage, Action.PERFORM); - extractedFluids = IoUtil.extractFromInternalFluidStorage(requirements.getSingleFluidRequirementSet(false), internalFluidStorage, Action.PERFORM); + extractedItems = IoUtil.extractFromInternalItemStorage(requirements.getSingleItemRequirementSet(false), internalStorage, Action.PERFORM); + extractedFluids = IoUtil.extractFromInternalFluidStorage(requirements.getSingleFluidRequirementSet(false), internalFluidStorage, Action.PERFORM); - IoUtil.insertIntoInventory(container.getConnectedInventory(), extractedItems.getStacks(), Action.PERFORM); - IoUtil.insertIntoInventory(container.getConnectedFluidInventory(), extractedFluids.getStacks(), Action.PERFORM); + IoUtil.insertIntoInventory(container.getConnectedInventory(), extractedItems.getStacks(), Action.PERFORM); + IoUtil.insertIntoInventory(container.getConnectedFluidInventory(), extractedFluids.getStacks(), Action.PERFORM); - next(); + next(); - listener.onSingleDone(this); + listener.onSingleDone(this); - container.onUsedForProcessing(); - } + container.onUsedForProcessing(); } } } diff --git a/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/NetworkNodeGraphEntry.java b/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/NetworkNodeGraphEntry.java index 9d7bad12c..018d6fde6 100644 --- a/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/NetworkNodeGraphEntry.java +++ b/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/NetworkNodeGraphEntry.java @@ -26,7 +26,7 @@ public class NetworkNodeGraphEntry implements INetworkNodeGraphEntry { NetworkNodeGraphEntry otherItem = (NetworkNodeGraphEntry) other; - if (node.getWorld().func_234923_W_() != otherItem.node.getWorld().func_234923_W_()) { + if (node.getWorld().getDimensionKey() != otherItem.node.getWorld().getDimensionKey()) { return false; } @@ -36,7 +36,7 @@ public class NetworkNodeGraphEntry implements INetworkNodeGraphEntry { @Override public int hashCode() { int result = node.getPos().hashCode(); - result = 31 * result + node.getWorld().func_234923_W_().hashCode(); + result = 31 * result + node.getWorld().getDimensionKey().hashCode(); return result; } } diff --git a/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/grid/handler/FluidGridHandler.java b/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/grid/handler/FluidGridHandler.java index 825a388eb..d482df178 100644 --- a/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/grid/handler/FluidGridHandler.java +++ b/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/grid/handler/FluidGridHandler.java @@ -99,40 +99,36 @@ public class FluidGridHandler implements IFluidGridHandler { FluidStack stack = network.getFluidStorageCache().getCraftablesList().get(id); if (stack != null) { - Thread calculationThread = new Thread(() -> { - ICalculationResult result = network.getCraftingManager().create(stack, quantity); - if (result == null) { - return; - } + ICalculationResult result = network.getCraftingManager().create(stack, quantity); + if (result == null) { + return; + } - if (!result.isOk() && result.getType() != CalculationResultType.MISSING) { - RS.NETWORK_HANDLER.sendTo( - player, - new GridCraftingPreviewResponseMessage( - Collections.singletonList(new ErrorCraftingPreviewElement(result.getType(), result.getRecursedPattern() == null ? ItemStack.EMPTY : result.getRecursedPattern().getStack())), - id, - quantity, - true - ) - ); - } else if (result.isOk() && noPreview) { - network.getCraftingManager().start(result.getTask()); + if (!result.isOk() && result.getType() != CalculationResultType.MISSING) { + RS.NETWORK_HANDLER.sendTo( + player, + new GridCraftingPreviewResponseMessage( + Collections.singletonList(new ErrorCraftingPreviewElement(result.getType(), result.getRecursedPattern() == null ? ItemStack.EMPTY : result.getRecursedPattern().getStack())), + id, + quantity, + true + ) + ); + } else if (result.isOk() && noPreview) { + network.getCraftingManager().start(result.getTask()); - RS.NETWORK_HANDLER.sendTo(player, new GridCraftingStartResponseMessage()); - } else { - RS.NETWORK_HANDLER.sendTo( - player, - new GridCraftingPreviewResponseMessage( - result.getPreviewElements(), - id, - quantity, - true - ) - ); - } - }, "RS crafting preview calculation"); - - calculationThread.start(); + RS.NETWORK_HANDLER.sendTo(player, new GridCraftingStartResponseMessage()); + } else { + RS.NETWORK_HANDLER.sendTo( + player, + new GridCraftingPreviewResponseMessage( + result.getPreviewElements(), + id, + quantity, + true + ) + ); + } } } diff --git a/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/grid/handler/ItemGridHandler.java b/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/grid/handler/ItemGridHandler.java index 4232695a6..2194551c2 100644 --- a/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/grid/handler/ItemGridHandler.java +++ b/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/grid/handler/ItemGridHandler.java @@ -190,37 +190,33 @@ public class ItemGridHandler implements IItemGridHandler { ItemStack stack = network.getItemStorageCache().getCraftablesList().get(id); if (stack != null) { - Thread calculationThread = new Thread(() -> { - ICalculationResult result = network.getCraftingManager().create(stack, quantity); + ICalculationResult result = network.getCraftingManager().create(stack, quantity); - if (!result.isOk() && result.getType() != CalculationResultType.MISSING) { - RS.NETWORK_HANDLER.sendTo( - player, - new GridCraftingPreviewResponseMessage( - Collections.singletonList(new ErrorCraftingPreviewElement(result.getType(), result.getRecursedPattern() == null ? ItemStack.EMPTY : result.getRecursedPattern().getStack())), - id, - quantity, - false - ) - ); - } else if (result.isOk() && noPreview) { - network.getCraftingManager().start(result.getTask()); + if (!result.isOk() && result.getType() != CalculationResultType.MISSING) { + RS.NETWORK_HANDLER.sendTo( + player, + new GridCraftingPreviewResponseMessage( + Collections.singletonList(new ErrorCraftingPreviewElement(result.getType(), result.getRecursedPattern() == null ? ItemStack.EMPTY : result.getRecursedPattern().getStack())), + id, + quantity, + false + ) + ); + } else if (result.isOk() && noPreview) { + network.getCraftingManager().start(result.getTask()); - RS.NETWORK_HANDLER.sendTo(player, new GridCraftingStartResponseMessage()); - } else { - RS.NETWORK_HANDLER.sendTo( - player, - new GridCraftingPreviewResponseMessage( - result.getPreviewElements(), - id, - quantity, - false - ) - ); - } - }, "RS crafting preview calculation"); - - calculationThread.start(); + RS.NETWORK_HANDLER.sendTo(player, new GridCraftingStartResponseMessage()); + } else { + RS.NETWORK_HANDLER.sendTo( + player, + new GridCraftingPreviewResponseMessage( + result.getPreviewElements(), + id, + quantity, + false + ) + ); + } } } diff --git a/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/item/NetworkItemManager.java b/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/item/NetworkItemManager.java index e0639bfdb..a925eada5 100644 --- a/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/item/NetworkItemManager.java +++ b/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/item/NetworkItemManager.java @@ -33,7 +33,7 @@ public class NetworkItemManager implements INetworkItemManager { if (node instanceof IWirelessTransmitter && network.canRun() && node.isActive() && - ((IWirelessTransmitter) node).getDimension() == player.getEntityWorld().func_234923_W_()) { + ((IWirelessTransmitter) node).getDimension() == player.getEntityWorld().getDimensionKey()) { IWirelessTransmitter transmitter = (IWirelessTransmitter) node; Vector3d pos = player.getPositionVec(); diff --git a/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/node/CrafterNetworkNode.java b/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/node/CrafterNetworkNode.java index d4f45fa25..c79014ab8 100644 --- a/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/node/CrafterNetworkNode.java +++ b/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/node/CrafterNetworkNode.java @@ -30,6 +30,7 @@ import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.IItemHandlerModifiable; import net.minecraftforge.items.wrapper.CombinedInvWrapper; +import javax.annotation.Nonnull; import javax.annotation.Nullable; import java.util.ArrayList; import java.util.List; @@ -67,6 +68,16 @@ public class CrafterNetworkNode extends NetworkNode implements ICraftingPatternC public int getSlotLimit(int slot) { return 1; } + + @Nonnull + @Override + public ItemStack insertItem(int slot, @Nonnull ItemStack stack, boolean simulate) { + if (!stacks.get(slot).isEmpty()) { + return stack; + } + + return super.insertItem(slot, stack, simulate); + } } .addValidator(new PatternItemValidator(world)) .addListener(new NetworkNodeInventoryListener(this)) @@ -183,7 +194,7 @@ public class CrafterNetworkNode extends NetworkNode implements ICraftingPatternC StackUtils.readItems(upgrades, 1, tag); if (tag.contains(NBT_DISPLAY_NAME)) { - displayName = ITextComponent.Serializer.func_240643_a_(tag.getString(NBT_DISPLAY_NAME)); + displayName = ITextComponent.Serializer.getComponentFromJson(tag.getString(NBT_DISPLAY_NAME)); } if (tag.hasUniqueId(NBT_UUID)) { diff --git a/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/node/NetworkTransmitterNetworkNode.java b/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/node/NetworkTransmitterNetworkNode.java index 296e8c3e5..fb7012379 100644 --- a/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/node/NetworkTransmitterNetworkNode.java +++ b/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/node/NetworkTransmitterNetworkNode.java @@ -98,7 +98,7 @@ public class NetworkTransmitterNetworkNode extends NetworkNode { } public boolean isSameDimension() { - return world.func_234923_W_() == receiverDimension; + return world.getDimensionKey() == receiverDimension; } private boolean canTransmit() { diff --git a/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/node/WirelessTransmitterNetworkNode.java b/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/node/WirelessTransmitterNetworkNode.java index a4767131e..1b496e417 100644 --- a/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/node/WirelessTransmitterNetworkNode.java +++ b/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/node/WirelessTransmitterNetworkNode.java @@ -62,7 +62,7 @@ public class WirelessTransmitterNetworkNode extends NetworkNode implements IWire @Override public RegistryKey getDimension() { - return world.func_234923_W_(); + return world.getDimensionKey(); } public BaseItemHandler getUpgrades() { diff --git a/src/main/java/com/refinedmods/refinedstorage/apiimpl/storage/disk/ItemStorageDisk.java b/src/main/java/com/refinedmods/refinedstorage/apiimpl/storage/disk/ItemStorageDisk.java index f67425d0f..ae5bebc61 100644 --- a/src/main/java/com/refinedmods/refinedstorage/apiimpl/storage/disk/ItemStorageDisk.java +++ b/src/main/java/com/refinedmods/refinedstorage/apiimpl/storage/disk/ItemStorageDisk.java @@ -82,7 +82,7 @@ public class ItemStorageDisk implements IStorageDisk { @Nonnull public ItemStack insert(@Nonnull ItemStack stack, int size, Action action) { if (stack.isEmpty() || itemCount == capacity) { - return stack; + return ItemHandlerHelper.copyStackWithSize(stack, size); } for (ItemStack otherStack : stacks.get(stack.getItem())) { diff --git a/src/main/java/com/refinedmods/refinedstorage/apiimpl/storage/externalstorage/FluidExternalStorage.java b/src/main/java/com/refinedmods/refinedstorage/apiimpl/storage/externalstorage/FluidExternalStorage.java index 066d5d5bd..ea40e6ca3 100644 --- a/src/main/java/com/refinedmods/refinedstorage/apiimpl/storage/externalstorage/FluidExternalStorage.java +++ b/src/main/java/com/refinedmods/refinedstorage/apiimpl/storage/externalstorage/FluidExternalStorage.java @@ -83,8 +83,11 @@ public class FluidExternalStorage implements IExternalStorage { return stack; } - if (context.acceptsFluid(stack)) { - int filled = handlerSupplier.get().fill(StackUtils.copy(stack, size), action == Action.PERFORM ? IFluidHandler.FluidAction.EXECUTE : IFluidHandler.FluidAction.SIMULATE); + IFluidHandler handler = handlerSupplier.get(); + + if (context.acceptsFluid(stack) && handler != null) { + + int filled = handler.fill(StackUtils.copy(stack, size), action == Action.PERFORM ? IFluidHandler.FluidAction.EXECUTE : IFluidHandler.FluidAction.SIMULATE); if (filled == size) { return FluidStack.EMPTY; diff --git a/src/main/java/com/refinedmods/refinedstorage/apiimpl/storage/tracker/ItemStorageTracker.java b/src/main/java/com/refinedmods/refinedstorage/apiimpl/storage/tracker/ItemStorageTracker.java index 407b09732..18fc55b60 100644 --- a/src/main/java/com/refinedmods/refinedstorage/apiimpl/storage/tracker/ItemStorageTracker.java +++ b/src/main/java/com/refinedmods/refinedstorage/apiimpl/storage/tracker/ItemStorageTracker.java @@ -2,7 +2,7 @@ package com.refinedmods.refinedstorage.apiimpl.storage.tracker; import com.refinedmods.refinedstorage.api.storage.tracker.IStorageTracker; import com.refinedmods.refinedstorage.api.storage.tracker.StorageTrackerEntry; -import com.refinedmods.refinedstorage.apiimpl.API; +import com.refinedmods.refinedstorage.util.ItemStackKey; import com.refinedmods.refinedstorage.util.StackUtils; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; @@ -17,7 +17,7 @@ public class ItemStorageTracker implements IStorageTracker { private static final String NBT_NAME = "Name"; private static final String NBT_TIME = "Time"; - private final Map changes = new HashMap<>(); + private final Map changes = new HashMap<>(); private final Runnable listener; public ItemStorageTracker(Runnable listener) { @@ -26,14 +26,14 @@ public class ItemStorageTracker implements IStorageTracker { @Override public void changed(PlayerEntity player, ItemStack stack) { - changes.put(new Key(stack), new StorageTrackerEntry(System.currentTimeMillis(), player.getName().getString())); + changes.put(new ItemStackKey(stack), new StorageTrackerEntry(System.currentTimeMillis(), player.getName().getString())); listener.run(); } @Override public StorageTrackerEntry get(ItemStack stack) { - return changes.get(new Key(stack)); + return changes.get(new ItemStackKey(stack)); } public void readFromNbt(ListNBT list) { @@ -43,7 +43,7 @@ public class ItemStorageTracker implements IStorageTracker { ItemStack stack = StackUtils.deserializeStackFromNbt(tag.getCompound(NBT_STACK)); if (!stack.isEmpty()) { - changes.put(new Key(stack), new StorageTrackerEntry(tag.getLong(NBT_TIME), tag.getString(NBT_NAME))); + changes.put(new ItemStackKey(stack), new StorageTrackerEntry(tag.getLong(NBT_TIME), tag.getString(NBT_NAME))); } } } @@ -51,34 +51,16 @@ public class ItemStorageTracker implements IStorageTracker { public ListNBT serializeNbt() { ListNBT list = new ListNBT(); - for (Map.Entry entry : changes.entrySet()) { + for (Map.Entry entry : changes.entrySet()) { CompoundNBT tag = new CompoundNBT(); tag.putLong(NBT_TIME, entry.getValue().getTime()); tag.putString(NBT_NAME, entry.getValue().getName()); - tag.put(NBT_STACK, StackUtils.serializeStackToNbt(entry.getKey().stack)); + tag.put(NBT_STACK, StackUtils.serializeStackToNbt(entry.getKey().getStack())); list.add(tag); } return list; } - - private static class Key { - private final ItemStack stack; - - public Key(ItemStack stack) { - this.stack = stack; - } - - @Override - public boolean equals(Object other) { - return other instanceof Key && API.instance().getComparer().isEqualNoQuantity(stack, ((Key) other).stack); - } - - @Override - public int hashCode() { - return API.instance().getItemStackHashCode(stack); - } - } } diff --git a/src/main/java/com/refinedmods/refinedstorage/apiimpl/util/RSWorldSavedData.java b/src/main/java/com/refinedmods/refinedstorage/apiimpl/util/RSWorldSavedData.java index 02d9b3947..d8af7d92c 100644 --- a/src/main/java/com/refinedmods/refinedstorage/apiimpl/util/RSWorldSavedData.java +++ b/src/main/java/com/refinedmods/refinedstorage/apiimpl/util/RSWorldSavedData.java @@ -35,7 +35,7 @@ public abstract class RSWorldSavedData extends WorldSavedData { compoundnbt.putInt("DataVersion", SharedConstants.getVersion().getWorldVersion()); try { - CompressedStreamTools.func_244264_a(compoundnbt, tempFile); + CompressedStreamTools.writeCompressed(compoundnbt, tempFile); if (fileIn.exists()) { if (!fileIn.delete()) { LOGGER.error("Failed To delete " + fileIn.getName()); diff --git a/src/main/java/com/refinedmods/refinedstorage/block/CableBlock.java b/src/main/java/com/refinedmods/refinedstorage/block/CableBlock.java index bfb46e3ed..09653f047 100644 --- a/src/main/java/com/refinedmods/refinedstorage/block/CableBlock.java +++ b/src/main/java/com/refinedmods/refinedstorage/block/CableBlock.java @@ -18,6 +18,7 @@ import net.minecraft.fluid.Fluid; import net.minecraft.fluid.FluidState; import net.minecraft.fluid.Fluids; import net.minecraft.item.BlockItemUseContext; +import net.minecraft.pathfinding.PathType; import net.minecraft.state.BooleanProperty; import net.minecraft.state.StateContainer; import net.minecraft.tileentity.TileEntity; @@ -73,6 +74,11 @@ public class CableBlock extends NetworkNodeBlock implements IWaterLoggable { return getState(state, world, pos); } + @Override + public boolean allowsMovement(BlockState state, IBlockReader worldIn, BlockPos pos, PathType type) { + return false; + } + @Override @SuppressWarnings("deprecation") public VoxelShape getShape(BlockState state, IBlockReader world, BlockPos pos, ISelectionContext ctx) { diff --git a/src/main/java/com/refinedmods/refinedstorage/block/DetectorBlock.java b/src/main/java/com/refinedmods/refinedstorage/block/DetectorBlock.java index 62c78217a..953251bc2 100644 --- a/src/main/java/com/refinedmods/refinedstorage/block/DetectorBlock.java +++ b/src/main/java/com/refinedmods/refinedstorage/block/DetectorBlock.java @@ -5,11 +5,13 @@ import com.refinedmods.refinedstorage.container.DetectorContainer; import com.refinedmods.refinedstorage.container.factory.PositionalTileContainerProvider; import com.refinedmods.refinedstorage.tile.DetectorTile; import com.refinedmods.refinedstorage.util.BlockUtils; +import com.refinedmods.refinedstorage.util.ColorMap; import com.refinedmods.refinedstorage.util.NetworkUtils; import net.minecraft.block.Block; import net.minecraft.block.BlockState; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.ServerPlayerEntity; +import net.minecraft.item.DyeColor; import net.minecraft.state.BooleanProperty; import net.minecraft.state.StateContainer; import net.minecraft.tileentity.TileEntity; @@ -68,9 +70,13 @@ public class DetectorBlock extends ColoredNetworkBlock { @Override @SuppressWarnings("deprecation") public ActionResultType onBlockActivated(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockRayTraceResult hit) { - ActionResultType result = RSBlocks.DETECTOR.changeBlockColor(state, player.getHeldItem(hand), world, pos, player); - if (result != ActionResultType.PASS) { - return result; + ColorMap colorMap = RSBlocks.DETECTOR; + DyeColor color = DyeColor.getColor(player.getHeldItem(hand)); + + if (color != null && !state.getBlock().equals(colorMap.get(color).get())) { + BlockState newState = colorMap.get(color).get().getDefaultState().with(POWERED, state.get(POWERED)); + + return RSBlocks.DETECTOR.setBlockState(newState, player.getHeldItem(hand), world, pos, player); } if (!world.isRemote) { diff --git a/src/main/java/com/refinedmods/refinedstorage/command/network/ListNetworkCommand.java b/src/main/java/com/refinedmods/refinedstorage/command/network/ListNetworkCommand.java index e9f3fe3b7..50507e8d8 100644 --- a/src/main/java/com/refinedmods/refinedstorage/command/network/ListNetworkCommand.java +++ b/src/main/java/com/refinedmods/refinedstorage/command/network/ListNetworkCommand.java @@ -70,7 +70,7 @@ public class ListNetworkCommand implements Command { listItem.network.getPosition().getZ() ) .appendString(" [") - .append(new TranslationTextComponent( + .appendSibling(new TranslationTextComponent( "commands.refinedstorage.network.list.tick_times", new StringTextComponent(TIME_FORMATTER.format(listItem.tickTime)).setStyle(Styles.YELLOW), new StringTextComponent(TIME_FORMATTER.format(listItem.tps)).setStyle(Styles.YELLOW) diff --git a/src/main/java/com/refinedmods/refinedstorage/command/network/autocrafting/ListAutocraftingCommand.java b/src/main/java/com/refinedmods/refinedstorage/command/network/autocrafting/ListAutocraftingCommand.java index 827b201d6..666838eea 100644 --- a/src/main/java/com/refinedmods/refinedstorage/command/network/autocrafting/ListAutocraftingCommand.java +++ b/src/main/java/com/refinedmods/refinedstorage/command/network/autocrafting/ListAutocraftingCommand.java @@ -26,11 +26,11 @@ public class ListAutocraftingCommand extends NetworkCommand { public static void addInfo(CommandContext context, ICraftingTask task) { context.getSource().sendFeedback( new StringTextComponent(getAmount(task.getRequested()) + "x ") - .append(getName(task.getRequested()).deepCopy().setStyle(Styles.YELLOW)) + .appendSibling(getName(task.getRequested()).deepCopy().setStyle(Styles.YELLOW)) .appendString(" ") .appendString("(" + task.getCompletionPercentage() + "%)") .appendString(" ") - .append(new StringTextComponent("[" + task.getId().toString() + "]").setStyle(Styles.GRAY)), + .appendSibling(new StringTextComponent("[" + task.getId().toString() + "]").setStyle(Styles.GRAY)), false ); } diff --git a/src/main/java/com/refinedmods/refinedstorage/command/pattern/PatternDumpCommand.java b/src/main/java/com/refinedmods/refinedstorage/command/pattern/PatternDumpCommand.java index 95245ef5e..41db4e012 100644 --- a/src/main/java/com/refinedmods/refinedstorage/command/pattern/PatternDumpCommand.java +++ b/src/main/java/com/refinedmods/refinedstorage/command/pattern/PatternDumpCommand.java @@ -32,14 +32,14 @@ public class PatternDumpCommand implements Command { ICraftingPattern pattern = PatternItem.fromCache(context.getSource().getWorld(), stack); - context.getSource().sendFeedback(new StringTextComponent("Crafting task factory ID: ").setStyle(Styles.YELLOW).append(new StringTextComponent(pattern.getCraftingTaskFactoryId().toString()).setStyle(Styles.WHITE)), false); + context.getSource().sendFeedback(new StringTextComponent("Crafting task factory ID: ").setStyle(Styles.YELLOW).appendSibling(new StringTextComponent(pattern.getCraftingTaskFactoryId().toString()).setStyle(Styles.WHITE)), false); if (!pattern.isValid()) { - context.getSource().sendErrorMessage(new StringTextComponent("Pattern is invalid! Reason: ").append(pattern.getErrorMessage())); + context.getSource().sendErrorMessage(new StringTextComponent("Pattern is invalid! Reason: ").appendSibling(pattern.getErrorMessage())); } else { - context.getSource().sendFeedback(new StringTextComponent("Processing: ").setStyle(Styles.YELLOW).append(new StringTextComponent(String.valueOf(processing)).setStyle(Styles.WHITE)), false); - context.getSource().sendFeedback(new StringTextComponent("Exact: ").setStyle(Styles.YELLOW).append(new StringTextComponent(String.valueOf(exact)).setStyle(Styles.WHITE)), false); - context.getSource().sendFeedback(new StringTextComponent("Has allowed tag list: ").setStyle(Styles.YELLOW).append(new StringTextComponent(String.valueOf(allowedTagList != null)).setStyle(Styles.WHITE)), false); + context.getSource().sendFeedback(new StringTextComponent("Processing: ").setStyle(Styles.YELLOW).appendSibling(new StringTextComponent(String.valueOf(processing)).setStyle(Styles.WHITE)), false); + context.getSource().sendFeedback(new StringTextComponent("Exact: ").setStyle(Styles.YELLOW).appendSibling(new StringTextComponent(String.valueOf(exact)).setStyle(Styles.WHITE)), false); + context.getSource().sendFeedback(new StringTextComponent("Has allowed tag list: ").setStyle(Styles.YELLOW).appendSibling(new StringTextComponent(String.valueOf(allowedTagList != null)).setStyle(Styles.WHITE)), false); if (pattern.isProcessing()) { for (int i = 0; i < pattern.getInputs().size(); ++i) { @@ -47,7 +47,7 @@ public class PatternDumpCommand implements Command { context.getSource().sendFeedback(new StringTextComponent("Item inputs in slot " + i + ":").setStyle(Styles.YELLOW), false); for (int j = 0; j < pattern.getInputs().get(i).size(); ++j) { - context.getSource().sendFeedback(new StringTextComponent("- Possibility #" + j + ": " + pattern.getInputs().get(i).get(j).getCount() + "x ").append(pattern.getInputs().get(i).get(j).getDisplayName()), false); + context.getSource().sendFeedback(new StringTextComponent("- Possibility #" + j + ": " + pattern.getInputs().get(i).get(j).getCount() + "x ").appendSibling(pattern.getInputs().get(i).get(j).getDisplayName()), false); } } @@ -63,7 +63,7 @@ public class PatternDumpCommand implements Command { context.getSource().sendFeedback(new StringTextComponent("Fluid inputs in slot " + i + ":").setStyle(Styles.YELLOW), false); for (int j = 0; j < pattern.getFluidInputs().get(i).size(); ++j) { - context.getSource().sendFeedback(new StringTextComponent("- Possibility #" + j + ": " + pattern.getFluidInputs().get(i).get(j).getAmount() + " mB ").append(pattern.getFluidInputs().get(i).get(j).getDisplayName()), false); + context.getSource().sendFeedback(new StringTextComponent("- Possibility #" + j + ": " + pattern.getFluidInputs().get(i).get(j).getAmount() + " mB ").appendSibling(pattern.getFluidInputs().get(i).get(j).getDisplayName()), false); } } @@ -76,12 +76,12 @@ public class PatternDumpCommand implements Command { context.getSource().sendFeedback(new StringTextComponent("Outputs").setStyle(Styles.YELLOW), false); for (ItemStack output : pattern.getOutputs()) { - context.getSource().sendFeedback(new StringTextComponent("- " + output.getCount() + "x ").append(output.getDisplayName()), false); + context.getSource().sendFeedback(new StringTextComponent("- " + output.getCount() + "x ").appendSibling(output.getDisplayName()), false); } context.getSource().sendFeedback(new StringTextComponent("Fluid outputs").setStyle(Styles.YELLOW), false); for (FluidStack output : pattern.getFluidOutputs()) { - context.getSource().sendFeedback(new StringTextComponent("- " + output.getAmount() + " mB ").append(output.getDisplayName()), false); + context.getSource().sendFeedback(new StringTextComponent("- " + output.getAmount() + " mB ").appendSibling(output.getDisplayName()), false); } } else { for (int i = 0; i < pattern.getInputs().size(); ++i) { @@ -89,14 +89,14 @@ public class PatternDumpCommand implements Command { context.getSource().sendFeedback(new StringTextComponent("Inputs in slot " + i + ":").setStyle(Styles.YELLOW), false); for (int j = 0; j < pattern.getInputs().get(i).size(); ++j) { - context.getSource().sendFeedback(new StringTextComponent("- Possibility #" + j + ": " + pattern.getInputs().get(i).get(j).getCount() + "x ").append(pattern.getInputs().get(i).get(j).getDisplayName()), false); + context.getSource().sendFeedback(new StringTextComponent("- Possibility #" + j + ": " + pattern.getInputs().get(i).get(j).getCount() + "x ").appendSibling(pattern.getInputs().get(i).get(j).getDisplayName()), false); } } } context.getSource().sendFeedback(new StringTextComponent("Outputs").setStyle(Styles.YELLOW), false); for (ItemStack output : pattern.getOutputs()) { - context.getSource().sendFeedback(new StringTextComponent("- " + output.getCount() + "x ").append(output.getDisplayName()), false); + context.getSource().sendFeedback(new StringTextComponent("- " + output.getCount() + "x ").appendSibling(output.getDisplayName()), false); } boolean anyByproducts = false; @@ -109,7 +109,7 @@ public class PatternDumpCommand implements Command { anyByproducts = true; } - context.getSource().sendFeedback(new StringTextComponent("- " + byproduct.getCount() + "x ").append(byproduct.getDisplayName()), false); + context.getSource().sendFeedback(new StringTextComponent("- " + byproduct.getCount() + "x ").appendSibling(byproduct.getDisplayName()), false); } } } diff --git a/src/main/java/com/refinedmods/refinedstorage/integration/curios/CuriosIntegration.java b/src/main/java/com/refinedmods/refinedstorage/integration/curios/CuriosIntegration.java new file mode 100644 index 000000000..77c5169d7 --- /dev/null +++ b/src/main/java/com/refinedmods/refinedstorage/integration/curios/CuriosIntegration.java @@ -0,0 +1,25 @@ +package com.refinedmods.refinedstorage.integration.curios; + +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.InterModComms; +import net.minecraftforge.fml.ModList; +import net.minecraftforge.fml.event.lifecycle.InterModEnqueueEvent; +import top.theillusivec4.curios.api.SlotTypeMessage; +import top.theillusivec4.curios.api.SlotTypePreset; + +public class CuriosIntegration { + private static final String ID = "curios"; + + public CuriosIntegration() { + } + + public static boolean isLoaded() { + return ModList.get().isLoaded(ID); + } + + @SubscribeEvent + public void registerSlots(InterModEnqueueEvent event){ + InterModComms.sendTo(ID, SlotTypeMessage.REGISTER_TYPE,()-> SlotTypePreset.BELT.getMessageBuilder().build()); + InterModComms.sendTo(ID, SlotTypeMessage.REGISTER_TYPE,()-> SlotTypePreset.BODY.getMessageBuilder().build()); + } +} diff --git a/src/main/java/com/refinedmods/refinedstorage/integration/jei/RecipeTransferCraftingGridError.java b/src/main/java/com/refinedmods/refinedstorage/integration/jei/RecipeTransferCraftingGridError.java index 94b0434b8..844509a19 100644 --- a/src/main/java/com/refinedmods/refinedstorage/integration/jei/RecipeTransferCraftingGridError.java +++ b/src/main/java/com/refinedmods/refinedstorage/integration/jei/RecipeTransferCraftingGridError.java @@ -35,7 +35,7 @@ public class RecipeTransferCraftingGridError implements IRecipeTransferError { List message = drawIngredientHighlights(stack, recipeX, recipeY); Screen currentScreen = Minecraft.getInstance().currentScreen; - GuiUtils.drawHoveringText(ItemStack.EMPTY, stack, message, mouseX, mouseY, currentScreen.width, currentScreen.height, 150, Minecraft.getInstance().fontRenderer); + GuiUtils.drawHoveringText(ItemStack.EMPTY, stack, message, mouseX, mouseY, currentScreen.width, currentScreen.height, 200, Minecraft.getInstance().fontRenderer); } protected List drawIngredientHighlights(MatrixStack stack, int recipeX, int recipeY) { diff --git a/src/main/java/com/refinedmods/refinedstorage/inventory/item/validator/PatternItemValidator.java b/src/main/java/com/refinedmods/refinedstorage/inventory/item/validator/PatternItemValidator.java index 276e87fe4..414c72b91 100644 --- a/src/main/java/com/refinedmods/refinedstorage/inventory/item/validator/PatternItemValidator.java +++ b/src/main/java/com/refinedmods/refinedstorage/inventory/item/validator/PatternItemValidator.java @@ -1,6 +1,8 @@ package com.refinedmods.refinedstorage.inventory.item.validator; +import com.refinedmods.refinedstorage.RSItems; import com.refinedmods.refinedstorage.api.autocrafting.ICraftingPatternProvider; +import com.refinedmods.refinedstorage.item.PatternItem; import net.minecraft.item.ItemStack; import net.minecraft.world.World; @@ -15,6 +17,9 @@ public class PatternItemValidator implements Predicate { @Override public boolean test(ItemStack stack) { + if (stack.getItem() == RSItems.PATTERN.get()) { + return PatternItem.fromCache(world, stack).isValid(); + } return stack.getItem() instanceof ICraftingPatternProvider && ((ICraftingPatternProvider) stack.getItem()).create(world, stack, null).isValid(); } } diff --git a/src/main/java/com/refinedmods/refinedstorage/item/NetworkCardItem.java b/src/main/java/com/refinedmods/refinedstorage/item/NetworkCardItem.java index a17928c76..b1ae5e486 100644 --- a/src/main/java/com/refinedmods/refinedstorage/item/NetworkCardItem.java +++ b/src/main/java/com/refinedmods/refinedstorage/item/NetworkCardItem.java @@ -41,7 +41,7 @@ public class NetworkCardItem extends Item { tag.putInt(NBT_RECEIVER_X, ctx.getPos().getX()); tag.putInt(NBT_RECEIVER_Y, ctx.getPos().getY()); tag.putInt(NBT_RECEIVER_Z, ctx.getPos().getZ()); - tag.putString(NBT_DIMENSION, ctx.getWorld().func_234923_W_().func_240901_a_().toString()); + tag.putString(NBT_DIMENSION, ctx.getWorld().getDimensionKey().getLocation().toString()); ctx.getPlayer().getHeldItem(ctx.getHand()).setTag(tag); @@ -64,7 +64,7 @@ public class NetworkCardItem extends Item { pos.getX(), pos.getY(), pos.getZ(), - type.func_240901_a_().toString() + type.getLocation().toString() ).setStyle(Styles.GRAY)); } } @@ -93,7 +93,7 @@ public class NetworkCardItem extends Item { return null; } - return RegistryKey.func_240903_a_(Registry.WORLD_KEY, name); + return RegistryKey.getOrCreateKey(Registry.WORLD_KEY, name); } return null; diff --git a/src/main/java/com/refinedmods/refinedstorage/item/NetworkItem.java b/src/main/java/com/refinedmods/refinedstorage/item/NetworkItem.java index 78e0bfe44..05a274af1 100644 --- a/src/main/java/com/refinedmods/refinedstorage/item/NetworkItem.java +++ b/src/main/java/com/refinedmods/refinedstorage/item/NetworkItem.java @@ -97,7 +97,7 @@ public abstract class NetworkItem extends EnergyItem implements INetworkItemProv tag.putInt(NBT_NODE_X, network.getPosition().getX()); tag.putInt(NBT_NODE_Y, network.getPosition().getY()); tag.putInt(NBT_NODE_Z, network.getPosition().getZ()); - tag.putString(NBT_DIMENSION, ctx.getWorld().func_234923_W_().func_240901_a_().toString()); + tag.putString(NBT_DIMENSION, ctx.getWorld().getDimensionKey().getLocation().toString()); stack.setTag(tag); @@ -115,7 +115,7 @@ public abstract class NetworkItem extends EnergyItem implements INetworkItemProv return null; } - return RegistryKey.func_240903_a_(Registry.WORLD_KEY, name); + return RegistryKey.getOrCreateKey(Registry.WORLD_KEY, name); } return null; diff --git a/src/main/java/com/refinedmods/refinedstorage/item/PatternItem.java b/src/main/java/com/refinedmods/refinedstorage/item/PatternItem.java index 17d69a4b8..1e7522bd0 100644 --- a/src/main/java/com/refinedmods/refinedstorage/item/PatternItem.java +++ b/src/main/java/com/refinedmods/refinedstorage/item/PatternItem.java @@ -10,6 +10,7 @@ import com.refinedmods.refinedstorage.apiimpl.autocrafting.CraftingPattern; import com.refinedmods.refinedstorage.apiimpl.autocrafting.CraftingPatternFactory; import com.refinedmods.refinedstorage.render.Styles; import com.refinedmods.refinedstorage.render.tesr.PatternItemStackTileRenderer; +import com.refinedmods.refinedstorage.util.ItemStackKey; import com.refinedmods.refinedstorage.util.RenderUtils; import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.util.ITooltipFlag; @@ -35,7 +36,7 @@ import java.util.Set; import java.util.stream.Collectors; public class PatternItem extends Item implements ICraftingPatternProvider { - private static final Map CACHE = new HashMap<>(); + private static final Map CACHE = new HashMap<>(); private static final String NBT_VERSION = "Version"; private static final String NBT_INPUT_SLOT = "Input_%d"; @@ -53,11 +54,18 @@ public class PatternItem extends Item implements ICraftingPatternProvider { } public static ICraftingPattern fromCache(World world, ItemStack stack) { - if (!CACHE.containsKey(stack)) { - CACHE.put(stack, CraftingPatternFactory.INSTANCE.create(world, null, stack)); + ICraftingPattern pattern = CACHE.computeIfAbsent( + new ItemStackKey(stack), + s -> CraftingPatternFactory.INSTANCE.create(world, null, s.getStack()) + ); + + // A number that is not too crazy but hopefully is not normally reachable, + // just reset the cache to keep its size limited so this is not a memory leak + if (CACHE.size() > 16384) { + CACHE.clear(); } - return CACHE.get(stack); + return pattern; } @Override diff --git a/src/main/java/com/refinedmods/refinedstorage/item/SecurityCardItem.java b/src/main/java/com/refinedmods/refinedstorage/item/SecurityCardItem.java index 2deea659d..9b8e6511a 100644 --- a/src/main/java/com/refinedmods/refinedstorage/item/SecurityCardItem.java +++ b/src/main/java/com/refinedmods/refinedstorage/item/SecurityCardItem.java @@ -83,7 +83,7 @@ public class SecurityCardItem extends Item { for (Permission permission : Permission.values()) { if (hasPermission(stack, permission)) { - tooltip.add(new StringTextComponent("- ").append(new TranslationTextComponent("gui.refinedstorage.security_manager.permission." + permission.getId())).setStyle(Styles.GRAY)); + tooltip.add(new StringTextComponent("- ").appendSibling(new TranslationTextComponent("gui.refinedstorage.security_manager.permission." + permission.getId())).setStyle(Styles.GRAY)); } } } diff --git a/src/main/java/com/refinedmods/refinedstorage/item/UpgradeItem.java b/src/main/java/com/refinedmods/refinedstorage/item/UpgradeItem.java index e0da6720f..b3e51e72f 100644 --- a/src/main/java/com/refinedmods/refinedstorage/item/UpgradeItem.java +++ b/src/main/java/com/refinedmods/refinedstorage/item/UpgradeItem.java @@ -92,7 +92,7 @@ public class UpgradeItem extends Item { tooltip.add( new TranslationTextComponent("enchantment.minecraft.fortune") .appendString(" ") - .append(new TranslationTextComponent("enchantment.level." + type.getFortuneLevel())) + .appendSibling(new TranslationTextComponent("enchantment.level." + type.getFortuneLevel())) .setStyle(Styles.GRAY) ); } diff --git a/src/main/java/com/refinedmods/refinedstorage/item/blockitem/ColoredBlockItem.java b/src/main/java/com/refinedmods/refinedstorage/item/blockitem/ColoredBlockItem.java index 7ed8497c1..af485b931 100644 --- a/src/main/java/com/refinedmods/refinedstorage/item/blockitem/ColoredBlockItem.java +++ b/src/main/java/com/refinedmods/refinedstorage/item/blockitem/ColoredBlockItem.java @@ -14,7 +14,9 @@ public class ColoredBlockItem extends BaseBlockItem { super(block, builder); if (color != ColorMap.DEFAULT_COLOR) { - this.displayName = new TranslationTextComponent("color.minecraft." + color.getTranslationKey()).appendString(" ").append(displayName); + this.displayName = new TranslationTextComponent("color.minecraft." + color.getTranslationKey()) + .appendString(" ") + .appendSibling(displayName); } else { this.displayName = displayName; } diff --git a/src/main/java/com/refinedmods/refinedstorage/item/blockitem/ControllerBlockItem.java b/src/main/java/com/refinedmods/refinedstorage/item/blockitem/ControllerBlockItem.java index 6b54e5677..fa23402c0 100644 --- a/src/main/java/com/refinedmods/refinedstorage/item/blockitem/ControllerBlockItem.java +++ b/src/main/java/com/refinedmods/refinedstorage/item/blockitem/ControllerBlockItem.java @@ -17,7 +17,9 @@ public class ControllerBlockItem extends EnergyBlockItem { super(block, new Item.Properties().group(RS.MAIN_GROUP).maxStackSize(1), block.getType() == NetworkType.CREATIVE, () -> RS.SERVER_CONFIG.getController().getCapacity()); if (color != ColorMap.DEFAULT_COLOR) { - this.displayName = new TranslationTextComponent("color.minecraft." + color.getTranslationKey()).appendString(" ").append(displayName); + this.displayName = new TranslationTextComponent("color.minecraft." + color.getTranslationKey()) + .appendString(" ") + .appendSibling(displayName); } else { this.displayName = displayName; } diff --git a/src/main/java/com/refinedmods/refinedstorage/item/blockitem/StorageBlockItem.java b/src/main/java/com/refinedmods/refinedstorage/item/blockitem/StorageBlockItem.java index 2ef830927..0be01389f 100644 --- a/src/main/java/com/refinedmods/refinedstorage/item/blockitem/StorageBlockItem.java +++ b/src/main/java/com/refinedmods/refinedstorage/item/blockitem/StorageBlockItem.java @@ -64,6 +64,7 @@ public class StorageBlockItem extends BaseBlockItem { @Override public ActionResult onItemRightClick(World world, PlayerEntity player, Hand hand) { ItemStack storageStack = player.getHeldItem(hand); + int count = storageStack.getCount(); if (!world.isRemote && player.isCrouching() && type != ItemStorageType.CREATIVE) { UUID diskId = null; @@ -77,6 +78,7 @@ public class StorageBlockItem extends BaseBlockItem { // Newly created storages won't have a tag yet, so allow invalid disks as well. if (disk == null || disk.getStored() == 0) { ItemStack storagePart = new ItemStack(StoragePartItem.getByType(type)); + storagePart.setCount(count); if (!player.inventory.addItemStackToInventory(storagePart.copy())) { InventoryHelper.spawnItemStack(world, player.getPosX(), player.getPosY(), player.getPosZ(), storagePart); @@ -87,7 +89,9 @@ public class StorageBlockItem extends BaseBlockItem { API.instance().getStorageDiskManager((ServerWorld) world).markForSaving(); } - return new ActionResult<>(ActionResultType.SUCCESS, new ItemStack(RSBlocks.MACHINE_CASING.get())); + ItemStack stack = new ItemStack(RSBlocks.MACHINE_CASING.get()); + stack.setCount(count); + return new ActionResult<>(ActionResultType.SUCCESS, stack); } } diff --git a/src/main/java/com/refinedmods/refinedstorage/loottable/ControllerLootFunction.java b/src/main/java/com/refinedmods/refinedstorage/loottable/ControllerLootFunction.java index b8dc5dc6d..d9dc3a1a7 100644 --- a/src/main/java/com/refinedmods/refinedstorage/loottable/ControllerLootFunction.java +++ b/src/main/java/com/refinedmods/refinedstorage/loottable/ControllerLootFunction.java @@ -33,7 +33,7 @@ public class ControllerLootFunction extends LootFunction { } @Override - public LootFunctionType func_230425_b_() { + public LootFunctionType getFunctionType() { return RSLootFunctions.getController(); } diff --git a/src/main/java/com/refinedmods/refinedstorage/loottable/CrafterLootFunction.java b/src/main/java/com/refinedmods/refinedstorage/loottable/CrafterLootFunction.java index 7440ff2f1..3f8fa4e9d 100644 --- a/src/main/java/com/refinedmods/refinedstorage/loottable/CrafterLootFunction.java +++ b/src/main/java/com/refinedmods/refinedstorage/loottable/CrafterLootFunction.java @@ -35,7 +35,7 @@ public class CrafterLootFunction extends LootFunction { } @Override - public LootFunctionType func_230425_b_() { + public LootFunctionType getFunctionType() { return RSLootFunctions.getCrafter(); } diff --git a/src/main/java/com/refinedmods/refinedstorage/loottable/PortableGridBlockLootFunction.java b/src/main/java/com/refinedmods/refinedstorage/loottable/PortableGridBlockLootFunction.java index 9b42836f4..7c4267ae9 100644 --- a/src/main/java/com/refinedmods/refinedstorage/loottable/PortableGridBlockLootFunction.java +++ b/src/main/java/com/refinedmods/refinedstorage/loottable/PortableGridBlockLootFunction.java @@ -29,7 +29,7 @@ public class PortableGridBlockLootFunction extends LootFunction { } @Override - public LootFunctionType func_230425_b_() { + public LootFunctionType getFunctionType() { return RSLootFunctions.getPortableGrid(); } diff --git a/src/main/java/com/refinedmods/refinedstorage/loottable/StorageBlockLootFunction.java b/src/main/java/com/refinedmods/refinedstorage/loottable/StorageBlockLootFunction.java index 5f375afb9..4716ab3b3 100644 --- a/src/main/java/com/refinedmods/refinedstorage/loottable/StorageBlockLootFunction.java +++ b/src/main/java/com/refinedmods/refinedstorage/loottable/StorageBlockLootFunction.java @@ -50,7 +50,7 @@ public class StorageBlockLootFunction extends LootFunction { } @Override - public LootFunctionType func_230425_b_() { + public LootFunctionType getFunctionType() { return RSLootFunctions.getStorageBlock(); } diff --git a/src/main/java/com/refinedmods/refinedstorage/network/OpenNetworkItemMessage.java b/src/main/java/com/refinedmods/refinedstorage/network/OpenNetworkItemMessage.java index 370e9e4fb..c76186c4e 100644 --- a/src/main/java/com/refinedmods/refinedstorage/network/OpenNetworkItemMessage.java +++ b/src/main/java/com/refinedmods/refinedstorage/network/OpenNetworkItemMessage.java @@ -4,26 +4,35 @@ import com.refinedmods.refinedstorage.apiimpl.API; import com.refinedmods.refinedstorage.apiimpl.network.grid.factory.PortableGridGridFactory; import com.refinedmods.refinedstorage.item.NetworkItem; import com.refinedmods.refinedstorage.item.blockitem.PortableGridBlockItem; +import com.refinedmods.refinedstorage.util.PacketBufferUtils; import net.minecraft.entity.player.ServerPlayerEntity; import net.minecraft.item.ItemStack; import net.minecraft.network.PacketBuffer; +import net.minecraftforge.common.util.LazyOptional; import net.minecraftforge.fml.network.NetworkEvent; +import top.theillusivec4.curios.api.CuriosApi; +import top.theillusivec4.curios.api.type.capability.ICuriosItemHandler; +import top.theillusivec4.curios.api.type.inventory.ICurioStacksHandler; +import java.util.Optional; import java.util.function.Supplier; public class OpenNetworkItemMessage { private final int slotId; + private final String curioSlot; - public OpenNetworkItemMessage(int slotId) { + public OpenNetworkItemMessage(int slotId, String curioSlot) { this.slotId = slotId; + this.curioSlot = curioSlot; } public static OpenNetworkItemMessage decode(PacketBuffer buf) { - return new OpenNetworkItemMessage(buf.readInt()); + return new OpenNetworkItemMessage(buf.readInt(), PacketBufferUtils.readString(buf)); } public static void encode(OpenNetworkItemMessage message, PacketBuffer buf) { buf.writeInt(message.slotId); + buf.writeString(message.curioSlot); } public static void handle(OpenNetworkItemMessage message, Supplier ctx) { @@ -31,7 +40,11 @@ public class OpenNetworkItemMessage { if (player != null) { ctx.get().enqueueWork(() -> { - ItemStack stack = player.inventory.getStackInSlot(message.slotId); + ItemStack stack = getStackFromSlot(player, message.slotId, message.curioSlot); + + if (stack == null) { + return; + } if (stack.getItem() instanceof NetworkItem) { ((NetworkItem) stack.getItem()).applyNetwork(player.getServer(), stack, n -> n.getNetworkItemManager().open(player, stack, message.slotId), err -> player.sendMessage(err, player.getUniqueID())); @@ -43,4 +56,24 @@ public class OpenNetworkItemMessage { ctx.get().setPacketHandled(true); } + + private static ItemStack getStackFromSlot(ServerPlayerEntity player, int slotId, String curioSlot) { + if (curioSlot.isEmpty()) { + return player.inventory.getStackInSlot(slotId); + } else { + + LazyOptional curiosHandler = CuriosApi.getCuriosHelper().getCuriosHandler(player); + + Optional stacksHandler = curiosHandler.resolve().flatMap((handler -> + handler.getStacksHandler(curioSlot) + )); + + Optional stack = stacksHandler.map(handler -> handler.getStacks().getStackInSlot(slotId)); + if (stack.isPresent()) { + return stack.get(); + } + } + + return null; + } } diff --git a/src/main/java/com/refinedmods/refinedstorage/render/ExperimentalLightingPipelineNagger.java b/src/main/java/com/refinedmods/refinedstorage/render/ExperimentalLightingPipelineNagger.java deleted file mode 100644 index 3dd934298..000000000 --- a/src/main/java/com/refinedmods/refinedstorage/render/ExperimentalLightingPipelineNagger.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.refinedmods.refinedstorage.render; - -import net.minecraft.util.text.*; -import net.minecraftforge.common.ForgeConfig; -import net.minecraftforge.event.entity.player.PlayerEvent; -import net.minecraftforge.eventbus.api.SubscribeEvent; - -public class ExperimentalLightingPipelineNagger { - @SubscribeEvent - public void onPlayerLoggedIn(PlayerEvent.PlayerLoggedInEvent e) { - if (Boolean.FALSE.equals(ForgeConfig.CLIENT.experimentalForgeLightPipelineEnabled.get())) { - IFormattableTextComponent message = new StringTextComponent("[Refined Storage] ").setStyle(Styles.AQUA.setBold(true)); - message.append(new StringTextComponent("Please set ").setStyle(Styles.WHITE.setBold(false))); - message.append(new StringTextComponent("experimentalForgeLightPipelineEnabled").setStyle(Styles.GRAY.setItalic(true))); - message.append(new StringTextComponent(" to ").setStyle(Styles.WHITE.setBold(false))); - message.append(new StringTextComponent("true").setStyle(Style.EMPTY.setColor(Color.func_240744_a_(TextFormatting.GREEN)).setBold(true).setItalic(true))); - message.append(new StringTextComponent(" in the Forge client config to ensure correct rendering of Refined Storage blocks.").setStyle(Styles.WHITE.setBold(false))); - - e.getPlayer().sendStatusMessage(message, false); - } - } -} diff --git a/src/main/java/com/refinedmods/refinedstorage/render/Styles.java b/src/main/java/com/refinedmods/refinedstorage/render/Styles.java index 762dc0bc7..ed046cc34 100644 --- a/src/main/java/com/refinedmods/refinedstorage/render/Styles.java +++ b/src/main/java/com/refinedmods/refinedstorage/render/Styles.java @@ -5,12 +5,12 @@ import net.minecraft.util.text.Style; import net.minecraft.util.text.TextFormatting; public final class Styles { - public static final Style WHITE = Style.EMPTY.setColor(Color.func_240744_a_(TextFormatting.WHITE)); - public static final Style GRAY = Style.EMPTY.setColor(Color.func_240744_a_(TextFormatting.GRAY)); - public static final Style YELLOW = Style.EMPTY.setColor(Color.func_240744_a_(TextFormatting.YELLOW)); - public static final Style RED = Style.EMPTY.setColor(Color.func_240744_a_(TextFormatting.RED)); - public static final Style BLUE = Style.EMPTY.setColor(Color.func_240744_a_(TextFormatting.BLUE)); - public static final Style AQUA = Style.EMPTY.setColor(Color.func_240744_a_(TextFormatting.AQUA)); + public static final Style WHITE = Style.EMPTY.setColor(Color.fromTextFormatting(TextFormatting.WHITE)); + public static final Style GRAY = Style.EMPTY.setColor(Color.fromTextFormatting(TextFormatting.GRAY)); + public static final Style YELLOW = Style.EMPTY.setColor(Color.fromTextFormatting(TextFormatting.YELLOW)); + public static final Style RED = Style.EMPTY.setColor(Color.fromTextFormatting(TextFormatting.RED)); + public static final Style BLUE = Style.EMPTY.setColor(Color.fromTextFormatting(TextFormatting.BLUE)); + public static final Style AQUA = Style.EMPTY.setColor(Color.fromTextFormatting(TextFormatting.AQUA)); private Styles() { } diff --git a/src/main/java/com/refinedmods/refinedstorage/render/model/DelegateBakedModel.java b/src/main/java/com/refinedmods/refinedstorage/render/model/DelegateBakedModel.java index 2786b793c..1d5b1e4d0 100644 --- a/src/main/java/com/refinedmods/refinedstorage/render/model/DelegateBakedModel.java +++ b/src/main/java/com/refinedmods/refinedstorage/render/model/DelegateBakedModel.java @@ -37,8 +37,8 @@ public class DelegateBakedModel implements IBakedModel { } @Override - public boolean func_230044_c_() { - return base.func_230044_c_(); + public boolean isSideLit() { + return base.isSideLit(); } @Override diff --git a/src/main/java/com/refinedmods/refinedstorage/render/model/FullbrightBakedModel.java b/src/main/java/com/refinedmods/refinedstorage/render/model/FullbrightBakedModel.java index af3843ab2..a4e41ae92 100644 --- a/src/main/java/com/refinedmods/refinedstorage/render/model/FullbrightBakedModel.java +++ b/src/main/java/com/refinedmods/refinedstorage/render/model/FullbrightBakedModel.java @@ -57,7 +57,7 @@ public class FullbrightBakedModel extends DelegateBakedModel { for (int i = 0; i < quads.size(); ++i) { BakedQuad quad = quads.get(i); - if (textures.contains(quad.func_187508_a().getName())) { + if (textures.contains(quad.getSprite().getName())) { quads.set(i, transformQuad(quad)); } } @@ -67,19 +67,20 @@ public class FullbrightBakedModel extends DelegateBakedModel { private static BakedQuad transformQuad(BakedQuad quad) { int[] vertexData = quad.getVertexData().clone(); + int step = vertexData.length / 4; // Set lighting to fullbright on all vertices vertexData[6] = 0x00F000F0; - vertexData[6 + 8] = 0x00F000F0; - vertexData[6 + 8 + 8] = 0x00F000F0; - vertexData[6 + 8 + 8 + 8] = 0x00F000F0; + vertexData[6 + step] = 0x00F000F0; + vertexData[6 + 2 * step] = 0x00F000F0; + vertexData[6 + 3 * step] = 0x00F000F0; return new BakedQuad( vertexData, quad.getTintIndex(), quad.getFace(), - quad.func_187508_a(), - quad.func_239287_f_() // shouldApplyDiffuseLighting + quad.getSprite(), + quad.applyDiffuseLighting() ); } diff --git a/src/main/java/com/refinedmods/refinedstorage/render/model/PatternBakedModel.java b/src/main/java/com/refinedmods/refinedstorage/render/model/PatternBakedModel.java index 27ad2d73c..bd9aceea4 100644 --- a/src/main/java/com/refinedmods/refinedstorage/render/model/PatternBakedModel.java +++ b/src/main/java/com/refinedmods/refinedstorage/render/model/PatternBakedModel.java @@ -25,7 +25,7 @@ public class PatternBakedModel extends DelegateBakedModel { return new ItemOverrideList() { @Nullable @Override - public IBakedModel func_239290_a_(IBakedModel model, ItemStack stack, @Nullable ClientWorld world, @Nullable LivingEntity entity) { + public IBakedModel getOverrideModel(IBakedModel model, ItemStack stack, @Nullable ClientWorld world, @Nullable LivingEntity entity) { if (entity != null) { ICraftingPattern pattern = PatternItem.fromCache(entity.world, stack); @@ -36,7 +36,7 @@ public class PatternBakedModel extends DelegateBakedModel { } } - return super.func_239290_a_(model, stack, world, entity); + return super.getOverrideModel(model, stack, world, entity); } @Override diff --git a/src/main/java/com/refinedmods/refinedstorage/render/model/PortableGridBakedModel.java b/src/main/java/com/refinedmods/refinedstorage/render/model/PortableGridBakedModel.java index ee4e675a9..d990a03ae 100644 --- a/src/main/java/com/refinedmods/refinedstorage/render/model/PortableGridBakedModel.java +++ b/src/main/java/com/refinedmods/refinedstorage/render/model/PortableGridBakedModel.java @@ -110,7 +110,7 @@ public class PortableGridBakedModel extends DelegateBakedModel { private class CustomItemOverrideList extends ItemOverrideList { @Nullable @Override - public IBakedModel func_239290_a_(IBakedModel model, ItemStack stack, @Nullable ClientWorld world, @Nullable LivingEntity entity) { + public IBakedModel getOverrideModel(IBakedModel model, ItemStack stack, @Nullable ClientWorld world, @Nullable LivingEntity entity) { PortableGrid portableGrid = new PortableGrid(null, stack, -1); if (portableGrid.isGridActive()) { diff --git a/src/main/java/com/refinedmods/refinedstorage/render/model/PortableGridItemBakedModel.java b/src/main/java/com/refinedmods/refinedstorage/render/model/PortableGridItemBakedModel.java index 9a4515f03..395d8475e 100644 --- a/src/main/java/com/refinedmods/refinedstorage/render/model/PortableGridItemBakedModel.java +++ b/src/main/java/com/refinedmods/refinedstorage/render/model/PortableGridItemBakedModel.java @@ -59,8 +59,8 @@ public class PortableGridItemBakedModel implements IBakedModel { } @Override - public boolean func_230044_c_() { - return base.func_230044_c_(); + public boolean isSideLit() { + return base.isSideLit(); } @Override diff --git a/src/main/java/com/refinedmods/refinedstorage/render/model/QuadTransformer.java b/src/main/java/com/refinedmods/refinedstorage/render/model/QuadTransformer.java index e25b1417b..546ad0cd3 100644 --- a/src/main/java/com/refinedmods/refinedstorage/render/model/QuadTransformer.java +++ b/src/main/java/com/refinedmods/refinedstorage/render/model/QuadTransformer.java @@ -34,7 +34,7 @@ public final class QuadTransformer { } for (BakedQuad quad : model.getQuads(state, side, rand, EmptyModelData.INSTANCE)) { - BakedQuadBuilder builder = new BakedQuadBuilder(quad.func_187508_a()); + BakedQuadBuilder builder = new BakedQuadBuilder(quad.getSprite()); TRSRTransformer transformer = new TRSRTransformer(builder, transformation.blockCenterToCorner()); quad.pipe(transformer); diff --git a/src/main/java/com/refinedmods/refinedstorage/render/tesr/StorageMonitorTileRenderer.java b/src/main/java/com/refinedmods/refinedstorage/render/tesr/StorageMonitorTileRenderer.java index c0c8dd166..6d7ba87f9 100644 --- a/src/main/java/com/refinedmods/refinedstorage/render/tesr/StorageMonitorTileRenderer.java +++ b/src/main/java/com/refinedmods/refinedstorage/render/tesr/StorageMonitorTileRenderer.java @@ -1,17 +1,20 @@ package com.refinedmods.refinedstorage.render.tesr; -import com.mojang.blaze3d.matrix.MatrixStack; -import com.mojang.blaze3d.vertex.IVertexBuilder; import com.refinedmods.refinedstorage.RSBlocks; import com.refinedmods.refinedstorage.apiimpl.API; import com.refinedmods.refinedstorage.block.StorageMonitorBlock; import com.refinedmods.refinedstorage.tile.StorageMonitorTile; import com.refinedmods.refinedstorage.tile.config.IType; + +import com.mojang.blaze3d.matrix.MatrixStack; +import com.mojang.blaze3d.vertex.IVertexBuilder; import net.minecraft.block.BlockState; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.IRenderTypeBuffer; +import net.minecraft.client.renderer.RenderHelper; import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.WorldRenderer; +import net.minecraft.client.renderer.model.IBakedModel; import net.minecraft.client.renderer.model.ItemCameraTransforms; import net.minecraft.client.renderer.texture.OverlayTexture; import net.minecraft.client.renderer.texture.TextureAtlasSprite; @@ -22,6 +25,7 @@ import net.minecraft.inventory.container.PlayerContainer; import net.minecraft.item.ItemStack; import net.minecraft.util.Direction; import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.vector.Matrix3f; import net.minecraft.util.math.vector.Vector3f; import net.minecraftforge.common.model.TransformationHelper; import net.minecraftforge.fluids.FluidAttributes; @@ -71,9 +75,9 @@ public class StorageMonitorTileRenderer extends TileEntityRenderer> 24 & 0xFF; buffer.pos(matrixStack.getLast().getMatrix(), -0.5F, -0.5F, 0F) - .color(colorRed, colorGreen, colorBlue, colorAlpha) - .tex(sprite.getMinU(), sprite.getMinV()) - .lightmap(light) - .endVertex(); + .color(colorRed, colorGreen, colorBlue, colorAlpha) + .tex(sprite.getMinU(), sprite.getMinV()) + .lightmap(light) + .endVertex(); buffer.pos(matrixStack.getLast().getMatrix(), 0.5F, -0.5F, 0F) - .color(colorRed, colorGreen, colorBlue, colorAlpha) - .tex(sprite.getMaxU(), sprite.getMinV()) - .lightmap(light) - .endVertex(); + .color(colorRed, colorGreen, colorBlue, colorAlpha) + .tex(sprite.getMaxU(), sprite.getMinV()) + .lightmap(light) + .endVertex(); buffer.pos(matrixStack.getLast().getMatrix(), 0.5F, -1.5F, 0F) - .color(colorRed, colorGreen, colorBlue, colorAlpha) - .tex(sprite.getMaxU(), sprite.getMaxV()) - .lightmap(light) - .endVertex(); + .color(colorRed, colorGreen, colorBlue, colorAlpha) + .tex(sprite.getMaxU(), sprite.getMaxV()) + .lightmap(light) + .endVertex(); buffer.pos(matrixStack.getLast().getMatrix(), -0.5F, -1.5F, 0F) - .color(colorRed, colorGreen, colorBlue, colorAlpha) - .tex(sprite.getMinU(), sprite.getMaxV()) - .lightmap(light) - .endVertex(); + .color(colorRed, colorGreen, colorBlue, colorAlpha) + .tex(sprite.getMinU(), sprite.getMaxV()) + .lightmap(light) + .endVertex(); matrixStack.pop(); } diff --git a/src/main/java/com/refinedmods/refinedstorage/screen/AmountSpecifyingScreen.java b/src/main/java/com/refinedmods/refinedstorage/screen/AmountSpecifyingScreen.java index e362deba9..c7202b9d4 100644 --- a/src/main/java/com/refinedmods/refinedstorage/screen/AmountSpecifyingScreen.java +++ b/src/main/java/com/refinedmods/refinedstorage/screen/AmountSpecifyingScreen.java @@ -159,7 +159,7 @@ public abstract class AmountSpecifyingScreen extends BaseSc blit(matrixStack, x, y, 0, 0, xSize, ySize); - amountField.renderButton(matrixStack, 0, 0, 0); + amountField.renderWidget(matrixStack, 0, 0, 0); } @Override diff --git a/src/main/java/com/refinedmods/refinedstorage/screen/BaseScreen.java b/src/main/java/com/refinedmods/refinedstorage/screen/BaseScreen.java index 3599b2203..ba437dc9d 100644 --- a/src/main/java/com/refinedmods/refinedstorage/screen/BaseScreen.java +++ b/src/main/java/com/refinedmods/refinedstorage/screen/BaseScreen.java @@ -126,7 +126,7 @@ public abstract class BaseScreen extends ContainerScreen super.render(matrixStack, mouseX, mouseY, partialTicks); - func_230459_a_(matrixStack, mouseX, mouseY); + renderHoveredTooltip(matrixStack, mouseX, mouseY); } @Override @@ -352,7 +352,7 @@ public abstract class BaseScreen extends ContainerScreen } public static boolean isKeyDown(KeyBinding keybinding) { - return InputMappings.isKeyDown(Minecraft.getInstance().getMainWindow().getHandle(), keybinding.getKey().getKeyCode()) && + return !keybinding.isInvalid() && InputMappings.isKeyDown(Minecraft.getInstance().getMainWindow().getHandle(), keybinding.getKey().getKeyCode()) && keybinding.getKeyConflictContext().isActive() && keybinding.getKeyModifier().isActive(keybinding.getKeyConflictContext()); } diff --git a/src/main/java/com/refinedmods/refinedstorage/screen/CraftingMonitorScreen.java b/src/main/java/com/refinedmods/refinedstorage/screen/CraftingMonitorScreen.java index 94ab4aefc..fe2e10a7e 100644 --- a/src/main/java/com/refinedmods/refinedstorage/screen/CraftingMonitorScreen.java +++ b/src/main/java/com/refinedmods/refinedstorage/screen/CraftingMonitorScreen.java @@ -60,11 +60,18 @@ public class CraftingMonitorScreen extends BaseScreen List smallTextLines = Lists.newArrayList(); int totalSecs = (int) (System.currentTimeMillis() - executionStarted) / 1000; + int hours = totalSecs / 3600; int minutes = (totalSecs % 3600) / 60; int seconds = totalSecs % 60; smallTextLines.add(I18n.format("gui.refinedstorage.crafting_monitor.tooltip.requested", requested.getFluid() != null ? API.instance().getQuantityFormatter().formatInBucketForm(qty) : API.instance().getQuantityFormatter().format(qty))); - smallTextLines.add(String.format("%02d:%02d", minutes, seconds)); + + if (hours > 0) { + smallTextLines.add(String.format("%02d:%02d:%02d", hours, minutes, seconds)); + } else { + smallTextLines.add(String.format("%02d:%02d", minutes, seconds)); + } + smallTextLines.add(String.format("%d%%", completionPercentage)); RenderUtils.drawTooltipWithSmallText(matrixStack, textLines, smallTextLines, true, ItemStack.EMPTY, x, y, screenWidth, screenHeight, fontRenderer); diff --git a/src/main/java/com/refinedmods/refinedstorage/screen/KeyInputListener.java b/src/main/java/com/refinedmods/refinedstorage/screen/KeyInputListener.java index 3a303f5fd..850eb46e8 100644 --- a/src/main/java/com/refinedmods/refinedstorage/screen/KeyInputListener.java +++ b/src/main/java/com/refinedmods/refinedstorage/screen/KeyInputListener.java @@ -3,44 +3,44 @@ package com.refinedmods.refinedstorage.screen; import com.refinedmods.refinedstorage.RS; import com.refinedmods.refinedstorage.RSItems; import com.refinedmods.refinedstorage.RSKeyBindings; +import com.refinedmods.refinedstorage.integration.curios.CuriosIntegration; import com.refinedmods.refinedstorage.network.OpenNetworkItemMessage; import net.minecraft.client.Minecraft; -import net.minecraft.entity.player.PlayerInventory; import net.minecraft.inventory.IInventory; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.Util; -import net.minecraft.util.text.ITextComponent; import net.minecraft.util.text.TranslationTextComponent; import net.minecraftforge.client.event.InputEvent; import net.minecraftforge.eventbus.api.SubscribeEvent; +import org.apache.commons.lang3.tuple.ImmutableTriple; +import top.theillusivec4.curios.api.CuriosApi; import java.util.Arrays; import java.util.HashSet; +import java.util.Optional; import java.util.Set; -import java.util.function.Consumer; public class KeyInputListener { @SubscribeEvent public void onKeyInput(InputEvent.KeyInputEvent e) { if (Minecraft.getInstance().player != null) { - PlayerInventory inv = Minecraft.getInstance().player.inventory; - if (RSKeyBindings.OPEN_WIRELESS_GRID.isKeyDown()) { - findAndOpen(inv, error -> Minecraft.getInstance().player.sendMessage(error, Util.DUMMY_UUID), RSItems.WIRELESS_GRID.get(), RSItems.CREATIVE_WIRELESS_GRID.get()); + findAndOpen(RSItems.WIRELESS_GRID.get(), RSItems.CREATIVE_WIRELESS_GRID.get()); } else if (RSKeyBindings.OPEN_WIRELESS_FLUID_GRID.isKeyDown()) { - findAndOpen(inv, error -> Minecraft.getInstance().player.sendMessage(error, Util.DUMMY_UUID), RSItems.WIRELESS_FLUID_GRID.get(), RSItems.CREATIVE_WIRELESS_FLUID_GRID.get()); + findAndOpen(RSItems.WIRELESS_FLUID_GRID.get(), RSItems.CREATIVE_WIRELESS_FLUID_GRID.get()); } else if (RSKeyBindings.OPEN_PORTABLE_GRID.isKeyDown()) { - findAndOpen(inv, error -> Minecraft.getInstance().player.sendMessage(error, Util.DUMMY_UUID), RSItems.PORTABLE_GRID.get(), RSItems.CREATIVE_PORTABLE_GRID.get()); + findAndOpen(RSItems.PORTABLE_GRID.get(), RSItems.CREATIVE_PORTABLE_GRID.get()); } else if (RSKeyBindings.OPEN_WIRELESS_CRAFTING_MONITOR.isKeyDown()) { - findAndOpen(inv, error -> Minecraft.getInstance().player.sendMessage(error, Util.DUMMY_UUID), RSItems.WIRELESS_CRAFTING_MONITOR.get(), RSItems.CREATIVE_WIRELESS_CRAFTING_MONITOR.get()); + findAndOpen(RSItems.WIRELESS_CRAFTING_MONITOR.get(), RSItems.CREATIVE_WIRELESS_CRAFTING_MONITOR.get()); } } } - public static void findAndOpen(IInventory inv, Consumer onError, Item... items) { + //These are static to be accessible from RSAddons + public static void findAndOpen(Item... items) { Set validItems = new HashSet<>(Arrays.asList(items)); - + IInventory inv = Minecraft.getInstance().player.inventory; int slotFound = -1; for (int i = 0; i < inv.getSizeInventory(); ++i) { @@ -48,7 +48,7 @@ public class KeyInputListener { if (validItems.contains(slot.getItem())) { if (slotFound != -1) { - onError.accept(new TranslationTextComponent("misc.refinedstorage.network_item.shortcut_duplicate", new TranslationTextComponent(items[0].getTranslationKey()))); + sendError(new TranslationTextComponent("misc.refinedstorage.network_item.shortcut_duplicate", new TranslationTextComponent(items[0].getTranslationKey()))); return; } @@ -56,10 +56,25 @@ public class KeyInputListener { } } + if (CuriosIntegration.isLoaded() && slotFound == -1) { + Optional> curio = CuriosApi.getCuriosHelper().findEquippedCurio(stack -> validItems.contains(stack.getItem()), Minecraft.getInstance().player); + + if (curio.isPresent()) { + RS.NETWORK_HANDLER.sendToServer(new OpenNetworkItemMessage(curio.get().getMiddle(), curio.get().getLeft())); + return; + } + } + if (slotFound == -1) { - onError.accept(new TranslationTextComponent("misc.refinedstorage.network_item.shortcut_not_found", new TranslationTextComponent(items[0].getTranslationKey()))); + sendError(new TranslationTextComponent("misc.refinedstorage.network_item.shortcut_not_found", new TranslationTextComponent(items[0].getTranslationKey()))); } else { - RS.NETWORK_HANDLER.sendToServer(new OpenNetworkItemMessage(slotFound)); + RS.NETWORK_HANDLER.sendToServer(new OpenNetworkItemMessage(slotFound, "")); } } + + public static void sendError(TranslationTextComponent error) { + Minecraft.getInstance().player.sendMessage(error, Util.DUMMY_UUID); + } + + } diff --git a/src/main/java/com/refinedmods/refinedstorage/screen/SecurityManagerScreen.java b/src/main/java/com/refinedmods/refinedstorage/screen/SecurityManagerScreen.java index d6905ff60..ae4afc0e4 100644 --- a/src/main/java/com/refinedmods/refinedstorage/screen/SecurityManagerScreen.java +++ b/src/main/java/com/refinedmods/refinedstorage/screen/SecurityManagerScreen.java @@ -71,7 +71,7 @@ public class SecurityManagerScreen extends BaseScreen CheckboxWidget permission = permissions[i]; // getWidth_CLASH => getHeight - if (RenderUtils.inBounds(permission.x - guiLeft, permission.y - guiTop, permission.getWidth(), permission.getWidth_CLASH(), mouseX, mouseY)) { + if (RenderUtils.inBounds(permission.x - guiLeft, permission.y - guiTop, permission.getWidth(), permission.getHeight(), mouseX, mouseY)) { renderTooltip(matrixStack, mouseX, mouseY, I18n.format("gui.refinedstorage.security_manager.permission." + i + ".tooltip")); } } diff --git a/src/main/java/com/refinedmods/refinedstorage/screen/StorageScreen.java b/src/main/java/com/refinedmods/refinedstorage/screen/StorageScreen.java index dbeb54335..587ecf01f 100644 --- a/src/main/java/com/refinedmods/refinedstorage/screen/StorageScreen.java +++ b/src/main/java/com/refinedmods/refinedstorage/screen/StorageScreen.java @@ -86,7 +86,7 @@ public class StorageScreen extends BaseScreen { blit(matrixStack, x, y, 0, 0, xSize, ySize); - int barHeightNew = (int) ((float) storedSupplier.get() / (float) capacitySupplier.get() * (float) BAR_HEIGHT); + int barHeightNew = capacitySupplier.get() < 0 ? 0 : (int) ((float) storedSupplier.get() / (float) capacitySupplier.get() * (float) BAR_HEIGHT); blit(matrixStack, x + BAR_X, y + BAR_Y + BAR_HEIGHT - barHeightNew, 179, BAR_HEIGHT - barHeightNew, BAR_WIDTH, barHeightNew); } diff --git a/src/main/java/com/refinedmods/refinedstorage/screen/widget/CheckboxWidget.java b/src/main/java/com/refinedmods/refinedstorage/screen/widget/CheckboxWidget.java index a46ab2fdc..729b12112 100644 --- a/src/main/java/com/refinedmods/refinedstorage/screen/widget/CheckboxWidget.java +++ b/src/main/java/com/refinedmods/refinedstorage/screen/widget/CheckboxWidget.java @@ -47,7 +47,7 @@ public class CheckboxWidget extends CheckboxButton { } @Override - public void renderButton(MatrixStack matrixStack, int mouseX, int mouseY, float partialTicks) { + public void renderWidget(MatrixStack matrixStack, int mouseX, int mouseY, float partialTicks) { Minecraft minecraft = Minecraft.getInstance(); minecraft.getTextureManager().bindTexture(TEXTURE); RenderSystem.enableDepthTest(); diff --git a/src/main/java/com/refinedmods/refinedstorage/screen/widget/SearchWidget.java b/src/main/java/com/refinedmods/refinedstorage/screen/widget/SearchWidget.java index cd895372a..09a75b420 100644 --- a/src/main/java/com/refinedmods/refinedstorage/screen/widget/SearchWidget.java +++ b/src/main/java/com/refinedmods/refinedstorage/screen/widget/SearchWidget.java @@ -173,10 +173,10 @@ public class SearchWidget extends TextFieldWidget { } @Override - public void renderButton(MatrixStack matrixStack, int mouseX, int mouseY, float partialTicks) { + public void renderWidget(MatrixStack matrixStack, int mouseX, int mouseY, float partialTicks) { if (canSyncFromJEINow() && RSJeiPlugin.getRuntime().getIngredientListOverlay().hasKeyboardFocus()) { setTextFromJEI(); } - super.renderButton(matrixStack, mouseX, mouseY, partialTicks); + super.renderWidget(matrixStack, mouseX, mouseY, partialTicks); } } diff --git a/src/main/java/com/refinedmods/refinedstorage/screen/widget/sidebutton/SideButton.java b/src/main/java/com/refinedmods/refinedstorage/screen/widget/sidebutton/SideButton.java index 822c38d25..4c6d2c12e 100644 --- a/src/main/java/com/refinedmods/refinedstorage/screen/widget/sidebutton/SideButton.java +++ b/src/main/java/com/refinedmods/refinedstorage/screen/widget/sidebutton/SideButton.java @@ -25,7 +25,7 @@ public abstract class SideButton extends Button { } @Override - public void renderButton(MatrixStack matrixStack, int mouseX, int mouseY, float partialTicks) { + public void renderWidget(MatrixStack matrixStack, int mouseX, int mouseY, float partialTicks) { RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F); RenderSystem.enableAlphaTest(); diff --git a/src/main/java/com/refinedmods/refinedstorage/setup/ClientSetup.java b/src/main/java/com/refinedmods/refinedstorage/setup/ClientSetup.java index 44d165f9a..a945dfb8b 100644 --- a/src/main/java/com/refinedmods/refinedstorage/setup/ClientSetup.java +++ b/src/main/java/com/refinedmods/refinedstorage/setup/ClientSetup.java @@ -10,7 +10,6 @@ import com.refinedmods.refinedstorage.item.property.ControllerItemPropertyGetter import com.refinedmods.refinedstorage.item.property.NetworkItemPropertyGetter; import com.refinedmods.refinedstorage.item.property.SecurityCardItemPropertyGetter; import com.refinedmods.refinedstorage.render.BakedModelOverrideRegistry; -import com.refinedmods.refinedstorage.render.ExperimentalLightingPipelineNagger; import com.refinedmods.refinedstorage.render.color.PatternItemColor; import com.refinedmods.refinedstorage.render.model.*; import com.refinedmods.refinedstorage.render.resourcepack.ResourcePackListener; @@ -35,8 +34,10 @@ import net.minecraft.resources.IResourceManager; import net.minecraft.util.ResourceLocation; import net.minecraftforge.client.event.ModelBakeEvent; import net.minecraftforge.client.event.TextureStitchEvent; +import net.minecraftforge.client.event.ModelRegistryEvent; import net.minecraftforge.client.model.ModelLoader; import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.event.AddReloadListenerEvent; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.client.registry.ClientRegistry; import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; @@ -56,13 +57,6 @@ public class ClientSetup { private final BakedModelOverrideRegistry bakedModelOverrideRegistry = new BakedModelOverrideRegistry(); public ClientSetup() { - Minecraft minecraft = Minecraft.getInstance(); - if (minecraft != null) { // This is null in a runData environment. - IResourceManager resourceManager = minecraft.getResourceManager(); - if (resourceManager instanceof IReloadableResourceManager) { - ((IReloadableResourceManager) resourceManager).addReloadListener(new ResourcePackListener()); - } - } forEachColorApply("controller", (name, color) -> bakedModelOverrideRegistry.add(name, (base, registry) -> new FullbrightBakedModel( base, @@ -156,28 +150,11 @@ public class ClientSetup { bakedModelOverrideRegistry.add(new ResourceLocation(RS.ID, "pattern"), (base, registry) -> new PatternBakedModel(base)); - ModelLoader.addSpecialModel(DISK_RESOURCE); - ModelLoader.addSpecialModel(DISK_NEAR_CAPACITY_RESOURCE); - ModelLoader.addSpecialModel(DISK_FULL_RESOURCE); - ModelLoader.addSpecialModel(DISK_DISCONNECTED_RESOURCE); - - ModelLoader.addSpecialModel(new ResourceLocation(RS.ID + ":block/disk_manipulator/disconnected")); - - for (DyeColor color : DyeColor.values()) { - ModelLoader.addSpecialModel(new ResourceLocation(RS.ID + ":block/disk_manipulator/" + color)); - } - - ModelLoader.addSpecialModel(new ResourceLocation(RS.ID + ":block/portable_grid_connected")); - ModelLoader.addSpecialModel(new ResourceLocation(RS.ID + ":block/portable_grid_disconnected")); - ModelLoader.addSpecialModel(new ResourceLocation(RS.ID + ":block/disks/portable_grid_disk")); - ModelLoader.addSpecialModel(new ResourceLocation(RS.ID + ":block/disks/portable_grid_disk_near_capacity")); - ModelLoader.addSpecialModel(new ResourceLocation(RS.ID + ":block/disks/portable_grid_disk_full")); - ModelLoader.addSpecialModel(new ResourceLocation(RS.ID + ":block/disks/portable_grid_disk_disconnected")); - FMLJavaModLoadingContext.get().getModEventBus().addListener(this::onClientSetup); FMLJavaModLoadingContext.get().getModEventBus().addListener(this::onModelBake); + FMLJavaModLoadingContext.get().getModEventBus().addListener(this::onModelRegistry); + MinecraftForge.EVENT_BUS.addListener(this::addReloadListener); FMLJavaModLoadingContext.get().getModEventBus().addListener(this::onTextureStitch); - MinecraftForge.EVENT_BUS.addListener(new ExperimentalLightingPipelineNagger()::onPlayerLoggedIn); API.instance().addPatternRenderHandler(pattern -> Screen.hasShiftDown()); @@ -288,19 +265,45 @@ public class ClientSetup { e.getMinecraftSupplier().get().getItemColors().register(new PatternItemColor(), RSItems.PATTERN.get()); - ItemModelsProperties.func_239418_a_(RSItems.SECURITY_CARD.get(), new ResourceLocation("active"), new SecurityCardItemPropertyGetter()); + ItemModelsProperties.registerProperty(RSItems.SECURITY_CARD.get(), new ResourceLocation("active"), new SecurityCardItemPropertyGetter()); - RSItems.CONTROLLER.values().forEach(controller -> ItemModelsProperties.func_239418_a_(controller.get(), new ResourceLocation("energy_type"), new ControllerItemPropertyGetter())); - RSItems.CREATIVE_CONTROLLER.values().forEach(controller -> ItemModelsProperties.func_239418_a_(controller.get(), new ResourceLocation("energy_type"), new ControllerItemPropertyGetter())); + RSItems.CONTROLLER.values().forEach(controller -> ItemModelsProperties.registerProperty(controller.get(), new ResourceLocation("energy_type"), new ControllerItemPropertyGetter())); + RSItems.CREATIVE_CONTROLLER.values().forEach(controller -> ItemModelsProperties.registerProperty(controller.get(), new ResourceLocation("energy_type"), new ControllerItemPropertyGetter())); - ItemModelsProperties.func_239418_a_(RSItems.WIRELESS_CRAFTING_MONITOR.get(), CONNECTED, new NetworkItemPropertyGetter()); - ItemModelsProperties.func_239418_a_(RSItems.CREATIVE_WIRELESS_CRAFTING_MONITOR.get(), CONNECTED, new NetworkItemPropertyGetter()); + ItemModelsProperties.registerProperty(RSItems.WIRELESS_CRAFTING_MONITOR.get(), CONNECTED, new NetworkItemPropertyGetter()); + ItemModelsProperties.registerProperty(RSItems.CREATIVE_WIRELESS_CRAFTING_MONITOR.get(), CONNECTED, new NetworkItemPropertyGetter()); - ItemModelsProperties.func_239418_a_(RSItems.WIRELESS_GRID.get(), CONNECTED, new NetworkItemPropertyGetter()); - ItemModelsProperties.func_239418_a_(RSItems.CREATIVE_WIRELESS_GRID.get(), CONNECTED, new NetworkItemPropertyGetter()); + ItemModelsProperties.registerProperty(RSItems.WIRELESS_GRID.get(), CONNECTED, new NetworkItemPropertyGetter()); + ItemModelsProperties.registerProperty(RSItems.CREATIVE_WIRELESS_GRID.get(), CONNECTED, new NetworkItemPropertyGetter()); - ItemModelsProperties.func_239418_a_(RSItems.WIRELESS_FLUID_GRID.get(), CONNECTED, new NetworkItemPropertyGetter()); - ItemModelsProperties.func_239418_a_(RSItems.CREATIVE_WIRELESS_FLUID_GRID.get(), CONNECTED, new NetworkItemPropertyGetter()); + ItemModelsProperties.registerProperty(RSItems.WIRELESS_FLUID_GRID.get(), CONNECTED, new NetworkItemPropertyGetter()); + ItemModelsProperties.registerProperty(RSItems.CREATIVE_WIRELESS_FLUID_GRID.get(), CONNECTED, new NetworkItemPropertyGetter()); + } + + @SubscribeEvent + public void addReloadListener(AddReloadListenerEvent event){ + event.addListener(new ResourcePackListener()); + } + + @SubscribeEvent + public void onModelRegistry(ModelRegistryEvent e) { + ModelLoader.addSpecialModel(DISK_RESOURCE); + ModelLoader.addSpecialModel(DISK_NEAR_CAPACITY_RESOURCE); + ModelLoader.addSpecialModel(DISK_FULL_RESOURCE); + ModelLoader.addSpecialModel(DISK_DISCONNECTED_RESOURCE); + + ModelLoader.addSpecialModel(new ResourceLocation(RS.ID + ":block/disk_manipulator/disconnected")); + + for (DyeColor color : DyeColor.values()) { + ModelLoader.addSpecialModel(new ResourceLocation(RS.ID + ":block/disk_manipulator/" + color)); + } + + ModelLoader.addSpecialModel(new ResourceLocation(RS.ID + ":block/portable_grid_connected")); + ModelLoader.addSpecialModel(new ResourceLocation(RS.ID + ":block/portable_grid_disconnected")); + ModelLoader.addSpecialModel(new ResourceLocation(RS.ID + ":block/disks/portable_grid_disk")); + ModelLoader.addSpecialModel(new ResourceLocation(RS.ID + ":block/disks/portable_grid_disk_near_capacity")); + ModelLoader.addSpecialModel(new ResourceLocation(RS.ID + ":block/disks/portable_grid_disk_full")); + ModelLoader.addSpecialModel(new ResourceLocation(RS.ID + ":block/disks/portable_grid_disk_disconnected")); } @SubscribeEvent diff --git a/src/main/java/com/refinedmods/refinedstorage/tile/NetworkTransmitterTile.java b/src/main/java/com/refinedmods/refinedstorage/tile/NetworkTransmitterTile.java index a31592a53..c89c90e45 100644 --- a/src/main/java/com/refinedmods/refinedstorage/tile/NetworkTransmitterTile.java +++ b/src/main/java/com/refinedmods/refinedstorage/tile/NetworkTransmitterTile.java @@ -22,7 +22,7 @@ public class NetworkTransmitterTile extends NetworkNodeTile DISTANCE = new TileDataParameter<>(DataSerializers.VARINT, 0, t -> t.getNode().getDistance()); public static final TileDataParameter, NetworkTransmitterTile> RECEIVER_DIMENSION = new TileDataParameter<>(RSSerializers.OPTIONAL_RESOURCE_LOCATION_SERIALIZER, Optional.empty(), t -> { if (t.getNode().getReceiverDimension() != null) { - return Optional.of(t.getNode().getReceiverDimension().func_240901_a_()); + return Optional.of(t.getNode().getReceiverDimension().getLocation()); } return Optional.empty(); diff --git a/src/main/java/com/refinedmods/refinedstorage/util/ColorMap.java b/src/main/java/com/refinedmods/refinedstorage/util/ColorMap.java index 6e10c036f..1fc54cb14 100644 --- a/src/main/java/com/refinedmods/refinedstorage/util/ColorMap.java +++ b/src/main/java/com/refinedmods/refinedstorage/util/ColorMap.java @@ -112,15 +112,16 @@ public class ColorMap> { } private BlockState getNewState(RegistryObject block, BlockState state) { - if (block.get().getDirection() == BlockDirection.NONE) { - return block.get().getDefaultState() - .with(NetworkNodeBlock.CONNECTED, state.get(NetworkNodeBlock.CONNECTED)); - } else { - return block.get().getDefaultState() - .with(NetworkNodeBlock.CONNECTED, state.get(NetworkNodeBlock.CONNECTED)) - .with(block.get().getDirection().getProperty(), state.get(block.get().getDirection().getProperty())); + BlockState newState = block.get().getDefaultState(); + + if (((NetworkNodeBlock) block.get()).hasConnectedState()) { + newState = newState.with(NetworkNodeBlock.CONNECTED, state.get(NetworkNodeBlock.CONNECTED)); + } + if (block.get().getDirection() != BlockDirection.NONE) { + newState = newState.with(block.get().getDirection().getProperty(), state.get(block.get().getDirection().getProperty())); } + return newState; } public ActionResultType setBlockState(BlockState newState, ItemStack heldItem, World world, BlockPos pos, PlayerEntity player) { diff --git a/src/main/java/com/refinedmods/refinedstorage/util/ItemStackKey.java b/src/main/java/com/refinedmods/refinedstorage/util/ItemStackKey.java new file mode 100644 index 000000000..c4b461a94 --- /dev/null +++ b/src/main/java/com/refinedmods/refinedstorage/util/ItemStackKey.java @@ -0,0 +1,26 @@ +package com.refinedmods.refinedstorage.util; + +import com.refinedmods.refinedstorage.apiimpl.API; +import net.minecraft.item.ItemStack; + +public final class ItemStackKey { + private final ItemStack stack; + + public ItemStackKey(ItemStack stack) { + this.stack = stack; + } + + public ItemStack getStack() { + return stack; + } + + @Override + public boolean equals(Object other) { + return other instanceof ItemStackKey && API.instance().getComparer().isEqualNoQuantity(stack, ((ItemStackKey) other).stack); + } + + @Override + public int hashCode() { + return API.instance().getItemStackHashCode(stack); + } +} diff --git a/src/main/java/com/refinedmods/refinedstorage/util/RenderUtils.java b/src/main/java/com/refinedmods/refinedstorage/util/RenderUtils.java index 002ea91b8..868544f22 100644 --- a/src/main/java/com/refinedmods/refinedstorage/util/RenderUtils.java +++ b/src/main/java/com/refinedmods/refinedstorage/util/RenderUtils.java @@ -78,7 +78,7 @@ public final class RenderUtils { } if (displayAmount) { - data = new StringTextComponent(amount + "x ").append(data); + data = new StringTextComponent(amount + "x ").appendSibling(data); } tooltip.add(data.setStyle(Styles.GRAY)); @@ -106,7 +106,7 @@ public final class RenderUtils { } if (displayMb) { - data = new StringTextComponent(API.instance().getQuantityFormatter().formatInBucketForm(amount) + " ").append(data); + data = new StringTextComponent(API.instance().getQuantityFormatter().formatInBucketForm(amount) + " ").appendSibling(data); } tooltip.add(data.setStyle(Styles.GRAY)); @@ -181,7 +181,7 @@ public final class RenderUtils { List wrappedTextLines = new ArrayList<>(); for (int i = 0; i < textLines.size(); i++) { ITextProperties textLine = textLines.get(i); - List wrappedLine = font.func_238420_b_().func_238362_b_(textLine, tooltipTextWidth, Style.EMPTY); + List wrappedLine = font.getCharacterManager().func_238362_b_(textLine, tooltipTextWidth, Style.EMPTY); if (i == 0) titleLinesCount = wrappedLine.size(); @@ -254,7 +254,7 @@ public final class RenderUtils { for (int lineNumber = 0; lineNumber < textLines.size(); ++lineNumber) { ITextProperties line = textLines.get(lineNumber); if (line != null) - font.func_238416_a_(LanguageMap.getInstance().func_241870_a(line), (float) tooltipX, (float) tooltipY, -1, true, textLocation, renderType, false, 0, 15728880); + font.drawEntityText(LanguageMap.getInstance().func_241870_a(line), (float) tooltipX, (float) tooltipY, -1, true, textLocation, renderType, false, 0, 15728880); if (lineNumber + 1 == titleLinesCount) tooltipY += 2; @@ -275,7 +275,7 @@ public final class RenderUtils { RenderSystem.enableAlphaTest(); - // FontRenderer#drawStringWithShadow - call to func_228078_a_ (private) + // FontRenderer#drawStringWithShadow - call to renderString (private) MatrixStack smallTextStack = new MatrixStack(); smallTextStack.translate(0.0D, 0.0D, zLevel); smallTextStack.scale(textScale, textScale, 1); diff --git a/src/main/resources/META-INF/mods.toml b/src/main/resources/META-INF/mods.toml index 811232a90..a7829368f 100644 --- a/src/main/resources/META-INF/mods.toml +++ b/src/main/resources/META-INF/mods.toml @@ -1,5 +1,5 @@ modLoader = "javafml" -loaderVersion = "[34,)" +loaderVersion = "[36,)" issueTrackerURL = "https://github.com/refinedmods/refinedstorage" license="MIT" [[mods]] @@ -13,14 +13,3 @@ authors = "Refined Mods" description = ''' An elegant solution to your hoarding problem ''' -[[dependencies.refinedstorage]] #optional -# the modid of the dependency -modId = "forge" #mandatory -# Does this dependency have to exist - if not, ordering below must be specified -mandatory = true #mandatory -# The version range of the dependency -versionRange = "[34.1.0,)" #mandatory -# An ordering relationship for the dependency - BEFORE or AFTER required if the relationship is not mandatory -ordering = "NONE" -# Side this dependency is applied on - BOTH, CLIENT or SERVER -side = "BOTH" diff --git a/src/main/resources/assets/refinedstorage/lang/ja_jp.json b/src/main/resources/assets/refinedstorage/lang/ja_jp.json index 36e979896..0d0dd9c5f 100644 --- a/src/main/resources/assets/refinedstorage/lang/ja_jp.json +++ b/src/main/resources/assets/refinedstorage/lang/ja_jp.json @@ -1,6 +1,6 @@ { - "itemGroup.refinedstorage": "上達されたストレージ", - "itemGroup.refinedstorage.covers": "上達されたストレージのカバー", + "itemGroup.refinedstorage": "Refined Storage", + "itemGroup.refinedstorage.covers": "Refined Storage カバー", "key.refinedstorage.focusSearchBar": "グリッドの検索欄を選択", "key.refinedstorage.clearGridCraftingMatrix": "グリッドのクラフト欄をクリア", @@ -13,7 +13,7 @@ "gui.refinedstorage.creative_controller": "クリエイティブコントローラー", "gui.refinedstorage.grid": "グリッド", "gui.refinedstorage.grid.craft": "クラフト", - "gui.refinedstorage.crafting_grid": "クラフトグリッド", + "gui.refinedstorage.crafting_grid": "製作グリッド", "gui.refinedstorage.pattern_grid": "パターングリッド", "gui.refinedstorage.grid.pattern_create": "作成", "gui.refinedstorage.fluid_grid": "流体グリッド", @@ -42,10 +42,10 @@ "gui.refinedstorage.crafting_monitor.processing": "加工中: %d", "gui.refinedstorage.crafting_monitor.scheduled": "加工予定: %d", "gui.refinedstorage.crafting_monitor.crafting": "クラフト中: %d", - "gui.refinedstorage.crafting_monitor.machine_does_not_accept_item": "機械にアイテムを搬入できない", - "gui.refinedstorage.crafting_monitor.machine_does_not_accept_fluid": "機械に流体を搬入できない", - "gui.refinedstorage.crafting_monitor.machine_none": "機械が見つからない", - "gui.refinedstorage.crafting_monitor.crafter_is_locked": "クラフターがロックされている", + "gui.refinedstorage.crafting_monitor.machine_does_not_accept_item": "機械にアイテムを搬入できません", + "gui.refinedstorage.crafting_monitor.machine_does_not_accept_fluid": "機械に流体を搬入できません", + "gui.refinedstorage.crafting_monitor.machine_none": "機械が見つかりません", + "gui.refinedstorage.crafting_monitor.crafter_is_locked": "クラフターがロックされています", "gui.refinedstorage.wireless_transmitter": "ワイヤレス送信機", "gui.refinedstorage.wireless_transmitter.distance": "%dブロック", "gui.refinedstorage.crafter": "クラフター", @@ -62,14 +62,14 @@ "gui.refinedstorage.crafting_preview.to_craft": "作成数: %d", "gui.refinedstorage.crafting_preview.available": "使用: %d", "gui.refinedstorage.crafting_preview.missing": "不足: %d", - "gui.refinedstorage.crafting_preview.error": "リクエストに失敗した", - "gui.refinedstorage.crafting_preview.error.recursive.0": "材料が自身を要求している", + "gui.refinedstorage.crafting_preview.error": "リクエストに失敗しました", + "gui.refinedstorage.crafting_preview.error.recursive.0": "材料が自身を要求しています", "gui.refinedstorage.crafting_preview.error.recursive.1": "該当パターンの削除", "gui.refinedstorage.crafting_preview.error.recursive.2": "または", - "gui.refinedstorage.crafting_preview.error.recursive.3": "クラフト中に使われていないことを確認する必要がある", + "gui.refinedstorage.crafting_preview.error.recursive.3": "クラフト中に使われていないことを確認する必要があります", "gui.refinedstorage.crafting_preview.error.recursive.4": "該当パターン:", "gui.refinedstorage.crafting_preview.error.too_complex.0": "クラフト過程の計算が複雑すぎます", - "gui.refinedstorage.crafting_preview.error.too_complex.1": "サーバーの負担を避けるため計算が停止された", + "gui.refinedstorage.crafting_preview.error.too_complex.1": "サーバーの負担を避けるため計算が停止されました", "gui.refinedstorage.security_manager": "セキュリティマネージャー", "gui.refinedstorage.security_manager.configure": "設定", "gui.refinedstorage.security_manager.permission.0": "搬入", @@ -79,7 +79,7 @@ "gui.refinedstorage.security_manager.permission.2": "自動クラフト", "gui.refinedstorage.security_manager.permission.2.tooltip": "自動クラフトの開始・キャンセルやクラフト過程の確認", "gui.refinedstorage.security_manager.permission.3": "変更", - "gui.refinedstorage.security_manager.permission.3.tooltip": "ブロックのインターフェースを開く", + "gui.refinedstorage.security_manager.permission.3.tooltip": "ブロックのGUIを開く", "gui.refinedstorage.security_manager.permission.4": "構築", "gui.refinedstorage.security_manager.permission.4.tooltip": "ネットワークのデバイスを追加または撤去する", "gui.refinedstorage.security_manager.permission.5": "セキュリティ", @@ -100,11 +100,11 @@ "misc.refinedstorage.storage.full": "%d%%を使用中", "misc.refinedstorage.network_item.tooltip": "%d, %d, %dにリンク済", - "misc.refinedstorage.network_item.out_of_range": "有効範囲内のワイヤレス送信機がない", - "misc.refinedstorage.network_item.not_found": "ネットワークが見つからない", - "misc.refinedstorage.network_item.shortcut_not_found": "インベントリに%sがない", - "misc.refinedstorage.network_item.shortcut_duplicate": "インベントリに%sが複数ある", - "misc.refinedstorage.network_item.out_of_energy": "%sがエネルギー切れだ", + "misc.refinedstorage.network_item.out_of_range": "有効範囲内のワイヤレス送信機がありません", + "misc.refinedstorage.network_item.not_found": "ネットワークが見つかりません", + "misc.refinedstorage.network_item.shortcut_not_found": "インベントリに%sがありません", + "misc.refinedstorage.network_item.shortcut_duplicate": "インベントリに%sが複数あります", + "misc.refinedstorage.network_item.out_of_energy": "%sがエネルギー切れです", "misc.refinedstorage.network_card.tooltip": "%sの%d, %d, %dにリンク済", @@ -115,12 +115,12 @@ "misc.refinedstorage.pattern.allowed_item_tag": "%sに%sのアイテムを使用する", "misc.refinedstorage.pattern.allowed_fluid_tag": "%sに%sの流体を使用する", - "misc.refinedstorage.pattern.error.processing_no_outputs": "加工中のパターンに完成品がない", - "misc.refinedstorage.pattern.error.no_output": "指定されたレシピに完成品がない", - "misc.refinedstorage.pattern.error.recipe_does_not_exist": "指定されたレシピは存在しない", - "misc.refinedstorage.pattern.error.tag_no_longer_applicable": "タグ %s は%sに適用できなくなった", + "misc.refinedstorage.pattern.error.processing_no_outputs": "加工中のパターンに完成品がありません", + "misc.refinedstorage.pattern.error.no_output": "指定されたレシピに完成品がありません", + "misc.refinedstorage.pattern.error.recipe_does_not_exist": "指定されたレシピは存在しません", + "misc.refinedstorage.pattern.error.tag_no_longer_applicable": "タグ %s は%sに適用できなくなりました", - "misc.refinedstorage.security.no_permission": "その行動をする権限がない", + "misc.refinedstorage.security.no_permission": "その行動をする権限がありません", "misc.refinedstorage.start": "開始", "misc.refinedstorage.clear": "クリア", @@ -171,8 +171,8 @@ "sidebutton.refinedstorage.grid.sorting.type": "並べ替え", "sidebutton.refinedstorage.grid.sorting.type.0": "量", "sidebutton.refinedstorage.grid.sorting.type.1": "名前", - "sidebutton.refinedstorage.grid.sorting.type.2": "アイデンティフィケーションの番号", - "sidebutton.refinedstorage.grid.sorting.type.3": "InventoryTweaksのモッド", + "sidebutton.refinedstorage.grid.sorting.type.2": "ID", + "sidebutton.refinedstorage.grid.sorting.type.3": "InventoryTweaks", "sidebutton.refinedstorage.grid.sorting.type.4": "最終変更時間", "sidebutton.refinedstorage.grid.search_box_mode": "検索ボックス", "sidebutton.refinedstorage.grid.search_box_mode.0": "通常", @@ -215,7 +215,7 @@ "block.refinedstorage.creative_controller": "クリエイティブコントローラー", "block.refinedstorage.cable": "ケーブル", "block.refinedstorage.grid": "グリッド", - "block.refinedstorage.crafting_grid": "クラフトグリッド", + "block.refinedstorage.crafting_grid": "製作グリッド", "block.refinedstorage.pattern_grid": "パターングリッド", "block.refinedstorage.fluid_grid": "流体グリッド", "block.refinedstorage.disk_drive": "ディスクドライブ", @@ -292,7 +292,7 @@ "item.refinedstorage.upgrade": "アップグレード", "item.refinedstorage.range_upgrade": "レンジアップグレード", "item.refinedstorage.speed_upgrade": "スピードアップグレード", - "item.refinedstorage.crafting_upgrade": "クラフトアップグレード", + "item.refinedstorage.crafting_upgrade": "クラフティングアップグレード", "item.refinedstorage.stack_upgrade": "スタックアップグレード", "item.refinedstorage.silk_touch_upgrade": "シルクタッチアップグレード", "item.refinedstorage.fortune_1_upgrade": "幸運アップグレード", @@ -306,11 +306,11 @@ "item.refinedstorage.security_card": "セキュリティカード", "item.refinedstorage.security_card.owner": "所有者: %s", "item.refinedstorage.processor_binding": "プロセッサ接合材", - "commands.refinedstorage.disk.create.error.disk_not_found": "ディスク%sが見つからない", + "commands.refinedstorage.disk.create.error.disk_not_found": "ディスク%sが見つかりません", "commands.refinedstorage.disk.create.success": "ディスク%sを%sに割り当てました", "advancements.refinedstorage.controlling.description": "コントローラーを作る", "advancements.refinedstorage.connecting": "接続", - "advancements.refinedstorage.connecting.description": "装置を隣接させて設置する他、ケーブルを使用することもできる", + "advancements.refinedstorage.connecting.description": "装置を隣接させて設置する他、ケーブルを使用することもできます", "advancements.refinedstorage.conditional_connecting": "条件付きの接続", "advancements.refinedstorage.conditional_connecting.description": "ネットワーク信号をレッドストーンで接続・遮断するリレーを作る", "advancements.refinedstorage.drives": "ドライブ", @@ -324,7 +324,7 @@ "advancements.refinedstorage.portable_storage": "携帯ストレージ", "advancements.refinedstorage.portable_storage.description": "ネットワーク内でなくてもディスク内のアイテムや流体にアクセスできる携帯グリッドを作る", "advancements.refinedstorage.upgrading_your_grid": "グリッドのアップグレード", - "advancements.refinedstorage.upgrading_your_grid.description": "グリッドを製作グリッドにアップグレードするとクラフトが可能になる", + "advancements.refinedstorage.upgrading_your_grid.description": "グリッドを製作グリッドにアップグレードするとクラフトが可能になります", "advancements.refinedstorage.storing_fluids": "流体を貯蔵", "advancements.refinedstorage.storing_fluids.description": "流体ストレージディスクを作成してディスクドライブに搭載する", "advancements.refinedstorage.viewing_fluids": "流体を確認", @@ -335,7 +335,7 @@ "advancements.refinedstorage.autocrafting.description": "クラフターを作る", "advancements.refinedstorage.pattern_creation": "パターンを作成", "advancements.refinedstorage.pattern_creation.description": "パターングリッドとパターンを使用してパターンを作る", - "advancements.refinedstorage.monitoring": "モニター中", + "advancements.refinedstorage.monitoring": "モニタリング", "advancements.refinedstorage.monitoring.description": "クラフトモニターを使用して自動クラフトの状況をチェックする", "advancements.refinedstorage.managing_patterns": "パターンの管理", "advancements.refinedstorage.managing_patterns.description": "クラフターマネージャーを使用してより良い方法でパターンを管理する", @@ -361,7 +361,7 @@ "advancements.refinedstorage.no_cables_required.description": "ネットワーク送信機と受信機、ネットワークカードを使用してケーブルを使用せずにネットワークに装置を追加する", "advancements.refinedstorage.upgrading": "アップグレード", "advancements.refinedstorage.upgrading.description": "様々な装置を改善するアップグレードを作る", - "advancements.refinedstorage.crafting_on_demand": "インスタントクラフト", + "advancements.refinedstorage.crafting_on_demand": "クラフティング・オンデマンド", "advancements.refinedstorage.crafting_on_demand.description": "インターフェースやエクスポーター、コンストラクターにクラフティングアップグレードを搭載してアイテムやブロックをオンデマンドで作る", "advancements.refinedstorage.detecting": "検知", "advancements.refinedstorage.detecting.description": "検出器を使用してネットワーク内のアイテムや流体を検出する", diff --git a/src/main/resources/data/curios/tags/items/curio.json b/src/main/resources/data/curios/tags/items/curio.json new file mode 100644 index 000000000..3191e247a --- /dev/null +++ b/src/main/resources/data/curios/tags/items/curio.json @@ -0,0 +1,11 @@ +{ + "replace": false, + "values": [ + "refinedstorage:wireless_grid", + "refinedstorage:creative_wireless_grid", + "refinedstorage:wireless_fluid_grid", + "refinedstorage:creative_wireless_fluid_grid", + "refinedstorage:wireless_crafting_monitor", + "refinedstorage:creative_wireless_crafting_monitor" + ] +} \ No newline at end of file