Merge pull request #3194 from refinedmods/develop

1.10.0-beta.4
This commit is contained in:
Raoul
2021-12-28 22:28:33 +01:00
committed by GitHub
74 changed files with 406 additions and 240 deletions

1
.github/FUNDING.yml vendored Normal file
View File

@@ -0,0 +1 @@
patreon: raoulvdberge

View File

@@ -8,6 +8,18 @@ to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [Unreleased] ## [Unreleased]
### Fixed ### Fixed
- Fixed client crash when hovering over a fluid in the Fluid Grid by [@jackodsteel](https://github.com/jackodsteel).
- Fixed random client crashes when starting the game.
### Changed
- Update Korean translation by [@mindy15963](https://github.com/mindy15963).
## [v1.10.0-beta.3] - 2021-12-17
### Fixed
- Fixed networks and network devices being removed when a chunk unloads. - Fixed networks and network devices being removed when a chunk unloads.
## [v1.10.0-beta.2] - 2021-12-16 ## [v1.10.0-beta.2] - 2021-12-16

View File

@@ -33,7 +33,7 @@ apply plugin: 'maven-publish'
group = 'com.refinedmods' group = 'com.refinedmods'
archivesBaseName = 'refinedstorage' archivesBaseName = 'refinedstorage'
version = '1.10.0-beta.3' version = '1.10.0-beta.4'
if (System.getenv('GITHUB_SHA') != null) { if (System.getenv('GITHUB_SHA') != null) {
version += '+' + System.getenv('GITHUB_SHA').substring(0, 7) version += '+' + System.getenv('GITHUB_SHA').substring(0, 7)

View File

@@ -5,7 +5,7 @@ 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.integration.curios.CuriosIntegration;
import com.refinedmods.refinedstorage.item.group.MainItemGroup; import com.refinedmods.refinedstorage.item.group.MainCreativeModeTab;
import com.refinedmods.refinedstorage.network.NetworkHandler; import com.refinedmods.refinedstorage.network.NetworkHandler;
import com.refinedmods.refinedstorage.setup.ClientSetup; import com.refinedmods.refinedstorage.setup.ClientSetup;
import com.refinedmods.refinedstorage.setup.CommonSetup; import com.refinedmods.refinedstorage.setup.CommonSetup;
@@ -28,7 +28,7 @@ public final class RS {
public static final String NAME = "Refined Storage"; public static final String NAME = "Refined Storage";
public static final NetworkHandler NETWORK_HANDLER = new NetworkHandler(); public static final NetworkHandler NETWORK_HANDLER = new NetworkHandler();
public static final CreativeModeTab MAIN_GROUP = new MainItemGroup(); public static final CreativeModeTab CREATIVE_MODE_TAB = new MainCreativeModeTab();
public static final ServerConfig SERVER_CONFIG = new ServerConfig(); public static final ServerConfig SERVER_CONFIG = new ServerConfig();
public static final ClientConfig CLIENT_CONFIG = new ClientConfig(); public static final ClientConfig CLIENT_CONFIG = new ClientConfig();

View File

@@ -207,7 +207,7 @@ public final class RSItems {
} }
private static <T extends BaseBlock> RegistryObject<BlockItem> registerBlockItemFor(RegistryObject<T> block) { private static <T extends BaseBlock> RegistryObject<BlockItem> registerBlockItemFor(RegistryObject<T> block) {
return ITEMS.register(block.getId().getPath(), () -> new BaseBlockItem(block.get(), new Item.Properties().tab(RS.MAIN_GROUP))); return ITEMS.register(block.getId().getPath(), () -> new BaseBlockItem(block.get(), new Item.Properties().tab(RS.CREATIVE_MODE_TAB)));
} }
public static void register() { public static void register() {

View File

@@ -245,7 +245,7 @@ public class API implements IRSAPI {
@Nonnull @Nonnull
public IStorageDisk<ItemStack> createDefaultItemDisk(ServerLevel level, int capacity, @Nullable Player owner) { public IStorageDisk<ItemStack> createDefaultItemDisk(ServerLevel level, int capacity, @Nullable Player owner) {
if (level == null) { if (level == null) {
throw new IllegalArgumentException("World cannot be null"); throw new IllegalArgumentException("Level cannot be null");
} }
return new ItemStorageDisk(level, capacity, owner == null ? null : owner.getGameProfile().getId()); return new ItemStorageDisk(level, capacity, owner == null ? null : owner.getGameProfile().getId());
@@ -255,7 +255,7 @@ public class API implements IRSAPI {
@Nonnull @Nonnull
public IStorageDisk<FluidStack> createDefaultFluidDisk(ServerLevel level, int capacity, @Nullable Player owner) { public IStorageDisk<FluidStack> createDefaultFluidDisk(ServerLevel level, int capacity, @Nullable Player owner) {
if (level == null) { if (level == null) {
throw new IllegalArgumentException("World cannot be null"); throw new IllegalArgumentException("Level cannot be null");
} }
return new FluidStorageDisk(level, capacity, owner == null ? null : owner.getGameProfile().getId()); return new FluidStorageDisk(level, capacity, owner == null ? null : owner.getGameProfile().getId());

View File

@@ -9,7 +9,7 @@ import net.minecraftforge.eventbus.api.SubscribeEvent;
public class NetworkListener { public class NetworkListener {
@SubscribeEvent @SubscribeEvent
public void onWorldTick(TickEvent.WorldTickEvent e) { public void onLevelTick(TickEvent.WorldTickEvent e) {
if (!e.world.isClientSide() && e.phase == TickEvent.Phase.END) { if (!e.world.isClientSide() && e.phase == TickEvent.Phase.END) {
e.world.getProfiler().push("network ticking"); e.world.getProfiler().push("network ticking");

View File

@@ -3,7 +3,7 @@ package com.refinedmods.refinedstorage.apiimpl.network;
import com.refinedmods.refinedstorage.api.network.INetwork; import com.refinedmods.refinedstorage.api.network.INetwork;
import com.refinedmods.refinedstorage.api.network.INetworkManager; import com.refinedmods.refinedstorage.api.network.INetworkManager;
import com.refinedmods.refinedstorage.api.network.NetworkType; import com.refinedmods.refinedstorage.api.network.NetworkType;
import com.refinedmods.refinedstorage.apiimpl.util.RSWorldSavedData; import com.refinedmods.refinedstorage.apiimpl.util.RSSavedData;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.CompoundTag;
import net.minecraft.nbt.ListTag; import net.minecraft.nbt.ListTag;
@@ -16,7 +16,7 @@ import javax.annotation.Nullable;
import java.util.Collection; import java.util.Collection;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
public class NetworkManager extends RSWorldSavedData implements INetworkManager { public class NetworkManager extends RSSavedData implements INetworkManager {
public static final String NAME = "refinedstorage_networks"; public static final String NAME = "refinedstorage_networks";
private static final String NBT_NETWORKS = "Networks"; private static final String NBT_NETWORKS = "Networks";

View File

@@ -91,7 +91,7 @@ public class NetworkNodeGraph implements INetworkNodeGraph {
listeners.forEach(INetworkNodeGraphListener::onChanged); listeners.forEach(INetworkNodeGraphListener::onChanged);
} }
protected Level getWorld() { protected Level getLevel() {
return network.getLevel(); return network.getLevel();
} }

View File

@@ -5,7 +5,7 @@ import com.refinedmods.refinedstorage.api.network.security.Permission;
import com.refinedmods.refinedstorage.api.util.Action; import com.refinedmods.refinedstorage.api.util.Action;
import com.refinedmods.refinedstorage.util.NetworkUtils; import com.refinedmods.refinedstorage.util.NetworkUtils;
import com.refinedmods.refinedstorage.util.PlayerUtils; import com.refinedmods.refinedstorage.util.PlayerUtils;
import com.refinedmods.refinedstorage.util.WorldUtils; import com.refinedmods.refinedstorage.util.LevelUtils;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction; import net.minecraft.core.Direction;
import net.minecraft.server.level.ServerPlayer; import net.minecraft.server.level.ServerPlayer;
@@ -27,7 +27,7 @@ public class NetworkNodeListener {
INetworkNode node = NetworkUtils.getNodeFromBlockEntity(e.getWorld().getBlockEntity(e.getBlockSnapshot().getPos().relative(facing))); INetworkNode node = NetworkUtils.getNodeFromBlockEntity(e.getWorld().getBlockEntity(e.getBlockSnapshot().getPos().relative(facing)));
if (node != null && node.getNetwork() != null && !node.getNetwork().getSecurityManager().hasPermission(Permission.BUILD, player)) { if (node != null && node.getNetwork() != null && !node.getNetwork().getSecurityManager().hasPermission(Permission.BUILD, player)) {
WorldUtils.sendNoPermissionMessage(player); LevelUtils.sendNoPermissionMessage(player);
e.setCanceled(true); e.setCanceled(true);
@@ -63,7 +63,7 @@ public class NetworkNodeListener {
INetworkNode node = NetworkUtils.getNodeFromBlockEntity(e.getWorld().getBlockEntity(e.getPos())); INetworkNode node = NetworkUtils.getNodeFromBlockEntity(e.getWorld().getBlockEntity(e.getPos()));
if (node != null && node.getNetwork() != null && !node.getNetwork().getSecurityManager().hasPermission(Permission.BUILD, e.getPlayer())) { if (node != null && node.getNetwork() != null && !node.getNetwork().getSecurityManager().hasPermission(Permission.BUILD, e.getPlayer())) {
WorldUtils.sendNoPermissionMessage(e.getPlayer()); LevelUtils.sendNoPermissionMessage(e.getPlayer());
e.setCanceled(true); e.setCanceled(true);
} }

View File

@@ -4,7 +4,7 @@ import com.refinedmods.refinedstorage.api.network.node.INetworkNode;
import com.refinedmods.refinedstorage.api.network.node.INetworkNodeFactory; import com.refinedmods.refinedstorage.api.network.node.INetworkNodeFactory;
import com.refinedmods.refinedstorage.api.network.node.INetworkNodeManager; import com.refinedmods.refinedstorage.api.network.node.INetworkNodeManager;
import com.refinedmods.refinedstorage.apiimpl.API; import com.refinedmods.refinedstorage.apiimpl.API;
import com.refinedmods.refinedstorage.apiimpl.util.RSWorldSavedData; import com.refinedmods.refinedstorage.apiimpl.util.RSSavedData;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.CompoundTag;
import net.minecraft.nbt.ListTag; import net.minecraft.nbt.ListTag;
@@ -18,7 +18,7 @@ import javax.annotation.Nullable;
import java.util.Collection; import java.util.Collection;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
public class NetworkNodeManager extends RSWorldSavedData implements INetworkNodeManager { public class NetworkNodeManager extends RSSavedData implements INetworkNodeManager {
public static final String NAME = "refinedstorage_nodes"; public static final String NAME = "refinedstorage_nodes";
private static final String NBT_NODES = "Nodes"; private static final String NBT_NODES = "Nodes";

View File

@@ -10,7 +10,7 @@ import com.refinedmods.refinedstorage.blockentity.craftingmonitor.WirelessCrafti
import com.refinedmods.refinedstorage.container.factory.CraftingMonitorMenuProvider; import com.refinedmods.refinedstorage.container.factory.CraftingMonitorMenuProvider;
import com.refinedmods.refinedstorage.inventory.player.PlayerSlot; import com.refinedmods.refinedstorage.inventory.player.PlayerSlot;
import com.refinedmods.refinedstorage.item.WirelessCraftingMonitorItem; import com.refinedmods.refinedstorage.item.WirelessCraftingMonitorItem;
import com.refinedmods.refinedstorage.util.WorldUtils; import com.refinedmods.refinedstorage.util.LevelUtils;
import net.minecraft.network.chat.TranslatableComponent; import net.minecraft.network.chat.TranslatableComponent;
import net.minecraft.server.level.ServerPlayer; import net.minecraft.server.level.ServerPlayer;
import net.minecraft.world.entity.player.Player; import net.minecraft.world.entity.player.Player;
@@ -52,7 +52,7 @@ public class WirelessCraftingMonitorNetworkItem implements INetworkItem {
if (!network.getSecurityManager().hasPermission(Permission.MODIFY, player) || if (!network.getSecurityManager().hasPermission(Permission.MODIFY, player) ||
!network.getSecurityManager().hasPermission(Permission.AUTOCRAFTING, player)) { !network.getSecurityManager().hasPermission(Permission.AUTOCRAFTING, player)) {
WorldUtils.sendNoPermissionMessage(player); LevelUtils.sendNoPermissionMessage(player);
return false; return false;
} }

View File

@@ -9,7 +9,7 @@ import com.refinedmods.refinedstorage.apiimpl.API;
import com.refinedmods.refinedstorage.apiimpl.network.grid.factory.WirelessFluidGridGridFactory; import com.refinedmods.refinedstorage.apiimpl.network.grid.factory.WirelessFluidGridGridFactory;
import com.refinedmods.refinedstorage.inventory.player.PlayerSlot; import com.refinedmods.refinedstorage.inventory.player.PlayerSlot;
import com.refinedmods.refinedstorage.item.WirelessFluidGridItem; import com.refinedmods.refinedstorage.item.WirelessFluidGridItem;
import com.refinedmods.refinedstorage.util.WorldUtils; import com.refinedmods.refinedstorage.util.LevelUtils;
import net.minecraft.network.chat.TranslatableComponent; import net.minecraft.network.chat.TranslatableComponent;
import net.minecraft.server.level.ServerPlayer; import net.minecraft.server.level.ServerPlayer;
import net.minecraft.world.entity.player.Player; import net.minecraft.world.entity.player.Player;
@@ -49,7 +49,7 @@ public class WirelessFluidGridNetworkItem implements INetworkItem {
} }
if (!network.getSecurityManager().hasPermission(Permission.MODIFY, player)) { if (!network.getSecurityManager().hasPermission(Permission.MODIFY, player)) {
WorldUtils.sendNoPermissionMessage(player); LevelUtils.sendNoPermissionMessage(player);
return false; return false;
} }

View File

@@ -9,7 +9,7 @@ import com.refinedmods.refinedstorage.apiimpl.API;
import com.refinedmods.refinedstorage.apiimpl.network.grid.factory.WirelessGridGridFactory; import com.refinedmods.refinedstorage.apiimpl.network.grid.factory.WirelessGridGridFactory;
import com.refinedmods.refinedstorage.inventory.player.PlayerSlot; import com.refinedmods.refinedstorage.inventory.player.PlayerSlot;
import com.refinedmods.refinedstorage.item.WirelessGridItem; import com.refinedmods.refinedstorage.item.WirelessGridItem;
import com.refinedmods.refinedstorage.util.WorldUtils; import com.refinedmods.refinedstorage.util.LevelUtils;
import net.minecraft.network.chat.TranslatableComponent; import net.minecraft.network.chat.TranslatableComponent;
import net.minecraft.server.level.ServerPlayer; import net.minecraft.server.level.ServerPlayer;
import net.minecraft.world.entity.player.Player; import net.minecraft.world.entity.player.Player;
@@ -49,7 +49,7 @@ public class WirelessGridNetworkItem implements INetworkItem {
} }
if (!network.getSecurityManager().hasPermission(Permission.MODIFY, player)) { if (!network.getSecurityManager().hasPermission(Permission.MODIFY, player)) {
WorldUtils.sendNoPermissionMessage(player); LevelUtils.sendNoPermissionMessage(player);
return false; return false;
} }

View File

@@ -15,7 +15,7 @@ import com.refinedmods.refinedstorage.inventory.listener.NetworkNodeFluidInvento
import com.refinedmods.refinedstorage.inventory.listener.NetworkNodeInventoryListener; import com.refinedmods.refinedstorage.inventory.listener.NetworkNodeInventoryListener;
import com.refinedmods.refinedstorage.item.UpgradeItem; import com.refinedmods.refinedstorage.item.UpgradeItem;
import com.refinedmods.refinedstorage.util.StackUtils; import com.refinedmods.refinedstorage.util.StackUtils;
import com.refinedmods.refinedstorage.util.WorldUtils; import com.refinedmods.refinedstorage.util.LevelUtils;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction; import net.minecraft.core.Direction;
import net.minecraft.core.PositionImpl; import net.minecraft.core.PositionImpl;
@@ -105,7 +105,7 @@ public class ConstructorNetworkNode extends NetworkNode implements IComparable,
network.getCraftingManager().request(this, stack, FluidAttributes.BUCKET_VOLUME); network.getCraftingManager().request(this, stack, FluidAttributes.BUCKET_VOLUME);
} }
} else if (!level.getBlockState(front).getFluidState().isSource()) { } else if (!level.getBlockState(front).getFluidState().isSource()) {
FluidUtil.tryPlaceFluid(WorldUtils.getFakePlayer((ServerLevel) level, getOwner()), level, InteractionHand.MAIN_HAND, front, new NetworkFluidHandler(StackUtils.copy(stack, FluidAttributes.BUCKET_VOLUME)), stack); FluidUtil.tryPlaceFluid(LevelUtils.getFakePlayer((ServerLevel) level, getOwner()), level, InteractionHand.MAIN_HAND, front, new NetworkFluidHandler(StackUtils.copy(stack, FluidAttributes.BUCKET_VOLUME)), stack);
} }
} }
@@ -114,7 +114,7 @@ public class ConstructorNetworkNode extends NetworkNode implements IComparable,
if (!took.isEmpty()) { if (!took.isEmpty()) {
BlockPlaceContext ctx = new ConstructorBlockItemUseContext( BlockPlaceContext ctx = new ConstructorBlockItemUseContext(
level, level,
WorldUtils.getFakePlayer((ServerLevel) level, getOwner()), LevelUtils.getFakePlayer((ServerLevel) level, getOwner()),
InteractionHand.MAIN_HAND, InteractionHand.MAIN_HAND,
took, took,
new BlockHitResult(Vec3.ZERO, getDirection(), pos, false) new BlockHitResult(Vec3.ZERO, getDirection(), pos, false)

View File

@@ -13,7 +13,7 @@ import com.refinedmods.refinedstorage.inventory.item.validator.PatternItemValida
import com.refinedmods.refinedstorage.inventory.listener.NetworkNodeInventoryListener; import com.refinedmods.refinedstorage.inventory.listener.NetworkNodeInventoryListener;
import com.refinedmods.refinedstorage.item.UpgradeItem; import com.refinedmods.refinedstorage.item.UpgradeItem;
import com.refinedmods.refinedstorage.util.StackUtils; import com.refinedmods.refinedstorage.util.StackUtils;
import com.refinedmods.refinedstorage.util.WorldUtils; import com.refinedmods.refinedstorage.util.LevelUtils;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction; import net.minecraft.core.Direction;
import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.CompoundTag;
@@ -260,7 +260,7 @@ public class CrafterNetworkNode extends NetworkNode implements ICraftingPatternC
return null; return null;
} }
return WorldUtils.getItemHandler(proxy.getFacingBlockEntity(), proxy.getDirection().getOpposite()); return LevelUtils.getItemHandler(proxy.getFacingBlockEntity(), proxy.getDirection().getOpposite());
} }
@Nullable @Nullable
@@ -271,7 +271,7 @@ public class CrafterNetworkNode extends NetworkNode implements ICraftingPatternC
return null; return null;
} }
return WorldUtils.getFluidHandler(proxy.getFacingBlockEntity(), proxy.getDirection().getOpposite()); return LevelUtils.getFluidHandler(proxy.getFacingBlockEntity(), proxy.getDirection().getOpposite());
} }
@Override @Override

View File

@@ -16,7 +16,7 @@ import com.refinedmods.refinedstorage.inventory.listener.NetworkNodeFluidInvento
import com.refinedmods.refinedstorage.inventory.listener.NetworkNodeInventoryListener; import com.refinedmods.refinedstorage.inventory.listener.NetworkNodeInventoryListener;
import com.refinedmods.refinedstorage.item.UpgradeItem; import com.refinedmods.refinedstorage.item.UpgradeItem;
import com.refinedmods.refinedstorage.util.StackUtils; import com.refinedmods.refinedstorage.util.StackUtils;
import com.refinedmods.refinedstorage.util.WorldUtils; import com.refinedmods.refinedstorage.util.LevelUtils;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.CompoundTag;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
@@ -122,7 +122,7 @@ public class DestructorNetworkNode extends NetworkNode implements IComparable, I
new BlockHitResult(Vec3.ZERO, getDirection().getOpposite(), front, false), new BlockHitResult(Vec3.ZERO, getDirection().getOpposite(), front, false),
level, level,
front, front,
WorldUtils.getFakePlayer((ServerLevel) level, getOwner()) LevelUtils.getFakePlayer((ServerLevel) level, getOwner())
); );
if (!frontStack.isEmpty() && if (!frontStack.isEmpty() &&
@@ -133,7 +133,7 @@ public class DestructorNetworkNode extends NetworkNode implements IComparable, I
(ServerLevel) level, (ServerLevel) level,
front, front,
level.getBlockEntity(front), level.getBlockEntity(front),
WorldUtils.getFakePlayer((ServerLevel) level, getOwner()), LevelUtils.getFakePlayer((ServerLevel) level, getOwner()),
tool tool
); );
@@ -143,10 +143,10 @@ public class DestructorNetworkNode extends NetworkNode implements IComparable, I
} }
} }
BlockEvent.BreakEvent e = new BlockEvent.BreakEvent(level, front, frontBlockState, WorldUtils.getFakePlayer((ServerLevel) level, getOwner())); BlockEvent.BreakEvent e = new BlockEvent.BreakEvent(level, front, frontBlockState, LevelUtils.getFakePlayer((ServerLevel) level, getOwner()));
if (!MinecraftForge.EVENT_BUS.post(e)) { if (!MinecraftForge.EVENT_BUS.post(e)) {
frontBlock.playerWillDestroy(level, front, frontBlockState, WorldUtils.getFakePlayer((ServerLevel) level, getOwner())); frontBlock.playerWillDestroy(level, front, frontBlockState, LevelUtils.getFakePlayer((ServerLevel) level, getOwner()));
level.removeBlock(front, false); level.removeBlock(front, false);

View File

@@ -16,7 +16,7 @@ import com.refinedmods.refinedstorage.inventory.listener.NetworkNodeFluidInvento
import com.refinedmods.refinedstorage.inventory.listener.NetworkNodeInventoryListener; import com.refinedmods.refinedstorage.inventory.listener.NetworkNodeInventoryListener;
import com.refinedmods.refinedstorage.item.UpgradeItem; import com.refinedmods.refinedstorage.item.UpgradeItem;
import com.refinedmods.refinedstorage.util.StackUtils; import com.refinedmods.refinedstorage.util.StackUtils;
import com.refinedmods.refinedstorage.util.WorldUtils; import com.refinedmods.refinedstorage.util.LevelUtils;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.CompoundTag;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
@@ -87,7 +87,7 @@ public class ExporterNetworkNode extends NetworkNode implements IComparable, ITy
if (canUpdate() && ticks % upgrades.getSpeed() == 0 && level.isLoaded(pos)) { if (canUpdate() && ticks % upgrades.getSpeed() == 0 && level.isLoaded(pos)) {
if (type == IType.ITEMS) { if (type == IType.ITEMS) {
IItemHandler handler = WorldUtils.getItemHandler(getFacingBlockEntity(), getDirection().getOpposite()); IItemHandler handler = LevelUtils.getItemHandler(getFacingBlockEntity(), getDirection().getOpposite());
if (handler != null) { if (handler != null) {
while (filterSlot + 1 < itemFilters.getSlots() && itemFilters.getStackInSlot(filterSlot).isEmpty()) { while (filterSlot + 1 < itemFilters.getSlots() && itemFilters.getStackInSlot(filterSlot).isEmpty()) {
@@ -167,7 +167,7 @@ public class ExporterNetworkNode extends NetworkNode implements IComparable, ITy
filterSlot = 0; filterSlot = 0;
} }
IFluidHandler handler = WorldUtils.getFluidHandler(getFacingBlockEntity(), getDirection().getOpposite()); IFluidHandler handler = LevelUtils.getFluidHandler(getFacingBlockEntity(), getDirection().getOpposite());
if (handler != null) { if (handler != null) {
FluidStack stack = fluids[filterSlot]; FluidStack stack = fluids[filterSlot];

View File

@@ -17,7 +17,7 @@ import com.refinedmods.refinedstorage.blockentity.config.IComparable;
import com.refinedmods.refinedstorage.blockentity.config.IType; import com.refinedmods.refinedstorage.blockentity.config.IType;
import com.refinedmods.refinedstorage.blockentity.config.IWhitelistBlacklist; import com.refinedmods.refinedstorage.blockentity.config.IWhitelistBlacklist;
import com.refinedmods.refinedstorage.util.StackUtils; import com.refinedmods.refinedstorage.util.StackUtils;
import com.refinedmods.refinedstorage.util.WorldUtils; import com.refinedmods.refinedstorage.util.LevelUtils;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.CompoundTag;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
@@ -68,7 +68,7 @@ public class ImporterNetworkNode extends NetworkNode implements IComparable, IWh
if (type == IType.ITEMS) { if (type == IType.ITEMS) {
BlockEntity facing = getFacingBlockEntity(); BlockEntity facing = getFacingBlockEntity();
IItemHandler handler = WorldUtils.getItemHandler(facing, getDirection().getOpposite()); IItemHandler handler = LevelUtils.getItemHandler(facing, getDirection().getOpposite());
if (facing instanceof DiskDriveBlockEntity || handler == null) { if (facing instanceof DiskDriveBlockEntity || handler == null) {
return; return;
@@ -100,7 +100,7 @@ public class ImporterNetworkNode extends NetworkNode implements IComparable, IWh
} }
} }
} else if (type == IType.FLUIDS && ticks % upgrades.getSpeed() == 0) { } else if (type == IType.FLUIDS && ticks % upgrades.getSpeed() == 0) {
IFluidHandler handler = WorldUtils.getFluidHandler(getFacingBlockEntity(), getDirection().getOpposite()); IFluidHandler handler = LevelUtils.getFluidHandler(getFacingBlockEntity(), getDirection().getOpposite());
if (handler != null) { if (handler != null) {
FluidStack stack = handler.drain(FluidAttributes.BUCKET_VOLUME, IFluidHandler.FluidAction.SIMULATE); FluidStack stack = handler.drain(FluidAttributes.BUCKET_VOLUME, IFluidHandler.FluidAction.SIMULATE);

View File

@@ -36,8 +36,8 @@ public abstract class NetworkNode implements INetworkNode, INetworkNodeVisitor {
// However, due to the memory footprint of worlds and modded minecraft having the tendency to have lots of worlds, // However, due to the memory footprint of worlds and modded minecraft having the tendency to have lots of worlds,
// Forge is planning to unload (aka remove) worlds so their instances will change. // Forge is planning to unload (aka remove) worlds so their instances will change.
// This is problematic as this attribute will target the wrong world in that case. // This is problematic as this attribute will target the wrong world in that case.
// Idea: possibly change to a getter based on RegistryKey<World>? // Idea: possibly change to a getter based on RegistryKey<Level>?
// Another note: this attribute isn't the *real* problem. Because network nodes are in WorldSavedData in a tick handler, // Another note: this attribute isn't the *real* problem. Because network nodes are in SavedData in a tick handler,
// new instances of network nodes will be created when the world refreshes (causing this field to be different too). // new instances of network nodes will be created when the world refreshes (causing this field to be different too).
// However, network nodes in the network graph *AREN'T* recreated when the world refreshes, causing the graph to have the incorrect instance, and even worse, // However, network nodes in the network graph *AREN'T* recreated when the world refreshes, causing the graph to have the incorrect instance, and even worse,
// having multiple different instances of the same network node. // having multiple different instances of the same network node.

View File

@@ -114,10 +114,10 @@ public class NetworkTransmitterNetworkNode extends NetworkNode {
if (canTransmit()) { if (canTransmit()) {
if (!isSameDimension()) { if (!isSameDimension()) {
Level dimensionWorld = level.getServer().getLevel(receiverDimension); Level dimensionLevel = level.getServer().getLevel(receiverDimension);
if (dimensionWorld != null && dimensionWorld.getBlockEntity(receiver) instanceof NetworkReceiverBlockEntity) { if (dimensionLevel != null && dimensionLevel.getBlockEntity(receiver) instanceof NetworkReceiverBlockEntity) {
operator.apply(dimensionWorld, receiver, null); operator.apply(dimensionLevel, receiver, null);
} }
} else { } else {
if (level.getBlockEntity(receiver) instanceof NetworkReceiverBlockEntity) { if (level.getBlockEntity(receiver) instanceof NetworkReceiverBlockEntity) {

View File

@@ -14,7 +14,7 @@ import com.refinedmods.refinedstorage.blockentity.config.IType;
import com.refinedmods.refinedstorage.blockentity.config.RedstoneMode; import com.refinedmods.refinedstorage.blockentity.config.RedstoneMode;
import com.refinedmods.refinedstorage.util.NetworkUtils; import com.refinedmods.refinedstorage.util.NetworkUtils;
import com.refinedmods.refinedstorage.util.StackUtils; import com.refinedmods.refinedstorage.util.StackUtils;
import com.refinedmods.refinedstorage.util.WorldUtils; import com.refinedmods.refinedstorage.util.LevelUtils;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction; import net.minecraft.core.Direction;
import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.CompoundTag;
@@ -46,14 +46,14 @@ public class StorageMonitorNetworkNode extends NetworkNode implements IComparabl
.addListener(new NetworkNodeInventoryListener(this)) .addListener(new NetworkNodeInventoryListener(this))
.addListener((handler, slot, reading) -> { .addListener((handler, slot, reading) -> {
if (!reading) { if (!reading) {
WorldUtils.updateBlock(level, pos); LevelUtils.updateBlock(level, pos);
} }
}); });
private final FluidInventory fluidFilter = new FluidInventory(1, FluidAttributes.BUCKET_VOLUME) private final FluidInventory fluidFilter = new FluidInventory(1, FluidAttributes.BUCKET_VOLUME)
.addListener((handler, slot, reading) -> { .addListener((handler, slot, reading) -> {
if (!reading) { if (!reading) {
WorldUtils.updateBlock(level, pos); LevelUtils.updateBlock(level, pos);
} }
}); });
private final Map<String, Pair<ItemStack, Long>> deposits = new HashMap<>(); private final Map<String, Pair<ItemStack, Long>> deposits = new HashMap<>();
@@ -82,7 +82,7 @@ public class StorageMonitorNetworkNode extends NetworkNode implements IComparabl
} else if (oldAmount != newAmount) { } else if (oldAmount != newAmount) {
oldAmount = newAmount; oldAmount = newAmount;
WorldUtils.updateBlock(level, pos); LevelUtils.updateBlock(level, pos);
} }
} }
@@ -249,7 +249,7 @@ public class StorageMonitorNetworkNode extends NetworkNode implements IComparabl
public void setCompare(int compare) { public void setCompare(int compare) {
this.compare = compare; this.compare = compare;
WorldUtils.updateBlock(level, pos); LevelUtils.updateBlock(level, pos);
markDirty(); markDirty();
} }
@@ -325,7 +325,7 @@ public class StorageMonitorNetworkNode extends NetworkNode implements IComparabl
public void setType(int type) { public void setType(int type) {
this.type = type; this.type = type;
WorldUtils.updateBlock(level, pos); LevelUtils.updateBlock(level, pos);
markDirty(); markDirty();
} }

View File

@@ -23,7 +23,7 @@ import com.refinedmods.refinedstorage.inventory.listener.NetworkNodeFluidInvento
import com.refinedmods.refinedstorage.inventory.listener.NetworkNodeInventoryListener; import com.refinedmods.refinedstorage.inventory.listener.NetworkNodeInventoryListener;
import com.refinedmods.refinedstorage.util.AccessTypeUtils; import com.refinedmods.refinedstorage.util.AccessTypeUtils;
import com.refinedmods.refinedstorage.util.StackUtils; import com.refinedmods.refinedstorage.util.StackUtils;
import com.refinedmods.refinedstorage.util.WorldUtils; import com.refinedmods.refinedstorage.util.LevelUtils;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.CompoundTag;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
@@ -75,7 +75,7 @@ public class DiskDriveNetworkNode extends NetworkNode implements IStorageProvide
} }
if (!reading) { if (!reading) {
WorldUtils.updateBlock(level, pos); LevelUtils.updateBlock(level, pos);
} }
} }
}); });
@@ -125,7 +125,7 @@ public class DiskDriveNetworkNode extends NetworkNode implements IStorageProvide
++ticksSinceBlockUpdateRequested; ++ticksSinceBlockUpdateRequested;
if (ticksSinceBlockUpdateRequested > DISK_STATE_UPDATE_THROTTLE) { if (ticksSinceBlockUpdateRequested > DISK_STATE_UPDATE_THROTTLE) {
WorldUtils.updateBlock(level, pos); LevelUtils.updateBlock(level, pos);
this.blockUpdateRequested = false; this.blockUpdateRequested = false;
this.ticksSinceBlockUpdateRequested = 0; this.ticksSinceBlockUpdateRequested = 0;
@@ -148,7 +148,7 @@ public class DiskDriveNetworkNode extends NetworkNode implements IStorageProvide
network.getNodeGraph().runActionWhenPossible(ItemStorageCache.INVALIDATE_ACTION.apply(InvalidateCause.CONNECTED_STATE_CHANGED)); network.getNodeGraph().runActionWhenPossible(ItemStorageCache.INVALIDATE_ACTION.apply(InvalidateCause.CONNECTED_STATE_CHANGED));
network.getNodeGraph().runActionWhenPossible(FluidStorageCache.INVALIDATE_ACTION.apply(InvalidateCause.CONNECTED_STATE_CHANGED)); network.getNodeGraph().runActionWhenPossible(FluidStorageCache.INVALIDATE_ACTION.apply(InvalidateCause.CONNECTED_STATE_CHANGED));
WorldUtils.updateBlock(level, pos); LevelUtils.updateBlock(level, pos);
} }
@Override @Override

View File

@@ -22,7 +22,7 @@ import com.refinedmods.refinedstorage.inventory.listener.NetworkNodeFluidInvento
import com.refinedmods.refinedstorage.inventory.listener.NetworkNodeInventoryListener; import com.refinedmods.refinedstorage.inventory.listener.NetworkNodeInventoryListener;
import com.refinedmods.refinedstorage.item.UpgradeItem; import com.refinedmods.refinedstorage.item.UpgradeItem;
import com.refinedmods.refinedstorage.util.StackUtils; import com.refinedmods.refinedstorage.util.StackUtils;
import com.refinedmods.refinedstorage.util.WorldUtils; import com.refinedmods.refinedstorage.util.LevelUtils;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.CompoundTag;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
@@ -68,7 +68,7 @@ public class DiskManipulatorNetworkNode extends NetworkNode implements IComparab
); );
if (!reading) { if (!reading) {
WorldUtils.updateBlock(level, pos); LevelUtils.updateBlock(level, pos);
} }
} }
}); });
@@ -88,7 +88,7 @@ public class DiskManipulatorNetworkNode extends NetworkNode implements IComparab
); );
if (!reading) { if (!reading) {
WorldUtils.updateBlock(level, pos); LevelUtils.updateBlock(level, pos);
} }
} }
})); }));

