summaryrefslogtreecommitdiff
path: root/src/main/java/jp/plusplus/fbs/item/ItemStaff.java
blob: 15b1e4589feb2ebd274d40cdcaa86375978764f9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
package jp.plusplus.fbs.item;

import jp.plusplus.fbs.FBS;
import jp.plusplus.fbs.Registry;
import jp.plusplus.fbs.api.IResonance;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;
import net.minecraft.util.StatCollector;
import net.minecraft.world.World;

import java.util.LinkedList;
import java.util.List;

/**
 * Createdby pluslus_Fon 2015/06/15.
 * 闇の実装
 */
public class ItemStaff extends ItemBase {
    public int gemNum;
    public int bookNum=1;
    public ItemStaff(int bookNum, int gem) {
        this.bookNum = bookNum;
        gemNum = gem;
        setMaxStackSize(1);
        setUnlocalizedName("staff" + bookNum + "_" + gem);
        setTextureName("staff" + bookNum + "_" + gem);
        setFull3D();
        setMaxDamage(59);
        setNoRepair();
    }

    @Override
    public ItemStack onItemRightClick(ItemStack itemStack, World world, EntityPlayer player) {
        if(player.isSneaking()) openGUI(itemStack, world, player);
        else{
            ItemStack[] items=loadInventory(itemStack);
            String name=getStaffMagicName(itemStack);
            if(name.equals("null")) openGUI(itemStack, world, player);
            else{
                if(getStaffMagicMaxUse(itemStack)>0) {
                    execute(itemStack, items, world, player);
                    saveInventory(itemStack, items);
                }
                itemStack.damageItem(1, player);
                player.swingItem();
            }
        }
        return itemStack;
    }

    public static ItemStack[] loadInventory(ItemStack itemStack){
        ItemStaff staff=(ItemStaff)itemStack.getItem();
        ItemStack[] items=new ItemStack[staff.gemNum+staff.bookNum];

        if (!itemStack.hasTagCompound()) {
            itemStack.setTagCompound(new NBTTagCompound());
        }
        if(!itemStack.getTagCompound().hasKey("Items")){
            itemStack.getTagCompound().setTag("Items", new NBTTagList());
        }
        NBTTagList tags = (NBTTagList) itemStack.getTagCompound().getTag("Items");

        for (int i = 0; i < tags.tagCount(); i++) {
            NBTTagCompound tagCompound = tags.getCompoundTagAt(i);
            int slot = tagCompound.getByte("Slot");
            if (slot >= 0 && slot < items.length) {
                items[slot] = ItemStack.loadItemStackFromNBT(tagCompound);
            }
        }

        return items;
    }
    public static void saveInventory(ItemStack itemStack, ItemStack[] inv){
        NBTTagList tagList = new NBTTagList();
        for (int i = 0; i < inv.length; i++) {
            if (inv[i] != null) {
                NBTTagCompound compound = new NBTTagCompound();
                compound.setByte("Slot", (byte) i);
                inv[i].writeToNBT(compound);
                tagList.appendTag(compound);
            }
        }
        itemStack.setTagCompound(new NBTTagCompound());
        itemStack.getTagCompound().setTag("Items", tagList);

        //resonance
        int minUse=9999;
        LinkedList<ItemStack> books=new LinkedList<ItemStack>();
        for(int i=0;i<((ItemStaff)itemStack.getItem()).bookNum;i++){
            if (inv[i] != null && inv[i].getItem() == ItemCore.bookSorcery) {
                books.add(inv[i]);
                int u=ItemBookSorcery.getMagicMaxUse(inv[i]);
                if(u<minUse) minUse=u;
            }
        }

        Registry.MagicData md=Registry.GetResonanceMagicData(books);
        if(md==null) itemStack.getTagCompound().setString("MagicName", "null");
        else itemStack.getTagCompound().setString("MagicName", md.title);
        itemStack.getTagCompound().setInteger("MagicMinUse", minUse);
    }

    public static String getStaffMagicName(ItemStack item){
        if(!item.hasTagCompound()) return "null";
        NBTTagCompound nbt=item.getTagCompound();
        return nbt.hasKey("MagicName")?nbt.getString("MagicName"):"null";
    }
    public static int getStaffMagicMaxUse(ItemStack item){
        if(!item.hasTagCompound()) return 0;
        NBTTagCompound nbt=item.getTagCompound();
        return nbt.hasKey("MagicMinUse")?nbt.getInteger("MagicMinUse"):0;
    }

    @Override
    public String getItemStackDisplayName(ItemStack item){
        if(!item.hasTagCompound()) return super.getItemStackDisplayName(item);

        String n=getStaffMagicName(item);
        if(n.length()==0 || n.equals("null")) return super.getItemStackDisplayName(item);

        String ln="";
        IResonance r=Registry.GetResonance(n);
        if(r!=null){
            ItemStack[] items=loadInventory(item);
            String[] tt=new String[bookNum];
            for(int i=0;i<bookNum;i++){
                if(items==null) continue;
                tt[i]=Registry.GetUnlocalizedBookTitleFromItemStack(items[i]);
            }
            ln=r.getDisplayMagicName(tt);
        }
        else ln=Registry.GetMagic(n).getLocalizedTitle();

        return super.getItemStackDisplayName(item)+"("+ln+"["+getStaffMagicMaxUse(item)+"]"+")";
    }

    @Override
    public void addInformation(ItemStack itemStack, EntityPlayer player, List list, boolean p_77624_4_) {
        if(!FBS.enableDescription) return;
        list.add(String.format(StatCollector.translateToLocal("info.fbs.staff.0"), bookNum));
        list.add(String.format(StatCollector.translateToLocal("info.fbs.staff.1"), gemNum));
    }

    public void openGUI(ItemStack itemStack, World world, EntityPlayer player){
        player.openGui(FBS.instance, FBS.GUI_STAFF_ID, world, (int) player.posX, (int) player.posY, (int) player.posZ);
    }
    public void execute(ItemStack itemStack, ItemStack[] items, World world, EntityPlayer player){
        ((ItemBookSorcery) ItemCore.bookSorcery).executesMagicWithStaff(world, player, items, ((ItemStaff)itemStack.getItem()).bookNum);
    }
}