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

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

View File

@@ -1,5 +1,44 @@
# Refined Storage Changelog
### 1.9.15
- Fixed Refined Storage Addons compatibility (Darkere)
### 1.9.14
- Implemented Curios support (Darkere)
### 1.9.13
- Fixed count on Storage Monitor having Z fighting (tivec)
- Fixed items on Storage Monitor not being flat (raoulvdberge)
- Removed experimental pipeline nagging message (raoulvdberge)
- Fixed crash when using an External Storage on a fluid inventory (jeremiahwinsley)
- Added some performance improvements for autocrafting (necauqua, Darkere)
- Fixed a memory leak in the pattern cache (necauqua)
- Fixed Detector crashing when dyed (Darkere)
- Fixed autocrafting being stuck after clicking "Start" (necauqua)
- Fixed Crafting Monitor not being able to show hours (Darkere)
- Fixed capacity rendering of infinite storages (Darkere)
- Fixed wrong alignment for the JEI request autocrafting tooltip (Darkere)
- Fixed mobs getting stuck in Refined Storage cables (Darkere)
- Fixed dismantling storage blocks ignoring stack size (Darkere)
- Fixed Ice and Fire banners breaking with Refined Storage (Darkere, necauqua)
- Fixed empty keybinding causing GL errors (Darkere)
- Fixed some parts of the Japanese translation (akihironagai)
- Fixed rendering issue on blocks when using OptiFine (ylou)
### 1.9.12
- Fixed some issues when using the Grid when it's offline (Darkere)
- Fixed crafting events not being fired in some cases in the Grid (Darkere)
- Fixed not being able to set fluid filter slot output quantity (Darkere)
- Fixed mod id search not working for Industrial Foregoing (Darkere)
- Fixed fluid autocrafting duplicating fluids (Darkere)
- Fixed some Grid crashes (ScoreUnder)
- Fixed constructor not using compare mode correctly in some cases (ScoreUnder)
- Fixed duplication bug in the Interface (Darkere)
### 1.9.11
- Fixed disks and network devices not loading when they did not previously exist

5
Jenkinsfile vendored
View File

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

View File

