diff --git a/resources/assets/storagedrawers/lang/en_US.lang b/resources/assets/storagedrawers/lang/en_US.lang index 87762c6..478f451 100644 --- a/resources/assets/storagedrawers/lang/en_US.lang +++ b/resources/assets/storagedrawers/lang/en_US.lang @@ -32,6 +32,8 @@ item.storagedrawers.upgradeSorting.name=Sorting Upgrade item.storagedrawers.upgradeSorting.description=For Refined Relocation item.storagedrawers.shroudKey.name=Concealment Key item.storagedrawers.shroudKey.description=Show or hide item labels +item.storagedrawers.personalKey.name=Personal Key +item.storagedrawers.personalKey.description=Protect access from other players item.storagedrawers.tape.name=Packing Tape item.storagedrawers.tape.description=Seals drawers for moving @@ -97,6 +99,7 @@ storageDrawers.waila.nolimit=Stack Limit: ∞ storageDrawers.waila.locked=Locked storageDrawers.waila.void=Void storageDrawers.waila.sorting=Sorting +storageDrawers.waila.protected=Protected # Configuration storageDrawers.config.title=Storage Drawers Configuration @@ -132,6 +135,7 @@ storageDrawers.config.prop.enableIndicatorUpgrades=Enable Indicator Upgrades storageDrawers.config.prop.enableStorageUpgrades=Enable Storage Upgrades storageDrawers.config.prop.enableLockUpgrades=Enable Drawer Locking storageDrawers.config.prop.enableShroudUpgrades=Enable Item Concealing +storageDrawers.config.prop.enablePersonalUpgrades=Enable Access Protection storageDrawers.config.prop.enableVoidUpgrades=Enable Void Upgrade storageDrawers.config.prop.enableCreativeUpgrades=Enable Creative Upgrade storageDrawers.config.prop.enableSortingUpgrades=Enable Sorting Upgrade diff --git a/resources/assets/storagedrawers/textures/blocks/indicator/claim_icon.png b/resources/assets/storagedrawers/textures/blocks/indicator/claim_icon.png new file mode 100644 index 0000000..a054a47 Binary files /dev/null and b/resources/assets/storagedrawers/textures/blocks/indicator/claim_icon.png differ diff --git a/resources/assets/storagedrawers/textures/blocks/indicator/claim_lock_icon.png b/resources/assets/storagedrawers/textures/blocks/indicator/claim_lock_icon.png new file mode 100644 index 0000000..47e4c5f Binary files /dev/null and b/resources/assets/storagedrawers/textures/blocks/indicator/claim_lock_icon.png differ diff --git a/resources/assets/storagedrawers/textures/items/drawer_key_personal.png b/resources/assets/storagedrawers/textures/items/drawer_key_personal.png new file mode 100644 index 0000000..1b36446 Binary files /dev/null and b/resources/assets/storagedrawers/textures/items/drawer_key_personal.png differ diff --git a/src/com/jaquadro/minecraft/storagedrawers/api/storage/attribute/IProtectable.java b/src/com/jaquadro/minecraft/storagedrawers/api/storage/attribute/IProtectable.java new file mode 100644 index 0000000..e076dc8 --- /dev/null +++ b/src/com/jaquadro/minecraft/storagedrawers/api/storage/attribute/IProtectable.java @@ -0,0 +1,8 @@ +package com.jaquadro.minecraft.storagedrawers.api.storage.attribute; + +/** + * Created by Justin on 2/8/2016. + */ +public interface IProtectable +{ +} diff --git a/src/com/jaquadro/minecraft/storagedrawers/block/BlockDrawers.java b/src/com/jaquadro/minecraft/storagedrawers/block/BlockDrawers.java index b51188f..09cc1b8 100644 --- a/src/com/jaquadro/minecraft/storagedrawers/block/BlockDrawers.java +++ b/src/com/jaquadro/minecraft/storagedrawers/block/BlockDrawers.java @@ -99,6 +99,10 @@ public class BlockDrawers extends BlockContainer implements IExtendedBlockClickH @SideOnly(Side.CLIENT) private IIcon iconLock; @SideOnly(Side.CLIENT) + private IIcon iconClaim; + @SideOnly(Side.CLIENT) + private IIcon iconClaimLock; + @SideOnly(Side.CLIENT) private IIcon iconVoid; @SideOnly(Side.CLIENT) @@ -297,6 +301,9 @@ public class BlockDrawers extends BlockContainer implements IExtendedBlockClickH TileEntityDrawers tileDrawers = getTileEntitySafe(world, x, y, z); ItemStack item = player.inventory.getCurrentItem(); + if (tileDrawers.getOwner() != null && !player.getPersistentID().equals(tileDrawers.getOwner())) + return false; + if (StorageDrawers.config.cache.debugTrace) { FMLLog.log(StorageDrawers.MOD_ID, Level.INFO, "BlockDrawers.onBlockActivated"); FMLLog.log(StorageDrawers.MOD_ID, Level.INFO, (item == null) ? " null item" : " " + item.toString()); @@ -340,6 +347,15 @@ public class BlockDrawers extends BlockContainer implements IExtendedBlockClickH tileDrawers.setIsShrouded(!tileDrawers.isShrouded()); return true; } + else if (item.getItem() == ModItems.personalKey) { + if (tileDrawers.getOwner() == null) + tileDrawers.setOwner(player.getPersistentID()); + else if (player.getPersistentID().equals(tileDrawers.getOwner())) + tileDrawers.setOwner(null); + else + return false; + return true; + } else if (item.getItem() == ModItems.tape) return false; } @@ -433,6 +449,9 @@ public class BlockDrawers extends BlockContainer implements IExtendedBlockClickH if (tileDrawers.isSealed()) return; + if (tileDrawers.getOwner() != null && !tileDrawers.getOwner().equals(player.getPersistentID())) + return; + int slot = getDrawerSlot(side, hitX, hitY, hitZ); IDrawer drawer = tileDrawers.getDrawer(slot); @@ -791,8 +810,15 @@ public class BlockDrawers extends BlockContainer implements IExtendedBlockClickH } @SideOnly(Side.CLIENT) - public IIcon getLockIcon () { - return iconLock; + public IIcon getLockIcon (boolean locked, boolean claimed) { + if (locked && claimed) + return iconClaimLock; + else if (locked) + return iconLock; + else if (claimed) + return iconClaim; + else + return null; } @SideOnly(Side.CLIENT) @@ -854,6 +880,8 @@ public class BlockDrawers extends BlockContainer implements IExtendedBlockClickH iconIndicator4[1] = register.registerIcon(StorageDrawers.MOD_ID + ":indicator/indicator_4_on"); iconLock = register.registerIcon(StorageDrawers.MOD_ID + ":indicator/lock_icon"); + iconClaim = register.registerIcon(StorageDrawers.MOD_ID + ":indicator/claim_icon"); + iconClaimLock = register.registerIcon(StorageDrawers.MOD_ID + ":indicator/claim_lock_icon"); iconVoid = register.registerIcon(StorageDrawers.MOD_ID + ":indicator/void_icon"); loadBlockConfig(); diff --git a/src/com/jaquadro/minecraft/storagedrawers/block/tile/TileEntityDrawers.java b/src/com/jaquadro/minecraft/storagedrawers/block/tile/TileEntityDrawers.java index 0010a8f..a171e7b 100644 --- a/src/com/jaquadro/minecraft/storagedrawers/block/tile/TileEntityDrawers.java +++ b/src/com/jaquadro/minecraft/storagedrawers/block/tile/TileEntityDrawers.java @@ -47,6 +47,7 @@ public abstract class TileEntityDrawers extends BaseTileEntity implements IDrawe private boolean shrouded = false; private boolean taped = false; private boolean hideUpgrade = false; + private UUID owner; private EnumSet lockAttributes = null; @@ -241,6 +242,24 @@ public abstract class TileEntityDrawers extends BaseTileEntity implements IDrawe } } + public UUID getOwner () { + if (!StorageDrawers.config.cache.enablePersonalUpgrades) + return null; + + return owner; + } + + public void setOwner (UUID owner) { + if ((this.owner != null && !this.owner.equals(owner)) || (owner != null && !owner.equals(this.owner))) { + this.owner = owner; + + if (worldObj != null && !worldObj.isRemote) { + markDirty(); + worldObj.markBlockForUpdate(xCoord, yCoord, zCoord); + } + } + } + public boolean shouldHideUpgrades () { return hideUpgrade; } @@ -476,6 +495,10 @@ public abstract class TileEntityDrawers extends BaseTileEntity implements IDrawe if (tag.hasKey("Shr")) shrouded = tag.getBoolean("Shr"); + owner = null; + if (tag.hasKey("Own")) + owner = UUID.fromString(tag.getString("Own")); + hideUpgrade = false; if (tag.hasKey("HideUp")) hideUpgrade = tag.getBoolean("HideUp"); @@ -517,6 +540,9 @@ public abstract class TileEntityDrawers extends BaseTileEntity implements IDrawe if (shrouded) tag.setBoolean("Shr", shrouded); + if (owner != null) + tag.setString("Own", owner.toString()); + if (hideUpgrade) tag.setBoolean("HideUp", hideUpgrade); diff --git a/src/com/jaquadro/minecraft/storagedrawers/client/renderer/DrawersRenderer.java b/src/com/jaquadro/minecraft/storagedrawers/client/renderer/DrawersRenderer.java index d451ee5..8f3f350 100644 --- a/src/com/jaquadro/minecraft/storagedrawers/client/renderer/DrawersRenderer.java +++ b/src/com/jaquadro/minecraft/storagedrawers/client/renderer/DrawersRenderer.java @@ -136,7 +136,7 @@ public class DrawersRenderer implements ISimpleBlockRenderingHandler if (StorageDrawers.config.cache.enableIndicatorUpgrades) renderIndicator(block, x, y, z, side, renderer, tile.getEffectiveStatusLevel()); if (StorageDrawers.config.cache.enableLockUpgrades) - renderLock(block, x, y, z, side, renderer, tile.isLocked(LockAttribute.LOCK_POPULATED)); + renderLock(block, x, y, z, side, renderer, tile.isLocked(LockAttribute.LOCK_POPULATED), tile.getOwner() != null); if (StorageDrawers.config.cache.enableVoidUpgrades) renderVoid(block, x, y, z, side, renderer, tile.isVoid()); if (StorageDrawers.config.cache.enableTape) @@ -147,12 +147,12 @@ public class DrawersRenderer implements ISimpleBlockRenderingHandler return true; } - private void renderLock (BlockDrawers block, int x, int y, int z, int side, RenderBlocks renderer, boolean locked) { - if (!locked) + private void renderLock (BlockDrawers block, int x, int y, int z, int side, RenderBlocks renderer, boolean locked, boolean owned) { + if (!locked && !owned) return; double depth = block.halfDepth ? .5 : 1; - IIcon iconLock = block.getLockIcon(); + IIcon iconLock = block.getLockIcon(locked, owned); RenderHelper.instance.setRenderBounds(0.46875, 0.9375, 0, 0.53125, 1, depth + .005); RenderHelper.instance.state.setRotateTransform(RenderHelper.ZPOS, side); diff --git a/src/com/jaquadro/minecraft/storagedrawers/config/ConfigManager.java b/src/com/jaquadro/minecraft/storagedrawers/config/ConfigManager.java index 9e671a6..e346d29 100644 --- a/src/com/jaquadro/minecraft/storagedrawers/config/ConfigManager.java +++ b/src/com/jaquadro/minecraft/storagedrawers/config/ConfigManager.java @@ -60,6 +60,7 @@ public class ConfigManager public boolean enableVoidUpgrades; public boolean enableCreativeUpgrades; public boolean enableShroudUpgrades; + public boolean enablePersonalUpgrades; public boolean enableSortingUpgrades; public boolean renderStorageUpgrades; public boolean enableDrawerUI; @@ -229,6 +230,7 @@ public class ConfigManager cache.enableVoidUpgrades = config.get(Configuration.CATEGORY_GENERAL, "enableVoidUpgrades", true).setLanguageKey(LANG_PREFIX + "prop.enableVoidUpgrades").setRequiresMcRestart(true).getBoolean(); cache.enableCreativeUpgrades = config.get(Configuration.CATEGORY_GENERAL, "enableCreativeUpgrades", true).setLanguageKey(LANG_PREFIX + "prop.enableCreativeUpgrades").setRequiresMcRestart(true).getBoolean(); cache.enableShroudUpgrades = config.get(Configuration.CATEGORY_GENERAL, "enableShroudUpgrades", true).setLanguageKey(LANG_PREFIX + "prop.enableShroudUpgrades").setRequiresMcRestart(true).getBoolean(); + cache.enablePersonalUpgrades = config.get(Configuration.CATEGORY_GENERAL, "enablePersonalUpgrades", true).setLanguageKey(LANG_PREFIX + "prop.enablePersonalUpgrades").setRequiresMcRestart(true).getBoolean(); cache.enableSortingUpgrades = config.get(Configuration.CATEGORY_GENERAL, "enableSortingUpgrades", true).setLanguageKey(LANG_PREFIX + "prop.enableSortingUpgrades").setRequiresMcRestart(true).getBoolean(); cache.enableTape = config.get(Configuration.CATEGORY_GENERAL, "enableTape", true).setLanguageKey(LANG_PREFIX + "prop.enableTape").setRequiresMcRestart(true).getBoolean(); cache.itemRenderType = config.get(Configuration.CATEGORY_GENERAL, "itemRenderType", "fast", null, new String[]{"fancy", "fast"}).setLanguageKey(LANG_PREFIX + "prop.itemRenderType").getString(); diff --git a/src/com/jaquadro/minecraft/storagedrawers/core/ModItems.java b/src/com/jaquadro/minecraft/storagedrawers/core/ModItems.java index a16346f..d989b92 100644 --- a/src/com/jaquadro/minecraft/storagedrawers/core/ModItems.java +++ b/src/com/jaquadro/minecraft/storagedrawers/core/ModItems.java @@ -14,6 +14,7 @@ public class ModItems public static ItemUpgradeVoid upgradeVoid; public static ItemUpgradeCreative upgradeCreative; public static ItemShroudKey shroudKey; + public static ItemPersonalKey personalKey; public static ItemTape tape; public void init () { @@ -24,6 +25,7 @@ public class ModItems upgradeVoid = new ItemUpgradeVoid(makeName("upgradeVoid")); upgradeCreative = new ItemUpgradeCreative(makeName("upgradeCreative")); shroudKey = new ItemShroudKey(makeName("shroudKey")); + personalKey = new ItemPersonalKey(makeName("personalKey")); tape = new ItemTape(makeName("tape")); GameRegistry.registerItem(upgradeTemplate, "upgradeTemplate"); @@ -40,6 +42,8 @@ public class ModItems GameRegistry.registerItem(upgradeLock, "upgradeLock"); if (StorageDrawers.config.cache.enableShroudUpgrades) GameRegistry.registerItem(shroudKey, "shroudKey"); + if (StorageDrawers.config.cache.enablePersonalUpgrades) + GameRegistry.registerItem(personalKey, "personalKey"); if (StorageDrawers.config.cache.enableTape) GameRegistry.registerItem(tape, "tape"); } diff --git a/src/com/jaquadro/minecraft/storagedrawers/core/ModRecipes.java b/src/com/jaquadro/minecraft/storagedrawers/core/ModRecipes.java index 764c1db..0a294d7 100644 --- a/src/com/jaquadro/minecraft/storagedrawers/core/ModRecipes.java +++ b/src/com/jaquadro/minecraft/storagedrawers/core/ModRecipes.java @@ -116,6 +116,10 @@ public class ModRecipes GameRegistry.addShapelessRecipe(new ItemStack(ModItems.shroudKey), ModItems.upgradeLock, Items.ender_eye); } + if (config.cache.enablePersonalUpgrades) { + GameRegistry.addShapelessRecipe(new ItemStack(ModItems.personalKey), ModItems.upgradeLock, Items.name_tag); + } + if (config.cache.enableTape) { GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModItems.tape), " x ", "yyy", 'x', "slimeball", 'y', Items.paper)); diff --git a/src/com/jaquadro/minecraft/storagedrawers/integration/Waila.java b/src/com/jaquadro/minecraft/storagedrawers/integration/Waila.java index 1568d5f..42131f1 100644 --- a/src/com/jaquadro/minecraft/storagedrawers/integration/Waila.java +++ b/src/com/jaquadro/minecraft/storagedrawers/integration/Waila.java @@ -13,6 +13,7 @@ import mcp.mobius.waila.api.IWailaConfigHandler; import mcp.mobius.waila.api.IWailaDataAccessor; import mcp.mobius.waila.api.IWailaDataProvider; import mcp.mobius.waila.api.IWailaRegistrar; +import net.minecraft.client.Minecraft; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; @@ -61,46 +62,47 @@ public class Waila extends IntegrationModule public List getWailaBody (ItemStack itemStack, List currenttip, IWailaDataAccessor accessor, IWailaConfigHandler config) { TileEntityDrawers tile = (TileEntityDrawers) accessor.getTileEntity(); - IDrawerGroup group = tile; - for (int i = 0; i < group.getDrawerCount(); i++) { - if (!group.isDrawerEnabled(i)) - continue; + if (tile.getOwner() == null || tile.getOwner().equals(Minecraft.getMinecraft().thePlayer.getPersistentID())) { + IDrawerGroup group = tile; + for (int i = 0; i < group.getDrawerCount(); i++) { + if (!group.isDrawerEnabled(i)) + continue; - String name = StatCollector.translateToLocal("storageDrawers.waila.empty"); + String name = StatCollector.translateToLocal("storageDrawers.waila.empty"); - IDrawer drawer = group.getDrawer(i); - ItemStack stack = drawer.getStoredItemPrototype(); - if (stack != null && stack.getItem() != null) { - String stackName = stack.getDisplayName(); - List handlers = StorageDrawers.wailaRegistry.getTooltipHandlers(); - for (int j = 0, n = handlers.size(); j < n; j++) - stackName = handlers.get(j).transformItemName(drawer, stackName); + IDrawer drawer = group.getDrawer(i); + ItemStack stack = drawer.getStoredItemPrototype(); + if (stack != null && stack.getItem() != null) { + String stackName = stack.getDisplayName(); + List handlers = StorageDrawers.wailaRegistry.getTooltipHandlers(); + for (int j = 0, n = handlers.size(); j < n; j++) + stackName = handlers.get(j).transformItemName(drawer, stackName); - if (drawer.getStoredItemCount() == Integer.MAX_VALUE) - name = stackName + " [\u221E]"; - else if (drawer instanceof IFractionalDrawer && ((IFractionalDrawer) drawer).getConversionRate() > 1) - name = stackName + ((i == 0) ? " [" : " [+") + ((IFractionalDrawer) drawer).getStoredItemRemainder() + "]"; - else if (StorageDrawers.config.cache.stackRemainderWaila) { - int stacks = drawer.getStoredItemCount() / drawer.getStoredItemStackSize(); - int remainder = drawer.getStoredItemCount() - (stacks * drawer.getStoredItemStackSize()); - if (stacks > 0 && remainder > 0) - name = stackName + " [" + stacks + "x" + drawer.getStoredItemStackSize() + " + " + remainder + "]"; - else if (stacks > 0) - name = stackName + " [" + stacks + "x" + drawer.getStoredItemStackSize() + "]"; - else - name = stackName + " [" + remainder + "]"; + if (drawer.getStoredItemCount() == Integer.MAX_VALUE) + name = stackName + " [\u221E]"; + else if (drawer instanceof IFractionalDrawer && ((IFractionalDrawer) drawer).getConversionRate() > 1) + name = stackName + ((i == 0) ? " [" : " [+") + ((IFractionalDrawer) drawer).getStoredItemRemainder() + "]"; + else if (StorageDrawers.config.cache.stackRemainderWaila) { + int stacks = drawer.getStoredItemCount() / drawer.getStoredItemStackSize(); + int remainder = drawer.getStoredItemCount() - (stacks * drawer.getStoredItemStackSize()); + if (stacks > 0 && remainder > 0) + name = stackName + " [" + stacks + "x" + drawer.getStoredItemStackSize() + " + " + remainder + "]"; + else if (stacks > 0) + name = stackName + " [" + stacks + "x" + drawer.getStoredItemStackSize() + "]"; + else + name = stackName + " [" + remainder + "]"; + } else + name = stackName + " [" + drawer.getStoredItemCount() + "]"; } - else - name = stackName + " [" + drawer.getStoredItemCount() + "]"; + currenttip.add(StatCollector.translateToLocalFormatted("storageDrawers.waila.drawer", i + 1, name)); } - currenttip.add(StatCollector.translateToLocalFormatted("storageDrawers.waila.drawer", i + 1, name)); - } - if (tile.isUnlimited() || tile.isVending()) - currenttip.add(StatCollector.translateToLocalFormatted("storageDrawers.waila.nolimit")); - else { - int limit = tile.getDrawerCapacity() * tile.getEffectiveStorageMultiplier(); - currenttip.add(StatCollector.translateToLocalFormatted("storageDrawers.waila.limit", limit, tile.getEffectiveStorageMultiplier())); + if (tile.isUnlimited() || tile.isVending()) + currenttip.add(StatCollector.translateToLocalFormatted("storageDrawers.waila.nolimit")); + else { + int limit = tile.getDrawerCapacity() * tile.getEffectiveStorageMultiplier(); + currenttip.add(StatCollector.translateToLocalFormatted("storageDrawers.waila.limit", limit, tile.getEffectiveStorageMultiplier())); + } } String attrib = ""; @@ -110,6 +112,8 @@ public class Waila extends IntegrationModule attrib += (attrib.isEmpty() ? "" : ", ") + StatCollector.translateToLocal("storageDrawers.waila.void"); if (tile.isSorting()) attrib += (attrib.isEmpty() ? "" : ", ") + StatCollector.translateToLocal("storageDrawers.waila.sorting"); + if (tile.getOwner() != null) + attrib += (attrib.isEmpty() ? "" : ", ") + StatCollector.translateToLocal("storageDrawers.waila.protected"); if (!attrib.isEmpty()) currenttip.add(attrib); diff --git a/src/com/jaquadro/minecraft/storagedrawers/item/ItemPersonalKey.java b/src/com/jaquadro/minecraft/storagedrawers/item/ItemPersonalKey.java new file mode 100644 index 0000000..e6348a3 --- /dev/null +++ b/src/com/jaquadro/minecraft/storagedrawers/item/ItemPersonalKey.java @@ -0,0 +1,45 @@ +package com.jaquadro.minecraft.storagedrawers.item; + +import com.google.common.collect.Multimap; +import com.jaquadro.minecraft.storagedrawers.StorageDrawers; +import com.jaquadro.minecraft.storagedrawers.core.ModCreativeTabs; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.entity.ai.attributes.AttributeModifier; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.StatCollector; + +import java.util.List; + +public class ItemPersonalKey extends Item +{ + public ItemPersonalKey (String name) { + setUnlocalizedName(name); + setCreativeTab(ModCreativeTabs.tabStorageDrawers); + setTextureName(StorageDrawers.MOD_ID + ":drawer_key_personal"); + setMaxDamage(0); + } + + @Override + @SideOnly(Side.CLIENT) + public void addInformation (ItemStack itemStack, EntityPlayer player, List list, boolean par4) { + String name = getUnlocalizedName(itemStack); + list.add(StatCollector.translateToLocalFormatted(name + ".description")); + } + + @SideOnly(Side.CLIENT) + public boolean isFull3D() + { + return true; + } + + @Override + public Multimap getAttributeModifiers (ItemStack item) { + Multimap multimap = super.getAttributeModifiers(item); + multimap.put(SharedMonsterAttributes.attackDamage.getAttributeUnlocalizedName(), new AttributeModifier(field_111210_e, "Weapon modifier", (double)2, 0)); + return multimap; + } +}