diff options
Diffstat (limited to 'src/main/java/jp/plusplus/fbs/container/inventory/InventoryMagicTimeTrace.java')
| -rw-r--r-- | src/main/java/jp/plusplus/fbs/container/inventory/InventoryMagicTimeTrace.java | 135 |
1 files changed, 135 insertions, 0 deletions
diff --git a/src/main/java/jp/plusplus/fbs/container/inventory/InventoryMagicTimeTrace.java b/src/main/java/jp/plusplus/fbs/container/inventory/InventoryMagicTimeTrace.java new file mode 100644 index 0000000..352dcfb --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/container/inventory/InventoryMagicTimeTrace.java @@ -0,0 +1,135 @@ +package jp.plusplus.fbs.container.inventory;
+
+import jp.plusplus.fbs.FBS;
+import jp.plusplus.fbs.Registry;
+import jp.plusplus.fbs.api.MagicBase;
+import jp.plusplus.fbs.container.ContainerMagic;
+import jp.plusplus.fbs.container.slot.SlotMagic;
+import jp.plusplus.fbs.container.slot.SlotMagicCopy;
+import jp.plusplus.fbs.container.slot.SlotMagicTakeOnly;
+import jp.plusplus.fbs.container.slot.SlotMagicTimeTrace;
+import jp.plusplus.fbs.exprop.SanityManager;
+import jp.plusplus.fbs.item.ItemBookSorcery;
+import jp.plusplus.fbs.mod.ForIR3;
+import jp.plusplus.fbs.mod.ForSS2;
+import jp.plusplus.fbs.tileentity.TileEntityMagicCore;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.item.ItemStack;
+import net.minecraft.util.ResourceLocation;
+
+/**
+ * Created by plusplus_F on 2016/02/28.
+ */
+public class InventoryMagicTimeTrace extends InventoryMagic {
+ public static final ResourceLocation rl=new ResourceLocation(FBS.MODID, "textures/gui/magicProcessing.png");
+
+ public InventoryMagicTimeTrace(TileEntityMagicCore te, EntityPlayer player) {
+ super(4, te, player);
+ }
+
+ public float getRepairPercent(){
+ return 0.5f*rand.nextFloat();
+ }
+
+ @Override
+ public void work() {
+ if(itemStacks[0]==null) return;
+
+ //魔法が無かったら
+ MagicBase mb=Registry.GetMagic("fbs.timeTrace").getMagic(this.player.worldObj, this.player, true);
+ if(mb==null) return;
+
+ boolean crm=player.capabilities.isCreativeMode;
+ if(crm || mb.checkSuccess()){
+ //クリエイティブか、魔法に成功すると
+ SanityManager.loseSanity(player, 1, 10, true);
+
+ ItemStack itemStack=itemStacks[0].copy();
+ if(FBS.cooperatesIR3 && ForIR3.isCrystalUnit(itemStack)){
+ ForIR3.repairCrystalUnit(itemStack, getRepairPercent());
+ }
+ else if(FBS.cooperatesSS2 && ForSS2.canTimeTrace(itemStack)){
+ itemStack=ForSS2.getTimeTraced(itemStack);
+ }
+ else if(itemStack.getItem().isItemTool(itemStack)){
+ int d=itemStack.getItemDamage();
+ d=Math.max(0, d-(int)(itemStack.getMaxDamage()*getRepairPercent()));
+ itemStack.setItemDamage(d);
+ }
+
+ if(itemStacks[1]==null){
+ itemStacks[1]=itemStack;
+ }
+ else if(itemStacks[1].isItemEqual(itemStack) && itemStacks[1].stackSize+itemStack.stackSize<=itemStack.getMaxStackSize()){
+ itemStacks[1].stackSize+=itemStack.stackSize;
+ }
+ }
+ else {
+ SanityManager.loseSanity(player, 1, 10, true);
+ if(itemStacks[1]==null) itemStacks[1]=itemStacks[0];
+ else if(itemStacks[1].isItemEqual(itemStacks[0])) itemStacks[1].stackSize++;
+ }
+
+ //魔導書の回数を減らす
+ if(itemStacks[2]!=null && !crm) ItemBookSorcery.reduceMagicMaxUse(itemStacks[2]);
+
+ itemStacks[0]=null;
+ onInventoryChanged(0);
+ }
+
+ @Override
+ public void onInventoryChanged(int index) {
+ //増やしたいアイテムが無い場合、魔導書が無い場合進捗を無に帰す
+ if (itemStacks[0] == null || itemStacks[2] == null) {
+ magicCore.resetProgress();
+ //FMLLog.info("item null");
+ return;
+ }
+
+ //本がおかしくても進捗を無に帰す
+ Registry.BookData bd = Registry.GetBookDataFromItemStack(itemStacks[2]);
+ if (bd == null || !bd.title.equals("fbs.timeTrace") || ItemBookSorcery.getMagicMaxUse(itemStacks[2]) <= 0) {
+ magicCore.resetProgress();
+ return;
+ }
+
+ //処理できそうにない場合も進捗を無に帰す
+ ItemStack get=null;
+ ItemStack itemStack=itemStacks[0].copy();
+ if(FBS.cooperatesIR3 && ForIR3.isCrystalUnit(itemStack)){
+ get=itemStack;
+ }
+ else if(FBS.cooperatesSS2 && ForSS2.canTimeTrace(itemStack)){
+ get=ForSS2.getTimeTraced(itemStack);
+ }
+ else if(itemStack.getItem().isItemTool(itemStack)){
+ get=itemStack;
+ }
+
+ //変換できない・完成品スロットのアイテムが違う・完成品スロットのスタック数がmaxのとき、失敗
+ if(get==null || (itemStacks[1]!=null && (!itemStacks[1].isItemEqual(get) || itemStacks[1].stackSize+get.stackSize>itemStacks[1].getMaxStackSize()))){
+ magicCore.resetProgress();
+ return;
+ }
+
+ //進捗の最大値を設定する
+ magicCore.setProgressMax(20 * 3);
+ }
+
+ @Override
+ public void addSlotToContainer(ContainerMagic cm) {
+ cm.addSlotToContainer(new SlotMagicTimeTrace(this, 0, 44, 36));
+ cm.addSlotToContainer(new SlotMagicTakeOnly(this, 1, 103, 36));
+ cm.addSlotToContainer(new SlotMagic(this, 2, 72, 17));
+ }
+
+ @Override
+ public ResourceLocation getResource() {
+ return rl;
+ }
+
+ @Override
+ public String getInventoryName() {
+ return Registry.GetLocalizedBookTitle("fbs.timeTrace");
+ }
+}
|