View File

@@ -8,7 +8,7 @@ import com.refinedmods.refinedstorage.api.util.Action;
import com.refinedmods.refinedstorage.apiimpl.network.node.DiskState; import com.refinedmods.refinedstorage.apiimpl.network.node.DiskState;
import com.refinedmods.refinedstorage.blockentity.config.IWhitelistBlacklist; import com.refinedmods.refinedstorage.blockentity.config.IWhitelistBlacklist;
import com.refinedmods.refinedstorage.util.StackUtils; import com.refinedmods.refinedstorage.util.StackUtils;
import com.refinedmods.refinedstorage.util.WorldUtils; import com.refinedmods.refinedstorage.util.LevelUtils;
import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.CompoundTag;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.FluidStack;
@@ -33,7 +33,7 @@ public class StorageDiskFluidManipulatorWrapper implements IStorageDisk<FluidSta
if (lastState != currentState) { if (lastState != currentState) {
lastState = currentState; lastState = currentState;
WorldUtils.updateBlock(diskManipulator.getLevel(), diskManipulator.getPos()); LevelUtils.updateBlock(diskManipulator.getLevel(), diskManipulator.getPos());
} }
}, },
diskManipulator diskManipulator

View File

@@ -7,7 +7,7 @@ import com.refinedmods.refinedstorage.api.storage.disk.IStorageDiskListener;
import com.refinedmods.refinedstorage.api.util.Action; import com.refinedmods.refinedstorage.api.util.Action;
import com.refinedmods.refinedstorage.apiimpl.network.node.DiskState; import com.refinedmods.refinedstorage.apiimpl.network.node.DiskState;
import com.refinedmods.refinedstorage.blockentity.config.IWhitelistBlacklist; import com.refinedmods.refinedstorage.blockentity.config.IWhitelistBlacklist;
import com.refinedmods.refinedstorage.util.WorldUtils; import com.refinedmods.refinedstorage.util.LevelUtils;
import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.CompoundTag;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.ItemStack;
@@ -33,7 +33,7 @@ public class StorageDiskItemManipulatorWrapper implements IStorageDisk<ItemStack
if (lastState != currentState) { if (lastState != currentState) {
lastState = currentState; lastState = currentState;
WorldUtils.updateBlock(diskManipulator.getLevel(), diskManipulator.getPos()); LevelUtils.updateBlock(diskManipulator.getLevel(), diskManipulator.getPos());
} }
}, },
diskManipulator diskManipulator

