Fix Shulker Boxes losing their items when they are upgraded by crafting the next tier up and fix copper shulker boxes using a chest as the item needed to craft them. Closes #93, Closes #97
This commit is contained in:
parent
f2c6dc965a
commit
d4acdafa60
|
|
@ -19,7 +19,7 @@ import cpw.mods.ironchest.common.blocks.chest.BlockIronChest;
|
||||||
import cpw.mods.ironchest.common.blocks.chest.IronChestType;
|
import cpw.mods.ironchest.common.blocks.chest.IronChestType;
|
||||||
import cpw.mods.ironchest.common.blocks.shulker.BlockIronShulkerBox;
|
import cpw.mods.ironchest.common.blocks.shulker.BlockIronShulkerBox;
|
||||||
import cpw.mods.ironchest.common.blocks.shulker.IronShulkerBoxType;
|
import cpw.mods.ironchest.common.blocks.shulker.IronShulkerBoxType;
|
||||||
import cpw.mods.ironchest.common.crafting.IronShulkerBoxColoring;
|
import cpw.mods.ironchest.common.crafting.IronShulkerBoxColoringRecipe;
|
||||||
import cpw.mods.ironchest.common.items.ChestChangerType;
|
import cpw.mods.ironchest.common.items.ChestChangerType;
|
||||||
import cpw.mods.ironchest.common.items.ShulkerBoxChangerType;
|
import cpw.mods.ironchest.common.items.ShulkerBoxChangerType;
|
||||||
import cpw.mods.ironchest.common.items.chest.ItemIronChest;
|
import cpw.mods.ironchest.common.items.chest.ItemIronChest;
|
||||||
|
|
@ -132,8 +132,8 @@ public class ICContent
|
||||||
BlockDispenser.DISPENSE_BEHAVIOR_REGISTRY.putObject(block, new BehaviorDispenseIronShulkerBox());
|
BlockDispenser.DISPENSE_BEHAVIOR_REGISTRY.putObject(block, new BehaviorDispenseIronShulkerBox());
|
||||||
}
|
}
|
||||||
|
|
||||||
GameRegistry.addRecipe(new IronShulkerBoxColoring());
|
GameRegistry.addRecipe(new IronShulkerBoxColoringRecipe());
|
||||||
RecipeSorter.register(IronChest.MOD_ID, IronShulkerBoxColoring.class, Category.SHAPELESS, "after:forge:shapelessore");
|
RecipeSorter.register(IronChest.MOD_ID, IronShulkerBoxColoringRecipe.class, Category.SHAPELESS, "after:forge:shapelessore");
|
||||||
|
|
||||||
ShulkerBoxChangerType.generateRecipes();
|
ShulkerBoxChangerType.generateRecipes();
|
||||||
// Shulkers End
|
// Shulkers End
|
||||||
|
|
|
||||||
|
|
@ -374,7 +374,35 @@ public class BlockIronShulkerBox extends Block
|
||||||
if (j - i > 0)
|
if (j - i > 0)
|
||||||
{
|
{
|
||||||
//@formatter:off
|
//@formatter:off
|
||||||
tooltip.add(String.format(TextFormatting.ITALIC + I18n.translateToLocal("container.shulkerBox.more"), new Object[] {Integer.valueOf(j - i)}));
|
tooltip.add(String.format(TextFormatting.ITALIC + I18n.translateToLocal("container.shulkerBox.more"), new Object[] { Integer.valueOf(j - i) }));
|
||||||
|
//@formatter:on
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
NonNullList<ItemStack> nonnulllist = NonNullList.<ItemStack> withSize(27, ItemStack.EMPTY);
|
||||||
|
ItemStackHelper.loadAllItems(nbttagcompound1, nonnulllist);
|
||||||
|
int i = 0;
|
||||||
|
int j = 0;
|
||||||
|
|
||||||
|
for (ItemStack itemstack : nonnulllist)
|
||||||
|
{
|
||||||
|
if (!itemstack.isEmpty())
|
||||||
|
{
|
||||||
|
++j;
|
||||||
|
|
||||||
|
if (i <= 4)
|
||||||
|
{
|
||||||
|
++i;
|
||||||
|
tooltip.add(String.format("%s x%d", new Object[] { itemstack.getDisplayName(), Integer.valueOf(itemstack.getCount()) }));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (j - i > 0)
|
||||||
|
{
|
||||||
|
//@formatter:off
|
||||||
|
tooltip.add(String.format(TextFormatting.ITALIC + I18n.translateToLocal("container.shulkerBox.more"), new Object[] { Integer.valueOf(j - i) }));
|
||||||
//@formatter:on
|
//@formatter:on
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -14,6 +14,7 @@ import java.util.Arrays;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
|
|
||||||
|
import cpw.mods.ironchest.common.crafting.IronShulkerBoxRecipe;
|
||||||
import cpw.mods.ironchest.common.gui.shulker.slot.ValidatingShulkerBoxSlot;
|
import cpw.mods.ironchest.common.gui.shulker.slot.ValidatingShulkerBoxSlot;
|
||||||
import cpw.mods.ironchest.common.tileentity.shulker.TileEntityCopperShulkerBox;
|
import cpw.mods.ironchest.common.tileentity.shulker.TileEntityCopperShulkerBox;
|
||||||
import cpw.mods.ironchest.common.tileentity.shulker.TileEntityCrystalShulkerBox;
|
import cpw.mods.ironchest.common.tileentity.shulker.TileEntityCrystalShulkerBox;
|
||||||
|
|
@ -30,7 +31,6 @@ import net.minecraft.item.EnumDyeColor;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.util.IStringSerializable;
|
import net.minecraft.util.IStringSerializable;
|
||||||
import net.minecraftforge.fml.common.registry.GameRegistry;
|
import net.minecraftforge.fml.common.registry.GameRegistry;
|
||||||
import net.minecraftforge.oredict.ShapedOreRecipe;
|
|
||||||
|
|
||||||
public enum IronShulkerBoxType implements IStringSerializable
|
public enum IronShulkerBoxType implements IStringSerializable
|
||||||
{
|
{
|
||||||
|
|
@ -38,7 +38,7 @@ public enum IronShulkerBoxType implements IStringSerializable
|
||||||
IRON(54, 9, true, "_iron.png", TileEntityIronShulkerBox.class, 184, 202, Arrays.asList("ingotIron", "ingotRefinedIron"), "mmmmPmmmm", "mGmG3GmGm"),
|
IRON(54, 9, true, "_iron.png", TileEntityIronShulkerBox.class, 184, 202, Arrays.asList("ingotIron", "ingotRefinedIron"), "mmmmPmmmm", "mGmG3GmGm"),
|
||||||
GOLD(81, 9, true, "_gold.png", TileEntityGoldShulkerBox.class, 184, 256, Collections.singleton("ingotGold"), "mmmmPmmmm", "mGmG4GmGm"),
|
GOLD(81, 9, true, "_gold.png", TileEntityGoldShulkerBox.class, 184, 256, Collections.singleton("ingotGold"), "mmmmPmmmm", "mGmG4GmGm"),
|
||||||
DIAMOND(108, 12, true, "_diamond.png", TileEntityDiamondShulkerBox.class, 184, 256, Collections.singleton("gemDiamond"), "GGGmPmGGG", "GGGG4Gmmm"),
|
DIAMOND(108, 12, true, "_diamond.png", TileEntityDiamondShulkerBox.class, 184, 256, Collections.singleton("gemDiamond"), "GGGmPmGGG", "GGGG4Gmmm"),
|
||||||
COPPER(45, 9, false, "_copper.png", TileEntityCopperShulkerBox.class, 184, 184, Collections.singleton("ingotCopper"), "mmmmCmmmm"),
|
COPPER(45, 9, false, "_copper.png", TileEntityCopperShulkerBox.class, 184, 184, Collections.singleton("ingotCopper"), "mmmmSmmmm"),
|
||||||
SILVER(72, 9, false, "_silver.png", TileEntitySilverShulkerBox.class, 184, 238, Collections.singleton("ingotSilver"), "mmmm3mmmm", "mGmG0GmGm"),
|
SILVER(72, 9, false, "_silver.png", TileEntitySilverShulkerBox.class, 184, 238, Collections.singleton("ingotSilver"), "mmmm3mmmm", "mGmG0GmGm"),
|
||||||
CRYSTAL(108, 12, true, "_crystal.png", TileEntityCrystalShulkerBox.class, 238, 256, Collections.singleton("blockGlass"), "GGGGPGGGG"),
|
CRYSTAL(108, 12, true, "_crystal.png", TileEntityCrystalShulkerBox.class, 238, 256, Collections.singleton("blockGlass"), "GGGGPGGGG"),
|
||||||
OBSIDIAN(108, 12, false, "_obsidian.png", TileEntityObsidianShulkerBox.class, 238, 256, Collections.singleton("obsidian"), "mmmm2mmmm"),
|
OBSIDIAN(108, 12, false, "_obsidian.png", TileEntityObsidianShulkerBox.class, 238, 256, Collections.singleton("obsidian"), "mmmm2mmmm"),
|
||||||
|
|
@ -53,7 +53,7 @@ public enum IronShulkerBoxType implements IStringSerializable
|
||||||
|
|
||||||
public final int rowLength;
|
public final int rowLength;
|
||||||
|
|
||||||
public final boolean tieredChest;
|
public final boolean tieredShulkerBox;
|
||||||
|
|
||||||
public final String modelTexture;
|
public final String modelTexture;
|
||||||
|
|
||||||
|
|
@ -70,13 +70,13 @@ public enum IronShulkerBoxType implements IStringSerializable
|
||||||
private String breakTexture;
|
private String breakTexture;
|
||||||
|
|
||||||
//@formatter:off
|
//@formatter:off
|
||||||
IronShulkerBoxType(int size, int rowLength, boolean tieredChest, String modelTexture, Class<? extends TileEntityIronShulkerBox> clazz, int xSize, int ySize, Collection<String> mats, String... recipes)
|
IronShulkerBoxType(int size, int rowLength, boolean tieredShulkerBox, String modelTexture, Class<? extends TileEntityIronShulkerBox> clazz, int xSize, int ySize, Collection<String> mats, String... recipes)
|
||||||
//@formatter:on
|
//@formatter:on
|
||||||
{
|
{
|
||||||
this.name = this.name().toLowerCase();
|
this.name = this.name().toLowerCase();
|
||||||
this.size = size;
|
this.size = size;
|
||||||
this.rowLength = rowLength;
|
this.rowLength = rowLength;
|
||||||
this.tieredChest = tieredChest;
|
this.tieredShulkerBox = tieredShulkerBox;
|
||||||
this.modelTexture = modelTexture;
|
this.modelTexture = modelTexture;
|
||||||
this.clazz = clazz;
|
this.clazz = clazz;
|
||||||
this.xSize = xSize;
|
this.xSize = xSize;
|
||||||
|
|
@ -123,18 +123,18 @@ public enum IronShulkerBoxType implements IStringSerializable
|
||||||
|
|
||||||
for (IronShulkerBoxType typ : values())
|
for (IronShulkerBoxType typ : values())
|
||||||
{
|
{
|
||||||
generateRecipesForType(blockResult, previous, typ);
|
generateRecipesForType(blockResult, previous, typ, shulkerBox);
|
||||||
|
|
||||||
ItemStack chest = new ItemStack(blockResult, 1, typ.ordinal());
|
ItemStack newShulkerBox = new ItemStack(blockResult, 1, typ.ordinal());
|
||||||
|
|
||||||
if (typ.tieredChest)
|
if (typ.tieredShulkerBox)
|
||||||
{
|
{
|
||||||
previous = chest;
|
previous = newShulkerBox;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void generateRecipesForType(BlockIronShulkerBox blockResult, Object previousTier, IronShulkerBoxType type)
|
public static void generateRecipesForType(BlockIronShulkerBox blockResult, Object previousTier, IronShulkerBoxType type, BlockShulkerBox shulkerBox)
|
||||||
{
|
{
|
||||||
for (String recipe : type.recipes)
|
for (String recipe : type.recipes)
|
||||||
{
|
{
|
||||||
|
|
@ -147,14 +147,14 @@ public enum IronShulkerBoxType implements IStringSerializable
|
||||||
//@formatter:off
|
//@formatter:off
|
||||||
addRecipe(new ItemStack(blockResult, 1, type.ordinal()), recipeSplit,
|
addRecipe(new ItemStack(blockResult, 1, type.ordinal()), recipeSplit,
|
||||||
'm', mainMaterial,
|
'm', mainMaterial,
|
||||||
'P', previousTier, /* previous tier of chest */
|
'P', previousTier, /* previous tier of shulker box */
|
||||||
'G', "blockGlass",
|
'G', "blockGlass",
|
||||||
'C', "chestWood",
|
'S', shulkerBox,
|
||||||
'0', new ItemStack(blockResult, 1, 0), /* Iron Chest */
|
'0', new ItemStack(blockResult, 1, 0), /* Iron Shulker Box */
|
||||||
'1', new ItemStack(blockResult, 1, 1), /* Gold Chest */
|
'1', new ItemStack(blockResult, 1, 1), /* Gold Shulker Box */
|
||||||
'2', new ItemStack(blockResult, 1, 2), /* Diamond Chest */
|
'2', new ItemStack(blockResult, 1, 2), /* Diamond Shulker Box */
|
||||||
'3', new ItemStack(blockResult, 1, 3), /* Copper Chest */
|
'3', new ItemStack(blockResult, 1, 3), /* Copper Shulker Box */
|
||||||
'4', new ItemStack(blockResult, 1, 4) /* Silver Chest */
|
'4', new ItemStack(blockResult, 1, 4) /* Silver Shulker Box */
|
||||||
);
|
);
|
||||||
//@formatter:on
|
//@formatter:on
|
||||||
}
|
}
|
||||||
|
|
@ -178,7 +178,7 @@ public enum IronShulkerBoxType implements IStringSerializable
|
||||||
|
|
||||||
public static void addRecipe(ItemStack is, Object... parts)
|
public static void addRecipe(ItemStack is, Object... parts)
|
||||||
{
|
{
|
||||||
ShapedOreRecipe oreRecipe = new ShapedOreRecipe(is, parts);
|
IronShulkerBoxRecipe oreRecipe = new IronShulkerBoxRecipe(is, parts);
|
||||||
|
|
||||||
GameRegistry.addRecipe(oreRecipe);
|
GameRegistry.addRecipe(oreRecipe);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -20,9 +20,9 @@ import net.minecraft.item.crafting.IRecipe;
|
||||||
import net.minecraft.util.NonNullList;
|
import net.minecraft.util.NonNullList;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
|
|
||||||
public class IronShulkerBoxColoring implements IRecipe
|
public class IronShulkerBoxColoringRecipe implements IRecipe
|
||||||
{
|
{
|
||||||
public IronShulkerBoxColoring()
|
public IronShulkerBoxColoringRecipe()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -0,0 +1,48 @@
|
||||||
|
package cpw.mods.ironchest.common.crafting;
|
||||||
|
|
||||||
|
import javax.annotation.Nonnull;
|
||||||
|
|
||||||
|
import cpw.mods.ironchest.common.blocks.shulker.BlockIronShulkerBox;
|
||||||
|
import net.minecraft.block.Block;
|
||||||
|
import net.minecraft.block.BlockShulkerBox;
|
||||||
|
import net.minecraft.inventory.InventoryCrafting;
|
||||||
|
import net.minecraft.item.ItemStack;
|
||||||
|
import net.minecraftforge.oredict.ShapedOreRecipe;
|
||||||
|
|
||||||
|
public class IronShulkerBoxRecipe extends ShapedOreRecipe
|
||||||
|
{
|
||||||
|
public IronShulkerBoxRecipe(@Nonnull ItemStack result, Object... recipe)
|
||||||
|
{
|
||||||
|
super(result, recipe);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@Nonnull
|
||||||
|
public ItemStack getCraftingResult(@Nonnull InventoryCrafting var1)
|
||||||
|
{
|
||||||
|
ItemStack newOutput = this.output.copy();
|
||||||
|
|
||||||
|
ItemStack itemstack = ItemStack.EMPTY;
|
||||||
|
|
||||||
|
for (int i = 0; i < var1.getSizeInventory(); ++i)
|
||||||
|
{
|
||||||
|
ItemStack stack = var1.getStackInSlot(i);
|
||||||
|
|
||||||
|
if (!stack.isEmpty())
|
||||||
|
{
|
||||||
|
if (Block.getBlockFromItem(stack.getItem()) instanceof BlockIronShulkerBox
|
||||||
|
|| Block.getBlockFromItem(stack.getItem()) instanceof BlockShulkerBox)
|
||||||
|
{
|
||||||
|
itemstack = stack;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (itemstack.hasTagCompound())
|
||||||
|
{
|
||||||
|
newOutput.setTagCompound(itemstack.getTagCompound().copy());
|
||||||
|
}
|
||||||
|
|
||||||
|
return newOutput;
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue