mirror of
https://github.com/MinecraftForge/MinecraftForge.git
synced 2026-11-12 16:27:47 +00:00
139 lines
4.6 KiB
Java
139 lines
4.6 KiB
Java
/*
|
|
* The FML Forge Mod Loader suite.
|
|
* Copyright (C) 2012 cpw
|
|
*
|
|
* This library 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 2.1 of the License, or any later version.
|
|
*
|
|
* This library 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 library; if not, write to the Free Software Foundation, Inc., 51
|
|
* Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
|
*/
|
|
|
|
package cpw.mods.fml.client;
|
|
|
|
import java.util.BitSet;
|
|
import java.util.HashMap;
|
|
import java.util.logging.Level;
|
|
|
|
import cpw.mods.fml.common.FMLCommonHandler;
|
|
import cpw.mods.fml.common.FMLLog;
|
|
|
|
/**
|
|
* @author cpw
|
|
*
|
|
*/
|
|
public class SpriteHelper
|
|
{
|
|
private static HashMap<String, BitSet> spriteInfo = new HashMap<String, BitSet>();
|
|
|
|
private static void initMCSpriteMaps() {
|
|
BitSet slots =
|
|
SpriteHelper.toBitSet(
|
|
"0000000000000000" +
|
|
"0000000000110000" +
|
|
"0000000000100000" +
|
|
"0000000001100000" +
|
|
"0000000000000000" +
|
|
"0000000000000000" +
|
|
"0000000000000000" +
|
|
"0000000000000000" +
|
|
"0000000000000000" +
|
|
"0000000000000000" +
|
|
"0000000000000000" +
|
|
"0000000000011111" +
|
|
"0000000000000000" +
|
|
"0000000001111100" +
|
|
"0000000001111000" +
|
|
"0000000000000000");
|
|
spriteInfo.put("/terrain.png", slots);
|
|
|
|
slots = SpriteHelper.toBitSet(
|
|
"0000000000000000" +
|
|
"0000000000000000" +
|
|
"0000000000000000" +
|
|
"0000000000000000" +
|
|
"0000000000000000" +
|
|
"0000000000000000" +
|
|
"0000000000000000" +
|
|
"0000000000000000" +
|
|
"0000000000000000" +
|
|
"0111110000000000" +
|
|
"1111111010000000" +
|
|
"0111111110000000" +
|
|
"0111111111111001" +
|
|
"1111111111111111" +
|
|
"0000011111111111" +
|
|
"0000000000000000");
|
|
spriteInfo.put("/gui/items.png", slots);
|
|
}
|
|
/**
|
|
* Register a sprite map for ModTextureStatic, to allow for other mods to override
|
|
* your sprite page.
|
|
*
|
|
*
|
|
*/
|
|
public static void registerSpriteMapForFile(String file, String spriteMap) {
|
|
if (spriteInfo.size() == 0) {
|
|
initMCSpriteMaps();
|
|
}
|
|
if (spriteInfo.containsKey(file)) {
|
|
FMLCommonHandler.instance().getFMLLogger().finer(String.format("Duplicate attempt to register a sprite file %s for overriding -- ignoring",file));
|
|
return;
|
|
}
|
|
spriteInfo.put(file, toBitSet(spriteMap));
|
|
}
|
|
|
|
public static int getUniqueSpriteIndex(String path)
|
|
{
|
|
if (!spriteInfo.containsKey("/terrain.png"))
|
|
{
|
|
initMCSpriteMaps();
|
|
}
|
|
|
|
BitSet slots = spriteInfo.get(path);
|
|
|
|
if (slots == null)
|
|
{
|
|
Exception ex = new Exception(String.format("Invalid getUniqueSpriteIndex call for texture: %s", path));
|
|
FMLLog.log(Level.SEVERE, ex, "A critical error has been detected with sprite overrides");
|
|
FMLCommonHandler.instance().raiseException(ex,"Invalid request to getUniqueSpriteIndex",true);
|
|
}
|
|
|
|
int ret = getFreeSlot(slots);
|
|
|
|
if (ret == -1)
|
|
{
|
|
Exception ex = new Exception(String.format("No more sprite indicies left for: %s", path));
|
|
FMLLog.log(Level.SEVERE, ex, "There are no sprite indicies left for %s", path);
|
|
FMLCommonHandler.instance().raiseException(ex,"No more sprite indicies left", true);
|
|
}
|
|
return ret;
|
|
}
|
|
|
|
public static BitSet toBitSet(String data)
|
|
{
|
|
BitSet ret = new BitSet(data.length());
|
|
for (int x = 0; x < data.length(); x++)
|
|
{
|
|
ret.set(x, data.charAt(x) == '1');
|
|
}
|
|
return ret;
|
|
}
|
|
|
|
public static int getFreeSlot(BitSet slots)
|
|
{
|
|
int next=slots.nextSetBit(0);
|
|
slots.clear(next);
|
|
return next;
|
|
}
|
|
|
|
public static int freeSlotCount(String textureToOverride)
|
|
{
|
|
return spriteInfo.get(textureToOverride).cardinality();
|
|
}
|
|
|
|
}
|