View File

@@ -5,7 +5,7 @@ import com.refinedmods.refinedstorage.api.storage.disk.IStorageDiskFactory;
import com.refinedmods.refinedstorage.api.storage.disk.IStorageDiskManager; import com.refinedmods.refinedstorage.api.storage.disk.IStorageDiskManager;
import com.refinedmods.refinedstorage.api.storage.disk.IStorageDiskProvider; import com.refinedmods.refinedstorage.api.storage.disk.IStorageDiskProvider;
import com.refinedmods.refinedstorage.apiimpl.API; import com.refinedmods.refinedstorage.apiimpl.API;
import com.refinedmods.refinedstorage.apiimpl.util.RSWorldSavedData; import com.refinedmods.refinedstorage.apiimpl.util.RSSavedData;
import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.CompoundTag;
import net.minecraft.nbt.ListTag; import net.minecraft.nbt.ListTag;
import net.minecraft.nbt.Tag; import net.minecraft.nbt.Tag;
@@ -18,7 +18,7 @@ import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.UUID; import java.util.UUID;
public class StorageDiskManager extends RSWorldSavedData implements IStorageDiskManager { public class StorageDiskManager extends RSSavedData implements IStorageDiskManager {
public static final String NAME = "refinedstorage_disks"; public static final String NAME = "refinedstorage_disks";
private static final String NBT_DISKS = "Disks"; private static final String NBT_DISKS = "Disks";

View File

@@ -4,7 +4,7 @@ import com.refinedmods.refinedstorage.api.storage.externalstorage.IExternalStora
import com.refinedmods.refinedstorage.api.storage.externalstorage.IExternalStorageContext; import com.refinedmods.refinedstorage.api.storage.externalstorage.IExternalStorageContext;
import com.refinedmods.refinedstorage.api.storage.externalstorage.IExternalStorageProvider; import com.refinedmods.refinedstorage.api.storage.externalstorage.IExternalStorageProvider;
import com.refinedmods.refinedstorage.blockentity.FluidInterfaceBlockEntity; import com.refinedmods.refinedstorage.blockentity.FluidInterfaceBlockEntity;
import com.refinedmods.refinedstorage.util.WorldUtils; import com.refinedmods.refinedstorage.util.LevelUtils;
import net.minecraft.core.Direction; import net.minecraft.core.Direction;
import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.FluidStack;
@@ -14,7 +14,7 @@ import javax.annotation.Nonnull;
public class FluidExternalStorageProvider implements IExternalStorageProvider<FluidStack> { public class FluidExternalStorageProvider implements IExternalStorageProvider<FluidStack> {
@Override @Override
public boolean canProvide(BlockEntity blockEntity, Direction direction) { public boolean canProvide(BlockEntity blockEntity, Direction direction) {
return WorldUtils.getFluidHandler(blockEntity, direction.getOpposite()) != null; return LevelUtils.getFluidHandler(blockEntity, direction.getOpposite()) != null;
} }
@Nonnull @Nonnull
@@ -25,7 +25,7 @@ public class FluidExternalStorageProvider implements IExternalStorageProvider<Fl
return null; return null;
} }
return WorldUtils.getFluidHandler(blockEntity, direction.getOpposite()); return LevelUtils.getFluidHandler(blockEntity, direction.getOpposite());
}, blockEntity instanceof FluidInterfaceBlockEntity); }, blockEntity instanceof FluidInterfaceBlockEntity);
} }

View File

