Polished security desk interface and machine interaction. Need to start integrating now, so far only complete in metallurgic infuser

This commit is contained in:
aidancbrady 2016-03-21 13:30:59 -04:00
parent 062671cdc4
commit 9c480954e3
16 changed files with 308 additions and 44 deletions

View file

@ -12,6 +12,7 @@ import mekanism.client.gui.element.GuiProgress;
import mekanism.client.gui.element.GuiProgress.IProgressInfoHandler;
import mekanism.client.gui.element.GuiProgress.ProgressBar;
import mekanism.client.gui.element.GuiRedstoneControl;
import mekanism.client.gui.element.GuiSecurityTab;
import mekanism.client.gui.element.GuiSideConfigurationTab;
import mekanism.client.gui.element.GuiSlot;
import mekanism.client.gui.element.GuiSlot.SlotOverlay;
@ -46,6 +47,7 @@ public class GuiMetallurgicInfuser extends GuiMekanism
guiElements.add(new GuiRedstoneControl(this, tileEntity, MekanismUtils.getResource(ResourceType.GUI, "GuiMetallurgicInfuser.png")));
guiElements.add(new GuiUpgradeTab(this, tileEntity, MekanismUtils.getResource(ResourceType.GUI, "GuiMetallurgicInfuser.png")));
guiElements.add(new GuiSecurityTab(this, tileEntity, MekanismUtils.getResource(ResourceType.GUI, "GuiMetallurgicInfuser.png")));
guiElements.add(new GuiSideConfigurationTab(this, tileEntity, MekanismUtils.getResource(ResourceType.GUI, "GuiMetallurgicInfuser.png")));
guiElements.add(new GuiTransporterConfigTab(this, 34, tileEntity, MekanismUtils.getResource(ResourceType.GUI, "GuiMetallurgicInfuser.png")));
guiElements.add(new GuiPowerBar(this, tileEntity, MekanismUtils.getResource(ResourceType.GUI, "GuiMetallurgicInfuser.png"), 164, 15));

View file

