Refactor wireless grid API to allow for easy implementation of wireless crafting monitors

This commit is contained in:
Raoul Van den Berge
2016-11-04 12:20:10 +01:00
parent 2289b555d4
commit 9842726f3f
24 changed files with 598 additions and 528 deletions

View File

@@ -5,6 +5,7 @@ import com.raoulvdberge.refinedstorage.api.autocrafting.ICraftingPattern;
import com.raoulvdberge.refinedstorage.api.autocrafting.task.ICraftingTask; import com.raoulvdberge.refinedstorage.api.autocrafting.task.ICraftingTask;
import com.raoulvdberge.refinedstorage.api.network.grid.IFluidGridHandler; import com.raoulvdberge.refinedstorage.api.network.grid.IFluidGridHandler;
import com.raoulvdberge.refinedstorage.api.network.grid.IItemGridHandler; import com.raoulvdberge.refinedstorage.api.network.grid.IItemGridHandler;
import com.raoulvdberge.refinedstorage.api.network.item.INetworkItemHandler;
import com.raoulvdberge.refinedstorage.api.storage.fluid.IFluidStorageCache; import com.raoulvdberge.refinedstorage.api.storage.fluid.IFluidStorageCache;
import com.raoulvdberge.refinedstorage.api.storage.item.IItemStorageCache; import com.raoulvdberge.refinedstorage.api.storage.item.IItemStorageCache;
import com.raoulvdberge.refinedstorage.api.util.IComparer; import com.raoulvdberge.refinedstorage.api.util.IComparer;
@@ -59,9 +60,9 @@ public interface INetworkMaster {
IFluidGridHandler getFluidGridHandler(); IFluidGridHandler getFluidGridHandler();
/** /**
* @return the {@link IWirelessGridHandler} of this network * @return the {@link INetworkItemHandler} of this network
*/ */
IWirelessGridHandler getWirelessGridHandler(); INetworkItemHandler getNetworkItemHandler();
/** /**
* @return the {@link IItemStorageCache} of this network * @return the {@link IItemStorageCache} of this network

View File

@@ -1,19 +0,0 @@
package com.raoulvdberge.refinedstorage.api.network;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
/**
* Represents a player using a wireless grid.
*/
public interface IWirelessGridConsumer {
/**
* @return the player using the wireless grid
*/
EntityPlayer getPlayer();
/**
* @return the wireless grid stack
*/
ItemStack getStack();
}

View File

@@ -1,51 +0,0 @@
package com.raoulvdberge.refinedstorage.api.network;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.util.EnumHand;
import net.minecraft.world.World;
import javax.annotation.Nullable;
/**
* Defines behavior of wireless grids.
*/
public interface IWirelessGridHandler {
/**
* Called every network tick.
*/
void update();
/**
* Called when a player opens a wireless grid.
*
* @param player the player that opened the wireless grid
* @param controllerWorld the world of the controller
* @param hand the hand the player opened it with
* @return true if the opening was successful, false otherwise
*/
boolean onOpen(EntityPlayer player, World controllerWorld, EnumHand hand);
/**
* Called when the player closes a wireless grid.
*
* @param player the player that closed the grid
*/
void onClose(EntityPlayer player);
/**
* Drains energy from the wireless grid of a player.
*
* @param player the player that is using the wireless grid to drain energy from
* @param energy the amount of energy that has to be drained
*/
void drainEnergy(EntityPlayer player, int energy);
/**
* Returns a {@link IWirelessGridConsumer} for a player.
*
* @param player the player to get the wireless grid consumer for
* @return the {@link IWirelessGridConsumer} that corresponds to a player, or null if the player isn't using a wireless grid
*/
@Nullable
IWirelessGridConsumer getConsumer(EntityPlayer player);
}

View File

@@ -0,0 +1,27 @@
package com.raoulvdberge.refinedstorage.api.network.item;
import com.raoulvdberge.refinedstorage.api.network.INetworkMaster;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.util.EnumHand;
import net.minecraft.world.World;
/**
* Represents a network item.
*/
public interface INetworkItem {
/**
* @return the player using the network item
*/
EntityPlayer getPlayer();
/**
* Called when the network item is opened.
*
* @param network the network
* @param player the player
* @param controllerWorld the world where the controller is in
* @param hand the hand
* @return whether the network item can be opened
*/
boolean onOpen(INetworkMaster network, EntityPlayer player, World controllerWorld, EnumHand hand);
}

View File

@@ -0,0 +1,43 @@
package com.raoulvdberge.refinedstorage.api.network.item;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.util.EnumHand;
import net.minecraft.world.World;
import javax.annotation.Nullable;
/**
* Handles network items.
*/
public interface INetworkItemHandler {
/**
* Called every network tick.
*/
void update();
/**
* Called when a player opens a network item.
*
* @param player the player that opened the network item
* @param controllerWorld the world of the controller
* @param hand the hand the player opened it with
* @return true if the opening was successful, false otherwise
*/
boolean onOpen(EntityPlayer player, World controllerWorld, EnumHand hand);
/**
* Called when the player closes a network item.
*
* @param player the player that closed the network item
*/
void onClose(EntityPlayer player);
/**
* Returns a {@link INetworkItem} for a player.
*
* @param player the player to get the network item for
* @return the {@link INetworkItem} that corresponds to a player, or null if the player isn't using a network item
*/
@Nullable
INetworkItem getItem(EntityPlayer player);
}

View File

@@ -0,0 +1,19 @@
package com.raoulvdberge.refinedstorage.api.network.item;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
/**
* Provider for network items. Implement this on the item.
*/
public interface INetworkItemProvider {
/**
* Creates a network item for the given item stack.
*
* @param handler the network item handlelr
* @param player the player
* @param stack the stack
* @return the network item
*/
INetworkItem provide(INetworkItemHandler handler, EntityPlayer player, ItemStack stack);
}

View File

@@ -1,25 +0,0 @@
package com.raoulvdberge.refinedstorage.apiimpl.network;
import com.raoulvdberge.refinedstorage.api.network.IWirelessGridConsumer;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
public class WirelessGridConsumer implements IWirelessGridConsumer {
private EntityPlayer player;
private ItemStack stack;
public WirelessGridConsumer(EntityPlayer player, ItemStack stack) {
this.player = player;
this.stack = stack;
}
@Override
public EntityPlayer getPlayer() {
return player;
}
@Override
public ItemStack getStack() {
return stack;
}
}

View File

@@ -1,115 +0,0 @@
package com.raoulvdberge.refinedstorage.apiimpl.network;
import com.raoulvdberge.refinedstorage.RS;
import com.raoulvdberge.refinedstorage.RSGui;
import com.raoulvdberge.refinedstorage.RSItems;
import com.raoulvdberge.refinedstorage.api.network.*;
import com.raoulvdberge.refinedstorage.item.ItemWirelessGrid;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.item.ItemStack;
import net.minecraft.util.EnumHand;
import net.minecraft.world.World;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class WirelessGridHandler implements IWirelessGridHandler {
private INetworkMaster network;
private List<IWirelessGridConsumer> consumers = new ArrayList<>();
private List<IWirelessGridConsumer> consumersToRemove = new ArrayList<>();
public WirelessGridHandler(INetworkMaster network) {
this.network = network;
}
@Override
public void update() {
consumers.removeAll(consumersToRemove);
consumersToRemove.clear();
}
@Override
public boolean onOpen(EntityPlayer player, World controllerWorld, EnumHand hand) {
boolean inRange = false;
for (INetworkNode node : network.getNodeGraph().all()) {
if (node instanceof IWirelessTransmitter && node.getNodeWorld().provider.getDimension() == player.dimension) {
IWirelessTransmitter transmitter = (IWirelessTransmitter) node;
double distance = Math.sqrt(Math.pow(transmitter.getOrigin().getX() - player.posX, 2) + Math.pow(transmitter.getOrigin().getY() - player.posY, 2) + Math.pow(transmitter.getOrigin().getZ() - player.posZ, 2));
if (distance < transmitter.getRange()) {
inRange = true;
break;
}
}
}
if (!inRange) {
return false;
}
ItemStack stack = player.getHeldItem(hand);
if (RS.INSTANCE.config.wirelessGridUsesEnergy && stack.getItemDamage() != ItemWirelessGrid.TYPE_CREATIVE && RSItems.WIRELESS_GRID.getEnergyStored(stack) <= RS.INSTANCE.config.wirelessGridOpenUsage) {
return true;
}
consumers.add(new WirelessGridConsumer(player, stack));
player.openGui(RS.INSTANCE, RSGui.WIRELESS_GRID, player.worldObj, hand.ordinal(), controllerWorld.provider.getDimension(), 0);
network.sendItemStorageToClient((EntityPlayerMP) player);
drainEnergy(player, RS.INSTANCE.config.wirelessGridOpenUsage);
return true;
}
@Override
public void onClose(EntityPlayer player) {
IWirelessGridConsumer consumer = getConsumer(player);
if (consumer != null) {
consumersToRemove.add(consumer);
}
}
@Override
public void drainEnergy(EntityPlayer player, int energy) {
IWirelessGridConsumer consumer = getConsumer(player);
if (consumer != null && RS.INSTANCE.config.wirelessGridUsesEnergy) {
ItemWirelessGrid item = RSItems.WIRELESS_GRID;
if (consumer.getStack().getItemDamage() != ItemWirelessGrid.TYPE_CREATIVE) {
item.extractEnergy(consumer.getStack(), energy, false);
if (item.getEnergyStored(consumer.getStack()) <= 0) {
onClose(player);
consumer.getPlayer().closeScreen();
}
}
}
}
@Override
public IWirelessGridConsumer getConsumer(EntityPlayer player) {
Iterator<IWirelessGridConsumer> it = consumers.iterator();
while (it.hasNext()) {
IWirelessGridConsumer consumer = it.next();
if (consumer.getPlayer() == player) {
return consumer;
}
}
return null;
}
}

View File

@@ -4,8 +4,10 @@ import com.raoulvdberge.refinedstorage.RS;
import com.raoulvdberge.refinedstorage.api.autocrafting.task.ICraftingTask; import com.raoulvdberge.refinedstorage.api.autocrafting.task.ICraftingTask;
import com.raoulvdberge.refinedstorage.api.network.INetworkMaster; import com.raoulvdberge.refinedstorage.api.network.INetworkMaster;
import com.raoulvdberge.refinedstorage.api.network.grid.IItemGridHandler; import com.raoulvdberge.refinedstorage.api.network.grid.IItemGridHandler;
import com.raoulvdberge.refinedstorage.api.network.item.INetworkItem;
import com.raoulvdberge.refinedstorage.apiimpl.API; import com.raoulvdberge.refinedstorage.apiimpl.API;
import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.task.CraftingTask; import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.task.CraftingTask;
import com.raoulvdberge.refinedstorage.apiimpl.network.item.NetworkItemWirelessGrid;
import com.raoulvdberge.refinedstorage.network.MessageGridCraftingPreviewResponse; import com.raoulvdberge.refinedstorage.network.MessageGridCraftingPreviewResponse;
import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
@@ -78,7 +80,11 @@ public class ItemGridHandler implements IItemGridHandler {
player.updateHeldItem(); player.updateHeldItem();
} }
network.getWirelessGridHandler().drainEnergy(player, RS.INSTANCE.config.wirelessGridExtractUsage); INetworkItem networkItem = network.getNetworkItemHandler().getItem(player);
if (networkItem != null && networkItem instanceof NetworkItemWirelessGrid) {
((NetworkItemWirelessGrid) networkItem).drainEnergy(RS.INSTANCE.config.wirelessGridExtractUsage);
}
} }
} }
@@ -86,7 +92,11 @@ public class ItemGridHandler implements IItemGridHandler {
public ItemStack onInsert(EntityPlayerMP player, ItemStack stack) { public ItemStack onInsert(EntityPlayerMP player, ItemStack stack) {
ItemStack remainder = network.insertItem(stack, stack.stackSize, false); ItemStack remainder = network.insertItem(stack, stack.stackSize, false);
network.getWirelessGridHandler().drainEnergy(player, RS.INSTANCE.config.wirelessGridInsertUsage); INetworkItem networkItem = network.getNetworkItemHandler().getItem(player);
if (networkItem != null && networkItem instanceof NetworkItemWirelessGrid) {
((NetworkItemWirelessGrid) networkItem).drainEnergy(RS.INSTANCE.config.wirelessGridInsertUsage);
}
return remainder; return remainder;
} }
@@ -116,7 +126,11 @@ public class ItemGridHandler implements IItemGridHandler {
player.updateHeldItem(); player.updateHeldItem();
network.getWirelessGridHandler().drainEnergy(player, RS.INSTANCE.config.wirelessGridInsertUsage); INetworkItem networkItem = network.getNetworkItemHandler().getItem(player);
if (networkItem != null && networkItem instanceof NetworkItemWirelessGrid) {
((NetworkItemWirelessGrid) networkItem).drainEnergy(RS.INSTANCE.config.wirelessGridInsertUsage);
}
} }
@Override @Override