@@ -7,7 +7,7 @@ import com.refinedmods.refinedstorage.api.storage.externalstorage.IExternalStora
import com.refinedmods.refinedstorage.api.storage.externalstorage.IExternalStorageProvider; import com.refinedmods.refinedstorage.api.storage.externalstorage.IExternalStorageProvider;
import com.refinedmods.refinedstorage.blockentity.InterfaceBlockEntity; import com.refinedmods.refinedstorage.blockentity.InterfaceBlockEntity;
import com.refinedmods.refinedstorage.util.NetworkUtils; import com.refinedmods.refinedstorage.util.NetworkUtils;
import com.refinedmods.refinedstorage.util.WorldUtils; import com.refinedmods.refinedstorage.util.LevelUtils;
import net.minecraft.core.Direction; import net.minecraft.core.Direction;
import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntity;
@@ -23,7 +23,7 @@ public class ItemExternalStorageProvider implements IExternalStorageProvider<Ite
return false; return false;
} }
return WorldUtils.getItemHandler(blockEntity, direction.getOpposite()) != null; return LevelUtils.getItemHandler(blockEntity, direction.getOpposite()) != null;
} }
@Nonnull @Nonnull
@@ -34,7 +34,7 @@ public class ItemExternalStorageProvider implements IExternalStorageProvider<Ite
return null; return null;
} }
return WorldUtils.getItemHandler(blockEntity, direction.getOpposite()); return LevelUtils.getItemHandler(blockEntity, direction.getOpposite());
}, blockEntity instanceof InterfaceBlockEntity); }, blockEntity instanceof InterfaceBlockEntity);
} }

View File

@@ -3,7 +3,7 @@ package com.refinedmods.refinedstorage.apiimpl.storage.tracker;
import com.refinedmods.refinedstorage.api.storage.StorageType; import com.refinedmods.refinedstorage.api.storage.StorageType;
import com.refinedmods.refinedstorage.api.storage.tracker.IStorageTracker; import com.refinedmods.refinedstorage.api.storage.tracker.IStorageTracker;
import com.refinedmods.refinedstorage.api.storage.tracker.IStorageTrackerManager; import com.refinedmods.refinedstorage.api.storage.tracker.IStorageTrackerManager;
import com.refinedmods.refinedstorage.apiimpl.util.RSWorldSavedData; import com.refinedmods.refinedstorage.apiimpl.util.RSSavedData;
import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.CompoundTag;
import net.minecraft.nbt.ListTag; import net.minecraft.nbt.ListTag;
import net.minecraft.nbt.Tag; import net.minecraft.nbt.Tag;
@@ -12,7 +12,7 @@ import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.UUID; import java.util.UUID;
public class StorageTrackerManager extends RSWorldSavedData implements IStorageTrackerManager { public class StorageTrackerManager extends RSSavedData implements IStorageTrackerManager {
public static final String NAME = "refinedstorage_tracker"; public static final String NAME = "refinedstorage_tracker";
private static final String NBT_TRACKERS = "Tracker"; private static final String NBT_TRACKERS = "Tracker";

View File

@@ -11,8 +11,8 @@ import java.io.File;
import java.io.IOException; import java.io.IOException;
public abstract class RSWorldSavedData extends SavedData { public abstract class RSSavedData extends SavedData {
private final Logger LOGGER = LogManager.getLogger(RSWorldSavedData.class); private final Logger LOGGER = LogManager.getLogger(RSSavedData.class);
public abstract void load(CompoundTag nbt); public abstract void load(CompoundTag nbt);

View File

@@ -6,7 +6,7 @@ import com.refinedmods.refinedstorage.container.factory.BlockEntityMenuProvider;
import com.refinedmods.refinedstorage.blockentity.StorageMonitorBlockEntity; import com.refinedmods.refinedstorage.blockentity.StorageMonitorBlockEntity;
import com.refinedmods.refinedstorage.util.BlockUtils; import com.refinedmods.refinedstorage.util.BlockUtils;
import com.refinedmods.refinedstorage.util.NetworkUtils; import com.refinedmods.refinedstorage.util.NetworkUtils;
import com.refinedmods.refinedstorage.util.WorldUtils; import com.refinedmods.refinedstorage.util.LevelUtils;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.network.chat.TranslatableComponent; import net.minecraft.network.chat.TranslatableComponent;
import net.minecraft.server.level.ServerPlayer; import net.minecraft.server.level.ServerPlayer;
@@ -72,7 +72,7 @@ public class StorageMonitorBlock extends NetworkNodeBlock {
super.attack(state, level, pos, player); super.attack(state, level, pos, player);
if (!level.isClientSide) { if (!level.isClientSide) {
HitResult result = WorldUtils.rayTracePlayer(level, player); HitResult result = LevelUtils.rayTracePlayer(level, player);
if (!(result instanceof BlockHitResult)) { if (!(result instanceof BlockHitResult)) {
return; return;

View File

@@ -53,6 +53,7 @@ public abstract class BaseBlockEntity extends BlockEntity {
@Override @Override
public void setRemoved() { public void setRemoved() {
super.setRemoved(); super.setRemoved();
// TODO: remove when https://github.com/MinecraftForge/MinecraftForge/pull/8303/files is merged
// @Volatile: MC calls setRemoved when a chunk unloads now as well (see ServerLevel#unload -> LevelChunk#clearAllBlockEntities). // @Volatile: MC calls setRemoved when a chunk unloads now as well (see ServerLevel#unload -> LevelChunk#clearAllBlockEntities).
// Since we don't want to remove network node data in that case, we need to know if it was removed due to unloading. // Since we don't want to remove network node data in that case, we need to know if it was removed due to unloading.
// We can use "unloaded" for that, it's set in #onChunkUnloaded. // We can use "unloaded" for that, it's set in #onChunkUnloaded.

View File

@@ -4,7 +4,7 @@ import com.refinedmods.refinedstorage.RSBlockEntities;
import com.refinedmods.refinedstorage.apiimpl.network.node.CableNetworkNode; import com.refinedmods.refinedstorage.apiimpl.network.node.CableNetworkNode;
import com.refinedmods.refinedstorage.apiimpl.network.node.cover.CoverManager; import com.refinedmods.refinedstorage.apiimpl.network.node.cover.CoverManager;
import com.refinedmods.refinedstorage.blockentity.data.BlockEntitySynchronizationParameter; import com.refinedmods.refinedstorage.blockentity.data.BlockEntitySynchronizationParameter;
import com.refinedmods.refinedstorage.util.WorldUtils; import com.refinedmods.refinedstorage.util.LevelUtils;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.CompoundTag;
import net.minecraft.network.syncher.EntityDataSerializers; import net.minecraft.network.syncher.EntityDataSerializers;
@@ -53,6 +53,6 @@ public class CableBlockEntity extends NetworkNodeBlockEntity<CableNetworkNode> {
requestModelDataUpdate(); requestModelDataUpdate();
WorldUtils.updateBlock(level, worldPosition); LevelUtils.updateBlock(level, worldPosition);
} }
} }

View File

@@ -6,7 +6,7 @@ import com.refinedmods.refinedstorage.apiimpl.network.node.cover.CoverManager;
import com.refinedmods.refinedstorage.blockentity.config.IComparable; import com.refinedmods.refinedstorage.blockentity.config.IComparable;
import com.refinedmods.refinedstorage.blockentity.config.IType; import com.refinedmods.refinedstorage.blockentity.config.IType;
import com.refinedmods.refinedstorage.blockentity.data.BlockEntitySynchronizationParameter; import com.refinedmods.refinedstorage.blockentity.data.BlockEntitySynchronizationParameter;
import com.refinedmods.refinedstorage.util.WorldUtils; import com.refinedmods.refinedstorage.util.LevelUtils;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.CompoundTag;
import net.minecraft.network.syncher.EntityDataSerializers; import net.minecraft.network.syncher.EntityDataSerializers;
@@ -69,6 +69,6 @@ public class ConstructorBlockEntity extends NetworkNodeBlockEntity<ConstructorNe
requestModelDataUpdate(); requestModelDataUpdate();
WorldUtils.updateBlock(level, worldPosition); LevelUtils.updateBlock(level, worldPosition);
} }
} }

View File

@@ -7,7 +7,7 @@ import com.refinedmods.refinedstorage.blockentity.config.IComparable;
import com.refinedmods.refinedstorage.blockentity.config.IType; import com.refinedmods.refinedstorage.blockentity.config.IType;
import com.refinedmods.refinedstorage.blockentity.config.IWhitelistBlacklist; import com.refinedmods.refinedstorage.blockentity.config.IWhitelistBlacklist;
import com.refinedmods.refinedstorage.blockentity.data.BlockEntitySynchronizationParameter; import com.refinedmods.refinedstorage.blockentity.data.BlockEntitySynchronizationParameter;
import com.refinedmods.refinedstorage.util.WorldUtils; import com.refinedmods.refinedstorage.util.LevelUtils;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.CompoundTag;
import net.minecraft.network.syncher.EntityDataSerializers; import net.minecraft.network.syncher.EntityDataSerializers;
@@ -72,6 +72,6 @@ public class DestructorBlockEntity extends NetworkNodeBlockEntity<DestructorNetw
requestModelDataUpdate(); requestModelDataUpdate();
WorldUtils.updateBlock(level, worldPosition); LevelUtils.updateBlock(level, worldPosition);
} }
} }

View File

@@ -8,7 +8,7 @@ import com.refinedmods.refinedstorage.apiimpl.network.node.diskdrive.DiskDriveNe
import com.refinedmods.refinedstorage.blockentity.config.*; import com.refinedmods.refinedstorage.blockentity.config.*;
import com.refinedmods.refinedstorage.blockentity.data.RSSerializers; import com.refinedmods.refinedstorage.blockentity.data.RSSerializers;
import com.refinedmods.refinedstorage.blockentity.data.BlockEntitySynchronizationParameter; import com.refinedmods.refinedstorage.blockentity.data.BlockEntitySynchronizationParameter;
import com.refinedmods.refinedstorage.util.WorldUtils; import com.refinedmods.refinedstorage.util.LevelUtils;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction; import net.minecraft.core.Direction;
import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.CompoundTag;
@@ -127,7 +127,7 @@ public class DiskDriveBlockEntity extends NetworkNodeBlockEntity<DiskDriveNetwor
requestModelDataUpdate(); requestModelDataUpdate();
WorldUtils.updateBlock(level, worldPosition); LevelUtils.updateBlock(level, worldPosition);
} }
@Nonnull @Nonnull

View File

@@ -7,7 +7,7 @@ import com.refinedmods.refinedstorage.blockentity.config.IComparable;
import com.refinedmods.refinedstorage.blockentity.config.IType; import com.refinedmods.refinedstorage.blockentity.config.IType;
import com.refinedmods.refinedstorage.blockentity.config.IWhitelistBlacklist; import com.refinedmods.refinedstorage.blockentity.config.IWhitelistBlacklist;
import com.refinedmods.refinedstorage.blockentity.data.BlockEntitySynchronizationParameter; import com.refinedmods.refinedstorage.blockentity.data.BlockEntitySynchronizationParameter;
import com.refinedmods.refinedstorage.util.WorldUtils; import com.refinedmods.refinedstorage.util.LevelUtils;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction; import net.minecraft.core.Direction;
import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.CompoundTag;
@@ -84,7 +84,7 @@ public class DiskManipulatorBlockEntity extends NetworkNodeBlockEntity<DiskManip
requestModelDataUpdate(); requestModelDataUpdate();
WorldUtils.updateBlock(level, worldPosition); LevelUtils.updateBlock(level, worldPosition);
} }
@Nonnull @Nonnull

View File

@@ -6,7 +6,7 @@ import com.refinedmods.refinedstorage.apiimpl.network.node.cover.CoverManager;
import com.refinedmods.refinedstorage.blockentity.config.IComparable; import com.refinedmods.refinedstorage.blockentity.config.IComparable;
import com.refinedmods.refinedstorage.blockentity.config.IType; import com.refinedmods.refinedstorage.blockentity.config.IType;
import com.refinedmods.refinedstorage.blockentity.data.BlockEntitySynchronizationParameter; import com.refinedmods.refinedstorage.blockentity.data.BlockEntitySynchronizationParameter;
import com.refinedmods.refinedstorage.util.WorldUtils; import com.refinedmods.refinedstorage.util.LevelUtils;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.CompoundTag;
import net.minecraft.network.syncher.EntityDataSerializers; import net.minecraft.network.syncher.EntityDataSerializers;
@@ -65,6 +65,6 @@ public class ExporterBlockEntity extends NetworkNodeBlockEntity<ExporterNetworkN
requestModelDataUpdate(); requestModelDataUpdate();
WorldUtils.updateBlock(level, worldPosition); LevelUtils.updateBlock(level, worldPosition);
} }
} }

View File

@@ -8,7 +8,7 @@ import com.refinedmods.refinedstorage.apiimpl.network.node.cover.CoverManager;
import com.refinedmods.refinedstorage.blockentity.config.*; import com.refinedmods.refinedstorage.blockentity.config.*;
import com.refinedmods.refinedstorage.blockentity.data.RSSerializers; import com.refinedmods.refinedstorage.blockentity.data.RSSerializers;
import com.refinedmods.refinedstorage.blockentity.data.BlockEntitySynchronizationParameter; import com.refinedmods.refinedstorage.blockentity.data.BlockEntitySynchronizationParameter;
import com.refinedmods.refinedstorage.util.WorldUtils; import com.refinedmods.refinedstorage.util.LevelUtils;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.CompoundTag;
import net.minecraft.network.syncher.EntityDataSerializers; import net.minecraft.network.syncher.EntityDataSerializers;
@@ -99,6 +99,6 @@ public class ExternalStorageBlockEntity extends NetworkNodeBlockEntity<ExternalS
requestModelDataUpdate(); requestModelDataUpdate();
WorldUtils.updateBlock(level, worldPosition); LevelUtils.updateBlock(level, worldPosition);
} }
} }

View File

@@ -7,7 +7,7 @@ import com.refinedmods.refinedstorage.blockentity.config.IComparable;
import com.refinedmods.refinedstorage.blockentity.config.IType; import com.refinedmods.refinedstorage.blockentity.config.IType;
import com.refinedmods.refinedstorage.blockentity.config.IWhitelistBlacklist; import com.refinedmods.refinedstorage.blockentity.config.IWhitelistBlacklist;
import com.refinedmods.refinedstorage.blockentity.data.BlockEntitySynchronizationParameter; import com.refinedmods.refinedstorage.blockentity.data.BlockEntitySynchronizationParameter;
import com.refinedmods.refinedstorage.util.WorldUtils; import com.refinedmods.refinedstorage.util.LevelUtils;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.CompoundTag;
import net.minecraft.network.syncher.EntityDataSerializers; import net.minecraft.network.syncher.EntityDataSerializers;
@@ -63,6 +63,6 @@ public class ImporterBlockEntity extends NetworkNodeBlockEntity<ImporterNetworkN
requestModelDataUpdate(); requestModelDataUpdate();
WorldUtils.updateBlock(level, worldPosition); LevelUtils.updateBlock(level, worldPosition);
} }
} }

