diff options
| author | Benjamin Culkin <scorpress@gmail.com> | 2024-08-24 08:16:37 -0400 |
|---|---|---|
| committer | Benjamin Culkin <scorpress@gmail.com> | 2024-08-24 08:16:37 -0400 |
| commit | 70c1354a4a96698758a88c032866288f79de6f5a (patch) | |
| tree | eca51294e84b90a4cb3230bc2c7900469e784184 /src/main/java/jp/plusplus/fbs/alchemy | |
Diffstat (limited to 'src/main/java/jp/plusplus/fbs/alchemy')
71 files changed, 2484 insertions, 0 deletions
diff --git a/src/main/java/jp/plusplus/fbs/alchemy/AlchemyRegistry$AppraisalItemStack.class b/src/main/java/jp/plusplus/fbs/alchemy/AlchemyRegistry$AppraisalItemStack.class Binary files differnew file mode 100644 index 0000000..76135d6 --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/alchemy/AlchemyRegistry$AppraisalItemStack.class diff --git a/src/main/java/jp/plusplus/fbs/alchemy/AlchemyRegistry$ItemPair.class b/src/main/java/jp/plusplus/fbs/alchemy/AlchemyRegistry$ItemPair.class Binary files differnew file mode 100644 index 0000000..8327cd1 --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/alchemy/AlchemyRegistry$ItemPair.class diff --git a/src/main/java/jp/plusplus/fbs/alchemy/AlchemyRegistry$ProductExpPair.class b/src/main/java/jp/plusplus/fbs/alchemy/AlchemyRegistry$ProductExpPair.class Binary files differnew file mode 100644 index 0000000..824df68 --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/alchemy/AlchemyRegistry$ProductExpPair.class diff --git a/src/main/java/jp/plusplus/fbs/alchemy/AlchemyRegistry$Recipe.class b/src/main/java/jp/plusplus/fbs/alchemy/AlchemyRegistry$Recipe.class Binary files differnew file mode 100644 index 0000000..10956fd --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/alchemy/AlchemyRegistry$Recipe.class diff --git a/src/main/java/jp/plusplus/fbs/alchemy/AlchemyRegistry$WeightedItemStack.class b/src/main/java/jp/plusplus/fbs/alchemy/AlchemyRegistry$WeightedItemStack.class Binary files differnew file mode 100644 index 0000000..d7f8094 --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/alchemy/AlchemyRegistry$WeightedItemStack.class diff --git a/src/main/java/jp/plusplus/fbs/alchemy/AlchemyRegistry.class b/src/main/java/jp/plusplus/fbs/alchemy/AlchemyRegistry.class Binary files differnew file mode 100644 index 0000000..db67bb8 --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/alchemy/AlchemyRegistry.class diff --git a/src/main/java/jp/plusplus/fbs/alchemy/AlchemyRegistry.java b/src/main/java/jp/plusplus/fbs/alchemy/AlchemyRegistry.java new file mode 100644 index 0000000..c14952b --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/alchemy/AlchemyRegistry.java @@ -0,0 +1,907 @@ +package jp.plusplus.fbs.alchemy;
+
+import jp.plusplus.fbs.FBS;
+import jp.plusplus.fbs.alchemy.characteristic.*;
+import jp.plusplus.fbs.item.ItemCore;
+import net.minecraft.init.Blocks;
+import net.minecraft.init.Items;
+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;
+import net.minecraftforge.oredict.OreDictionary;
+
+import java.util.*;
+
+/**
+ * Created by plusplus_F on 2015/09/08.
+ * たぶん錬金術はわりと規模がでかくなると思うんで分離
+ */
+public class AlchemyRegistry {
+ //特性
+ private ArrayList<Class<? extends CharacteristicBase>> characteristics=new ArrayList<Class<? extends CharacteristicBase>>();
+ private HashMap<Class<? extends CharacteristicBase>, Integer> characteristicsIdMap=new HashMap<Class<? extends CharacteristicBase>, Integer>();
+ //素材
+ private HashMap<String, ArrayList<ItemStack>> materials=new HashMap<String, ArrayList<ItemStack>>();
+ private HashMap<ItemStack, ArrayList<String>> materialNames=new HashMap<ItemStack, ArrayList<String>>();
+ //鑑定
+ private HashMap<AppraisalItemStack, ArrayList<WeightedItemStack>> appraisalItems=new HashMap<AppraisalItemStack, ArrayList<WeightedItemStack>>();
+ //調合
+ private ArrayList<Recipe> recipes=new ArrayList<Recipe>();
+ private ArrayList<ProductExpPair> productExpPairs=new ArrayList<ProductExpPair>();
+ //カゴ
+ private ArrayList<ItemStack> basketItems=new ArrayList<ItemStack>();
+
+ private static AlchemyRegistry instance=new AlchemyRegistry();
+ private static Random rand=new Random();
+
+ private AlchemyRegistry(){}
+
+ public static Random getRandom(){ return instance.rand; }
+
+
+ public static void RegisterAlchemy(){
+ //-------------------------------------------------------------------------------------------------------
+ // 特性
+ //-------------------------------------------------------------------------------------------------------
+ AddCharacteristic(CharacteristicSanity.Gain.class);
+ AddCharacteristic(CharacteristicSanity.Lose.class);
+ AddCharacteristic(CharacteristicHealth.Gain.class);
+ AddCharacteristic(CharacteristicHealth.Lose.class);
+ if(FBS.cooperatesSS2){
+ AddCharacteristic(CharacteristicWater.Gain.class);
+ AddCharacteristic(CharacteristicWater.Lose.class);
+ AddCharacteristic(CharacteristicStamina.Gain.class);
+ AddCharacteristic(CharacteristicStamina.Lose.class);
+ }
+ AddCharacteristic(CharacteristicExp.Gain.class);
+ AddCharacteristic(CharacteristicExp.Lose.class);
+ AddCharacteristic(CharacteristicLook.class);
+ AddCharacteristic(CharacteristicWeight.class);
+ AddCharacteristic(CharacteristicQuality.class);
+ AddCharacteristic(CharacteristicCleverness.Gain.class);
+ AddCharacteristic(CharacteristicPoison.Gain.class);
+ AddCharacteristic(CharacteristicPoison.Lose.class);
+ AddCharacteristic(CharacteristicPower.Gain.class);
+ AddCharacteristic(CharacteristicPower.Lose.class);
+ AddCharacteristic(CharacteristicSpeed.Gain.class);
+ AddCharacteristic(CharacteristicSpeed.Lose.class);
+ AddCharacteristic(CharacteristicConfusion.Gain.class);
+ AddCharacteristic(CharacteristicConfusion.Lose.class);
+
+ //-------------------------------------------------------------------------------------------------------
+ // 鑑定
+ //-------------------------------------------------------------------------------------------------------
+ RegisterAppraisal(new ItemStack(Items.potionitem), new ItemStack(ItemCore.alchemyMaterial, 1, 0), 63);
+ RegisterAppraisal(new ItemStack(Items.potionitem), new ItemStack(ItemCore.alchemyMaterial, 1, 1), 1);
+ RegisterAppraisal(new ItemStack(Items.lava_bucket), new ItemStack(ItemCore.alchemyMaterial, 1, 2), 1);
+
+ RegisterAppraisal("treeLeaves", new ItemStack(ItemCore.alchemyMaterial, 1, 3), 63);
+ RegisterAppraisal("treeLeaves", new ItemStack(ItemCore.alchemyMaterial, 1, 6), 1);
+ RegisterAppraisal(new ItemStack(Items.stick), new ItemStack(ItemCore.alchemyMaterial, 1, 4), 63);
+ RegisterAppraisal(new ItemStack(Items.stick), new ItemStack(ItemCore.alchemyMaterial, 1, 7), 1);
+
+ for(int i=0;i<ItemAlchemyMaterial.NAMES.length;i++){
+ if(ItemAlchemyMaterial.NAMES[i].startsWith("herb") && i!=18 && i!=36 && i!=37){
+ RegisterAppraisal(new ItemStack(ItemCore.herbUnknown), new ItemStack(ItemCore.alchemyMaterial, 1, i), 10);
+ }
+ if(ItemAlchemyMaterial.NAMES[i].startsWith("seeds")){
+ RegisterAppraisal(new ItemStack(ItemCore.seedsUnknown), new ItemStack(ItemCore.alchemyMaterial, 1, i), 10);
+ }
+ if(ItemAlchemyMaterial.NAMES[i].startsWith("grass")){
+ RegisterAppraisal(new ItemStack(ItemCore.grassUnknown), new ItemStack(ItemCore.alchemyMaterial, 1, i), 10);
+ }
+ if(ItemAlchemyMaterial.NAMES[i].startsWith("flower") || i==31 || i==35){
+ RegisterAppraisal(new ItemStack(ItemCore.flowerUnknown), new ItemStack(ItemCore.alchemyMaterial, 1, i), 10);
+ }
+ if(ItemAlchemyMaterial.NAMES[i].startsWith("fruits") && i!=24){
+ RegisterAppraisal(new ItemStack(ItemCore.fruitsUnknown), new ItemStack(ItemCore.alchemyMaterial, 1, i), 10);
+ }
+ if(ItemAlchemyMaterial.NAMES[i].startsWith("mushroom") && i!=25 && (i<42 || i>45)){
+ RegisterAppraisal(new ItemStack(ItemCore.mushroomUnknown), new ItemStack(ItemCore.alchemyMaterial, 1, i), 10);
+ }
+ }
+ RegisterAppraisal(new ItemStack(ItemCore.herbUnknown), new ItemStack(ItemCore.alchemyMaterial, 1, 18), 60);
+ RegisterAppraisal(new ItemStack(ItemCore.herbUnknown), new ItemStack(ItemCore.alchemyMaterial, 1, 36), 3);
+ RegisterAppraisal(new ItemStack(ItemCore.herbUnknown), new ItemStack(ItemCore.alchemyMaterial, 1, 37), 3);
+
+ RegisterAppraisal(new ItemStack(ItemCore.mushroomUnknown), new ItemStack(ItemCore.alchemyMaterial, 1, 25), 50);
+ RegisterAppraisal(new ItemStack(ItemCore.mushroomUnknown), new ItemStack(ItemCore.alchemyMaterial, 1, 42), 3);
+ RegisterAppraisal(new ItemStack(ItemCore.mushroomUnknown), new ItemStack(ItemCore.alchemyMaterial, 1, 43), 3);
+ RegisterAppraisal(new ItemStack(ItemCore.mushroomUnknown), new ItemStack(ItemCore.alchemyMaterial, 1, 44), 3);
+ RegisterAppraisal(new ItemStack(ItemCore.mushroomUnknown), new ItemStack(ItemCore.alchemyMaterial, 1, 45), 3);
+
+ for(int i=0;i<ItemEatableAlchemyMaterial.NAMES.length;i++){
+ if(ItemEatableAlchemyMaterial.NAMES[i].startsWith("herb")){
+ RegisterAppraisal(new ItemStack(ItemCore.herbUnknown), new ItemStack(ItemCore.alchemyMaterialEatable, 1, i), 10);
+ }
+ if(ItemEatableAlchemyMaterial.NAMES[i].startsWith("seeds")){
+ RegisterAppraisal(new ItemStack(ItemCore.seedsUnknown), new ItemStack(ItemCore.alchemyMaterialEatable, 1, i), 10);
+ }
+ if(ItemEatableAlchemyMaterial.NAMES[i].startsWith("grass")){
+ RegisterAppraisal(new ItemStack(ItemCore.grassUnknown), new ItemStack(ItemCore.alchemyMaterialEatable, 1, i), 10);
+ }
+ if(ItemEatableAlchemyMaterial.NAMES[i].startsWith("flower")){
+ RegisterAppraisal(new ItemStack(ItemCore.flowerUnknown), new ItemStack(ItemCore.alchemyMaterialEatable, 1, i), 10);
+ }
+ if(ItemEatableAlchemyMaterial.NAMES[i].startsWith("fruits")){
+ RegisterAppraisal(new ItemStack(ItemCore.fruitsUnknown), new ItemStack(ItemCore.alchemyMaterialEatable, 1, i), 10);
+ }
+ if(ItemEatableAlchemyMaterial.NAMES[i].startsWith("mushroom")){
+ RegisterAppraisal(new ItemStack(ItemCore.mushroomUnknown), new ItemStack(ItemCore.alchemyMaterialEatable, 1, i), 10);
+ }
+ }
+
+ //-------------------------------------------------------------------------------------------------------
+ // 素材
+ //-------------------------------------------------------------------------------------------------------
+ for(int i=0;i<ItemAlchemyMaterial.NAMES.length;i++){
+ String t=ItemAlchemyMaterial.NAMES[i];
+
+ if(t.startsWith("grass") || t.startsWith("roots") || t.startsWith("grass") || t.startsWith("flower") || t.startsWith("seeds") || t.startsWith("fruits")){
+ RegisterMaterial("plant", new ItemStack(ItemCore.alchemyMaterial, 1, i));
+ }
+
+ if(t.startsWith("herb")) RegisterMaterial("herb", new ItemStack(ItemCore.alchemyMaterial, 1, i));
+ if(t.startsWith("mushroom")) RegisterMaterial("mushroom", new ItemStack(ItemCore.alchemyMaterial, 1, i));
+
+ if(t.startsWith("roots")) RegisterMaterial("roots", new ItemStack(ItemCore.alchemyMaterial, 1, i));
+ if(t.startsWith("branch")) RegisterMaterial("branch", new ItemStack(ItemCore.alchemyMaterial, 1, i));
+ if(t.startsWith("leaves")) RegisterMaterial("leaves", new ItemStack(ItemCore.alchemyMaterial, 1, i));
+
+ if(t.endsWith("Unclean")) RegisterMaterial("unclean", new ItemStack(ItemCore.alchemyMaterial, 1, i));
+ }
+ for(int i=0;i<ItemEatableAlchemyMaterial.NAMES.length;i++){
+ String t=ItemEatableAlchemyMaterial.NAMES[i];
+ if(t.startsWith("grass") || t.startsWith("roots") || t.startsWith("grass") || t.startsWith("flower") || t.startsWith("seeds") || t.startsWith("fruits")){
+ RegisterMaterial("plant", new ItemStack(ItemCore.alchemyMaterialEatable, 1, i));
+ }
+
+ if(t.startsWith("herb")) RegisterMaterial("herb", new ItemStack(ItemCore.alchemyMaterialEatable, 1, i));
+ if(t.startsWith("mushroom")) RegisterMaterial("mushroom", new ItemStack(ItemCore.alchemyMaterialEatable, 1, i));
+
+ if(t.startsWith("roots")) RegisterMaterial("roots", new ItemStack(ItemCore.alchemyMaterialEatable, 1, i));
+ if(t.startsWith("branch")) RegisterMaterial("branch", new ItemStack(ItemCore.alchemyMaterialEatable, 1, i));
+ if(t.startsWith("leaves")) RegisterMaterial("leaves", new ItemStack(ItemCore.alchemyMaterialEatable, 1, i));
+
+ if(t.endsWith("Unclean")) RegisterMaterial("unclean", new ItemStack(ItemCore.alchemyMaterialEatable, 1, i));
+ }
+ //RegisterMaterial("herb", new ItemStack(ItemCore.alchemyIntermediateMaterial, 1, 2));
+ RegisterMaterial("herb", new ItemStack(ItemCore.alchemyIntermediateMaterial, 1, 3));
+
+ RegisterMaterial("potion base", new ItemStack(ItemCore.alchemyMaterial, 1, 18));
+ RegisterMaterial("potion base", new ItemStack(ItemCore.alchemyMaterial, 1, 25));
+ RegisterMaterial("potion base", new ItemStack(ItemCore.alchemyIntermediateMaterial, 1, 0));
+
+ //for(int i=9;i<18;i++) if(!ItemAlchemyMaterial.NAMES[i].startsWith("seeds")) RegisterMaterial("potion flavor", new ItemStack(ItemCore.alchemyMaterial, 1, i));
+ for(int i=19;i<25;i++) RegisterMaterial("potion flavor", new ItemStack(ItemCore.alchemyMaterial, 1, i));
+ for(int i=36;i<40;i++) RegisterMaterial("potion flavor", new ItemStack(ItemCore.alchemyMaterial, 1, i));
+ //for(int i=41;i<46;i++) RegisterMaterial("potion flavor", new ItemStack(ItemCore.alchemyMaterial, 1, i));
+ //for(int i=2;i<7;i++) RegisterMaterial("potion flavor", new ItemStack(ItemCore.alchemyMaterialEatable, 1, i));
+ RegisterMaterial("potion flavor", new ItemStack(ItemCore.alchemyMaterial, 1, 40));
+ RegisterMaterial("potion flavor", new ItemStack(ItemCore.alchemyIntermediateMaterial, 1, 2));
+ RegisterMaterial("potion flavor", new ItemStack(ItemCore.alchemyIntermediateMaterial, 1, 3));
+ RegisterMaterial("potion flavor", new ItemStack(ItemCore.alchemyIntermediateMaterial, 1, 6));
+ RegisterMaterial("potion flavor", new ItemStack(ItemCore.alchemyIntermediateMaterial, 1, 7));
+
+ RegisterMaterial("activator", new ItemStack(ItemCore.alchemyIntermediateMaterial, 1, 4));
+
+ RegisterMaterial("spirit medium", new ItemStack(ItemCore.alchemyMaterial, 1, 22));
+ RegisterMaterial("spirit medium", new ItemStack(ItemCore.alchemyMaterial, 1, 40));
+
+ RegisterMaterial("water", new ItemStack(ItemCore.alchemyMaterial, 1, 0));
+ RegisterMaterial("water", new ItemStack(ItemCore.alchemyMaterial, 1, 1));
+ RegisterMaterial("lava", new ItemStack(ItemCore.alchemyMaterial, 1, 2));
+
+ RegisterMaterial("poisonous", new ItemStack(ItemCore.alchemyMaterial, 1, 26));
+ RegisterMaterial("poisonous", new ItemStack(ItemCore.alchemyMaterial, 1, 27));
+ RegisterMaterial("poisonous", new ItemStack(ItemCore.alchemyMaterial, 1, 29));
+ RegisterMaterial("poisonous", new ItemStack(ItemCore.alchemyMaterial, 1, 30));
+ RegisterMaterial("poisonous", new ItemStack(ItemCore.alchemyMaterial, 1, 41));
+ RegisterMaterial("poisonous", new ItemStack(ItemCore.alchemyMaterial, 1, 42));
+ RegisterMaterial("poisonous", new ItemStack(ItemCore.alchemyMaterial, 1, 45));
+ RegisterMaterial("poisonous", new ItemStack(ItemCore.alchemyMaterialEatable, 1, 3));
+
+ RegisterMaterial("explosive", new ItemStack(ItemCore.alchemyMaterial, 1, 28));
+ RegisterMaterial("explosive", new ItemStack(ItemCore.alchemyMaterial, 1, 34));
+ RegisterMaterial("explosive", new ItemStack(ItemCore.alchemyMaterial, 1, 38));
+ RegisterMaterial("explosive", new ItemStack(ItemCore.alchemyIntermediateMaterial, 1, 1));
+ //-------------------------------------------------------------------------------------------------------
+ // 調合
+ //-------------------------------------------------------------------------------------------------------
+ RegisterRecipe(new ItemStack(ItemCore.alchemyRecipe, 1, 0), new ItemStack(ItemCore.alchemyPotion, 1, 0), 5, 0.6f, 100, "water", "potion base", "potion flavor");
+ RegisterRecipe(new ItemStack(ItemCore.alchemyRecipe, 1, 1), new ItemStack(ItemCore.alchemyPotion, 1, 1), 10, 0.55f, 150, "water", "potion base", "potion flavor", "potion flavor");
+ RegisterRecipe(new ItemStack(ItemCore.alchemyRecipe, 1, 2), new ItemStack(ItemCore.alchemyIntermediateMaterial, 1, 0), 1, 0.85f, 20, "water");
+ RegisterRecipe(new ItemStack(ItemCore.alchemyRecipe, 1, 3), new ItemStack(ItemCore.alchemyIntermediateMaterial, 1, 1), 3, 0.7f, 20, "explosive");
+ RegisterRecipe(new ItemStack(ItemCore.alchemyRecipe, 1, 4), new ItemStack(ItemCore.alchemyIntermediateMaterial, 1, 2), 7, 0.6f, 80, "herb", "herb", "herb");
+ RegisterRecipe(new ItemStack(ItemCore.alchemyRecipe, 1, 5), new ItemStack(ItemCore.alchemyIntermediateMaterial, 1, 3), 7, 0.6f, 80, "herb", "herb", "herb");
+ RegisterRecipe(new ItemStack(ItemCore.alchemyRecipe, 1, 6), new ItemStack(ItemCore.alchemyIntermediateMaterial, 1, 4), 12, 0.45f, 150, "water", "potion base", "explosive");
+ RegisterRecipe(new ItemStack(ItemCore.alchemyRecipe, 1, 7), new ItemStack(ItemCore.alchemyPotion, 1, 2), 15, 0.45f, 200, "water", "potion base", "spirit medium");
+ RegisterRecipe(new ItemStack(ItemCore.alchemyRecipe, 1, 8), new ItemStack(ItemCore.alchemyIntermediateMaterial, 1, 5), 10, 0.5f, 110, "activator", "potion flavor");
+ RegisterRecipe(new ItemStack(ItemCore.alchemyRecipe, 1, 9), new ItemStack(ItemCore.alchemyIntermediateMaterial, 1, 6), 1, 0.75f, 20, "plant");
+ RegisterRecipe(new ItemStack(ItemCore.alchemyRecipe, 1, 10), new ItemStack(ItemCore.alchemyIntermediateMaterial, 1, 7), 1, 0.75f, 20, "mushroom");
+
+
+ //-------------------------------------------------------------------------------------------------------
+ // 錬金アイテム以外でカゴに入るアイテム
+ //-------------------------------------------------------------------------------------------------------
+ RegisterBasketItem(new ItemStack(ItemCore.herbUnknown));
+ RegisterBasketItem(new ItemStack(ItemCore.grassUnknown));
+ RegisterBasketItem(new ItemStack(ItemCore.fruitsUnknown));
+ RegisterBasketItem(new ItemStack(ItemCore.flowerUnknown));
+ RegisterBasketItem(new ItemStack(ItemCore.seedsUnknown));
+ RegisterBasketItem(new ItemStack(ItemCore.mushroomUnknown));
+ }
+
+ /**
+ * デフォルト特性を持った状態でItemStackを生成する
+ * @param item IAlchemyMaterialまたはIAlchemyProductのいずれかを実装したItem
+ * @param stacksize
+ * @param meta
+ * @return
+ */
+ public static ItemStack getItemStack(Item item, int stacksize, int meta){
+ ItemStack itemStack=new ItemStack(item, stacksize, meta);
+ itemStack.setTagCompound(new NBTTagCompound());
+ if(item instanceof IAlchemyMaterial){
+ AlchemyRegistry.WriteCharacteristicToNBT(itemStack.getTagCompound(), ((IAlchemyMaterial) item).addCharacteristics(itemStack, rand));
+ }
+ if(item instanceof IAlchemyProduct){
+ AlchemyRegistry.WriteCharacteristicToNBT(itemStack.getTagCompound(), ((IAlchemyProduct) item).getDefaultCharacteristics(itemStack, rand));
+ }
+ return itemStack;
+ }
+
+ //--------------------------------------------------------------------------------------
+ // 特性
+ //--------------------------------------------------------------------------------------
+
+ /**
+ * 特性を登録する
+ * @param chara
+ */
+ public static void AddCharacteristic(Class<? extends CharacteristicBase> chara){
+ instance.characteristics.add(chara);
+ instance.characteristicsIdMap.put(chara, instance.characteristics.size()-1);
+ }
+
+ /**
+ * 特性からIdを得る
+ * @param chara
+ * @return
+ */
+ public static int GetCharacteristicId(Class<? extends CharacteristicBase> chara){
+ if(!instance.characteristicsIdMap.containsKey(chara)){
+ AddCharacteristic(chara);
+ }
+
+ return instance.characteristicsIdMap.get(chara);
+ }
+
+ /**
+ * Idから特性を得る
+ * @param id
+ * @return
+ */
+ public static Class<? extends CharacteristicBase> GetCharacteristicFromId(int id){
+ if(id<0 || id>=instance.characteristics.size()) return null;
+ return instance.characteristics.get(id);
+ }
+
+ /**
+ * 特性のリストをnbtに書き込む
+ * @param nbt
+ * @param list
+ */
+ public static void WriteCharacteristicToNBT(NBTTagCompound nbt, ArrayList<CharacteristicBase> list){
+ NBTTagList tags=new NBTTagList();
+ for(CharacteristicBase cb : list){
+ NBTTagCompound tag=new NBTTagCompound();
+ tag.setInteger("id", cb.getId());
+ cb.writeToNBT(tag);
+ tags.appendTag(tag);
+ }
+
+ nbt.setTag("characteristics", tags);
+ nbt.setBoolean("appraisal", true);
+ }
+
+ /**
+ * nbtから特性リストを得る
+ * @param nbt
+ * @return
+ */
+ public static ArrayList<CharacteristicBase> ReadCharacteristicFromNBT(NBTTagCompound nbt){
+ ArrayList<CharacteristicBase> ret=new ArrayList<CharacteristicBase>();
+
+ if(nbt!=null && nbt.hasKey("characteristics")){
+ NBTTagList tags=(NBTTagList)nbt.getTag("characteristics");
+ for(int i=0;i<tags.tagCount();i++){
+ NBTTagCompound tag=tags.getCompoundTagAt(i);
+ int id=tag.getInteger("id");
+ try{
+ CharacteristicBase cb=GetCharacteristicFromId(id).newInstance();
+ cb.readFromNBT(tag);
+ ret.add(cb);
+ }
+ catch (Exception e){
+ FBS.logger.error(e.toString());
+ }
+ }
+ }
+
+ return ret;
+ }
+
+ /**
+ * listに特性一覧表を追加する
+ * @param itemStack
+ * @param list
+ * @param flag
+ */
+ public static void AddCharacteristicsInfo(ItemStack itemStack, List list, boolean flag){
+ list.add(StatCollector.translateToLocal("alchemy.fbs.characteristic"));
+ if(itemStack.hasTagCompound()){
+ ArrayList<CharacteristicBase> cbs=AlchemyRegistry.ReadCharacteristicFromNBT(itemStack.getTagCompound());
+
+ for(CharacteristicBase cb : cbs){
+ list.add(cb.getNameColor()+"-"+cb.getLocalizedName()+":"+cb.getLocalizedEffectValue());
+ }
+ }
+ }
+
+ //--------------------------------------------------------------------------------------
+ // 素材
+ //--------------------------------------------------------------------------------------
+
+ /**
+ * 素材としてアイテムスタックを登録する
+ * @param name
+ * @param itemStack
+ */
+ public static void RegisterMaterial(String name, ItemStack itemStack){
+ if(!instance.materials.containsKey(name)){
+ ArrayList<ItemStack> list=new ArrayList<ItemStack>();
+ instance.materials.put(name, list);
+ }
+
+ instance.materials.get(name).add(itemStack);
+ RegisterMaterialName(itemStack, name);
+ }
+
+ /**
+ * アイテムスタックがその素材として使えるかを返す
+ * @param name
+ * @param itemStack
+ * @return
+ */
+ public static boolean IsMatching(String name, ItemStack itemStack){
+ if(!instance.materials.containsKey(name)) return false;
+ ArrayList<ItemStack> list=instance.materials.get(name);
+
+ for(ItemStack item : list){
+ if(item.isItemEqual(itemStack)){
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ private static Map.Entry<ItemStack, ArrayList<String>> cachedMaterial;
+ /**
+ * アイテムスタックの持つ素材名を得る
+ * @param itemStack
+ * @return
+ */
+ public static ArrayList<String> GetMaterialNames(ItemStack itemStack){
+ if(cachedMaterial!=null && cachedMaterial.getKey().isItemEqual(itemStack)){
+ return cachedMaterial.getValue();
+ }
+
+ for(Map.Entry<ItemStack, ArrayList<String>> e : instance.materialNames.entrySet()){
+ if(e.getKey().isItemEqual(itemStack)){
+ cachedMaterial=e;
+ return e.getValue();
+ }
+ }
+ return null;
+ }
+ private static void RegisterMaterialName(ItemStack itemStack, String name){
+ ArrayList<String> list=GetMaterialNames(itemStack);
+
+ if(list!=null){
+ //素材名リストがある場合直接追加
+ list.add(name);
+ }
+ else{
+ //素材名リストがない場合リスト作ってマップに追加
+ list=new ArrayList<String>();
+ list.add(name);
+
+ instance.materialNames.put(itemStack, list);
+ }
+ }
+
+ /**
+ * listに素材名一覧を追加する
+ * @param itemStack
+ * @param list
+ * @param flag
+ */
+ public static void AddMaterialInfo(ItemStack itemStack, List list, boolean flag){
+ list.add(StatCollector.translateToLocal("alchemy.fbs.material"));
+ ArrayList<String> names= AlchemyRegistry.GetMaterialNames(itemStack);
+ if(names!=null && !names.isEmpty()){
+ for(String str : names){
+ list.add("-"+str);
+ }
+ }
+ }
+ //--------------------------------------------------------------------------------------
+ // 鑑定
+ //--------------------------------------------------------------------------------------
+
+ /**
+ * 鑑定アイテムを登録する
+ * @param input
+ * @param output 鑑定品(ItemはIAlchemyMaterialを継承しておくこと)
+ * @param weight 出現重み
+ */
+ public static void RegisterAppraisal(ItemStack input, ItemStack output, int weight){
+ AppraisalItemStack ais=new AppraisalItemStack(input);
+ ArrayList<WeightedItemStack> list=GetAppraisals(ais);
+ list.add(new WeightedItemStack(weight, output));
+ }
+ /**
+ * 鑑定アイテムを登録する(鉱石辞書編)
+ * @param input
+ * @param output 鑑定品(ItemはIAlchemyMaterialを継承しておくこと)
+ * @param weight 出現重み
+ */
+ public static void RegisterAppraisal(String input, ItemStack output, int weight){
+ AppraisalItemStack ais=new AppraisalItemStack(input);
+ ArrayList<WeightedItemStack> list=GetAppraisals(ais);
+ list.add(new WeightedItemStack(weight, output));
+ }
+ private static ArrayList<WeightedItemStack> GetAppraisals(AppraisalItemStack ais){
+ ArrayList<WeightedItemStack> list;
+
+ for(AppraisalItemStack aiss : instance.appraisalItems.keySet()){
+ if(aiss.equals(ais)){
+ return instance.appraisalItems.get(aiss);
+ }
+ }
+ list=new ArrayList<WeightedItemStack>();
+ instance.appraisalItems.put(ais, list);
+ return list;
+ }
+
+ public static ArrayList<WeightedItemStack> GetAppraisalList(ItemStack input){
+ for(AppraisalItemStack aiss : instance.appraisalItems.keySet()){
+ if(aiss.isItemEqual(input)) return instance.appraisalItems.get(aiss);
+ }
+ return null;
+ }
+ public static ArrayList<ItemPair> GetAlllAppraisal(){
+ ArrayList<ItemPair> ret=new ArrayList<ItemPair>();
+ for(Map.Entry<AppraisalItemStack, ArrayList<WeightedItemStack>> e : instance.appraisalItems.entrySet()){
+ for(WeightedItemStack wis : e.getValue()){
+ ret.add(new ItemPair(e.getKey().getItemStack(), wis.getItemStack()));
+ }
+ }
+ return ret;
+ }
+
+ /**
+ * そのアイテムが鑑定できるか判定する
+ * @param input
+ * @return
+ */
+ public static boolean CanAppraisal(ItemStack input){
+ NBTTagCompound nbt=input.getTagCompound();
+ if(nbt!=null && nbt.getBoolean("appraisal")) return false;
+
+ return GetAppraisalList(input)!=null;
+ }
+
+ /**
+ * 鑑定したアイテムを得る。この時ランダムで特性が付与される。
+ * @param input
+ * @return 鑑定できないアイテムであればnull
+ */
+ public static ItemStack GetRandomAppraisal(ItemStack input){
+ ArrayList<WeightedItemStack> list=GetAppraisalList(input);
+ if(list.isEmpty()) return null;
+
+ int ws=0;
+ for(WeightedItemStack wis : list){
+ ws+=wis.getWeight();
+ }
+
+ int r=instance.rand.nextInt(ws);
+ ws=0;
+ for(int i=0;i<list.size();i++){
+ WeightedItemStack wis=list.get(i);
+ if(r<wis.getWeight()+ws){
+ ItemStack ret=wis.getItemStack().copy();
+
+ //アイテムに特性を付与
+ ArrayList<CharacteristicBase> cList=((IAlchemyMaterial)ret.getItem()).addCharacteristics(ret, instance.rand);
+ if(cList!=null && !cList.isEmpty()){
+ ret.setTagCompound(new NBTTagCompound());
+ WriteCharacteristicToNBT(ret.getTagCompound(), cList);
+ // FBS.logger.info("written");
+ }
+ //FBS.logger.info(cList.toString());
+
+ return ret;
+ }
+ ws+=wis.getWeight();
+ }
+
+ return null;
+ }
+
+
+ //--------------------------------------------------------------------------------------
+ // 調合
+ //--------------------------------------------------------------------------------------
+ private static Recipe cachedRecipe;
+ public static void RegisterRecipe(ItemStack key, ItemStack output, int lv, float prob, double exp, String ... materials){
+ instance.recipes.add(new Recipe(lv, prob, key, output, materials));
+ RegisterProductExpPair(output, exp);
+ }
+ public static Recipe GetRecipe(ItemStack key){
+ if(cachedRecipe!=null && cachedRecipe.isKey(key)) return cachedRecipe;
+
+ for(Recipe r : instance.recipes){
+ if(r.isKey(key)){
+ cachedRecipe=r;
+ return cachedRecipe;
+ }
+ }
+
+ return null;
+ }
+ /**
+ * レシピと投入済み素材リストから、inputが未投入の素材か判定する
+ * @param key
+ * @param input
+ * @param inputMaterials
+ * @return
+ */
+ public static boolean IsMaterial(ItemStack key, ItemStack input, ArrayList<ItemStack> inputMaterials){
+ //レシピを得る
+ Recipe r=GetRecipe(key);
+ return IsMaterial(r, input, inputMaterials);
+ }
+ public static boolean IsMaterial(Recipe recipe, ItemStack input, ArrayList<ItemStack> inputMaterials){
+ if(recipe==null) return false;
+
+ //matから未投入素材リストを得る
+ LinkedList<String> mats=recipe.getMaterialList();
+ LinkedList<ItemStack> tmp=new LinkedList<ItemStack>(inputMaterials);
+ for(int i=0;i<mats.size();){
+ String name=mats.get(i);
+
+ boolean found=false;
+ for(ItemStack is : tmp){
+ if(IsMatching(name, is)){
+ tmp.remove(is);
+ found=true;
+ break;
+ }
+ }
+ if(found){
+ mats.remove(i);
+ continue;
+ }
+ i++;
+ }
+
+ //未投入リストにinputが含まれているか判定
+ for(String name : mats){
+ if(IsMatching(name, input)) return true;
+ }
+ return false;
+ }
+
+ public static boolean IsSatisfied(ItemStack key, ArrayList<ItemStack> inputMaterials){
+ return IsSatisfied(GetRecipe(key), inputMaterials);
+ }
+ public static boolean IsSatisfied(Recipe recipe, ArrayList<ItemStack> inputMaterials){
+ if(recipe==null) return false;
+
+ //matから未投入素材リストを得る
+ LinkedList<String> mats=recipe.getMaterialList();
+
+ //投入素材数が違うのに条件を満たしているはずがないだろ!
+ if(inputMaterials.size()!=mats.size()){
+ return false;
+ }
+
+ //投入素材リストを走査し、必要素材リストの中身を抜いていく
+ LinkedList<ItemStack> tmp=new LinkedList<ItemStack>(inputMaterials);
+ for(int i=0;i<mats.size();){
+ String name=mats.get(i);
+
+ boolean found=false;
+ for(ItemStack is : tmp){
+ if(IsMatching(name, is)){
+ tmp.remove(is);
+ found=true;
+ break;
+ }
+ }
+ if(found){
+ mats.remove(i);
+ continue;
+ }
+ i++;
+ }
+
+ //条件を満たしていればこの時点で必要素材リストは空のはずである
+ return mats.isEmpty();
+ }
+
+ /**
+ * レシピと投入済み素材リストから、特性が付与された完成品を得る
+ * @param key
+ * @param inputMaterials
+ * @return
+ */
+ public static ItemStack GetAlchemyProduct(ItemStack key, ArrayList<ItemStack> inputMaterials){
+ Recipe r=GetRecipe(key);
+ ItemStack ret=r.getProduct();
+
+ IAlchemyProduct prod=((IAlchemyProduct) ret.getItem());
+ ArrayList<CharacteristicBase> characteristics;//完成品の持つ特性
+
+ //------------------------初期特性------------------------------
+ characteristics=prod.getDefaultCharacteristics(ret, instance.rand);
+
+ //-----------------------引継ぎ特性-----------------------------
+ LinkedList<CharacteristicBase> inherits=new LinkedList<CharacteristicBase>();
+ for(ItemStack mat : inputMaterials){
+ ArrayList<CharacteristicBase> aList=ReadCharacteristicFromNBT(mat.getTagCompound());
+ for(CharacteristicBase cb : aList){
+ if(prod.canInherit(ret, cb)) inherits.add(cb);
+ }
+ }
+
+ //-----------------------引継ぎ判定-----------------------------
+ int max=prod.getMaxInheritAmount(ret);
+ for(int i=0;i<max && !inherits.isEmpty();i++){
+ int index=instance.rand.nextInt(inherits.size());
+ CharacteristicBase cb=inherits.get(index);
+
+ //その特性を既に持っているか
+ boolean had=false;
+ for(CharacteristicBase ccbb : characteristics){
+ if(ccbb.getClass().equals(cb.getClass())){
+ had=true;
+ break;
+ }
+ }
+ if(had){
+ inherits.remove(index);
+ continue;
+ }
+
+ characteristics.add(cb);
+ }
+
+ //------------------------特性を書き込む-------------------------------
+ if(!ret.hasTagCompound()) ret.setTagCompound(new NBTTagCompound());
+ WriteCharacteristicToNBT(ret.getTagCompound(), characteristics);
+
+ return ret;
+ }
+ public static ItemStack GetAlchemyProduct(Recipe recipe, ArrayList<ItemStack> inputMaterials){
+ ItemStack ret=recipe.getProduct().copy();
+
+ IAlchemyProduct prod=((IAlchemyProduct) ret.getItem());
+ ArrayList<CharacteristicBase> characteristics;//完成品の持つ特性
+
+ //------------------------初期特性------------------------------
+ characteristics=prod.getDefaultCharacteristics(ret, instance.rand);
+
+ //-----------------------引継ぎ特性-----------------------------
+ LinkedList<CharacteristicBase> inherits=new LinkedList<CharacteristicBase>();
+ for(ItemStack mat : inputMaterials){
+ ArrayList<CharacteristicBase> aList=ReadCharacteristicFromNBT(mat.getTagCompound());
+ for(CharacteristicBase cb : aList){
+ if(prod.canInherit(ret, cb)) inherits.add(cb);
+ }
+ }
+
+ //-----------------------引継ぎ判定-----------------------------
+ int max=prod.getMaxInheritAmount(ret);
+ for(int i=0;i<max && !inherits.isEmpty();i++){
+ int index=instance.rand.nextInt(inherits.size());
+ CharacteristicBase cb=inherits.get(index);
+ inherits.remove(index);
+
+ //その特性を既に持っているか
+ boolean had=false;
+ int cbIndex=-1;
+ for(int k=0;k<characteristics.size();k++){
+ if(characteristics.get(k).getClass().equals(cb.getClass())){
+ had=true;
+ cbIndex=k;
+ break;
+ }
+ }
+ if(had){
+ //特性が被った場合、より値の大きいものが優先される。
+ if(characteristics.get(cbIndex).getValue()<cb.getValue()) characteristics.remove(cbIndex);
+ else{
+ i--;
+ continue;
+ }
+ }
+
+ characteristics.add(cb);
+ }
+
+ //------------------------特性を書き込む-------------------------------
+ if(!ret.hasTagCompound()) ret.setTagCompound(new NBTTagCompound());
+ WriteCharacteristicToNBT(ret.getTagCompound(), characteristics);
+
+ return ret;
+ }
+ public static ArrayList<Recipe> GetRecieps(){
+ return instance.recipes;
+ }
+
+ private static ProductExpPair cachedPEP;
+ public static void RegisterProductExpPair(ItemStack p, double e){
+ instance.productExpPairs.add(new ProductExpPair(p, e));
+ }
+ public static double GetProductExp(ItemStack p){
+ if(cachedPEP!=null && cachedPEP.isItemEqual(p)){
+ return cachedPEP.getExp();
+ }
+
+ for(ProductExpPair pep : instance.productExpPairs){
+ if(pep.isItemEqual(p)){
+ cachedPEP=pep;
+ return pep.getExp();
+ }
+ }
+
+ return 0;
+ }
+
+ private static ItemStack cachedBasketItem;
+ public static void RegisterBasketItem(ItemStack itemStack){
+ instance.basketItems.add(itemStack);
+ }
+ public static boolean isBasketItem(ItemStack itemStack){
+ if(cachedBasketItem!=null && cachedBasketItem.isItemEqual(itemStack)) return true;
+
+ for(ItemStack is : instance.basketItems){
+ if(is.isItemEqual(itemStack)){
+ cachedBasketItem=is;
+ return true;
+ }
+ }
+ return false;
+ }
+
+ //-------------------------------------------------------------------------------------
+ public static class AppraisalItemStack{
+ private boolean isOre;
+ private int oreId;
+ private ItemStack itemStack;
+
+ public AppraisalItemStack(ItemStack item){
+ isOre=false;
+ itemStack=item;
+ }
+ public AppraisalItemStack(String oreId){
+ isOre=true;
+ this.oreId= OreDictionary.getOreID(oreId);
+ }
+ public boolean isItemEqual(ItemStack m){
+ if (isOre){
+ int[] ids=OreDictionary.getOreIDs(m);
+ for(int i : ids){
+ if(i==oreId) return true;
+ }
+ return false;
+ }
+ else{
+ return itemStack.isItemEqual(m);
+ }
+ }
+
+ public ItemStack getItemStack(){
+ if(itemStack==null && isOre){
+ itemStack=OreDictionary.getOres(OreDictionary.getOreName(oreId)).get(0).copy();
+ }
+ return itemStack;
+ }
+
+ @Override
+ public boolean equals(Object obj){
+ if(obj instanceof AppraisalItemStack){
+ AppraisalItemStack ais=(AppraisalItemStack)obj;
+ if(isOre!=ais.isOre) return false;
+ return isOre?oreId==ais.oreId:itemStack.isItemEqual(ais.itemStack);
+ }
+ return false;
+ }
+ }
+ public static class WeightedItemStack{
+ private int weight;
+ private ItemStack itemStack;
+
+ public WeightedItemStack(int w, ItemStack stack){
+ weight=w;
+ itemStack=stack;
+ }
+
+ public int getWeight(){ return weight; }
+ public ItemStack getItemStack(){ return itemStack; }
+
+ }
+ public static class Recipe{
+ protected int level;
+ protected float prob;
+ protected ItemStack key;
+ protected ItemStack output;
+ protected String[] materials;
+
+ public Recipe(int level, float prob, ItemStack key, ItemStack output, String ... materials){
+ this.level=level;
+ this.prob=prob;
+ this.key=key;
+ this.output=output;
+ this.materials=materials;
+ }
+
+ public ItemStack getKey(){ return key; }
+ public boolean isKey(ItemStack itemStack){
+ return key.isItemEqual(itemStack);
+ }
+ public ItemStack getProduct(){
+ return output;
+ }
+ public int getLevel(){ return level; }
+ public float getProb(){ return prob; }
+
+ public LinkedList<String> getMaterialList(){
+ LinkedList<String> list=new LinkedList<String>();
+ for(String n : materials) list.add(n);
+ return list;
+ }
+ }
+ public static class ProductExpPair{
+ public ItemStack product;
+ public double exp;
+
+ public ProductExpPair(ItemStack p, double e){
+ product=p;
+ exp=e;
+ }
+ public boolean isItemEqual(ItemStack item){
+ return product.isItemEqual(item);
+ }
+ public double getExp(){
+ return exp;
+ }
+ }
+ public static class ItemPair{
+ private ItemStack item1;
+ private ItemStack item2;
+ public ItemPair(ItemStack i1, ItemStack i2){
+ item1=i1;
+ item2=i2;
+ }
+ public ItemStack getItem1(){ return item1; }
+ public ItemStack getItem2(){ return item2; }
+ }
+}
diff --git a/src/main/java/jp/plusplus/fbs/alchemy/IAlchemyMaterial.class b/src/main/java/jp/plusplus/fbs/alchemy/IAlchemyMaterial.class Binary files differnew file mode 100644 index 0000000..ed9cc6b --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/alchemy/IAlchemyMaterial.class diff --git a/src/main/java/jp/plusplus/fbs/alchemy/IAlchemyMaterial.java b/src/main/java/jp/plusplus/fbs/alchemy/IAlchemyMaterial.java new file mode 100644 index 0000000..10b1a98 --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/alchemy/IAlchemyMaterial.java @@ -0,0 +1,24 @@ +package jp.plusplus.fbs.alchemy;
+
+import jp.plusplus.fbs.alchemy.characteristic.CharacteristicBase;
+import jp.plusplus.fbs.world.biome.WorldGenDirtyOak;
+import net.minecraft.item.ItemStack;
+import net.minecraft.world.World;
+
+import java.util.ArrayList;
+import java.util.Random;
+
+/**
+ * Created by plusplus_F on 2015/09/08.
+ * 素材アイテムが実装すべきインターフェース
+ */
+public interface IAlchemyMaterial {
+ /**
+ * 鑑定時に特性を付与するための特性リストをランダムで生成する。
+ * 戻り値の内容が全てItemStackに付与される
+ * @param itemStack
+ * @param rand
+ * @return アイテムスタックに付与される特性(Nullable)
+ */
+ ArrayList<CharacteristicBase> addCharacteristics(ItemStack itemStack, Random rand);
+}
diff --git a/src/main/java/jp/plusplus/fbs/alchemy/IAlchemyProduct.class b/src/main/java/jp/plusplus/fbs/alchemy/IAlchemyProduct.class Binary files differnew file mode 100644 index 0000000..472d110 --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/alchemy/IAlchemyProduct.class diff --git a/src/main/java/jp/plusplus/fbs/alchemy/IAlchemyProduct.java b/src/main/java/jp/plusplus/fbs/alchemy/IAlchemyProduct.java new file mode 100644 index 0000000..1104aee --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/alchemy/IAlchemyProduct.java @@ -0,0 +1,35 @@ +package jp.plusplus.fbs.alchemy;
+
+import jp.plusplus.fbs.alchemy.characteristic.CharacteristicBase;
+import net.minecraft.item.ItemStack;
+
+import java.util.ArrayList;
+import java.util.Random;
+
+/**
+ * Created by plusplus_F on 2015/09/09.
+ * 大釜によって作成できるアイテムに実装すべきインターフェース
+ */
+public interface IAlchemyProduct {
+ /**
+ * その特性を引き継げるか判定する
+ * @param cb 判定したい特性
+ * @return true:引継ぎ可能
+ */
+ boolean canInherit(ItemStack itemStack, CharacteristicBase cb);
+
+ /**
+ * 特性引継ぎ時に、引継ぎ可能な特性の数を返す
+ * @param itemStack
+ * @return
+ */
+ int getMaxInheritAmount(ItemStack itemStack);
+
+ /**
+ * 調合した際に、最初から付与されている特性リストを返す
+ * (このメソッドでは特性を付与しない!)
+ * @param itemStack
+ * @return
+ */
+ ArrayList<CharacteristicBase> getDefaultCharacteristics(ItemStack itemStack, Random rand);
+}
diff --git a/src/main/java/jp/plusplus/fbs/alchemy/ItemAlchemyIntermediateMaterial.class b/src/main/java/jp/plusplus/fbs/alchemy/ItemAlchemyIntermediateMaterial.class Binary files differnew file mode 100644 index 0000000..42eb338 --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/alchemy/ItemAlchemyIntermediateMaterial.class diff --git a/src/main/java/jp/plusplus/fbs/alchemy/ItemAlchemyIntermediateMaterial.java b/src/main/java/jp/plusplus/fbs/alchemy/ItemAlchemyIntermediateMaterial.java new file mode 100644 index 0000000..c574a47 --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/alchemy/ItemAlchemyIntermediateMaterial.java @@ -0,0 +1,143 @@ +package jp.plusplus.fbs.alchemy;
+
+import cpw.mods.fml.relauncher.Side;
+import cpw.mods.fml.relauncher.SideOnly;
+import jp.plusplus.fbs.FBS;
+import jp.plusplus.fbs.alchemy.characteristic.*;
+import jp.plusplus.fbs.item.ItemBase;
+import net.minecraft.client.renderer.texture.IIconRegister;
+import net.minecraft.creativetab.CreativeTabs;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.item.Item;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.util.IIcon;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Random;
+
+/**
+ * Created by plusplus_F on 2015/10/19.
+ * 中間素材だよ!中間素材!
+ */
+public class ItemAlchemyIntermediateMaterial extends ItemBase implements IAlchemyMaterial, IAlchemyProduct {
+ public static String[] NAMES={
+ //0
+ "neutralizer", "gunpowder", "herbPowder", "herbDense", "potionActivate", "bladeSpice", "plantPowder", "mushroomPowder"
+ };
+ protected IIcon[] icons;
+
+ public ItemAlchemyIntermediateMaterial(){
+ setMaxDamage(0);
+ setHasSubtypes(true);
+ setCreativeTab(FBS.tabAlchemy);
+ }
+
+ @Override
+ public int getMetadata(int par1) {
+ return par1;
+ }
+
+ @Override
+ @SideOnly(Side.CLIENT)
+ public void getSubItems(Item item, CreativeTabs tab, List list) {
+ for(int i=0;i<NAMES.length;i++){
+ ItemStack it=new ItemStack(item, 1, i);
+ it.setTagCompound(new NBTTagCompound());
+ ArrayList<CharacteristicBase> cbs=addCharacteristics(it, AlchemyRegistry.getRandom());
+ AlchemyRegistry.WriteCharacteristicToNBT(it.getTagCompound(), cbs);
+
+ list.add(it);
+ }
+ }
+
+ @Override
+ public String getUnlocalizedName(ItemStack p_77667_1_) {
+ int meta=p_77667_1_.getItemDamage();
+ if(meta<0 ||meta>=NAMES.length) meta=0;
+
+ return "item.fbs.intermediate." + NAMES[meta];
+ }
+
+ @Override
+ @SideOnly(Side.CLIENT)
+ public void registerIcons(IIconRegister register) {
+ icons=new IIcon[NAMES.length];
+
+ for(int i=0;i<NAMES.length;i++){
+ icons[i]=register.registerIcon(FBS.MODID+":"+NAMES[i]);
+ }
+ }
+
+ @Override
+ @SideOnly(Side.CLIENT)
+ public IIcon getIconFromDamage(int p_77617_1_) {
+ return icons[p_77617_1_];
+ }
+
+ @Override
+ @SideOnly(Side.CLIENT)
+ public void addInformation(ItemStack itemStack, EntityPlayer player, List list, boolean p_77624_4_) {
+ AlchemyRegistry.AddCharacteristicsInfo(itemStack, list, p_77624_4_);
+ if(itemStack.getItemDamage()!=5){
+ AlchemyRegistry.AddMaterialInfo(itemStack, list, p_77624_4_);
+ }
+ }
+
+ //-----------------------------------IAlchemyMaterial---------------------------------------------
+ @Override
+ public ArrayList<CharacteristicBase> addCharacteristics(ItemStack itemStack, Random rand) {
+ ArrayList<CharacteristicBase> list=new ArrayList<CharacteristicBase>();
+ return list;
+ }
+
+ //-----------------------------------IAlchemyProduct---------------------------------------------
+ @Override
+ public boolean canInherit(ItemStack itemStack, CharacteristicBase cb) {
+ int meta=itemStack.getItemDamage();
+
+ if(cb instanceof CharacteristicQuality){
+ return true;
+ }
+
+ if(meta!=0 && meta!=4 && cb instanceof CharacteristicWeight){
+ return true;
+ }
+
+ if((meta==2 || meta==3 || meta==6 || meta==7) &&
+ (cb instanceof CharacteristicHealth || cb instanceof CharacteristicSanity || cb instanceof CharacteristicStamina
+ || cb instanceof CharacteristicExp)){
+ return true;
+ }
+
+ if((meta==5 || meta==6 || meta==8) &&
+ (cb instanceof CharacteristicPoison || cb instanceof CharacteristicSpeed || cb instanceof CharacteristicHealth
+ || cb instanceof CharacteristicConfusion || cb instanceof CharacteristicPower)){
+ return true;
+ }
+
+ /*
+ if(meta==3 && cb instanceof CharacteristicLook){
+ return true;
+ }
+ */
+
+ return false;
+ }
+
+ @Override
+ public int getMaxInheritAmount(ItemStack itemStack) {
+ int meta=itemStack.getItemDamage();
+ if(meta==2 || meta==3) return 4;
+ if(meta==5) return 3;
+ if(meta==6 || meta==7) return 5;
+ return 2;
+ }
+
+ @Override
+ public ArrayList<CharacteristicBase> getDefaultCharacteristics(ItemStack itemStack, Random rand) {
+ ArrayList<CharacteristicBase> ret=new ArrayList<CharacteristicBase>();
+ return ret;
+ }
+}
diff --git a/src/main/java/jp/plusplus/fbs/alchemy/ItemAlchemyMaterial.class b/src/main/java/jp/plusplus/fbs/alchemy/ItemAlchemyMaterial.class Binary files differnew file mode 100644 index 0000000..78475a9 --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/alchemy/ItemAlchemyMaterial.class diff --git a/src/main/java/jp/plusplus/fbs/alchemy/ItemAlchemyMaterial.java b/src/main/java/jp/plusplus/fbs/alchemy/ItemAlchemyMaterial.java new file mode 100644 index 0000000..c8b6cf6 --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/alchemy/ItemAlchemyMaterial.java @@ -0,0 +1,307 @@ +package jp.plusplus.fbs.alchemy;
+
+import cpw.mods.fml.relauncher.Side;
+import cpw.mods.fml.relauncher.SideOnly;
+import jp.plusplus.fbs.FBS;
+import jp.plusplus.fbs.alchemy.characteristic.*;
+import jp.plusplus.fbs.item.ItemBase;
+import net.minecraft.client.renderer.texture.IIconRegister;
+import net.minecraft.client.resources.I18n;
+import net.minecraft.creativetab.CreativeTabs;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.item.Item;
+import net.minecraft.item.ItemStack;
+import net.minecraft.item.crafting.FurnaceRecipes;
+import net.minecraft.item.crafting.IRecipe;
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.util.IIcon;
+import net.minecraft.util.StatCollector;
+import net.minecraft.world.World;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Random;
+
+/**
+ * Created by plusplus_F on 2015/09/09.
+ */
+public class ItemAlchemyMaterial extends ItemBase implements IAlchemyMaterial {
+ public static String[] NAMES={
+ //0
+ "water","waterUnclean","lava",
+
+ //3
+ "leafTree","branchTree","rootsTree","leafUnclean","branchUnclean","rootsUnclean",
+
+ //9
+ "grassAntidote","grassVine","rootsRakuyo","grassRakuyo","seedsRyusen","flowerRyusen","seedsPower","seedsDefence","fruitsWalnut",
+
+ //18
+ "herbBase","herbBlood","herbMana","herbStamina","herbSoul","herbMandrake","fruitsMandrake",
+
+ //25
+ "mushroomBlue","mushroomPoisonous","mushroomTiredness","mushroomNitrogen","mushroomTsukiyo",
+
+ //30
+ "flowerFox", "grassOtogiri", "grassEnmei", "flowerTsukimi", "grassGunpowder", "grassNightShade",
+
+ //36
+ "herbGold", "herbEnder", "herbExplosive", "herbUnclean", "tearSpirit",
+
+ //41
+ "mushroomParalysis", "mushroomSuperParalysis", "mushroomReishi", "mushroomGold", "mushroomChaos"
+ };
+ protected IIcon[] icons;
+
+ public ItemAlchemyMaterial(){
+ setMaxDamage(0);
+ setHasSubtypes(true);
+ setCreativeTab(FBS.tabAlchemy);
+ }
+
+ @Override
+ public int getMetadata(int par1) {
+ return par1;
+ }
+
+ @Override
+ public String getUnlocalizedName(ItemStack p_77667_1_) {
+ int meta=p_77667_1_.getItemDamage();
+ if(meta<0 ||meta>=NAMES.length) meta=0;
+
+ return "item.fbs.material." + NAMES[meta];
+ }
+
+ @Override
+ @SideOnly(Side.CLIENT)
+ public void getSubItems(Item item, CreativeTabs tab, List list) {
+ for(int i=0;i<NAMES.length;i++){
+ ItemStack it=new ItemStack(item, 1, i);
+ it.setTagCompound(new NBTTagCompound());
+ ArrayList<CharacteristicBase> cbs=addCharacteristics(it, AlchemyRegistry.getRandom());
+ AlchemyRegistry.WriteCharacteristicToNBT(it.getTagCompound(), cbs);
+
+ list.add(it);
+ }
+ }
+
+ @Override
+ @SideOnly(Side.CLIENT)
+ public void registerIcons(IIconRegister register) {
+ icons=new IIcon[NAMES.length];
+
+ for(int i=0;i<NAMES.length;i++){
+ icons[i]=register.registerIcon(FBS.MODID+":"+NAMES[i]);
+ }
+ }
+
+ @Override
+ @SideOnly(Side.CLIENT)
+ public IIcon getIconFromDamage(int p_77617_1_) {
+ if(p_77617_1_<0 || p_77617_1_>=icons.length) p_77617_1_=0;
+ return icons[p_77617_1_];
+ }
+
+ @Override
+ @SideOnly(Side.CLIENT)
+ public void addInformation(ItemStack itemStack, EntityPlayer player, List list, boolean p_77624_4_) {
+ AlchemyRegistry.AddCharacteristicsInfo(itemStack, list, p_77624_4_);
+ AlchemyRegistry.AddMaterialInfo(itemStack, list, p_77624_4_);
+ }
+
+ //------------------------------- IAlchemyMaterial -----------------------------------
+
+ @Override
+ public ArrayList<CharacteristicBase> addCharacteristics(ItemStack itemStack, Random rand) {
+ int meta=itemStack.getItemDamage();
+ ArrayList<CharacteristicBase> list=new ArrayList<CharacteristicBase>();
+ CharacteristicBase cb;
+
+ //--------------------------なんにでもつくやつ--------------------------------
+ float r;
+ //見た目
+ if(meta==1 || meta==6 || meta==7 || meta==8 || meta==39){
+ //不浄なやつ
+ cb = new CharacteristicLook();
+ cb.setValue(3);
+ list.add(cb);
+ }
+ else {
+ /*
+ r = rand.nextFloat();
+ if (r < 0.08f) {
+ cb = new CharacteristicLook();
+ cb.setValue(0);
+ list.add(cb);
+ } else if (r < 0.38f) {
+ cb = new CharacteristicLook();
+ cb.setValue(1);
+ list.add(cb);
+ } else if (r < 0.58f) {
+ cb = new CharacteristicLook();
+ cb.setValue(2);
+ list.add(cb);
+ }
+ */
+ }
+ //品質
+ r = rand.nextFloat();
+ if (r < 0.08f) {
+ cb = new CharacteristicQuality();
+ cb.setValue(0);
+ list.add(cb);
+ } else if (r < 0.38f) {
+ cb = new CharacteristicQuality();
+ cb.setValue(1);
+ list.add(cb);
+ } else if (r < 0.58f) {
+ cb = new CharacteristicQuality();
+ cb.setValue(2);
+ list.add(cb);
+ }
+
+ //--------------------------個別--------------------------------
+ if(meta==40){
+ cb = new CharacteristicSanity.Gain();
+ cb.setValue(0);
+ list.add(cb);
+ }
+ if(meta==1 || meta==6 || meta==7 || meta==8 || meta==37 || meta==39){
+ cb = new CharacteristicSanity.Lose();
+ cb.setValue(rand.nextFloat()<0.3f?1:0);
+ list.add(cb);
+ }
+ if(meta==45){
+ cb = new CharacteristicSanity.Lose();
+ cb.setValue(2);
+ list.add(cb);
+ }
+
+ if(meta==19 || meta==32 || meta==23 || meta==24){
+ cb=new CharacteristicHealth.Gain();
+ cb.setValue(0);
+ list.add(cb);
+ }
+ if(meta==31 || meta==36 || meta==44){
+ cb=new CharacteristicHealth.Gain();
+ cb.setValue(1);
+ list.add(cb);
+ }
+ if(meta==29){
+ cb=new CharacteristicHealth.Lose();
+ cb.setValue(0);
+ list.add(cb);
+ }
+
+ if(FBS.cooperatesSS2){
+ if(meta==0 || meta==1){
+ cb=new CharacteristicWater.Gain();
+ cb.setValue(0);
+ list.add(cb);
+ }
+ if(meta==11 || meta==12 || meta==13 || meta==21 || meta==23 || meta==24){
+ cb=new CharacteristicStamina.Gain();
+ cb.setValue(0);
+ list.add(cb);
+ }
+ if(meta==14){
+ cb=new CharacteristicStamina.Gain();
+ cb.setValue(1);
+ list.add(cb);
+ }
+ if(meta==44){
+ cb=new CharacteristicStamina.Gain();
+ cb.setValue(2);
+ list.add(cb);
+ }
+ if(meta==27){
+ cb=new CharacteristicStamina.Lose();
+ cb.setValue(0);
+ list.add(cb);
+ }
+ }
+
+ if(meta==36 || meta==37 || meta==43){
+ cb=new CharacteristicExp.Gain();
+ cb.setValue(0);
+ list.add(cb);
+ }
+ if(meta==44){
+ cb=new CharacteristicExp.Gain();
+ cb.setValue(2);
+ list.add(cb);
+ }
+
+ if(meta==26 || meta==29){
+ cb=new CharacteristicPoison.Gain();
+ cb.setValue(0);
+ list.add(cb);
+ }
+ if(meta==30 || meta==45){
+ cb=new CharacteristicPoison.Gain();
+ cb.setValue(1);
+ list.add(cb);
+ }
+ if(meta==9 || meta==11 || meta==12){
+ cb=new CharacteristicPoison.Lose();
+ cb.setValue(0);
+ list.add(cb);
+ }
+
+ if(meta==28 || meta==38){
+ cb=new CharacteristicPower.Gain();
+ cb.setValue(0);
+ list.add(cb);
+ }
+ if(meta==15){
+ cb=new CharacteristicPower.Gain();
+ cb.setValue(1);
+ list.add(cb);
+ }
+ if(meta==27 || meta==41){
+ cb=new CharacteristicPower.Lose();
+ cb.setValue(0);
+ list.add(cb);
+ }
+ if(meta==42){
+ cb=new CharacteristicPower.Lose();
+ cb.setValue(1);
+ list.add(cb);
+ }
+
+ if(meta==13 || meta==14){
+ cb=new CharacteristicCleverness.Gain();
+ cb.setValue(0);
+ list.add(cb);
+ }
+ if(meta==43){
+ cb=new CharacteristicCleverness.Gain();
+ cb.setValue(2);
+ list.add(cb);
+ }
+
+ if(meta==35){
+ cb=new CharacteristicSpeed.Gain();
+ cb.setValue(0);
+ list.add(cb);
+ }
+ if(meta==27){
+ cb=new CharacteristicSpeed.Lose();
+ cb.setValue(0);
+ list.add(cb);
+ }
+ if(meta==41){
+ cb=new CharacteristicSpeed.Lose();
+ cb.setValue(1);
+ list.add(cb);
+ }
+ if(meta==42){
+ cb=new CharacteristicSpeed.Lose();
+ cb.setValue(2);
+ list.add(cb);
+ }
+
+ return list;
+ }
+
+}
diff --git a/src/main/java/jp/plusplus/fbs/alchemy/ItemAlchemyPotion.class b/src/main/java/jp/plusplus/fbs/alchemy/ItemAlchemyPotion.class Binary files differnew file mode 100644 index 0000000..9b577c7 --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/alchemy/ItemAlchemyPotion.class diff --git a/src/main/java/jp/plusplus/fbs/alchemy/ItemAlchemyPotion.java b/src/main/java/jp/plusplus/fbs/alchemy/ItemAlchemyPotion.java new file mode 100644 index 0000000..1e487b8 --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/alchemy/ItemAlchemyPotion.java @@ -0,0 +1,149 @@ +package jp.plusplus.fbs.alchemy;
+
+import cpw.mods.fml.relauncher.Side;
+import cpw.mods.fml.relauncher.SideOnly;
+import jp.plusplus.fbs.FBS;
+import jp.plusplus.fbs.alchemy.characteristic.*;
+import net.minecraft.client.renderer.texture.IIconRegister;
+import net.minecraft.creativetab.CreativeTabs;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.item.EnumAction;
+import net.minecraft.item.Item;
+import net.minecraft.item.ItemFood;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.util.IIcon;
+import net.minecraft.util.StatCollector;
+import net.minecraft.world.World;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Random;
+
+/**
+ * Created by plusplus_F on 2015/09/23.
+ */
+public class ItemAlchemyPotion extends ItemFood implements IAlchemyProduct {
+ public static final String[] NAMES={"potion", "ointment", "potionSpirit"};
+ protected IIcon[] icons;
+
+ public ItemAlchemyPotion() {
+ super(0, 0, false);
+ setCreativeTab(FBS.tabAlchemy);
+ setAlwaysEdible();
+ setMaxStackSize(1);
+ setHasSubtypes(true);
+ setMaxDamage(0);
+ }
+
+ public ItemStack onEaten(ItemStack p_77654_1_, World p_77654_2_, EntityPlayer p_77654_3_) {
+ --p_77654_1_.stackSize;
+
+ //特性の効果発動
+ ArrayList<CharacteristicBase> list=AlchemyRegistry.ReadCharacteristicFromNBT(p_77654_1_.getTagCompound());
+ for(CharacteristicBase cb : list) cb.affectEntity(p_77654_2_, p_77654_3_);
+
+ return p_77654_1_;
+ }
+
+ public EnumAction getItemUseAction(ItemStack p_77661_1_)
+ {
+ return EnumAction.drink;
+ }
+
+ @Override
+ public int getMetadata(int par1) {
+ return par1;
+ }
+
+ @Override
+ public String getUnlocalizedName(ItemStack p_77667_1_) {
+ int meta=p_77667_1_.getItemDamage();
+ if(meta<0 ||meta>=NAMES.length) meta=0;
+
+ return "item.fbs.alchemy." + NAMES[meta];
+ }
+
+ @Override
+ @SideOnly(Side.CLIENT)
+ public void getSubItems(Item item, CreativeTabs tab, List list) {
+ for(int i=0;i<NAMES.length;i++){
+ ItemStack it=new ItemStack(item, 1, i);
+ it.setTagCompound(new NBTTagCompound());
+ ArrayList<CharacteristicBase> cbs=getDefaultCharacteristics(it, AlchemyRegistry.getRandom());
+ AlchemyRegistry.WriteCharacteristicToNBT(it.getTagCompound(), cbs);
+
+ list.add(it);
+ }
+ }
+
+ @Override
+ @SideOnly(Side.CLIENT)
+ public void registerIcons(IIconRegister register) {
+ icons=new IIcon[NAMES.length];
+ for(int i=0;i<icons.length;i++) icons[i]=register.registerIcon(FBS.MODID+":"+NAMES[i]);
+ }
+
+ @Override
+ @SideOnly(Side.CLIENT)
+ public IIcon getIconFromDamage(int p_77617_1_) {
+ if(p_77617_1_<0 || p_77617_1_>=icons.length) p_77617_1_=0;
+ return icons[p_77617_1_];
+ }
+
+ @Override
+ @SideOnly(Side.CLIENT)
+ public void addInformation(ItemStack itemStack, EntityPlayer player, List list, boolean p_77624_4_) {
+ AlchemyRegistry.AddCharacteristicsInfo(itemStack, list, p_77624_4_);
+ }
+
+ //----------------------------------------------------------------------------------
+
+ @Override
+ public boolean canInherit(ItemStack itemStack, CharacteristicBase cb) {
+ int meta=itemStack.getItemDamage();
+
+ if(meta==0 && (cb instanceof CharacteristicWater)){
+ return true;
+ }
+
+ if(cb instanceof CharacteristicLook) return false;
+ if(cb instanceof CharacteristicWeight) return false;
+
+ return true;
+ }
+
+ @Override
+ public int getMaxInheritAmount(ItemStack itemStack) {
+ return itemStack.getItemDamage()==0?3:5;
+ }
+
+ @Override
+ public ArrayList<CharacteristicBase> getDefaultCharacteristics(ItemStack itemStack, Random rand) {
+ ArrayList<CharacteristicBase> ret=new ArrayList<CharacteristicBase>();
+ int d=itemStack.getItemDamage();
+ CharacteristicBase cb;
+
+ if(FBS.cooperatesSS2 && d==0){
+ //水分
+ cb=new CharacteristicWater.Gain();
+ cb.setValue(0);
+ ret.add(cb);
+ }
+ if(d==2){
+ if(FBS.cooperatesSS2){
+ //水分
+ cb=new CharacteristicWater.Gain();
+ cb.setValue(0);
+ ret.add(cb);
+ }
+
+ //SAN
+ cb=new CharacteristicSanity.Lose();
+ cb.setValue(1);
+ ret.add(cb);
+ }
+
+ return ret;
+ }
+}
diff --git a/src/main/java/jp/plusplus/fbs/alchemy/ItemEatableAlchemyMaterial.class b/src/main/java/jp/plusplus/fbs/alchemy/ItemEatableAlchemyMaterial.class Binary files differnew file mode 100644 index 0000000..e0c906c --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/alchemy/ItemEatableAlchemyMaterial.class diff --git a/src/main/java/jp/plusplus/fbs/alchemy/ItemEatableAlchemyMaterial.java b/src/main/java/jp/plusplus/fbs/alchemy/ItemEatableAlchemyMaterial.java new file mode 100644 index 0000000..d5e0ecb --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/alchemy/ItemEatableAlchemyMaterial.java @@ -0,0 +1,178 @@ +package jp.plusplus.fbs.alchemy;
+
+import cpw.mods.fml.relauncher.Side;
+import cpw.mods.fml.relauncher.SideOnly;
+import jp.plusplus.fbs.FBS;
+import jp.plusplus.fbs.alchemy.characteristic.*;
+import net.minecraft.client.renderer.texture.IIconRegister;
+import net.minecraft.creativetab.CreativeTabs;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.item.Item;
+import net.minecraft.item.ItemFood;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.potion.Potion;
+import net.minecraft.potion.PotionEffect;
+import net.minecraft.util.IIcon;
+import net.minecraft.world.World;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Random;
+
+/**
+ * Created by plusplus_F on 2016/02/23.
+ */
+public class ItemEatableAlchemyMaterial extends ItemFood implements IAlchemyMaterial {
+ public static String[] NAMES={
+ "mushroomQli", "mushroomMatsu", "mushroomWarai", "mushroomNigaQli",
+
+ //4
+ "fruitsStamina", "fruitsItete", "fruitsSassa"
+ };
+
+ protected int[] heal={
+ 2, 6, 2, 2, 2, 2, 2
+ };
+ protected float[] sat={
+ 0.15f, 0.5f, 0.15f, 0.15f, 0.1f, 0.1f, 0.1f
+ };
+
+ protected IIcon[] icons;
+
+ public ItemEatableAlchemyMaterial() {
+ super(0, 0, false);
+ setMaxDamage(0);
+ setHasSubtypes(true);
+ setCreativeTab(FBS.tabAlchemy);
+ }
+
+ @Override
+ public int getMetadata(int par1) {
+ return par1;
+ }
+
+ @Override
+ public String getUnlocalizedName(ItemStack p_77667_1_) {
+ int meta=p_77667_1_.getItemDamage();
+ if(meta<0 ||meta>=NAMES.length) meta=0;
+
+ return "item.fbs.material." + NAMES[meta];
+ }
+
+ @Override
+ @SideOnly(Side.CLIENT)
+ public void getSubItems(Item item, CreativeTabs tab, List list) {
+ for(int i=0;i<NAMES.length;i++){
+ ItemStack it=new ItemStack(item, 1, i);
+ it.setTagCompound(new NBTTagCompound());
+ ArrayList<CharacteristicBase> cbs=addCharacteristics(it, AlchemyRegistry.getRandom());
+ AlchemyRegistry.WriteCharacteristicToNBT(it.getTagCompound(), cbs);
+
+ list.add(it);
+ }
+ }
+
+ @Override
+ @SideOnly(Side.CLIENT)
+ public void registerIcons(IIconRegister register) {
+ icons=new IIcon[NAMES.length];
+
+ for(int i=0;i<NAMES.length;i++){
+ icons[i]=register.registerIcon(FBS.MODID+":"+NAMES[i]);
+ }
+ }
+
+ @Override
+ @SideOnly(Side.CLIENT)
+ public IIcon getIconFromDamage(int p_77617_1_) {
+ if(p_77617_1_<0 || p_77617_1_>=icons.length) p_77617_1_=0;
+ return icons[p_77617_1_];
+ }
+
+ @Override
+ @SideOnly(Side.CLIENT)
+ public void addInformation(ItemStack itemStack, EntityPlayer player, List list, boolean p_77624_4_) {
+ AlchemyRegistry.AddCharacteristicsInfo(itemStack, list, p_77624_4_);
+ AlchemyRegistry.AddMaterialInfo(itemStack, list, p_77624_4_);
+ }
+
+
+ @Override
+ public int func_150905_g(ItemStack p_150905_1_) {
+ return heal[p_150905_1_.getItemDamage()];
+ }
+
+ @Override
+ public float func_150906_h(ItemStack p_150906_1_) {
+ return sat[p_150906_1_.getItemDamage()];
+ }
+
+ @Override
+ protected void onFoodEaten(ItemStack p_77849_1_, World p_77849_2_, EntityPlayer p_77849_3_) {
+ //特性の効果発動
+ if (!p_77849_2_.isRemote) {
+ ArrayList<CharacteristicBase> list = AlchemyRegistry.ReadCharacteristicFromNBT(p_77849_1_.getTagCompound());
+ for (CharacteristicBase cb : list) cb.affectEntity(p_77849_2_, p_77849_3_);
+ }
+ }
+
+ @Override
+ public ArrayList<CharacteristicBase> addCharacteristics(ItemStack itemStack, Random rand) {
+ int meta=itemStack.getItemDamage();
+ ArrayList<CharacteristicBase> list=new ArrayList<CharacteristicBase>();
+ CharacteristicBase cb;
+
+ //--------------------------なんにでもつくやつ--------------------------------
+ float r;
+ //品質
+ r = rand.nextFloat();
+ if (r < 0.08f) {
+ cb = new CharacteristicQuality();
+ cb.setValue(0);
+ list.add(cb);
+ } else if (r < 0.38f) {
+ cb = new CharacteristicQuality();
+ cb.setValue(1);
+ list.add(cb);
+ } else if (r < 0.58f) {
+ cb = new CharacteristicQuality();
+ cb.setValue(2);
+ list.add(cb);
+ }
+
+ if(FBS.cooperatesSS2){
+ if(meta==1 || meta==4){
+ cb = new CharacteristicStamina.Gain();
+ cb.setValue(0);
+ list.add(cb);
+ }
+ }
+
+ if(meta==3){
+ cb = new CharacteristicPoison.Gain();
+ cb.setValue(0);
+ list.add(cb);
+ }
+
+ if(meta==2){
+ cb = new CharacteristicConfusion.Gain();
+ cb.setValue(0);
+ list.add(cb);
+ }
+
+ if(meta==5){
+ cb = new CharacteristicHealth.Lose();
+ cb.setValue(0);
+ list.add(cb);
+ }
+
+ if(meta==6){
+ cb = new CharacteristicSpeed.Gain();
+ cb.setValue(0);
+ list.add(cb);
+ }
+
+ return list;
+ }
+}
diff --git a/src/main/java/jp/plusplus/fbs/alchemy/ItemRecipeBook$1.class b/src/main/java/jp/plusplus/fbs/alchemy/ItemRecipeBook$1.class Binary files differnew file mode 100644 index 0000000..14493c0 --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/alchemy/ItemRecipeBook$1.class diff --git a/src/main/java/jp/plusplus/fbs/alchemy/ItemRecipeBook.class b/src/main/java/jp/plusplus/fbs/alchemy/ItemRecipeBook.class Binary files differnew file mode 100644 index 0000000..9c2d64c --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/alchemy/ItemRecipeBook.class diff --git a/src/main/java/jp/plusplus/fbs/alchemy/ItemRecipeBook.java b/src/main/java/jp/plusplus/fbs/alchemy/ItemRecipeBook.java new file mode 100644 index 0000000..45c8717 --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/alchemy/ItemRecipeBook.java @@ -0,0 +1,68 @@ +package jp.plusplus.fbs.alchemy;
+
+import cpw.mods.fml.relauncher.Side;
+import cpw.mods.fml.relauncher.SideOnly;
+import jp.plusplus.fbs.FBS;
+import jp.plusplus.fbs.alchemy.characteristic.CharacteristicBase;
+import jp.plusplus.fbs.item.ItemBase;
+import net.minecraft.creativetab.CreativeTabs;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.item.Item;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.util.StatCollector;
+
+import java.util.*;
+
+/**
+ * Created by plusplus_F on 2015/09/25.
+ */
+public class ItemRecipeBook extends ItemBase{
+ public ItemRecipeBook(){
+ setCreativeTab(FBS.tabAlchemy);
+ setUnlocalizedName("recipe");
+ setTextureName("recipe");
+ setMaxDamage(0);
+ setHasSubtypes(true);
+ }
+
+ @Override
+ public int getMetadata(int par1) {
+ return par1;
+ }
+
+
+ @Override
+ @SideOnly(Side.CLIENT)
+ public void getSubItems(Item item, CreativeTabs tab, List list) {
+ ArrayList<AlchemyRegistry.Recipe> rbs=new ArrayList<AlchemyRegistry.Recipe>();
+ for(AlchemyRegistry.Recipe r : AlchemyRegistry.GetRecieps()){
+ if(r.getKey().getItem()==this){
+ rbs.add(r);
+ }
+ }
+ Collections.sort(rbs, new Comparator<AlchemyRegistry.Recipe>() {
+ @Override
+ public int compare(AlchemyRegistry.Recipe o1, AlchemyRegistry.Recipe o2) {
+ return o1.level-o2.level;
+ }
+ });
+ for(AlchemyRegistry.Recipe r : rbs){
+ list.add(r.getKey().copy());
+ }
+ }
+
+ @Override
+ public void addInformation(ItemStack item, EntityPlayer p_77624_2_, List list, boolean flag) {
+ AlchemyRegistry.Recipe r = AlchemyRegistry.GetRecipe(item);
+ if (r != null) {
+ list.add(r.getProduct().getDisplayName());
+ list.add(StatCollector.translateToLocal("info.fbs.book.lv")+":" + r.getLevel());
+ list.add("["+StatCollector.translateToLocal("alchemy.fbs.usage")+"]");
+ for (String n : r.getMaterialList()) {
+ list.add("-"+n);
+ }
+ }
+ }
+
+}
diff --git a/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicBase$Type.class b/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicBase$Type.class Binary files differnew file mode 100644 index 0000000..cc595d7 --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicBase$Type.class diff --git a/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicBase.class b/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicBase.class Binary files differnew file mode 100644 index 0000000..ba19c11 --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicBase.class diff --git a/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicBase.java b/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicBase.java new file mode 100644 index 0000000..2141768 --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicBase.java @@ -0,0 +1,114 @@ +package jp.plusplus.fbs.alchemy.characteristic;
+
+import com.mojang.realmsclient.gui.ChatFormatting;
+import jp.plusplus.fbs.alchemy.AlchemyRegistry;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.util.StatCollector;
+import net.minecraft.world.World;
+
+/**
+ * Created by plusplus_F on 2015/09/08.
+ * 錬金術の素材・生成品の「特性」
+ */
+public abstract class CharacteristicBase {
+ protected int value;
+ protected String uName="";
+
+ public CharacteristicBase(){}
+
+ /**
+ * 特性の強さの単位を得る
+ * @return 特性の強さの単位
+ */
+ public abstract Type getType();
+
+ /**
+ * 生成品のMP価格への倍率補正を返す
+ * @return 価格倍率
+ */
+ public float getMPScale(){
+ return 1.f;
+ }
+
+ /**
+ * この特性を持つアイテムをplayerが使用した際に行う処理
+ * @param world
+ * @param entity
+ */
+ public void affectEntity(World world, EntityLivingBase entity){}
+
+ /**
+ * ツールチップでの表示色を返す
+ * @return 表示色
+ */
+ public ChatFormatting getNameColor(){
+ return ChatFormatting.GRAY;
+ }
+
+ public void writeToNBT(NBTTagCompound nbt){
+ nbt.setInteger("value", getValue());
+ }
+ public void readFromNBT(NBTTagCompound nbt){
+ value=nbt.getInteger("value");
+ }
+
+ public int getValue(){ return getType().getCorrectedValue(value); }
+ /**
+ * 効果の強さを設定する
+ * @param value
+ */
+ public void setValue(int value){
+ this.value=value;
+ }
+
+
+ public int getId(){
+ return AlchemyRegistry.GetCharacteristicId(this.getClass());
+ }
+
+ public void setUnlocalizedName(String u){ uName=u; }
+ public String getUnlocalizedName(){
+ return "alchemy.chara."+uName;
+ }
+ public String getLocalizedName(){
+ return StatCollector.translateToLocal(getUnlocalizedName());
+ }
+
+ public String getUnlocalizedEffectValue(){
+ return getType().getUnlocalizedName(value);
+ }
+ public String getLocalizedEffectValue(){
+ return StatCollector.translateToLocal(getUnlocalizedEffectValue());
+ }
+
+ /**
+ * 特性の持つ、効果の強さの単位
+ * 特性はvalueが大きい順に優先される
+ */
+ public enum Type{
+ SCALE("fbs.small", "fbs.medium", "fbs.large"),
+ LENGTH("fbs.short", "fbs.medium", "fbs.long"),
+ LOOK("fbs.look.beautiful", "fbs.look.good", "fbs.look.dirty", "fbs.look.strange"),
+ WEIGHT("fbs.light", "fbs.heavy"),
+ QUALITY("fbs.great", "fbs.good", "fbs.bad"),
+ NONE();
+
+ private String[] str;
+ Type(String ... name){
+ str=name;
+ }
+ public String getUnlocalizedName(int value){
+ if(str==null || str.length==0) return "";
+
+ value=getCorrectedValue(value);
+ return "alchemy.effect."+str[value];
+ }
+ public int getCorrectedValue(int value){
+ if(value<0 || value>=str.length) value=0;
+ return value;
+ }
+ }
+}
diff --git a/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicCleverness$Gain.class b/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicCleverness$Gain.class Binary files differnew file mode 100644 index 0000000..b8e6b78 --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicCleverness$Gain.class diff --git a/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicCleverness$Lose.class b/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicCleverness$Lose.class Binary files differnew file mode 100644 index 0000000..9ebbfb8 --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicCleverness$Lose.class diff --git a/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicCleverness.class b/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicCleverness.class Binary files differnew file mode 100644 index 0000000..e8adc96 --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicCleverness.class diff --git a/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicCleverness.java b/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicCleverness.java new file mode 100644 index 0000000..4088d99 --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicCleverness.java @@ -0,0 +1,45 @@ +package jp.plusplus.fbs.alchemy.characteristic;
+
+import com.mojang.realmsclient.gui.ChatFormatting;
+import jp.plusplus.fbs.Registry;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.potion.Potion;
+import net.minecraft.potion.PotionEffect;
+import net.minecraft.world.World;
+
+/**
+ * Created by plusplus_F on 2015/09/20.
+ */
+public class CharacteristicCleverness extends CharacteristicBase {
+ protected boolean reverse;
+ public CharacteristicCleverness(boolean minus){
+ reverse=minus;
+ setUnlocalizedName("fbs.cleverness."+(reverse?"lose":"gain"));
+ }
+
+ @Override
+ public Type getType() {
+ return Type.LENGTH;
+ }
+
+ @Override
+ public void affectEntity(World world, EntityLivingBase entity){
+ int lv=getType().getCorrectedValue(value);
+ int d=60+60*lv;
+
+ if(reverse) entity.removePotionEffect(Potion.poison.getId());
+ else entity.addPotionEffect(new PotionEffect(Registry.potionCleverness.getId(), 20*d, lv+1));
+ }
+
+ @Override
+ public ChatFormatting getNameColor(){
+ return reverse?ChatFormatting.RED:ChatFormatting.DARK_GREEN;
+ }
+
+ public static class Gain extends CharacteristicCleverness {
+ public Gain(){ super(false); }
+ }
+ public static class Lose extends CharacteristicCleverness {
+ public Lose(){ super(true); }
+ }
+}
diff --git a/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicConfusion$Gain.class b/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicConfusion$Gain.class Binary files differnew file mode 100644 index 0000000..4601fff --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicConfusion$Gain.class diff --git a/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicConfusion$Lose.class b/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicConfusion$Lose.class Binary files differnew file mode 100644 index 0000000..292384c --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicConfusion$Lose.class diff --git a/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicConfusion.class b/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicConfusion.class Binary files differnew file mode 100644 index 0000000..e582350 --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicConfusion.class diff --git a/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicConfusion.java b/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicConfusion.java new file mode 100644 index 0000000..2db11fe --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicConfusion.java @@ -0,0 +1,43 @@ +package jp.plusplus.fbs.alchemy.characteristic;
+
+import com.mojang.realmsclient.gui.ChatFormatting;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.potion.Potion;
+import net.minecraft.potion.PotionEffect;
+import net.minecraft.world.World;
+
+/**
+ * Created by plusplus_F on 2015/09/20.
+ */
+public class CharacteristicConfusion extends CharacteristicBase {
+ protected boolean reverse;
+ public CharacteristicConfusion(boolean minus){
+ reverse=minus;
+ setUnlocalizedName("fbs.poison."+(reverse?"lose":"gain"));
+ }
+
+ @Override
+ public Type getType() {
+ return Type.LENGTH;
+ }
+
+ @Override
+ public void affectEntity(World world, EntityLivingBase entity){
+ int d=10+10*getType().getCorrectedValue(value);
+
+ if(reverse) entity.removePotionEffect(Potion.confusion.getId());
+ else entity.addPotionEffect(new PotionEffect(Potion.confusion.getId(), 20*d, 1));
+ }
+
+ @Override
+ public ChatFormatting getNameColor(){
+ return !reverse?ChatFormatting.RED:ChatFormatting.DARK_GREEN;
+ }
+
+ public static class Gain extends CharacteristicConfusion {
+ public Gain(){ super(false); }
+ }
+ public static class Lose extends CharacteristicConfusion {
+ public Lose(){ super(true); }
+ }
+}
diff --git a/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicExp$Gain.class b/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicExp$Gain.class Binary files differnew file mode 100644 index 0000000..7c2bda5 --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicExp$Gain.class diff --git a/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicExp$Lose.class b/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicExp$Lose.class Binary files differnew file mode 100644 index 0000000..7c800f8 --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicExp$Lose.class diff --git a/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicExp.class b/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicExp.class Binary files differnew file mode 100644 index 0000000..f7fa9da --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicExp.class diff --git a/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicExp.java b/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicExp.java new file mode 100644 index 0000000..f206c73 --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicExp.java @@ -0,0 +1,53 @@ +package jp.plusplus.fbs.alchemy.characteristic;
+
+import com.mojang.realmsclient.gui.ChatFormatting;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.item.ItemExpBottle;
+import net.minecraft.util.DamageSource;
+import net.minecraft.world.World;
+
+/**
+ * Created by plusplus_F on 2015/09/24.
+ */
+public class CharacteristicExp extends CharacteristicBase {
+ protected boolean reverse;
+ public CharacteristicExp(boolean minus){
+ reverse=minus;
+ setUnlocalizedName("fbs.exp."+(reverse?"lose":"gain"));
+ }
+
+ @Override
+ public Type getType() {
+ return Type.SCALE;
+ }
+
+ @Override
+ public void affectEntity(World world, EntityLivingBase entity){
+ if(!(entity instanceof EntityPlayer)) return;
+ EntityPlayer ep=(EntityPlayer)entity;
+
+ int d=6+6*getType().getCorrectedValue(value);
+
+ if(reverse) {
+ ep.experience -= (float) d / (float) ep.xpBarCap();
+ for (ep.experienceTotal -= d; ep.experience < 0.0F; ep.experience /= (float) ep.xpBarCap()) {
+ ep.experience = (1.0f - ep.experience) * (float) ep.xpBarCap();
+ ep.addExperienceLevel(-1);
+ }
+ }
+ else ((EntityPlayer) entity).addExperience(d);
+ }
+
+ @Override
+ public ChatFormatting getNameColor(){
+ return reverse?ChatFormatting.RED:ChatFormatting.DARK_GREEN;
+ }
+
+ public static class Gain extends CharacteristicExp {
+ public Gain(){ super(false); }
+ }
+ public static class Lose extends CharacteristicExp {
+ public Lose(){ super(true); }
+ }
+}
diff --git a/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicHealth$Gain.class b/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicHealth$Gain.class Binary files differnew file mode 100644 index 0000000..afdc59e --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicHealth$Gain.class diff --git a/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicHealth$Lose.class b/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicHealth$Lose.class Binary files differnew file mode 100644 index 0000000..5cf0a9e --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicHealth$Lose.class diff --git a/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicHealth.class b/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicHealth.class Binary files differnew file mode 100644 index 0000000..0688752 --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicHealth.class diff --git a/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicHealth.java b/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicHealth.java new file mode 100644 index 0000000..ac4c46f --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicHealth.java @@ -0,0 +1,45 @@ +package jp.plusplus.fbs.alchemy.characteristic;
+
+import com.mojang.realmsclient.gui.ChatFormatting;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.potion.Potion;
+import net.minecraft.potion.PotionEffect;
+import net.minecraft.util.DamageSource;
+import net.minecraft.world.World;
+
+/**
+ * Created by plusplus_F on 2015/09/20.
+ */
+public class CharacteristicHealth extends CharacteristicBase {
+ protected boolean reverse;
+ public CharacteristicHealth(boolean minus){
+ reverse=minus;
+ setUnlocalizedName("fbs.life."+(reverse?"lose":"gain"));
+ }
+
+ @Override
+ public Type getType() {
+ return Type.SCALE;
+ }
+
+ @Override
+ public void affectEntity(World world, EntityLivingBase entity){
+ float d=6+6*getType().getCorrectedValue(value);
+
+ if(reverse) entity.attackEntityFrom(new DamageSource(""), d);
+ else entity.heal(d);
+ }
+
+ @Override
+ public ChatFormatting getNameColor(){
+ return reverse?ChatFormatting.RED:ChatFormatting.DARK_GREEN;
+ }
+
+ public static class Gain extends CharacteristicHealth{
+ public Gain(){ super(false); }
+ }
+ public static class Lose extends CharacteristicHealth{
+ public Lose(){ super(true); }
+ }
+}
diff --git a/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicLook.class b/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicLook.class Binary files differnew file mode 100644 index 0000000..26b62bd --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicLook.class diff --git a/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicLook.java b/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicLook.java new file mode 100644 index 0000000..192ce6c --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicLook.java @@ -0,0 +1,25 @@ +package jp.plusplus.fbs.alchemy.characteristic;
+
+/**
+ * Created by plusplus_F on 2015/09/24.
+ */
+public class CharacteristicLook extends CharacteristicBase {
+
+ public CharacteristicLook(){
+ setUnlocalizedName("fbs.look");
+ }
+
+ public float getMPScale(){
+ int v=getValue();
+ if(v==0) return 2.0f;
+ if(v==1) return 1.5f;
+ if(v==2) return 0.5f;
+ if(v==3) return 1.0f;
+ return 1.f;
+ }
+
+ @Override
+ public Type getType() {
+ return Type.LOOK;
+ }
+}
diff --git a/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicPoison$Gain.class b/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicPoison$Gain.class Binary files differnew file mode 100644 index 0000000..16ccc66 --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicPoison$Gain.class diff --git a/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicPoison$Lose.class b/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicPoison$Lose.class Binary files differnew file mode 100644 index 0000000..487a67e --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicPoison$Lose.class diff --git a/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicPoison.class b/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicPoison.class Binary files differnew file mode 100644 index 0000000..0e9196c --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicPoison.class diff --git a/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicPoison.java b/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicPoison.java new file mode 100644 index 0000000..cfbe4ba --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicPoison.java @@ -0,0 +1,44 @@ +package jp.plusplus.fbs.alchemy.characteristic;
+
+import com.mojang.realmsclient.gui.ChatFormatting;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.potion.Potion;
+import net.minecraft.potion.PotionEffect;
+import net.minecraft.util.DamageSource;
+import net.minecraft.world.World;
+
+/**
+ * Created by plusplus_F on 2015/09/20.
+ */
+public class CharacteristicPoison extends CharacteristicBase {
+ protected boolean reverse;
+ public CharacteristicPoison(boolean minus){
+ reverse=minus;
+ setUnlocalizedName("fbs.poison."+(reverse?"lose":"gain"));
+ }
+
+ @Override
+ public Type getType() {
+ return Type.LENGTH;
+ }
+
+ @Override
+ public void affectEntity(World world, EntityLivingBase entity){
+ int d=10+10*getType().getCorrectedValue(value);
+
+ if(reverse) entity.removePotionEffect(Potion.poison.getId());
+ else entity.addPotionEffect(new PotionEffect(Potion.poison.getId(), 20*d, 1));
+ }
+
+ @Override
+ public ChatFormatting getNameColor(){
+ return !reverse?ChatFormatting.RED:ChatFormatting.DARK_GREEN;
+ }
+
+ public static class Gain extends CharacteristicPoison {
+ public Gain(){ super(false); }
+ }
+ public static class Lose extends CharacteristicPoison {
+ public Lose(){ super(true); }
+ }
+}
diff --git a/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicPower$Gain.class b/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicPower$Gain.class Binary files differnew file mode 100644 index 0000000..707e1d2 --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicPower$Gain.class diff --git a/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicPower$Lose.class b/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicPower$Lose.class Binary files differnew file mode 100644 index 0000000..7a0b04b --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicPower$Lose.class diff --git a/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicPower.class b/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicPower.class Binary files differnew file mode 100644 index 0000000..b1c523f --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicPower.class diff --git a/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicPower.java b/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicPower.java new file mode 100644 index 0000000..42021ee --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicPower.java @@ -0,0 +1,50 @@ +package jp.plusplus.fbs.alchemy.characteristic;
+
+import com.mojang.realmsclient.gui.ChatFormatting;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.potion.Potion;
+import net.minecraft.potion.PotionEffect;
+import net.minecraft.world.World;
+
+/**
+ * Created by plusplus_F on 2015/09/20.
+ */
+public class CharacteristicPower extends CharacteristicBase {
+ protected boolean reverse;
+ public CharacteristicPower(boolean minus){
+ reverse=minus;
+ setUnlocalizedName("fbs.power."+(reverse?"lose":"gain"));
+ }
+
+ @Override
+ public Type getType() {
+ return Type.LENGTH;
+ }
+
+ @Override
+ public void affectEntity(World world, EntityLivingBase entity){
+ int lv=getType().getCorrectedValue(value);
+ int d=30+30*lv;
+
+ if(reverse){
+ entity.removePotionEffect(Potion.damageBoost.getId());
+ entity.addPotionEffect(new PotionEffect(Potion.weakness.getId(), 20*d, lv+1));
+ }
+ else{
+ entity.removePotionEffect(Potion.weakness.getId());
+ entity.addPotionEffect(new PotionEffect(Potion.damageBoost.getId(), 20*d, lv+1));
+ }
+ }
+
+ @Override
+ public ChatFormatting getNameColor(){
+ return reverse?ChatFormatting.RED:ChatFormatting.DARK_GREEN;
+ }
+
+ public static class Gain extends CharacteristicPower {
+ public Gain(){ super(false); }
+ }
+ public static class Lose extends CharacteristicPower {
+ public Lose(){ super(true); }
+ }
+}
diff --git a/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicQuality.class b/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicQuality.class Binary files differnew file mode 100644 index 0000000..63ef353 --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicQuality.class diff --git a/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicQuality.java b/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicQuality.java new file mode 100644 index 0000000..171bf94 --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicQuality.java @@ -0,0 +1,24 @@ +package jp.plusplus.fbs.alchemy.characteristic;
+
+/**
+ * Created by plusplus_F on 2015/09/24.
+ */
+public class CharacteristicQuality extends CharacteristicBase {
+
+ public CharacteristicQuality(){
+ setUnlocalizedName("fbs.quality");
+ }
+
+ public float getMPScale(){
+ int v=getValue();
+ if(v==0) return 3.0f;
+ if(v==1) return 1.5f;
+ if(v==2) return 0.8f;
+ return 1.f;
+ }
+
+ @Override
+ public Type getType() {
+ return Type.QUALITY;
+ }
+}
diff --git a/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicSanity$Gain.class b/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicSanity$Gain.class Binary files differnew file mode 100644 index 0000000..26f3693 --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicSanity$Gain.class diff --git a/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicSanity$Lose.class b/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicSanity$Lose.class Binary files differnew file mode 100644 index 0000000..6f5dcac --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicSanity$Lose.class diff --git a/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicSanity.class b/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicSanity.class Binary files differnew file mode 100644 index 0000000..72c6889 --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicSanity.class diff --git a/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicSanity.java b/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicSanity.java new file mode 100644 index 0000000..f49734b --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicSanity.java @@ -0,0 +1,45 @@ +package jp.plusplus.fbs.alchemy.characteristic;
+
+import com.mojang.realmsclient.gui.ChatFormatting;
+import jp.plusplus.fbs.exprop.SanityManager;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.util.DamageSource;
+import net.minecraft.world.World;
+
+/**
+ * Created by plusplus_F on 2015/09/20.
+ */
+public class CharacteristicSanity extends CharacteristicBase {
+ protected boolean reverse;
+ public CharacteristicSanity(boolean minus){
+ reverse=minus;
+ setUnlocalizedName("fbs.sanity."+(reverse?"lose":"gain"));
+ }
+
+ @Override
+ public Type getType() {
+ return Type.SCALE;
+ }
+
+ @Override
+ public void affectEntity(World world, EntityLivingBase entity){
+ if(!(entity instanceof EntityPlayer)) return;
+
+ int t=getType().getCorrectedValue(value);
+ if(reverse) SanityManager.loseSanity((EntityPlayer)entity, 1+t, 6, true);
+ else SanityManager.addSanity((EntityPlayer) entity, 1 + t, 6, true);
+ }
+
+ @Override
+ public ChatFormatting getNameColor(){
+ return reverse?ChatFormatting.RED:ChatFormatting.DARK_GREEN;
+ }
+
+ public static class Gain extends CharacteristicSanity {
+ public Gain(){ super(false); }
+ }
+ public static class Lose extends CharacteristicSanity {
+ public Lose(){ super(true); }
+ }
+}
diff --git a/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicSpeed$Gain.class b/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicSpeed$Gain.class Binary files differnew file mode 100644 index 0000000..128823f --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicSpeed$Gain.class diff --git a/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicSpeed$Lose.class b/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicSpeed$Lose.class Binary files differnew file mode 100644 index 0000000..46f61dd --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicSpeed$Lose.class diff --git a/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicSpeed.class b/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicSpeed.class Binary files differnew file mode 100644 index 0000000..2552c14 --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicSpeed.class diff --git a/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicSpeed.java b/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicSpeed.java new file mode 100644 index 0000000..54e478f --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicSpeed.java @@ -0,0 +1,48 @@ +package jp.plusplus.fbs.alchemy.characteristic;
+
+import com.mojang.realmsclient.gui.ChatFormatting;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.potion.Potion;
+import net.minecraft.potion.PotionEffect;
+import net.minecraft.world.World;
+
+/**
+ * Created by plusplus_F on 2015/02/23.
+ */
+public class CharacteristicSpeed extends CharacteristicBase {
+ protected boolean reverse;
+ public CharacteristicSpeed(boolean minus){
+ reverse=minus;
+ setUnlocalizedName("fbs.speed."+(reverse?"lose":"gain"));
+ }
+
+ @Override
+ public Type getType() {
+ return Type.LENGTH;
+ }
+
+ @Override
+ public void affectEntity(World world, EntityLivingBase entity) {
+ int d = 10 + 10 * getType().getCorrectedValue(value);
+
+ if (reverse) {
+ entity.removePotionEffect(Potion.moveSlowdown.getId());
+ entity.addPotionEffect(new PotionEffect(Potion.moveSpeed.getId(), 20 * d, 1));
+ } else {
+ entity.removePotionEffect(Potion.moveSpeed.getId());
+ entity.addPotionEffect(new PotionEffect(Potion.moveSlowdown.getId(), 20 * d, 1));
+ }
+ }
+
+ @Override
+ public ChatFormatting getNameColor(){
+ return reverse?ChatFormatting.RED:ChatFormatting.DARK_GREEN;
+ }
+
+ public static class Gain extends CharacteristicSpeed {
+ public Gain(){ super(false); }
+ }
+ public static class Lose extends CharacteristicSpeed {
+ public Lose(){ super(true); }
+ }
+}
diff --git a/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicStamina$Gain.class b/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicStamina$Gain.class Binary files differnew file mode 100644 index 0000000..ee7b1dc --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicStamina$Gain.class diff --git a/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicStamina$Lose.class b/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicStamina$Lose.class Binary files differnew file mode 100644 index 0000000..028bae8 --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicStamina$Lose.class diff --git a/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicStamina.class b/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicStamina.class Binary files differnew file mode 100644 index 0000000..995c511 --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicStamina.class diff --git a/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicStamina.java b/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicStamina.java new file mode 100644 index 0000000..bca5d3d --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicStamina.java @@ -0,0 +1,55 @@ +package jp.plusplus.fbs.alchemy.characteristic;
+
+import com.mojang.realmsclient.gui.ChatFormatting;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.entity.player.EntityPlayerMP;
+import net.minecraft.world.World;
+import shift.sextiarysector.api.SextiarySectorAPI;
+import shift.sextiarysector.packet.PacketPlayerData;
+import shift.sextiarysector.packet.SSPacketHandler;
+import shift.sextiarysector.player.CustomPlayerData;
+import shift.sextiarysector.player.EntityPlayerManager;
+import shift.sextiarysector.player.MoistureStats;
+import shift.sextiarysector.player.StaminaStats;
+
+/**
+ * Created by plusplus_F on 2015/09/24.
+ */
+public class CharacteristicStamina extends CharacteristicBase {
+ protected boolean reverse;
+ public CharacteristicStamina(boolean minus){
+ reverse=minus;
+ setUnlocalizedName("fbs.stamina."+(reverse?"lose":"gain"));
+ }
+
+ @Override
+ public Type getType() {
+ return Type.SCALE;
+ }
+
+ @Override
+ public void affectEntity(World world, EntityLivingBase entity){
+ if(!(entity instanceof EntityPlayer)) return;
+ int d=30+30*getType().getCorrectedValue(value);
+
+ EntityPlayer ep=(EntityPlayer) entity;
+
+ if(reverse) SextiarySectorAPI.addStaminaExhaustion(ep, d * 10);
+ else SextiarySectorAPI.addStaminaStats(ep, d, 0.1f);
+
+ if(ep instanceof EntityPlayerMP) SSPacketHandler.INSTANCE.sendTo(new PacketPlayerData(EntityPlayerManager.getCustomPlayerData(ep)), (EntityPlayerMP)ep);
+ }
+
+ @Override
+ public ChatFormatting getNameColor(){
+ return reverse?ChatFormatting.RED:ChatFormatting.DARK_GREEN;
+ }
+
+ public static class Gain extends CharacteristicStamina {
+ public Gain(){ super(false); }
+ }
+ public static class Lose extends CharacteristicStamina {
+ public Lose(){ super(true); }
+ }
+}
diff --git a/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicWater$Gain.class b/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicWater$Gain.class Binary files differnew file mode 100644 index 0000000..2c6d26b --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicWater$Gain.class diff --git a/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicWater$Lose.class b/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicWater$Lose.class Binary files differnew file mode 100644 index 0000000..136e8b8 --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicWater$Lose.class diff --git a/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicWater.class b/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicWater.class Binary files differnew file mode 100644 index 0000000..01c1d29 --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicWater.class diff --git a/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicWater.java b/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicWater.java new file mode 100644 index 0000000..dfc6f0a --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicWater.java @@ -0,0 +1,59 @@ +package jp.plusplus.fbs.alchemy.characteristic;
+
+import com.mojang.realmsclient.gui.ChatFormatting;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.entity.player.EntityPlayerMP;
+import net.minecraft.util.DamageSource;
+import net.minecraft.world.World;
+import shift.sextiarysector.api.SextiarySectorAPI;
+import shift.sextiarysector.packet.PacketPlayerData;
+import shift.sextiarysector.packet.SSPacketHandler;
+import shift.sextiarysector.player.CustomPlayerData;
+import shift.sextiarysector.player.EntityPlayerManager;
+import shift.sextiarysector.player.MoistureStats;
+
+/**
+ * Created by plusplus_F on 2015/09/24.
+ */
+public class CharacteristicWater extends CharacteristicBase {
+ protected boolean reverse;
+ public CharacteristicWater(boolean minus){
+ reverse=minus;
+ setUnlocalizedName("fbs.water."+(reverse?"lose":"gain"));
+ }
+
+ @Override
+ public Type getType() {
+ return Type.SCALE;
+ }
+
+ @Override
+ public void affectEntity(World world, EntityLivingBase entity){
+ if(!(entity instanceof EntityPlayer)) return;
+ int d=6+6*getType().getCorrectedValue(value);
+
+ CustomPlayerData cpd= EntityPlayerManager.getCustomPlayerData((EntityPlayer)entity);
+ if(cpd==null) return;
+ MoistureStats ms=cpd.getMoisture();
+
+ EntityPlayer ep=(EntityPlayer) entity;
+
+ if(reverse) SextiarySectorAPI.addMoistureExhaustion(ep, d*2);
+ else SextiarySectorAPI.addMoistureStats(ep, d, 0.1f);
+
+ if(ep instanceof EntityPlayerMP) SSPacketHandler.INSTANCE.sendTo(new PacketPlayerData(EntityPlayerManager.getCustomPlayerData(ep)), (EntityPlayerMP) ep);
+ }
+
+ @Override
+ public ChatFormatting getNameColor(){
+ return reverse?ChatFormatting.RED:ChatFormatting.DARK_GREEN;
+ }
+
+ public static class Gain extends CharacteristicWater {
+ public Gain(){ super(false); }
+ }
+ public static class Lose extends CharacteristicWater {
+ public Lose(){ super(true); }
+ }
+}
diff --git a/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicWeight.class b/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicWeight.class Binary files differnew file mode 100644 index 0000000..62bc1ad --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicWeight.class diff --git a/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicWeight.java b/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicWeight.java new file mode 100644 index 0000000..fa27b5d --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/alchemy/characteristic/CharacteristicWeight.java @@ -0,0 +1,23 @@ +package jp.plusplus.fbs.alchemy.characteristic;
+
+/**
+ * Created by plusplus_F on 2015/09/24.
+ */
+public class CharacteristicWeight extends CharacteristicBase {
+
+ public CharacteristicWeight(){
+ setUnlocalizedName("fbs.weight");
+ }
+
+ public float getMPScale(){
+ int v=getValue();
+ if(v==0) return 0.75f;
+ if(v==1) return 1.25f;
+ return 1.f;
+ }
+
+ @Override
+ public Type getType() {
+ return Type.WEIGHT;
+ }
+}
|