View File

@@ -0,0 +1,92 @@
package com.raoulvdberge.refinedstorage.apiimpl.network.item;
import com.raoulvdberge.refinedstorage.api.network.INetworkMaster;
import com.raoulvdberge.refinedstorage.api.network.INetworkNode;
import com.raoulvdberge.refinedstorage.api.network.IWirelessTransmitter;
import com.raoulvdberge.refinedstorage.api.network.item.INetworkItem;
import com.raoulvdberge.refinedstorage.api.network.item.INetworkItemHandler;
import com.raoulvdberge.refinedstorage.api.network.item.INetworkItemProvider;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.util.EnumHand;
import net.minecraft.world.World;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class NetworkItemHandler implements INetworkItemHandler {
private INetworkMaster network;
private List<INetworkItem> items = new ArrayList<>();
private List<INetworkItem> itemsToRemove = new ArrayList<>();
public NetworkItemHandler(INetworkMaster network) {
this.network = network;
}
@Override
public void update() {
items.removeAll(itemsToRemove);
itemsToRemove.clear();
}
@Override
public boolean onOpen(EntityPlayer player, World controllerWorld, EnumHand hand) {
boolean inRange = false;
for (INetworkNode node : network.getNodeGraph().all()) {
if (node instanceof IWirelessTransmitter && node.getNodeWorld().provider.getDimension() == player.dimension) {
IWirelessTransmitter transmitter = (IWirelessTransmitter) node;
double distance = Math.sqrt(Math.pow(transmitter.getOrigin().getX() - player.posX, 2) + Math.pow(transmitter.getOrigin().getY() - player.posY, 2) + Math.pow(transmitter.getOrigin().getZ() - player.posZ, 2));
if (distance < transmitter.getRange()) {
inRange = true;
break;
}
}
}
if (!inRange) {
return false;
}
ItemStack stack = player.getHeldItem(hand);
INetworkItem item = ((INetworkItemProvider) stack.getItem()).provide(this, player, stack);
if (item.onOpen(network, player, controllerWorld, hand)) {
items.add(item);
return false;
}
return true;
}
@Override
public void onClose(EntityPlayer player) {
INetworkItem item = getItem(player);
if (item != null) {
itemsToRemove.add(item);
}
}
@Override
public INetworkItem getItem(EntityPlayer player) {
Iterator<INetworkItem> it = items.iterator();
while (it.hasNext()) {
INetworkItem item = it.next();
if (item.getPlayer() == player) {
return item;
}
}
return null;
}
}