@ -1,6 +1,7 @@
package mekanism.client.gui;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import mekanism.api.Coord4D;
@ -10,12 +11,11 @@ import mekanism.client.sound.SoundHandler;
import mekanism.common.Mekanism;
import mekanism.common.inventory.container.ContainerSecurityDesk;
import mekanism.common.network.PacketTileEntity.TileEntityMessage;
import mekanism.common.security.ISecurity.SecurityMode;
import mekanism.common.security.ISecurityTile.SecurityMode;
import mekanism.common.tile.TileEntitySecurityDesk;
import mekanism.common.util.LangUtils;
import mekanism.common.util.MekanismUtils;
import mekanism.common.util.MekanismUtils.ResourceType;
import mekanism.common.util.SecurityUtils;
import net.minecraft.client.gui.GuiButton;
import net.minecraft.client.gui.GuiTextField;
import net.minecraft.entity.player.EntityPlayer;
@ -31,7 +31,7 @@ import cpw.mods.fml.relauncher.SideOnly;
@SideOnly(Side.CLIENT)
public class GuiSecurityDesk extends GuiMekanism
{
public static int MAX_LENGTH = 24;
public static int MAX_LENGTH = 24;
public ResourceLocation resource;
@ -44,6 +44,8 @@ public static int MAX_LENGTH = 24;
public GuiScrollList scrollList;
public GuiTextField trustedField;
public static final List<Character> SPECIAL_CHARS = Arrays.asList('-', '|');
public GuiSecurityDesk(InventoryPlayer inventory, TileEntitySecurityDesk tentity)
{
@ -66,9 +68,9 @@ public static int MAX_LENGTH = 24;
buttonList.clear();
removeButton = new GuiButton(0, guiWidth + 13, guiHeight + 116, 122, 20, LangUtils.localize("gui.remove"));
removeButton = new GuiButton(0, guiWidth + 13, guiHeight + 81, 122, 20, LangUtils.localize("gui.remove"));
trustedField = new GuiTextField(fontRendererObj, guiWidth + 35, guiHeight + 68, 86, 11);
trustedField = new GuiTextField(fontRendererObj, guiWidth + 35, guiHeight + 69, 86, 11);
trustedField.setMaxStringLength(MAX_LENGTH);
trustedField.setEnableBackgroundDrawing(false);
@ -211,7 +213,7 @@ public static int MAX_LENGTH = 24;
}
}
if(Character.isDigit(c) || Character.isLetter(c) || i == Keyboard.KEY_BACK || i == Keyboard.KEY_DELETE || i == Keyboard.KEY_LEFT || i == Keyboard.KEY_RIGHT)
if(SPECIAL_CHARS.contains(c) || Character.isDigit(c) || Character.isLetter(c) || i == Keyboard.KEY_BACK || i == Keyboard.KEY_DELETE || i == Keyboard.KEY_LEFT || i == Keyboard.KEY_RIGHT)
{
trustedField.textboxKeyTyped(c, i);
}
@ -252,16 +254,24 @@ public static int MAX_LENGTH = 24;
int xAxis = (mouseX-(width-xSize)/2);
int yAxis = (mouseY-(height-ySize)/2);
String ownerText = SecurityUtils.getOwnerDisplay(mc.thePlayer.getCommandSenderName(), tileEntity.owner);
String ownerText = EnumColor.RED + tileEntity.owner != null ? (LangUtils.localize("gui.owner") + ": " + tileEntity.owner) : LangUtils.localize("gui.noOwner");
fontRendererObj.drawString(tileEntity.getInventoryName(), (xSize/2)-(fontRendererObj.getStringWidth(tileEntity.getInventoryName())/2), 4, 0x404040);
fontRendererObj.drawString(ownerText, (xSize - 7) - fontRendererObj.getStringWidth(ownerText), (ySize - 96) + 2, 0x404040);
fontRendererObj.drawString(LangUtils.localize("container.inventory"), 8, (ySize - 96) + 2, 0x404040);
fontRendererObj.drawString(LangUtils.localize("gui.trustedPlayers"), 13, 57, 0x404040);
String security = EnumColor.GREY + LangUtils.localize("gui.security") + ": " + tileEntity.frequency.securityMode.getDisplay();
String trusted = LangUtils.localize("gui.trustedPlayers");
fontRendererObj.drawString(trusted, 74-(fontRendererObj.getStringWidth(trusted)/2), 57, 0x787878);
String security = EnumColor.RED + LangUtils.localize("gui.securityOffline");
if(tileEntity.frequency != null)
{
security = LangUtils.localize("gui.security") + ": " + tileEntity.frequency.securityMode.getDisplay();
}
fontRendererObj.drawString(security, 13, 103, 0x404040);
renderScaledText(LangUtils.localize("gui.add") + ":", 13, 67, 0x404040, 20);
renderScaledText(LangUtils.localize("gui.add") + ":", 13, 70, 0x404040, 20);
if(tileEntity.frequency != null && xAxis >= 146 && xAxis <= 162 && yAxis >= 59 && yAxis <= 75)
{

View file

@ -7,8 +7,8 @@ import mekanism.client.gui.IGuiWrapper;
import mekanism.client.sound.SoundHandler;
import mekanism.common.Mekanism;
import mekanism.common.network.PacketSecurityMode.SecurityModeMessage;
import mekanism.common.security.ISecurity;
import mekanism.common.security.ISecurity.SecurityMode;
import mekanism.common.security.ISecurityTile;
import mekanism.common.security.ISecurityTile.SecurityMode;
import mekanism.common.util.LangUtils;
import mekanism.common.util.MekanismUtils;
import mekanism.common.util.MekanismUtils.ResourceType;
@ -44,10 +44,18 @@ public class GuiSecurityTab extends GuiElement
guiObj.drawTexturedRect(guiWidth + 176, guiHeight + 32, 0, 0, 26, 26);
ISecurity tile = (ISecurity)tileEntity;
int renderX = 26 + (18*tile.getSecurity().getMode().ordinal());
ISecurityTile tile = (ISecurityTile)tileEntity;
SecurityMode mode = tile.getSecurity().getMode();
if(tile.getSecurity().getFrequency() != null && tile.getSecurity().getFrequency().override)
{
mode = tile.getSecurity().getFrequency().securityMode;
}
int renderX = 26 + (18*mode.ordinal());
if(tile.getSecurity().getOwner() != null && tile.getSecurity().getOwner().equals(mc.thePlayer.getCommandSenderName()))
if(tile.getSecurity().getOwner() != null && tile.getSecurity().getOwner().equals(mc.thePlayer.getCommandSenderName()) &&
(tile.getSecurity().getFrequency() == null || !tile.getSecurity().getFrequency().override))
{
if(xAxis >= 179 && xAxis <= 197 && yAxis >= 36 && yAxis <= 54)
{
@ -69,14 +77,21 @@ public class GuiSecurityTab extends GuiElement
{
mc.renderEngine.bindTexture(RESOURCE);
ISecurity control = (ISecurity)tileEntity;
ISecurityTile control = (ISecurityTile)tileEntity;
if(xAxis >= 179 && xAxis <= 197 && yAxis >= 36 && yAxis <= 54)
{
String securityText = EnumColor.GREY + LangUtils.localize("gui.security") + ": " + control.getSecurity().getMode().getDisplay();
String securityText = EnumColor.GREY + LangUtils.localize("gui.security") + ": " + SecurityUtils.getSecurityDisplay((TileEntity)control);
String ownerText = SecurityUtils.getOwnerDisplay(mc.thePlayer.getCommandSenderName(), control.getSecurity().getOwner());
String overrideText = EnumColor.RED + "(" + LangUtils.localize("gui.overridden") + ")";
displayTooltips(ListUtils.asList(securityText, ownerText), xAxis, yAxis);
if(SecurityUtils.isOverridden((TileEntity)control))
{
displayTooltips(ListUtils.asList(securityText, ownerText, overrideText), xAxis, yAxis);
}
else {
displayTooltips(ListUtils.asList(securityText, ownerText), xAxis, yAxis);
}
}
mc.renderEngine.bindTexture(defaultLocation);
@ -88,7 +103,7 @@ public class GuiSecurityTab extends GuiElement
@Override
public void mouseClicked(int xAxis, int yAxis, int button)
{
ISecurity control = (ISecurity)tileEntity;
ISecurityTile control = (ISecurityTile)tileEntity;
if(button == 0)
{

View file

@ -42,6 +42,7 @@ import mekanism.common.tile.TileEntityThermalEvaporationController;
import mekanism.common.tile.TileEntityThermalEvaporationValve;
import mekanism.common.util.LangUtils;
import mekanism.common.util.MekanismUtils;
import mekanism.common.util.SecurityUtils;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.client.renderer.texture.IIconRegister;
@ -483,9 +484,18 @@ public class BlockBasic extends Block implements IBlockCTM, ICustomBlockIcon
}
else if(tile instanceof TileEntitySecurityDesk)
{
String owner = ((TileEntitySecurityDesk)tile).owner;
if(!entityplayer.isSneaking())
{
entityplayer.openGui(Mekanism.instance, 57, world, x, y, z);
if(owner == null || entityplayer.getCommandSenderName().equals(owner))
{
entityplayer.openGui(Mekanism.instance, 57, world, x, y, z);
}
else {
SecurityUtils.displayNoAccess(entityplayer);
}
return true;
}
}

View file

@ -43,6 +43,9 @@ import mekanism.common.network.PacketElectricChest.ElectricChestPacketType;
import mekanism.common.network.PacketLogisticalSorterGui.LogisticalSorterGuiMessage;
import mekanism.common.network.PacketLogisticalSorterGui.SorterGuiPacket;
import mekanism.common.recipe.ShapedMekanismRecipe;
import mekanism.common.security.ISecurityTile;
import mekanism.common.security.ISecurityTile.SecurityMode;
import mekanism.common.security.ISecurityItem;
import mekanism.common.tile.TileEntityAdvancedFactory;
import mekanism.common.tile.TileEntityAmbientAccumulator;
import mekanism.common.tile.TileEntityBasicBlock;
@ -85,6 +88,7 @@ import mekanism.common.tile.TileEntitySolarNeutronActivator;
import mekanism.common.tile.TileEntityTeleporter;
import mekanism.common.util.LangUtils;
import mekanism.common.util.MekanismUtils;
import mekanism.common.util.SecurityUtils;
import net.minecraft.block.Block;
import net.minecraft.block.BlockContainer;
import net.minecraft.block.material.Material;
@ -578,7 +582,14 @@ public class BlockMachine extends BlockContainer implements ISpecialBounds, IBlo
{
if(entityplayer.isSneaking() && MachineType.get(blockType, metadata) != MachineType.ELECTRIC_CHEST)
{
dismantleBlock(world, x, y, z, false);
if(SecurityUtils.canAccess(entityplayer, tileEntity))
{
dismantleBlock(world, x, y, z, false);
}
else {
SecurityUtils.displayNoAccess(entityplayer);
}
return true;
}
@ -753,8 +764,15 @@ public class BlockMachine extends BlockContainer implements ISpecialBounds, IBlo
@Override
public float getBlockHardness(World world, int x, int y, int z)
{
TileEntity tile = world.getTileEntity(x, y, z);
if(MachineType.get(blockType, world.getBlockMetadata(x, y, z)) != MachineType.ELECTRIC_CHEST)
{
if(tile instanceof ISecurityTile)
{
return SecurityUtils.getSecurity((ISecurityTile)tile) == SecurityMode.PUBLIC ? blockHardness : -1;
}
return blockHardness;
}
else {
@ -955,6 +973,13 @@ public class BlockMachine extends BlockContainer implements ISpecialBounds, IBlo
ITierItem tierItem = (ITierItem)itemStack.getItem();
tierItem.setBaseTier(itemStack, ((TileEntityFluidTank)tileEntity).tier.getBaseTier());
}
if(tileEntity instanceof ISecurityTile)
{
ISecurityItem securityItem = (ISecurityItem)itemStack.getItem();
securityItem.setOwner(itemStack, ((ISecurityTile)tileEntity).getSecurity().getOwner());
securityItem.setSecurity(itemStack, ((ISecurityTile)tileEntity).getSecurity().getMode());
}
if(tileEntity instanceof IUpgradeTile)
{

View file

@ -34,6 +34,9 @@ import mekanism.common.integration.IC2ItemManager;
import mekanism.common.inventory.InventoryElectricChest;
import mekanism.common.network.PacketElectricChest.ElectricChestMessage;
import mekanism.common.network.PacketElectricChest.ElectricChestPacketType;
import mekanism.common.security.ISecurityItem;
import mekanism.common.security.ISecurityTile;
import mekanism.common.security.ISecurityTile.SecurityMode;
import mekanism.common.tile.TileEntityBasicBlock;
import mekanism.common.tile.TileEntityElectricBlock;
import mekanism.common.tile.TileEntityElectricChest;
@ -41,6 +44,7 @@ import mekanism.common.tile.TileEntityFactory;
import mekanism.common.tile.TileEntityFluidTank;
import mekanism.common.util.LangUtils;
import mekanism.common.util.MekanismUtils;
import mekanism.common.util.SecurityUtils;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.client.settings.GameSettings;
@ -116,7 +120,7 @@ import cpw.mods.fml.relauncher.SideOnly;
@InterfaceList({
@Interface(iface = "ic2.api.item.ISpecialElectricItem", modid = "IC2")
})
public class ItemBlockMachine extends ItemBlock implements IEnergizedItem, ISpecialElectricItem, IFactory, ISustainedInventory, ISustainedTank, IElectricChest, IEnergyContainerItem, IFluidContainerItem, ITierItem
public class ItemBlockMachine extends ItemBlock implements IEnergizedItem, ISpecialElectricItem, IFactory, ISustainedInventory, ISustainedTank, IElectricChest, IEnergyContainerItem, IFluidContainerItem, ITierItem, ISecurityItem
{
public Block metaBlock;
@ -193,6 +197,17 @@ public class ItemBlockMachine extends ItemBlock implements IEnergizedItem, ISpec
}
else if(!MekKeyHandler.getIsKeyPressed(MekanismKeyHandler.modeSwitchKey))
{
if(hasSecurity(itemstack))
{
list.add(SecurityUtils.getOwnerDisplay(entityplayer.getCommandSenderName(), getOwner(itemstack)));
list.add(EnumColor.GREY + LangUtils.localize("gui.security") + ": " + SecurityUtils.getSecurityDisplay(itemstack));
if(SecurityUtils.isOverridden(itemstack))
{
list.add(EnumColor.RED + "(" + LangUtils.localize("gui.overridden") + ")");
}
}
if(type == MachineType.BASIC_FACTORY || type == MachineType.ADVANCED_FACTORY || type == MachineType.ELITE_FACTORY)
{
list.add(EnumColor.INDIGO + LangUtils.localize("tooltip.recipeType") + ": " + EnumColor.GREY + RecipeType.values()[getRecipeType(itemstack)].getLocalizedName());
@ -301,6 +316,18 @@ public class ItemBlockMachine extends ItemBlock implements IEnergizedItem, ISpec
tile.fluidTank.setCapacity(tile.tier.storage);
}
if(tileEntity instanceof ISecurityTile)
{
ISecurityTile security = (ISecurityTile)tileEntity;
security.getSecurity().setOwner(getOwner(stack));
security.getSecurity().setMode(getSecurity(stack));
if(getOwner(stack) == null)
{
security.getSecurity().setOwner(player.getCommandSenderName());
}
}
if(tileEntity instanceof IUpgradeTile)
{
if(stack.stackTagCompound != null && stack.stackTagCompound.hasKey("upgrades"))
@ -1019,4 +1046,60 @@ public class ItemBlockMachine extends ItemBlock implements IEnergizedItem, ISpec
itemstack.stackTagCompound.setInteger("tier", tier.ordinal());
}
@Override
public String getOwner(ItemStack stack)
{
if(stack.stackTagCompound != null && stack.stackTagCompound.hasKey("owner"))
{
return stack.stackTagCompound.getString("owner");
}
return null;
}
@Override
public void setOwner(ItemStack stack, String owner)
{
if(stack.stackTagCompound == null)
{
stack.setTagCompound(new NBTTagCompound());
}
if(owner == null || owner.isEmpty())
{
stack.stackTagCompound.removeTag("owner");
return;
}
stack.stackTagCompound.setString("owner", owner);
}
@Override
public SecurityMode getSecurity(ItemStack stack)
{
if(stack.stackTagCompound == null)
{
return SecurityMode.PUBLIC;
}
return SecurityMode.values()[stack.stackTagCompound.getInteger("security")];
}
@Override
public void setSecurity(ItemStack stack, SecurityMode mode)
{
if(stack.stackTagCompound == null)
{
stack.setTagCompound(new NBTTagCompound());
}
stack.stackTagCompound.setInteger("security", mode.ordinal());
}
@Override
public boolean hasSecurity(ItemStack stack)
{
return true;
}
}

View file

@ -4,8 +4,8 @@ import io.netty.buffer.ByteBuf;
import mekanism.api.Coord4D;
import mekanism.common.PacketHandler;
import mekanism.common.network.PacketSecurityMode.SecurityModeMessage;
import mekanism.common.security.ISecurity;
import mekanism.common.security.ISecurity.SecurityMode;
import mekanism.common.security.ISecurityTile;
import mekanism.common.security.ISecurityTile.SecurityMode;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.tileentity.TileEntity;
import cpw.mods.fml.common.network.simpleimpl.IMessage;
@ -20,13 +20,13 @@ public class PacketSecurityMode implements IMessageHandler<SecurityModeMessage,
EntityPlayer player = PacketHandler.getPlayer(context);
TileEntity tileEntity = message.coord4D.getTileEntity(player.worldObj);
if(tileEntity instanceof ISecurity)
if(tileEntity instanceof ISecurityTile)
{
String owner = ((ISecurity)tileEntity).getSecurity().getOwner();
String owner = ((ISecurityTile)tileEntity).getSecurity().getOwner();
if(owner != null && player.getCommandSenderName().equals(owner))
{
((ISecurity)tileEntity).getSecurity().setMode(message.value);
((ISecurityTile)tileEntity).getSecurity().setMode(message.value);
}
}

View file

@ -1,6 +1,6 @@
package mekanism.common.security;
import mekanism.common.security.ISecurity.SecurityMode;
import mekanism.common.security.ISecurityTile.SecurityMode;
import net.minecraft.item.ItemStack;
public interface ISecurityItem

View file

@ -4,15 +4,15 @@ import mekanism.api.EnumColor;
import mekanism.common.tile.component.TileComponentSecurity;
import mekanism.common.util.LangUtils;
public interface ISecurity
public interface ISecurityTile
{
public TileComponentSecurity getSecurity();
public enum SecurityMode
{
PUBLIC(EnumColor.BRIGHT_GREEN + "security.public"),
PRIVATE(EnumColor.RED + "security.private"),
TRUSTED(EnumColor.ORANGE + "security.trusted");
PUBLIC("security.public", EnumColor.BRIGHT_GREEN),
PRIVATE("security.private", EnumColor.RED),
TRUSTED("security.trusted", EnumColor.ORANGE);
private String display;
private EnumColor color;
@ -22,9 +22,10 @@ public interface ISecurity
return color + LangUtils.localize(display);
}
private SecurityMode(String s)
private SecurityMode(String s, EnumColor c)
{
display = s;
color = c;
}
}
}

View file

@ -7,7 +7,7 @@ import java.util.ArrayList;
import mekanism.common.HashList;
import mekanism.common.PacketHandler;
import mekanism.common.frequency.Frequency;
import mekanism.common.security.ISecurity.SecurityMode;
import mekanism.common.security.ISecurityTile.SecurityMode;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;
import net.minecraft.nbt.NBTTagString;

View file

@ -32,8 +32,10 @@ import mekanism.common.recipe.RecipeHandler;
import mekanism.common.recipe.RecipeHandler.Recipe;
import mekanism.common.recipe.inputs.InfusionInput;
import mekanism.common.recipe.machines.MetallurgicInfuserRecipe;
import mekanism.common.security.ISecurityTile;
import mekanism.common.tile.component.TileComponentConfig;
import mekanism.common.tile.component.TileComponentEjector;
import mekanism.common.tile.component.TileComponentSecurity;
import mekanism.common.tile.component.TileComponentUpgrade;
import mekanism.common.util.ChargeUtils;
import mekanism.common.util.InventoryUtils;
@ -42,7 +44,7 @@ import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraftforge.common.util.ForgeDirection;
public class TileEntityMetallurgicInfuser extends TileEntityNoisyElectricBlock implements IComputerIntegration, ISideConfiguration, IUpgradeTile, IRedstoneControl, IConfigCardAccess
public class TileEntityMetallurgicInfuser extends TileEntityNoisyElectricBlock implements IComputerIntegration, ISideConfiguration, IUpgradeTile, IRedstoneControl, IConfigCardAccess, ISecurityTile
{
/** The maxiumum amount of infuse this machine can store. */
public int MAX_INFUSE = 1000;
@ -81,6 +83,7 @@ public class TileEntityMetallurgicInfuser extends TileEntityNoisyElectricBlock i
public TileComponentUpgrade upgradeComponent;
public TileComponentEjector ejectorComponent;
public TileComponentConfig configComponent;
public TileComponentSecurity securityComponent;
public TileEntityMetallurgicInfuser()
{
@ -104,6 +107,8 @@ public class TileEntityMetallurgicInfuser extends TileEntityNoisyElectricBlock i
ejectorComponent = new TileComponentEjector(this);
ejectorComponent.setOutputData(TransmissionType.ITEM, configComponent.getOutputs(TransmissionType.ITEM).get(2));
securityComponent = new TileComponentSecurity(this);
}
@Override
@ -550,6 +555,12 @@ public class TileEntityMetallurgicInfuser extends TileEntityNoisyElectricBlock i
{
return ejectorComponent;
}
@Override
public TileComponentSecurity getSecurity()
{
return securityComponent;
}
@Override
public void recalculateUpgradables(Upgrade upgrade)

View file

@ -9,7 +9,7 @@ import mekanism.common.Mekanism;
import mekanism.common.PacketHandler;
import mekanism.common.frequency.Frequency;
import mekanism.common.frequency.FrequencyManager;
import mekanism.common.security.ISecurity.SecurityMode;
import mekanism.common.security.ISecurityTile.SecurityMode;
import mekanism.common.security.ISecurityItem;
import mekanism.common.security.SecurityFrequency;
import mekanism.common.util.MekanismUtils;

View file

@ -10,7 +10,7 @@ import mekanism.common.PacketHandler;
import mekanism.common.base.ITileComponent;
import mekanism.common.frequency.Frequency;
import mekanism.common.frequency.FrequencyManager;
import mekanism.common.security.ISecurity.SecurityMode;
import mekanism.common.security.ISecurityTile.SecurityMode;
import mekanism.common.security.SecurityFrequency;
import mekanism.common.tile.TileEntityContainerBlock;
import mekanism.common.util.MekanismUtils;
@ -34,6 +34,11 @@ public class TileComponentSecurity implements ITileComponent
tile.components.add(this);
}
public SecurityFrequency getFrequency()
{
return frequency;
}
public String getOwner()
{
return owner;

View file

@ -19,6 +19,7 @@ import mekanism.common.block.BlockMachine.MachineType;
import mekanism.common.inventory.InventoryBin;
import mekanism.common.recipe.ShapedMekanismRecipe;
import mekanism.common.recipe.ShapelessMekanismRecipe;
import mekanism.common.security.ISecurityItem;
import net.minecraft.block.Block;
import net.minecraft.inventory.InventoryCrafting;
import net.minecraft.item.Item;
@ -150,6 +151,22 @@ public class RecipeUtils
}
}
if(toReturn.getItem() instanceof ISecurityItem)
{
for(int i = 0; i < 9; i++)
{
ItemStack itemstack = inv.getStackInSlot(i);
if(itemstack.getItem() instanceof ISecurityItem)
{
((ISecurityItem)toReturn.getItem()).setOwner(toReturn, ((ISecurityItem)itemstack.getItem()).getOwner(itemstack));
((ISecurityItem)toReturn.getItem()).setSecurity(toReturn, ((ISecurityItem)itemstack.getItem()).getSecurity(itemstack));
break;
}
}
}
if(toReturn.getItem() instanceof IFluidContainerItem)
{
FluidStack fluidFound = null;

View file

@ -3,13 +3,14 @@ package mekanism.common.util;
import mekanism.api.EnumColor;
import mekanism.common.Mekanism;
import mekanism.common.frequency.Frequency;
import mekanism.common.security.ISecurity;
import mekanism.common.security.ISecurity.SecurityMode;
import mekanism.common.security.ISecurityItem;
import mekanism.common.security.ISecurityTile;
import mekanism.common.security.ISecurityTile.SecurityMode;
import mekanism.common.security.SecurityFrequency;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.ChatComponentText;
public final class SecurityUtils
{
@ -27,12 +28,12 @@ public final class SecurityUtils
public static boolean canAccess(EntityPlayer player, TileEntity tile)
{
if(tile == null || !(tile instanceof ISecurity))
if(tile == null || !(tile instanceof ISecurityTile))
{
return true;
}
ISecurity security = (ISecurity)tile;
ISecurityTile security = (ISecurityTile)tile;
return canAccess(security.getSecurity().getMode(), player.getCommandSenderName(), security.getSecurity().getOwner());
}
@ -93,4 +94,85 @@ public final class SecurityUtils
return EnumColor.GREY + LangUtils.localize("gui.owner") + ": " + (user.equals(owner) ? EnumColor.BRIGHT_GREEN : EnumColor.RED) + owner;
}
public static void displayNoAccess(EntityPlayer player)
{
player.addChatMessage(new ChatComponentText(EnumColor.DARK_BLUE + "[Mekanism] " + EnumColor.RED + LangUtils.localize("gui.noAccessDesc")));
}
public static SecurityMode getSecurity(ISecurityTile security)
{
SecurityFrequency freq = security.getSecurity().getFrequency();
if(freq != null && freq.override)
{
return freq.securityMode;
}
return security.getSecurity().getMode();
}
public static String getSecurityDisplay(ItemStack stack)
{
ISecurityItem security = (ISecurityItem)stack.getItem();
SecurityMode mode = security.getSecurity(stack);
if(security.getOwner(stack) != null)
{
SecurityFrequency freq = getFrequency(security.getOwner(stack));
if(freq != null && freq.override)
{
mode = freq.securityMode;
}
}
return mode.getDisplay();
}
public static String getSecurityDisplay(TileEntity tile)
{
ISecurityTile security = (ISecurityTile)tile;
SecurityMode mode = security.getSecurity().getMode();
if(security.getSecurity().getOwner() != null)
{
SecurityFrequency freq = getFrequency(security.getSecurity().getOwner());
if(freq != null && freq.override)
{
mode = freq.securityMode;
}
}
return mode.getDisplay();
}
public static boolean isOverridden(ItemStack stack)
{
ISecurityItem security = (ISecurityItem)stack.getItem();
if(security.getOwner(stack) == null)
{
return false;
}
SecurityFrequency freq = getFrequency(security.getOwner(stack));
return freq != null && freq.override;
}
public static boolean isOverridden(TileEntity tile)
{
ISecurityTile security = (ISecurityTile)tile;
if(security.getSecurity().getOwner() == null)
{
return false;
}
SecurityFrequency freq = getFrequency(security.getSecurity().getOwner());
return freq != null && freq.override;
}
}

View file

@ -545,9 +545,12 @@ gui.noOwner=No Owner
gui.securityOverride=Security Override
gui.remove=Remove
gui.trustedPlayers=Trusted Players
gui.publicMode=Public Mode (universal access)
gui.privateMode=Private Mode (owner-exclusive access)
gui.trustedMode=Trusted Mode (owner and trusted player access)
gui.publicMode=Public Mode
gui.privateMode=Private Mode
gui.trustedMode=Trusted Mode
gui.securityOffline=Security Offline
gui.noAccessDesc=You don't have access to this block.
gui.overridden=Overridden
gui.reactor.injectionRate=Injection Rate