Fixed wireless signal starting from Controller instead of per Wireless Transmitter individually, fixes #161

This commit is contained in:
Raoul Van den Berge
2016-07-06 12:01:03 +02:00
parent 683bdf02e2
commit 6feb3f2fec
9 changed files with 53 additions and 30 deletions

View File

@@ -3,6 +3,7 @@
### 0.8.6
**Bugfixes**
- Fixed External Storage disconnecting on world reload
- Fixed wireless signal starting from Controller instead of per Wireless Transmitter individually
- Huge performance improvements to large networks
### 0.8.5

View File

@@ -30,11 +30,6 @@ public interface IWirelessGridHandler {
*/
void onClose(EntityPlayer player);
/**
* @return The range wireless grids in this network can reach
*/
int getRange();
/**
* Drains energy from the wireless grid of a player.
*

View File

@@ -0,0 +1,18 @@
package refinedstorage.api.network;
import net.minecraft.util.math.BlockPos;
/**
* Represents a node that can send a wireless signal.
*/
public interface IWirelessTransmitter {
/**
* @return The range in blocks of this transmitter, starting from {@link IWirelessTransmitter#getOrigin()}
*/
int getRange();
/**
* @return The position where the wireless signal starts
*/
BlockPos getOrigin();
}

View File

@@ -8,12 +8,8 @@ import refinedstorage.RefinedStorage;
import refinedstorage.RefinedStorageGui;
import refinedstorage.RefinedStorageItems;
import refinedstorage.RefinedStorageUtils;
import refinedstorage.api.network.INetworkMaster;
import refinedstorage.api.network.INetworkNode;
import refinedstorage.api.network.IWirelessGridHandler;
import refinedstorage.api.network.WirelessGridConsumer;
import refinedstorage.api.network.*;
import refinedstorage.item.ItemWirelessGrid;
import refinedstorage.tile.TileWirelessTransmitter;
import java.util.ArrayList;
import java.util.Iterator;
@@ -54,9 +50,27 @@ public class WirelessGridHandler implements IWirelessGridHandler {
@Override
public boolean onOpen(EntityPlayer player, EnumHand hand) {
int distance = (int) Math.sqrt(Math.pow(network.getPosition().getX() - player.posX, 2) + Math.pow(network.getPosition().getY() - player.posY, 2) + Math.pow(network.getPosition().getZ() - player.posZ, 2));
boolean inRange = false;
if (distance > getRange()) {
for (INetworkNode node : network.getNodes()) {
if (node instanceof IWirelessTransmitter) {
IWirelessTransmitter transmitter = (IWirelessTransmitter) node;
int distance = (int) 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;
}
@@ -80,19 +94,6 @@ public class WirelessGridHandler implements IWirelessGridHandler {
}
}
@Override
public int getRange() {
int range = 0;
for (INetworkNode node : network.getNodes()) {
if (node instanceof TileWirelessTransmitter) {
range += ((TileWirelessTransmitter) node).getRange();
}
}
return range;
}
@Override
public void drainEnergy(EntityPlayer player, int energy) {
WirelessGridConsumer consumer = getConsumer(player);

View File

@@ -3,18 +3,20 @@ package refinedstorage.tile;
import net.minecraft.inventory.Container;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.math.BlockPos;
import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.items.CapabilityItemHandler;
import net.minecraftforge.items.IItemHandler;
import refinedstorage.RefinedStorage;
import refinedstorage.RefinedStorageItems;
import refinedstorage.RefinedStorageUtils;
import refinedstorage.api.network.IWirelessTransmitter;
import refinedstorage.container.ContainerWirelessTransmitter;
import refinedstorage.inventory.BasicItemHandler;
import refinedstorage.inventory.BasicItemValidator;
import refinedstorage.item.ItemUpgrade;
public class TileWirelessTransmitter extends TileNode {
public class TileWirelessTransmitter extends TileNode implements IWirelessTransmitter {
private BasicItemHandler upgrades = new BasicItemHandler(4, this, new BasicItemValidator(RefinedStorageItems.UPGRADE, ItemUpgrade.TYPE_RANGE));
@Override
@@ -42,10 +44,16 @@ public class TileWirelessTransmitter extends TileNode {
return tag;
}
@Override
public int getRange() {
return RefinedStorage.INSTANCE.wirelessTransmitterBaseRange + (RefinedStorageUtils.getUpgradeCount(upgrades, ItemUpgrade.TYPE_RANGE) * RefinedStorage.INSTANCE.wirelessTransmitterRangePerUpgrade);
}
@Override
public BlockPos getOrigin() {
return pos;
}
public BasicItemHandler getUpgrades() {
return upgrades;
}

View File

@@ -44,7 +44,7 @@ misc.refinedstorage:storage.full=%d%% full
misc.refinedstorage:wireless_grid.tooltip.0=X: %d
misc.refinedstorage:wireless_grid.tooltip.1=Y: %d
misc.refinedstorage:wireless_grid.tooltip.2=Z: %d
misc.refinedstorage:wireless_grid.out_of_range=Controller out of range.
misc.refinedstorage:wireless_grid.out_of_range=There is no Wireless Transmitter in range.
misc.refinedstorage:wireless_grid.not_found=Controller not found.
misc.refinedstorage:pattern.inputs=Inputs

View File

@@ -44,7 +44,7 @@ misc.refinedstorage:storage.full=%d%% plein
misc.refinedstorage:wireless_grid.tooltip.0=X: %d
misc.refinedstorage:wireless_grid.tooltip.1=Y: %d
misc.refinedstorage:wireless_grid.tooltip.2=Z: %d
misc.refinedstorage:wireless_grid.out_of_range=Contrôleur hors de portés.
misc.refinedstorage:wireless_grid.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:pattern.inputs=Inputs

View File

@@ -44,7 +44,7 @@ misc.refinedstorage:storage.full=%d%% vol
misc.refinedstorage:wireless_grid.tooltip.0=X: %d
misc.refinedstorage:wireless_grid.tooltip.1=Y: %d
misc.refinedstorage:wireless_grid.tooltip.2=Z: %d
misc.refinedstorage:wireless_grid.out_of_range=Controller buiten bereik.
misc.refinedstorage:wireless_grid.out_of_range=Er is geen Draadloze Zender binnen bereik.
misc.refinedstorage:wireless_grid.not_found=Controller niet gevonden.
misc.refinedstorage:pattern.inputs=Inputs

View File

@@ -44,7 +44,7 @@ misc.refinedstorage:storage.full=%d%% full
misc.refinedstorage:wireless_grid.tooltip.0=X: %d
misc.refinedstorage:wireless_grid.tooltip.1=Y: %d
misc.refinedstorage:wireless_grid.tooltip.2=Z: %d
misc.refinedstorage:wireless_grid.out_of_range=Controlador fora de alcance.
misc.refinedstorage:wireless_grid.out_of_range=Não há Transmissor Sem Fio na gama.
misc.refinedstorage:wireless_grid.not_found=Controlador não encontrado.
misc.refinedstorage:pattern.inputs=Entrada