View File

@@ -48,7 +48,7 @@ import com.refinedmods.refinedstorage.item.blockitem.PortableGridBlockItem;
import com.refinedmods.refinedstorage.screen.BaseScreen; import com.refinedmods.refinedstorage.screen.BaseScreen;
import com.refinedmods.refinedstorage.screen.grid.GridScreen; import com.refinedmods.refinedstorage.screen.grid.GridScreen;
import com.refinedmods.refinedstorage.util.StackUtils; import com.refinedmods.refinedstorage.util.StackUtils;
import com.refinedmods.refinedstorage.util.WorldUtils; import com.refinedmods.refinedstorage.util.LevelUtils;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction; import net.minecraft.core.Direction;
import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.CompoundTag;
@@ -189,7 +189,7 @@ public class PortableGridBlockEntity extends BaseBlockEntity implements IGrid, I
if (!reading) { if (!reading) {
updateState(); updateState();
WorldUtils.updateBlock(level, worldPosition); // Re-send grid type LevelUtils.updateBlock(level, worldPosition); // Re-send grid type
} }
} }
}); });

View File

@@ -5,7 +5,7 @@ import net.minecraft.world.item.Item;
public class CoreItem extends Item { public class CoreItem extends Item {
public CoreItem() { public CoreItem() {
super(new Item.Properties().tab(RS.MAIN_GROUP)); super(new Item.Properties().tab(RS.CREATIVE_MODE_TAB));
} }
public enum Type { public enum Type {

View File

@@ -10,7 +10,7 @@ import com.refinedmods.refinedstorage.apiimpl.network.node.cover.CoverManager;
import com.refinedmods.refinedstorage.apiimpl.network.node.cover.CoverType; import com.refinedmods.refinedstorage.apiimpl.network.node.cover.CoverType;
import com.refinedmods.refinedstorage.block.CableBlock; import com.refinedmods.refinedstorage.block.CableBlock;
import com.refinedmods.refinedstorage.blockentity.NetworkNodeBlockEntity; import com.refinedmods.refinedstorage.blockentity.NetworkNodeBlockEntity;
import com.refinedmods.refinedstorage.util.WorldUtils; import com.refinedmods.refinedstorage.util.LevelUtils;
import net.minecraft.ChatFormatting; import net.minecraft.ChatFormatting;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction; import net.minecraft.core.Direction;
@@ -40,7 +40,7 @@ public class CoverItem extends Item {
public CoverItem() { public CoverItem() {
super(new Item.Properties().tab(RS.MAIN_GROUP)); super(new Item.Properties().tab(RS.CREATIVE_MODE_TAB));
} }
public static void setItem(ItemStack cover, ItemStack item) { public static void setItem(ItemStack cover, ItemStack item) {
@@ -135,7 +135,7 @@ public class CoverItem extends Item {
INetworkNode node = ((NetworkNodeBlockEntity<?>) blockEntity).getNode(); INetworkNode node = ((NetworkNodeBlockEntity<?>) blockEntity).getNode();
if (node.getNetwork() != null && !node.getNetwork().getSecurityManager().hasPermission(Permission.BUILD, context.getPlayer())) { if (node.getNetwork() != null && !node.getNetwork().getSecurityManager().hasPermission(Permission.BUILD, context.getPlayer())) {
WorldUtils.sendNoPermissionMessage(context.getPlayer()); LevelUtils.sendNoPermissionMessage(context.getPlayer());
return InteractionResult.FAIL; return InteractionResult.FAIL;
} }
@@ -143,7 +143,7 @@ public class CoverItem extends Item {
if (((ICoverable) node).getCoverManager().setCover(facing, createCover(getItem(stack)))) { if (((ICoverable) node).getCoverManager().setCover(facing, createCover(getItem(stack)))) {
context.getPlayer().getItemInHand(context.getHand()).shrink(1); context.getPlayer().getItemInHand(context.getHand()).shrink(1);
WorldUtils.updateBlock(level, pos); LevelUtils.updateBlock(level, pos);
API.instance().getNetworkNodeManager((ServerLevel) level).markForSaving(); API.instance().getNetworkNodeManager((ServerLevel) level).markForSaving();
return InteractionResult.SUCCESS; return InteractionResult.SUCCESS;
} }

View File

@@ -41,7 +41,7 @@ public class FilterItem extends Item {
private static final String NBT_TYPE = "Type"; private static final String NBT_TYPE = "Type";
public FilterItem() { public FilterItem() {
super(new Item.Properties().tab(RS.MAIN_GROUP).stacksTo(1)); super(new Item.Properties().tab(RS.CREATIVE_MODE_TAB).stacksTo(1));
} }
public static int getCompare(ItemStack stack) { public static int getCompare(ItemStack stack) {

View File

@@ -35,7 +35,7 @@ public class FluidStorageDiskItem extends Item implements IStorageDiskProvider {
private final FluidStorageType type; private final FluidStorageType type;
public FluidStorageDiskItem(FluidStorageType type) { public FluidStorageDiskItem(FluidStorageType type) {
super(new Item.Properties().tab(RS.MAIN_GROUP).stacksTo(1)); super(new Item.Properties().tab(RS.CREATIVE_MODE_TAB).stacksTo(1));
this.type = type; this.type = type;
} }

View File

@@ -7,7 +7,7 @@ import net.minecraft.world.item.Item;
public class FluidStoragePartItem extends Item { public class FluidStoragePartItem extends Item {
public FluidStoragePartItem() { public FluidStoragePartItem() {
super(new Item.Properties().tab(RS.MAIN_GROUP)); super(new Item.Properties().tab(RS.CREATIVE_MODE_TAB));
} }
public static FluidStoragePartItem getByType(FluidStorageType type) { public static FluidStoragePartItem getByType(FluidStorageType type) {

View File

@@ -28,7 +28,7 @@ public class NetworkCardItem extends Item {
private static final String NBT_DIMENSION = "Dimension"; private static final String NBT_DIMENSION = "Dimension";
public NetworkCardItem() { public NetworkCardItem() {
super(new Item.Properties().tab(RS.MAIN_GROUP).stacksTo(1)); super(new Item.Properties().tab(RS.CREATIVE_MODE_TAB).stacksTo(1));
} }
@Nullable @Nullable

View File

@@ -98,13 +98,13 @@ public abstract class NetworkItem extends EnergyItem implements INetworkItemProv
return; return;
} }
Level nodeWorld = server.getLevel(dimension); Level nodeLevel = server.getLevel(dimension);
if (nodeWorld == null) { if (nodeLevel == null) {
onError.accept(notFound); onError.accept(notFound);
return; return;
} }
INetwork network = NetworkUtils.getNetworkFromNode(NetworkUtils.getNodeFromBlockEntity(nodeWorld.getBlockEntity(new BlockPos(getX(stack), getY(stack), getZ(stack))))); INetwork network = NetworkUtils.getNetworkFromNode(NetworkUtils.getNodeFromBlockEntity(nodeLevel.getBlockEntity(new BlockPos(getX(stack), getY(stack), getZ(stack)))));
if (network == null) { if (network == null) {
onError.accept(notFound); onError.accept(notFound);
return; return;

View File

@@ -54,7 +54,7 @@ public class PatternItem extends Item implements ICraftingPatternProvider, IItem
private static final int VERSION = 1; private static final int VERSION = 1;
public PatternItem() { public PatternItem() {
super(new Item.Properties().tab(RS.MAIN_GROUP)); super(new Item.Properties().tab(RS.CREATIVE_MODE_TAB));
} }
public static ICraftingPattern fromCache(Level level, ItemStack stack) { public static ICraftingPattern fromCache(Level level, ItemStack stack) {

View File

@@ -5,6 +5,6 @@ import net.minecraft.world.item.Item;
public class ProcessorBindingItem extends Item { public class ProcessorBindingItem extends Item {
public ProcessorBindingItem() { public ProcessorBindingItem() {
super(new Item.Properties().tab(RS.MAIN_GROUP)); super(new Item.Properties().tab(RS.CREATIVE_MODE_TAB));
} }
} }

View File

@@ -5,7 +5,7 @@ import net.minecraft.world.item.Item;
public class ProcessorItem extends Item { public class ProcessorItem extends Item {
public ProcessorItem() { public ProcessorItem() {
super(new Item.Properties().tab(RS.MAIN_GROUP)); super(new Item.Properties().tab(RS.CREATIVE_MODE_TAB));
} }
public enum Type { public enum Type {

View File

@@ -5,6 +5,6 @@ import net.minecraft.world.item.Item;
public class QuartzEnrichedIronItem extends Item { public class QuartzEnrichedIronItem extends Item {
public QuartzEnrichedIronItem() { public QuartzEnrichedIronItem() {
super(new Item.Properties().tab(RS.MAIN_GROUP)); super(new Item.Properties().tab(RS.CREATIVE_MODE_TAB));
} }
} }

View File

@@ -25,7 +25,7 @@ public class SecurityCardItem extends Item {
private static final String NBT_PERMISSION = "Permission_%d"; private static final String NBT_PERMISSION = "Permission_%d";
public SecurityCardItem() { public SecurityCardItem() {
super(new Item.Properties().tab(RS.MAIN_GROUP).stacksTo(1)); super(new Item.Properties().tab(RS.CREATIVE_MODE_TAB).stacksTo(1));
} }
@Nullable @Nullable

View File

@@ -5,6 +5,6 @@ import net.minecraft.world.item.Item;
public class SiliconItem extends Item { public class SiliconItem extends Item {
public SiliconItem() { public SiliconItem() {
super(new Item.Properties().tab(RS.MAIN_GROUP)); super(new Item.Properties().tab(RS.CREATIVE_MODE_TAB));
} }
} }

View File

@@ -35,7 +35,7 @@ public class StorageDiskItem extends Item implements IStorageDiskProvider {
private final ItemStorageType type; private final ItemStorageType type;
public StorageDiskItem(ItemStorageType type) { public StorageDiskItem(ItemStorageType type) {
super(new Item.Properties().tab(RS.MAIN_GROUP).stacksTo(1)); super(new Item.Properties().tab(RS.CREATIVE_MODE_TAB).stacksTo(1));
this.type = type; this.type = type;
} }

View File

@@ -5,6 +5,6 @@ import net.minecraft.world.item.Item;
public class StorageHousingItem extends Item { public class StorageHousingItem extends Item {
public StorageHousingItem() { public StorageHousingItem() {
super(new Item.Properties().tab(RS.MAIN_GROUP)); super(new Item.Properties().tab(RS.CREATIVE_MODE_TAB));
} }
} }

View File

@@ -7,7 +7,7 @@ import net.minecraft.world.item.Item;
public class StoragePartItem extends Item { public class StoragePartItem extends Item {
public StoragePartItem() { public StoragePartItem() {
super(new Item.Properties().tab(RS.MAIN_GROUP)); super(new Item.Properties().tab(RS.CREATIVE_MODE_TAB));
} }
public static StoragePartItem getByType(ItemStorageType type) { public static StoragePartItem getByType(ItemStorageType type) {

View File

@@ -16,7 +16,7 @@ public class UpgradeItem extends Item {
private final Type type; private final Type type;
public UpgradeItem(Type type) { public UpgradeItem(Type type) {
super(new Item.Properties().tab(RS.MAIN_GROUP)); super(new Item.Properties().tab(RS.CREATIVE_MODE_TAB));
this.type = type; this.type = type;
} }

View File

@@ -20,7 +20,7 @@ public class WirelessCraftingMonitorItem extends NetworkItem {
private final Type type; private final Type type;
public WirelessCraftingMonitorItem(Type type) { public WirelessCraftingMonitorItem(Type type) {
super(new Item.Properties().tab(RS.MAIN_GROUP).stacksTo(1), type == Type.CREATIVE, () -> RS.SERVER_CONFIG.getWirelessCraftingMonitor().getCapacity()); super(new Item.Properties().tab(RS.CREATIVE_MODE_TAB).stacksTo(1), type == Type.CREATIVE, () -> RS.SERVER_CONFIG.getWirelessCraftingMonitor().getCapacity());
this.type = type; this.type = type;
} }

View File

@@ -17,7 +17,7 @@ public class WirelessFluidGridItem extends NetworkItem {
private final Type type; private final Type type;
public WirelessFluidGridItem(Type type) { public WirelessFluidGridItem(Type type) {
super(new Item.Properties().tab(RS.MAIN_GROUP).stacksTo(1), type == Type.CREATIVE, () -> RS.SERVER_CONFIG.getWirelessFluidGrid().getCapacity()); super(new Item.Properties().tab(RS.CREATIVE_MODE_TAB).stacksTo(1), type == Type.CREATIVE, () -> RS.SERVER_CONFIG.getWirelessFluidGrid().getCapacity());
this.type = type; this.type = type;
} }

View File

@@ -17,7 +17,7 @@ public class WirelessGridItem extends NetworkItem {
private final Type type; private final Type type;
public WirelessGridItem(Type type) { public WirelessGridItem(Type type) {
super(new Item.Properties().tab(RS.MAIN_GROUP).stacksTo(1), type == Type.CREATIVE, () -> RS.SERVER_CONFIG.getWirelessGrid().getCapacity()); super(new Item.Properties().tab(RS.CREATIVE_MODE_TAB).stacksTo(1), type == Type.CREATIVE, () -> RS.SERVER_CONFIG.getWirelessGrid().getCapacity());
this.type = type; this.type = type;
} }

View File

@@ -7,7 +7,7 @@ import com.refinedmods.refinedstorage.api.network.node.INetworkNode;
import com.refinedmods.refinedstorage.api.network.security.Permission; import com.refinedmods.refinedstorage.api.network.security.Permission;
import com.refinedmods.refinedstorage.apiimpl.network.node.cover.Cover; import com.refinedmods.refinedstorage.apiimpl.network.node.cover.Cover;
import com.refinedmods.refinedstorage.util.NetworkUtils; import com.refinedmods.refinedstorage.util.NetworkUtils;
import com.refinedmods.refinedstorage.util.WorldUtils; import com.refinedmods.refinedstorage.util.LevelUtils;
import net.minecraft.world.InteractionResult; import net.minecraft.world.InteractionResult;
import net.minecraft.world.item.Item; import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.ItemStack;
@@ -18,7 +18,7 @@ import net.minecraftforge.items.ItemHandlerHelper;
public class WrenchItem extends Item { public class WrenchItem extends Item {
public WrenchItem() { public WrenchItem() {
super(new Item.Properties().tab(RS.MAIN_GROUP).stacksTo(1)); super(new Item.Properties().tab(RS.CREATIVE_MODE_TAB).stacksTo(1));
} }
@Override @Override
@@ -30,7 +30,7 @@ public class WrenchItem extends Item {
INetworkNode node = NetworkUtils.getNodeFromBlockEntity(ctx.getLevel().getBlockEntity(ctx.getClickedPos())); INetworkNode node = NetworkUtils.getNodeFromBlockEntity(ctx.getLevel().getBlockEntity(ctx.getClickedPos()));
INetwork network = NetworkUtils.getNetworkFromNode(node); INetwork network = NetworkUtils.getNetworkFromNode(node);
if (network != null && !network.getSecurityManager().hasPermission(Permission.BUILD, ctx.getPlayer())) { if (network != null && !network.getSecurityManager().hasPermission(Permission.BUILD, ctx.getPlayer())) {
WorldUtils.sendNoPermissionMessage(ctx.getPlayer()); LevelUtils.sendNoPermissionMessage(ctx.getPlayer());
return InteractionResult.FAIL; return InteractionResult.FAIL;
} }

View File

@@ -14,7 +14,7 @@ public class ControllerBlockItem extends EnergyBlockItem {
private final Component displayName; private final Component displayName;
public ControllerBlockItem(ControllerBlock block, DyeColor color, Component displayName) { public ControllerBlockItem(ControllerBlock block, DyeColor color, Component displayName) {
super(block, new Item.Properties().tab(RS.MAIN_GROUP).stacksTo(1), block.getType() == NetworkType.CREATIVE, () -> RS.SERVER_CONFIG.getController().getCapacity()); super(block, new Item.Properties().tab(RS.CREATIVE_MODE_TAB).stacksTo(1), block.getType() == NetworkType.CREATIVE, () -> RS.SERVER_CONFIG.getController().getCapacity());
if (color != ColorMap.DEFAULT_COLOR) { if (color != ColorMap.DEFAULT_COLOR) {
this.displayName = new TranslatableComponent("color.minecraft." + color.getName()) this.displayName = new TranslatableComponent("color.minecraft." + color.getName())

View File

@@ -35,7 +35,7 @@ public class FluidStorageBlockItem extends BaseBlockItem {
private final FluidStorageType type; private final FluidStorageType type;
public FluidStorageBlockItem(FluidStorageBlock block) { public FluidStorageBlockItem(FluidStorageBlock block) {
super(block, new Item.Properties().tab(RS.MAIN_GROUP)); super(block, new Item.Properties().tab(RS.CREATIVE_MODE_TAB));
this.type = block.getType(); this.type = block.getType();
} }

View File

@@ -29,7 +29,7 @@ public class PortableGridBlockItem extends EnergyBlockItem {
public PortableGridBlockItem(Type type) { public PortableGridBlockItem(Type type) {
super( super(
type == Type.CREATIVE ? RSBlocks.CREATIVE_PORTABLE_GRID.get() : RSBlocks.PORTABLE_GRID.get(), type == Type.CREATIVE ? RSBlocks.CREATIVE_PORTABLE_GRID.get() : RSBlocks.PORTABLE_GRID.get(),
new Item.Properties().tab(RS.MAIN_GROUP).stacksTo(1), new Item.Properties().tab(RS.CREATIVE_MODE_TAB).stacksTo(1),
type == Type.CREATIVE, type == Type.CREATIVE,
() -> RS.SERVER_CONFIG.getPortableGrid().getCapacity() () -> RS.SERVER_CONFIG.getPortableGrid().getCapacity()
); );

View File

@@ -32,7 +32,7 @@ public class StorageBlockItem extends BaseBlockItem {
private final ItemStorageType type; private final ItemStorageType type;
public StorageBlockItem(StorageBlock block) { public StorageBlockItem(StorageBlock block) {
super(block, new Item.Properties().tab(RS.MAIN_GROUP)); super(block, new Item.Properties().tab(RS.CREATIVE_MODE_TAB));
this.type = block.getType(); this.type = block.getType();
} }

View File

@@ -6,8 +6,8 @@ import com.refinedmods.refinedstorage.util.ColorMap;
import net.minecraft.world.item.CreativeModeTab; import net.minecraft.world.item.CreativeModeTab;
import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.ItemStack;
public class MainItemGroup extends CreativeModeTab { public class MainCreativeModeTab extends CreativeModeTab {
public MainItemGroup() { public MainCreativeModeTab() {
super(RS.ID); super(RS.ID);
} }

View File

@@ -1,5 +1,6 @@
package com.refinedmods.refinedstorage.screen.grid.stack; package com.refinedmods.refinedstorage.screen.grid.stack;
import com.google.common.collect.Lists;
import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.PoseStack;
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.apiimpl.API;
@@ -135,11 +136,10 @@ public class FluidGridStack implements IGridStack {
if (bypassCache || cachedTooltip == null) { if (bypassCache || cachedTooltip == null) {
List<Component> tooltip; List<Component> tooltip;
try { try {
tooltip = Arrays.asList(stack.getDisplayName()); tooltip = Lists.newArrayList(stack.getDisplayName());
} catch (Throwable t) { } catch (Throwable t) {
logger.warn("Could not retrieve fluid tooltip of {}", stack.getFluid().getRegistryName()); logger.warn("Could not retrieve fluid tooltip of {}", stack.getFluid().getRegistryName());
tooltip = Lists.newArrayList(new TextComponent(ERROR_PLACEHOLDER));
tooltip = Arrays.asList(new TextComponent(ERROR_PLACEHOLDER));
} }
if (bypassCache) { if (bypassCache) {

View File

@@ -79,6 +79,8 @@ public final class ClientSetup {
registerBakedModelOverrides(); registerBakedModelOverrides();
registerPatternRenderHandlers(); registerPatternRenderHandlers();
// MenuScreens isn't thread safe
e.enqueueWork(() -> {
MenuScreens.register(RSContainerMenus.FILTER, FilterScreen::new); MenuScreens.register(RSContainerMenus.FILTER, FilterScreen::new);
MenuScreens.register(RSContainerMenus.CONTROLLER, ControllerScreen::new); MenuScreens.register(RSContainerMenus.CONTROLLER, ControllerScreen::new);
MenuScreens.register(RSContainerMenus.DISK_DRIVE, DiskDriveScreen::new); MenuScreens.register(RSContainerMenus.DISK_DRIVE, DiskDriveScreen::new);
@@ -103,6 +105,7 @@ public final class ClientSetup {
MenuScreens.register(RSContainerMenus.CRAFTER_MANAGER, new CrafterManagerScreenFactory()); MenuScreens.register(RSContainerMenus.CRAFTER_MANAGER, new CrafterManagerScreenFactory());
MenuScreens.register(RSContainerMenus.CRAFTING_MONITOR, CraftingMonitorScreen::new); MenuScreens.register(RSContainerMenus.CRAFTING_MONITOR, CraftingMonitorScreen::new);
MenuScreens.register(RSContainerMenus.WIRELESS_CRAFTING_MONITOR, CraftingMonitorScreen::new); MenuScreens.register(RSContainerMenus.WIRELESS_CRAFTING_MONITOR, CraftingMonitorScreen::new);
});
ClientRegistry.registerKeyBinding(RSKeyBindings.FOCUS_SEARCH_BAR); ClientRegistry.registerKeyBinding(RSKeyBindings.FOCUS_SEARCH_BAR);
ClientRegistry.registerKeyBinding(RSKeyBindings.CLEAR_GRID_CRAFTING_MATRIX); ClientRegistry.registerKeyBinding(RSKeyBindings.CLEAR_GRID_CRAFTING_MATRIX);
@@ -111,6 +114,8 @@ public final class ClientSetup {
ClientRegistry.registerKeyBinding(RSKeyBindings.OPEN_WIRELESS_CRAFTING_MONITOR); ClientRegistry.registerKeyBinding(RSKeyBindings.OPEN_WIRELESS_CRAFTING_MONITOR);
ClientRegistry.registerKeyBinding(RSKeyBindings.OPEN_PORTABLE_GRID); ClientRegistry.registerKeyBinding(RSKeyBindings.OPEN_PORTABLE_GRID);
// RenderLayer isn't thread safe
e.enqueueWork(() -> {
RSBlocks.CONTROLLER.values().forEach(block -> ItemBlockRenderTypes.setRenderLayer(block.get(), RenderType.cutout())); RSBlocks.CONTROLLER.values().forEach(block -> ItemBlockRenderTypes.setRenderLayer(block.get(), RenderType.cutout()));
RSBlocks.CREATIVE_CONTROLLER.values().forEach(block -> ItemBlockRenderTypes.setRenderLayer(block.get(), RenderType.cutout())); RSBlocks.CREATIVE_CONTROLLER.values().forEach(block -> ItemBlockRenderTypes.setRenderLayer(block.get(), RenderType.cutout()));
RSBlocks.CRAFTER.values().forEach(block -> ItemBlockRenderTypes.setRenderLayer(block.get(), RenderType.cutout())); RSBlocks.CRAFTER.values().forEach(block -> ItemBlockRenderTypes.setRenderLayer(block.get(), RenderType.cutout()));
@@ -133,9 +138,12 @@ public final class ClientSetup {
ItemBlockRenderTypes.setRenderLayer(RSBlocks.EXTERNAL_STORAGE.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(RSBlocks.EXTERNAL_STORAGE.get(), RenderType.cutout());
ItemBlockRenderTypes.setRenderLayer(RSBlocks.CONSTRUCTOR.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(RSBlocks.CONSTRUCTOR.get(), RenderType.cutout());
ItemBlockRenderTypes.setRenderLayer(RSBlocks.DESTRUCTOR.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(RSBlocks.DESTRUCTOR.get(), RenderType.cutout());
});
BlockEntityRenderers.register(RSBlockEntities.STORAGE_MONITOR, ctx -> new StorageMonitorBlockEntityRenderer()); BlockEntityRenderers.register(RSBlockEntities.STORAGE_MONITOR, ctx -> new StorageMonitorBlockEntityRenderer());
// ItemProperties isn't thread safe
e.enqueueWork(() -> {
Minecraft.getInstance().getItemColors().register(new PatternItemColor(), RSItems.PATTERN.get()); Minecraft.getInstance().getItemColors().register(new PatternItemColor(), RSItems.PATTERN.get());
ItemProperties.register(RSItems.SECURITY_CARD.get(), new ResourceLocation("active"), new SecurityCardItemPropertyGetter()); ItemProperties.register(RSItems.SECURITY_CARD.get(), new ResourceLocation("active"), new SecurityCardItemPropertyGetter());
@@ -151,6 +159,7 @@ public final class ClientSetup {
ItemProperties.register(RSItems.WIRELESS_FLUID_GRID.get(), CONNECTED, new NetworkItemPropertyGetter()); ItemProperties.register(RSItems.WIRELESS_FLUID_GRID.get(), CONNECTED, new NetworkItemPropertyGetter());
ItemProperties.register(RSItems.CREATIVE_WIRELESS_FLUID_GRID.get(), CONNECTED, new NetworkItemPropertyGetter()); ItemProperties.register(RSItems.CREATIVE_WIRELESS_FLUID_GRID.get(), CONNECTED, new NetworkItemPropertyGetter());
});
} }
private static void registerPatternRenderHandlers() { private static void registerPatternRenderHandlers() {

View File

@@ -95,7 +95,7 @@ public class ColorMap<T extends IForgeRegistryEntry<? super T>> {
block.getId().getPath(), block.getId().getPath(),
() -> new ColoredBlockItem( () -> new ColoredBlockItem(
block.get(), block.get(),
new Item.Properties().tab(RS.MAIN_GROUP), new Item.Properties().tab(RS.CREATIVE_MODE_TAB),
color, color,
BlockUtils.getBlockTranslation(translationBlock.get()) BlockUtils.getBlockTranslation(translationBlock.get())
) )

View File

@@ -30,8 +30,8 @@ import javax.annotation.Nullable;
import java.util.Optional; import java.util.Optional;
import java.util.UUID; import java.util.UUID;
public final class WorldUtils { public final class LevelUtils {
private WorldUtils() { private LevelUtils() {
} }
public static void updateBlock(@Nullable Level level, BlockPos pos) { public static void updateBlock(@Nullable Level level, BlockPos pos) {

View File

@@ -56,7 +56,7 @@ public final class NetworkUtils {
if (network != null) { if (network != null) {
for (Permission permission : permissionsRequired) { for (Permission permission : permissionsRequired) {
if (!network.getSecurityManager().hasPermission(permission, player)) { if (!network.getSecurityManager().hasPermission(permission, player)) {
WorldUtils.sendNoPermissionMessage(player); LevelUtils.sendNoPermissionMessage(player);
return InteractionResult.SUCCESS; return InteractionResult.SUCCESS;
} }

View File

@@ -1,33 +1,54 @@
{ {
"itemGroup.refinedstorage": "Refined Storage", "itemGroup.refinedstorage": "리파인드 스토리지",
"itemGroup.refinedstorage.covers": "리파인드 스토리지 커버즈",
"key.refinedstorage.focusSearchBar": "그리드 검색", "key.refinedstorage.focusSearchBar": "그리드 검색",
"key.refinedstorage.clearGridCraftingMatrix": "그리드 제작 매트릭스 지우기",
"key.refinedstorage.openWirelessGrid": "무선 그리드 열기",
"key.refinedstorage.openWirelessFluidGrid": "무선 액체 그리드 열기",
"key.refinedstorage.openPortableGrid": "휴대용 그리드 열기",
"key.refinedstorage.openWirelessCraftingMonitor": "무선 제작 모니터 열기",
"gui.refinedstorage.controller": "트롤러", "gui.refinedstorage.controller": "트롤러",
"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.pattern_grid": "패턴 그리드",
"gui.refinedstorage.grid.pattern_create": "패턴 제작", "gui.refinedstorage.grid.pattern_create": "패턴 제작",
"gui.refinedstorage.wireless_grid": "무선 그리드",
"gui.refinedstorage.fluid_grid": "액체 그리드", "gui.refinedstorage.fluid_grid": "액체 그리드",
"gui.refinedstorage.portable_grid": "휴대용 그리드", "gui.refinedstorage.portable_grid": "휴대용 그리드",
"gui.refinedstorage.item_amount": "아이템 양",
"gui.refinedstorage.fluid_amount": "액량(mB)",
"gui.refinedstorage.disk_drive": "디스크 드라이브", "gui.refinedstorage.disk_drive": "디스크 드라이브",
"gui.refinedstorage.disk_drive.disks": "디스크", "gui.refinedstorage.disk_drive.disks": "디스크",
"gui.refinedstorage.external_storage": "외부 저장 포트", "gui.refinedstorage.disk_manipulator": "디스크 조작기",
"gui.refinedstorage.importer": "입력 포트", "gui.refinedstorage.disk_manipulator.in": "입력",
"gui.refinedstorage.exporter": "출력 포트", "gui.refinedstorage.disk_manipulator.out": "출력",
"gui.refinedstorage.external_storage": "외부 저장공간",
"gui.refinedstorage.importer": "입력기",
"gui.refinedstorage.exporter": "출력기",
"gui.refinedstorage.detector": "감지기", "gui.refinedstorage.detector": "감지기",
"gui.refinedstorage.destructor": "파괴기", "gui.refinedstorage.destructor": "파괴기",
"gui.refinedstorage.constructor": "설치기", "gui.refinedstorage.constructor": "설치기",
"gui.refinedstorage.relay": "중계기", "gui.refinedstorage.relay": "중계기",
"gui.refinedstorage.interface.import": "인터페이스 입력", "gui.refinedstorage.interface.import": "인터페이스 입력",
"gui.refinedstorage.interface.export": "인터페이스 출력", "gui.refinedstorage.interface.export": "인터페이스 출력",
"gui.refinedstorage.crafting_monitor": "조합 모니터", "gui.refinedstorage.crafting_monitor": "제작 모니터",
"gui.refinedstorage.wireless_crafting_monitor": "무선 조합 모니터", "gui.refinedstorage.wireless_crafting_monitor": "무선 제작 모니터",
"gui.refinedstorage.crafting_monitor.machine_none": "기계를 찾을 수 없음", "gui.refinedstorage.crafting_monitor.tooltip.requested": "%d 요청됨",
"gui.refinedstorage.crafting_monitor.stored": "저장: %d",
"gui.refinedstorage.crafting_monitor.missing": "부족: %d",
"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.wireless_transmitter": "무선 송신기", "gui.refinedstorage.wireless_transmitter": "무선 송신기",
"gui.refinedstorage.wireless_transmitter.distance": "%d블럭", "gui.refinedstorage.wireless_transmitter.distance": "%d블럭",
"gui.refinedstorage.crafter": "조합기", "gui.refinedstorage.crafter": "제작기",
"gui.refinedstorage.filter": "필터", "gui.refinedstorage.filter": "필터",
"gui.refinedstorage.filter.compare_nbt": "NBT", "gui.refinedstorage.filter.compare_nbt": "NBT",
"gui.refinedstorage.filter.mod_filter": "모드 필터", "gui.refinedstorage.filter.mod_filter": "모드 필터",
@@ -41,16 +62,22 @@
"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.circular": "제작할 아이템이 서로를 필요로 합니다!", "gui.refinedstorage.crafting_preview.error": "요청에 실패했습니다.",
"gui.refinedstorage.crafting_preview.loop": "처리 중..", "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.4": "불쾌감을 주는 패턴:",
"gui.refinedstorage.crafting_preview.error.too_complex.0": "제작 작업 계산이 너무 복잡하여 ",
"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": "삽입",
"gui.refinedstorage.security_manager.permission.0.tooltip": "네트워크에 아이템기", "gui.refinedstorage.security_manager.permission.0.tooltip": "네트워크에 아이템이나 액체를 삽입하기",
"gui.refinedstorage.security_manager.permission.1": "꺼내기", "gui.refinedstorage.security_manager.permission.1": "추출",
"gui.refinedstorage.security_manager.permission.1.tooltip": "네트워크에서 아이템 가져오기", "gui.refinedstorage.security_manager.permission.1.tooltip": "네트워크에서 아이템이나 액체를 추출하기",
"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 열기", "gui.refinedstorage.security_manager.permission.3.tooltip": "네트워크 상의 GUI 열기",
"gui.refinedstorage.security_manager.permission.4": "조작", "gui.refinedstorage.security_manager.permission.4": "조작",
@@ -58,40 +85,78 @@
"gui.refinedstorage.security_manager.permission.5": "보안", "gui.refinedstorage.security_manager.permission.5": "보안",
"gui.refinedstorage.security_manager.permission.5.tooltip": "보안 옵션 조정하기", "gui.refinedstorage.security_manager.permission.5.tooltip": "보안 옵션 조정하기",
"gui.refinedstorage.storage_monitor": "저장 모니터", "gui.refinedstorage.storage_monitor": "저장 모니터",
"gui.refinedstorage.crafter_manager": "제작기 관리자",
"gui.refinedstorage.alternatives": "대체",
"gui.refinedstorage.alternatives.apply": "적용",
"gui.refinedstorage.jei.transfer.autocrafting_available": "자동 제작 사용 가능",
"gui.refinedstorage.jei.transfer.request_autocrafting": "CTRL + 클릭하여 자동 제작 요청",
"misc.refinedstorage.energy_stored": "%d / %d FE", "misc.refinedstorage.energy_stored": "%d / %d FE",
"misc.refinedstorage.energy_usage": "사용: %d FE/t", "misc.refinedstorage.energy_usage": "사용: %d FE/t",
"misc.refinedstorage.energy_usage_minimal": "%d FE/t", "misc.refinedstorage.energy_usage_minimal": "%d FE/t",
"misc.refinedstorage.storage.stored": "저장량: %s", "misc.refinedstorage.storage.stored": "저장량: %s",
"misc.refinedstorage.storage.stored_capacity": "저쟝량: %s / %s", "misc.refinedstorage.storage.stored_capacity": "저쟝량: %s / %s",
"misc.refinedstorage.storage.stored_minimal": "%s", "misc.refinedstorage.storage.stored_minimal": "%s",
"misc.refinedstorage.storage.stored_capacity_minimal": "%s / %s", "misc.refinedstorage.storage.stored_capacity_minimal": "%s / %s",
"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_duplicate": "인벤토리에 두 개 이상의 %s이(가) 있습니다.",
"misc.refinedstorage.network_item.out_of_energy": "%s의 에너지가 부족합니다.",
"misc.refinedstorage.network_card.tooltip": "%d, %d, %d로 연결됨", "misc.refinedstorage.network_card.tooltip": "%d, %d, %d로 연결됨",
"misc.refinedstorage.pattern.inputs": "입력", "misc.refinedstorage.pattern.inputs": "입력",
"misc.refinedstorage.pattern.outputs": "출력", "misc.refinedstorage.pattern.outputs": "출력",
"misc.refinedstorage.pattern.invalid": "잘못된 패턴", "misc.refinedstorage.pattern.invalid": "잘못된 패턴",
"misc.refinedstorage.pattern.exact": "정확한 모드 사용",
"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.security.no_permission": "해당 작업을 실행할 권한이 없습니다.", "misc.refinedstorage.security.no_permission": "해당 작업을 실행할 권한이 없습니다.",
"misc.refinedstorage.start": "시작", "misc.refinedstorage.start": "시작",
"misc.refinedstorage.clear": "초기화", "misc.refinedstorage.clear": "초기화",
"misc.refinedstorage.set": "설정", "misc.refinedstorage.set": "설정",
"misc.refinedstorage.cancel_all": "모두 취소", "misc.refinedstorage.cancel_all": "모두 취소",
"misc.refinedstorage.priority": "우선 순위", "misc.refinedstorage.priority": "우선 순위",
"misc.refinedstorage.exact": "정확성",
"misc.refinedstorage.processing": "처리",
"misc.refinedstorage.fluidmode": "액체",
"misc.refinedstorage.total": "%s 합계",
"misc.refinedstorage.last_modified.just_now": "%s에 의해 방금 전에 최종 수정됨",
"misc.refinedstorage.last_modified.second": "%s에 의해 %d초 전에 마지막으로 수정됨",
"misc.refinedstorage.last_modified.seconds": "%s에 의해 %d초 전에 마지막으로 수정됨",
"misc.refinedstorage.last_modified.minute": "%s에 의해 %d분 전에 마지막으로 수정됨",
"misc.refinedstorage.last_modified.minutes": "%s에 의해 %d분 전에 마지막으로 수정됨",
"misc.refinedstorage.last_modified.hour": "%s에 의해 %d시간 전에 마지막으로 수정됨",
"misc.refinedstorage.last_modified.hours": "%s에 의해 %d시간 전에 마지막으로 수정됨",
"misc.refinedstorage.last_modified.day": "%s에 의해 %d일 전에 마지막으로 수정됨",
"misc.refinedstorage.last_modified.days": "%s에 의해 %d일 전에 마지막으로 수정됨",
"misc.refinedstorage.last_modified.week": "%s에 의해 %d주 전에 마지막으로 수정됨",
"misc.refinedstorage.last_modified.weeks": "%s에 의해 %d주 전에 마지막으로 수정됨",
"misc.refinedstorage.last_modified.year": "%s에 의해 %d년 전에 마지막으로 수정됨",
"misc.refinedstorage.last_modified.years": "%s에 의해 %d년 전에 마지막으로 수정됨",
"sidebutton.refinedstorage.exact_mode": "정확한 모드",
"sidebutton.refinedstorage.exact_mode.on": "켜짐",
"sidebutton.refinedstorage.exact_mode.off": "꺼짐",
"sidebutton.refinedstorage.redstone_mode": "레드스톤 모드", "sidebutton.refinedstorage.redstone_mode": "레드스톤 모드",
"sidebutton.refinedstorage.redstone_mode.0": "신호와 상관 없이 작동", "sidebutton.refinedstorage.redstone_mode.0": "신호와 상관 없이 작동",
"sidebutton.refinedstorage.redstone_mode.1": "신호를 받을 때 작동", "sidebutton.refinedstorage.redstone_mode.1": "신호를 받을 때 작동",
"sidebutton.refinedstorage.redstone_mode.2": "신호를 받지 않을 때 작동", "sidebutton.refinedstorage.redstone_mode.2": "신호를 받지 않을 때 작동",
"sidebutton.refinedstorage.crafter_mode": "제작기 모드",
"sidebutton.refinedstorage.crafter_mode.0": "레드스톤 신호 무시",
"sidebutton.refinedstorage.crafter_mode.1": "레드스톤 신호가 자동 제작의 잠금을 해제합니다.",
"sidebutton.refinedstorage.crafter_mode.2": "레드스톤 신호가 자동 제작을 잠급니다.",
"sidebutton.refinedstorage.crafter_mode.3": "레드스톤 펄스가 다음 세트를 삽입합니다.",
"sidebutton.refinedstorage.grid.view_type": "표시", "sidebutton.refinedstorage.grid.view_type": "표시",
"sidebutton.refinedstorage.grid.view_type.0": "일반", "sidebutton.refinedstorage.grid.view_type.0": "일반",
"sidebutton.refinedstorage.grid.view_type.1": "제작 가능 아이템 숨김", "sidebutton.refinedstorage.grid.view_type.1": "제작 가능 아이템 숨김",
@@ -103,11 +168,15 @@
"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": "ID", "sidebutton.refinedstorage.grid.sorting.type.2": "ID",
"sidebutton.refinedstorage.grid.sorting.type.3": "인벤토리트윅스",
"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": "일반",
"sidebutton.refinedstorage.grid.search_box_mode.1": "일반 (자동 선택됨)", "sidebutton.refinedstorage.grid.search_box_mode.1": "일반 (자동 선택됨)",
"sidebutton.refinedstorage.grid.search_box_mode.2": "JEI 통합", "sidebutton.refinedstorage.grid.search_box_mode.2": "JEI 통합",
"sidebutton.refinedstorage.grid.search_box_mode.3": "JEI 통합 (자동 선택됨)", "sidebutton.refinedstorage.grid.search_box_mode.3": "JEI 통합 (자동 선택됨)",
"sidebutton.refinedstorage.grid.search_box_mode.4": "JEI 통합 (양방향)",
"sidebutton.refinedstorage.grid.search_box_mode.5": "JEI 통합 (양방향 자동 선택됨)",
"sidebutton.refinedstorage.grid.size": "크기", "sidebutton.refinedstorage.grid.size": "크기",
"sidebutton.refinedstorage.grid.size.0": "맞춤", "sidebutton.refinedstorage.grid.size.0": "맞춤",
"sidebutton.refinedstorage.grid.size.1": "작음", "sidebutton.refinedstorage.grid.size.1": "작음",
@@ -130,28 +199,24 @@
"sidebutton.refinedstorage.detector.mode.0": "수량 이하일 때 신호 출력", "sidebutton.refinedstorage.detector.mode.0": "수량 이하일 때 신호 출력",
"sidebutton.refinedstorage.detector.mode.1": "수량과 일치할 때 신호 출력", "sidebutton.refinedstorage.detector.mode.1": "수량과 일치할 때 신호 출력",
"sidebutton.refinedstorage.detector.mode.2": "수량 이상일 때 신호 출력", "sidebutton.refinedstorage.detector.mode.2": "수량 이상일 때 신호 출력",
"sidebutton.refinedstorage.constructor.drop": "블럭을 설치하지 않고 떨어트림", "sidebutton.refinedstorage.constructor.drop": "블럭을 설치하지 않고 떨어트림",
"sidebutton.refinedstorage.destructor.pickup": "블럭을 파괴하지 않고 주움", "sidebutton.refinedstorage.destructor.pickup": "블럭을 파괴하지 않고 주움",
"sidebutton.refinedstorage.access_type": "액세스 종류", "sidebutton.refinedstorage.access_type": "액세스 종류",
"sidebutton.refinedstorage.access_type.0": "입출력", "sidebutton.refinedstorage.access_type.0": "입출력",
"sidebutton.refinedstorage.access_type.1": "입력", "sidebutton.refinedstorage.access_type.1": "입력",
"sidebutton.refinedstorage.access_type.2": "출력", "sidebutton.refinedstorage.access_type.2": "출력",
"block.refinedstorage.controller": "콘트롤러",
"block.refinedstorage.controller": "트롤러", "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": "디스크 드라이브",
"block.refinedstorage.disk_manipulator": "디스크 조작기", "block.refinedstorage.disk_manipulator": "디스크 조작기",
"block.refinedstorage.external_storage": "외부 저장 포트", "block.refinedstorage.external_storage": "외부 저장공간",
"block.refinedstorage.importer": "입력 포트", "block.refinedstorage.importer": "입력",
"block.refinedstorage.exporter": "출력 포트", "block.refinedstorage.exporter": "출력",
"block.refinedstorage.detector": "감지기", "block.refinedstorage.detector": "감지기",
"block.refinedstorage.machine_casing": "기계 케이싱", "block.refinedstorage.machine_casing": "기계 케이싱",
"block.refinedstorage.destructor": "파괴기", "block.refinedstorage.destructor": "파괴기",
@@ -163,10 +228,9 @@
"block.refinedstorage.creative_storage_block": "크리에이티브 저장공간", "block.refinedstorage.creative_storage_block": "크리에이티브 저장공간",
"block.refinedstorage.relay": "중계기", "block.refinedstorage.relay": "중계기",
"block.refinedstorage.interface": "인터페이스", "block.refinedstorage.interface": "인터페이스",
"block.refinedstorage.crafting_monitor": "조합 모니터", "block.refinedstorage.crafting_monitor": "제작 모니터",
"block.refinedstorage.wireless_transmitter": "무선 송신기", "block.refinedstorage.wireless_transmitter": "무선 송신기",
"block.refinedstorage.wireless_transmitter.tooltip": "%s에 설치되어야 합니다.", "block.refinedstorage.crafter": "제작기",
"block.refinedstorage.crafter": "조합기",
"block.refinedstorage.network_receiver": "네트워크 수신기", "block.refinedstorage.network_receiver": "네트워크 수신기",
"block.refinedstorage.network_transmitter": "네트워크 송신기", "block.refinedstorage.network_transmitter": "네트워크 송신기",
"block.refinedstorage.fluid_interface": "액체 인터페이스", "block.refinedstorage.fluid_interface": "액체 인터페이스",
@@ -181,7 +245,7 @@
"block.refinedstorage.portable_grid": "휴대용 그리드", "block.refinedstorage.portable_grid": "휴대용 그리드",
"block.refinedstorage.creative_portable_grid": "크리에이티브 휴대용 그리드", "block.refinedstorage.creative_portable_grid": "크리에이티브 휴대용 그리드",
"block.refinedstorage.portable_grid.tooltip": "웅크리기로 설치할 수 있습니다.", "block.refinedstorage.portable_grid.tooltip": "웅크리기로 설치할 수 있습니다.",
"block.refinedstorage.crafter_manager": "제작기 관리자",
"item.refinedstorage.1k_storage_disk": "1k 저장 디스크", "item.refinedstorage.1k_storage_disk": "1k 저장 디스크",
"item.refinedstorage.4k_storage_disk": "4k 저장 디스크", "item.refinedstorage.4k_storage_disk": "4k 저장 디스크",
"item.refinedstorage.16k_storage_disk": "16k 저장 디스크", "item.refinedstorage.16k_storage_disk": "16k 저장 디스크",
@@ -202,6 +266,9 @@
"item.refinedstorage.construction_core": "형성 코어", "item.refinedstorage.construction_core": "형성 코어",
"item.refinedstorage.destruction_core": "파괴 코어", "item.refinedstorage.destruction_core": "파괴 코어",
"item.refinedstorage.silicon": "실리콘", "item.refinedstorage.silicon": "실리콘",
"item.refinedstorage.raw_basic_processor": "처리되지 않은 기본 프로세서",
"item.refinedstorage.raw_improved_processor": "처리되지 않은 강화 프로세서",
"item.refinedstorage.raw_advanced_processor": "처리되지 않은 고급 프로세서",
"item.refinedstorage.basic_processor": "기본 프로세서", "item.refinedstorage.basic_processor": "기본 프로세서",
"item.refinedstorage.improved_processor": "강화 프로세서", "item.refinedstorage.improved_processor": "강화 프로세서",
"item.refinedstorage.advanced_processor": "고급 프로세서", "item.refinedstorage.advanced_processor": "고급 프로세서",
@@ -223,10 +290,86 @@
"item.refinedstorage.fortune_1_upgrade": "행운 업그레이드", "item.refinedstorage.fortune_1_upgrade": "행운 업그레이드",
"item.refinedstorage.fortune_2_upgrade": "행운 업그레이드", "item.refinedstorage.fortune_2_upgrade": "행운 업그레이드",
"item.refinedstorage.fortune_3_upgrade": "행운 업그레이드", "item.refinedstorage.fortune_3_upgrade": "행운 업그레이드",
"item.refinedstorage.storage_housing": "빈 저장 디스크", "item.refinedstorage.regulator_upgrade": "조절기 업그레이드",
"item.refinedstorage.storage_housing": "저장공간 하우징",
"item.refinedstorage.filter": "필터", "item.refinedstorage.filter": "필터",
"item.refinedstorage.network_card": "네트워크 카드", "item.refinedstorage.network_card": "네트워크 카드",
"item.refinedstorage.wrench": "렌치", "item.refinedstorage.wrench": "렌치",
"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.cover": "커버",
"item.refinedstorage.hollow_cover": "빈 커버",
"commands.refinedstorage.disk.create.error.disk_not_found": "%s 디스크를 찾을 수 없습니다.",
"commands.refinedstorage.disk.create.success": "%s 디스크에 %s을(를) 부여했습니다.",
"commands.refinedstorage.network.list.pos": "X: %d, Y: %d, Z: %d에서의 네트워크",
"commands.refinedstorage.network.list.tick_times": "평균 틱 시간: %s ms. 평균 TPS: %s",
"commands.refinedstorage.network.list.autocrafting_tasks": "%s 작업",
"commands.refinedstorage.network.list.nodes": "%s 노드",
"commands.refinedstorage.network.list.energy_usage": "에너지 사용: %s",
"commands.refinedstorage.network.get.error.not_found": "네트워크를 찾지 못했습니다.",
"commands.refinedstorage.network.autocrafting.get.error.not_found": "작업를 찾지 못했습니다.",
"commands.refinedstorage.network.autocrafting.cancel.single": "작업 %d개를 취소했습니다.",
"commands.refinedstorage.network.autocrafting.cancel.multiple": "작업 %d개를 취소했습니다.",
"advancements.refinedstorage.controlling.description": "콘트롤러를 제작합니다.",
"advancements.refinedstorage.connecting": "연결",
"advancements.refinedstorage.connecting.description": "모든 장치를 나란히 배치하여 연결하거나 케이블을 사용할 수 있습니다.",
"advancements.refinedstorage.conditional_connecting": "조건부 연결",
"advancements.refinedstorage.conditional_connecting.description": "네트워크 신호가 레드스톤으로 전달될 수 있는지 제어하기 위해 중계기를 제작합니다.",
"advancements.refinedstorage.drives": "드라이브",
"advancements.refinedstorage.drives.description": "디스크를 저장할 수 있도록 디스크 드라이브를 제작합니다.",
"advancements.refinedstorage.manipulating_disks": "디스크 조작",
"advancements.refinedstorage.manipulating_disks.description": "디스크 조작기를 사용하여 디스크 내용을 쉽게 수정합니다.",
"advancements.refinedstorage.storing_items": "아이템 정렬",
"advancements.refinedstorage.storing_items.description": "저장 디스크를 제작하여 디스크 드라이브에 넣습니다.",
"advancements.refinedstorage.viewing_items": "아이템 보기",
"advancements.refinedstorage.viewing_items.description": "그리드를 제작하여 아이템 저장공간과 상호 작용합니다.",
"advancements.refinedstorage.portable_storage": "휴대용 저장공간",
"advancements.refinedstorage.portable_storage.description": "휴대용 그리드를 제작하여 네트워크에 있지 않고 디스크의 아이템 및 액체에 접근할 수 있습니다.",
"advancements.refinedstorage.upgrading_your_grid": "그리드를 업그레이드하기",
"advancements.refinedstorage.upgrading_your_grid.description": "그리드를 제작 그리드로 업그레이드하여 그리드에서 제작 기능을 얻으십시오.",
"advancements.refinedstorage.storing_fluids": "액체 저장",
"advancements.refinedstorage.storing_fluids.description": "액체 저장 디스크를 제작하여 디스크 드라이브에 넣습니다.",
"advancements.refinedstorage.viewing_fluids": "액체 보기",
"advancements.refinedstorage.viewing_fluids.description": "액체 저장공간과 상호 작용하도록 액체 그리드를 제작합니다.",
"advancements.refinedstorage.better_than_a_barrel": "통보다 좋다!",
"advancements.refinedstorage.better_than_a_barrel.description": "저장 모니터를 제작하여 네트워크의 아이템을 보거나 삽입 또는 추출합니다.",
"advancements.refinedstorage.autocrafting": "자동 제작",
"advancements.refinedstorage.autocrafting.description": "제작기를 제작합니다.",
"advancements.refinedstorage.pattern_creation": "패턴 제작",
"advancements.refinedstorage.pattern_creation.description": "패턴 그리드 및 패턴을 사용하여 패턴을 작성합니다.",
"advancements.refinedstorage.monitoring": "감시",
"advancements.refinedstorage.monitoring.description": "제작 모니터로 제작 작업의 상태를 확인합니다.",
"advancements.refinedstorage.managing_patterns": "패턴 관리",
"advancements.refinedstorage.managing_patterns.description": "제작기 관리자를 제작하여 패턴을 보다 효율적으로 관리할 수 있습니다.",
"advancements.refinedstorage.importing": "입력",
"advancements.refinedstorage.importing.description": "입력기를 사용하여 아이템 또는 액체를 저장공간 네트워크로 가져옵니다.",
"advancements.refinedstorage.destruction": "파괴",
"advancements.refinedstorage.destruction.description": "파괴기를 사용하여 블록이나 액체를 저장공간 네트워크로 가져옵니다.",
"advancements.refinedstorage.exporting": "출력",
"advancements.refinedstorage.exporting.description": "출력기를 사용하여 블록이나 액체를 저장공간 네트워크로 가져옵니다.",
"advancements.refinedstorage.construction": "설치",
"advancements.refinedstorage.construction.description": "설치기를 사용하여 저장공간 네트워크에서 블록이나 액체를 얻습니다.",
"advancements.refinedstorage.security": "보안",
"advancements.refinedstorage.security.description": "보안 관리자 및 보안 카드를 사용하여 네트워크를 보호하십시오.",
"advancements.refinedstorage.wireless": "무선",
"advancements.refinedstorage.wireless.description": "무선 송신기로 네트워크 신호를 전송합니다.",
"advancements.refinedstorage.wireless_items": "무선 아이템",
"advancements.refinedstorage.wireless_items.description": "무선 그리드를 통해 아이템 저장공간과 무선으로 상호작용하십시오.",
"advancements.refinedstorage.wireless_fluids": "무선 액체",
"advancements.refinedstorage.wireless_fluids.description": "무선 액체 그리드로 액체 저장공간과 무선으로 상호작용하십시오.",
"advancements.refinedstorage.wireless_monitoring": "무선 감시",
"advancements.refinedstorage.wireless_monitoring.description": "무선 제작 모니터로 무선으로 제작 작업의 상태를 확인하십시오.",
"advancements.refinedstorage.no_cables_required": "케이블을 요구하지 않습니다.",
"advancements.refinedstorage.no_cables_required.description": "네트워크 송신기, 네트워크 수신기 및 네트워크 카드를 사용하여 케이블을 사용하지 않고도 네트워크에 추가 구성요소를 추가할 수 있습니다.",
"advancements.refinedstorage.upgrading": "업그레이드",
"advancements.refinedstorage.upgrading.description": "다양한 장치를 개선하기 위해 업그레이드를 제작합니다.",
"advancements.refinedstorage.crafting_on_demand": "주문형 제작",
"advancements.refinedstorage.crafting_on_demand.description": "인터페이스, 출력기 또는 설치기에서 제작 업그레이드를 사용하여 주문형 아이템 및 블록을 제작합니다.",
"advancements.refinedstorage.detecting": "탐지",
"advancements.refinedstorage.detecting.description": "감지기를 사용하여 네트워크의 아이템 또는 액체를 탐지합니다.",
"advancements.refinedstorage.interface_to_the_world": "월드에 대한 인터페이스",
"advancements.refinedstorage.interface_to_the_world.description": "인터페이스로 아이템을 동시에 내보내고 가져옵니다.",
"advancements.refinedstorage.storing_externally": "외부로 저장",
"advancements.refinedstorage.storing_externally.description": "외부 저장공간을 사용하여 네트워크에 상자와 같은 외부 블록의 저장공간을 제공합니다."
} }