View File

@@ -0,0 +1,60 @@
package com.raoulvdberge.refinedstorage.apiimpl.network.item;
import com.raoulvdberge.refinedstorage.RS;
import com.raoulvdberge.refinedstorage.RSGui;
import com.raoulvdberge.refinedstorage.RSItems;
import com.raoulvdberge.refinedstorage.api.network.INetworkMaster;
import com.raoulvdberge.refinedstorage.api.network.item.INetworkItem;
import com.raoulvdberge.refinedstorage.api.network.item.INetworkItemHandler;
import com.raoulvdberge.refinedstorage.item.ItemWirelessGrid;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.item.ItemStack;
import net.minecraft.util.EnumHand;
import net.minecraft.world.World;
public class NetworkItemWirelessGrid implements INetworkItem {
private INetworkItemHandler handler;
private EntityPlayer player;
private ItemStack stack;
public NetworkItemWirelessGrid(INetworkItemHandler handler, EntityPlayer player, ItemStack stack) {
this.handler = handler;
this.player = player;
this.stack = stack;
}
@Override
public EntityPlayer getPlayer() {
return player;
}
@Override
public boolean onOpen(INetworkMaster network, EntityPlayer player, World controllerWorld, EnumHand hand) {
if (RS.INSTANCE.config.wirelessGridUsesEnergy && stack.getItemDamage() != ItemWirelessGrid.TYPE_CREATIVE && RSItems.WIRELESS_GRID.getEnergyStored(stack) <= RS.INSTANCE.config.wirelessGridOpenUsage) {
return false;
}
player.openGui(RS.INSTANCE, RSGui.WIRELESS_GRID, player.worldObj, hand.ordinal(), controllerWorld.provider.getDimension(), 0);
network.sendItemStorageToClient((EntityPlayerMP) player);
drainEnergy(RS.INSTANCE.config.wirelessGridOpenUsage);
return true;
}
public void drainEnergy(int energy) {
if (RS.INSTANCE.config.wirelessGridUsesEnergy && stack.getItemDamage() != ItemWirelessGrid.TYPE_CREATIVE) {
ItemWirelessGrid item = RSItems.WIRELESS_GRID;
item.extractEnergy(stack, energy, false);
if (item.getEnergyStored(stack) <= 0) {
handler.onClose(player);
player.closeScreen();
}
}
}
}

View File

