diff options
Diffstat (limited to 'src/main/java/jp/plusplus/fbs/container/inventory')
17 files changed, 1369 insertions, 0 deletions
diff --git a/src/main/java/jp/plusplus/fbs/container/inventory/InventoryBasket.class b/src/main/java/jp/plusplus/fbs/container/inventory/InventoryBasket.class Binary files differnew file mode 100644 index 0000000..bae5992 --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/container/inventory/InventoryBasket.class diff --git a/src/main/java/jp/plusplus/fbs/container/inventory/InventoryBasket.java b/src/main/java/jp/plusplus/fbs/container/inventory/InventoryBasket.java new file mode 100644 index 0000000..9db5485 --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/container/inventory/InventoryBasket.java @@ -0,0 +1,162 @@ +package jp.plusplus.fbs.container.inventory;
+
+import jp.plusplus.fbs.alchemy.AlchemyRegistry;
+import jp.plusplus.fbs.alchemy.IAlchemyMaterial;
+import jp.plusplus.fbs.alchemy.IAlchemyProduct;
+import jp.plusplus.fbs.item.ItemCharm;
+import jp.plusplus.fbs.item.ItemCore;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.entity.player.InventoryPlayer;
+import net.minecraft.inventory.IInventory;
+import net.minecraft.item.Item;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.nbt.NBTTagList;
+import net.minecraft.util.StatCollector;
+
+/**
+ * Created by plusplus_F on 2015/11/11.
+ */
+public class InventoryBasket implements IInventory {
+ private InventoryPlayer inventoryPlayer;
+ private ItemStack currentItem;
+ private ItemStack[] items;
+ private int currentIndex;
+
+ public InventoryBasket(InventoryPlayer inventory) {
+ inventoryPlayer = inventory;
+ currentItem = inventoryPlayer.getCurrentItem();
+ currentIndex=inventory.currentItem;
+ items = new ItemStack[54];
+ }
+ public InventoryBasket(InventoryPlayer inventory, int index) {
+ inventoryPlayer = inventory;
+ this.currentItem = inventory.getStackInSlot(index);
+ currentIndex=index;
+ items = new ItemStack[54];
+ }
+
+ @Override
+ public int getSizeInventory() {
+ return items.length;
+ }
+
+ @Override
+ public ItemStack getStackInSlot(int slot) {
+ return items[slot];
+ }
+
+ @Override
+ public ItemStack decrStackSize(int i, int size) {
+ if (this.items[i] != null) {
+ ItemStack itemstack;
+
+ if (this.items[i].stackSize <= size) {
+ itemstack = this.items[i];
+ this.items[i] = null;
+ this.markDirty();
+ return itemstack;
+ } else {
+ itemstack = this.items[i].splitStack(size);
+
+ if (this.items[i].stackSize == 0) {
+ this.items[i] = null;
+ }
+
+ this.markDirty();
+ return itemstack;
+ }
+ }
+ return null;
+ }
+
+ @Override
+ public ItemStack getStackInSlotOnClosing(int i) {
+ if (this.items[i] != null) {
+ ItemStack itemstack = this.items[i];
+ this.items[i] = null;
+ return itemstack;
+ }
+ return null;
+ }
+
+ @Override
+ public void setInventorySlotContents(int i, ItemStack item) {
+ this.items[i] = item;
+
+ if (item != null && item.stackSize > this.getInventoryStackLimit()) {
+ item.stackSize = this.getInventoryStackLimit();
+ }
+
+ this.markDirty();
+ }
+
+ @Override
+ public String getInventoryName() {
+ return StatCollector.translateToLocal(ItemCore.basket.getUnlocalizedName() + ".name");
+ }
+
+ @Override
+ public boolean hasCustomInventoryName() {
+ return false;
+ }
+
+ @Override
+ public int getInventoryStackLimit() {
+ return 64;
+ }
+
+ @Override
+ public void markDirty() {
+ }
+
+ @Override
+ public boolean isUseableByPlayer(EntityPlayer p_70300_1_) {
+ return true;
+ }
+
+ @Override
+ public void openInventory() {
+ if (!currentItem.hasTagCompound()) {
+ currentItem.setTagCompound(new NBTTagCompound());
+ currentItem.getTagCompound().setTag("Items", new NBTTagList());
+ }
+ else if(!currentItem.getTagCompound().hasKey("Items")){
+ currentItem.getTagCompound().setTag("Items", new NBTTagList());
+ }
+
+ NBTTagList tags = (NBTTagList) currentItem.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);
+ }
+ }
+ }
+
+ @Override
+ public void closeInventory() {
+ NBTTagList tagList = new NBTTagList();
+ for (int i = 0; i < items.length; i++) {
+ if (items[i] != null) {
+ NBTTagCompound compound = new NBTTagCompound();
+ compound.setByte("Slot", (byte) i);
+ items[i].writeToNBT(compound);
+ tagList.appendTag(compound);
+ }
+ }
+ ItemStack result = new ItemStack(currentItem.getItem(), 1, currentItem.getItemDamage());
+ result.setTagCompound(new NBTTagCompound());;
+ result.getTagCompound().setTag("Items", tagList);
+ result.getTagCompound().setInteger("Color", currentItem.getTagCompound().getInteger("Color"));
+
+ inventoryPlayer.mainInventory[currentIndex] = result;
+ }
+
+ @Override
+ public boolean isItemValidForSlot(int i, ItemStack item) {
+ Item it=item.getItem();
+ return it instanceof IAlchemyMaterial || it instanceof IAlchemyProduct || AlchemyRegistry.isBasketItem(item);
+ }
+}
diff --git a/src/main/java/jp/plusplus/fbs/container/inventory/InventoryBonfire$EnchantmentPair.class b/src/main/java/jp/plusplus/fbs/container/inventory/InventoryBonfire$EnchantmentPair.class Binary files differnew file mode 100644 index 0000000..9443dba --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/container/inventory/InventoryBonfire$EnchantmentPair.class diff --git a/src/main/java/jp/plusplus/fbs/container/inventory/InventoryBonfire.class b/src/main/java/jp/plusplus/fbs/container/inventory/InventoryBonfire.class Binary files differnew file mode 100644 index 0000000..a51ef15 --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/container/inventory/InventoryBonfire.class diff --git a/src/main/java/jp/plusplus/fbs/container/inventory/InventoryBonfire.java b/src/main/java/jp/plusplus/fbs/container/inventory/InventoryBonfire.java new file mode 100644 index 0000000..692dcaf --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/container/inventory/InventoryBonfire.java @@ -0,0 +1,288 @@ +package jp.plusplus.fbs.container.inventory;
+
+import jp.plusplus.fbs.AchievementRegistry;
+import jp.plusplus.fbs.alchemy.AlchemyRegistry;
+import jp.plusplus.fbs.alchemy.IAlchemyMaterial;
+import jp.plusplus.fbs.api.FBSEntityPropertiesAPI;
+import jp.plusplus.fbs.block.BlockCore;
+import jp.plusplus.fbs.exprop.FBSEntityProperties;
+import jp.plusplus.fbs.exprop.SanityManager;
+import jp.plusplus.fbs.item.ItemCore;
+import net.minecraft.enchantment.Enchantment;
+import net.minecraft.enchantment.EnchantmentHelper;
+import net.minecraft.entity.item.EntityItem;
+import net.minecraft.entity.item.EntityXPOrb;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.init.Items;
+import net.minecraft.inventory.IInventory;
+import net.minecraft.inventory.SlotFurnace;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.tileentity.TileEntityFurnace;
+import net.minecraft.util.ChatComponentText;
+import net.minecraft.util.MathHelper;
+import net.minecraft.util.StatCollector;
+import shift.mceconomy2.MCEconomy2;
+import shift.mceconomy2.api.MCEconomyAPI;
+
+import java.util.ArrayList;
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.Random;
+
+/**
+ * Created by plusplus_F on 2015/10/19.
+ */
+public class InventoryBonfire implements IInventory {
+ public ItemStack[] itemStacks=new ItemStack[4];
+ public Random rand=new Random();
+ public EntityPlayer player;
+
+ private int x,y,z;
+
+ public InventoryBonfire(int x, int y, int z, EntityPlayer player){
+ this.x=x;
+ this.y=y;
+ this.z=z;
+ this.player=player;
+ }
+
+ public float getExtractProb(EnchantmentPair ench, int mLv){
+ float p=0.5f;
+ p-=0.15f*(ench.lv-1);
+ p+=0.025f*mLv;
+ return p;
+ }
+
+ @Override
+ public int getSizeInventory() {
+ return itemStacks.length;
+ }
+
+ @Override
+ public ItemStack getStackInSlot(int p_70301_1_) {
+ return itemStacks[p_70301_1_];
+ }
+
+ @Override
+ public ItemStack decrStackSize(int p_70298_1_, int p_70298_2_) {
+ if (this.itemStacks[p_70298_1_] != null) {
+ ItemStack itemstack;
+
+ if (this.itemStacks[p_70298_1_].stackSize <= p_70298_2_) {
+ itemstack = this.itemStacks[p_70298_1_];
+ this.itemStacks[p_70298_1_] = null;
+ this.markDirty();
+ return itemstack;
+ } else {
+ itemstack = this.itemStacks[p_70298_1_].splitStack(p_70298_2_);
+
+ if (this.itemStacks[p_70298_1_].stackSize == 0) {
+ this.itemStacks[p_70298_1_] = null;
+ }
+
+ this.markDirty();
+ return itemstack;
+ }
+ }
+ return null;
+ }
+
+ @Override
+ public ItemStack getStackInSlotOnClosing(int p_70304_1_) {
+ if (this.itemStacks[p_70304_1_] != null) {
+ ItemStack itemstack = this.itemStacks[p_70304_1_];
+ this.itemStacks[p_70304_1_] = null;
+ return itemstack;
+ }
+ return null;
+ }
+
+ @Override
+ public void setInventorySlotContents(int p_70299_1_, ItemStack p_70299_2_) {
+ this.itemStacks[p_70299_1_] = p_70299_2_;
+ if (p_70299_2_ != null && p_70299_2_.stackSize > this.getInventoryStackLimit()) {
+ p_70299_2_.stackSize = this.getInventoryStackLimit();
+ }
+ this.markDirty();
+ }
+
+ @Override
+ public String getInventoryName() {
+ return BlockCore.bonfire.getLocalizedName();
+ }
+
+ @Override
+ public boolean hasCustomInventoryName() {
+ return false;
+ }
+
+ @Override
+ public int getInventoryStackLimit() {
+ return 64;
+ }
+
+ @Override
+ public void markDirty() {
+ //焼却スロットにアイテムがある場合
+ if(itemStacks[0]!=null){
+ if(!player.worldObj.isRemote) {
+ //--------------------------------焼却経験値の生成------------------------------------------
+ float rate;
+ int size = itemStacks[0].stackSize;
+ int tmp;
+
+ //レートの決定
+ float value;
+ if(itemStacks[0].isItemStackDamageable()){
+ ItemStack is=itemStacks[0].copy();
+ is.setItemDamage(0);
+ value=MCEconomyAPI.getPurchase(is)*(1.f-(float)itemStacks[0].getItemDamage()/(float)itemStacks[0].getMaxDamage());
+ }
+ else{
+ value=MCEconomyAPI.getPurchase(itemStacks[0]);
+ }
+ rate=0.001f*value;
+ if(rate<0.02f) rate=0.02f;
+ if(rate>1.f) rate=1.f;
+
+ //経験値の決定
+ if(rate<1.f){
+ tmp = MathHelper.floor_float(size * rate);
+ if (tmp < MathHelper.ceiling_float_int(size * rate) && (float) Math.random() < size * rate - (float) tmp) {
+ tmp++;
+ }
+ size = tmp;
+ }
+
+ while (size > 0) {
+ tmp = EntityXPOrb.getXPSplit(size);
+ size -= tmp;
+ player.worldObj.spawnEntityInWorld(new EntityXPOrb(player.worldObj, player.posX, player.posY + 0.5D, player.posZ + 0.5D, tmp));
+ }
+
+ //焼却アイテムがエンチャントされてあり、かつハーブスロットにハーブが存在する場合
+ //--------------------------------ESの生成------------------------------------------
+ if (itemStacks[0].isItemEnchanted() || itemStacks[0].getItem()==Items.enchanted_book) {
+ int herb = 0;
+ for (int i = 1; i < 4; i++) {
+ if (itemStacks[i] == null) continue;
+ if (!(itemStacks[i].getItem() instanceof IAlchemyMaterial)) continue;
+
+ if (AlchemyRegistry.IsMatching("herb", itemStacks[i])) {
+ herb++;
+ }
+ }
+
+ if (herb > 0) {
+ //エンチャントの抽出
+ ArrayList<EnchantmentPair> list = new ArrayList<EnchantmentPair>();
+ Map enchantments = EnchantmentHelper.getEnchantments(itemStacks[0]);
+ for (Object obj : enchantments.entrySet()) {
+ Map.Entry e = (Map.Entry) obj;
+ list.add(new EnchantmentPair((Integer) e.getKey(), (Integer) e.getValue()));
+ }
+
+ int mLv=FBSEntityPropertiesAPI.GetMagicLevel(player);
+
+ //ハーブの数だけ繰り返す
+ for (; herb > 0 && !list.isEmpty(); herb--) {
+ int index = rand.nextInt(list.size());
+ EnchantmentPair ep = list.get(index);
+ if (!player.capabilities.isCreativeMode && rand.nextFloat() >= getExtractProb(ep, mLv)){
+ String str=String.format(StatCollector.translateToLocal("info.fbs.enchant.extFailure"), Enchantment.enchantmentsList[ep.id].getTranslatedName(ep.lv));
+ player.addChatComponentMessage(new ChatComponentText(str));
+ continue; //確率で失敗
+ }
+
+ //経験値
+ double exp=100 * ep.lv;
+ FBSEntityPropertiesAPI.AddExp(player, exp, true);
+
+ String str=String.format(StatCollector.translateToLocal("info.fbs.enchant.extSuccess"), Enchantment.enchantmentsList[ep.id].getTranslatedName(ep.lv));
+ str=str+String.format("(EXP+%.2f)", exp);
+ player.addChatComponentMessage(new ChatComponentText(str));
+
+ //ESの生成
+ ItemStack es = new ItemStack(ItemCore.enchantScroll);
+ LinkedHashMap ench = new LinkedHashMap();
+ ench.put(ep.id, ep.lv);
+ EnchantmentHelper.setEnchantments(ench, es);
+
+ player.entityDropItem(es, 0);
+ list.remove(index);
+
+ player.triggerAchievement(AchievementRegistry.extract);
+ }
+ }
+ }
+ }
+
+ for(int i=0;i<itemStacks.length;i++){
+ itemStacks[i]=null;
+ }
+ }
+ }
+
+ @Override
+ public boolean isUseableByPlayer(EntityPlayer p_70300_1_) {
+ return p_70300_1_.worldObj.getBlockMetadata(x,y,z)>0;
+ }
+
+ @Override
+ public void openInventory() {
+
+ }
+
+ @Override
+ public void closeInventory() {
+ if(player.worldObj.isRemote) return;
+
+ for(int i=0;i<itemStacks.length;i++){
+ ItemStack itemstack = this.getStackInSlot(i);
+
+ if (itemstack != null){
+ float f = this.rand.nextFloat() * 0.8F + 0.1F;
+ float f1 = this.rand.nextFloat() * 0.8F + 0.1F;
+ float f2 = this.rand.nextFloat() * 0.8F + 0.1F;
+
+ while (itemstack.stackSize > 0){
+ int k1 = this.rand.nextInt(21) + 10;
+
+ if (k1 > itemstack.stackSize){
+ k1 = itemstack.stackSize;
+ }
+
+ itemstack.stackSize -= k1;
+ double x=player.posX+f;
+ double y=player.posY+f1+player.getEyeHeight();
+ double z=player.posZ+f2;
+ EntityItem entityitem = new EntityItem(player.worldObj, x, y, z, new ItemStack(itemstack.getItem(), k1, itemstack.getItemDamage()));
+
+ if (itemstack.hasTagCompound()){
+ entityitem.getEntityItem().setTagCompound((NBTTagCompound)itemstack.getTagCompound().copy());
+ }
+
+ float f3 = 0.05F;
+ entityitem.motionX = (double)((float)this.rand.nextGaussian() * f3);
+ entityitem.motionY = (double)((float)this.rand.nextGaussian() * f3 + 0.2F);
+ entityitem.motionZ = (double)((float)this.rand.nextGaussian() * f3);
+ player.worldObj.spawnEntityInWorld(entityitem);
+ }
+ }
+ }
+ }
+
+ @Override
+ public boolean isItemValidForSlot(int p_94041_1_, ItemStack p_94041_2_) {
+ return true;
+ }
+
+ public static class EnchantmentPair{
+ int id, lv;
+ public EnchantmentPair(int id, int lv){
+ this.id=id;
+ this.lv=lv;
+ }
+ }
+}
diff --git a/src/main/java/jp/plusplus/fbs/container/inventory/InventoryContract.class b/src/main/java/jp/plusplus/fbs/container/inventory/InventoryContract.class Binary files differnew file mode 100644 index 0000000..32eb9da --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/container/inventory/InventoryContract.class diff --git a/src/main/java/jp/plusplus/fbs/container/inventory/InventoryContract.java b/src/main/java/jp/plusplus/fbs/container/inventory/InventoryContract.java new file mode 100644 index 0000000..000df7f --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/container/inventory/InventoryContract.java @@ -0,0 +1,150 @@ +package jp.plusplus.fbs.container.inventory;
+
+import net.minecraft.entity.item.EntityItem;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.inventory.IInventory;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.util.StatCollector;
+
+import java.util.Random;
+
+/**
+ * Created by plusplus_F on 2015/11/04.
+ */
+public class InventoryContract implements IInventory {
+ public EntityPlayer player;
+ public ItemStack[] itemStacks=new ItemStack[4];
+ protected Random rand=new Random();
+
+ public InventoryContract(EntityPlayer player){
+ this.player=player;
+ }
+
+ @Override
+ public int getSizeInventory() {
+ return itemStacks.length;
+ }
+
+ @Override
+ public ItemStack getStackInSlot(int p_70301_1_) {
+ return itemStacks[p_70301_1_];
+ }
+
+ @Override
+ public ItemStack decrStackSize(int p_70298_1_, int p_70298_2_) {
+ if (this.itemStacks[p_70298_1_] != null) {
+ ItemStack itemstack;
+
+ if (this.itemStacks[p_70298_1_].stackSize <= p_70298_2_) {
+ itemstack = this.itemStacks[p_70298_1_];
+ this.itemStacks[p_70298_1_] = null;
+ this.markDirty();
+ return itemstack;
+ } else {
+ itemstack = this.itemStacks[p_70298_1_].splitStack(p_70298_2_);
+
+ if (this.itemStacks[p_70298_1_].stackSize == 0) {
+ this.itemStacks[p_70298_1_] = null;
+ }
+
+ this.markDirty();
+ return itemstack;
+ }
+ }
+ return null;
+ }
+
+ @Override
+ public ItemStack getStackInSlotOnClosing(int p_70304_1_) {
+ if (this.itemStacks[p_70304_1_] != null) {
+ ItemStack itemstack = this.itemStacks[p_70304_1_];
+ this.itemStacks[p_70304_1_] = null;
+ return itemstack;
+ }
+ return null;
+ }
+
+ @Override
+ public void setInventorySlotContents(int p_70299_1_, ItemStack p_70299_2_) {
+ this.itemStacks[p_70299_1_] = p_70299_2_;
+ if (p_70299_2_ != null && p_70299_2_.stackSize > this.getInventoryStackLimit()) {
+ p_70299_2_.stackSize = this.getInventoryStackLimit();
+ }
+ this.markDirty();
+ }
+
+ @Override
+ public String getInventoryName() {
+ return StatCollector.translateToLocal("book.fbs.contract.title");
+ }
+
+ @Override
+ public boolean hasCustomInventoryName() {
+ return false;
+ }
+
+ @Override
+ public int getInventoryStackLimit() {
+ return 64;
+ }
+
+ @Override
+ public void markDirty() {
+
+ }
+
+ @Override
+ public boolean isUseableByPlayer(EntityPlayer p_70300_1_) {
+ return true;
+ }
+
+ @Override
+ public void openInventory() {
+
+ }
+
+ @Override
+ public void closeInventory() {
+ if(player.worldObj.isRemote) return;
+
+ for(int i=0;i<itemStacks.length;i++){
+ ItemStack itemstack = this.getStackInSlot(i);
+
+ if (itemstack != null){
+ float f = this.rand.nextFloat() * 0.8F + 0.1F;
+ float f1 = this.rand.nextFloat() * 0.8F + 0.1F;
+ float f2 = this.rand.nextFloat() * 0.8F + 0.1F;
+
+ while (itemstack.stackSize > 0){
+ int k1 = this.rand.nextInt(21) + 10;
+
+ if (k1 > itemstack.stackSize){
+ k1 = itemstack.stackSize;
+ }
+
+ itemstack.stackSize -= k1;
+ double x=player.posX+f;
+ double y=player.posY+f1+player.getEyeHeight();
+ double z=player.posZ+f2;
+ EntityItem entityitem = new EntityItem(player.worldObj, x, y, z, new ItemStack(itemstack.getItem(), k1, itemstack.getItemDamage()));
+
+ if (itemstack.hasTagCompound()){
+ entityitem.getEntityItem().setTagCompound((NBTTagCompound)itemstack.getTagCompound().copy());
+ }
+
+ float f3 = 0.05F;
+ entityitem.motionX = (double)((float)this.rand.nextGaussian() * f3);
+ entityitem.motionY = (double)((float)this.rand.nextGaussian() * f3 + 0.2F);
+ entityitem.motionZ = (double)((float)this.rand.nextGaussian() * f3);
+ player.worldObj.spawnEntityInWorld(entityitem);
+ }
+ }
+ }
+ }
+
+ @Override
+ public boolean isItemValidForSlot(int p_94041_1_, ItemStack p_94041_2_) {
+ return true;
+ }
+}
diff --git a/src/main/java/jp/plusplus/fbs/container/inventory/InventoryEnchantment.class b/src/main/java/jp/plusplus/fbs/container/inventory/InventoryEnchantment.class Binary files differnew file mode 100644 index 0000000..8f4bd1a --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/container/inventory/InventoryEnchantment.class diff --git a/src/main/java/jp/plusplus/fbs/container/inventory/InventoryEnchantment.java b/src/main/java/jp/plusplus/fbs/container/inventory/InventoryEnchantment.java new file mode 100644 index 0000000..a66e844 --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/container/inventory/InventoryEnchantment.java @@ -0,0 +1,158 @@ +package jp.plusplus.fbs.container.inventory;
+
+import jp.plusplus.fbs.block.BlockCore;
+import jp.plusplus.fbs.item.ItemCore;
+import net.minecraft.enchantment.EnchantmentHelper;
+import net.minecraft.entity.item.EntityItem;
+import net.minecraft.entity.item.EntityXPOrb;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.inventory.IInventory;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.util.MathHelper;
+import net.minecraft.util.StatCollector;
+import shift.mceconomy2.api.MCEconomyAPI;
+
+import java.util.ArrayList;
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.Random;
+
+/**
+ * Created by plusplus_F on 2015/10/21.
+ */
+public class InventoryEnchantment implements IInventory {
+ public EntityPlayer player;
+ public ItemStack[] itemStacks=new ItemStack[3];
+ protected Random rand=new Random();
+
+ public InventoryEnchantment(EntityPlayer ep){
+ player=ep;
+ }
+
+ @Override
+ public int getSizeInventory() {
+ return itemStacks.length;
+ }
+
+ @Override
+ public ItemStack getStackInSlot(int p_70301_1_) {
+ return itemStacks[p_70301_1_];
+ }
+
+ @Override
+ public ItemStack decrStackSize(int p_70298_1_, int p_70298_2_) {
+ if (this.itemStacks[p_70298_1_] != null) {
+ ItemStack itemstack;
+
+ if (this.itemStacks[p_70298_1_].stackSize <= p_70298_2_) {
+ itemstack = this.itemStacks[p_70298_1_];
+ this.itemStacks[p_70298_1_] = null;
+ this.markDirty();
+ return itemstack;
+ } else {
+ itemstack = this.itemStacks[p_70298_1_].splitStack(p_70298_2_);
+
+ if (this.itemStacks[p_70298_1_].stackSize == 0) {
+ this.itemStacks[p_70298_1_] = null;
+ }
+
+ this.markDirty();
+ return itemstack;
+ }
+ }
+ return null;
+ }
+
+ @Override
+ public ItemStack getStackInSlotOnClosing(int p_70304_1_) {
+ if (this.itemStacks[p_70304_1_] != null) {
+ ItemStack itemstack = this.itemStacks[p_70304_1_];
+ this.itemStacks[p_70304_1_] = null;
+ return itemstack;
+ }
+ return null;
+ }
+
+ @Override
+ public void setInventorySlotContents(int p_70299_1_, ItemStack p_70299_2_) {
+ this.itemStacks[p_70299_1_] = p_70299_2_;
+ if (p_70299_2_ != null && p_70299_2_.stackSize > this.getInventoryStackLimit()) {
+ p_70299_2_.stackSize = this.getInventoryStackLimit();
+ }
+ this.markDirty();
+ }
+
+ @Override
+ public String getInventoryName() {
+ return StatCollector.translateToLocal(ItemCore.enchantScroll.getUnlocalizedName()+".name");
+ }
+
+ @Override
+ public boolean hasCustomInventoryName() {
+ return false;
+ }
+
+ @Override
+ public int getInventoryStackLimit() {
+ return 64;
+ }
+
+ @Override
+ public void markDirty() {
+
+ }
+
+ @Override
+ public boolean isUseableByPlayer(EntityPlayer p_70300_1_) {
+ return true;
+ }
+
+ @Override
+ public void openInventory() {
+
+ }
+
+ @Override
+ public void closeInventory() {
+ if(player.worldObj.isRemote) return;
+
+ for(int i=0;i<itemStacks.length;i++){
+ ItemStack itemstack = this.getStackInSlot(i);
+
+ if (itemstack != null){
+ float f = this.rand.nextFloat() * 0.8F + 0.1F;
+ float f1 = this.rand.nextFloat() * 0.8F + 0.1F;
+ float f2 = this.rand.nextFloat() * 0.8F + 0.1F;
+
+ while (itemstack.stackSize > 0){
+ int k1 = this.rand.nextInt(21) + 10;
+
+ if (k1 > itemstack.stackSize){
+ k1 = itemstack.stackSize;
+ }
+
+ itemstack.stackSize -= k1;
+ double x=player.posX+f;
+ double y=player.posY+f1+player.getEyeHeight();
+ double z=player.posZ+f2;
+ EntityItem entityitem = new EntityItem(player.worldObj, x, y, z, new ItemStack(itemstack.getItem(), k1, itemstack.getItemDamage()));
+
+ if (itemstack.hasTagCompound()){
+ entityitem.getEntityItem().setTagCompound((NBTTagCompound)itemstack.getTagCompound().copy());
+ }
+
+ float f3 = 0.05F;
+ entityitem.motionX = (double)((float)this.rand.nextGaussian() * f3);
+ entityitem.motionY = (double)((float)this.rand.nextGaussian() * f3 + 0.2F);
+ entityitem.motionZ = (double)((float)this.rand.nextGaussian() * f3);
+ player.worldObj.spawnEntityInWorld(entityitem);
+ }
+ }
+ }
+ }
+
+ public boolean isItemValidForSlot(int p_94041_1_, ItemStack p_94041_2_) {
+ return true;
+ }
+}
diff --git a/src/main/java/jp/plusplus/fbs/container/inventory/InventoryMagic.class b/src/main/java/jp/plusplus/fbs/container/inventory/InventoryMagic.class Binary files differnew file mode 100644 index 0000000..caca4b1 --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/container/inventory/InventoryMagic.class diff --git a/src/main/java/jp/plusplus/fbs/container/inventory/InventoryMagic.java b/src/main/java/jp/plusplus/fbs/container/inventory/InventoryMagic.java new file mode 100644 index 0000000..7cdb62a --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/container/inventory/InventoryMagic.java @@ -0,0 +1,179 @@ +package jp.plusplus.fbs.container.inventory;
+
+import cpw.mods.fml.common.FMLLog;
+import jp.plusplus.fbs.container.ContainerMagic;
+import jp.plusplus.fbs.tileentity.TileEntityMagicCore;
+import net.minecraft.entity.item.EntityItem;
+import net.minecraft.entity.item.EntityXPOrb;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.inventory.IInventory;
+import net.minecraft.inventory.Slot;
+import net.minecraft.inventory.SlotFurnace;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.util.MathHelper;
+import net.minecraft.util.ResourceLocation;
+
+import java.util.Random;
+
+/**
+ * Created by pluslus_F on 2015/06/18.
+ */
+public abstract class InventoryMagic implements IInventory {
+ public ItemStack[] itemStacks;
+ public TileEntityMagicCore magicCore;
+ public Random rand=new Random();
+ public EntityPlayer player;
+
+ public InventoryMagic(int size, TileEntityMagicCore te, EntityPlayer player){
+ itemStacks=new ItemStack[size];
+ magicCore=te;
+ this.player=player;
+ }
+
+ public abstract void work();
+ public abstract void onInventoryChanged(int index);
+ public abstract void addSlotToContainer(ContainerMagic cm);
+
+ public int getProgressScaled(int sc){
+ if(magicCore==null) return 0;
+ if(magicCore.progressMax==0) return 0;
+ return sc*magicCore.progress/magicCore.progressMax;
+ }
+
+ public abstract ResourceLocation getResource();
+ public int getProgressX(){ return 68;}
+ public int getProgressY(){ return 36;}
+
+ @Override
+ public int getSizeInventory() {
+ return itemStacks.length;
+ }
+
+ @Override
+ public ItemStack getStackInSlot(int p_70301_1_) {
+ return itemStacks[p_70301_1_];
+ }
+
+ @Override
+ public ItemStack decrStackSize(int p_70298_1_, int p_70298_2_) {
+ if (this.itemStacks[p_70298_1_] != null) {
+ ItemStack itemstack;
+
+ if (this.itemStacks[p_70298_1_].stackSize <= p_70298_2_) {
+ itemstack = this.itemStacks[p_70298_1_];
+ this.itemStacks[p_70298_1_] = null;
+ this.markDirty();
+ return itemstack;
+ } else {
+ itemstack = this.itemStacks[p_70298_1_].splitStack(p_70298_2_);
+
+ if (this.itemStacks[p_70298_1_].stackSize == 0) {
+ this.itemStacks[p_70298_1_] = null;
+ }
+
+ this.markDirty();
+ return itemstack;
+ }
+ }
+ return null;
+ }
+
+ @Override
+ public ItemStack getStackInSlotOnClosing(int p_70304_1_) {
+ if (this.itemStacks[p_70304_1_] != null) {
+ ItemStack itemstack = this.itemStacks[p_70304_1_];
+ this.itemStacks[p_70304_1_] = null;
+ return itemstack;
+ }
+ return null;
+ }
+
+ @Override
+ public void setInventorySlotContents(int p_70299_1_, ItemStack p_70299_2_) {
+ this.itemStacks[p_70299_1_] = p_70299_2_;
+ if (p_70299_2_ != null && p_70299_2_.stackSize > this.getInventoryStackLimit()) {
+ p_70299_2_.stackSize = this.getInventoryStackLimit();
+ }
+ this.markDirty();
+ }
+
+ @Override
+ public abstract String getInventoryName();
+
+ @Override
+ public boolean hasCustomInventoryName() {
+ return false;
+ }
+
+ @Override
+ public int getInventoryStackLimit() {
+ return 64;
+ }
+
+ @Override
+ public void markDirty() {
+
+ }
+
+ @Override
+ public boolean isUseableByPlayer(EntityPlayer p_70300_1_) {
+ return true;
+ }
+
+ @Override
+ public void openInventory() {
+ if(magicCore!=null){
+ magicCore.setInventory(this);
+ //FMLLog.info("registered inventory");
+ }
+ }
+
+ @Override
+ public void closeInventory() {
+ if(magicCore!=null){
+ magicCore.removeInventory();
+ }
+
+ if(player.worldObj.isRemote) return;
+
+ for(int i=0;i<itemStacks.length;i++){
+ ItemStack itemstack = this.getStackInSlot(i);
+
+ if (itemstack != null){
+ float f = this.rand.nextFloat() * 0.8F + 0.1F;
+ float f1 = this.rand.nextFloat() * 0.8F + 0.1F;
+ float f2 = this.rand.nextFloat() * 0.8F + 0.1F;
+
+ while (itemstack.stackSize > 0){
+ int k1 = this.rand.nextInt(21) + 10;
+
+ if (k1 > itemstack.stackSize){
+ k1 = itemstack.stackSize;
+ }
+
+ itemstack.stackSize -= k1;
+ double x=player.posX+f;
+ double y=player.posY+f1+player.getEyeHeight();
+ double z=player.posZ+f2;
+ EntityItem entityitem = new EntityItem(player.worldObj, x, y, z, new ItemStack(itemstack.getItem(), k1, itemstack.getItemDamage()));
+
+ if (itemstack.hasTagCompound()){
+ entityitem.getEntityItem().setTagCompound((NBTTagCompound)itemstack.getTagCompound().copy());
+ }
+
+ float f3 = 0.05F;
+ entityitem.motionX = (double)((float)this.rand.nextGaussian() * f3);
+ entityitem.motionY = (double)((float)this.rand.nextGaussian() * f3 + 0.2F);
+ entityitem.motionZ = (double)((float)this.rand.nextGaussian() * f3);
+ player.worldObj.spawnEntityInWorld(entityitem);
+ }
+ }
+ }
+ }
+
+ @Override
+ public boolean isItemValidForSlot(int p_94041_1_, ItemStack p_94041_2_) {
+ return true;
+ }
+}
diff --git a/src/main/java/jp/plusplus/fbs/container/inventory/InventoryMagicCopy.class b/src/main/java/jp/plusplus/fbs/container/inventory/InventoryMagicCopy.class Binary files differnew file mode 100644 index 0000000..0c75b21 --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/container/inventory/InventoryMagicCopy.class diff --git a/src/main/java/jp/plusplus/fbs/container/inventory/InventoryMagicCopy.java b/src/main/java/jp/plusplus/fbs/container/inventory/InventoryMagicCopy.java new file mode 100644 index 0000000..482ffc6 --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/container/inventory/InventoryMagicCopy.java @@ -0,0 +1,108 @@ +package jp.plusplus.fbs.container.inventory;
+
+import jp.plusplus.fbs.FBS;
+import jp.plusplus.fbs.Registry;
+import jp.plusplus.fbs.container.ContainerMagic;
+import jp.plusplus.fbs.container.slot.SlotMagic;
+import jp.plusplus.fbs.container.slot.SlotMagicCopy;
+import jp.plusplus.fbs.container.slot.SlotMagicTakeOnly;
+import jp.plusplus.fbs.exprop.SanityManager;
+import jp.plusplus.fbs.item.ItemBookSorcery;
+import jp.plusplus.fbs.api.MagicBase;
+import jp.plusplus.fbs.tileentity.TileEntityMagicCore;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.util.ResourceLocation;
+
+/**
+ * Created by pluslus_F on 2015/06/18.
+ */
+public class InventoryMagicCopy extends InventoryMagic {
+ public static final ResourceLocation rl=new ResourceLocation(FBS.MODID, "textures/gui/magicCopy.png");
+
+ public InventoryMagicCopy(TileEntityMagicCore te, EntityPlayer player) {
+ super(4, te, player);
+ }
+
+ @Override
+ public void work() {
+ if(itemStacks[0]==null) return;
+
+ //コピー魔法が無かったら
+ MagicBase mb=Registry.GetMagic("fbs.copy").getMagic(this.player.worldObj, this.player, true);
+ if(mb==null) return;
+
+ boolean crm=player.capabilities.isCreativeMode;
+
+ if(crm || mb.checkSuccess()){
+ //クリエイティブか、魔法に成功すると
+ for(int i=1;i<3;i++){
+ if(itemStacks[i]==null){
+ itemStacks[i]=itemStacks[0].copy();
+ }
+ else if(itemStacks[i].isItemEqual(itemStacks[0])){
+ itemStacks[i].stackSize++;
+ }
+ }
+ }
+ else {
+ SanityManager.loseSanity(player, 2, 10, true);
+ if(itemStacks[1]==null) itemStacks[1]=itemStacks[0];
+ else if(itemStacks[1].isItemEqual(itemStacks[0])) itemStacks[1].stackSize++;
+ }
+
+ //魔導書の回数を減らす
+ if(itemStacks[3]!=null && !crm) ItemBookSorcery.reduceMagicMaxUse(itemStacks[3]);
+
+ itemStacks[0]=null;
+ onInventoryChanged(0);
+ }
+
+ @Override
+ public void onInventoryChanged(int index) {
+ //FMLLog.info("changed");
+
+ //増やしたいアイテムが無い場合、魔導書が無い場合進捗を無に帰す
+ if (itemStacks[0] == null || itemStacks[3] == null) {
+ magicCore.resetProgress();
+ //FMLLog.info("item null");
+ return;
+ }
+
+ //本がおかしくても進捗を無に帰す
+ Registry.BookData bd = Registry.GetBookDataFromItemStack(itemStacks[3]);
+ if (bd == null || !bd.title.equals("fbs.copy") || ItemBookSorcery.getMagicMaxUse(itemStacks[3]) <= 0) {
+ magicCore.resetProgress();
+ return;
+ }
+
+ //増やせそうにない場合も進捗を無に帰す
+ for (int i = 1; i < 3; i++) {
+ if (itemStacks[i] == null) continue;
+ if (!itemStacks[i].isItemEqual(itemStacks[0]) || itemStacks[i].stackSize + 1 > itemStacks[i].getMaxStackSize()) {
+ magicCore.resetProgress();
+ return;
+ }
+ }
+
+ //進捗の最大値を設定する
+ magicCore.setProgressMax(20 * 10);
+ }
+
+ @Override
+ public void addSlotToContainer(ContainerMagic cm) {
+ cm.addSlotToContainer(new SlotMagicCopy(this, 0, 44, 36));
+ cm.addSlotToContainer(new SlotMagicTakeOnly(this, 1, 103, 36));
+ cm.addSlotToContainer(new SlotMagicTakeOnly(this, 2, 129, 36));
+ cm.addSlotToContainer(new SlotMagic(this, 3, 72, 17));
+ }
+
+ @Override
+ public ResourceLocation getResource() {
+ return rl;
+ }
+
+ @Override
+ public String getInventoryName() {
+ return Registry.GetLocalizedBookTitle("fbs.copy");
+ }
+}
diff --git a/src/main/java/jp/plusplus/fbs/container/inventory/InventoryMagicTimeTrace.class b/src/main/java/jp/plusplus/fbs/container/inventory/InventoryMagicTimeTrace.class Binary files differnew file mode 100644 index 0000000..3022a92 --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/container/inventory/InventoryMagicTimeTrace.class diff --git a/src/main/java/jp/plusplus/fbs/container/inventory/InventoryMagicTimeTrace.java b/src/main/java/jp/plusplus/fbs/container/inventory/InventoryMagicTimeTrace.java new file mode 100644 index 0000000..352dcfb --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/container/inventory/InventoryMagicTimeTrace.java @@ -0,0 +1,135 @@ +package jp.plusplus.fbs.container.inventory;
+
+import jp.plusplus.fbs.FBS;
+import jp.plusplus.fbs.Registry;
+import jp.plusplus.fbs.api.MagicBase;
+import jp.plusplus.fbs.container.ContainerMagic;
+import jp.plusplus.fbs.container.slot.SlotMagic;
+import jp.plusplus.fbs.container.slot.SlotMagicCopy;
+import jp.plusplus.fbs.container.slot.SlotMagicTakeOnly;
+import jp.plusplus.fbs.container.slot.SlotMagicTimeTrace;
+import jp.plusplus.fbs.exprop.SanityManager;
+import jp.plusplus.fbs.item.ItemBookSorcery;
+import jp.plusplus.fbs.mod.ForIR3;
+import jp.plusplus.fbs.mod.ForSS2;
+import jp.plusplus.fbs.tileentity.TileEntityMagicCore;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.item.ItemStack;
+import net.minecraft.util.ResourceLocation;
+
+/**
+ * Created by plusplus_F on 2016/02/28.
+ */
+public class InventoryMagicTimeTrace extends InventoryMagic {
+ public static final ResourceLocation rl=new ResourceLocation(FBS.MODID, "textures/gui/magicProcessing.png");
+
+ public InventoryMagicTimeTrace(TileEntityMagicCore te, EntityPlayer player) {
+ super(4, te, player);
+ }
+
+ public float getRepairPercent(){
+ return 0.5f*rand.nextFloat();
+ }
+
+ @Override
+ public void work() {
+ if(itemStacks[0]==null) return;
+
+ //魔法が無かったら
+ MagicBase mb=Registry.GetMagic("fbs.timeTrace").getMagic(this.player.worldObj, this.player, true);
+ if(mb==null) return;
+
+ boolean crm=player.capabilities.isCreativeMode;
+ if(crm || mb.checkSuccess()){
+ //クリエイティブか、魔法に成功すると
+ SanityManager.loseSanity(player, 1, 10, true);
+
+ ItemStack itemStack=itemStacks[0].copy();
+ if(FBS.cooperatesIR3 && ForIR3.isCrystalUnit(itemStack)){
+ ForIR3.repairCrystalUnit(itemStack, getRepairPercent());
+ }
+ else if(FBS.cooperatesSS2 && ForSS2.canTimeTrace(itemStack)){
+ itemStack=ForSS2.getTimeTraced(itemStack);
+ }
+ else if(itemStack.getItem().isItemTool(itemStack)){
+ int d=itemStack.getItemDamage();
+ d=Math.max(0, d-(int)(itemStack.getMaxDamage()*getRepairPercent()));
+ itemStack.setItemDamage(d);
+ }
+
+ if(itemStacks[1]==null){
+ itemStacks[1]=itemStack;
+ }
+ else if(itemStacks[1].isItemEqual(itemStack) && itemStacks[1].stackSize+itemStack.stackSize<=itemStack.getMaxStackSize()){
+ itemStacks[1].stackSize+=itemStack.stackSize;
+ }
+ }
+ else {
+ SanityManager.loseSanity(player, 1, 10, true);
+ if(itemStacks[1]==null) itemStacks[1]=itemStacks[0];
+ else if(itemStacks[1].isItemEqual(itemStacks[0])) itemStacks[1].stackSize++;
+ }
+
+ //魔導書の回数を減らす
+ if(itemStacks[2]!=null && !crm) ItemBookSorcery.reduceMagicMaxUse(itemStacks[2]);
+
+ itemStacks[0]=null;
+ onInventoryChanged(0);
+ }
+
+ @Override
+ public void onInventoryChanged(int index) {
+ //増やしたいアイテムが無い場合、魔導書が無い場合進捗を無に帰す
+ if (itemStacks[0] == null || itemStacks[2] == null) {
+ magicCore.resetProgress();
+ //FMLLog.info("item null");
+ return;
+ }
+
+ //本がおかしくても進捗を無に帰す
+ Registry.BookData bd = Registry.GetBookDataFromItemStack(itemStacks[2]);
+ if (bd == null || !bd.title.equals("fbs.timeTrace") || ItemBookSorcery.getMagicMaxUse(itemStacks[2]) <= 0) {
+ magicCore.resetProgress();
+ return;
+ }
+
+ //処理できそうにない場合も進捗を無に帰す
+ ItemStack get=null;
+ ItemStack itemStack=itemStacks[0].copy();
+ if(FBS.cooperatesIR3 && ForIR3.isCrystalUnit(itemStack)){
+ get=itemStack;
+ }
+ else if(FBS.cooperatesSS2 && ForSS2.canTimeTrace(itemStack)){
+ get=ForSS2.getTimeTraced(itemStack);
+ }
+ else if(itemStack.getItem().isItemTool(itemStack)){
+ get=itemStack;
+ }
+
+ //変換できない・完成品スロットのアイテムが違う・完成品スロットのスタック数がmaxのとき、失敗
+ if(get==null || (itemStacks[1]!=null && (!itemStacks[1].isItemEqual(get) || itemStacks[1].stackSize+get.stackSize>itemStacks[1].getMaxStackSize()))){
+ magicCore.resetProgress();
+ return;
+ }
+
+ //進捗の最大値を設定する
+ magicCore.setProgressMax(20 * 3);
+ }
+
+ @Override
+ public void addSlotToContainer(ContainerMagic cm) {
+ cm.addSlotToContainer(new SlotMagicTimeTrace(this, 0, 44, 36));
+ cm.addSlotToContainer(new SlotMagicTakeOnly(this, 1, 103, 36));
+ cm.addSlotToContainer(new SlotMagic(this, 2, 72, 17));
+ }
+
+ @Override
+ public ResourceLocation getResource() {
+ return rl;
+ }
+
+ @Override
+ public String getInventoryName() {
+ return Registry.GetLocalizedBookTitle("fbs.timeTrace");
+ }
+}
diff --git a/src/main/java/jp/plusplus/fbs/container/inventory/InventoryStaff.class b/src/main/java/jp/plusplus/fbs/container/inventory/InventoryStaff.class Binary files differnew file mode 100644 index 0000000..c20b0d3 --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/container/inventory/InventoryStaff.class diff --git a/src/main/java/jp/plusplus/fbs/container/inventory/InventoryStaff.java b/src/main/java/jp/plusplus/fbs/container/inventory/InventoryStaff.java new file mode 100644 index 0000000..35e6515 --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/container/inventory/InventoryStaff.java @@ -0,0 +1,189 @@ +package jp.plusplus.fbs.container.inventory;
+
+import jp.plusplus.fbs.AchievementRegistry;
+import jp.plusplus.fbs.Registry;
+import jp.plusplus.fbs.item.ItemCore;
+import jp.plusplus.fbs.item.ItemStaff;
+import jp.plusplus.fbs.api.IResonance;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.entity.player.InventoryPlayer;
+import net.minecraft.inventory.IInventory;
+import net.minecraft.item.ItemStack;
+import net.minecraft.util.ChatComponentText;
+import net.minecraft.util.ChatComponentTranslation;
+
+/**
+ * Createdby pluslus_Fon 2015/06/15.
+ */
+public class InventoryStaff implements IInventory {
+ public ItemStack[] itemStacks;
+
+
+ protected InventoryPlayer inventoryPlayer;
+ protected ItemStack currentItem;
+ protected ItemStack[] items;
+ public int gemNum;
+ public int bookNum;
+
+ public InventoryStaff(InventoryPlayer inventory) {
+ inventoryPlayer = inventory;
+ currentItem = inventoryPlayer.getCurrentItem();
+
+ if (currentItem != null && currentItem.getItem() instanceof ItemStaff) {
+ gemNum = ((ItemStaff) currentItem.getItem()).gemNum;
+ }
+
+ //InventorySize
+ bookNum=((ItemStaff)currentItem.getItem()).bookNum;
+ items = new ItemStack[gemNum+bookNum];
+ }
+
+ @Override
+ public int getSizeInventory() {
+ return items.length;
+ }
+
+ @Override
+ public ItemStack getStackInSlot(int slot) {
+ return items[slot];
+ }
+
+ @Override
+ public ItemStack decrStackSize(int p_70298_1_, int p_70298_2_) {
+ if (this.items[p_70298_1_] != null) {
+ ItemStack itemstack;
+
+ if (this.items[p_70298_1_].stackSize <= p_70298_2_) {
+ itemstack = this.items[p_70298_1_];
+ this.items[p_70298_1_] = null;
+ this.markDirty();
+ return itemstack;
+ } else {
+ itemstack = this.items[p_70298_1_].splitStack(p_70298_2_);
+
+ if (this.items[p_70298_1_].stackSize == 0) {
+ this.items[p_70298_1_] = null;
+ }
+
+ this.markDirty();
+ return itemstack;
+ }
+ }
+ return null;
+ }
+
+ @Override
+ public ItemStack getStackInSlotOnClosing(int p_70304_1_) {
+ if (this.items[p_70304_1_] != null) {
+ ItemStack itemstack = this.items[p_70304_1_];
+ this.items[p_70304_1_] = null;
+ return itemstack;
+ }
+ return null;
+ }
+
+ @Override
+ public void setInventorySlotContents(int p_70299_1_, ItemStack p_70299_2_) {
+ this.items[p_70299_1_] = p_70299_2_;
+ if (p_70299_2_ != null && p_70299_2_.stackSize > this.getInventoryStackLimit()) {
+ p_70299_2_.stackSize = this.getInventoryStackLimit();
+ }
+ this.markDirty();
+ }
+
+ @Override
+ public String getInventoryName() {
+ return currentItem.getDisplayName();
+ }
+
+ @Override
+ public boolean hasCustomInventoryName() {
+ return false;
+ }
+
+ @Override
+ public int getInventoryStackLimit() {
+ return 1;
+ }
+
+ @Override
+ public void markDirty() {
+ }
+
+ @Override
+ public boolean isUseableByPlayer(EntityPlayer p_70300_1_) {
+ return true;
+ }
+
+ /*
+ Containerが開かれたタイミングでItemStackの持っているNBTからアイテムを読み込んでいる
+ */
+ @Override
+ public void openInventory() {
+ items=ItemStaff.loadInventory(currentItem);
+ }
+
+ /*
+ Containerを閉じるときに保存
+ */
+ @Override
+ public void closeInventory() {
+ ItemStack result = new ItemStack(currentItem.getItem(), 1, currentItem.getItemDamage());
+ ItemStaff.saveInventory(result, items);
+
+ //ItemStackをセットする。NBTは右クリック等のタイミングでしか保存されないため再セットで保存している。
+ inventoryPlayer.mainInventory[inventoryPlayer.currentItem] = result;
+
+ EntityPlayer p=inventoryPlayer.player;
+ if(!p.worldObj.isRemote) {
+ String n = result.getTagCompound().getString("MagicName");
+ if (n.equals("fbs.failure")){
+ p.addChatComponentMessage(new ChatComponentTranslation("info.fbs.magic.resona.failure"));
+ }
+ else if (Registry.IsResonance(n)){
+ p.addChatComponentMessage(new ChatComponentTranslation("info.fbs.magic.resona.success"));
+ p.triggerAchievement(AchievementRegistry.resonance);
+ }
+
+
+ if(bookNum>1) {
+ IResonance r=Registry.GetResonance(n);
+ if(r==null) return;
+
+ String[] books=new String[bookNum];
+ for(int i=0;i<bookNum;i++){
+ if(items[i]==null) continue;
+ books[i]=Registry.GetUnlocalizedBookTitleFromItemStack(items[i]);
+ }
+
+ String s = "";
+ int i = 0;
+ boolean find = false, find1=false;
+ for (; i < bookNum; i++) {
+ if (items[i] != null && items[i].getItem() == ItemCore.bookSorcery) {
+ s = ItemCore.bookNoDecoded.getLocalizedBookTitle(items[i]);
+ find = true;
+ break;
+ }
+ }
+ for (i++; i < bookNum; i++) {
+ if (items[i] != null && items[i].getItem() == ItemCore.bookSorcery) {
+ s += " + " + ItemCore.bookNoDecoded.getLocalizedBookTitle(items[i]);
+ find1 = true;
+ break;
+ }
+ }
+ if (find && find1) {
+ s += " -> " + r.getDisplayMagicName(books);
+ p.addChatComponentMessage(new ChatComponentText(s));
+ }
+ }
+ }
+ }
+
+ @Override
+ public boolean isItemValidForSlot(int i, ItemStack item) {
+ if(item==null) return false;
+ return item.getItem()==ItemCore.bookSorcery;
+ }
+}
|
