Merge remote-tracking branch 'refinedmods/mc1.16' into mc1.16
This commit is contained in:
39
CHANGELOG.md
39
CHANGELOG.md
@@ -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
5
Jenkinsfile
vendored
@@ -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"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
39
build.gradle
39
build.gradle
@@ -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')
|
||||||
|
BIN
gradle/wrapper/gradle-wrapper.jar
vendored
BIN
gradle/wrapper/gradle-wrapper.jar
vendored
Binary file not shown.
2
gradle/wrapper/gradle-wrapper.properties
vendored
2
gradle/wrapper/gradle-wrapper.properties
vendored
@@ -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
53
gradlew
vendored
@@ -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
43
gradlew.bat
vendored
@@ -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
|
||||||
|
@@ -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();
|
||||||
}
|
}
|
||||||
|
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -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();
|
||||||
|
@@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -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();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -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();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -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();
|
||||||
|
@@ -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)) {
|
||||||
|
@@ -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() {
|
||||||
|
@@ -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() {
|
||||||
|
@@ -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())) {
|
||||||
|
@@ -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;
|
||||||
|
@@ -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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@@ -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());
|
||||||
|
@@ -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) {
|
||||||
|
@@ -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) {
|
||||||
|
@@ -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)
|
||||||
|
@@ -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
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -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());
|
||||||
|
}
|
||||||
|
}
|
@@ -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) {
|
||||||
|
@@ -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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -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;
|
||||||
|
@@ -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;
|
||||||
|
@@ -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
|
||||||
|
@@ -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));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -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)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@@ -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;
|
||||||
}
|
}
|
||||||
|
@@ -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;
|
||||||
}
|
}
|
||||||
|
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -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();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -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();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -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();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -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();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@@ -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() {
|
||||||
}
|
}
|
||||||
|
@@ -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
|
||||||
|
@@ -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()
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -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
|
||||||
|
@@ -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()) {
|
||||||
|
@@ -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
|
||||||
|
@@ -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);
|
||||||
|
@@ -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();
|
||||||
|
@@ -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
|
||||||
|
@@ -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());
|
||||||
}
|
}
|
||||||
|
@@ -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);
|
||||||
|
@@ -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);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -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"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -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);
|
||||||
}
|
}
|
||||||
|
@@ -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();
|
||||||
|
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -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();
|
||||||
|
|
||||||
|
@@ -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
|
||||||
|
@@ -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();
|
||||||
|
@@ -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) {
|
||||||
|
@@ -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);
|
||||||
|
}
|
||||||
|
}
|
@@ -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);
|
||||||
|
@@ -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"
|
|
||||||
|
@@ -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": "検出器を使用してネットワーク内のアイテムや流体を検出する",
|
||||||
|
11
src/main/resources/data/curios/tags/items/curio.json
Normal file
11
src/main/resources/data/curios/tags/items/curio.json
Normal 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"
|
||||||
|
]
|
||||||
|
}
|
Reference in New Issue
Block a user