Package org.spoutcraft.client.inventory

Source Code of org.spoutcraft.client.inventory.SimpleMaterialManager

/*
* This file is part of Spoutcraft.
*
* Copyright (c) 2011 SpoutcraftDev <http://spoutcraft.org/>
* Spoutcraft is licensed under the GNU Lesser General Public License.
*
* Spoutcraft is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Spoutcraft is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/
package org.spoutcraft.client.inventory;

import java.util.ArrayList;
import java.util.List;

import gnu.trove.map.hash.TIntByteHashMap;
import gnu.trove.map.hash.TIntIntHashMap;

import net.minecraft.src.Minecraft;
import net.minecraft.src.Item;

import org.spoutcraft.api.inventory.ItemStack;
import org.spoutcraft.api.inventory.MaterialManager;
import org.spoutcraft.api.inventory.Recipe;
import org.spoutcraft.api.inventory.ShapedRecipe;
import org.spoutcraft.api.inventory.ShapelessRecipe;
import org.spoutcraft.api.material.CustomBlock;
import org.spoutcraft.api.material.Material;
import org.spoutcraft.api.material.MaterialData;
import org.spoutcraft.api.util.map.TIntPairFloatHashMap;
import org.spoutcraft.api.util.map.TIntPairObjectHashMap;

public class SimpleMaterialManager implements MaterialManager {
  private final TIntPairFloatHashMap originalHardness = new TIntPairFloatHashMap();
  private final TIntPairFloatHashMap originalFriction = new TIntPairFloatHashMap();
  private final TIntByteHashMap originalOpacity = new TIntByteHashMap();
  private final TIntIntHashMap originalLight = new TIntIntHashMap();

  private final TIntPairObjectHashMap<String> customNames = new TIntPairObjectHashMap<String>(100);
  private final TIntPairObjectHashMap<String> customTextures = new TIntPairObjectHashMap<String>(100);
  private final TIntPairObjectHashMap<String> customTexturesPlugin = new TIntPairObjectHashMap<String>(100);

  public float getFriction(org.spoutcraft.api.material.Block block) {
    int id = block.getRawId();
    if (block instanceof CustomBlock) {
      id = ((CustomBlock) block).getBlockId();
    }

    return net.minecraft.src.Block.blocksList[id].slipperiness;
  }

  public void setFriction(org.spoutcraft.api.material.Block block, float friction) {
    int id = block.getRawId();
    int data = block.getRawData();
    if (block instanceof CustomBlock) {
      id = ((CustomBlock) block).getBlockId();
    }
    if (!originalFriction.containsKey(id, data)) {
      originalFriction.put(id, data, getFriction(block));
    }
    net.minecraft.src.Block.blocksList[id].slipperiness = friction;
  }

  public void resetFriction(org.spoutcraft.api.material.Block block) {
    int id = block.getRawId();
    int data = block.getRawData();
    if (block instanceof CustomBlock) {
      id = ((CustomBlock) block).getBlockId();
    }
    if (originalFriction.containsKey(id, data)) {
      setFriction(block, originalFriction.get(id, data));
      originalFriction.remove(id, data);
    }
  }

  public float getHardness(org.spoutcraft.api.material.Block block) {
    int id = block.getRawId();
    if (block instanceof CustomBlock) {
      id = ((CustomBlock) block).getBlockId();
    }
    return net.minecraft.src.Block.blocksList[id].getHardness();
  }

  public void setHardness(org.spoutcraft.api.material.Block block, float hardness) {
    int id = block.getRawId();
    if (block instanceof CustomBlock) {
      id = ((CustomBlock) block).getBlockId();
    }
    net.minecraft.src.Block.blocksList[id].blockHardness = hardness;
  }

  public void resetHardness(org.spoutcraft.api.material.Block block) {
    int id = block.getRawId();
    int data = block.getRawData();
    if (block instanceof CustomBlock) {
      id = ((CustomBlock) block).getBlockId();
    }
    if (originalHardness.containsKey(id, data)) {
      setHardness(block, originalHardness.get(id, data));
      originalHardness.remove(id, data);
    }
  }

  public boolean isOpaque(org.spoutcraft.api.material.Block block) {
    int id = block.getRawId();
    if (block instanceof CustomBlock) {
      id = ((CustomBlock) block).getBlockId();
    }
    return net.minecraft.src.Block.opaqueCubeLookup[id];
  }

  public void setOpaque(org.spoutcraft.api.material.Block block, boolean opacity) {
    int id = block.getRawId();
    if (block instanceof CustomBlock) {
      id = ((CustomBlock) block).getBlockId();
    }
    if (!originalOpacity.containsKey(id)) {
      originalOpacity.put(id, (byte) (isOpaque(block) ? 1 : 0));
    }
    net.minecraft.src.Block.opaqueCubeLookup[id] = opacity;
  }

  public void resetOpacity(org.spoutcraft.api.material.Block block) {
    int id = block.getRawId();
    if (block instanceof CustomBlock) {
      id = ((CustomBlock) block).getBlockId();
    }
    if (originalOpacity.containsKey(id)) {
      setOpaque(block, originalOpacity.get(id) != 0);
      originalOpacity.remove(id);
    }
  }

  public int getLightLevel(org.spoutcraft.api.material.Block block) {
    int id = block.getRawId();
    if (block instanceof CustomBlock) {
      id = ((CustomBlock) block).getBlockId();
    }
    return net.minecraft.src.Block.lightValue[id];
  }

  public void setLightLevel(org.spoutcraft.api.material.Block block, int level) {
    int id = block.getRawId();
    if (block instanceof CustomBlock) {
      id = ((CustomBlock) block).getBlockId();
    }
    if (!originalLight.containsKey(id)) {
      originalLight.put(id, getLightLevel(block));
    }
    net.minecraft.src.Block.lightValue[id] = level;
  }

  public void resetLightLevel(org.spoutcraft.api.material.Block block) {
    int id = block.getRawId();
    if (block instanceof CustomBlock) {
      id = ((CustomBlock) block).getBlockId();
    }
    if (originalLight.containsKey(id)) {
      setLightLevel(block, originalLight.get(id));
      originalLight.remove(id);
    }
  }

  public void setItemName(Material item, String name) {
    customNames.put(item.getRawId(), item.getRawData(), name);
  }

  public void resetName(Material item) {
    int id = item.getRawId();
    int data = item.getRawData();
    if (customNames.containsKey(id, data)) {
      customNames.remove(id, data);
    }
  }

  public void setItemTexture(Material item, String addon, String texture) {
    int id = item.getRawId();
    int data = item.getRawData();
    String addonName = addon;
    customTextures.put(id, data, texture);
    if (addonName == null) {
      customTexturesPlugin.remove(id, data);
    } else {
      customTexturesPlugin.put(id, data, addonName);
    }
  }

  public String getCustomItemTexture(Material item) {
    if (item == null) return null;
    int id = item.getRawId();
    int data = item.getRawData();
    if (customTextures.containsKey(id, data)) {
      return (String) customTextures.get(id, data);
    }
    return null;
  }

  public String getCustomItemTextureAddon(Material item) {
    if (item == null) return null;
    int id = item.getRawId();
    int data = item.getRawData();
    if (customTexturesPlugin.containsKey(id, data)) {
      return (String) customTexturesPlugin.get(id, data);
    }
    return null;
  }

  public void resetTexture(Material item) {
    int id = item.getRawId();
    int data = item.getRawData();
    if (customTextures.containsKey(id, data)) {
      customTextures.remove(id, data);
    }
  }

  public void reset() {
    for (Material next : MaterialData.getMaterials()) {
      if (next instanceof org.spoutcraft.api.material.Block) {
        org.spoutcraft.api.material.Block block = (org.spoutcraft.api.material.Block)next;
        resetFriction(block);
        resetHardness(block);
        resetOpacity(block);
        resetLightLevel(block);
      }
    }
  }

  public boolean registerRecipe(Recipe recipe) {
    SpoutcraftRecipe toAdd;

    if (recipe instanceof ShapedRecipe) {
      toAdd = SimpleShapedRecipe.fromSpoutRecipe((ShapedRecipe) recipe);
    } else if (recipe instanceof ShapelessRecipe) {
      toAdd = SimpleShapelessRecipe.fromSpoutRecipe((ShapelessRecipe) recipe);
    } else {
      return false;
    }

    toAdd.addToCraftingManager();
    return true;
  }

  @SuppressWarnings("unchecked")
  @Override
  public String getToolTip(ItemStack is) {
    net.minecraft.src.ItemStack itemstack = null;
    if (is instanceof CraftItemStack) {
      itemstack = ((CraftItemStack)is).item;
    }
    else {
      itemstack = is.asNMSItenStack();
    }

    Item rawItem = Item.itemsList[itemstack.itemID];
    List<String> list;
    if (rawItem != null) {
      list = itemstack.getTooltip(Minecraft.getMinecraft().thePlayer, Minecraft.getMinecraft().gameSettings.advancedItemTooltips);
    } else {
      list = new ArrayList<String>();
    }

    if (itemstack.itemID == MaterialData.flint.getRawId()) {
      Material item = MaterialData.getMaterial(is.getTypeId(), is.getDurability());
      String custom = item != null ? String.format(item.getName(), String.valueOf(is.getDurability())) : null;
      if (custom != null && is.getTypeId() != Item.potion.itemID) {
        if (list.size() > 0) {
          list.set(0, custom);
        } else {
          list.add(custom);
        }
      }
    }
    if (list.size() > 0) {
      String tooltip = "";
      int lines = 0;
      for (int i = 0; i < list.size(); i++) {
        String s = (String)list.get(i);
        if (i == 0 && rawItem!=null) {
          if (itemstack != null && itemstack.hasDisplayName()) {
            s = "\u00a7o" + itemstack.getDisplayName() + "\u00a7r";
          }
          s = (new StringBuilder()).append("\247").append(Integer.toHexString(itemstack.getRarity().rarityColor)).append(s).toString();
        } else {
          s = (new StringBuilder()).append("\2477").append(s).toString();
        }
        tooltip += s + "\n";
        lines++;
      }
      tooltip = tooltip.trim();
      return tooltip;
    }
    return "";
  }
}
TOP

Related Classes of org.spoutcraft.client.inventory.SimpleMaterialManager

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.