Add chest upgrading item
This commit is contained in:
parent
fae10df314
commit
3d8a9b80d5
|
@ -13,7 +13,7 @@
|
||||||
</description>
|
</description>
|
||||||
|
|
||||||
<property name="modname" value="mod_ironchests" />
|
<property name="modname" value="mod_ironchests" />
|
||||||
<property name="version" value="2.1" />
|
<property name="version" value="2.2" />
|
||||||
<property name="mcp.home" location="/home/cpw/minecraft1dev/forge1.31" />
|
<property name="mcp.home" location="/home/cpw/minecraft1dev/forge1.31" />
|
||||||
<property name="mcp.obfoutput" location="${mcp.home}/reobf" />
|
<property name="mcp.obfoutput" location="${mcp.home}/reobf" />
|
||||||
<property name="client.mcp.obfoutput" location="${mcp.obfoutput}/minecraft" />
|
<property name="client.mcp.obfoutput" location="${mcp.obfoutput}/minecraft" />
|
||||||
|
|
|
@ -12,6 +12,7 @@ import net.minecraft.src.ModLoader;
|
||||||
import net.minecraft.src.ModLoaderMp;
|
import net.minecraft.src.ModLoaderMp;
|
||||||
import net.minecraft.src.NBTTagCompound;
|
import net.minecraft.src.NBTTagCompound;
|
||||||
import net.minecraft.src.forge.MinecraftForgeClient;
|
import net.minecraft.src.forge.MinecraftForgeClient;
|
||||||
|
import cpw.mods.ironchest.ChestChangerType;
|
||||||
import cpw.mods.ironchest.IProxy;
|
import cpw.mods.ironchest.IProxy;
|
||||||
import cpw.mods.ironchest.IronChestType;
|
import cpw.mods.ironchest.IronChestType;
|
||||||
import cpw.mods.ironchest.TileEntityIronChest;
|
import cpw.mods.ironchest.TileEntityIronChest;
|
||||||
|
@ -21,6 +22,7 @@ public class ClientProxy extends BaseModMp implements IProxy {
|
||||||
public void registerRenderInformation() {
|
public void registerRenderInformation() {
|
||||||
ChestItemRenderHelper.instance=new IronChestRenderHelper();
|
ChestItemRenderHelper.instance=new IronChestRenderHelper();
|
||||||
MinecraftForgeClient.preloadTexture("cpw/mods/ironchest/sprites/block_textures.png");
|
MinecraftForgeClient.preloadTexture("cpw/mods/ironchest/sprites/block_textures.png");
|
||||||
|
MinecraftForgeClient.preloadTexture("cpw/mods/ironchest/sprites/item_textures.png");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -35,6 +37,9 @@ public class ClientProxy extends BaseModMp implements IProxy {
|
||||||
for (IronChestType typ : IronChestType.values()) {
|
for (IronChestType typ : IronChestType.values()) {
|
||||||
ModLoader.AddLocalization(typ.name() + ".name", typ.friendlyName);
|
ModLoader.AddLocalization(typ.name() + ".name", typ.friendlyName);
|
||||||
}
|
}
|
||||||
|
for (ChestChangerType typ : ChestChangerType.values()) {
|
||||||
|
ModLoader.AddLocalization("item."+typ.itemName+".name", typ.descriptiveName);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -142,9 +142,15 @@ public class BlockIronChest extends BlockContainer implements ITextureProvider {
|
||||||
TileEntityIronChest tileentitychest = (TileEntityIronChest)world.getBlockTileEntity(i, j, k);
|
TileEntityIronChest tileentitychest = (TileEntityIronChest)world.getBlockTileEntity(i, j, k);
|
||||||
if (tileentitychest != null)
|
if (tileentitychest != null)
|
||||||
{
|
{
|
||||||
for (int l = 0; l < tileentitychest.getSizeInventory(); l++)
|
dropContent(0, tileentitychest, world);
|
||||||
|
}
|
||||||
|
super.onBlockRemoval(world, i, j, k);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void dropContent(int newSize, TileEntityIronChest chest, World world) {
|
||||||
|
for (int l = newSize; l < chest.getSizeInventory(); l++)
|
||||||
{
|
{
|
||||||
ItemStack itemstack = tileentitychest.getStackInSlot(l);
|
ItemStack itemstack = chest.getStackInSlot(l);
|
||||||
if (itemstack == null)
|
if (itemstack == null)
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
|
@ -160,7 +166,7 @@ public class BlockIronChest extends BlockContainer implements ITextureProvider {
|
||||||
i1 = itemstack.stackSize;
|
i1 = itemstack.stackSize;
|
||||||
}
|
}
|
||||||
itemstack.stackSize -= i1;
|
itemstack.stackSize -= i1;
|
||||||
EntityItem entityitem = new EntityItem(world, (float)i + f, (float)j + f1, (float)k + f2, new ItemStack(itemstack.itemID, i1, itemstack.getItemDamage()));
|
EntityItem entityitem = new EntityItem(world, (float)chest.xCoord + f, (float)chest.yCoord + (newSize>0 ? 1 : 0) + f1, (float)chest.zCoord + f2, new ItemStack(itemstack.itemID, i1, itemstack.getItemDamage()));
|
||||||
float f3 = 0.05F;
|
float f3 = 0.05F;
|
||||||
entityitem.motionX = (float)random.nextGaussian() * f3;
|
entityitem.motionX = (float)random.nextGaussian() * f3;
|
||||||
entityitem.motionY = (float)random.nextGaussian() * f3 + 0.2F;
|
entityitem.motionY = (float)random.nextGaussian() * f3 + 0.2F;
|
||||||
|
@ -173,6 +179,4 @@ public class BlockIronChest extends BlockContainer implements ITextureProvider {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
super.onBlockRemoval(world, i, j, k);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,70 @@
|
||||||
|
package cpw.mods.ironchest;
|
||||||
|
|
||||||
|
import static cpw.mods.ironchest.IronChestType.COPPER;
|
||||||
|
import static cpw.mods.ironchest.IronChestType.DIAMOND;
|
||||||
|
import static cpw.mods.ironchest.IronChestType.GOLD;
|
||||||
|
import static cpw.mods.ironchest.IronChestType.IRON;
|
||||||
|
import static cpw.mods.ironchest.IronChestType.SILVER;
|
||||||
|
|
||||||
|
import net.minecraft.src.Block;
|
||||||
|
import net.minecraft.src.ItemStack;
|
||||||
|
import net.minecraft.src.forge.Configuration;
|
||||||
|
import net.minecraft.src.forge.MinecraftForge;
|
||||||
|
public enum ChestChangerType {
|
||||||
|
IRONGOLD(IRON,GOLD,"ironGoldUpgrade","Iron to Gold Chest Upgrade","mmm","msm","mmm"),
|
||||||
|
GOLDDIAMOND(GOLD,DIAMOND,"goldDiamondUpgrade","Gold to Diamond Chest Upgrade","GGG","msm","GGG"),
|
||||||
|
COPPERSILVER(COPPER,SILVER,"copperSilverUpgrade","Copper to Silver Chest Upgrade","mmm","msm","mmm"),
|
||||||
|
SILVERGOLD(SILVER,GOLD,"silverGoldUpgrade","Silver to Gold Chest Upgrade","mGm","GsG","mGm");
|
||||||
|
|
||||||
|
private IronChestType source;
|
||||||
|
private IronChestType target;
|
||||||
|
public String itemName;
|
||||||
|
public String descriptiveName;
|
||||||
|
private ItemChestChanger item;
|
||||||
|
private String[] recipe;
|
||||||
|
|
||||||
|
private ChestChangerType(IronChestType source, IronChestType target, String itemName, String descriptiveName, String... recipe) {
|
||||||
|
this.source=source;
|
||||||
|
this.target=target;
|
||||||
|
this.itemName=itemName;
|
||||||
|
this.descriptiveName=descriptiveName;
|
||||||
|
this.recipe=recipe;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean canUpgrade(IronChestType from) {
|
||||||
|
return from==this.source;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getTarget() {
|
||||||
|
return this.target.ordinal();
|
||||||
|
}
|
||||||
|
|
||||||
|
public ItemChestChanger buildItem(Configuration cfg, int id) {
|
||||||
|
int itemId=Integer.parseInt(cfg.getOrCreateIntProperty(itemName, Configuration.ITEM_PROPERTY, id).value);
|
||||||
|
item=new ItemChestChanger(itemId,this);
|
||||||
|
return item;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addRecipe() {
|
||||||
|
IronChestType.addRecipe(new ItemStack(item), recipe, 'm', target.mat,'s',source.mat,'G',Block.glass);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void buildItems(Configuration cfg, int defaultId) {
|
||||||
|
for (ChestChangerType type: values()) {
|
||||||
|
type.buildItem(cfg, defaultId++);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void generateRecipe(IronChestType type) {
|
||||||
|
for (ChestChangerType item: values()) {
|
||||||
|
if (item.source==type || item.target==type) {
|
||||||
|
for (Object[] recipe : MinecraftForge.generateRecipes(item.recipe[0],item.recipe[1],item.recipe[2],'s',item.source.getMatList(),'m',item.target.getMatList(),'G',Block.glass)) {
|
||||||
|
if (recipe[4]==null || recipe[6]==null) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
IronChestType.addRecipe(new ItemStack(item.item), recipe);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,5 +1,8 @@
|
||||||
package cpw.mods.ironchest;
|
package cpw.mods.ironchest;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
import net.minecraft.src.Block;
|
import net.minecraft.src.Block;
|
||||||
import net.minecraft.src.Item;
|
import net.minecraft.src.Item;
|
||||||
import net.minecraft.src.ItemStack;
|
import net.minecraft.src.ItemStack;
|
||||||
|
@ -21,9 +24,10 @@ public enum IronChestType {
|
||||||
private String guiName;
|
private String guiName;
|
||||||
private int textureRow;
|
private int textureRow;
|
||||||
public Class<? extends TileEntityIronChest> clazz;
|
public Class<? extends TileEntityIronChest> clazz;
|
||||||
private Item mat;
|
Item mat;
|
||||||
private String[] recipes;
|
private String[] recipes;
|
||||||
public int guiId;
|
public int guiId;
|
||||||
|
private ArrayList<ItemStack> matList;
|
||||||
|
|
||||||
IronChestType(int size, int rowLength, boolean tieredChest, String friendlyName, String guiName, String modelTexture, int textureRow, Item mat,
|
IronChestType(int size, int rowLength, boolean tieredChest, String friendlyName, String guiName, String modelTexture, int textureRow, Item mat,
|
||||||
Class<? extends TileEntityIronChest> clazz, String... recipes) {
|
Class<? extends TileEntityIronChest> clazz, String... recipes) {
|
||||||
|
@ -37,6 +41,10 @@ public enum IronChestType {
|
||||||
this.clazz = clazz;
|
this.clazz = clazz;
|
||||||
this.mat = mat;
|
this.mat = mat;
|
||||||
this.recipes = recipes;
|
this.recipes = recipes;
|
||||||
|
this.matList=new ArrayList<ItemStack>();
|
||||||
|
if (mat!=null) {
|
||||||
|
matList.add(new ItemStack(mat));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getModelTexture() {
|
public String getModelTexture() {
|
||||||
|
@ -85,7 +93,7 @@ public enum IronChestType {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void addRecipe(ItemStack is, Object... parts) {
|
public static void addRecipe(ItemStack is, Object... parts) {
|
||||||
ModLoader.AddRecipe(is, parts);
|
ModLoader.AddRecipe(is, parts);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -113,4 +121,12 @@ public enum IronChestType {
|
||||||
return rowLength;
|
return rowLength;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void addMat(ItemStack ore) {
|
||||||
|
this.matList.add(ore);
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<ItemStack> getMatList() {
|
||||||
|
return matList;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -0,0 +1,54 @@
|
||||||
|
package cpw.mods.ironchest;
|
||||||
|
|
||||||
|
import net.minecraft.src.EntityPlayer;
|
||||||
|
import net.minecraft.src.Item;
|
||||||
|
import net.minecraft.src.ItemStack;
|
||||||
|
import net.minecraft.src.TileEntity;
|
||||||
|
import net.minecraft.src.World;
|
||||||
|
import net.minecraft.src.forge.ITextureProvider;
|
||||||
|
|
||||||
|
public class ItemChestChanger extends Item implements ITextureProvider {
|
||||||
|
|
||||||
|
private ChestChangerType type;
|
||||||
|
|
||||||
|
public ItemChestChanger(int id, ChestChangerType type) {
|
||||||
|
super(id);
|
||||||
|
setMaxStackSize(1);
|
||||||
|
setIconIndex(0);
|
||||||
|
this.type=type;
|
||||||
|
setItemName(type.itemName);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onItemUseFirst(ItemStack stack, EntityPlayer player, World world, int X, int Y, int Z, int side) {
|
||||||
|
TileEntity te=world.getBlockTileEntity(X,Y,Z);
|
||||||
|
if (te!=null && te instanceof TileEntityIronChest) {
|
||||||
|
TileEntityIronChest ironchest=(TileEntityIronChest)te;
|
||||||
|
TileEntityIronChest newchest=ironchest.applyUpgradeItem(this);
|
||||||
|
if (newchest==null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
world.setBlockTileEntity(X, Y, Z, newchest);
|
||||||
|
world.setBlockMetadata(X, Y, Z, newchest.getType().ordinal());
|
||||||
|
world.markBlockNeedsUpdate(X, Y, Z);
|
||||||
|
world.notifyBlocksOfNeighborChange(X, Y, Z, world.getBlockId(X, Y, Z));
|
||||||
|
stack.stackSize=0;
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getTextureFile() {
|
||||||
|
return "cpw/mods/ironchest/sprites/item_textures.png";
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getTargetChestOrdinal(int sourceOrdinal) {
|
||||||
|
return type.getTarget();
|
||||||
|
}
|
||||||
|
|
||||||
|
public ChestChangerType getType() {
|
||||||
|
return type;
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,11 +1,13 @@
|
||||||
package cpw.mods.ironchest;
|
package cpw.mods.ironchest;
|
||||||
|
|
||||||
|
import net.minecraft.src.Block;
|
||||||
import net.minecraft.src.EntityPlayer;
|
import net.minecraft.src.EntityPlayer;
|
||||||
import net.minecraft.src.IInventory;
|
import net.minecraft.src.IInventory;
|
||||||
import net.minecraft.src.ItemStack;
|
import net.minecraft.src.ItemStack;
|
||||||
import net.minecraft.src.NBTTagCompound;
|
import net.minecraft.src.NBTTagCompound;
|
||||||
import net.minecraft.src.NBTTagList;
|
import net.minecraft.src.NBTTagList;
|
||||||
import net.minecraft.src.TileEntity;
|
import net.minecraft.src.TileEntity;
|
||||||
|
import net.minecraft.src.mod_IronChest;
|
||||||
|
|
||||||
public class TileEntityIronChest extends TileEntity implements IInventory {
|
public class TileEntityIronChest extends TileEntity implements IInventory {
|
||||||
private int ticksSinceSync;
|
private int ticksSinceSync;
|
||||||
|
@ -208,4 +210,20 @@ public class TileEntityIronChest extends TileEntity implements IInventory {
|
||||||
this.facing=chestFacing;
|
this.facing=chestFacing;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public TileEntityIronChest applyUpgradeItem(ItemChestChanger itemChestChanger) {
|
||||||
|
if (numUsingPlayers>0) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
if (!itemChestChanger.getType().canUpgrade(this.getType())) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
TileEntityIronChest newEntity=IronChestType.makeEntity(itemChestChanger.getTargetChestOrdinal(getType().ordinal()));
|
||||||
|
int newSize=newEntity.chestContents.length;
|
||||||
|
System.arraycopy(chestContents, 0, newEntity.chestContents, 0, Math.min(newSize,chestContents.length));
|
||||||
|
BlockIronChest block=mod_IronChest.ironChestBlock;
|
||||||
|
block.dropContent(newSize,this,this.worldObj);
|
||||||
|
newEntity.setFacing(facing);
|
||||||
|
return newEntity;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,8 +6,10 @@ import net.minecraft.src.forge.Configuration;
|
||||||
import net.minecraft.src.forge.IOreHandler;
|
import net.minecraft.src.forge.IOreHandler;
|
||||||
import net.minecraft.src.forge.MinecraftForge;
|
import net.minecraft.src.forge.MinecraftForge;
|
||||||
import cpw.mods.ironchest.BlockIronChest;
|
import cpw.mods.ironchest.BlockIronChest;
|
||||||
|
import cpw.mods.ironchest.ChestChangerType;
|
||||||
import cpw.mods.ironchest.IProxy;
|
import cpw.mods.ironchest.IProxy;
|
||||||
import cpw.mods.ironchest.IronChestType;
|
import cpw.mods.ironchest.IronChestType;
|
||||||
|
import cpw.mods.ironchest.ItemChestChanger;
|
||||||
import cpw.mods.ironchest.ItemIronChest;
|
import cpw.mods.ironchest.ItemIronChest;
|
||||||
import cpw.mods.ironchest.ServerClientProxy;
|
import cpw.mods.ironchest.ServerClientProxy;
|
||||||
import cpw.mods.ironchest.TileEntityIronChest;
|
import cpw.mods.ironchest.TileEntityIronChest;
|
||||||
|
@ -15,6 +17,7 @@ import cpw.mods.ironchest.TileEntityIronChest;
|
||||||
public class mod_IronChest extends BaseModMp {
|
public class mod_IronChest extends BaseModMp {
|
||||||
|
|
||||||
public static BlockIronChest ironChestBlock;
|
public static BlockIronChest ironChestBlock;
|
||||||
|
public static ItemChestChanger itemChestChanger;
|
||||||
public static IProxy proxy;
|
public static IProxy proxy;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -31,6 +34,7 @@ public class mod_IronChest extends BaseModMp {
|
||||||
try {
|
try {
|
||||||
cfg.load();
|
cfg.load();
|
||||||
ironChestBlock = new BlockIronChest(Integer.parseInt(cfg.getOrCreateBlockIdProperty("ironChests", 181).value));
|
ironChestBlock = new BlockIronChest(Integer.parseInt(cfg.getOrCreateBlockIdProperty("ironChests", 181).value));
|
||||||
|
ChestChangerType.buildItems(cfg, 19501);
|
||||||
IronChestType.initGUIs(cfg);
|
IronChestType.initGUIs(cfg);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
ModLoader.getLogger().severe("IronChest was unable to load it's configuration successfully");
|
ModLoader.getLogger().severe("IronChest was unable to load it's configuration successfully");
|
||||||
|
@ -45,24 +49,37 @@ public class mod_IronChest extends BaseModMp {
|
||||||
@Override
|
@Override
|
||||||
public void registerOre(String oreClass, ItemStack ore) {
|
public void registerOre(String oreClass, ItemStack ore) {
|
||||||
if ("ingotCopper".equals(oreClass)) {
|
if ("ingotCopper".equals(oreClass)) {
|
||||||
|
IronChestType.COPPER.addMat(ore);
|
||||||
IronChestType.generateRecipesForType(ironChestBlock, Block.chest, IronChestType.COPPER, ore);
|
IronChestType.generateRecipesForType(ironChestBlock, Block.chest, IronChestType.COPPER, ore);
|
||||||
|
ChestChangerType.generateRecipe(IronChestType.COPPER);
|
||||||
}
|
}
|
||||||
if ("ingotSilver".equals(oreClass)) {
|
if ("ingotSilver".equals(oreClass)) {
|
||||||
|
IronChestType.SILVER.addMat(ore);
|
||||||
IronChestType.generateRecipesForType(ironChestBlock, ironChestBlock, IronChestType.SILVER, ore);
|
IronChestType.generateRecipesForType(ironChestBlock, ironChestBlock, IronChestType.SILVER, ore);
|
||||||
|
ChestChangerType.generateRecipe(IronChestType.SILVER);
|
||||||
}
|
}
|
||||||
if ("ingotRefinedIron".equals(oreClass)) {
|
if ("ingotRefinedIron".equals(oreClass)) {
|
||||||
|
IronChestType.IRON.addMat(ore);
|
||||||
IronChestType.generateRecipesForType(ironChestBlock, Block.chest, IronChestType.IRON, ore);
|
IronChestType.generateRecipesForType(ironChestBlock, Block.chest, IronChestType.IRON, ore);
|
||||||
|
ChestChangerType.generateRecipe(IronChestType.IRON);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
proxy.registerTranslations();
|
proxy.registerTranslations();
|
||||||
proxy.registerTileEntities();
|
proxy.registerTileEntities();
|
||||||
|
ChestChangerType.generateRecipe(IronChestType.IRON);
|
||||||
|
ChestChangerType.generateRecipe(IronChestType.GOLD);
|
||||||
IronChestType.generateTieredRecipies(ironChestBlock);
|
IronChestType.generateTieredRecipies(ironChestBlock);
|
||||||
|
|
||||||
proxy.registerRenderInformation();
|
proxy.registerRenderInformation();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void ModsLoaded() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
public static void openGUI(EntityPlayer player, TileEntityIronChest te) {
|
public static void openGUI(EntityPlayer player, TileEntityIronChest te) {
|
||||||
proxy.showGUI(te,player);
|
proxy.showGUI(te,player);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue