Merge remote-tracking branch 'refinedmods/mc1.16' into mc1.16

This commit is contained in:
Buuz135
2021-09-12 22:22:58 +02:00
68 changed files with 615 additions and 409 deletions

View File

@@ -1,5 +1,44 @@
# Refined Storage Changelog # 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 ### 1.9.11
- Fixed disks and network devices not loading when they did not previously exist - Fixed disks and network devices not loading when they did not previously exist

5
Jenkinsfile vendored
View File

@@ -22,9 +22,4 @@ node {
stage('Publish artifacts') { stage('Publish artifacts') {
sh "./gradlew publish" sh "./gradlew publish"
} }
stage('SonarQube analysis') {
withCredentials([string(credentialsId: 'SONAR_TOKEN', variable: 'SONAR_TOKEN')]) {
sh "./gradlew sonarqube -Dsonar.login=$SONAR_TOKEN"
}
}
} }

View File

@@ -1,16 +1,14 @@
buildscript { buildscript {
repositories { repositories {
maven { url = 'https://files.minecraftforge.net/maven' } maven { url = 'https://maven.minecraftforge.net' }
jcenter()
mavenCentral() mavenCentral()
} }
dependencies { 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 { plugins {
id "org.sonarqube" version "3.0"
id 'info.solidsoft.pitest' version '1.5.1' id 'info.solidsoft.pitest' version '1.5.1'
} }
@@ -19,15 +17,13 @@ repositories {
url = "https://dvs1.progwml6.com/files/maven/" url = "https://dvs1.progwml6.com/files/maven/"
} }
maven { maven {
url "https://minecraft.curseforge.com/api/maven/" url "https://www.cursemaven.com"
content {
includeGroup "curse.maven"
} }
} }
maven {
sonarqube { url = "https://maven.theillusivec4.top/"
properties {
property "sonar.projectKey", "refinedmods_refinedstorage"
property "sonar.organization", "refinedmods"
property "sonar.host.url", "https://sonarcloud.io"
} }
} }
@@ -40,7 +36,7 @@ pitest {
junit5PluginVersion = "0.12" junit5PluginVersion = "0.12"
} }
version = '1.9.12' version = '1.9.15'
def env = System.getenv() def env = System.getenv()
if (env.BUILD_NUMBER) { if (env.BUILD_NUMBER) {
version = version + "+" + "${env.BUILD_NUMBER}" version = version + "+" + "${env.BUILD_NUMBER}"
@@ -48,10 +44,10 @@ if (env.BUILD_NUMBER) {
group = 'com.refinedmods' group = 'com.refinedmods'
archivesBaseName = 'refinedstorage' archivesBaseName = 'refinedstorage'
sourceCompatibility = targetCompatibility = compileJava.sourceCompatibility = compileJava.targetCompatibility = '1.8' java.toolchain.languageVersion = JavaLanguageVersion.of(8)
minecraft { 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') accessTransformer = file('src/main/resources/META-INF/accesstransformer.cfg')
runs { runs {
@@ -116,14 +112,17 @@ processResources {
} }
dependencies { 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") compileOnly fg.deobf("mezz.jei:jei-1.16.5:7.7.0.106:api")
runtimeOnly fg.deobf("mezz.jei:jei-1.16.3:7.3.2.36") 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') testImplementation('org.junit.jupiter:junit-jupiter-api:5.6.2')
testRuntime('org.junit.jupiter:junit-jupiter-engine:5.6.2') testRuntime('org.junit.jupiter:junit-jupiter-engine:5.6.2')

Binary file not shown.

View File

@@ -1,5 +1,5 @@
distributionBase=GRADLE_USER_HOME distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-6.9-bin.zip
zipStoreBase=GRADLE_USER_HOME zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-5.6-bin.zip

53
gradlew vendored
View File

@@ -1,5 +1,21 @@
#!/usr/bin/env sh #!/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 ## Gradle start up script for UN*X
@@ -28,7 +44,7 @@ APP_NAME="Gradle"
APP_BASE_NAME=`basename "$0"` 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. # 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. # Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD="maximum" MAX_FD="maximum"
@@ -66,6 +82,7 @@ esac
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
# Determine the Java command to use to start the JVM. # Determine the Java command to use to start the JVM.
if [ -n "$JAVA_HOME" ] ; then if [ -n "$JAVA_HOME" ] ; then
if [ -x "$JAVA_HOME/jre/sh/java" ] ; 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\"" GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
fi fi
# For Cygwin, switch paths to Windows format before running java # For Cygwin or MSYS, switch paths to Windows format before running java
if $cygwin ; then if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then
APP_HOME=`cygpath --path --mixed "$APP_HOME"` APP_HOME=`cygpath --path --mixed "$APP_HOME"`
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
JAVACMD=`cygpath --unix "$JAVACMD"` JAVACMD=`cygpath --unix "$JAVACMD"`
# We build the pattern for arguments to be converted via cygpath # We build the pattern for arguments to be converted via cygpath
@@ -138,19 +156,19 @@ if $cygwin ; then
else else
eval `echo args$i`="\"$arg\"" eval `echo args$i`="\"$arg\""
fi fi
i=$((i+1)) i=`expr $i + 1`
done done
case $i in case $i in
(0) set -- ;; 0) set -- ;;
(1) set -- "$args0" ;; 1) set -- "$args0" ;;
(2) set -- "$args0" "$args1" ;; 2) set -- "$args0" "$args1" ;;
(3) set -- "$args0" "$args1" "$args2" ;; 3) set -- "$args0" "$args1" "$args2" ;;
(4) set -- "$args0" "$args1" "$args2" "$args3" ;; 4) set -- "$args0" "$args1" "$args2" "$args3" ;;
(5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
(6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
(7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
(8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
(9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
esac esac
fi fi
@@ -159,14 +177,9 @@ save () {
for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
echo " " echo " "
} }
APP_ARGS=$(save "$@") APP_ARGS=`save "$@"`
# Collect all arguments for the java command, following the shell quoting and substitution rules # 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" 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" "$@" exec "$JAVACMD" "$@"

43
gradlew.bat vendored
View File

@@ -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 @if "%DEBUG%" == "" @echo off
@rem ########################################################################## @rem ##########################################################################
@rem @rem
@@ -13,15 +29,18 @@ if "%DIRNAME%" == "" set DIRNAME=.
set APP_BASE_NAME=%~n0 set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME% 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. @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 @rem Find java.exe
if defined JAVA_HOME goto findJavaFromJavaHome if defined JAVA_HOME goto findJavaFromJavaHome
set JAVA_EXE=java.exe set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1 %JAVA_EXE% -version >NUL 2>&1
if "%ERRORLEVEL%" == "0" goto init if "%ERRORLEVEL%" == "0" goto execute
echo. echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 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_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe set JAVA_EXE=%JAVA_HOME%/bin/java.exe
if exist "%JAVA_EXE%" goto init if exist "%JAVA_EXE%" goto execute
echo. echo.
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
@@ -45,28 +64,14 @@ echo location of your Java installation.
goto fail 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 :execute
@rem Setup the command line @rem Setup the command line
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
@rem Execute Gradle @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 :end
@rem End local scope for the variables with windows NT shell @rem End local scope for the variables with windows NT shell

View File

@@ -4,6 +4,7 @@ import com.refinedmods.refinedstorage.apiimpl.API;
import com.refinedmods.refinedstorage.config.ClientConfig; import com.refinedmods.refinedstorage.config.ClientConfig;
import com.refinedmods.refinedstorage.config.ServerConfig; import com.refinedmods.refinedstorage.config.ServerConfig;
import com.refinedmods.refinedstorage.datageneration.DataGenerators; import com.refinedmods.refinedstorage.datageneration.DataGenerators;
import com.refinedmods.refinedstorage.integration.curios.CuriosIntegration;
import com.refinedmods.refinedstorage.item.group.MainItemGroup; import com.refinedmods.refinedstorage.item.group.MainItemGroup;
import com.refinedmods.refinedstorage.network.NetworkHandler; import com.refinedmods.refinedstorage.network.NetworkHandler;
import com.refinedmods.refinedstorage.setup.ClientSetup; 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(IRecipeSerializer.class, commonSetup::onRegisterRecipeSerializers);
FMLJavaModLoadingContext.get().getModEventBus().addGenericListener(ContainerType.class, commonSetup::onRegisterContainers); FMLJavaModLoadingContext.get().getModEventBus().addGenericListener(ContainerType.class, commonSetup::onRegisterContainers);
FMLJavaModLoadingContext.get().getModEventBus().register(new DataGenerators()); FMLJavaModLoadingContext.get().getModEventBus().register(new DataGenerators());
FMLJavaModLoadingContext.get().getModEventBus().register(new CuriosIntegration());
API.deliver(); API.deliver();
} }

View File

@@ -12,6 +12,7 @@ import net.minecraft.nbt.ListNBT;
import net.minecraftforge.common.util.Constants; import net.minecraftforge.common.util.Constants;
import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.FluidStack;
import javax.annotation.Nullable;
import java.util.Iterator; import java.util.Iterator;
import java.util.LinkedHashMap; import java.util.LinkedHashMap;
import java.util.List; import java.util.List;
@@ -30,6 +31,11 @@ public class NodeRequirements {
private final Map<Integer, IStackList<FluidStack>> fluidRequirements = new LinkedHashMap<>(); private final Map<Integer, IStackList<FluidStack>> fluidRequirements = new LinkedHashMap<>();
private final Map<Integer, Integer> fluidsNeededPerCraft = new LinkedHashMap<>(); private final Map<Integer, Integer> fluidsNeededPerCraft = new LinkedHashMap<>();
@Nullable
private IStackList<ItemStack> cachedSimulatedItemRequirementSet = null;
@Nullable
private IStackList<FluidStack> cachedSimulatedFluidRequirementSet = null;
public void addItemRequirement(int ingredientNumber, ItemStack stack, int size, int perCraft) { public void addItemRequirement(int ingredientNumber, ItemStack stack, int size, int perCraft) {
if (!itemsNeededPerCraft.containsKey(ingredientNumber)) { if (!itemsNeededPerCraft.containsKey(ingredientNumber)) {
itemsNeededPerCraft.put(ingredientNumber, perCraft); itemsNeededPerCraft.put(ingredientNumber, perCraft);
@@ -37,6 +43,7 @@ public class NodeRequirements {
IStackList<ItemStack> list = itemRequirements.computeIfAbsent(ingredientNumber, key -> API.instance().createItemStackList()); IStackList<ItemStack> list = itemRequirements.computeIfAbsent(ingredientNumber, key -> API.instance().createItemStackList());
list.add(stack, size); list.add(stack, size);
cachedSimulatedItemRequirementSet = null;
} }
public void addFluidRequirement(int ingredientNumber, FluidStack stack, int size, int perCraft) { public void addFluidRequirement(int ingredientNumber, FluidStack stack, int size, int perCraft) {
@@ -46,9 +53,15 @@ public class NodeRequirements {
IStackList<FluidStack> list = fluidRequirements.computeIfAbsent(ingredientNumber, key -> API.instance().createFluidStackList()); IStackList<FluidStack> list = fluidRequirements.computeIfAbsent(ingredientNumber, key -> API.instance().createFluidStackList());
list.add(stack, size); list.add(stack, size);
cachedSimulatedFluidRequirementSet = null;
} }
public IStackList<ItemStack> getSingleItemRequirementSet(boolean simulate) { public IStackList<ItemStack> getSingleItemRequirementSet(boolean simulate) {
IStackList<ItemStack> cached = cachedSimulatedItemRequirementSet;
if (simulate && cached != null) {
return cached;
}
IStackList<ItemStack> toReturn = API.instance().createItemStackList(); IStackList<ItemStack> toReturn = API.instance().createItemStackList();
for (int i = 0; i < itemRequirements.size(); i++) { for (int i = 0; i < itemRequirements.size(); i++) {
@@ -83,10 +96,17 @@ public class NodeRequirements {
} }
} }
cachedSimulatedItemRequirementSet = simulate ? toReturn : null;
return toReturn; return toReturn;
} }
public IStackList<FluidStack> getSingleFluidRequirementSet(boolean simulate) { public IStackList<FluidStack> getSingleFluidRequirementSet(boolean simulate) {
IStackList<FluidStack> cached = cachedSimulatedFluidRequirementSet;
if (simulate && cached != null) {
return cached;
}
IStackList<FluidStack> toReturn = API.instance().createFluidStackList(); IStackList<FluidStack> toReturn = API.instance().createFluidStackList();
for (int i = 0; i < fluidRequirements.size(); i++) { for (int i = 0; i < fluidRequirements.size(); i++) {
@@ -121,6 +141,8 @@ public class NodeRequirements {
} }
} }
cachedSimulatedFluidRequirementSet = simulate ? toReturn : null;
return toReturn; return toReturn;
} }

View File

@@ -132,9 +132,11 @@ public class ProcessingNode extends Node {
if (canInsertFullAmount) { if (canInsertFullAmount) {
canInsertFullAmount = IoUtil.insertIntoInventory(container.getConnectedFluidInventory(), extractedFluids.getStacks(), Action.SIMULATE); canInsertFullAmount = IoUtil.insertIntoInventory(container.getConnectedFluidInventory(), extractedFluids.getStacks(), Action.SIMULATE);
} }
} else {
break;
} }
if (hasAllRequirements && !canInsertFullAmount) { if (!canInsertFullAmount) {
if (allRejected) { if (allRejected) {
this.state = ProcessingState.MACHINE_DOES_NOT_ACCEPT; this.state = ProcessingState.MACHINE_DOES_NOT_ACCEPT;
} }
@@ -144,7 +146,6 @@ public class ProcessingNode extends Node {
allRejected = false; allRejected = false;
} }
if (hasAllRequirements && canInsertFullAmount) {
this.state = ProcessingState.READY; this.state = ProcessingState.READY;
extractedItems = IoUtil.extractFromInternalItemStorage(requirements.getSingleItemRequirementSet(false), internalStorage, Action.PERFORM); extractedItems = IoUtil.extractFromInternalItemStorage(requirements.getSingleItemRequirementSet(false), internalStorage, Action.PERFORM);
@@ -161,7 +162,6 @@ public class ProcessingNode extends Node {
} }
} }
} }
}
if (originalState != state) { if (originalState != state) {
network.getCraftingManager().onTaskChanged(); network.getCraftingManager().onTaskChanged();

View File

@@ -26,7 +26,7 @@ public class NetworkNodeGraphEntry implements INetworkNodeGraphEntry {
NetworkNodeGraphEntry otherItem = (NetworkNodeGraphEntry) other; 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; return false;
} }
@@ -36,7 +36,7 @@ public class NetworkNodeGraphEntry implements INetworkNodeGraphEntry {
@Override @Override
public int hashCode() { public int hashCode() {
int result = node.getPos().hashCode(); int result = node.getPos().hashCode();
result = 31 * result + node.getWorld().func_234923_W_().hashCode(); result = 31 * result + node.getWorld().getDimensionKey().hashCode();
return result; return result;
} }
} }

View File

@@ -99,7 +99,6 @@ public class FluidGridHandler implements IFluidGridHandler {
FluidStack stack = network.getFluidStorageCache().getCraftablesList().get(id); FluidStack stack = network.getFluidStorageCache().getCraftablesList().get(id);
if (stack != null) { if (stack != null) {
Thread calculationThread = new Thread(() -> {
ICalculationResult result = network.getCraftingManager().create(stack, quantity); ICalculationResult result = network.getCraftingManager().create(stack, quantity);
if (result == null) { if (result == null) {
return; return;
@@ -130,9 +129,6 @@ public class FluidGridHandler implements IFluidGridHandler {
) )
); );
} }
}, "RS crafting preview calculation");
calculationThread.start();
} }
} }