@@ -1,16 +1,14 @@
buildscript {
repositories {
maven { url = 'https://files.minecraftforge.net/maven' }
jcenter()
maven { url = 'https://maven.minecraftforge.net' }
mavenCentral()
}
dependencies {
classpath group: 'net.minecraftforge.gradle', name: 'ForgeGradle', version: '3.+', changing: true
classpath group: 'net.minecraftforge.gradle', name: 'ForgeGradle', version: '4.1.+', changing: true
}
}
plugins {
id "org.sonarqube" version "3.0"
id 'info.solidsoft.pitest' version '1.5.1'
}
@@ -19,15 +17,13 @@ repositories {
url = "https://dvs1.progwml6.com/files/maven/"
}
maven {
url "https://minecraft.curseforge.com/api/maven/"
url "https://www.cursemaven.com"
content {
includeGroup "curse.maven"
}
}
sonarqube {
properties {
property "sonar.projectKey", "refinedmods_refinedstorage"
property "sonar.organization", "refinedmods"
property "sonar.host.url", "https://sonarcloud.io"
}
maven {
url = "https://maven.theillusivec4.top/"
}
}
@@ -40,7 +36,7 @@ pitest {
junit5PluginVersion = "0.12"
}
version = '1.9.12'
version = '1.9.15'
def env = System.getenv()
if (env.BUILD_NUMBER) {
version = version + "+" + "${env.BUILD_NUMBER}"
@@ -48,10 +44,10 @@ if (env.BUILD_NUMBER) {
group = 'com.refinedmods'
archivesBaseName = 'refinedstorage'
sourceCompatibility = targetCompatibility = compileJava.sourceCompatibility = compileJava.targetCompatibility = '1.8'
java.toolchain.languageVersion = JavaLanguageVersion.of(8)
minecraft {
mappings channel: 'snapshot', version: '20200723-1.16.1'
mappings channel: 'snapshot', version: '20210309-1.16.5'
accessTransformer = file('src/main/resources/META-INF/accesstransformer.cfg')
runs {
@@ -116,14 +112,17 @@ processResources {
}
dependencies {
minecraft 'net.minecraftforge:forge:1.16.3-34.1.0'
minecraft 'net.minecraftforge:forge:1.16.5-36.1.31'
compileOnly fg.deobf("mezz.jei:jei-1.16.3:7.3.2.36:api")
runtimeOnly fg.deobf("mezz.jei:jei-1.16.3:7.3.2.36")
compileOnly fg.deobf("mezz.jei:jei-1.16.5:7.7.0.106:api")
runtimeOnly fg.deobf("mezz.jei:jei-1.16.5:7.7.0.106")
compileOnly 'mouse-tweaks:MouseTweaks:2.13:mc1.16.2'
compileOnly fg.deobf('curse.maven:mouse-tweaks-60089:3202662')
runtimeOnly fg.deobf('crafting-tweaks:CraftingTweaks_1.16.2:12.1.0')
compileOnly fg.deobf('curse.maven:crafting-tweaks-233071:3330406')
runtimeOnly fg.deobf("top.theillusivec4.curios:curios-forge:1.16.5-4.0.5.2")
compileOnly fg.deobf("top.theillusivec4.curios:curios-forge:1.16.5-4.0.5.2:api")
testImplementation('org.junit.jupiter:junit-jupiter-api:5.6.2')
testRuntime('org.junit.jupiter:junit-jupiter-engine:5.6.2')

Binary file not shown.

View File

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

53
gradlew vendored
View File

@@ -1,5 +1,21 @@
#!/usr/bin/env sh
#
# Copyright 2015 the original author or authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
##############################################################################
##
## Gradle start up script for UN*X
@@ -28,7 +44,7 @@ APP_NAME="Gradle"
APP_BASE_NAME=`basename "$0"`
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS=""
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD="maximum"
@@ -66,6 +82,7 @@ esac
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
# Determine the Java command to use to start the JVM.
if [ -n "$JAVA_HOME" ] ; then
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
@@ -109,10 +126,11 @@ if $darwin; then
GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
fi
# For Cygwin, switch paths to Windows format before running java
if $cygwin ; then
# For Cygwin or MSYS, switch paths to Windows format before running java
if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
JAVACMD=`cygpath --unix "$JAVACMD"`
# We build the pattern for arguments to be converted via cygpath
@@ -138,19 +156,19 @@ if $cygwin ; then
else
eval `echo args$i`="\"$arg\""
fi
i=$((i+1))
i=`expr $i + 1`
done
case $i in
(0) set -- ;;
(1) set -- "$args0" ;;
(2) set -- "$args0" "$args1" ;;
(3) set -- "$args0" "$args1" "$args2" ;;
(4) set -- "$args0" "$args1" "$args2" "$args3" ;;
(5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
(6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
(7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
(8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
(9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
0) set -- ;;
1) set -- "$args0" ;;
2) set -- "$args0" "$args1" ;;
3) set -- "$args0" "$args1" "$args2" ;;
4) set -- "$args0" "$args1" "$args2" "$args3" ;;
5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
esac
fi
@@ -159,14 +177,9 @@ save () {
for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
echo " "
}
APP_ARGS=$(save "$@")
APP_ARGS=`save "$@"`
# Collect all arguments for the java command, following the shell quoting and substitution rules
eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
cd "$(dirname "$0")"
fi
exec "$JAVACMD" "$@"

43
gradlew.bat vendored
View File

@@ -1,3 +1,19 @@
@rem
@rem Copyright 2015 the original author or authors.
@rem
@rem Licensed under the Apache License, Version 2.0 (the "License");
@rem you may not use this file except in compliance with the License.
@rem You may obtain a copy of the License at
@rem
@rem https://www.apache.org/licenses/LICENSE-2.0
@rem
@rem Unless required by applicable law or agreed to in writing, software
@rem distributed under the License is distributed on an "AS IS" BASIS,
@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@rem See the License for the specific language governing permissions and
@rem limitations under the License.
@rem
@if "%DEBUG%" == "" @echo off
@rem ##########################################################################
@rem
@@ -13,15 +29,18 @@ if "%DIRNAME%" == "" set DIRNAME=.
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%
@rem Resolve any "." and ".." in APP_HOME to make it shorter.
for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
set DEFAULT_JVM_OPTS=
set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
@rem Find java.exe
if defined JAVA_HOME goto findJavaFromJavaHome
set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
if "%ERRORLEVEL%" == "0" goto init
if "%ERRORLEVEL%" == "0" goto execute
echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
@@ -35,7 +54,7 @@ goto fail
set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
if exist "%JAVA_EXE%" goto init
if exist "%JAVA_EXE%" goto execute
echo.
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
@@ -45,28 +64,14 @@ echo location of your Java installation.
goto fail
:init
@rem Get command-line arguments, handling Windows variants
if not "%OS%" == "Windows_NT" goto win9xME_args
:win9xME_args
@rem Slurp the command line arguments.
set CMD_LINE_ARGS=
set _SKIP=2
:win9xME_args_slurp
if "x%~1" == "x" goto execute
set CMD_LINE_ARGS=%*
:execute
@rem Setup the command line
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
@rem Execute Gradle
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
:end
@rem End local scope for the variables with windows NT shell

View File

@@ -4,6 +4,7 @@ import com.refinedmods.refinedstorage.apiimpl.API;
import com.refinedmods.refinedstorage.config.ClientConfig;
import com.refinedmods.refinedstorage.config.ServerConfig;
import com.refinedmods.refinedstorage.datageneration.DataGenerators;
import com.refinedmods.refinedstorage.integration.curios.CuriosIntegration;
import com.refinedmods.refinedstorage.item.group.MainItemGroup;
import com.refinedmods.refinedstorage.network.NetworkHandler;
import com.refinedmods.refinedstorage.setup.ClientSetup;
@@ -49,6 +50,7 @@ public final class RS {
FMLJavaModLoadingContext.get().getModEventBus().addGenericListener(IRecipeSerializer.class, commonSetup::onRegisterRecipeSerializers);
FMLJavaModLoadingContext.get().getModEventBus().addGenericListener(ContainerType.class, commonSetup::onRegisterContainers);
FMLJavaModLoadingContext.get().getModEventBus().register(new DataGenerators());
FMLJavaModLoadingContext.get().getModEventBus().register(new CuriosIntegration());
API.deliver();
}

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -30,6 +30,7 @@ import net.minecraftforge.items.IItemHandler;
import net.minecraftforge.items.IItemHandlerModifiable;
import net.minecraftforge.items.wrapper.CombinedInvWrapper;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.util.ArrayList;
import java.util.List;
@@ -67,6 +68,16 @@ public class CrafterNetworkNode extends NetworkNode implements ICraftingPatternC
public int getSlotLimit(int slot) {
return 1;
}
@Nonnull
@Override
public ItemStack insertItem(int slot, @Nonnull ItemStack stack, boolean simulate) {
if (!stacks.get(slot).isEmpty()) {
return stack;
}
return super.insertItem(slot, stack, simulate);
}
}
.addValidator(new PatternItemValidator(world))
.addListener(new NetworkNodeInventoryListener(this))
@@ -183,7 +194,7 @@ public class CrafterNetworkNode extends NetworkNode implements ICraftingPatternC
StackUtils.readItems(upgrades, 1, tag);
if (tag.contains(NBT_DISPLAY_NAME)) {
displayName = ITextComponent.Serializer.func_240643_a_(tag.getString(NBT_DISPLAY_NAME));
displayName = ITextComponent.Serializer.getComponentFromJson(tag.getString(NBT_DISPLAY_NAME));
}
if (tag.hasUniqueId(NBT_UUID)) {

View File

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

View File

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

View File

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

View File

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

View File

@@ -2,7 +2,7 @@ package com.refinedmods.refinedstorage.apiimpl.storage.tracker;
import com.refinedmods.refinedstorage.api.storage.tracker.IStorageTracker;
import com.refinedmods.refinedstorage.api.storage.tracker.StorageTrackerEntry;
import com.refinedmods.refinedstorage.apiimpl.API;
import com.refinedmods.refinedstorage.util.ItemStackKey;
import com.refinedmods.refinedstorage.util.StackUtils;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.ItemStack;
@@ -17,7 +17,7 @@ public class ItemStorageTracker implements IStorageTracker<ItemStack> {
private static final String NBT_NAME = "Name";
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;
public ItemStorageTracker(Runnable listener) {
@@ -26,14 +26,14 @@ public class ItemStorageTracker implements IStorageTracker<ItemStack> {
@Override
public void changed(PlayerEntity player, ItemStack stack) {
changes.put(new Key(stack), new StorageTrackerEntry(System.currentTimeMillis(), player.getName().getString()));
changes.put(new ItemStackKey(stack), new StorageTrackerEntry(System.currentTimeMillis(), player.getName().getString()));
listener.run();
}
@Override
public StorageTrackerEntry get(ItemStack stack) {
return changes.get(new Key(stack));
return changes.get(new ItemStackKey(stack));
}
public void readFromNbt(ListNBT list) {
@@ -43,7 +43,7 @@ public class ItemStorageTracker implements IStorageTracker<ItemStack> {
ItemStack stack = StackUtils.deserializeStackFromNbt(tag.getCompound(NBT_STACK));
if (!stack.isEmpty()) {
changes.put(new Key(stack), new StorageTrackerEntry(tag.getLong(NBT_TIME), tag.getString(NBT_NAME)));
changes.put(new ItemStackKey(stack), new StorageTrackerEntry(tag.getLong(NBT_TIME), tag.getString(NBT_NAME)));
}
}
}
@@ -51,34 +51,16 @@ public class ItemStorageTracker implements IStorageTracker<ItemStack> {
public ListNBT serializeNbt() {
ListNBT list = new ListNBT();
for (Map.Entry<Key, StorageTrackerEntry> entry : changes.entrySet()) {
for (Map.Entry<ItemStackKey, StorageTrackerEntry> entry : changes.entrySet()) {
CompoundNBT tag = new CompoundNBT();
tag.putLong(NBT_TIME, entry.getValue().getTime());
tag.putString(NBT_NAME, entry.getValue().getName());
tag.put(NBT_STACK, StackUtils.serializeStackToNbt(entry.getKey().stack));
tag.put(NBT_STACK, StackUtils.serializeStackToNbt(entry.getKey().getStack()));
list.add(tag);
}
return list;
}
private static class Key {
private final ItemStack stack;
public Key(ItemStack stack) {
this.stack = stack;
}
@Override
public boolean equals(Object other) {
return other instanceof Key && API.instance().getComparer().isEqualNoQuantity(stack, ((Key) other).stack);
}
@Override
public int hashCode() {
return API.instance().getItemStackHashCode(stack);
}
}
}

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -32,14 +32,14 @@ public class PatternDumpCommand implements Command<CommandSource> {
ICraftingPattern pattern = PatternItem.fromCache(context.getSource().getWorld(), stack);
context.getSource().sendFeedback(new StringTextComponent("Crafting task factory ID: ").setStyle(Styles.YELLOW).append(new StringTextComponent(pattern.getCraftingTaskFactoryId().toString()).setStyle(Styles.WHITE)), false);
context.getSource().sendFeedback(new StringTextComponent("Crafting task factory ID: ").setStyle(Styles.YELLOW).appendSibling(new StringTextComponent(pattern.getCraftingTaskFactoryId().toString()).setStyle(Styles.WHITE)), false);
if (!pattern.isValid()) {
context.getSource().sendErrorMessage(new StringTextComponent("Pattern is invalid! Reason: ").append(pattern.getErrorMessage()));
context.getSource().sendErrorMessage(new StringTextComponent("Pattern is invalid! Reason: ").appendSibling(pattern.getErrorMessage()));
} else {
context.getSource().sendFeedback(new StringTextComponent("Processing: ").setStyle(Styles.YELLOW).append(new StringTextComponent(String.valueOf(processing)).setStyle(Styles.WHITE)), false);
context.getSource().sendFeedback(new StringTextComponent("Exact: ").setStyle(Styles.YELLOW).append(new StringTextComponent(String.valueOf(exact)).setStyle(Styles.WHITE)), false);
context.getSource().sendFeedback(new StringTextComponent("Has allowed tag list: ").setStyle(Styles.YELLOW).append(new StringTextComponent(String.valueOf(allowedTagList != null)).setStyle(Styles.WHITE)), false);
context.getSource().sendFeedback(new StringTextComponent("Processing: ").setStyle(Styles.YELLOW).appendSibling(new StringTextComponent(String.valueOf(processing)).setStyle(Styles.WHITE)), false);
context.getSource().sendFeedback(new StringTextComponent("Exact: ").setStyle(Styles.YELLOW).appendSibling(new StringTextComponent(String.valueOf(exact)).setStyle(Styles.WHITE)), false);
context.getSource().sendFeedback(new StringTextComponent("Has allowed tag list: ").setStyle(Styles.YELLOW).appendSibling(new StringTextComponent(String.valueOf(allowedTagList != null)).setStyle(Styles.WHITE)), false);
if (pattern.isProcessing()) {
for (int i = 0; i < pattern.getInputs().size(); ++i) {
@@ -47,7 +47,7 @@ public class PatternDumpCommand implements Command<CommandSource> {
context.getSource().sendFeedback(new StringTextComponent("Item inputs in slot " + i + ":").setStyle(Styles.YELLOW), false);
for (int j = 0; j < pattern.getInputs().get(i).size(); ++j) {
context.getSource().sendFeedback(new StringTextComponent("- Possibility #" + j + ": " + pattern.getInputs().get(i).get(j).getCount() + "x ").append(pattern.getInputs().get(i).get(j).getDisplayName()), false);
context.getSource().sendFeedback(new StringTextComponent("- Possibility #" + j + ": " + pattern.getInputs().get(i).get(j).getCount() + "x ").appendSibling(pattern.getInputs().get(i).get(j).getDisplayName()), false);
}
}
@@ -63,7 +63,7 @@ public class PatternDumpCommand implements Command<CommandSource> {
context.getSource().sendFeedback(new StringTextComponent("Fluid inputs in slot " + i + ":").setStyle(Styles.YELLOW), false);
for (int j = 0; j < pattern.getFluidInputs().get(i).size(); ++j) {
context.getSource().sendFeedback(new StringTextComponent("- Possibility #" + j + ": " + pattern.getFluidInputs().get(i).get(j).getAmount() + " mB ").append(pattern.getFluidInputs().get(i).get(j).getDisplayName()), false);
context.getSource().sendFeedback(new StringTextComponent("- Possibility #" + j + ": " + pattern.getFluidInputs().get(i).get(j).getAmount() + " mB ").appendSibling(pattern.getFluidInputs().get(i).get(j).getDisplayName()), false);
}
}
@@ -76,12 +76,12 @@ public class PatternDumpCommand implements Command<CommandSource> {
context.getSource().sendFeedback(new StringTextComponent("Outputs").setStyle(Styles.YELLOW), false);
for (ItemStack output : pattern.getOutputs()) {
context.getSource().sendFeedback(new StringTextComponent("- " + output.getCount() + "x ").append(output.getDisplayName()), false);
context.getSource().sendFeedback(new StringTextComponent("- " + output.getCount() + "x ").appendSibling(output.getDisplayName()), false);
}
context.getSource().sendFeedback(new StringTextComponent("Fluid outputs").setStyle(Styles.YELLOW), false);
for (FluidStack output : pattern.getFluidOutputs()) {
context.getSource().sendFeedback(new StringTextComponent("- " + output.getAmount() + " mB ").append(output.getDisplayName()), false);
context.getSource().sendFeedback(new StringTextComponent("- " + output.getAmount() + " mB ").appendSibling(output.getDisplayName()), false);
}
} else {
for (int i = 0; i < pattern.getInputs().size(); ++i) {
@@ -89,14 +89,14 @@ public class PatternDumpCommand implements Command<CommandSource> {
context.getSource().sendFeedback(new StringTextComponent("Inputs in slot " + i + ":").setStyle(Styles.YELLOW), false);
for (int j = 0; j < pattern.getInputs().get(i).size(); ++j) {
context.getSource().sendFeedback(new StringTextComponent("- Possibility #" + j + ": " + pattern.getInputs().get(i).get(j).getCount() + "x ").append(pattern.getInputs().get(i).get(j).getDisplayName()), false);
context.getSource().sendFeedback(new StringTextComponent("- Possibility #" + j + ": " + pattern.getInputs().get(i).get(j).getCount() + "x ").appendSibling(pattern.getInputs().get(i).get(j).getDisplayName()), false);
}
}
}
context.getSource().sendFeedback(new StringTextComponent("Outputs").setStyle(Styles.YELLOW), false);
for (ItemStack output : pattern.getOutputs()) {
context.getSource().sendFeedback(new StringTextComponent("- " + output.getCount() + "x ").append(output.getDisplayName()), false);
context.getSource().sendFeedback(new StringTextComponent("- " + output.getCount() + "x ").appendSibling(output.getDisplayName()), false);
}
boolean anyByproducts = false;
@@ -109,7 +109,7 @@ public class PatternDumpCommand implements Command<CommandSource> {
anyByproducts = true;
}
context.getSource().sendFeedback(new StringTextComponent("- " + byproduct.getCount() + "x ").append(byproduct.getDisplayName()), false);
context.getSource().sendFeedback(new StringTextComponent("- " + byproduct.getCount() + "x ").appendSibling(byproduct.getDisplayName()), false);
}
}
}

View File

@@ -0,0 +1,25 @@
package com.refinedmods.refinedstorage.integration.curios;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.InterModComms;
import net.minecraftforge.fml.ModList;
import net.minecraftforge.fml.event.lifecycle.InterModEnqueueEvent;
import top.theillusivec4.curios.api.SlotTypeMessage;
import top.theillusivec4.curios.api.SlotTypePreset;
public class CuriosIntegration {
private static final String ID = "curios";
public CuriosIntegration() {
}
public static boolean isLoaded() {
return ModList.get().isLoaded(ID);
}
@SubscribeEvent
public void registerSlots(InterModEnqueueEvent event){
InterModComms.sendTo(ID, SlotTypeMessage.REGISTER_TYPE,()-> SlotTypePreset.BELT.getMessageBuilder().build());
InterModComms.sendTo(ID, SlotTypeMessage.REGISTER_TYPE,()-> SlotTypePreset.BODY.getMessageBuilder().build());
}
}

View File

@@ -35,7 +35,7 @@ public class RecipeTransferCraftingGridError implements IRecipeTransferError {
List<ITextComponent> message = drawIngredientHighlights(stack, recipeX, recipeY);
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) {

View File

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

View File

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

View File

@@ -97,7 +97,7 @@ public abstract class NetworkItem extends EnergyItem implements INetworkItemProv
tag.putInt(NBT_NODE_X, network.getPosition().getX());
tag.putInt(NBT_NODE_Y, network.getPosition().getY());
tag.putInt(NBT_NODE_Z, network.getPosition().getZ());
tag.putString(NBT_DIMENSION, ctx.getWorld().func_234923_W_().func_240901_a_().toString());
tag.putString(NBT_DIMENSION, ctx.getWorld().getDimensionKey().getLocation().toString());
stack.setTag(tag);
@@ -115,7 +115,7 @@ public abstract class NetworkItem extends EnergyItem implements INetworkItemProv
return null;
}
return RegistryKey.func_240903_a_(Registry.WORLD_KEY, name);
return RegistryKey.getOrCreateKey(Registry.WORLD_KEY, name);
}
return null;

View File

@@ -10,6 +10,7 @@ import com.refinedmods.refinedstorage.apiimpl.autocrafting.CraftingPattern;
import com.refinedmods.refinedstorage.apiimpl.autocrafting.CraftingPatternFactory;
import com.refinedmods.refinedstorage.render.Styles;
import com.refinedmods.refinedstorage.render.tesr.PatternItemStackTileRenderer;
import com.refinedmods.refinedstorage.util.ItemStackKey;
import com.refinedmods.refinedstorage.util.RenderUtils;
import net.minecraft.client.gui.screen.Screen;
import net.minecraft.client.util.ITooltipFlag;
@@ -35,7 +36,7 @@ import java.util.Set;
import java.util.stream.Collectors;
public class PatternItem extends Item implements ICraftingPatternProvider {
private static final Map<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_INPUT_SLOT = "Input_%d";
@@ -53,11 +54,18 @@ public class PatternItem extends Item implements ICraftingPatternProvider {
}
public static ICraftingPattern fromCache(World world, ItemStack stack) {
if (!CACHE.containsKey(stack)) {
CACHE.put(stack, CraftingPatternFactory.INSTANCE.create(world, null, stack));
ICraftingPattern pattern = CACHE.computeIfAbsent(
new ItemStackKey(stack),
s -> CraftingPatternFactory.INSTANCE.create(world, null, s.getStack())
);
// A number that is not too crazy but hopefully is not normally reachable,
// just reset the cache to keep its size limited so this is not a memory leak
if (CACHE.size() > 16384) {
CACHE.clear();
}
return CACHE.get(stack);
return pattern;
}
@Override

View File

@@ -83,7 +83,7 @@ public class SecurityCardItem extends Item {
for (Permission permission : Permission.values()) {
if (hasPermission(stack, permission)) {
tooltip.add(new StringTextComponent("- ").append(new TranslationTextComponent("gui.refinedstorage.security_manager.permission." + permission.getId())).setStyle(Styles.GRAY));
tooltip.add(new StringTextComponent("- ").appendSibling(new TranslationTextComponent("gui.refinedstorage.security_manager.permission." + permission.getId())).setStyle(Styles.GRAY));
}
}
}

View File

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

View File

@@ -14,7 +14,9 @@ public class ColoredBlockItem extends BaseBlockItem {
super(block, builder);
if (color != ColorMap.DEFAULT_COLOR) {
this.displayName = new TranslationTextComponent("color.minecraft." + color.getTranslationKey()).appendString(" ").append(displayName);
this.displayName = new TranslationTextComponent("color.minecraft." + color.getTranslationKey())
.appendString(" ")
.appendSibling(displayName);
} else {
this.displayName = displayName;
}

View File

@@ -17,7 +17,9 @@ public class ControllerBlockItem extends EnergyBlockItem {
super(block, new Item.Properties().group(RS.MAIN_GROUP).maxStackSize(1), block.getType() == NetworkType.CREATIVE, () -> RS.SERVER_CONFIG.getController().getCapacity());
if (color != ColorMap.DEFAULT_COLOR) {
this.displayName = new TranslationTextComponent("color.minecraft." + color.getTranslationKey()).appendString(" ").append(displayName);
this.displayName = new TranslationTextComponent("color.minecraft." + color.getTranslationKey())
.appendString(" ")
.appendSibling(displayName);
} else {
this.displayName = displayName;
}

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -4,26 +4,35 @@ import com.refinedmods.refinedstorage.apiimpl.API;
import com.refinedmods.refinedstorage.apiimpl.network.grid.factory.PortableGridGridFactory;
import com.refinedmods.refinedstorage.item.NetworkItem;
import com.refinedmods.refinedstorage.item.blockitem.PortableGridBlockItem;
import com.refinedmods.refinedstorage.util.PacketBufferUtils;
import net.minecraft.entity.player.ServerPlayerEntity;
import net.minecraft.item.ItemStack;
import net.minecraft.network.PacketBuffer;
import net.minecraftforge.common.util.LazyOptional;
import net.minecraftforge.fml.network.NetworkEvent;
import top.theillusivec4.curios.api.CuriosApi;
import top.theillusivec4.curios.api.type.capability.ICuriosItemHandler;
import top.theillusivec4.curios.api.type.inventory.ICurioStacksHandler;
import java.util.Optional;
import java.util.function.Supplier;
public class OpenNetworkItemMessage {
private final int slotId;
private final String curioSlot;
public OpenNetworkItemMessage(int slotId) {
public OpenNetworkItemMessage(int slotId, String curioSlot) {
this.slotId = slotId;
this.curioSlot = curioSlot;
}
public static OpenNetworkItemMessage decode(PacketBuffer buf) {
return new OpenNetworkItemMessage(buf.readInt());
return new OpenNetworkItemMessage(buf.readInt(), PacketBufferUtils.readString(buf));
}
public static void encode(OpenNetworkItemMessage message, PacketBuffer buf) {
buf.writeInt(message.slotId);
buf.writeString(message.curioSlot);
}
public static void handle(OpenNetworkItemMessage message, Supplier<NetworkEvent.Context> ctx) {
@@ -31,7 +40,11 @@ public class OpenNetworkItemMessage {
if (player != null) {
ctx.get().enqueueWork(() -> {
ItemStack stack = player.inventory.getStackInSlot(message.slotId);
ItemStack stack = getStackFromSlot(player, message.slotId, message.curioSlot);
if (stack == null) {
return;
}
if (stack.getItem() instanceof NetworkItem) {
((NetworkItem) stack.getItem()).applyNetwork(player.getServer(), stack, n -> n.getNetworkItemManager().open(player, stack, message.slotId), err -> player.sendMessage(err, player.getUniqueID()));
@@ -43,4 +56,24 @@ public class OpenNetworkItemMessage {
ctx.get().setPacketHandled(true);
}
private static ItemStack getStackFromSlot(ServerPlayerEntity player, int slotId, String curioSlot) {
if (curioSlot.isEmpty()) {
return player.inventory.getStackInSlot(slotId);
} else {
LazyOptional<ICuriosItemHandler> curiosHandler = CuriosApi.getCuriosHelper().getCuriosHandler(player);
Optional<ICurioStacksHandler> stacksHandler = curiosHandler.resolve().flatMap((handler ->
handler.getStacksHandler(curioSlot)
));
Optional<ItemStack> stack = stacksHandler.map(handler -> handler.getStacks().getStackInSlot(slotId));
if (stack.isPresent()) {
return stack.get();
}
}
return null;
}
}

View File

@@ -1,22 +0,0 @@
package com.refinedmods.refinedstorage.render;
import net.minecraft.util.text.*;
import net.minecraftforge.common.ForgeConfig;
import net.minecraftforge.event.entity.player.PlayerEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent;
public class ExperimentalLightingPipelineNagger {
@SubscribeEvent
public void onPlayerLoggedIn(PlayerEvent.PlayerLoggedInEvent e) {
if (Boolean.FALSE.equals(ForgeConfig.CLIENT.experimentalForgeLightPipelineEnabled.get())) {
IFormattableTextComponent message = new StringTextComponent("[Refined Storage] ").setStyle(Styles.AQUA.setBold(true));
message.append(new StringTextComponent("Please set ").setStyle(Styles.WHITE.setBold(false)));
message.append(new StringTextComponent("experimentalForgeLightPipelineEnabled").setStyle(Styles.GRAY.setItalic(true)));
message.append(new StringTextComponent(" to ").setStyle(Styles.WHITE.setBold(false)));
message.append(new StringTextComponent("true").setStyle(Style.EMPTY.setColor(Color.func_240744_a_(TextFormatting.GREEN)).setBold(true).setItalic(true)));
message.append(new StringTextComponent(" in the Forge client config to ensure correct rendering of Refined Storage blocks.").setStyle(Styles.WHITE.setBold(false)));
e.getPlayer().sendStatusMessage(message, false);
}
}
}

View File

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

View File

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

View File

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

View File

@@ -25,7 +25,7 @@ public class PatternBakedModel extends DelegateBakedModel {
return new ItemOverrideList() {
@Nullable
@Override
public IBakedModel func_239290_a_(IBakedModel model, ItemStack stack, @Nullable ClientWorld world, @Nullable LivingEntity entity) {
public IBakedModel getOverrideModel(IBakedModel model, ItemStack stack, @Nullable ClientWorld world, @Nullable LivingEntity entity) {
if (entity != null) {
ICraftingPattern pattern = PatternItem.fromCache(entity.world, stack);
@@ -36,7 +36,7 @@ public class PatternBakedModel extends DelegateBakedModel {
}
}
return super.func_239290_a_(model, stack, world, entity);
return super.getOverrideModel(model, stack, world, entity);
}
@Override

View File

@@ -110,7 +110,7 @@ public class PortableGridBakedModel extends DelegateBakedModel {
private class CustomItemOverrideList extends ItemOverrideList {
@Nullable
@Override
public IBakedModel func_239290_a_(IBakedModel model, ItemStack stack, @Nullable ClientWorld world, @Nullable LivingEntity entity) {
public IBakedModel getOverrideModel(IBakedModel model, ItemStack stack, @Nullable ClientWorld world, @Nullable LivingEntity entity) {
PortableGrid portableGrid = new PortableGrid(null, stack, -1);
if (portableGrid.isGridActive()) {

View File

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

View File

@@ -34,7 +34,7 @@ public final class QuadTransformer {
}
for (BakedQuad quad : model.getQuads(state, side, rand, EmptyModelData.INSTANCE)) {
BakedQuadBuilder builder = new BakedQuadBuilder(quad.func_187508_a());
BakedQuadBuilder builder = new BakedQuadBuilder(quad.getSprite());
TRSRTransformer transformer = new TRSRTransformer(builder, transformation.blockCenterToCorner());
quad.pipe(transformer);

View File

@@ -1,17 +1,20 @@
package com.refinedmods.refinedstorage.render.tesr;
import com.mojang.blaze3d.matrix.MatrixStack;
import com.mojang.blaze3d.vertex.IVertexBuilder;
import com.refinedmods.refinedstorage.RSBlocks;
import com.refinedmods.refinedstorage.apiimpl.API;
import com.refinedmods.refinedstorage.block.StorageMonitorBlock;
import com.refinedmods.refinedstorage.tile.StorageMonitorTile;
import com.refinedmods.refinedstorage.tile.config.IType;
import com.mojang.blaze3d.matrix.MatrixStack;
import com.mojang.blaze3d.vertex.IVertexBuilder;
import net.minecraft.block.BlockState;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.IRenderTypeBuffer;
import net.minecraft.client.renderer.RenderHelper;
import net.minecraft.client.renderer.RenderType;
import net.minecraft.client.renderer.WorldRenderer;
import net.minecraft.client.renderer.model.IBakedModel;
import net.minecraft.client.renderer.model.ItemCameraTransforms;
import net.minecraft.client.renderer.texture.OverlayTexture;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
@@ -22,6 +25,7 @@ import net.minecraft.inventory.container.PlayerContainer;
import net.minecraft.item.ItemStack;
import net.minecraft.util.Direction;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.math.vector.Matrix3f;
import net.minecraft.util.math.vector.Vector3f;
import net.minecraftforge.common.model.TransformationHelper;
import net.minecraftforge.fluids.FluidAttributes;
@@ -71,9 +75,9 @@ public class StorageMonitorTileRenderer extends TileEntityRenderer<StorageMonito
matrixStack.translate(0.5D, 0.5D, 0.5D);
matrixStack.translate(
((float) direction.getXOffset() * 0.5F) + (direction.getZOffset() * stringOffset),
((float) direction.getXOffset() * 0.501F) + (direction.getZOffset() * stringOffset),
-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));
@@ -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) {
matrixStack.push();
// Put it in the middle, outwards, and facing the correct direction
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.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(
itemStack,
ItemCameraTransforms.TransformType.FIXED,
ItemCameraTransforms.TransformType.GUI,
false,
matrixStack,
renderTypeBuffer,
light,
OverlayTexture.NO_OVERLAY,
matrixStack,
renderTypeBuffer
itemModel
);
matrixStack.pop();

View File

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

View File

@@ -126,7 +126,7 @@ public abstract class BaseScreen<T extends Container> extends ContainerScreen<T>
super.render(matrixStack, mouseX, mouseY, partialTicks);
func_230459_a_(matrixStack, mouseX, mouseY);
renderHoveredTooltip(matrixStack, mouseX, mouseY);
}
@Override
@@ -352,7 +352,7 @@ public abstract class BaseScreen<T extends Container> extends ContainerScreen<T>
}
public static boolean isKeyDown(KeyBinding keybinding) {
return InputMappings.isKeyDown(Minecraft.getInstance().getMainWindow().getHandle(), keybinding.getKey().getKeyCode()) &&
return !keybinding.isInvalid() && InputMappings.isKeyDown(Minecraft.getInstance().getMainWindow().getHandle(), keybinding.getKey().getKeyCode()) &&
keybinding.getKeyConflictContext().isActive() &&
keybinding.getKeyModifier().isActive(keybinding.getKeyConflictContext());
}

View File

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

View File

@@ -3,44 +3,44 @@ package com.refinedmods.refinedstorage.screen;
import com.refinedmods.refinedstorage.RS;
import com.refinedmods.refinedstorage.RSItems;
import com.refinedmods.refinedstorage.RSKeyBindings;
import com.refinedmods.refinedstorage.integration.curios.CuriosIntegration;
import com.refinedmods.refinedstorage.network.OpenNetworkItemMessage;
import net.minecraft.client.Minecraft;
import net.minecraft.entity.player.PlayerInventory;
import net.minecraft.inventory.IInventory;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.Util;
import net.minecraft.util.text.ITextComponent;
import net.minecraft.util.text.TranslationTextComponent;
import net.minecraftforge.client.event.InputEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import org.apache.commons.lang3.tuple.ImmutableTriple;
import top.theillusivec4.curios.api.CuriosApi;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Optional;
import java.util.Set;
import java.util.function.Consumer;
public class KeyInputListener {
@SubscribeEvent
public void onKeyInput(InputEvent.KeyInputEvent e) {
if (Minecraft.getInstance().player != null) {
PlayerInventory inv = Minecraft.getInstance().player.inventory;
if (RSKeyBindings.OPEN_WIRELESS_GRID.isKeyDown()) {
findAndOpen(inv, error -> Minecraft.getInstance().player.sendMessage(error, Util.DUMMY_UUID), RSItems.WIRELESS_GRID.get(), RSItems.CREATIVE_WIRELESS_GRID.get());
findAndOpen(RSItems.WIRELESS_GRID.get(), RSItems.CREATIVE_WIRELESS_GRID.get());
} else if (RSKeyBindings.OPEN_WIRELESS_FLUID_GRID.isKeyDown()) {
findAndOpen(inv, error -> Minecraft.getInstance().player.sendMessage(error, Util.DUMMY_UUID), RSItems.WIRELESS_FLUID_GRID.get(), RSItems.CREATIVE_WIRELESS_FLUID_GRID.get());
findAndOpen(RSItems.WIRELESS_FLUID_GRID.get(), RSItems.CREATIVE_WIRELESS_FLUID_GRID.get());
} else if (RSKeyBindings.OPEN_PORTABLE_GRID.isKeyDown()) {
findAndOpen(inv, error -> Minecraft.getInstance().player.sendMessage(error, Util.DUMMY_UUID), RSItems.PORTABLE_GRID.get(), RSItems.CREATIVE_PORTABLE_GRID.get());
findAndOpen(RSItems.PORTABLE_GRID.get(), RSItems.CREATIVE_PORTABLE_GRID.get());
} else if (RSKeyBindings.OPEN_WIRELESS_CRAFTING_MONITOR.isKeyDown()) {
findAndOpen(inv, error -> Minecraft.getInstance().player.sendMessage(error, Util.DUMMY_UUID), RSItems.WIRELESS_CRAFTING_MONITOR.get(), RSItems.CREATIVE_WIRELESS_CRAFTING_MONITOR.get());
findAndOpen(RSItems.WIRELESS_CRAFTING_MONITOR.get(), RSItems.CREATIVE_WIRELESS_CRAFTING_MONITOR.get());
}
}
}
public static void findAndOpen(IInventory inv, Consumer<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));
IInventory inv = Minecraft.getInstance().player.inventory;
int slotFound = -1;
for (int i = 0; i < inv.getSizeInventory(); ++i) {
@@ -48,7 +48,7 @@ public class KeyInputListener {
if (validItems.contains(slot.getItem())) {
if (slotFound != -1) {
onError.accept(new TranslationTextComponent("misc.refinedstorage.network_item.shortcut_duplicate", new TranslationTextComponent(items[0].getTranslationKey())));
sendError(new TranslationTextComponent("misc.refinedstorage.network_item.shortcut_duplicate", new TranslationTextComponent(items[0].getTranslationKey())));
return;
}
@@ -56,10 +56,25 @@ public class KeyInputListener {
}
}
if (CuriosIntegration.isLoaded() && slotFound == -1) {
Optional<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) {
onError.accept(new TranslationTextComponent("misc.refinedstorage.network_item.shortcut_not_found", new TranslationTextComponent(items[0].getTranslationKey())));
sendError(new TranslationTextComponent("misc.refinedstorage.network_item.shortcut_not_found", new TranslationTextComponent(items[0].getTranslationKey())));
} else {
RS.NETWORK_HANDLER.sendToServer(new OpenNetworkItemMessage(slotFound));
RS.NETWORK_HANDLER.sendToServer(new OpenNetworkItemMessage(slotFound, ""));
}
}
public static void sendError(TranslationTextComponent error) {
Minecraft.getInstance().player.sendMessage(error, Util.DUMMY_UUID);
}
}

View File

@@ -71,7 +71,7 @@ public class SecurityManagerScreen extends BaseScreen<SecurityManagerContainer>
CheckboxWidget permission = permissions[i];
// getWidth_CLASH => getHeight
if (RenderUtils.inBounds(permission.x - guiLeft, permission.y - guiTop, permission.getWidth(), permission.getWidth_CLASH(), mouseX, mouseY)) {
if (RenderUtils.inBounds(permission.x - guiLeft, permission.y - guiTop, permission.getWidth(), permission.getHeight(), mouseX, mouseY)) {
renderTooltip(matrixStack, mouseX, mouseY, I18n.format("gui.refinedstorage.security_manager.permission." + i + ".tooltip"));
}
}

View File

@@ -86,7 +86,7 @@ public class StorageScreen<T extends Container> extends BaseScreen<T> {
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);
}

View File

@@ -47,7 +47,7 @@ public class CheckboxWidget extends CheckboxButton {
}
@Override
public void renderButton(MatrixStack matrixStack, int mouseX, int mouseY, float partialTicks) {
public void renderWidget(MatrixStack matrixStack, int mouseX, int mouseY, float partialTicks) {
Minecraft minecraft = Minecraft.getInstance();
minecraft.getTextureManager().bindTexture(TEXTURE);
RenderSystem.enableDepthTest();

View File

@@ -173,10 +173,10 @@ public class SearchWidget extends TextFieldWidget {
}
@Override
public void renderButton(MatrixStack matrixStack, int mouseX, int mouseY, float partialTicks) {
public void renderWidget(MatrixStack matrixStack, int mouseX, int mouseY, float partialTicks) {
if (canSyncFromJEINow() && RSJeiPlugin.getRuntime().getIngredientListOverlay().hasKeyboardFocus()) {
setTextFromJEI();
}
super.renderButton(matrixStack, mouseX, mouseY, partialTicks);
super.renderWidget(matrixStack, mouseX, mouseY, partialTicks);
}
}

View File

@@ -25,7 +25,7 @@ public abstract class SideButton extends Button {
}
@Override
public void renderButton(MatrixStack matrixStack, int mouseX, int mouseY, float partialTicks) {
public void renderWidget(MatrixStack matrixStack, int mouseX, int mouseY, float partialTicks) {
RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F);
RenderSystem.enableAlphaTest();

View File

@@ -10,7 +10,6 @@ import com.refinedmods.refinedstorage.item.property.ControllerItemPropertyGetter
import com.refinedmods.refinedstorage.item.property.NetworkItemPropertyGetter;
import com.refinedmods.refinedstorage.item.property.SecurityCardItemPropertyGetter;
import com.refinedmods.refinedstorage.render.BakedModelOverrideRegistry;
import com.refinedmods.refinedstorage.render.ExperimentalLightingPipelineNagger;
import com.refinedmods.refinedstorage.render.color.PatternItemColor;
import com.refinedmods.refinedstorage.render.model.*;
import com.refinedmods.refinedstorage.render.resourcepack.ResourcePackListener;
@@ -35,8 +34,10 @@ import net.minecraft.resources.IResourceManager;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.client.event.ModelBakeEvent;
import net.minecraftforge.client.event.TextureStitchEvent;
import net.minecraftforge.client.event.ModelRegistryEvent;
import net.minecraftforge.client.model.ModelLoader;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.event.AddReloadListenerEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.client.registry.ClientRegistry;
import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent;
@@ -56,13 +57,6 @@ public class ClientSetup {
private final BakedModelOverrideRegistry bakedModelOverrideRegistry = new BakedModelOverrideRegistry();
public ClientSetup() {
Minecraft minecraft = Minecraft.getInstance();
if (minecraft != null) { // This is null in a runData environment.
IResourceManager resourceManager = minecraft.getResourceManager();
if (resourceManager instanceof IReloadableResourceManager) {
((IReloadableResourceManager) resourceManager).addReloadListener(new ResourcePackListener());
}
}
forEachColorApply("controller", (name, color) -> bakedModelOverrideRegistry.add(name, (base, registry) -> new FullbrightBakedModel(
base,
@@ -156,28 +150,11 @@ public class ClientSetup {
bakedModelOverrideRegistry.add(new ResourceLocation(RS.ID, "pattern"), (base, registry) -> new PatternBakedModel(base));
ModelLoader.addSpecialModel(DISK_RESOURCE);
ModelLoader.addSpecialModel(DISK_NEAR_CAPACITY_RESOURCE);
ModelLoader.addSpecialModel(DISK_FULL_RESOURCE);
ModelLoader.addSpecialModel(DISK_DISCONNECTED_RESOURCE);
ModelLoader.addSpecialModel(new ResourceLocation(RS.ID + ":block/disk_manipulator/disconnected"));
for (DyeColor color : DyeColor.values()) {
ModelLoader.addSpecialModel(new ResourceLocation(RS.ID + ":block/disk_manipulator/" + color));
}
ModelLoader.addSpecialModel(new ResourceLocation(RS.ID + ":block/portable_grid_connected"));
ModelLoader.addSpecialModel(new ResourceLocation(RS.ID + ":block/portable_grid_disconnected"));
ModelLoader.addSpecialModel(new ResourceLocation(RS.ID + ":block/disks/portable_grid_disk"));
ModelLoader.addSpecialModel(new ResourceLocation(RS.ID + ":block/disks/portable_grid_disk_near_capacity"));
ModelLoader.addSpecialModel(new ResourceLocation(RS.ID + ":block/disks/portable_grid_disk_full"));
ModelLoader.addSpecialModel(new ResourceLocation(RS.ID + ":block/disks/portable_grid_disk_disconnected"));
FMLJavaModLoadingContext.get().getModEventBus().addListener(this::onClientSetup);
FMLJavaModLoadingContext.get().getModEventBus().addListener(this::onModelBake);
FMLJavaModLoadingContext.get().getModEventBus().addListener(this::onModelRegistry);
MinecraftForge.EVENT_BUS.addListener(this::addReloadListener);
FMLJavaModLoadingContext.get().getModEventBus().addListener(this::onTextureStitch);
MinecraftForge.EVENT_BUS.addListener(new ExperimentalLightingPipelineNagger()::onPlayerLoggedIn);
API.instance().addPatternRenderHandler(pattern -> Screen.hasShiftDown());
@@ -288,19 +265,45 @@ public class ClientSetup {
e.getMinecraftSupplier().get().getItemColors().register(new PatternItemColor(), RSItems.PATTERN.get());
ItemModelsProperties.func_239418_a_(RSItems.SECURITY_CARD.get(), new ResourceLocation("active"), new SecurityCardItemPropertyGetter());
ItemModelsProperties.registerProperty(RSItems.SECURITY_CARD.get(), new ResourceLocation("active"), new SecurityCardItemPropertyGetter());
RSItems.CONTROLLER.values().forEach(controller -> ItemModelsProperties.func_239418_a_(controller.get(), new ResourceLocation("energy_type"), new ControllerItemPropertyGetter()));
RSItems.CREATIVE_CONTROLLER.values().forEach(controller -> ItemModelsProperties.func_239418_a_(controller.get(), new ResourceLocation("energy_type"), new ControllerItemPropertyGetter()));
RSItems.CONTROLLER.values().forEach(controller -> ItemModelsProperties.registerProperty(controller.get(), new ResourceLocation("energy_type"), new ControllerItemPropertyGetter()));
RSItems.CREATIVE_CONTROLLER.values().forEach(controller -> ItemModelsProperties.registerProperty(controller.get(), new ResourceLocation("energy_type"), new ControllerItemPropertyGetter()));
ItemModelsProperties.func_239418_a_(RSItems.WIRELESS_CRAFTING_MONITOR.get(), CONNECTED, new NetworkItemPropertyGetter());
ItemModelsProperties.func_239418_a_(RSItems.CREATIVE_WIRELESS_CRAFTING_MONITOR.get(), CONNECTED, new NetworkItemPropertyGetter());
ItemModelsProperties.registerProperty(RSItems.WIRELESS_CRAFTING_MONITOR.get(), CONNECTED, new NetworkItemPropertyGetter());
ItemModelsProperties.registerProperty(RSItems.CREATIVE_WIRELESS_CRAFTING_MONITOR.get(), CONNECTED, new NetworkItemPropertyGetter());
ItemModelsProperties.func_239418_a_(RSItems.WIRELESS_GRID.get(), CONNECTED, new NetworkItemPropertyGetter());
ItemModelsProperties.func_239418_a_(RSItems.CREATIVE_WIRELESS_GRID.get(), CONNECTED, new NetworkItemPropertyGetter());
ItemModelsProperties.registerProperty(RSItems.WIRELESS_GRID.get(), CONNECTED, new NetworkItemPropertyGetter());
ItemModelsProperties.registerProperty(RSItems.CREATIVE_WIRELESS_GRID.get(), CONNECTED, new NetworkItemPropertyGetter());
ItemModelsProperties.func_239418_a_(RSItems.WIRELESS_FLUID_GRID.get(), CONNECTED, new NetworkItemPropertyGetter());
ItemModelsProperties.func_239418_a_(RSItems.CREATIVE_WIRELESS_FLUID_GRID.get(), CONNECTED, new NetworkItemPropertyGetter());
ItemModelsProperties.registerProperty(RSItems.WIRELESS_FLUID_GRID.get(), CONNECTED, new NetworkItemPropertyGetter());
ItemModelsProperties.registerProperty(RSItems.CREATIVE_WIRELESS_FLUID_GRID.get(), CONNECTED, new NetworkItemPropertyGetter());
}
@SubscribeEvent
public void addReloadListener(AddReloadListenerEvent event){
event.addListener(new ResourcePackListener());
}
@SubscribeEvent
public void onModelRegistry(ModelRegistryEvent e) {
ModelLoader.addSpecialModel(DISK_RESOURCE);
ModelLoader.addSpecialModel(DISK_NEAR_CAPACITY_RESOURCE);
ModelLoader.addSpecialModel(DISK_FULL_RESOURCE);
ModelLoader.addSpecialModel(DISK_DISCONNECTED_RESOURCE);
ModelLoader.addSpecialModel(new ResourceLocation(RS.ID + ":block/disk_manipulator/disconnected"));
for (DyeColor color : DyeColor.values()) {
ModelLoader.addSpecialModel(new ResourceLocation(RS.ID + ":block/disk_manipulator/" + color));
}
ModelLoader.addSpecialModel(new ResourceLocation(RS.ID + ":block/portable_grid_connected"));
ModelLoader.addSpecialModel(new ResourceLocation(RS.ID + ":block/portable_grid_disconnected"));
ModelLoader.addSpecialModel(new ResourceLocation(RS.ID + ":block/disks/portable_grid_disk"));
ModelLoader.addSpecialModel(new ResourceLocation(RS.ID + ":block/disks/portable_grid_disk_near_capacity"));
ModelLoader.addSpecialModel(new ResourceLocation(RS.ID + ":block/disks/portable_grid_disk_full"));
ModelLoader.addSpecialModel(new ResourceLocation(RS.ID + ":block/disks/portable_grid_disk_disconnected"));
}
@SubscribeEvent

View File

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

View File

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

View File

@@ -0,0 +1,26 @@
package com.refinedmods.refinedstorage.util;
import com.refinedmods.refinedstorage.apiimpl.API;
import net.minecraft.item.ItemStack;
public final class ItemStackKey {
private final ItemStack stack;
public ItemStackKey(ItemStack stack) {
this.stack = stack;
}
public ItemStack getStack() {
return stack;
}
@Override
public boolean equals(Object other) {
return other instanceof ItemStackKey && API.instance().getComparer().isEqualNoQuantity(stack, ((ItemStackKey) other).stack);
}
@Override
public int hashCode() {
return API.instance().getItemStackHashCode(stack);
}
}

View File

@@ -78,7 +78,7 @@ public final class RenderUtils {
}
if (displayAmount) {
data = new StringTextComponent(amount + "x ").append(data);
data = new StringTextComponent(amount + "x ").appendSibling(data);
}
tooltip.add(data.setStyle(Styles.GRAY));
@@ -106,7 +106,7 @@ public final class RenderUtils {
}
if (displayMb) {
data = new StringTextComponent(API.instance().getQuantityFormatter().formatInBucketForm(amount) + " ").append(data);
data = new StringTextComponent(API.instance().getQuantityFormatter().formatInBucketForm(amount) + " ").appendSibling(data);
}
tooltip.add(data.setStyle(Styles.GRAY));
@@ -181,7 +181,7 @@ public final class RenderUtils {
List<ITextProperties> wrappedTextLines = new ArrayList<>();
for (int i = 0; i < textLines.size(); 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)
titleLinesCount = wrappedLine.size();
@@ -254,7 +254,7 @@ public final class RenderUtils {
for (int lineNumber = 0; lineNumber < textLines.size(); ++lineNumber) {
ITextProperties line = textLines.get(lineNumber);
if (line != null)
font.func_238416_a_(LanguageMap.getInstance().func_241870_a(line), (float) tooltipX, (float) tooltipY, -1, true, textLocation, renderType, false, 0, 15728880);
font.drawEntityText(LanguageMap.getInstance().func_241870_a(line), (float) tooltipX, (float) tooltipY, -1, true, textLocation, renderType, false, 0, 15728880);
if (lineNumber + 1 == titleLinesCount)
tooltipY += 2;
@@ -275,7 +275,7 @@ public final class RenderUtils {
RenderSystem.enableAlphaTest();
// FontRenderer#drawStringWithShadow - call to func_228078_a_ (private)
// FontRenderer#drawStringWithShadow - call to renderString (private)
MatrixStack smallTextStack = new MatrixStack();
smallTextStack.translate(0.0D, 0.0D, zLevel);
smallTextStack.scale(textScale, textScale, 1);

View File

@@ -1,5 +1,5 @@
modLoader = "javafml"
loaderVersion = "[34,)"
loaderVersion = "[36,)"
issueTrackerURL = "https://github.com/refinedmods/refinedstorage"
license="MIT"
[[mods]]
@@ -13,14 +13,3 @@ authors = "Refined Mods"
description = '''
An elegant solution to your hoarding problem
'''
[[dependencies.refinedstorage]] #optional
# the modid of the dependency
modId = "forge" #mandatory
# Does this dependency have to exist - if not, ordering below must be specified
mandatory = true #mandatory
# The version range of the dependency
versionRange = "[34.1.0,)" #mandatory
# An ordering relationship for the dependency - BEFORE or AFTER required if the relationship is not mandatory
ordering = "NONE"
# Side this dependency is applied on - BOTH, CLIENT or SERVER
side = "BOTH"

View File

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

View File

@@ -0,0 +1,11 @@
{
"replace": false,
"values": [
"refinedstorage:wireless_grid",
"refinedstorage:creative_wireless_grid",
"refinedstorage:wireless_fluid_grid",
"refinedstorage:creative_wireless_fluid_grid",
"refinedstorage:wireless_crafting_monitor",
"refinedstorage:creative_wireless_crafting_monitor"
]
}