package jp.plusplus.fbs.exprop; import jp.plusplus.fbs.block.BlockCore; import jp.plusplus.fbs.spirit.ISpiritTool; import jp.plusplus.fbs.spirit.SpiritManager; import jp.plusplus.fbs.spirit.SpiritStatus; import jp.plusplus.fbs.tileentity.TileEntityMagicCore; import net.minecraft.block.Block; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.MathHelper; import net.minecraft.world.World; import net.minecraft.world.WorldProvider; import net.minecraftforge.common.DimensionManager; import net.minecraftforge.common.IExtendedEntityProperties; import java.util.ArrayList; /** * Createdby pluslus_Fon 2015/06/05. */ public class FBSEntityProperties implements IExtendedEntityProperties { public final static String EXT_PROP_NAME = "FBSPlayerData"; /** * 魔術レベルの最大値 */ public static final int MAGIC_LEVEL_MAX=50; /** * 一般人の魔術レベル最大値 */ public static final int MAGIC_LEVEL_BASIC_MAX=25; private int san=99; private int lvMagic=1; private double exp=0; private double next=30; private String spiritToolName=""; private int spiritToolLv=-1; private ArrayList positions=new ArrayList(); private ArrayList decodedBooks=new ArrayList(); private ItemStack[] bindInventory=new ItemStack[40]; private ItemStack[] pocketInventory=new ItemStack[72]; public static void register(EntityPlayer player) { player.registerExtendedProperties(EXT_PROP_NAME, new FBSEntityProperties()); } public static FBSEntityProperties get(EntityPlayer player) { return (FBSEntityProperties)player.getExtendedProperties(EXT_PROP_NAME); } @Override public void saveNBTData(NBTTagCompound compound) { NBTTagCompound nbt=new NBTTagCompound(); nbt.setInteger("SAN", san); nbt.setInteger("LvMagic", lvMagic); nbt.setDouble("EXP", exp); nbt.setDouble("Next", next); nbt.setString("SpiritToolName", spiritToolName); nbt.setInteger("SpiritToolLevel", spiritToolLv); NBTTagList tags=new NBTTagList(); for(WarpPosition pos : positions){ NBTTagCompound n=new NBTTagCompound(); pos.writeToNBT(n); tags.appendTag(n); } nbt.setTag("WarpPositions", tags); tags=new NBTTagList(); for (int i=0;i=0 && b0=0 && b0(); nbttaglist=(NBTTagList)nbt.getTag("DecodedBooks"); for(int i=0;i5?m:5):99; } public int getSanity(){ return san; } public void setSanity(int s){ san=s; if(san>getMaxSanity()){ san=getMaxSanity(); } if(san<0){ san=0; } } public int getMagicLevel(){ return lvMagic; } public void setMagicLevel(int s){ if(s<1) s=1; lvMagic=s; exp=0; if(lvMagic==1) next=10; else next=MathHelper.ceiling_double_int(10+Math.exp(0.25*(lvMagic-1))); } public double getEXP(){ return exp; } public double getNext(){ return next; } public void addEXP(double s){ if(s<=0) return; exp+=s; while(exp>=next && lvMagicgetMaxSanity()){ san=getMaxSanity(); } exp-=next; //next=MathHelper.ceiling_double_int(10+Math.exp(0.25*(lvMagic-1))); next+=15*(lvMagic+1); } public String getSpiritToolName(){ return spiritToolName; } public void setSpiritToolName(String s){ spiritToolName=s; } public int getSpiritToolLevel(){ return spiritToolLv; } public void setSpiritToolLevel(int l){ if(l<=0 || l>SpiritStatus.LEVEL_MAX) return; spiritToolLv =l; } public void bindPlayerInventory(EntityPlayer player, boolean spiritOnly){ bindInventory=new ItemStack[player.inventory.getSizeInventory()]; if(spiritOnly && SpiritManager.findSpiritToolIndex(player)!=-1){ for(int i=0;i getDecodedBooks(){ return decodedBooks; } public ArrayList getDestinations(){ return positions; } public boolean addDestination(int dimId, int x, int y, int z){ WarpPosition wp=new WarpPosition(dimId, x, y, z); if(!positions.contains(wp)){ positions.add(wp); return true; } return false; } public static class WarpPosition{ public String name; public int dimId; public int x,y,z; public WarpPosition(NBTTagCompound nbt){ readFromNBT(nbt); } public WarpPosition(int dimId, int x, int y, int z){ this.dimId=dimId; this.x=x; this.y=y; this.z=z; name=getDimName()+"("+x+","+y+","+z+")"; } public void setName(String n){ name=n; } public String getName(){ return name; } public boolean canWarp(){ World w=DimensionManager.getWorld(dimId); if(w==null) return false; Block b=w.getBlock(x,y,z); if(b!=BlockCore.magicCore) return false; TileEntity te=w.getTileEntity(x,y,z); if(!(te instanceof TileEntityMagicCore)) return false; return "fbs.warp".equals(((TileEntityMagicCore) te).getCircleName()); } public String getDimName(){ WorldProvider wp=WorldProvider.getProviderForDimension(dimId); if(wp==null) return ""; return wp.getDimensionName(); } public void writeToNBT(NBTTagCompound nbt){ nbt.setString("Name", name); nbt.setInteger("Dim", dimId); nbt.setInteger("x", x); nbt.setInteger("y", y); nbt.setInteger("z", z); } public void readFromNBT(NBTTagCompound nbt){ name=nbt.getString("Name"); dimId=nbt.getInteger("Dim"); x=nbt.getInteger("x"); y=nbt.getInteger("y"); z=nbt.getInteger("z"); } @Override public boolean equals(Object obj){ if(!(obj instanceof WarpPosition)) return false; WarpPosition wp=(WarpPosition)obj; return dimId==wp.dimId && x==wp.x && y==wp.y && z==wp.z; } } }