View File

@@ -190,7 +190,6 @@ public class ItemGridHandler implements IItemGridHandler {
ItemStack stack = network.getItemStorageCache().getCraftablesList().get(id); ItemStack stack = network.getItemStorageCache().getCraftablesList().get(id);
if (stack != null) { 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) { if (!result.isOk() && result.getType() != CalculationResultType.MISSING) {
@@ -218,9 +217,6 @@ public class ItemGridHandler implements IItemGridHandler {
) )
); );
} }
}, "RS crafting preview calculation");
calculationThread.start();
} }
} }

View File

@@ -33,7 +33,7 @@ public class NetworkItemManager implements INetworkItemManager {
if (node instanceof IWirelessTransmitter && if (node instanceof IWirelessTransmitter &&
network.canRun() && network.canRun() &&
node.isActive() && node.isActive() &&
((IWirelessTransmitter) node).getDimension() == player.getEntityWorld().func_234923_W_()) { ((IWirelessTransmitter) node).getDimension() == player.getEntityWorld().getDimensionKey()) {
IWirelessTransmitter transmitter = (IWirelessTransmitter) node; IWirelessTransmitter transmitter = (IWirelessTransmitter) node;
Vector3d pos = player.getPositionVec(); Vector3d pos = player.getPositionVec();

View File

@@ -30,6 +30,7 @@ import net.minecraftforge.items.IItemHandler;
import net.minecraftforge.items.IItemHandlerModifiable; import net.minecraftforge.items.IItemHandlerModifiable;
import net.minecraftforge.items.wrapper.CombinedInvWrapper; import net.minecraftforge.items.wrapper.CombinedInvWrapper;
import javax.annotation.Nonnull;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@@ -67,6 +68,16 @@ public class CrafterNetworkNode extends NetworkNode implements ICraftingPatternC
public int getSlotLimit(int slot) { public int getSlotLimit(int slot) {
return 1; 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)) .addValidator(new PatternItemValidator(world))
.addListener(new NetworkNodeInventoryListener(this)) .addListener(new NetworkNodeInventoryListener(this))
@@ -183,7 +194,7 @@ public class CrafterNetworkNode extends NetworkNode implements ICraftingPatternC
StackUtils.readItems(upgrades, 1, tag); StackUtils.readItems(upgrades, 1, tag);
if (tag.contains(NBT_DISPLAY_NAME)) { 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)) { if (tag.hasUniqueId(NBT_UUID)) {

View File

@@ -98,7 +98,7 @@ public class NetworkTransmitterNetworkNode extends NetworkNode {
} }
public boolean isSameDimension() { public boolean isSameDimension() {
return world.func_234923_W_() == receiverDimension; return world.getDimensionKey() == receiverDimension;
} }
private boolean canTransmit() { private boolean canTransmit() {

View File

@@ -62,7 +62,7 @@ public class WirelessTransmitterNetworkNode extends NetworkNode implements IWire
@Override @Override
public RegistryKey<World> getDimension() { public RegistryKey<World> getDimension() {
return world.func_234923_W_(); return world.getDimensionKey();
} }
public BaseItemHandler getUpgrades() { public BaseItemHandler getUpgrades() {

View File

@@ -82,7 +82,7 @@ public class ItemStorageDisk implements IStorageDisk<ItemStack> {
@Nonnull @Nonnull
public ItemStack insert(@Nonnull ItemStack stack, int size, Action action) { public ItemStack insert(@Nonnull ItemStack stack, int size, Action action) {
if (stack.isEmpty() || itemCount == capacity) { if (stack.isEmpty() || itemCount == capacity) {
return stack; return ItemHandlerHelper.copyStackWithSize(stack, size);
} }
for (ItemStack otherStack : stacks.get(stack.getItem())) { for (ItemStack otherStack : stacks.get(stack.getItem())) {

View File

@@ -83,8 +83,11 @@ public class FluidExternalStorage implements IExternalStorage<FluidStack> {
return stack; return stack;
} }
if (context.acceptsFluid(stack)) { IFluidHandler handler = handlerSupplier.get();
int filled = handlerSupplier.get().fill(StackUtils.copy(stack, size), action == Action.PERFORM ? IFluidHandler.FluidAction.EXECUTE : IFluidHandler.FluidAction.SIMULATE);
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) { if (filled == size) {
return FluidStack.EMPTY; return FluidStack.EMPTY;

View File

@@ -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.IStorageTracker;
import com.refinedmods.refinedstorage.api.storage.tracker.StorageTrackerEntry; 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 com.refinedmods.refinedstorage.util.StackUtils;
import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
@@ -17,7 +17,7 @@ public class ItemStorageTracker implements IStorageTracker<ItemStack> {
private static final String NBT_NAME = "Name"; private static final String NBT_NAME = "Name";
private static final String NBT_TIME = "Time"; private static final String NBT_TIME = "Time";
private final Map<Key, StorageTrackerEntry> changes = new HashMap<>(); private final Map<ItemStackKey, StorageTrackerEntry> changes = new HashMap<>();
private final Runnable listener; private final Runnable listener;
public ItemStorageTracker(Runnable listener) { public ItemStorageTracker(Runnable listener) {
@@ -26,14 +26,14 @@ public class ItemStorageTracker implements IStorageTracker<ItemStack> {
@Override @Override
public void changed(PlayerEntity player, ItemStack stack) { 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(); listener.run();
} }
@Override @Override
public StorageTrackerEntry get(ItemStack stack) { public StorageTrackerEntry get(ItemStack stack) {
return changes.get(new Key(stack)); return changes.get(new ItemStackKey(stack));
} }
public void readFromNbt(ListNBT list) { public void readFromNbt(ListNBT list) {
@@ -43,7 +43,7 @@ public class ItemStorageTracker implements IStorageTracker<ItemStack> {
ItemStack stack = StackUtils.deserializeStackFromNbt(tag.getCompound(NBT_STACK)); ItemStack stack = StackUtils.deserializeStackFromNbt(tag.getCompound(NBT_STACK));
if (!stack.isEmpty()) { 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<ItemStack> {
public ListNBT serializeNbt() { public ListNBT serializeNbt() {
ListNBT list = new ListNBT(); ListNBT list = new ListNBT();
for (Map.Entry<Key, StorageTrackerEntry> entry : changes.entrySet()) { for (Map.Entry<ItemStackKey, StorageTrackerEntry> entry : changes.entrySet()) {
CompoundNBT tag = new CompoundNBT(); CompoundNBT tag = new CompoundNBT();
tag.putLong(NBT_TIME, entry.getValue().getTime()); tag.putLong(NBT_TIME, entry.getValue().getTime());
tag.putString(NBT_NAME, entry.getValue().getName()); 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); list.add(tag);
} }
return list; 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);
}
}
} }

View File

@@ -35,7 +35,7 @@ public abstract class RSWorldSavedData extends WorldSavedData {
compoundnbt.putInt("DataVersion", SharedConstants.getVersion().getWorldVersion()); compoundnbt.putInt("DataVersion", SharedConstants.getVersion().getWorldVersion());
try { try {
CompressedStreamTools.func_244264_a(compoundnbt, tempFile); CompressedStreamTools.writeCompressed(compoundnbt, tempFile);
if (fileIn.exists()) { if (fileIn.exists()) {
if (!fileIn.delete()) { if (!fileIn.delete()) {
LOGGER.error("Failed To delete " + fileIn.getName()); LOGGER.error("Failed To delete " + fileIn.getName());

View File

@@ -18,6 +18,7 @@ import net.minecraft.fluid.Fluid;
import net.minecraft.fluid.FluidState; import net.minecraft.fluid.FluidState;
import net.minecraft.fluid.Fluids; import net.minecraft.fluid.Fluids;
import net.minecraft.item.BlockItemUseContext; import net.minecraft.item.BlockItemUseContext;
import net.minecraft.pathfinding.PathType;
import net.minecraft.state.BooleanProperty; import net.minecraft.state.BooleanProperty;
import net.minecraft.state.StateContainer; import net.minecraft.state.StateContainer;
import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntity;
@@ -73,6 +74,11 @@ public class CableBlock extends NetworkNodeBlock implements IWaterLoggable {
return getState(state, world, pos); return getState(state, world, pos);
} }
@Override
public boolean allowsMovement(BlockState state, IBlockReader worldIn, BlockPos pos, PathType type) {
return false;
}
@Override @Override
@SuppressWarnings("deprecation") @SuppressWarnings("deprecation")
public VoxelShape getShape(BlockState state, IBlockReader world, BlockPos pos, ISelectionContext ctx) { public VoxelShape getShape(BlockState state, IBlockReader world, BlockPos pos, ISelectionContext ctx) {

View File

@@ -5,11 +5,13 @@ import com.refinedmods.refinedstorage.container.DetectorContainer;
import com.refinedmods.refinedstorage.container.factory.PositionalTileContainerProvider; import com.refinedmods.refinedstorage.container.factory.PositionalTileContainerProvider;
import com.refinedmods.refinedstorage.tile.DetectorTile; import com.refinedmods.refinedstorage.tile.DetectorTile;
import com.refinedmods.refinedstorage.util.BlockUtils; import com.refinedmods.refinedstorage.util.BlockUtils;
import com.refinedmods.refinedstorage.util.ColorMap;
import com.refinedmods.refinedstorage.util.NetworkUtils; import com.refinedmods.refinedstorage.util.NetworkUtils;
import net.minecraft.block.Block; import net.minecraft.block.Block;
import net.minecraft.block.BlockState; import net.minecraft.block.BlockState;
import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.entity.player.ServerPlayerEntity; import net.minecraft.entity.player.ServerPlayerEntity;
import net.minecraft.item.DyeColor;
import net.minecraft.state.BooleanProperty; import net.minecraft.state.BooleanProperty;
import net.minecraft.state.StateContainer; import net.minecraft.state.StateContainer;
import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntity;
@@ -68,9 +70,13 @@ public class DetectorBlock extends ColoredNetworkBlock {
@Override @Override
@SuppressWarnings("deprecation") @SuppressWarnings("deprecation")
public ActionResultType onBlockActivated(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockRayTraceResult hit) { 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); ColorMap<DetectorBlock> colorMap = RSBlocks.DETECTOR;
if (result != ActionResultType.PASS) { DyeColor color = DyeColor.getColor(player.getHeldItem(hand));
return result;
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) { if (!world.isRemote) {

View File

@@ -70,7 +70,7 @@ public class ListNetworkCommand implements Command<CommandSource> {
listItem.network.getPosition().getZ() listItem.network.getPosition().getZ()
) )
.appendString(" [") .appendString(" [")
.append(new TranslationTextComponent( .appendSibling(new TranslationTextComponent(
"commands.refinedstorage.network.list.tick_times", "commands.refinedstorage.network.list.tick_times",
new StringTextComponent(TIME_FORMATTER.format(listItem.tickTime)).setStyle(Styles.YELLOW), new StringTextComponent(TIME_FORMATTER.format(listItem.tickTime)).setStyle(Styles.YELLOW),
new StringTextComponent(TIME_FORMATTER.format(listItem.tps)).setStyle(Styles.YELLOW) new StringTextComponent(TIME_FORMATTER.format(listItem.tps)).setStyle(Styles.YELLOW)

View File

@@ -26,11 +26,11 @@ public class ListAutocraftingCommand extends NetworkCommand {
public static void addInfo(CommandContext<CommandSource> context, ICraftingTask task) { public static void addInfo(CommandContext<CommandSource> context, ICraftingTask task) {
context.getSource().sendFeedback( context.getSource().sendFeedback(
new StringTextComponent(getAmount(task.getRequested()) + "x ") new StringTextComponent(getAmount(task.getRequested()) + "x ")
.append(getName(task.getRequested()).deepCopy().setStyle(Styles.YELLOW)) .appendSibling(getName(task.getRequested()).deepCopy().setStyle(Styles.YELLOW))
.appendString(" ") .appendString(" ")
.appendString("(" + task.getCompletionPercentage() + "%)") .appendString("(" + task.getCompletionPercentage() + "%)")
.appendString(" ") .appendString(" ")
.append(new StringTextComponent("[" + task.getId().toString() + "]").setStyle(Styles.GRAY)), .appendSibling(new StringTextComponent("[" + task.getId().toString() + "]").setStyle(Styles.GRAY)),
false false
); );
} }

View File

@@ -32,14 +32,14 @@ public class PatternDumpCommand implements Command<CommandSource> {
ICraftingPattern pattern = PatternItem.fromCache(context.getSource().getWorld(), stack); 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()) { 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 { } 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("Processing: ").setStyle(Styles.YELLOW).appendSibling(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("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).append(new StringTextComponent(String.valueOf(allowedTagList != null)).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()) { if (pattern.isProcessing()) {
for (int i = 0; i < pattern.getInputs().size(); ++i) { for (int i = 0; i < pattern.getInputs().size(); ++i) {
@@ -47,7 +47,7 @@ public class PatternDumpCommand implements Command<CommandSource> {
context.getSource().sendFeedback(new StringTextComponent("Item inputs in slot " + i + ":").setStyle(Styles.YELLOW), false); 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) { 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<CommandSource> {
context.getSource().sendFeedback(new StringTextComponent("Fluid inputs in slot " + i + ":").setStyle(Styles.YELLOW), false); 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) { 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<CommandSource> {
context.getSource().sendFeedback(new StringTextComponent("Outputs").setStyle(Styles.YELLOW), false); context.getSource().sendFeedback(new StringTextComponent("Outputs").setStyle(Styles.YELLOW), false);
for (ItemStack output : pattern.getOutputs()) { 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); context.getSource().sendFeedback(new StringTextComponent("Fluid outputs").setStyle(Styles.YELLOW), false);
for (FluidStack output : pattern.getFluidOutputs()) { 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 { } else {
for (int i = 0; i < pattern.getInputs().size(); ++i) { for (int i = 0; i < pattern.getInputs().size(); ++i) {
@@ -89,14 +89,14 @@ public class PatternDumpCommand implements Command<CommandSource> {
context.getSource().sendFeedback(new StringTextComponent("Inputs in slot " + i + ":").setStyle(Styles.YELLOW), false); context.getSource().sendFeedback(new StringTextComponent("Inputs in slot " + i + ":").setStyle(Styles.YELLOW), false);
for (int j = 0; j < pattern.getInputs().get(i).size(); ++j) { 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); context.getSource().sendFeedback(new StringTextComponent("Outputs").setStyle(Styles.YELLOW), false);
for (ItemStack output : pattern.getOutputs()) { 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; boolean anyByproducts = false;
@@ -109,7 +109,7 @@ public class PatternDumpCommand implements Command<CommandSource> {
anyByproducts = true; 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);
} }
} }
} }

View File

@@ -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());
}
}

View File

@@ -35,7 +35,7 @@ public class RecipeTransferCraftingGridError implements IRecipeTransferError {
List<ITextComponent> message = drawIngredientHighlights(stack, recipeX, recipeY); List<ITextComponent> message = drawIngredientHighlights(stack, recipeX, recipeY);
Screen currentScreen = Minecraft.getInstance().currentScreen; 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<ITextComponent> drawIngredientHighlights(MatrixStack stack, int recipeX, int recipeY) { protected List<ITextComponent> drawIngredientHighlights(MatrixStack stack, int recipeX, int recipeY) {

View File

@@ -1,6 +1,8 @@
package com.refinedmods.refinedstorage.inventory.item.validator; package com.refinedmods.refinedstorage.inventory.item.validator;
import com.refinedmods.refinedstorage.RSItems;
import com.refinedmods.refinedstorage.api.autocrafting.ICraftingPatternProvider; import com.refinedmods.refinedstorage.api.autocrafting.ICraftingPatternProvider;
import com.refinedmods.refinedstorage.item.PatternItem;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.world.World; import net.minecraft.world.World;
@@ -15,6 +17,9 @@ public class PatternItemValidator implements Predicate<ItemStack> {
@Override @Override
public boolean test(ItemStack stack) { 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(); return stack.getItem() instanceof ICraftingPatternProvider && ((ICraftingPatternProvider) stack.getItem()).create(world, stack, null).isValid();
} }
} }

View File

@@ -41,7 +41,7 @@ public class NetworkCardItem extends Item {
tag.putInt(NBT_RECEIVER_X, ctx.getPos().getX()); tag.putInt(NBT_RECEIVER_X, ctx.getPos().getX());
tag.putInt(NBT_RECEIVER_Y, ctx.getPos().getY()); tag.putInt(NBT_RECEIVER_Y, ctx.getPos().getY());
tag.putInt(NBT_RECEIVER_Z, ctx.getPos().getZ()); 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); ctx.getPlayer().getHeldItem(ctx.getHand()).setTag(tag);
@@ -64,7 +64,7 @@ public class NetworkCardItem extends Item {
pos.getX(), pos.getX(),
pos.getY(), pos.getY(),
pos.getZ(), pos.getZ(),
type.func_240901_a_().toString() type.getLocation().toString()
).setStyle(Styles.GRAY)); ).setStyle(Styles.GRAY));
} }
} }
@@ -93,7 +93,7 @@ public class NetworkCardItem extends Item {
return null; return null;
} }
return RegistryKey.func_240903_a_(Registry.WORLD_KEY, name); return RegistryKey.getOrCreateKey(Registry.WORLD_KEY, name);
} }
return null; return null;

View File

@@ -97,7 +97,7 @@ public abstract class NetworkItem extends EnergyItem implements INetworkItemProv
tag.putInt(NBT_NODE_X, network.getPosition().getX()); tag.putInt(NBT_NODE_X, network.getPosition().getX());
tag.putInt(NBT_NODE_Y, network.getPosition().getY()); tag.putInt(NBT_NODE_Y, network.getPosition().getY());
tag.putInt(NBT_NODE_Z, network.getPosition().getZ()); 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); stack.setTag(tag);
@@ -115,7 +115,7 @@ public abstract class NetworkItem extends EnergyItem implements INetworkItemProv
return null; return null;
} }
return RegistryKey.func_240903_a_(Registry.WORLD_KEY, name); return RegistryKey.getOrCreateKey(Registry.WORLD_KEY, name);
} }
return null; return null;

View File

@@ -10,6 +10,7 @@ import com.refinedmods.refinedstorage.apiimpl.autocrafting.CraftingPattern;
import com.refinedmods.refinedstorage.apiimpl.autocrafting.CraftingPatternFactory; import com.refinedmods.refinedstorage.apiimpl.autocrafting.CraftingPatternFactory;
import com.refinedmods.refinedstorage.render.Styles; import com.refinedmods.refinedstorage.render.Styles;
import com.refinedmods.refinedstorage.render.tesr.PatternItemStackTileRenderer; import com.refinedmods.refinedstorage.render.tesr.PatternItemStackTileRenderer;
import com.refinedmods.refinedstorage.util.ItemStackKey;
import com.refinedmods.refinedstorage.util.RenderUtils; import com.refinedmods.refinedstorage.util.RenderUtils;
import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.screen.Screen;
import net.minecraft.client.util.ITooltipFlag; import net.minecraft.client.util.ITooltipFlag;
@@ -35,7 +36,7 @@ import java.util.Set;
import java.util.stream.Collectors; import java.util.stream.Collectors;
public class PatternItem extends Item implements ICraftingPatternProvider { public class PatternItem extends Item implements ICraftingPatternProvider {
private static final Map<ItemStack, ICraftingPattern> CACHE = new HashMap<>(); private static final Map<ItemStackKey, ICraftingPattern> CACHE = new HashMap<>();
private static final String NBT_VERSION = "Version"; private static final String NBT_VERSION = "Version";
private static final String NBT_INPUT_SLOT = "Input_%d"; 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) { public static ICraftingPattern fromCache(World world, ItemStack stack) {
if (!CACHE.containsKey(stack)) { ICraftingPattern pattern = CACHE.computeIfAbsent(
CACHE.put(stack, CraftingPatternFactory.INSTANCE.create(world, null, stack)); 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 @Override

View File

@@ -83,7 +83,7 @@ public class SecurityCardItem extends Item {
for (Permission permission : Permission.values()) { for (Permission permission : Permission.values()) {
if (hasPermission(stack, permission)) { 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));
} }
} }
} }

View File

@@ -92,7 +92,7 @@ public class UpgradeItem extends Item {
tooltip.add( tooltip.add(
new TranslationTextComponent("enchantment.minecraft.fortune") new TranslationTextComponent("enchantment.minecraft.fortune")
.appendString(" ") .appendString(" ")
.append(new TranslationTextComponent("enchantment.level." + type.getFortuneLevel())) .appendSibling(new TranslationTextComponent("enchantment.level." + type.getFortuneLevel()))
.setStyle(Styles.GRAY) .setStyle(Styles.GRAY)
); );
} }

View File

@@ -14,7 +14,9 @@ public class ColoredBlockItem extends BaseBlockItem {
super(block, builder); super(block, builder);
if (color != ColorMap.DEFAULT_COLOR) { 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 { } else {
this.displayName = displayName; this.displayName = displayName;
} }

View File

@@ -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()); 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) { 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 { } else {
this.displayName = displayName; this.displayName = displayName;
} }

View File

@@ -64,6 +64,7 @@ public class StorageBlockItem extends BaseBlockItem {
@Override @Override
public ActionResult<ItemStack> onItemRightClick(World world, PlayerEntity player, Hand hand) { public ActionResult<ItemStack> onItemRightClick(World world, PlayerEntity player, Hand hand) {
ItemStack storageStack = player.getHeldItem(hand); ItemStack storageStack = player.getHeldItem(hand);
int count = storageStack.getCount();
if (!world.isRemote && player.isCrouching() && type != ItemStorageType.CREATIVE) { if (!world.isRemote && player.isCrouching() && type != ItemStorageType.CREATIVE) {
UUID diskId = null; 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. // Newly created storages won't have a tag yet, so allow invalid disks as well.
if (disk == null || disk.getStored() == 0) { if (disk == null || disk.getStored() == 0) {
ItemStack storagePart = new ItemStack(StoragePartItem.getByType(type)); ItemStack storagePart = new ItemStack(StoragePartItem.getByType(type));
storagePart.setCount(count);
if (!player.inventory.addItemStackToInventory(storagePart.copy())) { if (!player.inventory.addItemStackToInventory(storagePart.copy())) {
InventoryHelper.spawnItemStack(world, player.getPosX(), player.getPosY(), player.getPosZ(), storagePart); 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(); 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);
} }
} }

View File

@@ -33,7 +33,7 @@ public class ControllerLootFunction extends LootFunction {
} }
@Override @Override
public LootFunctionType func_230425_b_() { public LootFunctionType getFunctionType() {
return RSLootFunctions.getController(); return RSLootFunctions.getController();
} }

View File

@@ -35,7 +35,7 @@ public class CrafterLootFunction extends LootFunction {
} }
@Override @Override
public LootFunctionType func_230425_b_() { public LootFunctionType getFunctionType() {
return RSLootFunctions.getCrafter(); return RSLootFunctions.getCrafter();
} }

View File

@@ -29,7 +29,7 @@ public class PortableGridBlockLootFunction extends LootFunction {
} }
@Override @Override
public LootFunctionType func_230425_b_() { public LootFunctionType getFunctionType() {
return RSLootFunctions.getPortableGrid(); return RSLootFunctions.getPortableGrid();
} }

View File

@@ -50,7 +50,7 @@ public class StorageBlockLootFunction extends LootFunction {
} }
@Override @Override
public LootFunctionType func_230425_b_() { public LootFunctionType getFunctionType() {
return RSLootFunctions.getStorageBlock(); return RSLootFunctions.getStorageBlock();
} }

View File

@@ -4,26 +4,35 @@ import com.refinedmods.refinedstorage.apiimpl.API;
import com.refinedmods.refinedstorage.apiimpl.network.grid.factory.PortableGridGridFactory; import com.refinedmods.refinedstorage.apiimpl.network.grid.factory.PortableGridGridFactory;
import com.refinedmods.refinedstorage.item.NetworkItem; import com.refinedmods.refinedstorage.item.NetworkItem;
import com.refinedmods.refinedstorage.item.blockitem.PortableGridBlockItem; import com.refinedmods.refinedstorage.item.blockitem.PortableGridBlockItem;
import com.refinedmods.refinedstorage.util.PacketBufferUtils;
import net.minecraft.entity.player.ServerPlayerEntity; import net.minecraft.entity.player.ServerPlayerEntity;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.network.PacketBuffer; import net.minecraft.network.PacketBuffer;
import net.minecraftforge.common.util.LazyOptional;
import net.minecraftforge.fml.network.NetworkEvent; 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; import java.util.function.Supplier;
public class OpenNetworkItemMessage { public class OpenNetworkItemMessage {
private final int slotId; private final int slotId;
private final String curioSlot;
public OpenNetworkItemMessage(int slotId) { public OpenNetworkItemMessage(int slotId, String curioSlot) {
this.slotId = slotId; this.slotId = slotId;
this.curioSlot = curioSlot;
} }
public static OpenNetworkItemMessage decode(PacketBuffer buf) { 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) { public static void encode(OpenNetworkItemMessage message, PacketBuffer buf) {
buf.writeInt(message.slotId); buf.writeInt(message.slotId);
buf.writeString(message.curioSlot);
} }
public static void handle(OpenNetworkItemMessage message, Supplier<NetworkEvent.Context> ctx) { public static void handle(OpenNetworkItemMessage message, Supplier<NetworkEvent.Context> ctx) {
@@ -31,7 +40,11 @@ public class OpenNetworkItemMessage {
if (player != null) { if (player != null) {
ctx.get().enqueueWork(() -> { 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) { 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())); ((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); ctx.get().setPacketHandled(true);
} }
private static ItemStack getStackFromSlot(ServerPlayerEntity player, int slotId, String curioSlot) {
if (curioSlot.isEmpty()) {
return player.inventory.getStackInSlot(slotId);
} else {
LazyOptional<ICuriosItemHandler> curiosHandler = CuriosApi.getCuriosHelper().getCuriosHandler(player);
Optional<ICurioStacksHandler> stacksHandler = curiosHandler.resolve().flatMap((handler ->
handler.getStacksHandler(curioSlot)
));
Optional<ItemStack> stack = stacksHandler.map(handler -> handler.getStacks().getStackInSlot(slotId));
if (stack.isPresent()) {
return stack.get();
}
}
return null;
}
} }

View File

@@ -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);
}
}
}

View File

@@ -5,12 +5,12 @@ import net.minecraft.util.text.Style;
import net.minecraft.util.text.TextFormatting; import net.minecraft.util.text.TextFormatting;
public final class Styles { public final class Styles {
public static final Style WHITE = Style.EMPTY.setColor(Color.func_240744_a_(TextFormatting.WHITE)); public static final Style WHITE = Style.EMPTY.setColor(Color.fromTextFormatting(TextFormatting.WHITE));
public static final Style GRAY = Style.EMPTY.setColor(Color.func_240744_a_(TextFormatting.GRAY)); public static final Style GRAY = Style.EMPTY.setColor(Color.fromTextFormatting(TextFormatting.GRAY));
public static final Style YELLOW = Style.EMPTY.setColor(Color.func_240744_a_(TextFormatting.YELLOW)); public static final Style YELLOW = Style.EMPTY.setColor(Color.fromTextFormatting(TextFormatting.YELLOW));
public static final Style RED = Style.EMPTY.setColor(Color.func_240744_a_(TextFormatting.RED)); public static final Style RED = Style.EMPTY.setColor(Color.fromTextFormatting(TextFormatting.RED));
public static final Style BLUE = Style.EMPTY.setColor(Color.func_240744_a_(TextFormatting.BLUE)); public static final Style BLUE = Style.EMPTY.setColor(Color.fromTextFormatting(TextFormatting.BLUE));
public static final Style AQUA = Style.EMPTY.setColor(Color.func_240744_a_(TextFormatting.AQUA)); public static final Style AQUA = Style.EMPTY.setColor(Color.fromTextFormatting(TextFormatting.AQUA));
private Styles() { private Styles() {
} }

View File

@@ -37,8 +37,8 @@ public class DelegateBakedModel implements IBakedModel {
} }
@Override @Override
public boolean func_230044_c_() { public boolean isSideLit() {
return base.func_230044_c_(); return base.isSideLit();
} }
@Override @Override

View File

@@ -57,7 +57,7 @@ public class FullbrightBakedModel extends DelegateBakedModel {
for (int i = 0; i < quads.size(); ++i) { for (int i = 0; i < quads.size(); ++i) {
BakedQuad quad = quads.get(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)); quads.set(i, transformQuad(quad));
} }
} }
@@ -67,19 +67,20 @@ public class FullbrightBakedModel extends DelegateBakedModel {
private static BakedQuad transformQuad(BakedQuad quad) { private static BakedQuad transformQuad(BakedQuad quad) {
int[] vertexData = quad.getVertexData().clone(); int[] vertexData = quad.getVertexData().clone();
int step = vertexData.length / 4;
// Set lighting to fullbright on all vertices // Set lighting to fullbright on all vertices
vertexData[6] = 0x00F000F0; vertexData[6] = 0x00F000F0;
vertexData[6 + 8] = 0x00F000F0; vertexData[6 + step] = 0x00F000F0;
vertexData[6 + 8 + 8] = 0x00F000F0; vertexData[6 + 2 * step] = 0x00F000F0;
vertexData[6 + 8 + 8 + 8] = 0x00F000F0; vertexData[6 + 3 * step] = 0x00F000F0;
return new BakedQuad( return new BakedQuad(
vertexData, vertexData,
quad.getTintIndex(), quad.getTintIndex(),
quad.getFace(), quad.getFace(),
quad.func_187508_a(), quad.getSprite(),
quad.func_239287_f_() // shouldApplyDiffuseLighting quad.applyDiffuseLighting()
); );
} }

View File

@@ -25,7 +25,7 @@ public class PatternBakedModel extends DelegateBakedModel {
return new ItemOverrideList() { return new ItemOverrideList() {
@Nullable @Nullable
@Override @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) { if (entity != null) {
ICraftingPattern pattern = PatternItem.fromCache(entity.world, stack); 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 @Override

View File

@@ -110,7 +110,7 @@ public class PortableGridBakedModel extends DelegateBakedModel {
private class CustomItemOverrideList extends ItemOverrideList { private class CustomItemOverrideList extends ItemOverrideList {
@Nullable @Nullable
@Override @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); PortableGrid portableGrid = new PortableGrid(null, stack, -1);
if (portableGrid.isGridActive()) { if (portableGrid.isGridActive()) {

View File

@@ -59,8 +59,8 @@ public class PortableGridItemBakedModel implements IBakedModel {
} }
@Override @Override
public boolean func_230044_c_() { public boolean isSideLit() {
return base.func_230044_c_(); return base.isSideLit();
} }
@Override @Override

View File

@@ -34,7 +34,7 @@ public final class QuadTransformer {
} }
for (BakedQuad quad : model.getQuads(state, side, rand, EmptyModelData.INSTANCE)) { 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()); TRSRTransformer transformer = new TRSRTransformer(builder, transformation.blockCenterToCorner());
quad.pipe(transformer); quad.pipe(transformer);

View File

@@ -1,17 +1,20 @@
package com.refinedmods.refinedstorage.render.tesr; 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.RSBlocks;
import com.refinedmods.refinedstorage.apiimpl.API; import com.refinedmods.refinedstorage.apiimpl.API;
import com.refinedmods.refinedstorage.block.StorageMonitorBlock; import com.refinedmods.refinedstorage.block.StorageMonitorBlock;
import com.refinedmods.refinedstorage.tile.StorageMonitorTile; import com.refinedmods.refinedstorage.tile.StorageMonitorTile;
import com.refinedmods.refinedstorage.tile.config.IType; 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.block.BlockState;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.IRenderTypeBuffer; import net.minecraft.client.renderer.IRenderTypeBuffer;
import net.minecraft.client.renderer.RenderHelper;
import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.RenderType;
import net.minecraft.client.renderer.WorldRenderer; 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.model.ItemCameraTransforms;
import net.minecraft.client.renderer.texture.OverlayTexture; import net.minecraft.client.renderer.texture.OverlayTexture;
import net.minecraft.client.renderer.texture.TextureAtlasSprite; 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.item.ItemStack;
import net.minecraft.util.Direction; import net.minecraft.util.Direction;
import net.minecraft.util.ResourceLocation; import net.minecraft.util.ResourceLocation;
import net.minecraft.util.math.vector.Matrix3f;
import net.minecraft.util.math.vector.Vector3f; import net.minecraft.util.math.vector.Vector3f;
import net.minecraftforge.common.model.TransformationHelper; import net.minecraftforge.common.model.TransformationHelper;
import net.minecraftforge.fluids.FluidAttributes; import net.minecraftforge.fluids.FluidAttributes;
@@ -71,9 +75,9 @@ public class StorageMonitorTileRenderer extends TileEntityRenderer<StorageMonito
matrixStack.translate(0.5D, 0.5D, 0.5D); matrixStack.translate(0.5D, 0.5D, 0.5D);
matrixStack.translate( matrixStack.translate(
((float) direction.getXOffset() * 0.5F) + (direction.getZOffset() * stringOffset), ((float) direction.getXOffset() * 0.501F) + (direction.getZOffset() * stringOffset),
-0.275, -0.275,
((float) direction.getZOffset() * 0.5F) - (direction.getXOffset() * stringOffset) ((float) direction.getZOffset() * 0.501F) - (direction.getXOffset() * stringOffset)
); );
matrixStack.rotate(TransformationHelper.quatFromXYZ(new Vector3f(direction.getXOffset() * 180, 0, direction.getZOffset() * 180), true)); matrixStack.rotate(TransformationHelper.quatFromXYZ(new Vector3f(direction.getXOffset() * 180, 0, direction.getZOffset() * 180), true));
@@ -101,19 +105,36 @@ public class StorageMonitorTileRenderer extends TileEntityRenderer<StorageMonito
private void renderItem(MatrixStack matrixStack, IRenderTypeBuffer renderTypeBuffer, Direction direction, float rotation, int light, ItemStack itemStack) { private void renderItem(MatrixStack matrixStack, IRenderTypeBuffer renderTypeBuffer, Direction direction, float rotation, int light, ItemStack itemStack) {
matrixStack.push(); matrixStack.push();
// Put it in the middle, outwards, and facing the correct direction
matrixStack.translate(0.5D, 0.5D, 0.5D); matrixStack.translate(0.5D, 0.5D, 0.5D);
matrixStack.translate((float) direction.getXOffset() * 0.5F, 0, (float) direction.getZOffset() * 0.5F); matrixStack.translate((float) direction.getXOffset() * 0.501F, 0, (float) direction.getZOffset() * 0.501F);
matrixStack.rotate(TransformationHelper.quatFromXYZ(new Vector3f(0, rotation, 0), false)); matrixStack.rotate(TransformationHelper.quatFromXYZ(new Vector3f(0, rotation, 0), false));
matrixStack.scale(0.5F, 0.5F, 0.5F); // Make it look "flat"
matrixStack.scale(0.5F, -0.5F, -0.00005f);
// Fix rotation after making it look flat
matrixStack.rotate(TransformationHelper.quatFromXYZ(new Vector3f(0, 0, 180), true));
IBakedModel itemModel = Minecraft.getInstance().getItemRenderer().getItemModelWithOverrides(itemStack, null, null);
boolean render3D = itemModel.isGui3d();
if (render3D) {
RenderHelper.setupGui3DDiffuseLighting();
} else {
RenderHelper.setupGuiFlatDiffuseLighting();
}
matrixStack.getLast().getNormal().set(Matrix3f.makeScaleMatrix(1, -1, 1));
Minecraft.getInstance().getItemRenderer().renderItem( Minecraft.getInstance().getItemRenderer().renderItem(
itemStack, itemStack,
ItemCameraTransforms.TransformType.FIXED, ItemCameraTransforms.TransformType.GUI,
false,
matrixStack,
renderTypeBuffer,
light, light,
OverlayTexture.NO_OVERLAY, OverlayTexture.NO_OVERLAY,
matrixStack, itemModel
renderTypeBuffer
); );
matrixStack.pop(); matrixStack.pop();

View File

@@ -159,7 +159,7 @@ public abstract class AmountSpecifyingScreen<T extends Container> extends BaseSc
blit(matrixStack, x, y, 0, 0, xSize, ySize); blit(matrixStack, x, y, 0, 0, xSize, ySize);
amountField.renderButton(matrixStack, 0, 0, 0); amountField.renderWidget(matrixStack, 0, 0, 0);
} }
@Override @Override

View File

@@ -126,7 +126,7 @@ public abstract class BaseScreen<T extends Container> extends ContainerScreen<T>
super.render(matrixStack, mouseX, mouseY, partialTicks); super.render(matrixStack, mouseX, mouseY, partialTicks);
func_230459_a_(matrixStack, mouseX, mouseY); renderHoveredTooltip(matrixStack, mouseX, mouseY);
} }
@Override @Override
@@ -352,7 +352,7 @@ public abstract class BaseScreen<T extends Container> extends ContainerScreen<T>
} }
public static boolean isKeyDown(KeyBinding keybinding) { 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.getKeyConflictContext().isActive() &&
keybinding.getKeyModifier().isActive(keybinding.getKeyConflictContext()); keybinding.getKeyModifier().isActive(keybinding.getKeyConflictContext());
} }

View File

@@ -60,11 +60,18 @@ public class CraftingMonitorScreen extends BaseScreen<CraftingMonitorContainer>
List<String> smallTextLines = Lists.newArrayList(); List<String> smallTextLines = Lists.newArrayList();
int totalSecs = (int) (System.currentTimeMillis() - executionStarted) / 1000; int totalSecs = (int) (System.currentTimeMillis() - executionStarted) / 1000;
int hours = totalSecs / 3600;
int minutes = (totalSecs % 3600) / 60; int minutes = (totalSecs % 3600) / 60;
int seconds = totalSecs % 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(I18n.format("gui.refinedstorage.crafting_monitor.tooltip.requested", requested.getFluid() != null ? API.instance().getQuantityFormatter().formatInBucketForm(qty) : API.instance().getQuantityFormatter().format(qty)));
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("%02d:%02d", minutes, seconds));
}
smallTextLines.add(String.format("%d%%", completionPercentage)); smallTextLines.add(String.format("%d%%", completionPercentage));
RenderUtils.drawTooltipWithSmallText(matrixStack, textLines, smallTextLines, true, ItemStack.EMPTY, x, y, screenWidth, screenHeight, fontRenderer); RenderUtils.drawTooltipWithSmallText(matrixStack, textLines, smallTextLines, true, ItemStack.EMPTY, x, y, screenWidth, screenHeight, fontRenderer);

View File

@@ -3,44 +3,44 @@ package com.refinedmods.refinedstorage.screen;
import com.refinedmods.refinedstorage.RS; import com.refinedmods.refinedstorage.RS;
import com.refinedmods.refinedstorage.RSItems; import com.refinedmods.refinedstorage.RSItems;
import com.refinedmods.refinedstorage.RSKeyBindings; import com.refinedmods.refinedstorage.RSKeyBindings;
import com.refinedmods.refinedstorage.integration.curios.CuriosIntegration;
import com.refinedmods.refinedstorage.network.OpenNetworkItemMessage; import com.refinedmods.refinedstorage.network.OpenNetworkItemMessage;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.entity.player.PlayerInventory;
import net.minecraft.inventory.IInventory; import net.minecraft.inventory.IInventory;
import net.minecraft.item.Item; import net.minecraft.item.Item;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.util.Util; import net.minecraft.util.Util;
import net.minecraft.util.text.ITextComponent;
import net.minecraft.util.text.TranslationTextComponent; import net.minecraft.util.text.TranslationTextComponent;
import net.minecraftforge.client.event.InputEvent; import net.minecraftforge.client.event.InputEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent; 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.Arrays;
import java.util.HashSet; import java.util.HashSet;
import java.util.Optional;
import java.util.Set; import java.util.Set;
import java.util.function.Consumer;
public class KeyInputListener { public class KeyInputListener {
@SubscribeEvent @SubscribeEvent
public void onKeyInput(InputEvent.KeyInputEvent e) { public void onKeyInput(InputEvent.KeyInputEvent e) {
if (Minecraft.getInstance().player != null) { if (Minecraft.getInstance().player != null) {
PlayerInventory inv = Minecraft.getInstance().player.inventory;
if (RSKeyBindings.OPEN_WIRELESS_GRID.isKeyDown()) { 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()) { } 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()) { } 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()) { } 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<ITextComponent> onError, Item... items) { //These are static to be accessible from RSAddons
public static void findAndOpen(Item... items) {
Set<Item> validItems = new HashSet<>(Arrays.asList(items)); Set<Item> validItems = new HashSet<>(Arrays.asList(items));
IInventory inv = Minecraft.getInstance().player.inventory;
int slotFound = -1; int slotFound = -1;
for (int i = 0; i < inv.getSizeInventory(); ++i) { for (int i = 0; i < inv.getSizeInventory(); ++i) {
@@ -48,7 +48,7 @@ public class KeyInputListener {
if (validItems.contains(slot.getItem())) { if (validItems.contains(slot.getItem())) {
if (slotFound != -1) { 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; return;
} }
@@ -56,10 +56,25 @@ public class KeyInputListener {
} }
} }
if (CuriosIntegration.isLoaded() && slotFound == -1) {
Optional<ImmutableTriple<String, Integer, ItemStack>> 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) { 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 { } 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);
}
} }

View File

@@ -71,7 +71,7 @@ public class SecurityManagerScreen extends BaseScreen<SecurityManagerContainer>
CheckboxWidget permission = permissions[i]; CheckboxWidget permission = permissions[i];
// getWidth_CLASH => getHeight // 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")); renderTooltip(matrixStack, mouseX, mouseY, I18n.format("gui.refinedstorage.security_manager.permission." + i + ".tooltip"));
} }
} }

View File

@@ -86,7 +86,7 @@ public class StorageScreen<T extends Container> extends BaseScreen<T> {
blit(matrixStack, x, y, 0, 0, xSize, ySize); 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); blit(matrixStack, x + BAR_X, y + BAR_Y + BAR_HEIGHT - barHeightNew, 179, BAR_HEIGHT - barHeightNew, BAR_WIDTH, barHeightNew);
} }

View File

@@ -47,7 +47,7 @@ public class CheckboxWidget extends CheckboxButton {
} }
@Override @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 minecraft = Minecraft.getInstance();
minecraft.getTextureManager().bindTexture(TEXTURE); minecraft.getTextureManager().bindTexture(TEXTURE);
RenderSystem.enableDepthTest(); RenderSystem.enableDepthTest();

View File

@@ -173,10 +173,10 @@ public class SearchWidget extends TextFieldWidget {
} }
@Override @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()) { if (canSyncFromJEINow() && RSJeiPlugin.getRuntime().getIngredientListOverlay().hasKeyboardFocus()) {
setTextFromJEI(); setTextFromJEI();
} }
super.renderButton(matrixStack, mouseX, mouseY, partialTicks); super.renderWidget(matrixStack, mouseX, mouseY, partialTicks);
} }
} }

View File

@@ -25,7 +25,7 @@ public abstract class SideButton extends Button {
} }
@Override @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.color4f(1.0F, 1.0F, 1.0F, 1.0F);
RenderSystem.enableAlphaTest(); RenderSystem.enableAlphaTest();

View File

@@ -10,7 +10,6 @@ import com.refinedmods.refinedstorage.item.property.ControllerItemPropertyGetter
import com.refinedmods.refinedstorage.item.property.NetworkItemPropertyGetter; import com.refinedmods.refinedstorage.item.property.NetworkItemPropertyGetter;
import com.refinedmods.refinedstorage.item.property.SecurityCardItemPropertyGetter; import com.refinedmods.refinedstorage.item.property.SecurityCardItemPropertyGetter;
import com.refinedmods.refinedstorage.render.BakedModelOverrideRegistry; import com.refinedmods.refinedstorage.render.BakedModelOverrideRegistry;
import com.refinedmods.refinedstorage.render.ExperimentalLightingPipelineNagger;
import com.refinedmods.refinedstorage.render.color.PatternItemColor; import com.refinedmods.refinedstorage.render.color.PatternItemColor;
import com.refinedmods.refinedstorage.render.model.*; import com.refinedmods.refinedstorage.render.model.*;
import com.refinedmods.refinedstorage.render.resourcepack.ResourcePackListener; import com.refinedmods.refinedstorage.render.resourcepack.ResourcePackListener;
@@ -35,8 +34,10 @@ import net.minecraft.resources.IResourceManager;
import net.minecraft.util.ResourceLocation; import net.minecraft.util.ResourceLocation;
import net.minecraftforge.client.event.ModelBakeEvent; import net.minecraftforge.client.event.ModelBakeEvent;
import net.minecraftforge.client.event.TextureStitchEvent; import net.minecraftforge.client.event.TextureStitchEvent;
import net.minecraftforge.client.event.ModelRegistryEvent;
import net.minecraftforge.client.model.ModelLoader; import net.minecraftforge.client.model.ModelLoader;
import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.event.AddReloadListenerEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.client.registry.ClientRegistry; import net.minecraftforge.fml.client.registry.ClientRegistry;
import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent;
@@ -56,13 +57,6 @@ public class ClientSetup {
private final BakedModelOverrideRegistry bakedModelOverrideRegistry = new BakedModelOverrideRegistry(); private final BakedModelOverrideRegistry bakedModelOverrideRegistry = new BakedModelOverrideRegistry();
public ClientSetup() { 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( forEachColorApply("controller", (name, color) -> bakedModelOverrideRegistry.add(name, (base, registry) -> new FullbrightBakedModel(
base, base,
@@ -156,28 +150,11 @@ public class ClientSetup {
bakedModelOverrideRegistry.add(new ResourceLocation(RS.ID, "pattern"), (base, registry) -> new PatternBakedModel(base)); 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::onClientSetup);
FMLJavaModLoadingContext.get().getModEventBus().addListener(this::onModelBake); FMLJavaModLoadingContext.get().getModEventBus().addListener(this::onModelBake);
FMLJavaModLoadingContext.get().getModEventBus().addListener(this::onModelRegistry);
MinecraftForge.EVENT_BUS.addListener(this::addReloadListener);
FMLJavaModLoadingContext.get().getModEventBus().addListener(this::onTextureStitch); FMLJavaModLoadingContext.get().getModEventBus().addListener(this::onTextureStitch);
MinecraftForge.EVENT_BUS.addListener(new ExperimentalLightingPipelineNagger()::onPlayerLoggedIn);
API.instance().addPatternRenderHandler(pattern -> Screen.hasShiftDown()); API.instance().addPatternRenderHandler(pattern -> Screen.hasShiftDown());
@@ -288,19 +265,45 @@ public class ClientSetup {
e.getMinecraftSupplier().get().getItemColors().register(new PatternItemColor(), RSItems.PATTERN.get()); 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.CONTROLLER.values().forEach(controller -> ItemModelsProperties.registerProperty(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.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.registerProperty(RSItems.WIRELESS_CRAFTING_MONITOR.get(), CONNECTED, new NetworkItemPropertyGetter());
ItemModelsProperties.func_239418_a_(RSItems.CREATIVE_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.registerProperty(RSItems.WIRELESS_GRID.get(), CONNECTED, new NetworkItemPropertyGetter());
ItemModelsProperties.func_239418_a_(RSItems.CREATIVE_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.registerProperty(RSItems.WIRELESS_FLUID_GRID.get(), CONNECTED, new NetworkItemPropertyGetter());
ItemModelsProperties.func_239418_a_(RSItems.CREATIVE_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 @SubscribeEvent

View File

@@ -22,7 +22,7 @@ public class NetworkTransmitterTile extends NetworkNodeTile<NetworkTransmitterNe
public static final TileDataParameter<Integer, NetworkTransmitterTile> DISTANCE = new TileDataParameter<>(DataSerializers.VARINT, 0, t -> t.getNode().getDistance()); public static final TileDataParameter<Integer, NetworkTransmitterTile> DISTANCE = new TileDataParameter<>(DataSerializers.VARINT, 0, t -> t.getNode().getDistance());
public static final TileDataParameter<Optional<ResourceLocation>, NetworkTransmitterTile> RECEIVER_DIMENSION = new TileDataParameter<>(RSSerializers.OPTIONAL_RESOURCE_LOCATION_SERIALIZER, Optional.empty(), t -> { public static final TileDataParameter<Optional<ResourceLocation>, NetworkTransmitterTile> RECEIVER_DIMENSION = new TileDataParameter<>(RSSerializers.OPTIONAL_RESOURCE_LOCATION_SERIALIZER, Optional.empty(), t -> {
if (t.getNode().getReceiverDimension() != null) { if (t.getNode().getReceiverDimension() != null) {
return Optional.of(t.getNode().getReceiverDimension().func_240901_a_()); return Optional.of(t.getNode().getReceiverDimension().getLocation());
} }
return Optional.empty(); return Optional.empty();

View File

@@ -112,15 +112,16 @@ public class ColorMap<T extends IForgeRegistryEntry<? super T>> {
} }
private <S extends BaseBlock> BlockState getNewState(RegistryObject<S> block, BlockState state) { private <S extends BaseBlock> BlockState getNewState(RegistryObject<S> block, BlockState state) {
if (block.get().getDirection() == BlockDirection.NONE) { BlockState newState = block.get().getDefaultState();
return block.get().getDefaultState()
.with(NetworkNodeBlock.CONNECTED, state.get(NetworkNodeBlock.CONNECTED)); if (((NetworkNodeBlock) block.get()).hasConnectedState()) {
} else { newState = newState.with(NetworkNodeBlock.CONNECTED, state.get(NetworkNodeBlock.CONNECTED));
return block.get().getDefaultState() }
.with(NetworkNodeBlock.CONNECTED, state.get(NetworkNodeBlock.CONNECTED)) if (block.get().getDirection() != BlockDirection.NONE) {
.with(block.get().getDirection().getProperty(), state.get(block.get().getDirection().getProperty())); 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) { public ActionResultType setBlockState(BlockState newState, ItemStack heldItem, World world, BlockPos pos, PlayerEntity player) {

View File

@@ -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);
}
}

View File

@@ -78,7 +78,7 @@ public final class RenderUtils {
} }
if (displayAmount) { if (displayAmount) {
data = new StringTextComponent(amount + "x ").append(data); data = new StringTextComponent(amount + "x ").appendSibling(data);
} }
tooltip.add(data.setStyle(Styles.GRAY)); tooltip.add(data.setStyle(Styles.GRAY));
@@ -106,7 +106,7 @@ public final class RenderUtils {
} }
if (displayMb) { 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)); tooltip.add(data.setStyle(Styles.GRAY));
@@ -181,7 +181,7 @@ public final class RenderUtils {
List<ITextProperties> wrappedTextLines = new ArrayList<>(); List<ITextProperties> wrappedTextLines = new ArrayList<>();
for (int i = 0; i < textLines.size(); i++) { for (int i = 0; i < textLines.size(); i++) {
ITextProperties textLine = textLines.get(i); ITextProperties textLine = textLines.get(i);
List<ITextProperties> wrappedLine = font.func_238420_b_().func_238362_b_(textLine, tooltipTextWidth, Style.EMPTY); List<ITextProperties> wrappedLine = font.getCharacterManager().func_238362_b_(textLine, tooltipTextWidth, Style.EMPTY);
if (i == 0) if (i == 0)
titleLinesCount = wrappedLine.size(); titleLinesCount = wrappedLine.size();
@@ -254,7 +254,7 @@ public final class RenderUtils {
for (int lineNumber = 0; lineNumber < textLines.size(); ++lineNumber) { for (int lineNumber = 0; lineNumber < textLines.size(); ++lineNumber) {
ITextProperties line = textLines.get(lineNumber); ITextProperties line = textLines.get(lineNumber);
if (line != null) 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) if (lineNumber + 1 == titleLinesCount)
tooltipY += 2; tooltipY += 2;
@@ -275,7 +275,7 @@ public final class RenderUtils {
RenderSystem.enableAlphaTest(); RenderSystem.enableAlphaTest();
// FontRenderer#drawStringWithShadow - call to func_228078_a_ (private) // FontRenderer#drawStringWithShadow - call to renderString (private)
MatrixStack smallTextStack = new MatrixStack(); MatrixStack smallTextStack = new MatrixStack();
smallTextStack.translate(0.0D, 0.0D, zLevel); smallTextStack.translate(0.0D, 0.0D, zLevel);
smallTextStack.scale(textScale, textScale, 1); smallTextStack.scale(textScale, textScale, 1);

View File

@@ -1,5 +1,5 @@
modLoader = "javafml" modLoader = "javafml"
loaderVersion = "[34,)" loaderVersion = "[36,)"
issueTrackerURL = "https://github.com/refinedmods/refinedstorage" issueTrackerURL = "https://github.com/refinedmods/refinedstorage"
license="MIT" license="MIT"
[[mods]] [[mods]]
@@ -13,14 +13,3 @@ authors = "Refined Mods"
description = ''' description = '''
An elegant solution to your hoarding problem 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"

View File

@@ -1,6 +1,6 @@
{ {
"itemGroup.refinedstorage": "上達されたストレージ", "itemGroup.refinedstorage": "Refined Storage",
"itemGroup.refinedstorage.covers": "上達されたストレージのカバー", "itemGroup.refinedstorage.covers": "Refined Storage カバー",
"key.refinedstorage.focusSearchBar": "グリッドの検索欄を選択", "key.refinedstorage.focusSearchBar": "グリッドの検索欄を選択",
"key.refinedstorage.clearGridCraftingMatrix": "グリッドのクラフト欄をクリア", "key.refinedstorage.clearGridCraftingMatrix": "グリッドのクラフト欄をクリア",
@@ -13,7 +13,7 @@
"gui.refinedstorage.creative_controller": "クリエイティブコントローラー", "gui.refinedstorage.creative_controller": "クリエイティブコントローラー",
"gui.refinedstorage.grid": "グリッド", "gui.refinedstorage.grid": "グリッド",
"gui.refinedstorage.grid.craft": "クラフト", "gui.refinedstorage.grid.craft": "クラフト",
"gui.refinedstorage.crafting_grid": "クラフトグリッド", "gui.refinedstorage.crafting_grid": "製作グリッド",
"gui.refinedstorage.pattern_grid": "パターングリッド", "gui.refinedstorage.pattern_grid": "パターングリッド",
"gui.refinedstorage.grid.pattern_create": "作成", "gui.refinedstorage.grid.pattern_create": "作成",
"gui.refinedstorage.fluid_grid": "流体グリッド", "gui.refinedstorage.fluid_grid": "流体グリッド",
@@ -42,10 +42,10 @@
"gui.refinedstorage.crafting_monitor.processing": "加工中: %d", "gui.refinedstorage.crafting_monitor.processing": "加工中: %d",
"gui.refinedstorage.crafting_monitor.scheduled": "加工予定: %d", "gui.refinedstorage.crafting_monitor.scheduled": "加工予定: %d",
"gui.refinedstorage.crafting_monitor.crafting": "クラフト中: %d", "gui.refinedstorage.crafting_monitor.crafting": "クラフト中: %d",
"gui.refinedstorage.crafting_monitor.machine_does_not_accept_item": "機械にアイテムを搬入できない", "gui.refinedstorage.crafting_monitor.machine_does_not_accept_item": "機械にアイテムを搬入できません",
"gui.refinedstorage.crafting_monitor.machine_does_not_accept_fluid": "機械に流体を搬入できない", "gui.refinedstorage.crafting_monitor.machine_does_not_accept_fluid": "機械に流体を搬入できません",
"gui.refinedstorage.crafting_monitor.machine_none": "機械が見つからない", "gui.refinedstorage.crafting_monitor.machine_none": "機械が見つかりません",
"gui.refinedstorage.crafting_monitor.crafter_is_locked": "クラフターがロックされてい", "gui.refinedstorage.crafting_monitor.crafter_is_locked": "クラフターがロックされています",
"gui.refinedstorage.wireless_transmitter": "ワイヤレス送信機", "gui.refinedstorage.wireless_transmitter": "ワイヤレス送信機",
"gui.refinedstorage.wireless_transmitter.distance": "%dブロック", "gui.refinedstorage.wireless_transmitter.distance": "%dブロック",
"gui.refinedstorage.crafter": "クラフター", "gui.refinedstorage.crafter": "クラフター",
@@ -62,14 +62,14 @@
"gui.refinedstorage.crafting_preview.to_craft": "作成数: %d", "gui.refinedstorage.crafting_preview.to_craft": "作成数: %d",
"gui.refinedstorage.crafting_preview.available": "使用: %d", "gui.refinedstorage.crafting_preview.available": "使用: %d",
"gui.refinedstorage.crafting_preview.missing": "不足: %d", "gui.refinedstorage.crafting_preview.missing": "不足: %d",
"gui.refinedstorage.crafting_preview.error": "リクエストに失敗した", "gui.refinedstorage.crafting_preview.error": "リクエストに失敗しました",
"gui.refinedstorage.crafting_preview.error.recursive.0": "材料が自身を要求してい", "gui.refinedstorage.crafting_preview.error.recursive.0": "材料が自身を要求しています",
"gui.refinedstorage.crafting_preview.error.recursive.1": "該当パターンの削除", "gui.refinedstorage.crafting_preview.error.recursive.1": "該当パターンの削除",
"gui.refinedstorage.crafting_preview.error.recursive.2": "または", "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.recursive.4": "該当パターン:",
"gui.refinedstorage.crafting_preview.error.too_complex.0": "クラフト過程の計算が複雑すぎます", "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": "セキュリティマネージャー",
"gui.refinedstorage.security_manager.configure": "設定", "gui.refinedstorage.security_manager.configure": "設定",
"gui.refinedstorage.security_manager.permission.0": "搬入", "gui.refinedstorage.security_manager.permission.0": "搬入",
@@ -79,7 +79,7 @@
"gui.refinedstorage.security_manager.permission.2": "自動クラフト", "gui.refinedstorage.security_manager.permission.2": "自動クラフト",
"gui.refinedstorage.security_manager.permission.2.tooltip": "自動クラフトの開始・キャンセルやクラフト過程の確認", "gui.refinedstorage.security_manager.permission.2.tooltip": "自動クラフトの開始・キャンセルやクラフト過程の確認",
"gui.refinedstorage.security_manager.permission.3": "変更", "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": "構築",
"gui.refinedstorage.security_manager.permission.4.tooltip": "ネットワークのデバイスを追加または撤去する", "gui.refinedstorage.security_manager.permission.4.tooltip": "ネットワークのデバイスを追加または撤去する",
"gui.refinedstorage.security_manager.permission.5": "セキュリティ", "gui.refinedstorage.security_manager.permission.5": "セキュリティ",
@@ -100,11 +100,11 @@
"misc.refinedstorage.storage.full": "%d%%を使用中", "misc.refinedstorage.storage.full": "%d%%を使用中",
"misc.refinedstorage.network_item.tooltip": "%d, %d, %dにリンク済", "misc.refinedstorage.network_item.tooltip": "%d, %d, %dにリンク済",
"misc.refinedstorage.network_item.out_of_range": "有効範囲内のワイヤレス送信機がない", "misc.refinedstorage.network_item.out_of_range": "有効範囲内のワイヤレス送信機がありません",
"misc.refinedstorage.network_item.not_found": "ネットワークが見つからない", "misc.refinedstorage.network_item.not_found": "ネットワークが見つかりません",
"misc.refinedstorage.network_item.shortcut_not_found": "インベントリに%sがない", "misc.refinedstorage.network_item.shortcut_not_found": "インベントリに%sがありません",
"misc.refinedstorage.network_item.shortcut_duplicate": "インベントリに%sが複数あ", "misc.refinedstorage.network_item.shortcut_duplicate": "インベントリに%sが複数あります",
"misc.refinedstorage.network_item.out_of_energy": "%sがエネルギー切れ", "misc.refinedstorage.network_item.out_of_energy": "%sがエネルギー切れです",
"misc.refinedstorage.network_card.tooltip": "%sの%d, %d, %dにリンク済", "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_item_tag": "%sに%sのアイテムを使用する",
"misc.refinedstorage.pattern.allowed_fluid_tag": "%sに%sの流体を使用する", "misc.refinedstorage.pattern.allowed_fluid_tag": "%sに%sの流体を使用する",
"misc.refinedstorage.pattern.error.processing_no_outputs": "加工中のパターンに完成品がない", "misc.refinedstorage.pattern.error.processing_no_outputs": "加工中のパターンに完成品がありません",
"misc.refinedstorage.pattern.error.no_output": "指定されたレシピに完成品がない", "misc.refinedstorage.pattern.error.no_output": "指定されたレシピに完成品がありません",
"misc.refinedstorage.pattern.error.recipe_does_not_exist": "指定されたレシピは存在しない", "misc.refinedstorage.pattern.error.recipe_does_not_exist": "指定されたレシピは存在しません",
"misc.refinedstorage.pattern.error.tag_no_longer_applicable": "タグ %s は%sに適用できなくなた", "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.start": "開始",
"misc.refinedstorage.clear": "クリア", "misc.refinedstorage.clear": "クリア",
@@ -171,8 +171,8 @@
"sidebutton.refinedstorage.grid.sorting.type": "並べ替え", "sidebutton.refinedstorage.grid.sorting.type": "並べ替え",
"sidebutton.refinedstorage.grid.sorting.type.0": "量", "sidebutton.refinedstorage.grid.sorting.type.0": "量",
"sidebutton.refinedstorage.grid.sorting.type.1": "名前", "sidebutton.refinedstorage.grid.sorting.type.1": "名前",
"sidebutton.refinedstorage.grid.sorting.type.2": "アイデンティフィケーションの番号", "sidebutton.refinedstorage.grid.sorting.type.2": "ID",
"sidebutton.refinedstorage.grid.sorting.type.3": "InventoryTweaksのモッド", "sidebutton.refinedstorage.grid.sorting.type.3": "InventoryTweaks",
"sidebutton.refinedstorage.grid.sorting.type.4": "最終変更時間", "sidebutton.refinedstorage.grid.sorting.type.4": "最終変更時間",
"sidebutton.refinedstorage.grid.search_box_mode": "検索ボックス", "sidebutton.refinedstorage.grid.search_box_mode": "検索ボックス",
"sidebutton.refinedstorage.grid.search_box_mode.0": "通常", "sidebutton.refinedstorage.grid.search_box_mode.0": "通常",
@@ -215,7 +215,7 @@
"block.refinedstorage.creative_controller": "クリエイティブコントローラー", "block.refinedstorage.creative_controller": "クリエイティブコントローラー",
"block.refinedstorage.cable": "ケーブル", "block.refinedstorage.cable": "ケーブル",
"block.refinedstorage.grid": "グリッド", "block.refinedstorage.grid": "グリッド",
"block.refinedstorage.crafting_grid": "クラフトグリッド", "block.refinedstorage.crafting_grid": "製作グリッド",
"block.refinedstorage.pattern_grid": "パターングリッド", "block.refinedstorage.pattern_grid": "パターングリッド",
"block.refinedstorage.fluid_grid": "流体グリッド", "block.refinedstorage.fluid_grid": "流体グリッド",
"block.refinedstorage.disk_drive": "ディスクドライブ", "block.refinedstorage.disk_drive": "ディスクドライブ",
@@ -292,7 +292,7 @@
"item.refinedstorage.upgrade": "アップグレード", "item.refinedstorage.upgrade": "アップグレード",
"item.refinedstorage.range_upgrade": "レンジアップグレード", "item.refinedstorage.range_upgrade": "レンジアップグレード",
"item.refinedstorage.speed_upgrade": "スピードアップグレード", "item.refinedstorage.speed_upgrade": "スピードアップグレード",
"item.refinedstorage.crafting_upgrade": "クラフアップグレード", "item.refinedstorage.crafting_upgrade": "クラフティングアップグレード",
"item.refinedstorage.stack_upgrade": "スタックアップグレード", "item.refinedstorage.stack_upgrade": "スタックアップグレード",
"item.refinedstorage.silk_touch_upgrade": "シルクタッチアップグレード", "item.refinedstorage.silk_touch_upgrade": "シルクタッチアップグレード",
"item.refinedstorage.fortune_1_upgrade": "幸運アップグレード", "item.refinedstorage.fortune_1_upgrade": "幸運アップグレード",
@@ -306,11 +306,11 @@
"item.refinedstorage.security_card": "セキュリティカード", "item.refinedstorage.security_card": "セキュリティカード",
"item.refinedstorage.security_card.owner": "所有者: %s", "item.refinedstorage.security_card.owner": "所有者: %s",
"item.refinedstorage.processor_binding": "プロセッサ接合材", "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に割り当てました", "commands.refinedstorage.disk.create.success": "ディスク%sを%sに割り当てました",
"advancements.refinedstorage.controlling.description": "コントローラーを作る", "advancements.refinedstorage.controlling.description": "コントローラーを作る",
"advancements.refinedstorage.connecting": "接続", "advancements.refinedstorage.connecting": "接続",
"advancements.refinedstorage.connecting.description": "装置を隣接させて設置する他、ケーブルを使用することもでき", "advancements.refinedstorage.connecting.description": "装置を隣接させて設置する他、ケーブルを使用することもできます",
"advancements.refinedstorage.conditional_connecting": "条件付きの接続", "advancements.refinedstorage.conditional_connecting": "条件付きの接続",
"advancements.refinedstorage.conditional_connecting.description": "ネットワーク信号をレッドストーンで接続・遮断するリレーを作る", "advancements.refinedstorage.conditional_connecting.description": "ネットワーク信号をレッドストーンで接続・遮断するリレーを作る",
"advancements.refinedstorage.drives": "ドライブ", "advancements.refinedstorage.drives": "ドライブ",
@@ -324,7 +324,7 @@
"advancements.refinedstorage.portable_storage": "携帯ストレージ", "advancements.refinedstorage.portable_storage": "携帯ストレージ",
"advancements.refinedstorage.portable_storage.description": "ネットワーク内でなくてもディスク内のアイテムや流体にアクセスできる携帯グリッドを作る", "advancements.refinedstorage.portable_storage.description": "ネットワーク内でなくてもディスク内のアイテムや流体にアクセスできる携帯グリッドを作る",
"advancements.refinedstorage.upgrading_your_grid": "グリッドのアップグレード", "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": "流体を貯蔵",
"advancements.refinedstorage.storing_fluids.description": "流体ストレージディスクを作成してディスクドライブに搭載する", "advancements.refinedstorage.storing_fluids.description": "流体ストレージディスクを作成してディスクドライブに搭載する",
"advancements.refinedstorage.viewing_fluids": "流体を確認", "advancements.refinedstorage.viewing_fluids": "流体を確認",
@@ -335,7 +335,7 @@
"advancements.refinedstorage.autocrafting.description": "クラフターを作る", "advancements.refinedstorage.autocrafting.description": "クラフターを作る",
"advancements.refinedstorage.pattern_creation": "パターンを作成", "advancements.refinedstorage.pattern_creation": "パターンを作成",
"advancements.refinedstorage.pattern_creation.description": "パターングリッドとパターンを使用してパターンを作る", "advancements.refinedstorage.pattern_creation.description": "パターングリッドとパターンを使用してパターンを作る",
"advancements.refinedstorage.monitoring": "モニター中", "advancements.refinedstorage.monitoring": "モニタリング",
"advancements.refinedstorage.monitoring.description": "クラフトモニターを使用して自動クラフトの状況をチェックする", "advancements.refinedstorage.monitoring.description": "クラフトモニターを使用して自動クラフトの状況をチェックする",
"advancements.refinedstorage.managing_patterns": "パターンの管理", "advancements.refinedstorage.managing_patterns": "パターンの管理",
"advancements.refinedstorage.managing_patterns.description": "クラフターマネージャーを使用してより良い方法でパターンを管理する", "advancements.refinedstorage.managing_patterns.description": "クラフターマネージャーを使用してより良い方法でパターンを管理する",
@@ -361,7 +361,7 @@
"advancements.refinedstorage.no_cables_required.description": "ネットワーク送信機と受信機、ネットワークカードを使用してケーブルを使用せずにネットワークに装置を追加する", "advancements.refinedstorage.no_cables_required.description": "ネットワーク送信機と受信機、ネットワークカードを使用してケーブルを使用せずにネットワークに装置を追加する",
"advancements.refinedstorage.upgrading": "アップグレード", "advancements.refinedstorage.upgrading": "アップグレード",
"advancements.refinedstorage.upgrading.description": "様々な装置を改善するアップグレードを作る", "advancements.refinedstorage.upgrading.description": "様々な装置を改善するアップグレードを作る",
"advancements.refinedstorage.crafting_on_demand": "インスタントクラフト", "advancements.refinedstorage.crafting_on_demand": "クラフティング・オンデマンド",
"advancements.refinedstorage.crafting_on_demand.description": "インターフェースやエクスポーター、コンストラクターにクラフティングアップグレードを搭載してアイテムやブロックをオンデマンドで作る", "advancements.refinedstorage.crafting_on_demand.description": "インターフェースやエクスポーター、コンストラクターにクラフティングアップグレードを搭載してアイテムやブロックをオンデマンドで作る",
"advancements.refinedstorage.detecting": "検知", "advancements.refinedstorage.detecting": "検知",
"advancements.refinedstorage.detecting.description": "検出器を使用してネットワーク内のアイテムや流体を検出する", "advancements.refinedstorage.detecting.description": "検出器を使用してネットワーク内のアイテムや流体を検出する",

View File

@@ -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"
]
}