Wireless transmitters with range upgrades
This commit is contained in:
@@ -15,4 +15,5 @@ public final class RefinedStorageGui {
|
||||
public static final int INTERFACE = 13;
|
||||
public static final int WIRELESS_GRID = 14;
|
||||
public static final int CRAFTING_MONITOR = 15;
|
||||
public static final int WIRELESS_TRANSMITTER = 16;
|
||||
}
|
||||
|
||||
@@ -1,8 +1,15 @@
|
||||
package refinedstorage.block;
|
||||
|
||||
import net.minecraft.block.state.IBlockState;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.util.EnumFacing;
|
||||
import net.minecraft.util.EnumHand;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.world.World;
|
||||
import refinedstorage.RefinedStorage;
|
||||
import refinedstorage.RefinedStorageGui;
|
||||
import refinedstorage.tile.TileWirelessTransmitter;
|
||||
|
||||
public class BlockWirelessTransmitter extends BlockMachine {
|
||||
@@ -14,4 +21,13 @@ public class BlockWirelessTransmitter extends BlockMachine {
|
||||
public TileEntity createTileEntity(World world, IBlockState state) {
|
||||
return new TileWirelessTransmitter();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) {
|
||||
if (!world.isRemote) {
|
||||
player.openGui(RefinedStorage.INSTANCE, RefinedStorageGui.WIRELESS_TRANSMITTER, world, pos.getX(), pos.getY(), pos.getZ());
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
54
src/main/java/refinedstorage/container/ContainerWirelessTransmitter.java
Executable file
54
src/main/java/refinedstorage/container/ContainerWirelessTransmitter.java
Executable file
@@ -0,0 +1,54 @@
|
||||
package refinedstorage.container;
|
||||
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.inventory.Slot;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import refinedstorage.RefinedStorageItems;
|
||||
import refinedstorage.container.slot.IItemValidator;
|
||||
import refinedstorage.container.slot.SlotFiltered;
|
||||
import refinedstorage.item.ItemUpgrade;
|
||||
import refinedstorage.tile.TileWirelessTransmitter;
|
||||
|
||||
public class ContainerWirelessTransmitter extends ContainerBase {
|
||||
public ContainerWirelessTransmitter(EntityPlayer player, TileWirelessTransmitter wirelessTransmitter) {
|
||||
super(player);
|
||||
|
||||
for (int i = 0; i < 9; ++i) {
|
||||
addSlotToContainer(new SlotFiltered(wirelessTransmitter, i, 8 + (i * 18), 20, new IItemValidator() {
|
||||
@Override
|
||||
public boolean isValid(ItemStack stack) {
|
||||
return stack.getItem() == RefinedStorageItems.UPGRADE && stack.getMetadata() == ItemUpgrade.TYPE_RANGE;
|
||||
}
|
||||
}));
|
||||
}
|
||||
|
||||
addPlayerInventory(8, 55);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack transferStackInSlot(EntityPlayer player, int index) {
|
||||
ItemStack stack = null;
|
||||
|
||||
Slot slot = getSlot(index);
|
||||
|
||||
if (slot != null && slot.getHasStack()) {
|
||||
stack = slot.getStack().copy();
|
||||
|
||||
if (index < 8) {
|
||||
if (!mergeItemStack(stack, 9, inventorySlots.size(), true)) {
|
||||
return null;
|
||||
}
|
||||
} else if (!mergeItemStack(stack, 0, 9, false)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
if (stack.stackSize == 0) {
|
||||
slot.putStack(null);
|
||||
} else {
|
||||
slot.onSlotChanged();
|
||||
}
|
||||
}
|
||||
|
||||
return stack;
|
||||
}
|
||||
}
|
||||
@@ -44,6 +44,8 @@ public class GuiHandler implements IGuiHandler {
|
||||
return new ContainerInterface(player, (TileInterface) tile);
|
||||
case RefinedStorageGui.CRAFTING_MONITOR:
|
||||
return new ContainerCraftingMonitor(player);
|
||||
case RefinedStorageGui.WIRELESS_TRANSMITTER:
|
||||
return new ContainerWirelessTransmitter(player, (TileWirelessTransmitter) tile);
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
@@ -107,6 +109,8 @@ public class GuiHandler implements IGuiHandler {
|
||||
return new GuiInterface((ContainerInterface) getContainer(ID, player, tile), (TileInterface) tile);
|
||||
case RefinedStorageGui.CRAFTING_MONITOR:
|
||||
return new GuiCraftingMonitor((ContainerCraftingMonitor) getContainer(ID, player, tile), (TileCraftingMonitor) tile);
|
||||
case RefinedStorageGui.WIRELESS_TRANSMITTER:
|
||||
return new GuiWirelessTransmitter((ContainerWirelessTransmitter) getContainer(ID, player, tile), (TileWirelessTransmitter) tile);
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
|
||||
37
src/main/java/refinedstorage/gui/GuiWirelessTransmitter.java
Executable file
37
src/main/java/refinedstorage/gui/GuiWirelessTransmitter.java
Executable file
@@ -0,0 +1,37 @@
|
||||
package refinedstorage.gui;
|
||||
|
||||
import refinedstorage.container.ContainerWirelessTransmitter;
|
||||
import refinedstorage.gui.sidebutton.SideButtonRedstoneMode;
|
||||
import refinedstorage.tile.TileWirelessTransmitter;
|
||||
|
||||
public class GuiWirelessTransmitter extends GuiBase {
|
||||
private TileWirelessTransmitter wirelessTransmitter;
|
||||
|
||||
public GuiWirelessTransmitter(ContainerWirelessTransmitter container, TileWirelessTransmitter wirelessTransmitter) {
|
||||
super(container, 176, 137);
|
||||
|
||||
this.wirelessTransmitter = wirelessTransmitter;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void init(int x, int y) {
|
||||
addSideButton(new SideButtonRedstoneMode(wirelessTransmitter));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void update(int x, int y) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void drawBackground(int x, int y, int mouseX, int mouseY) {
|
||||
bindTexture("gui/wireless_transmitter.png");
|
||||
|
||||
drawTexture(x, y, 0, 0, width, height);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void drawForeground(int mouseX, int mouseY) {
|
||||
drawString(7, 7, t("gui.refinedstorage:wireless_transmitter", wirelessTransmitter.getRange()));
|
||||
drawString(7, 43, t("container.inventory"));
|
||||
}
|
||||
}
|
||||
@@ -15,6 +15,7 @@ public class ItemUpgrade extends ItemBase {
|
||||
|
||||
setHasSubtypes(true);
|
||||
setMaxDamage(0);
|
||||
setMaxStackSize(1);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -11,6 +11,7 @@ import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.util.*;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.util.text.TextComponentString;
|
||||
import net.minecraft.util.text.translation.I18n;
|
||||
import net.minecraft.world.World;
|
||||
import refinedstorage.RefinedStorage;
|
||||
@@ -32,8 +33,6 @@ public class ItemWirelessGrid extends ItemEnergyContainer {
|
||||
public static final String NBT_SORTING_DIRECTION = "SortingDirection";
|
||||
public static final String NBT_SEARCH_BOX_MODE = "SearchBoxMode";
|
||||
|
||||
public static final int RANGE = 64;
|
||||
|
||||
public static final int USAGE_OPEN = 30;
|
||||
public static final int USAGE_PULL = 3;
|
||||
public static final int USAGE_PUSH = 3;
|
||||
@@ -44,7 +43,7 @@ public class ItemWirelessGrid extends ItemEnergyContainer {
|
||||
addPropertyOverride(new ResourceLocation("connected"), new IItemPropertyGetter() {
|
||||
@Override
|
||||
public float apply(ItemStack stack, World world, EntityLivingBase entity) {
|
||||
return canOpenWirelessGrid(world, entity, stack) ? 1.0f : 0.0f;
|
||||
return (hasValidNBT(stack) && getDimensionId(stack) == entity.dimension) ? 1.0f : 0.0f;
|
||||
}
|
||||
});
|
||||
|
||||
@@ -97,7 +96,7 @@ public class ItemWirelessGrid extends ItemEnergyContainer {
|
||||
list.add(I18n.translateToLocalFormatted("misc.refinedstorage:energy_stored", getEnergyStored(stack), getMaxEnergyStored(stack)));
|
||||
}
|
||||
|
||||
if (canOpenWirelessGrid(player.worldObj, player, stack)) {
|
||||
if (hasValidNBT(stack)) {
|
||||
list.add(I18n.translateToLocalFormatted("misc.refinedstorage:wireless_grid.tooltip.0", getX(stack)));
|
||||
list.add(I18n.translateToLocalFormatted("misc.refinedstorage:wireless_grid.tooltip.1", getY(stack)));
|
||||
list.add(I18n.translateToLocalFormatted("misc.refinedstorage:wireless_grid.tooltip.2", getZ(stack)));
|
||||
@@ -133,12 +132,14 @@ public class ItemWirelessGrid extends ItemEnergyContainer {
|
||||
|
||||
@Override
|
||||
public ActionResult<ItemStack> onItemRightClick(ItemStack stack, World world, EntityPlayer player, EnumHand hand) {
|
||||
if (!world.isRemote && canOpenWirelessGrid(world, player, stack)) {
|
||||
if (!world.isRemote && getDimensionId(stack) == player.dimension) {
|
||||
TileController tile = (TileController) world.getTileEntity(new BlockPos(getX(stack), getY(stack), getZ(stack)));
|
||||
|
||||
tile.onOpenWirelessGrid(player, hand);
|
||||
|
||||
return new ActionResult(EnumActionResult.SUCCESS, stack);
|
||||
if (tile.onOpenWirelessGrid(player, hand)) {
|
||||
return new ActionResult(EnumActionResult.SUCCESS, stack);
|
||||
} else {
|
||||
player.addChatComponentMessage(new TextComponentString(I18n.translateToLocal("misc.refinedstorage:wireless_grid.out_of_range")));
|
||||
}
|
||||
}
|
||||
|
||||
return new ActionResult(EnumActionResult.PASS, stack);
|
||||
@@ -172,31 +173,15 @@ public class ItemWirelessGrid extends ItemEnergyContainer {
|
||||
return stack.getTagCompound().getInteger(NBT_SEARCH_BOX_MODE);
|
||||
}
|
||||
|
||||
public static boolean isInRange(ItemStack stack, EntityLivingBase entity) {
|
||||
return (int) Math.sqrt(Math.pow(getX(stack) - entity.posX, 2) + Math.pow(getY(stack) - entity.posY, 2) + Math.pow(getZ(stack) - entity.posZ, 2)) < RANGE;
|
||||
}
|
||||
|
||||
public static boolean canOpenWirelessGrid(World world, EntityLivingBase entity, ItemStack stack) {
|
||||
if (entity != null && stack.hasTagCompound()
|
||||
private static boolean hasValidNBT(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)
|
||||
&& stack.getTagCompound().hasKey(NBT_SORTING_DIRECTION)
|
||||
&& stack.getTagCompound().hasKey(NBT_SORTING_TYPE)
|
||||
&& stack.getTagCompound().hasKey(NBT_SEARCH_BOX_MODE)) {
|
||||
if (world == null) {
|
||||
world = entity.worldObj;
|
||||
}
|
||||
|
||||
int x = getX(stack);
|
||||
int y = getY(stack);
|
||||
int z = getZ(stack);
|
||||
|
||||
return isInRange(stack, entity) && getDimensionId(stack) == entity.dimension && world.getTileEntity(new BlockPos(x, y, z)) instanceof TileController;
|
||||
}
|
||||
|
||||
return false;
|
||||
&& stack.getTagCompound().hasKey(NBT_SEARCH_BOX_MODE);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -66,6 +66,8 @@ public class TileController extends TileBase implements IEnergyReceiver, INetwor
|
||||
private EnergyStorage energy = new EnergyStorage(ENERGY_CAPACITY);
|
||||
private int energyUsage;
|
||||
|
||||
private int wirelessGridRange;
|
||||
|
||||
private boolean destroyed = false;
|
||||
|
||||
private boolean machinesHavePosition(List<TileMachine> tiles, BlockPos pos) {
|
||||
@@ -103,7 +105,13 @@ public class TileController extends TileBase implements IEnergyReceiver, INetwor
|
||||
}
|
||||
}
|
||||
|
||||
int range = 0;
|
||||
|
||||
for (TileMachine machine : newMachines) {
|
||||
if (machine instanceof TileWirelessTransmitter) {
|
||||
range += ((TileWirelessTransmitter) machine).getRange();
|
||||
}
|
||||
|
||||
if (!machinesHavePosition(machines, machine.getPos())) {
|
||||
machine.onConnected(this);
|
||||
} else {
|
||||
@@ -117,6 +125,8 @@ public class TileController extends TileBase implements IEnergyReceiver, INetwor
|
||||
}
|
||||
}
|
||||
|
||||
wirelessGridRange = range;
|
||||
|
||||
machines = newMachines;
|
||||
|
||||
storages.clear();
|
||||
@@ -201,6 +211,10 @@ public class TileController extends TileBase implements IEnergyReceiver, INetwor
|
||||
return EnumControllerType.NORMAL;
|
||||
}
|
||||
|
||||
public int getWirelessGridRange() {
|
||||
return wirelessGridRange;
|
||||
}
|
||||
|
||||
public void onDestroyed() {
|
||||
disconnectAll();
|
||||
|
||||
@@ -353,12 +367,20 @@ public class TileController extends TileBase implements IEnergyReceiver, INetwor
|
||||
return newStack;
|
||||
}
|
||||
|
||||
public void onOpenWirelessGrid(EntityPlayer player, EnumHand hand) {
|
||||
public boolean onOpenWirelessGrid(EntityPlayer player, EnumHand hand) {
|
||||
boolean inRange = (int) Math.sqrt(Math.pow(getPos().getX() - player.posX, 2) + Math.pow(getPos().getY() - player.posY, 2) + Math.pow(getPos().getZ() - player.posZ, 2)) < getWirelessGridRange();
|
||||
|
||||
if (!inRange) {
|
||||
return false;
|
||||
}
|
||||
|
||||
wirelessGridConsumers.add(new WirelessGridConsumer(player, hand, player.getHeldItem(hand)));
|
||||
|
||||
player.openGui(RefinedStorage.INSTANCE, RefinedStorageGui.WIRELESS_GRID, worldObj, HandUtils.getIdFromHand(hand), 0, 0);
|
||||
|
||||
drainEnergyFromWirelessGrid(player, ItemWirelessGrid.USAGE_OPEN);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public void onCloseWirelessGrid(EntityPlayer player) {
|
||||
|
||||
@@ -1,19 +1,151 @@
|
||||
package refinedstorage.tile;
|
||||
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.inventory.Container;
|
||||
import net.minecraft.inventory.IInventory;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.util.text.ITextComponent;
|
||||
import refinedstorage.inventory.InventorySimple;
|
||||
import refinedstorage.util.InventoryUtils;
|
||||
|
||||
public class TileWirelessTransmitter extends TileMachine implements IInventory {
|
||||
public static final int RANGE_PER_UPGRADE = 8;
|
||||
public static final int RF_PER_UPGRADE = 8;
|
||||
|
||||
private InventorySimple inventory = new InventorySimple("upgrades", 9, this);
|
||||
|
||||
public class TileWirelessTransmitter extends TileMachine {
|
||||
@Override
|
||||
public int getEnergyUsage() {
|
||||
return 0;
|
||||
return 8 + (getUpgrades() * RF_PER_UPGRADE);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateMachine() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void readFromNBT(NBTTagCompound nbt) {
|
||||
super.readFromNBT(nbt);
|
||||
|
||||
InventoryUtils.restoreInventory(inventory, 0, nbt);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void writeToNBT(NBTTagCompound nbt) {
|
||||
super.writeToNBT(nbt);
|
||||
|
||||
InventoryUtils.saveInventory(inventory, 0, nbt);
|
||||
}
|
||||
|
||||
public int getRange() {
|
||||
return 16 + (getUpgrades() * RANGE_PER_UPGRADE);
|
||||
}
|
||||
|
||||
private int getUpgrades() {
|
||||
int upgrades = 0;
|
||||
|
||||
for (int i = 0; i < 9; ++i) {
|
||||
if (inventory.getStackInSlot(i) != null) {
|
||||
upgrades++;
|
||||
}
|
||||
}
|
||||
|
||||
return upgrades;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<? extends Container> getContainer() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public IInventory getDroppedInventory() {
|
||||
return inventory;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getSizeInventory() {
|
||||
return inventory.getSizeInventory();
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack getStackInSlot(int slot) {
|
||||
return inventory.getStackInSlot(slot);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack decrStackSize(int slot, int count) {
|
||||
return inventory.decrStackSize(slot, count);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack removeStackFromSlot(int slot) {
|
||||
return inventory.removeStackFromSlot(slot);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setInventorySlotContents(int slot, ItemStack stack) {
|
||||
inventory.setInventorySlotContents(slot, stack);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getInventoryStackLimit() {
|
||||
return inventory.getInventoryStackLimit();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isUseableByPlayer(EntityPlayer player) {
|
||||
return inventory.isUseableByPlayer(player);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void openInventory(EntityPlayer player) {
|
||||
inventory.openInventory(player);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void closeInventory(EntityPlayer player) {
|
||||
inventory.closeInventory(player);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isItemValidForSlot(int slot, ItemStack stack) {
|
||||
return inventory.isItemValidForSlot(slot, stack);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getField(int id) {
|
||||
return inventory.getField(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setField(int id, int value) {
|
||||
inventory.setField(id, value);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getFieldCount() {
|
||||
return inventory.getFieldCount();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void clear() {
|
||||
inventory.clear();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return inventory.getName();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasCustomName() {
|
||||
return inventory.hasCustomName();
|
||||
}
|
||||
|
||||
@Override
|
||||
public ITextComponent getDisplayName() {
|
||||
return inventory.getDisplayName();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -56,7 +56,7 @@ public class TileGrid extends TileMachine implements IGrid {
|
||||
private InventoryCrafting craftingInventory = new InventoryCrafting(craftingContainer, 3, 3);
|
||||
private InventorySimple craftingResultInventory = new InventorySimple("crafting_result", 1);
|
||||
|
||||
private InventorySimple patternsInventory = new InventorySimple("patterns", 2);
|
||||
private InventorySimple patternsInventory = new InventorySimple("patterns", 2, this);
|
||||
|
||||
private int sortingDirection = SORTING_DIRECTION_DESCENDING;
|
||||
private int sortingType = SORTING_TYPE_NAME;
|
||||
|
||||
Reference in New Issue
Block a user