@@ -4,10 +4,10 @@ import com.raoulvdberge.refinedstorage.RSItems;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraftforge.energy.IEnergyStorage; import net.minecraftforge.energy.IEnergyStorage;
public class WirelessGridEnergyForge implements IEnergyStorage { public class NetworkItemEnergyForge implements IEnergyStorage {
private ItemStack stack; private ItemStack stack;
public WirelessGridEnergyForge(ItemStack stack) { public NetworkItemEnergyForge(ItemStack stack) {
this.stack = stack; this.stack = stack;
} }

View File

@@ -5,10 +5,10 @@ import net.darkhax.tesla.api.ITeslaConsumer;
import net.darkhax.tesla.api.ITeslaHolder; import net.darkhax.tesla.api.ITeslaHolder;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
public class WirelessGridEnergyTesla implements ITeslaHolder, ITeslaConsumer { public class NetworkItemEnergyTesla implements ITeslaHolder, ITeslaConsumer {
private ItemStack stack; private ItemStack stack;
public WirelessGridEnergyTesla(ItemStack stack) { public NetworkItemEnergyTesla(ItemStack stack) {
this.stack = stack; this.stack = stack;
} }

View File

@@ -0,0 +1,298 @@
package com.raoulvdberge.refinedstorage.item;
import cofh.api.energy.ItemEnergyContainer;
import com.raoulvdberge.refinedstorage.RS;
import com.raoulvdberge.refinedstorage.RSBlocks;
import com.raoulvdberge.refinedstorage.api.network.item.INetworkItemProvider;
import com.raoulvdberge.refinedstorage.integration.forgeenergy.NetworkItemEnergyForge;
import com.raoulvdberge.refinedstorage.integration.ic2.IntegrationIC2;
import com.raoulvdberge.refinedstorage.integration.tesla.IntegrationTesla;
import com.raoulvdberge.refinedstorage.integration.tesla.NetworkItemEnergyTesla;
import com.raoulvdberge.refinedstorage.tile.TileController;
import com.raoulvdberge.refinedstorage.tile.grid.TileGrid;
import ic2.api.item.IElectricItemManager;
import ic2.api.item.ISpecialElectricItem;
import net.darkhax.tesla.capability.TeslaCapabilities;
import net.minecraft.block.Block;
import net.minecraft.client.resources.I18n;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.*;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.text.TextComponentTranslation;
import net.minecraft.world.World;
import net.minecraftforge.common.DimensionManager;
import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.common.capabilities.ICapabilityProvider;
import net.minecraftforge.energy.CapabilityEnergy;
import net.minecraftforge.fml.common.Optional;
import javax.annotation.Nullable;
import java.util.List;
@Optional.InterfaceList({
@Optional.Interface(iface = "ic2.api.item.ISpecialElectricItem", modid = "IC2"),
@Optional.Interface(iface = "ic2.api.item.IElectricItemManager", modid = "IC2")
})
public abstract class ItemNetworkItem extends ItemEnergyContainer implements INetworkItemProvider, ISpecialElectricItem, IElectricItemManager {
public static final int TYPE_NORMAL = 0;
public static final int TYPE_CREATIVE = 1;
private static final String NBT_CONTROLLER_X = "ControllerX";
private static final String NBT_CONTROLLER_Y = "ControllerY";
private static final String NBT_CONTROLLER_Z = "ControllerZ";
private static final String NBT_DIMENSION_ID = "DimensionID";
public ItemNetworkItem(String name) {
super(3200);
setRegistryName(RS.ID, name);
setMaxDamage(3200);
setMaxStackSize(1);
setHasSubtypes(true);
setCreativeTab(RS.INSTANCE.tab);
addPropertyOverride(new ResourceLocation("connected"), (stack, world, entity) -> (entity != null && isValid(stack)) ? 1.0f : 0.0f);
}
@Override
public ActionResult<ItemStack> onItemRightClick(ItemStack stack, World world, EntityPlayer player, EnumHand hand) {
if (!world.isRemote && isValid(stack)) {
World controllerWorld = DimensionManager.getWorld(getDimensionId(stack));
TileEntity controller;
if (controllerWorld != null && ((controller = controllerWorld.getTileEntity(new BlockPos(getX(stack), getY(stack), getZ(stack)))) instanceof TileController)) {
if (((TileController) controller).getNetworkItemHandler().onOpen(player, controllerWorld, hand)) {
return new ActionResult<>(EnumActionResult.SUCCESS, stack);
} else {
player.addChatComponentMessage(new TextComponentTranslation("misc.refinedstorage:network_item.out_of_range"));
}
} else {
player.addChatComponentMessage(new TextComponentTranslation("misc.refinedstorage:network_item.not_found"));
}
}
return super.onItemRightClick(stack, world, player, hand);
}
@Override
public ICapabilityProvider initCapabilities(ItemStack stack, NBTTagCompound nbt) {
return new NetworkItemCapabilityProvider(stack);
}
@Override
public boolean isDamageable() {
return true;
}
@Override
public boolean isRepairable() {
return false;
}
@Override
public double getDurabilityForDisplay(ItemStack stack) {
return 1D - ((double) getEnergyStored(stack) / (double) getMaxEnergyStored(stack));
}
@Override
public boolean isDamaged(ItemStack stack) {
return stack.getItemDamage() != TYPE_CREATIVE;
}
@Override
public void setDamage(ItemStack stack, int damage) {
// NO OP
}
@Override
public void getSubItems(Item item, CreativeTabs tab, List<ItemStack> list) {
list.add(new ItemStack(item, 1, TYPE_NORMAL));
ItemStack fullyCharged = new ItemStack(item, 1, TYPE_NORMAL);
receiveEnergy(fullyCharged, getMaxEnergyStored(fullyCharged), false);
list.add(fullyCharged);
list.add(new ItemStack(item, 1, TYPE_CREATIVE));
}
@Override
public void addInformation(ItemStack stack, EntityPlayer player, List<String> tooltip, boolean advanced) {
super.addInformation(stack, player, tooltip, advanced);
if (stack.getItemDamage() != TYPE_CREATIVE) {
tooltip.add(I18n.format("misc.refinedstorage:energy_stored", getEnergyStored(stack), getMaxEnergyStored(stack)));
}
if (isValid(stack)) {
tooltip.add(I18n.format("misc.refinedstorage:network_item.tooltip", getX(stack), getY(stack), getZ(stack)));
}
}
@Override
public EnumActionResult onItemUse(ItemStack stack, EntityPlayer player, World world, BlockPos pos, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) {
Block block = world.getBlockState(pos).getBlock();
if (block == RSBlocks.CONTROLLER) {
NBTTagCompound tag = stack.getTagCompound();
if (tag == null) {
tag = new NBTTagCompound();
}
tag.setInteger(NBT_CONTROLLER_X, pos.getX());
tag.setInteger(NBT_CONTROLLER_Y, pos.getY());
tag.setInteger(NBT_CONTROLLER_Z, pos.getZ());
tag.setInteger(NBT_DIMENSION_ID, player.dimension);
tag.setInteger(TileGrid.NBT_VIEW_TYPE, TileGrid.VIEW_TYPE_NORMAL);
tag.setInteger(TileGrid.NBT_SORTING_DIRECTION, TileGrid.SORTING_DIRECTION_DESCENDING);
tag.setInteger(TileGrid.NBT_SORTING_TYPE, TileGrid.SORTING_TYPE_NAME);
tag.setInteger(TileGrid.NBT_SEARCH_BOX_MODE, TileGrid.SEARCH_BOX_MODE_NORMAL);
stack.setTagCompound(tag);
return EnumActionResult.SUCCESS;
}
return EnumActionResult.PASS;
}
public static int getDimensionId(ItemStack stack) {
return stack.getTagCompound().getInteger(NBT_DIMENSION_ID);
}
public static int getX(ItemStack stack) {
return stack.getTagCompound().getInteger(NBT_CONTROLLER_X);
}
public static int getY(ItemStack stack) {
return stack.getTagCompound().getInteger(NBT_CONTROLLER_Y);
}
public static int getZ(ItemStack stack) {
return stack.getTagCompound().getInteger(NBT_CONTROLLER_Z);
}
@Override
public boolean shouldCauseReequipAnimation(ItemStack oldStack, ItemStack newStack, boolean slotChanged) {
if (oldStack.getItem() == newStack.getItem()) {
if (isValid(oldStack) && isValid(newStack)) {
if (getX(oldStack) == getX(newStack) && getY(oldStack) == getY(newStack) && getZ(oldStack) == getZ(newStack) && getDimensionId(oldStack) == getDimensionId(newStack)) {
return false;
}
}
}
return super.shouldCauseReequipAnimation(oldStack, newStack, slotChanged);
}
@Override
public String getUnlocalizedName() {
return "item." + RS.ID + ":" + getRegistryName().getResourcePath();
}
@Override
public String getUnlocalizedName(ItemStack stack) {
return getUnlocalizedName() + "." + stack.getItemDamage();
}
@Optional.Method(modid = "IC2")
@Override
public IElectricItemManager getManager(ItemStack stack) {
return this;
}
@Optional.Method(modid = "IC2")
@Override
public double charge(ItemStack stack, double amount, int tier, boolean ignoreTransferLimit, boolean simulate) {
return IntegrationIC2.toEU(receiveEnergy(stack, IntegrationIC2.toRS(amount), simulate));
}
@Optional.Method(modid = "IC2")
@Override
public double discharge(ItemStack stack, double amount, int tier, boolean ignoreTransferLimit, boolean externally, boolean simulate) {
return IntegrationIC2.toEU(extractEnergy(stack, IntegrationIC2.toRS(amount), simulate));
}
@Optional.Method(modid = "IC2")
@Override
public double getCharge(ItemStack stack) {
return IntegrationIC2.toEU(getEnergyStored(stack));
}
@Optional.Method(modid = "IC2")
@Override
public double getMaxCharge(ItemStack stack) {
return IntegrationIC2.toEU(getMaxEnergyStored(stack));
}
@Optional.Method(modid = "IC2")
@Override
public boolean canUse(ItemStack stack, double amount) {
return true;
}
@Optional.Method(modid = "IC2")
@Override
public boolean use(ItemStack stack, double amount, EntityLivingBase entity) {
return true;
}
@Optional.Method(modid = "IC2")
@Override
public void chargeFromArmor(ItemStack stack, EntityLivingBase entity) {
// NO OP
}
@Optional.Method(modid = "IC2")
@Override
public String getToolTip(ItemStack stack) {
return null;
}
@Optional.Method(modid = "IC2")
@Override
public int getTier(ItemStack stack) {
return Integer.MAX_VALUE;
}
public boolean isValid(ItemStack stack) {
return stack.hasTagCompound()
&& stack.getTagCompound().hasKey(NBT_CONTROLLER_X)
&& stack.getTagCompound().hasKey(NBT_CONTROLLER_Y)
&& stack.getTagCompound().hasKey(NBT_CONTROLLER_Z)
&& stack.getTagCompound().hasKey(NBT_DIMENSION_ID);
}
private class NetworkItemCapabilityProvider implements ICapabilityProvider {
private ItemStack stack;
public NetworkItemCapabilityProvider(ItemStack stack) {
this.stack = stack;
}
@Override
public boolean hasCapability(Capability<?> capability, @Nullable EnumFacing facing) {
return capability == CapabilityEnergy.ENERGY ||
(IntegrationTesla.isLoaded() && (capability == TeslaCapabilities.CAPABILITY_HOLDER || capability == TeslaCapabilities.CAPABILITY_CONSUMER));
}
@Override
public <T> T getCapability(Capability<T> capability, @Nullable EnumFacing facing) {
if (capability == CapabilityEnergy.ENERGY) {
return (T) new NetworkItemEnergyForge(stack);
}
if (IntegrationTesla.isLoaded() && (capability == TeslaCapabilities.CAPABILITY_HOLDER || capability == TeslaCapabilities.CAPABILITY_CONSUMER)) {
return (T) new NetworkItemEnergyTesla(stack);
}
return null;
}
}
}

View File

@@ -1,180 +1,15 @@
package com.raoulvdberge.refinedstorage.item; package com.raoulvdberge.refinedstorage.item;
import cofh.api.energy.ItemEnergyContainer; import com.raoulvdberge.refinedstorage.api.network.item.INetworkItem;
import com.raoulvdberge.refinedstorage.RS; import com.raoulvdberge.refinedstorage.api.network.item.INetworkItemHandler;
import com.raoulvdberge.refinedstorage.RSBlocks; import com.raoulvdberge.refinedstorage.apiimpl.network.item.NetworkItemWirelessGrid;
import com.raoulvdberge.refinedstorage.integration.forgeenergy.WirelessGridEnergyForge;
import com.raoulvdberge.refinedstorage.integration.ic2.IntegrationIC2;
import com.raoulvdberge.refinedstorage.integration.tesla.IntegrationTesla;
import com.raoulvdberge.refinedstorage.integration.tesla.WirelessGridEnergyTesla;
import com.raoulvdberge.refinedstorage.tile.TileController;
import com.raoulvdberge.refinedstorage.tile.grid.TileGrid; import com.raoulvdberge.refinedstorage.tile.grid.TileGrid;
import ic2.api.item.IElectricItemManager;
import ic2.api.item.ISpecialElectricItem;
import net.darkhax.tesla.capability.TeslaCapabilities;
import net.minecraft.block.Block;
import net.minecraft.client.resources.I18n;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.*;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.text.TextComponentTranslation;
import net.minecraft.world.World;
import net.minecraftforge.common.DimensionManager;
import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.common.capabilities.ICapabilityProvider;
import net.minecraftforge.energy.CapabilityEnergy;
import net.minecraftforge.fml.common.Optional;
import javax.annotation.Nullable;
import java.util.List;
@Optional.InterfaceList({
@Optional.Interface(iface = "ic2.api.item.ISpecialElectricItem", modid = "IC2"),
@Optional.Interface(iface = "ic2.api.item.IElectricItemManager", modid = "IC2")
})
public class ItemWirelessGrid extends ItemEnergyContainer implements ISpecialElectricItem, IElectricItemManager {
public static final int TYPE_NORMAL = 0;
public static final int TYPE_CREATIVE = 1;
private static final String NBT_CONTROLLER_X = "ControllerX";
private static final String NBT_CONTROLLER_Y = "ControllerY";
private static final String NBT_CONTROLLER_Z = "ControllerZ";
private static final String NBT_DIMENSION_ID = "DimensionID";
public class ItemWirelessGrid extends ItemNetworkItem {
public ItemWirelessGrid() { public ItemWirelessGrid() {
super(3200); super("wireless_grid");
setRegistryName(RS.ID, "wireless_grid");
setMaxDamage(3200);
setMaxStackSize(1);
setHasSubtypes(true);
setCreativeTab(RS.INSTANCE.tab);
addPropertyOverride(new ResourceLocation("connected"), (stack, world, entity) -> (entity != null && isValid(stack)) ? 1.0f : 0.0f);
}
@Override
public ICapabilityProvider initCapabilities(ItemStack stack, NBTTagCompound nbt) {
return new WirelessGridCapabilityProvider(stack);
}
@Override
public boolean isDamageable() {
return true;
}
@Override
public boolean isRepairable() {
return false;
}
@Override
public double getDurabilityForDisplay(ItemStack stack) {
return 1D - ((double) getEnergyStored(stack) / (double) getMaxEnergyStored(stack));
}
@Override
public boolean isDamaged(ItemStack stack) {
return stack.getItemDamage() != TYPE_CREATIVE;
}
@Override
public void setDamage(ItemStack stack, int damage) {
// NO OP
}
@Override
public void getSubItems(Item item, CreativeTabs tab, List<ItemStack> list) {
list.add(new ItemStack(item, 1, TYPE_NORMAL));
ItemStack fullyCharged = new ItemStack(item, 1, TYPE_NORMAL);
receiveEnergy(fullyCharged, getMaxEnergyStored(fullyCharged), false);
list.add(fullyCharged);
list.add(new ItemStack(item, 1, TYPE_CREATIVE));
}
@Override
public void addInformation(ItemStack stack, EntityPlayer player, List<String> tooltip, boolean advanced) {
super.addInformation(stack, player, tooltip, advanced);
if (stack.getItemDamage() != TYPE_CREATIVE) {
tooltip.add(I18n.format("misc.refinedstorage:energy_stored", getEnergyStored(stack), getMaxEnergyStored(stack)));
}
if (isValid(stack)) {
tooltip.add(I18n.format("misc.refinedstorage:wireless_grid.tooltip", getX(stack), getY(stack), getZ(stack)));
}
}
@Override
public EnumActionResult onItemUse(ItemStack stack, EntityPlayer player, World world, BlockPos pos, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) {
Block block = world.getBlockState(pos).getBlock();
if (block == RSBlocks.CONTROLLER) {
NBTTagCompound tag = stack.getTagCompound();
if (tag == null) {
tag = new NBTTagCompound();
}
tag.setInteger(NBT_CONTROLLER_X, pos.getX());
tag.setInteger(NBT_CONTROLLER_Y, pos.getY());
tag.setInteger(NBT_CONTROLLER_Z, pos.getZ());
tag.setInteger(NBT_DIMENSION_ID, player.dimension);
tag.setInteger(TileGrid.NBT_VIEW_TYPE, TileGrid.VIEW_TYPE_NORMAL);
tag.setInteger(TileGrid.NBT_SORTING_DIRECTION, TileGrid.SORTING_DIRECTION_DESCENDING);
tag.setInteger(TileGrid.NBT_SORTING_TYPE, TileGrid.SORTING_TYPE_NAME);
tag.setInteger(TileGrid.NBT_SEARCH_BOX_MODE, TileGrid.SEARCH_BOX_MODE_NORMAL);
stack.setTagCompound(tag);
return EnumActionResult.SUCCESS;
}
return EnumActionResult.PASS;
}
@Override
public ActionResult<ItemStack> onItemRightClick(ItemStack stack, World world, EntityPlayer player, EnumHand hand) {
if (!world.isRemote && isValid(stack)) {
World controllerWorld = DimensionManager.getWorld(getDimensionId(stack));
TileEntity controller;
if (controllerWorld != null && ((controller = controllerWorld.getTileEntity(new BlockPos(getX(stack), getY(stack), getZ(stack)))) instanceof TileController)) {
if (((TileController) controller).getWirelessGridHandler().onOpen(player, controllerWorld, hand)) {
return new ActionResult<>(EnumActionResult.SUCCESS, stack);
} else {
player.addChatComponentMessage(new TextComponentTranslation("misc.refinedstorage:wireless_grid.out_of_range"));
}
} else {
player.addChatComponentMessage(new TextComponentTranslation("misc.refinedstorage:wireless_grid.not_found"));
}
}
return super.onItemRightClick(stack, world, player, hand);
}
public static int getDimensionId(ItemStack stack) {
return stack.getTagCompound().getInteger(NBT_DIMENSION_ID);
}
public static int getX(ItemStack stack) {
return stack.getTagCompound().getInteger(NBT_CONTROLLER_X);
}
public static int getY(ItemStack stack) {
return stack.getTagCompound().getInteger(NBT_CONTROLLER_Y);
}
public static int getZ(ItemStack stack) {
return stack.getTagCompound().getInteger(NBT_CONTROLLER_Z);
} }
public static int getViewType(ItemStack stack) { public static int getViewType(ItemStack stack) {
@@ -193,12 +28,8 @@ public class ItemWirelessGrid extends ItemEnergyContainer implements ISpecialEle
return stack.getTagCompound().getInteger(TileGrid.NBT_SEARCH_BOX_MODE); return stack.getTagCompound().getInteger(TileGrid.NBT_SEARCH_BOX_MODE);
} }
private static boolean isValid(ItemStack stack) { public boolean isValid(ItemStack stack) {
return stack.hasTagCompound() return super.isValid(stack)
&& stack.getTagCompound().hasKey(NBT_CONTROLLER_X)
&& stack.getTagCompound().hasKey(NBT_CONTROLLER_Y)
&& stack.getTagCompound().hasKey(NBT_CONTROLLER_Z)
&& stack.getTagCompound().hasKey(NBT_DIMENSION_ID)
&& stack.getTagCompound().hasKey(TileGrid.NBT_VIEW_TYPE) && stack.getTagCompound().hasKey(TileGrid.NBT_VIEW_TYPE)
&& stack.getTagCompound().hasKey(TileGrid.NBT_SORTING_DIRECTION) && stack.getTagCompound().hasKey(TileGrid.NBT_SORTING_DIRECTION)
&& stack.getTagCompound().hasKey(TileGrid.NBT_SORTING_TYPE) && stack.getTagCompound().hasKey(TileGrid.NBT_SORTING_TYPE)
@@ -206,112 +37,7 @@ public class ItemWirelessGrid extends ItemEnergyContainer implements ISpecialEle
} }
@Override @Override
public boolean shouldCauseReequipAnimation(ItemStack oldStack, ItemStack newStack, boolean slotChanged) { public INetworkItem provide(INetworkItemHandler handler, EntityPlayer player, ItemStack stack) {
if (oldStack.getItem() == newStack.getItem()) { return new NetworkItemWirelessGrid(handler, player, stack);
if (isValid(oldStack) && isValid(newStack)) {
if (getX(oldStack) == getX(newStack) && getY(oldStack) == getY(newStack) && getZ(oldStack) == getZ(newStack) && getDimensionId(oldStack) == getDimensionId(newStack)) {
return false;
}
}
}
return super.shouldCauseReequipAnimation(oldStack, newStack, slotChanged);
}
@Override
public String getUnlocalizedName() {
return "item." + RS.ID + ":wireless_grid";
}
@Override
public String getUnlocalizedName(ItemStack stack) {
return getUnlocalizedName() + "." + stack.getItemDamage();
}
@Optional.Method(modid = "IC2")
@Override
public IElectricItemManager getManager(ItemStack stack) {
return this;
}
@Optional.Method(modid = "IC2")
@Override
public double charge(ItemStack stack, double amount, int tier, boolean ignoreTransferLimit, boolean simulate) {
return IntegrationIC2.toEU(receiveEnergy(stack, IntegrationIC2.toRS(amount), simulate));
}
@Optional.Method(modid = "IC2")
@Override
public double discharge(ItemStack stack, double amount, int tier, boolean ignoreTransferLimit, boolean externally, boolean simulate) {
return IntegrationIC2.toEU(extractEnergy(stack, IntegrationIC2.toRS(amount), simulate));
}
@Optional.Method(modid = "IC2")
@Override
public double getCharge(ItemStack stack) {
return IntegrationIC2.toEU(getEnergyStored(stack));
}
@Optional.Method(modid = "IC2")
@Override
public double getMaxCharge(ItemStack stack) {
return IntegrationIC2.toEU(getMaxEnergyStored(stack));
}
@Optional.Method(modid = "IC2")
@Override
public boolean canUse(ItemStack stack, double amount) {
return true;
}
@Optional.Method(modid = "IC2")
@Override
public boolean use(ItemStack stack, double amount, EntityLivingBase entity) {
return true;
}
@Optional.Method(modid = "IC2")
@Override
public void chargeFromArmor(ItemStack stack, EntityLivingBase entity) {
// NO OP
}
@Optional.Method(modid = "IC2")
@Override
public String getToolTip(ItemStack stack) {
return null;
}
@Optional.Method(modid = "IC2")
@Override
public int getTier(ItemStack stack) {
return Integer.MAX_VALUE;
}
class WirelessGridCapabilityProvider implements ICapabilityProvider {
private ItemStack stack;
public WirelessGridCapabilityProvider(ItemStack stack) {
this.stack = stack;
}
@Override
public boolean hasCapability(Capability<?> capability, @Nullable EnumFacing facing) {
return capability == CapabilityEnergy.ENERGY ||
(IntegrationTesla.isLoaded() && (capability == TeslaCapabilities.CAPABILITY_HOLDER || capability == TeslaCapabilities.CAPABILITY_CONSUMER));
}
@Override
public <T> T getCapability(Capability<T> capability, @Nullable EnumFacing facing) {
if (capability == CapabilityEnergy.ENERGY) {
return (T) new WirelessGridEnergyForge(stack);
}
if (IntegrationTesla.isLoaded() && (capability == TeslaCapabilities.CAPABILITY_HOLDER || capability == TeslaCapabilities.CAPABILITY_CONSUMER)) {
return (T) new WirelessGridEnergyTesla(stack);
}
return null;
}
} }
} }

View File

@@ -14,9 +14,9 @@ import com.raoulvdberge.refinedstorage.api.autocrafting.task.ICraftingTask;
import com.raoulvdberge.refinedstorage.api.network.INetworkMaster; import com.raoulvdberge.refinedstorage.api.network.INetworkMaster;
import com.raoulvdberge.refinedstorage.api.network.INetworkNode; import com.raoulvdberge.refinedstorage.api.network.INetworkNode;
import com.raoulvdberge.refinedstorage.api.network.INetworkNodeGraph; import com.raoulvdberge.refinedstorage.api.network.INetworkNodeGraph;
import com.raoulvdberge.refinedstorage.api.network.IWirelessGridHandler;
import com.raoulvdberge.refinedstorage.api.network.grid.IFluidGridHandler; import com.raoulvdberge.refinedstorage.api.network.grid.IFluidGridHandler;
import com.raoulvdberge.refinedstorage.api.network.grid.IItemGridHandler; import com.raoulvdberge.refinedstorage.api.network.grid.IItemGridHandler;
import com.raoulvdberge.refinedstorage.api.network.item.INetworkItemHandler;
import com.raoulvdberge.refinedstorage.api.storage.AccessType; import com.raoulvdberge.refinedstorage.api.storage.AccessType;
import com.raoulvdberge.refinedstorage.api.storage.IStorage; import com.raoulvdberge.refinedstorage.api.storage.IStorage;
import com.raoulvdberge.refinedstorage.api.storage.fluid.IFluidStorage; import com.raoulvdberge.refinedstorage.api.storage.fluid.IFluidStorage;
@@ -27,9 +27,9 @@ import com.raoulvdberge.refinedstorage.api.util.IComparer;
import com.raoulvdberge.refinedstorage.api.util.IItemStackList; import com.raoulvdberge.refinedstorage.api.util.IItemStackList;
import com.raoulvdberge.refinedstorage.apiimpl.API; import com.raoulvdberge.refinedstorage.apiimpl.API;
import com.raoulvdberge.refinedstorage.apiimpl.network.NetworkNodeGraph; import com.raoulvdberge.refinedstorage.apiimpl.network.NetworkNodeGraph;
import com.raoulvdberge.refinedstorage.apiimpl.network.WirelessGridHandler;
import com.raoulvdberge.refinedstorage.apiimpl.network.grid.FluidGridHandler; import com.raoulvdberge.refinedstorage.apiimpl.network.grid.FluidGridHandler;
import com.raoulvdberge.refinedstorage.apiimpl.network.grid.ItemGridHandler; import com.raoulvdberge.refinedstorage.apiimpl.network.grid.ItemGridHandler;
import com.raoulvdberge.refinedstorage.apiimpl.network.item.NetworkItemHandler;
import com.raoulvdberge.refinedstorage.apiimpl.storage.fluid.FluidStorageCache; import com.raoulvdberge.refinedstorage.apiimpl.storage.fluid.FluidStorageCache;
import com.raoulvdberge.refinedstorage.apiimpl.storage.item.ItemStorageCache; import com.raoulvdberge.refinedstorage.apiimpl.storage.item.ItemStorageCache;
import com.raoulvdberge.refinedstorage.block.BlockController; import com.raoulvdberge.refinedstorage.block.BlockController;
@@ -158,7 +158,7 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR
private IItemGridHandler itemGridHandler = new ItemGridHandler(this); private IItemGridHandler itemGridHandler = new ItemGridHandler(this);
private IFluidGridHandler fluidGridHandler = new FluidGridHandler(this); private IFluidGridHandler fluidGridHandler = new FluidGridHandler(this);
private IWirelessGridHandler wirelessGridHandler = new WirelessGridHandler(this); private INetworkItemHandler networkItemHandler = new NetworkItemHandler(this);
private INetworkNodeGraph nodeGraph = new NetworkNodeGraph(this); private INetworkNodeGraph nodeGraph = new NetworkNodeGraph(this);
@@ -296,7 +296,7 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR
} }
wirelessGridHandler.update(); networkItemHandler.update();
if (getType() == EnumControllerType.NORMAL) { if (getType() == EnumControllerType.NORMAL) {
if (!RS.INSTANCE.config.controllerUsesEnergy) { if (!RS.INSTANCE.config.controllerUsesEnergy) {
@@ -349,8 +349,8 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR
} }
@Override @Override
public IWirelessGridHandler getWirelessGridHandler() { public INetworkItemHandler getNetworkItemHandler() {
return wirelessGridHandler; return networkItemHandler;
} }
@Override @Override

View File

@@ -180,7 +180,7 @@ public class WirelessGrid implements IGrid {
TileController controller = getController(); TileController controller = getController();
if (controller != null) { if (controller != null) {
controller.getWirelessGridHandler().onClose(player); controller.getNetworkItemHandler().onClose(player);
} }
} }

View File

@@ -50,9 +50,9 @@ 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%% voll misc.refinedstorage:storage.full=%d%% voll
misc.refinedstorage:wireless_grid.tooltip=Verbunden mit %d, %d, %d. misc.refinedstorage:network_item.tooltip=Verbunden mit %d, %d, %d.
misc.refinedstorage:wireless_grid.out_of_range=Es gibt keine Verbindung zu einem kabellosen Übermittler. misc.refinedstorage:network_item.out_of_range=Es gibt keine Verbindung zu einem kabellosen Übermittler.
misc.refinedstorage:wireless_grid.not_found=Controller konnte nicht gefunden werden. misc.refinedstorage:network_item.not_found=Controller konnte nicht gefunden werden.
misc.refinedstorage:network_card.tooltip=Verbunden mit %d, %d, %d. misc.refinedstorage:network_card.tooltip=Verbunden mit %d, %d, %d.

View File

@@ -63,9 +63,9 @@ 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%% full misc.refinedstorage:storage.full=%d%% full
misc.refinedstorage:wireless_grid.tooltip=Linked to %d, %d, %d. misc.refinedstorage:network_item.tooltip=Linked to %d, %d, %d.
misc.refinedstorage:wireless_grid.out_of_range=There is no Wireless Transmitter in range. misc.refinedstorage:network_item.out_of_range=There is no Wireless Transmitter in range.
misc.refinedstorage:wireless_grid.not_found=Controller not found. misc.refinedstorage:network_item.not_found=Controller not found.
misc.refinedstorage:network_card.tooltip=Linked to %d, %d, %d. misc.refinedstorage:network_card.tooltip=Linked to %d, %d, %d.

View File

@@ -38,8 +38,8 @@ 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%% plein misc.refinedstorage:storage.full=%d%% plein
misc.refinedstorage:wireless_grid.out_of_range=Il n'y a pas un Émetteur sans Fil dans la gamme. misc.refinedstorage:network_item.out_of_range=Il n'y a pas un Émetteur sans Fil dans la gamme.
misc.refinedstorage:wireless_grid.not_found=Contrôleur non trouvé. misc.refinedstorage:network_item.not_found=Contrôleur non trouvé.
misc.refinedstorage:pattern.inputs=Inputs misc.refinedstorage:pattern.inputs=Inputs
misc.refinedstorage:pattern.outputs=Outputs misc.refinedstorage:pattern.outputs=Outputs

View File

@@ -52,9 +52,9 @@ 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%% vol misc.refinedstorage:storage.full=%d%% vol
misc.refinedstorage:wireless_grid.tooltip=Gelinkt aan %d, %d, %d. misc.refinedstorage:network_item.tooltip=Gelinkt aan %d, %d, %d.
misc.refinedstorage:wireless_grid.out_of_range=Er is geen Draadloze Zender binnen bereik. misc.refinedstorage:network_item.out_of_range=Er is geen Draadloze Zender binnen bereik.
misc.refinedstorage:wireless_grid.not_found=Controller niet gevonden. misc.refinedstorage:network_item.not_found=Controller niet gevonden.
misc.refinedstorage:network_card.tooltip=Gelinkt aan %d, %d, %d. misc.refinedstorage:network_card.tooltip=Gelinkt aan %d, %d, %d.

View File

@@ -38,8 +38,8 @@ 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%% full misc.refinedstorage:storage.full=%d%% full
misc.refinedstorage:wireless_grid.out_of_range=Não há Transmissor Sem Fio na gama. misc.refinedstorage:network_item.out_of_range=Não há Transmissor Sem Fio na gama.
misc.refinedstorage:wireless_grid.not_found=Controlador não encontrado. misc.refinedstorage:network_item.not_found=Controlador não encontrado.
misc.refinedstorage:pattern.inputs=Entrada misc.refinedstorage:pattern.inputs=Entrada
misc.refinedstorage:pattern.outputs=Saída misc.refinedstorage:pattern.outputs=Saída

View File

@@ -50,9 +50,9 @@ 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:wireless_grid.tooltip=Привязано к %d, %d, %d. misc.refinedstorage:network_item.tooltip=Привязано к %d, %d, %d.
misc.refinedstorage:wireless_grid.out_of_range=Не найден Передатчик misc.refinedstorage:network_item.out_of_range=Не найден Передатчик
misc.refinedstorage:wireless_grid.not_found=Не найден Контроллер misc.refinedstorage:network_item.not_found=Не найден Контроллер
misc.refinedstorage:network_card.tooltip=Привязано к %d, %d, %d. misc.refinedstorage:network_card.tooltip=Привязано к %d, %d, %d.

View File

@@ -52,9 +52,9 @@ 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:wireless_grid.tooltip=连接到 %d, %d, %d. misc.refinedstorage:network_item.tooltip=连接到 %d, %d, %d.
misc.refinedstorage:wireless_grid.out_of_range=在范围内没有可以接入的无线访问点. misc.refinedstorage:network_item.out_of_range=在范围内没有可以接入的无线访问点.
misc.refinedstorage:wireless_grid.not_found=没寻找到控制器. misc.refinedstorage:network_item.not_found=没寻找到控制器.
misc.refinedstorage:network_card.tooltip=连接到 %d, %d, %d. misc.refinedstorage:network_card.tooltip=连接到 %d, %d, %d.