diff options
Diffstat (limited to 'src/main/java/jp/plusplus/fbs/magic')
78 files changed, 1943 insertions, 0 deletions
diff --git a/src/main/java/jp/plusplus/fbs/magic/MagicArrow.class b/src/main/java/jp/plusplus/fbs/magic/MagicArrow.class Binary files differnew file mode 100644 index 0000000..6cdfa03 --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/magic/MagicArrow.class diff --git a/src/main/java/jp/plusplus/fbs/magic/MagicArrow.java b/src/main/java/jp/plusplus/fbs/magic/MagicArrow.java new file mode 100644 index 0000000..dc7cb20 --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/magic/MagicArrow.java @@ -0,0 +1,33 @@ +package jp.plusplus.fbs.magic;
+
+import jp.plusplus.fbs.api.MagicBase;
+import jp.plusplus.fbs.entity.EntityMagicArrow;
+import net.minecraft.entity.Entity;
+
+/**
+ * Createdby pluslus_Fon 2015/06/08.
+ */
+public class MagicArrow extends MagicBase {
+ @Override
+ public boolean checkSuccess() {
+ if(isSpelled) return true;
+
+ float prob=0.4f+0.03f*property.getMagicLevel();
+ return rand.nextFloat()<=prob;
+ }
+
+ @Override
+ public void success() {
+ int d=getLvDiff();
+ float dm=isSpelled?2.0f:1.0f;
+ if(d>0) dm+=0.5f*(d/5);
+
+ Entity e=new EntityMagicArrow(world, player, 1.0F, 1.0F, dm);
+ world.spawnEntityInWorld(e);
+ }
+
+ @Override
+ public void failure() {
+ sanity(1, 6);
+ }
+}
diff --git a/src/main/java/jp/plusplus/fbs/magic/MagicArrowFlexible.class b/src/main/java/jp/plusplus/fbs/magic/MagicArrowFlexible.class Binary files differnew file mode 100644 index 0000000..e2ca74c --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/magic/MagicArrowFlexible.class diff --git a/src/main/java/jp/plusplus/fbs/magic/MagicArrowFlexible.java b/src/main/java/jp/plusplus/fbs/magic/MagicArrowFlexible.java new file mode 100644 index 0000000..68d243e --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/magic/MagicArrowFlexible.java @@ -0,0 +1,63 @@ +package jp.plusplus.fbs.magic;
+
+import jp.plusplus.fbs.Registry;
+import jp.plusplus.fbs.api.IMagicEnchant;
+import jp.plusplus.fbs.api.MagicBase;
+import jp.plusplus.fbs.entity.EntityMagicArrowFlexible;
+import jp.plusplus.fbs.item.ItemCore;
+import jp.plusplus.fbs.item.ItemStaff;
+import net.minecraft.entity.Entity;
+import net.minecraft.item.ItemStack;
+
+import java.util.LinkedList;
+
+/**
+ * Created by pluslus_F on 2015/06/23.
+ *
+ * 魔法の矢+付与魔法の汎用共鳴
+ */
+public class MagicArrowFlexible extends MagicBase {
+ @Override
+ public boolean checkSuccess() {
+ return true;
+ }
+
+ @Override
+ public void success() {
+ ItemStack item=player.getCurrentEquippedItem();
+ if(item==null || !(item.getItem() instanceof ItemStaff)) return;
+
+ int bookNum=((ItemStaff) item.getItem()).bookNum;
+ ItemStack[] items=ItemStaff.loadInventory(item);
+
+ //付与魔法のリストを作成する
+ LinkedList<Registry.MagicData> magics = new LinkedList<Registry.MagicData>();
+ for (int i = 0; i < bookNum; i++) {
+ if (items[i] != null && items[i].getItem() == ItemCore.bookSorcery) {
+ Registry.MagicData md=Registry.GetMagicDataFromItemStack(items[i]);
+ if(md==null) continue;
+ if(MagicArrow.class==md.magic) continue;
+
+ //付与魔法であればリストに追加
+ if(IMagicEnchant.class.isAssignableFrom(md.magic)){
+ magics.add(md);
+ }
+ }
+ }
+ if (magics.isEmpty()) return;
+
+
+ //エンティティの生成
+ int d=getLvDiff();
+ float dm=isSpelled?2.0f:1.0f;
+ if(d>0) dm+=0.5f*(d/5);
+
+ Entity e=new EntityMagicArrowFlexible(world, player, 1.0F, 1.0F, dm, magics.toArray(new Registry.MagicData[magics.size()]));
+ world.spawnEntityInWorld(e);
+ }
+
+ @Override
+ public void failure() {
+ sanity(2,4);
+ }
+}
diff --git a/src/main/java/jp/plusplus/fbs/magic/MagicBarrier.class b/src/main/java/jp/plusplus/fbs/magic/MagicBarrier.class Binary files differnew file mode 100644 index 0000000..f69ebb4 --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/magic/MagicBarrier.class diff --git a/src/main/java/jp/plusplus/fbs/magic/MagicBarrier.java b/src/main/java/jp/plusplus/fbs/magic/MagicBarrier.java new file mode 100644 index 0000000..65da382 --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/magic/MagicBarrier.java @@ -0,0 +1,100 @@ +package jp.plusplus.fbs.magic;
+
+import jp.plusplus.fbs.api.MagicBase;
+import jp.plusplus.fbs.block.BlockCore;
+import net.minecraft.block.Block;
+import net.minecraft.util.MathHelper;
+import net.minecraftforge.common.util.ForgeDirection;
+
+/**
+ * Created by plusplus_F on 2015/09/27.
+ */
+public class MagicBarrier extends MagicBase {
+ @Override
+ public boolean checkSuccess() {
+ float p=0.5f+0.05f*Math.max(getLvDiff(), 0);
+ return rand.nextFloat()<p;
+ }
+
+ @Override
+ public void success() {
+ int range=isSpelled?3:1;
+
+ //中心座標の決定
+ int px= MathHelper.floor_double(player.posX);
+ int py= MathHelper.floor_double(player.posY);
+ int pz= MathHelper.floor_double(player.posZ);
+
+ //メタ値の決定
+ int meta;
+ if(!isSpelled || usingStaff) meta=2+rand.nextInt(3);
+ else meta=5+rand.nextInt(2);
+
+ if(this.checkMagicCircle("fbs.barrier")){
+ range=1;
+ //魔法陣がある場合、全方位に壁を出す
+ for(int y=py;y<py+range+1;y++) {
+ Block b;
+ for (int x = px - range; x < px + range + 1; x++) {
+ b = world.getBlock(x, y, pz + 2);
+ if (b.isReplaceable(world, x, y, pz + 2)) world.setBlock(x, y, pz + 2, BlockCore.barrier, meta, 2);
+
+ b = world.getBlock(x, y, pz - 2);
+ if (b.isReplaceable(world, x, y, pz - 2)) world.setBlock(x, y, pz - 2, BlockCore.barrier, meta, 2);
+ }
+ for (int z = pz - range; z < pz + range + 1; z++) {
+ b = world.getBlock(px + 2, y, z);
+ if (b.isReplaceable(world, px + 2, y, z)) world.setBlock(px + 2, y, z, BlockCore.barrier, meta, 2);
+
+ b = world.getBlock(px - 2, y, z);
+ if (b.isReplaceable(world, px - 2, y, z)) world.setBlock(px - 2, y, z, BlockCore.barrier, meta, 2);
+ }
+ }
+ }
+ else{
+ //魔法陣がない場合、前方にのみ壁を出す
+ int l = MathHelper.floor_double((double) (player.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3;
+ if(l==0){
+ pz+=2;
+ for(int x=px-range;x<px+range+1;x++){
+ for(int y=py;y<py+range+1;y++){
+ Block b=world.getBlock(x,y,pz);
+ if(b.isReplaceable(world, x,y,pz)) world.setBlock(x, y, pz, BlockCore.barrier, meta, 2);
+ }
+ }
+ }
+ else if(l==1){
+ px-=2;
+ for(int z=pz-range;z<pz+range+1;z++){
+ for(int y=py;y<py+range+1;y++){
+ Block b=world.getBlock(px,y,z);
+ if(b.isReplaceable(world, px,y,z)) world.setBlock(px, y, z, BlockCore.barrier, meta, 2);
+ }
+ }
+ }
+ else if(l==2){
+ pz-=2;
+ for(int x=px-range;x<px+range+1;x++){
+ for(int y=py;y<py+range+1;y++){
+ Block b=world.getBlock(x,y,pz);
+ if(b.isReplaceable(world, x,y,pz)) world.setBlock(x, y, pz, BlockCore.barrier, meta, 2);
+ }
+ }
+ }
+ else if(l==3){
+ px+=2;
+ for(int z=pz-range;z<pz+range+1;z++){
+ for(int y=py;y<py+range+1;y++){
+ Block b=world.getBlock(px,y,z);
+ if(b.isReplaceable(world, px,y,z)) world.setBlock(px, y, z, BlockCore.barrier, meta, 2);
+ }
+ }
+ }
+ }
+ }
+
+ @Override
+ public void failure() {
+ sanity(2, 4);
+ }
+}
diff --git a/src/main/java/jp/plusplus/fbs/magic/MagicContract.class b/src/main/java/jp/plusplus/fbs/magic/MagicContract.class Binary files differnew file mode 100644 index 0000000..44b2afd --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/magic/MagicContract.class diff --git a/src/main/java/jp/plusplus/fbs/magic/MagicContract.java b/src/main/java/jp/plusplus/fbs/magic/MagicContract.java new file mode 100644 index 0000000..0e651d7 --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/magic/MagicContract.java @@ -0,0 +1,29 @@ +package jp.plusplus.fbs.magic;
+
+import jp.plusplus.fbs.api.MagicBase;
+
+/**
+ * Created by pluslus_F on 2015/11/14.
+ */
+public class MagicContract extends MagicBase {
+ @Override
+ public boolean checkSuccess() {
+ float prob=0.2f;
+ int l=getLvDiff();
+ if(l>0) prob+=0.05*prob;
+ return rand.nextFloat()<prob;
+ }
+ @Override
+ public void success() {
+
+ }
+ @Override
+ public void failure() {
+
+ }
+
+ public String getMagicCircleName(){
+ return "fbs.contract";
+ //return "null";
+ }
+}
diff --git a/src/main/java/jp/plusplus/fbs/magic/MagicCopy.class b/src/main/java/jp/plusplus/fbs/magic/MagicCopy.class Binary files differnew file mode 100644 index 0000000..982da9c --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/magic/MagicCopy.class diff --git a/src/main/java/jp/plusplus/fbs/magic/MagicCopy.java b/src/main/java/jp/plusplus/fbs/magic/MagicCopy.java new file mode 100644 index 0000000..f7608c8 --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/magic/MagicCopy.java @@ -0,0 +1,28 @@ +package jp.plusplus.fbs.magic;
+
+import jp.plusplus.fbs.api.MagicBase;
+
+/**
+ * Created by pluslus_F on 2015/06/18.
+ */
+public class MagicCopy extends MagicBase {
+ @Override
+ public boolean checkSuccess() {
+ float prob=0.2f;
+ int l=getLvDiff();
+ if(l>0) prob+=0.05*prob;
+ return rand.nextFloat()<prob;
+ }
+ @Override
+ public void success() {
+
+ }
+ @Override
+ public void failure() {
+
+ }
+
+ public String getMagicCircleName(){
+ return "fbs.copy";
+ }
+}
diff --git a/src/main/java/jp/plusplus/fbs/magic/MagicDig.class b/src/main/java/jp/plusplus/fbs/magic/MagicDig.class Binary files differnew file mode 100644 index 0000000..7427b05 --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/magic/MagicDig.class diff --git a/src/main/java/jp/plusplus/fbs/magic/MagicDig.java b/src/main/java/jp/plusplus/fbs/magic/MagicDig.java new file mode 100644 index 0000000..3fabefd --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/magic/MagicDig.java @@ -0,0 +1,30 @@ +package jp.plusplus.fbs.magic;
+
+import jp.plusplus.fbs.api.MagicBase;
+import jp.plusplus.fbs.entity.EntityMagicDig;
+
+/**
+ * Createdby pluslus_Fon 2015/06/07.
+ */
+public class MagicDig extends MagicBase {
+ @Override
+ public boolean checkSuccess() {
+ if(isSpelled) return true;
+
+ float prob=0.4f+0.03f*property.getMagicLevel();
+ return rand.nextFloat()<=prob;
+ }
+
+ @Override
+ public void success() {
+ boolean penetrate=(isSpelled && property.getMagicLevel()>=20);
+ int till=getLvDiff();
+ EntityMagicDig e=new EntityMagicDig(world, player, 0.6F, 1.0F, till, penetrate);
+ world.spawnEntityInWorld(e);
+ }
+
+ @Override
+ public void failure() {
+ sanity(1, 6);
+ }
+}
diff --git a/src/main/java/jp/plusplus/fbs/magic/MagicDigTouch.class b/src/main/java/jp/plusplus/fbs/magic/MagicDigTouch.class Binary files differnew file mode 100644 index 0000000..f486207 --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/magic/MagicDigTouch.class diff --git a/src/main/java/jp/plusplus/fbs/magic/MagicDigTouch.java b/src/main/java/jp/plusplus/fbs/magic/MagicDigTouch.java new file mode 100644 index 0000000..ee44459 --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/magic/MagicDigTouch.java @@ -0,0 +1,39 @@ +package jp.plusplus.fbs.magic;
+
+import jp.plusplus.fbs.api.MagicBase;
+import net.minecraft.block.Block;
+import net.minecraft.util.Vec3;
+
+/**
+ * Created by pluslus_F on 2015/06/19.
+ */
+public class MagicDigTouch extends MagicBase {
+ @Override
+ public boolean checkSuccess() {
+ if(isSpelled) return true;
+ float prob=0.4f;
+ int l=getLvDiff();
+ if(l>0) prob+=0.05*l;
+ return rand.nextFloat()<=prob;
+ }
+
+ @Override
+ public void success() {
+ int l=getLvDiff();
+ Vec3 pos=getTouchPosition();
+ if(pos==null) return;
+
+ float hardness=30+1.0f+(l>0?0.5f*l:0);
+
+ Block b=world.getBlock((int)pos.xCoord, (int)pos.yCoord,(int)pos.zCoord);
+ float bh=b.getBlockHardness(world, (int)pos.xCoord, (int)pos.yCoord,(int)pos.zCoord);
+ if(bh!=-1 && bh<hardness){
+ world.func_147480_a((int)pos.xCoord, (int)pos.yCoord,(int)pos.zCoord, true);
+ }
+ }
+
+ @Override
+ public void failure() {
+ sanity(1, 4);
+ }
+}
diff --git a/src/main/java/jp/plusplus/fbs/magic/MagicFailure.class b/src/main/java/jp/plusplus/fbs/magic/MagicFailure.class Binary files differnew file mode 100644 index 0000000..409ec11 --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/magic/MagicFailure.class diff --git a/src/main/java/jp/plusplus/fbs/magic/MagicFailure.java b/src/main/java/jp/plusplus/fbs/magic/MagicFailure.java new file mode 100644 index 0000000..03706fc --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/magic/MagicFailure.java @@ -0,0 +1,23 @@ +package jp.plusplus.fbs.magic;
+
+import jp.plusplus.fbs.api.MagicBase;
+
+/**
+ * Createdby pluslus_Fon 2015/06/08.
+ */
+public class MagicFailure extends MagicBase {
+ @Override
+ public boolean checkSuccess() {
+ return true;
+ }
+
+ @Override
+ public void success() {
+ //player.addChatComponentMessage(new ChatComponentTranslation("info.fbs.magic.resona.failure"));
+ }
+
+ @Override
+ public void failure() {
+ //player.addChatComponentMessage(new ChatComponentTranslation("info.fbs.magic.resona.failure"));
+ }
+}
diff --git a/src/main/java/jp/plusplus/fbs/magic/MagicFireBolt.class b/src/main/java/jp/plusplus/fbs/magic/MagicFireBolt.class Binary files differnew file mode 100644 index 0000000..5cf4007 --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/magic/MagicFireBolt.class diff --git a/src/main/java/jp/plusplus/fbs/magic/MagicFireBolt.java b/src/main/java/jp/plusplus/fbs/magic/MagicFireBolt.java new file mode 100644 index 0000000..f18c438 --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/magic/MagicFireBolt.java @@ -0,0 +1,59 @@ +package jp.plusplus.fbs.magic;
+
+import jp.plusplus.fbs.api.IMagicEnchant;
+import jp.plusplus.fbs.api.MagicBase;
+import jp.plusplus.fbs.entity.EntityMagicFireBolt;
+import net.minecraft.entity.Entity;
+import net.minecraft.entity.EntityLivingBase;
+
+/**
+ * Createdby pluslus_Fon 2015/06/14.
+ */
+public class MagicFireBolt extends MagicBase implements IMagicEnchant {
+ @Override
+ public boolean checkSuccess() {
+ if(isSpelled) return true;
+
+ float prob=0.4f+0.03f*property.getMagicLevel();
+ return rand.nextFloat()<=prob;
+ }
+
+ @Override
+ public void success() {
+ int d=getLvDiff();
+ float dm=isSpelled?1.5f:0.5f;
+ if(d>0) dm+=0.5f*(d/5);
+
+ Entity e=new EntityMagicFireBolt(world, player, 1.0F, 1.0F, dm);
+ world.spawnEntityInWorld(e);
+ }
+
+ @Override
+ public void failure() {
+ sanity(2, 4);
+ }
+
+ @Override
+ public void enchant(EntityLivingBase entity, boolean success) {
+ if(success) entity.setFire(10);
+ }
+
+ @Override
+ public float damageScale(EntityLivingBase entity) {
+ return 1.2f;
+ }
+
+ @Override
+ public float damageValue(EntityLivingBase entity) {
+ return 0.f;
+ }
+
+ @Override
+ public ParticleColor setParticleColor(){
+ ParticleColor col=new ParticleColor();
+ float v=0.5f+0.5f*rand.nextFloat();
+ col.blue-=v;
+ col.green-=v;
+ return col;
+ }
+}
diff --git a/src/main/java/jp/plusplus/fbs/magic/MagicHarvest.class b/src/main/java/jp/plusplus/fbs/magic/MagicHarvest.class Binary files differnew file mode 100644 index 0000000..e5d7eef --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/magic/MagicHarvest.class diff --git a/src/main/java/jp/plusplus/fbs/magic/MagicHarvest.java b/src/main/java/jp/plusplus/fbs/magic/MagicHarvest.java new file mode 100644 index 0000000..1998aa8 --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/magic/MagicHarvest.java @@ -0,0 +1,92 @@ +package jp.plusplus.fbs.magic;
+
+import jp.plusplus.fbs.Registry;
+import jp.plusplus.fbs.api.MagicBase;
+import net.minecraft.enchantment.EnchantmentHelper;
+import net.minecraft.entity.item.EntityItem;
+import net.minecraft.item.ItemStack;
+import net.minecraft.util.ChatComponentText;
+import net.minecraft.util.MathHelper;
+
+import java.util.ArrayList;
+
+/**
+ * Created by plusplus_F on 2015/09/27.
+ */
+public class MagicHarvest extends MagicBase {
+ @Override
+ public boolean checkSuccess() {
+ if(!isSpelled || usingStaff) return false;
+ float r=0.15f+0.03f*Math.max(getLvDiff(), 0);
+ return rand.nextFloat()<r;
+ }
+
+ @Override
+ public void success() {
+ int ld=Math.max(getLvDiff(), 0);
+ int h=getHeight();
+
+ //抽選
+ ArrayList<Registry.ChestContent> list=Registry.GetChestContents(1);
+ int valueSum=0;
+ for(Registry.ChestContent cc : list) valueSum+=cc.weight;
+
+ //アイテムスタックのスタックサイズと数
+ int min=1+ld/2;
+ int max=3+ld;
+ int amount=6+ld/2+rand.nextInt(ld+5);
+
+ for(int i=0;i<amount;i++){
+ int r=rand.nextInt(valueSum);
+ int sum=0;
+ for(Registry.ChestContent cc : list){
+ if(r<cc.weight+sum){
+ double x=player.posX+2*(rand.nextDouble()-rand.nextDouble());
+ double z=player.posZ+2*(rand.nextDouble()-rand.nextDouble());
+
+ ItemStack item=cc.get();
+ item.stackSize=min+rand.nextInt(max-min+1);
+ if(item.stackSize>item.getMaxStackSize()) item.stackSize=item.getMaxStackSize();
+
+ if(item.isItemEnchantable() && rand.nextInt(3)==0){
+ EnchantmentHelper.addRandomEnchantment(rand, item, 3*ld+rand.nextInt(10));
+ }
+
+ EntityItem e=new EntityItem(world, x,h-1.5*rand.nextDouble(),z, item);
+ world.spawnEntityInWorld(e);
+
+ break;
+ }
+ sum+=cc.weight;
+ }
+ }
+ }
+
+ @Override
+ public void failure() {
+
+ }
+
+ @Override
+ public String getMagicCircleName(){
+ return "fbs.harvest";
+ }
+
+ public int getHeight(){
+ int x= MathHelper.floor_double(player.posX);
+ int y= MathHelper.floor_double(player.posY+player.getEyeHeight());
+ int z= MathHelper.floor_double(player.posZ);
+
+ if(world.getHeightValue(x,z)<y){
+ return y+32;
+ }
+ else{
+ int sy=y;
+ while(y-sy<34 && world.isAirBlock(x,y,z)){
+ y++;
+ }
+ y--;
+ return y;
+ }
+ }
+}
diff --git a/src/main/java/jp/plusplus/fbs/magic/MagicHealingBall.class b/src/main/java/jp/plusplus/fbs/magic/MagicHealingBall.class Binary files differnew file mode 100644 index 0000000..2355df9 --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/magic/MagicHealingBall.class diff --git a/src/main/java/jp/plusplus/fbs/magic/MagicHealingBall.java b/src/main/java/jp/plusplus/fbs/magic/MagicHealingBall.java new file mode 100644 index 0000000..e011cf7 --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/magic/MagicHealingBall.java @@ -0,0 +1,30 @@ +package jp.plusplus.fbs.magic;
+
+import jp.plusplus.fbs.api.MagicBase;
+import jp.plusplus.fbs.entity.EntityMagicHealingBall;
+import net.minecraft.entity.Entity;
+
+/**
+ * Createdby pluslus_Fon 2015/06/14.
+ */
+public class MagicHealingBall extends MagicBase {
+ @Override
+ public boolean checkSuccess() {
+ if(isSpelled) return true;
+
+ float prob=0.4f+0.02f*getLvDiff();
+ return rand.nextFloat()<=prob;
+ }
+
+ @Override
+ public void success() {
+ int a = 5+getLvDiff()/4;
+ Entity e=new EntityMagicHealingBall(world, player, a);
+ world.spawnEntityInWorld(e);
+ }
+
+ @Override
+ public void failure() {
+ sanity(2, 6);
+ }
+}
diff --git a/src/main/java/jp/plusplus/fbs/magic/MagicHealingSelf.class b/src/main/java/jp/plusplus/fbs/magic/MagicHealingSelf.class Binary files differnew file mode 100644 index 0000000..da570b4 --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/magic/MagicHealingSelf.class diff --git a/src/main/java/jp/plusplus/fbs/magic/MagicHealingSelf.java b/src/main/java/jp/plusplus/fbs/magic/MagicHealingSelf.java new file mode 100644 index 0000000..153bbc8 --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/magic/MagicHealingSelf.java @@ -0,0 +1,37 @@ +package jp.plusplus.fbs.magic;
+
+import jp.plusplus.fbs.api.MagicEnchantBase;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.potion.Potion;
+import net.minecraft.potion.PotionEffect;
+
+/**
+ * Createdby pluslus_Fon 2015/06/16.
+ */
+public class MagicHealingSelf extends MagicEnchantBase {
+ public MagicHealingSelf() {
+ super(4, 6);
+ }
+
+ @Override
+ public boolean checkSuccess() {
+ int d=getLvDiff();
+ float prob=isSpelled?0.35f:0.1f;
+ if(d>0) prob+=0.05f*d;
+ return rand.nextFloat()<=prob;
+ }
+
+ @Override
+ public void enchant(EntityLivingBase entity, boolean success) {
+ int d = getDuration(8, 2);
+ int a = getAmplifier(8);
+ if(success){
+ entity.addPotionEffect(new PotionEffect(Potion.regeneration.getId(), d, a));
+ entity.addPotionEffect(new PotionEffect(Potion.heal.getId(), 1, a));
+ }
+ else{
+ entity.addPotionEffect(new PotionEffect(Potion.wither.getId(), d, a));
+ entity.addPotionEffect(new PotionEffect(Potion.harm.getId(), 1, a));
+ }
+ }
+}
diff --git a/src/main/java/jp/plusplus/fbs/magic/MagicLoveHurricane.class b/src/main/java/jp/plusplus/fbs/magic/MagicLoveHurricane.class Binary files differnew file mode 100644 index 0000000..bf7e683 --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/magic/MagicLoveHurricane.class diff --git a/src/main/java/jp/plusplus/fbs/magic/MagicLoveHurricane.java b/src/main/java/jp/plusplus/fbs/magic/MagicLoveHurricane.java new file mode 100644 index 0000000..f6a43ce --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/magic/MagicLoveHurricane.java @@ -0,0 +1,54 @@ +package jp.plusplus.fbs.magic;
+
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.entity.projectile.EntityArrow;
+import net.minecraft.item.ItemSword;
+import net.minecraft.util.DamageSource;
+import net.minecraft.util.Vec3;
+
+import java.util.List;
+
+/**
+ * Created by plusplus_F on 2015/10/01.
+ * ピンチなら
+ * 扇いでみよう
+ * 大団扇
+ */
+public class MagicLoveHurricane extends MagicVortex {
+ @Override
+ public boolean checkSuccess() {
+ return true;
+ }
+
+ @Override
+ public void success() {
+ //効果範囲
+ int size = isSpelled ? 2 : 1;
+ size += Math.max(getLvDiff(), 0) / 5;
+
+ //ダメージ
+ float d = 8.0f + 0.5f * (Math.max(getLvDiff(), 0) / 3);
+
+ //吹き飛ばし強さ
+ float knockback = 1.f + 0.08f * Math.max(getLvDiff(), 0);
+
+ //効果範囲内の全てのEntityLivingBaseへ
+ List list = getEntities(size);
+ if (!list.isEmpty()) {
+ for (int i = 0; i < list.size(); i++) {
+ EntityLivingBase e = (EntityLivingBase) list.get(i);
+ if(e.getUniqueID()==player.getUniqueID()) continue;
+
+ e.attackEntityFrom(DamageSource.causeIndirectMagicDamage(player, e), d);
+
+ //方向の決定
+ Vec3 vec = player.getPosition(1.f).subtract(e.getPosition(1.f));
+ vec.yCoord = 0;
+ vec = vec.normalize();
+
+ //飛ばす
+ e.addVelocity(knockback * vec.xCoord, 0, knockback * vec.zCoord);
+ }
+ }
+ }
+}
diff --git a/src/main/java/jp/plusplus/fbs/magic/MagicReturn.class b/src/main/java/jp/plusplus/fbs/magic/MagicReturn.class Binary files differnew file mode 100644 index 0000000..14fcc13 --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/magic/MagicReturn.class diff --git a/src/main/java/jp/plusplus/fbs/magic/MagicReturn.java b/src/main/java/jp/plusplus/fbs/magic/MagicReturn.java new file mode 100644 index 0000000..633b6d1 --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/magic/MagicReturn.java @@ -0,0 +1,53 @@ +package jp.plusplus.fbs.magic;
+
+import jp.plusplus.fbs.api.MagicBase;
+import net.minecraft.block.Block;
+import net.minecraft.block.material.Material;
+import net.minecraft.init.Blocks;
+import net.minecraft.util.ChatComponentText;
+import net.minecraft.util.ChunkCoordinates;
+import net.minecraft.util.StatCollector;
+
+/**
+ * Createdby pluslus_Fon 2015/06/14.
+ */
+public class MagicReturn extends MagicBase {
+ @Override
+ public boolean checkSuccess() {
+ if(!isSpelled) return false;
+
+ float prob=0.4f+0.02f*property.getMagicLevel();
+ return rand.nextFloat()<=prob;
+ }
+
+ @Override
+ public void success() {
+ //EntityClientPlayerMP
+ //player.respawnPlayer();
+ ChunkCoordinates pos=player.getBedLocation(0);
+ if(pos==null){
+ pos=world.getSpawnPoint();
+ pos.posY=world.getChunkFromBlockCoords(pos.posX, pos.posZ).getHeightValue(pos.posX%16, pos.posZ%16);
+ }
+ else{
+ Block b0=world.getBlock(pos.posX+1, pos.posY, pos.posZ);
+ Block b1=world.getBlock(pos.posX, pos.posY, pos.posZ+1);
+ Block b2=world.getBlock(pos.posX-1, pos.posY, pos.posZ);
+ Block b3=world.getBlock(pos.posX, pos.posY, pos.posZ-1);
+
+ Block b4=world.getBlock(pos.posX, pos.posY+1, pos.posZ);
+
+ if((b0!=Blocks.bed && b1!=Blocks.bed && b2!=Blocks.bed && b3!=Blocks.bed) || b4.getMaterial()!=Material.air){
+ pos=world.getSpawnPoint();
+ pos.posY=world.getChunkFromBlockCoords(pos.posX, pos.posZ).getHeightValue(pos.posX%16, pos.posZ%16);
+ player.addChatComponentMessage(new ChatComponentText(StatCollector.translateToLocal("tile.bed.notValid")));
+ }
+ }
+ player.setPositionAndUpdate(pos.posX, pos.posY+0.2, pos.posZ);
+ }
+
+ @Override
+ public void failure() {
+ sanity(2, 6);
+ }
+}
diff --git a/src/main/java/jp/plusplus/fbs/magic/MagicSummonVillager.class b/src/main/java/jp/plusplus/fbs/magic/MagicSummonVillager.class Binary files differnew file mode 100644 index 0000000..2e82f6b --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/magic/MagicSummonVillager.class diff --git a/src/main/java/jp/plusplus/fbs/magic/MagicSummonVillager.java b/src/main/java/jp/plusplus/fbs/magic/MagicSummonVillager.java new file mode 100644 index 0000000..93dd08f --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/magic/MagicSummonVillager.java @@ -0,0 +1,66 @@ +package jp.plusplus.fbs.magic;
+
+import cpw.mods.fml.common.registry.VillagerRegistry;
+import jp.plusplus.fbs.api.MagicBase;
+import jp.plusplus.fbs.block.BlockCore;
+import jp.plusplus.fbs.entity.EntityMagicAuthor;
+import net.minecraft.block.Block;
+import net.minecraft.entity.passive.EntityVillager;
+import net.minecraft.util.MathHelper;
+
+/**
+ * Created by plusplus_F on 2015/09/27.
+ */
+public class MagicSummonVillager extends MagicBase {
+ public static final int BOOKSHELF=24;
+
+ @Override
+ public boolean checkSuccess() {
+ return false;
+ }
+
+ @Override
+ public String getMagicCircleName(){
+ return "fbs.summonVillager";
+ }
+
+ @Override
+ public void success() {
+ sanity(2,6);
+
+ //魔法陣の周囲の本棚を数える
+ int x= MathHelper.floor_double(player.posX);
+ int y= MathHelper.floor_double(player.posY);
+ int z= MathHelper.floor_double(player.posZ);
+ int count=0;
+ for(int k=0;k<2;k++){
+ for(int i=0;i<5;i++){
+ if(world.getBlock(x-2+i, y+k, z-2)==BlockCore.bookshelf) count++;
+ if(world.getBlock(x-2+i, y+k, z+2)==BlockCore.bookshelf) count++;
+ }
+ for(int i=0;i<3;i++){
+ if(world.getBlock(x-2, y+k, z-1+i)==BlockCore.bookshelf) count++;
+ if(world.getBlock(x+2, y+k, z-1+i)==BlockCore.bookshelf) count++;
+ }
+ }
+
+ //本棚が一定数以上あれば作家を湧かせる
+ if(count>=BOOKSHELF){
+ EntityMagicAuthor e=new EntityMagicAuthor(world);
+ e.setPosition(player.posX+2*rand.nextFloat(), player.posY, player.posZ+2*rand.nextFloat());
+ world.spawnEntityInWorld(e);
+ }
+ else{
+ //通常の処理
+ EntityVillager e=new EntityVillager(world, rand.nextInt(5+VillagerRegistry.getRegisteredVillagers().size()));
+ e.setPosition(player.posX+2*rand.nextFloat(), player.posY, player.posZ+2*rand.nextFloat());
+ world.spawnEntityInWorld(e);
+ }
+
+ }
+
+ @Override
+ public void failure() {
+ sanity(3, 8);
+ }
+}
diff --git a/src/main/java/jp/plusplus/fbs/magic/MagicTimeAcc.class b/src/main/java/jp/plusplus/fbs/magic/MagicTimeAcc.class Binary files differnew file mode 100644 index 0000000..d28fffa --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/magic/MagicTimeAcc.class diff --git a/src/main/java/jp/plusplus/fbs/magic/MagicTimeAcc.java b/src/main/java/jp/plusplus/fbs/magic/MagicTimeAcc.java new file mode 100644 index 0000000..4151280 --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/magic/MagicTimeAcc.java @@ -0,0 +1,49 @@ +package jp.plusplus.fbs.magic;
+
+import jp.plusplus.fbs.api.MagicBase;
+import net.minecraft.block.Block;
+import net.minecraft.block.IGrowable;
+
+/**
+ * Createdby pluslus_Fon 2015/06/14.
+ */
+public class MagicTimeAcc extends MagicBase {
+ @Override
+ public boolean checkSuccess() {
+ float prob=0.5f+0.025f*(property.getMagicLevel()-bookData.lv);
+ return rand.nextFloat()<=prob;
+ }
+
+ @Override
+ public void success() {
+ int range=isSpelled?2:1;
+ int l=getLvDiff();
+ if(l>0) range+=l/4;
+
+ int cx=(int)player.posX, cy=(int)player.posY, cz=(int)player.posZ;
+ for(int i=cx-range;i<cx+range;i++){
+ for(int k=cz-range;k<cz+range;k++){
+ for(int n=cy;n<cy+1;n++){
+ Block b=world.getBlock(i,n,k);
+ if(b instanceof IGrowable){
+ IGrowable g=(IGrowable)b;
+
+ if (g.func_149851_a(world, i, n, k, world.isRemote)){
+ if (g.func_149852_a(world, rand, i, n, k)){
+ ((IGrowable) b).func_149853_b(world, rand, i, n, k);
+ world.playAuxSFX(2005, i, n, k, 0);
+ }
+ }
+ }
+ }
+ }
+ }
+
+ sanity(1,10);
+ }
+
+ @Override
+ public void failure() {
+ sanity(1,10);
+ }
+}
diff --git a/src/main/java/jp/plusplus/fbs/magic/MagicTimeTrace.class b/src/main/java/jp/plusplus/fbs/magic/MagicTimeTrace.class Binary files differnew file mode 100644 index 0000000..dd3685e --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/magic/MagicTimeTrace.class diff --git a/src/main/java/jp/plusplus/fbs/magic/MagicTimeTrace.java b/src/main/java/jp/plusplus/fbs/magic/MagicTimeTrace.java new file mode 100644 index 0000000..e8c6b38 --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/magic/MagicTimeTrace.java @@ -0,0 +1,49 @@ +package jp.plusplus.fbs.magic;
+
+import jp.plusplus.fbs.api.MagicBase;
+import net.minecraft.block.Block;
+import net.minecraft.block.BlockCrops;
+import net.minecraft.block.BlockSapling;
+import net.minecraft.init.Blocks;
+
+/**
+ * Createdby pluslus_Fon 2015/06/14.
+ */
+public class MagicTimeTrace extends MagicBase {
+ @Override
+ public boolean checkSuccess() {
+ float prob=0.5f+0.025f*(property.getMagicLevel()-bookData.lv);
+ return rand.nextFloat()<=prob;
+ }
+
+ @Override
+ public void success() {
+ int range=isSpelled?2:1;
+ int l=getLvDiff();
+ if(l>0) range+=l/4;
+
+ int cx=(int)player.posX, cy=(int)player.posY, cz=(int)player.posZ;
+ for(int i=cx-range;i<cx+range;i++){
+ for(int k=cz-range;k<cz+range;k++){
+ for(int n=cy;n<cy+1;n++){
+ Block b=world.getBlock(i,n,k);
+
+ if(b==Blocks.tallgrass || b==Blocks.double_plant || b==Blocks.deadbush || b==Blocks.red_flower || b==Blocks.yellow_flower){
+ world.func_147480_a(i, n, k, true);
+ }
+ else if(b instanceof BlockCrops || b instanceof BlockSapling){
+ world.setBlockMetadataWithNotify(i,n,k,0,2);
+ world.playAuxSFX(2005, i, n, k, 0);
+ }
+ }
+ }
+ }
+
+ sanity(1,10);
+ }
+
+ @Override
+ public void failure() {
+ sanity(1,10);
+ }
+}
diff --git a/src/main/java/jp/plusplus/fbs/magic/MagicTouch.class b/src/main/java/jp/plusplus/fbs/magic/MagicTouch.class Binary files differnew file mode 100644 index 0000000..4baf605 --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/magic/MagicTouch.class diff --git a/src/main/java/jp/plusplus/fbs/magic/MagicTouch.java b/src/main/java/jp/plusplus/fbs/magic/MagicTouch.java new file mode 100644 index 0000000..b797715 --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/magic/MagicTouch.java @@ -0,0 +1,33 @@ +package jp.plusplus.fbs.magic;
+
+import jp.plusplus.fbs.api.MagicBase;
+import net.minecraft.entity.Entity;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.util.DamageSource;
+
+/**
+ * Created by pluslus_F on 2015/06/23.
+ */
+public class MagicTouch extends MagicBase {
+ @Override
+ public boolean checkSuccess() {
+ return true;
+ }
+
+ @Override
+ public void success() {
+ Entity e=getTouchEntity();
+ if(e!=null && e instanceof EntityLivingBase){
+ float d=3.0f;
+ int lv=getLvDiff();
+ if(lv>0) d+=0.5*(lv/5);
+ if(!isSpelled) d/=2.0f;
+ e.attackEntityFrom(DamageSource.causeIndirectMagicDamage(player, (EntityLivingBase)e), d);
+ }
+ }
+
+ @Override
+ public void failure() {
+ sanity(1,4);
+ }
+}
diff --git a/src/main/java/jp/plusplus/fbs/magic/MagicTouchFlexible.class b/src/main/java/jp/plusplus/fbs/magic/MagicTouchFlexible.class Binary files differnew file mode 100644 index 0000000..8b966b8 --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/magic/MagicTouchFlexible.class diff --git a/src/main/java/jp/plusplus/fbs/magic/MagicTouchFlexible.java b/src/main/java/jp/plusplus/fbs/magic/MagicTouchFlexible.java new file mode 100644 index 0000000..f665449 --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/magic/MagicTouchFlexible.java @@ -0,0 +1,83 @@ +package jp.plusplus.fbs.magic;
+
+import jp.plusplus.fbs.Registry;
+import jp.plusplus.fbs.api.IMagicEnchant;
+import jp.plusplus.fbs.api.MagicBase;
+import jp.plusplus.fbs.item.ItemCore;
+import jp.plusplus.fbs.item.ItemStaff;
+import net.minecraft.entity.Entity;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.item.ItemStack;
+import net.minecraft.util.DamageSource;
+
+import java.util.LinkedList;
+
+/**
+ * Created by pluslus_F on 2015/06/23.
+ * 魔法の拳+付与魔法の汎用共鳴
+ */
+public class MagicTouchFlexible extends MagicBase {
+ @Override
+ public boolean checkSuccess() {
+ return true;
+ }
+
+ @Override
+ public void success() {
+ ItemStack item=player.getCurrentEquippedItem();
+ if(item==null || !(item.getItem() instanceof ItemStaff)) return;
+
+ int bookNum=((ItemStaff) item.getItem()).bookNum;
+ ItemStack[] items=ItemStaff.loadInventory(item);
+
+ //付与魔法のリストを作成する
+ LinkedList<Registry.MagicData> magics = new LinkedList<Registry.MagicData>();
+ for (int i = 0; i < bookNum; i++) {
+ if (items[i] != null && items[i].getItem() == ItemCore.bookSorcery) {
+ Registry.MagicData md=Registry.GetMagicDataFromItemStack(items[i]);
+ if(md==null) continue;
+ if(MagicArrow.class==md.magic) continue;
+
+ //付与魔法であればリストに追加
+ if(IMagicEnchant.class.isAssignableFrom(md.magic)){
+ magics.add(md);
+ }
+ }
+ }
+ if (magics.isEmpty()) return;
+
+ Entity e=getTouchEntity();
+ if(e instanceof EntityLivingBase){
+ float d=3.0f;
+ int lv=getLvDiff();
+ if(lv>0) d+=0.5*(lv/5);
+ if(!isSpelled) d/=2.0f;
+
+ float dValue=0.f;
+ float dScale=1.f;
+
+ //IMagicEnchantのインスタンス化
+ //スタッフによる使用なので常に詠唱破棄状態
+ IMagicEnchant[] me=new IMagicEnchant[magics.size()];
+ for(int i=0;i<me.length;i++){
+ me[i]=(IMagicEnchant)magics.get(i).getMagic(world, player, false);
+ dValue+=me[i].damageValue((EntityLivingBase)e);
+ dScale*=me[i].damageScale((EntityLivingBase)e);
+ }
+
+ //ダメージ
+ e.attackEntityFrom(DamageSource.causeIndirectMagicDamage(player, (EntityLivingBase) e), (d+dValue)*dScale);
+
+ //タッチしたEntityへの付与
+ for(int i=0;i<me.length;i++){
+ me[i].enchant((EntityLivingBase)e, true);
+ }
+ }
+ }
+
+ @Override
+ public void failure() {
+ sanity(2,4);
+ }
+}
diff --git a/src/main/java/jp/plusplus/fbs/magic/MagicVortex.class b/src/main/java/jp/plusplus/fbs/magic/MagicVortex.class Binary files differnew file mode 100644 index 0000000..da16ea7 --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/magic/MagicVortex.class diff --git a/src/main/java/jp/plusplus/fbs/magic/MagicVortex.java b/src/main/java/jp/plusplus/fbs/magic/MagicVortex.java new file mode 100644 index 0000000..658d573 --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/magic/MagicVortex.java @@ -0,0 +1,65 @@ +package jp.plusplus.fbs.magic;
+
+import jp.plusplus.fbs.api.MagicBase;
+import jp.plusplus.fbs.packet.MessageMagicFlexible;
+import jp.plusplus.fbs.packet.MessageMagicVortex;
+import jp.plusplus.fbs.packet.PacketHandler;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.util.AxisAlignedBB;
+import net.minecraft.util.DamageSource;
+import net.minecraft.util.MathHelper;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Created by plusplus_F on 2015/10/01.
+ */
+public class MagicVortex extends MagicBase {
+ @Override
+ public boolean checkSuccess() {
+ float p=0.35f+0.05f*Math.max(getLvDiff(), 0);
+ if(isSpelled) p+=0.35f;
+ return rand.nextFloat()<p;
+ }
+
+ @Override
+ public void success() {
+ //効果範囲
+ int size=isSpelled?2:1;
+ size+=Math.max(getLvDiff(), 0)/5;
+
+ //ダメージ
+ float d=3.0f+0.5f*(Math.max(getLvDiff(), 0)/3);
+ if(!isSpelled) d/=2.f;
+
+ //効果範囲内の全てのEntityLivingBaseへ
+ List list=getEntities(size);
+ if(!list.isEmpty()){
+ for(int i=0;i<list.size();i++){
+ EntityLivingBase e=(EntityLivingBase)list.get(i);
+ if(e.getUniqueID()==player.getUniqueID()) continue;
+
+ e.attackEntityFrom(DamageSource.causeIndirectMagicDamage(player, e), d);
+ }
+ }
+
+ //エフェクト
+ PacketHandler.INSTANCE.sendToDimension(new MessageMagicVortex(player, size, new NBTTagCompound()), world.provider.dimensionId);
+ }
+
+ @Override
+ public void failure() {
+ sanity(2, 4);
+ }
+
+ public List getEntities(int size){
+ int px= MathHelper.floor_double(player.posX);
+ int py= MathHelper.floor_double(player.posY);
+ int pz= MathHelper.floor_double(player.posZ);
+
+ AxisAlignedBB aabb=AxisAlignedBB.getBoundingBox(px,py,pz, px+1, py+2, pz+1).expand(size, size, size);
+ return world.getEntitiesWithinAABB(EntityLivingBase.class, aabb);
+ }
+}
diff --git a/src/main/java/jp/plusplus/fbs/magic/MagicVortexFlexible.class b/src/main/java/jp/plusplus/fbs/magic/MagicVortexFlexible.class Binary files differnew file mode 100644 index 0000000..797d8d6 --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/magic/MagicVortexFlexible.class diff --git a/src/main/java/jp/plusplus/fbs/magic/MagicVortexFlexible.java b/src/main/java/jp/plusplus/fbs/magic/MagicVortexFlexible.java new file mode 100644 index 0000000..54648ea --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/magic/MagicVortexFlexible.java @@ -0,0 +1,103 @@ +package jp.plusplus.fbs.magic;
+
+import jp.plusplus.fbs.Registry;
+import jp.plusplus.fbs.api.IMagicEnchant;
+import jp.plusplus.fbs.api.MagicBase;
+import jp.plusplus.fbs.item.ItemCore;
+import jp.plusplus.fbs.item.ItemStaff;
+import jp.plusplus.fbs.packet.MessageMagicVortex;
+import jp.plusplus.fbs.packet.PacketHandler;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.nbt.NBTTagList;
+import net.minecraft.util.AxisAlignedBB;
+import net.minecraft.util.DamageSource;
+import net.minecraft.util.MathHelper;
+
+import java.util.LinkedList;
+import java.util.List;
+
+/**
+ * Created by plusplus_F on 2015/10/01.
+ */
+public class MagicVortexFlexible extends MagicVortex {
+ @Override
+ public boolean checkSuccess() {
+ return true;
+ }
+
+ @Override
+ public void success() {
+ ItemStack item=player.getCurrentEquippedItem();
+ if(item==null || !(item.getItem() instanceof ItemStaff)) return;
+
+ int bookNum=((ItemStaff) item.getItem()).bookNum;
+ ItemStack[] items=ItemStaff.loadInventory(item);
+
+ //付与魔法のリストを作成する
+ NBTTagList tagList=new NBTTagList();
+ LinkedList<Registry.MagicData> magics = new LinkedList<Registry.MagicData>();
+ for (int i = 0; i < bookNum; i++) {
+ if (items[i] != null && items[i].getItem() == ItemCore.bookSorcery) {
+ Registry.MagicData md=Registry.GetMagicDataFromItemStack(items[i]);
+ if(md==null) continue;
+ if(MagicArrow.class==md.magic) continue;
+
+ //付与魔法であればリストに追加
+ if(IMagicEnchant.class.isAssignableFrom(md.magic)){
+ magics.add(md);
+
+ NBTTagCompound nbt1 = new NBTTagCompound();
+ nbt1.setString("MagicName", md.title);
+ tagList.appendTag(nbt1);
+ }
+ }
+ }
+ if (magics.isEmpty()) return;
+
+ //効果範囲
+ int size=isSpelled?2:1;
+ size+=Math.max(getLvDiff(), 0)/5;
+
+ //ダメージ
+ float d=3.0f+0.5f*(Math.max(getLvDiff(), 0)/3);
+ if(!isSpelled) d/=2.f;
+
+ //効果範囲内の全てのEntityLivingBaseへ
+ List list=getEntities(size);
+ if(!list.isEmpty()){
+
+ //付与魔法のインスタンス化
+ IMagicEnchant[] me=new IMagicEnchant[magics.size()];
+ for(int i=0;i<me.length;i++) {
+ me[i] = (IMagicEnchant) magics.get(i).getMagic(world, player, false);
+ }
+
+ for(int i=0;i<list.size();i++){
+ EntityLivingBase e=(EntityLivingBase)list.get(i);
+ if(e.getUniqueID()==player.getUniqueID()) continue;
+
+ //一体ずつダメージとか処理していく
+ float dScale=1.f;
+ float dValue=0.f;
+ for(int k=0;k<me.length;k++){
+ dScale*=me[k].damageScale(e);
+ dValue+=me[k].damageValue(e);
+ }
+
+ e.attackEntityFrom(DamageSource.causeIndirectMagicDamage(player, e), (d+dValue)*dScale);
+
+ //付与効果
+ for(int k=0;k<me.length;k++){
+ me[k].enchant(e, true);
+ }
+ }
+ }
+
+ //エフェクト
+ NBTTagCompound tag=new NBTTagCompound();
+ tag.setTag("EnchantMagics", tagList);
+ PacketHandler.INSTANCE.sendToDimension(new MessageMagicVortex(player, size, tag), world.provider.dimensionId);
+ }
+}
diff --git a/src/main/java/jp/plusplus/fbs/magic/MagicWarp.class b/src/main/java/jp/plusplus/fbs/magic/MagicWarp.class Binary files differnew file mode 100644 index 0000000..f27536f --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/magic/MagicWarp.class diff --git a/src/main/java/jp/plusplus/fbs/magic/MagicWarp.java b/src/main/java/jp/plusplus/fbs/magic/MagicWarp.java new file mode 100644 index 0000000..2c41606 --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/magic/MagicWarp.java @@ -0,0 +1,37 @@ +package jp.plusplus.fbs.magic;
+
+import jp.plusplus.fbs.FBS;
+import jp.plusplus.fbs.api.MagicBase;
+import jp.plusplus.fbs.exprop.SanityManager;
+import net.minecraft.util.MathHelper;
+
+/**
+ * Created by plusplus_F on 2015/10/23.
+ */
+public class MagicWarp extends MagicBase {
+ @Override
+ public boolean checkSuccess() {
+ return true;
+ }
+
+ @Override
+ public String getMagicCircleName(){
+ return "fbs.warp";
+ //return "null";
+
+ }
+
+ @Override
+ public void success() {
+ int x=MathHelper.floor_double(player.posX);
+ int y=MathHelper.floor_double(player.posY);
+ int z=MathHelper.floor_double(player.posZ);
+ SanityManager.addDestination(player, world.provider.dimensionId, x, y, z);
+ player.openGui(FBS.instance, FBS.GUI_MAGIC_WARP_ID, world, x, y, z);
+ }
+
+ @Override
+ public void failure() {
+
+ }
+}
diff --git a/src/main/java/jp/plusplus/fbs/magic/MagicWish.class b/src/main/java/jp/plusplus/fbs/magic/MagicWish.class Binary files differnew file mode 100644 index 0000000..2ef4dd1 --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/magic/MagicWish.class diff --git a/src/main/java/jp/plusplus/fbs/magic/MagicWish.java b/src/main/java/jp/plusplus/fbs/magic/MagicWish.java new file mode 100644 index 0000000..7bc2e51 --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/magic/MagicWish.java @@ -0,0 +1,28 @@ +package jp.plusplus.fbs.magic;
+
+import jp.plusplus.fbs.FBS;
+import jp.plusplus.fbs.api.FBSEntityPropertiesAPI;
+import jp.plusplus.fbs.api.MagicBase;
+import net.minecraft.util.MathHelper;
+
+/**
+ * Created by plusplus_F on 2016/04/01.
+ */
+public class MagicWish extends MagicBase {
+ @Override
+ public boolean checkSuccess() {
+ if(!isSpelled) return false;
+ int d=getLvDiff();
+ return rand.nextFloat()<(d<0?0.05f:0.1f+0.05f*d);
+ }
+
+ @Override
+ public void success() {
+ player.openGui(FBS.instance, FBS.GUI_WISH_ID, world, MathHelper.floor_double(player.posX), MathHelper.floor_double(player.posY), MathHelper.floor_double(player.posZ));
+ }
+
+ @Override
+ public void failure() {
+ FBSEntityPropertiesAPI.LoseSanity(player, 3, 8, true);
+ }
+}
diff --git a/src/main/java/jp/plusplus/fbs/magic/enchant/MagicButterfly.class b/src/main/java/jp/plusplus/fbs/magic/enchant/MagicButterfly.class Binary files differnew file mode 100644 index 0000000..b22ec4d --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/magic/enchant/MagicButterfly.class diff --git a/src/main/java/jp/plusplus/fbs/magic/enchant/MagicButterfly.java b/src/main/java/jp/plusplus/fbs/magic/enchant/MagicButterfly.java new file mode 100644 index 0000000..07ab20c --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/magic/enchant/MagicButterfly.java @@ -0,0 +1,64 @@ +package jp.plusplus.fbs.magic.enchant;
+
+import jp.plusplus.fbs.AchievementRegistry;
+import jp.plusplus.fbs.api.MagicEnchantBase;
+import jp.plusplus.fbs.entity.EntityButterfly;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.util.DamageSource;
+
+/**
+ * Created by plusplus_F on 2015/08/23.
+ * 重要な魔法
+ */
+public class MagicButterfly extends MagicEnchantBase {
+ public MagicButterfly() {
+ super(2, 4);
+ }
+
+ @Override
+ public void success() {
+ player.attackEntityFrom(new DamageSource("fbs.butterfly"), 10000);
+ enchant(player, true);
+ }
+
+ @Override
+ public void enchant(EntityLivingBase entity, boolean success) {
+ if(!success) return;
+
+ //死んでいれば絶対蝶になる
+ //死んでなくても蝶になる
+ boolean flag=entity.isDead;
+ if(rand.nextFloat()<0.3f){
+ entity.attackEntityFrom(new DamageSource("fbs.butterfly"), 10000);
+ flag=true;
+ }
+
+ if(flag){
+ EntityButterfly eb=new EntityButterfly(entity.worldObj, (float)entity.posX, (float)entity.posY+1, (float)entity.posZ);
+ entity.worldObj.spawnEntityInWorld(eb);
+
+ if(entity instanceof EntityPlayer){
+ ((EntityPlayer) entity).triggerAchievement(AchievementRegistry.sublimation);
+ }
+ }
+ }
+
+ @Override
+ public boolean checkSuccess() {
+ int d=getLvDiff();
+ float prob=isSpelled?0.35f:0.1f;
+ if(d>0) prob+=0.05f*d;
+ return rand.nextFloat()<=prob;
+ }
+
+ @Override
+ public ParticleColor setParticleColor(){
+ ParticleColor col=new ParticleColor();
+ float v=0.1f+0.3f*rand.nextFloat();
+ col.blue-=v;
+ col.red-=v;
+ col.green=0;
+ return col;
+ }
+}
diff --git a/src/main/java/jp/plusplus/fbs/magic/enchant/MagicCleverness.class b/src/main/java/jp/plusplus/fbs/magic/enchant/MagicCleverness.class Binary files differnew file mode 100644 index 0000000..f82bfdd --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/magic/enchant/MagicCleverness.class diff --git a/src/main/java/jp/plusplus/fbs/magic/enchant/MagicCleverness.java b/src/main/java/jp/plusplus/fbs/magic/enchant/MagicCleverness.java new file mode 100644 index 0000000..ee43203 --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/magic/enchant/MagicCleverness.java @@ -0,0 +1,33 @@ +package jp.plusplus.fbs.magic.enchant;
+
+import jp.plusplus.fbs.Registry;
+import jp.plusplus.fbs.api.MagicEnchantBase;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.potion.PotionEffect;
+
+/**
+ * Createdby pluslus_Fon 2015/11/09.
+ */
+public class MagicCleverness extends MagicEnchantBase {
+ public MagicCleverness() {
+ super(1, 6);
+ }
+
+ @Override
+ public boolean checkSuccess() {
+ int d=getLvDiff();
+ float prob=isSpelled?0.5f:0.3f;
+ if(d>0) prob+=0.08f*d;
+ return rand.nextFloat()<=prob;
+ }
+ @Override
+ public void enchant(EntityLivingBase entity, boolean success) {
+ int d = getDuration(90, 0.5f);
+ int a = getAmplifier(7);
+
+ if(success){
+ if(this.isSpelled) d+=120*20;
+ entity.addPotionEffect(new PotionEffect(Registry.potionCleverness.getId(), d, a));
+ }
+ }
+}
diff --git a/src/main/java/jp/plusplus/fbs/magic/enchant/MagicContemporary.class b/src/main/java/jp/plusplus/fbs/magic/enchant/MagicContemporary.class Binary files differnew file mode 100644 index 0000000..210fa11 --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/magic/enchant/MagicContemporary.class diff --git a/src/main/java/jp/plusplus/fbs/magic/enchant/MagicContemporary.java b/src/main/java/jp/plusplus/fbs/magic/enchant/MagicContemporary.java new file mode 100644 index 0000000..5d9d7a1 --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/magic/enchant/MagicContemporary.java @@ -0,0 +1,40 @@ +package jp.plusplus.fbs.magic.enchant;
+
+import jp.plusplus.fbs.api.MagicEnchantBase;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.potion.Potion;
+import net.minecraft.potion.PotionEffect;
+
+/**
+ * Createdby pluslus_Fon 2015/09/19.
+ */
+public class MagicContemporary extends MagicEnchantBase {
+ public MagicContemporary() {
+ super(3, 10);
+ }
+
+ @Override
+ public boolean checkSuccess() {
+ int d=getLvDiff();
+ float prob=isSpelled?0.6f:0.2f;
+ if(d>0) prob+=0.08f*d;
+ return rand.nextFloat()<=prob;
+ }
+ @Override
+ public void enchant(EntityLivingBase entity, boolean success) {
+ int d = getDuration(180, 1);
+ int a = getAmplifier(8);
+
+ if(success){
+ if(this.isSpelled) d+=60*20;
+ entity.addPotionEffect(new PotionEffect(Potion.fireResistance.getId(), d, a));
+ entity.addPotionEffect(new PotionEffect(Potion.resistance.getId(), d, a));
+ entity.addPotionEffect(new PotionEffect(Potion.waterBreathing.getId(), d, a));
+ }
+ else{
+ entity.addPotionEffect(new PotionEffect(Potion.weakness.getId(), d, a));
+ entity.addPotionEffect(new PotionEffect(Potion.digSlowdown.getId(), d, a));
+ entity.addPotionEffect(new PotionEffect(Potion.blindness.getId(), d, a));
+ }
+ }
+}
diff --git a/src/main/java/jp/plusplus/fbs/magic/enchant/MagicContractEffect.class b/src/main/java/jp/plusplus/fbs/magic/enchant/MagicContractEffect.class Binary files differnew file mode 100644 index 0000000..5746735 --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/magic/enchant/MagicContractEffect.class diff --git a/src/main/java/jp/plusplus/fbs/magic/enchant/MagicContractEffect.java b/src/main/java/jp/plusplus/fbs/magic/enchant/MagicContractEffect.java new file mode 100644 index 0000000..392fa49 --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/magic/enchant/MagicContractEffect.java @@ -0,0 +1,34 @@ +package jp.plusplus.fbs.magic.enchant;
+
+import jp.plusplus.fbs.Registry;
+import jp.plusplus.fbs.api.MagicEnchantBase;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.potion.Potion;
+import net.minecraft.potion.PotionEffect;
+
+/**
+ * Createdby pluslus_Fon 2015/11/09.
+ */
+public class MagicContractEffect extends MagicEnchantBase {
+ public MagicContractEffect() {
+ super(3, 10);
+ }
+
+ @Override
+ public boolean checkSuccess() {
+ int d=getLvDiff();
+ float prob=isSpelled?0.5f:0.3f;
+ if(d>0) prob+=0.08f*d;
+ return rand.nextFloat()<=prob;
+ }
+ @Override
+ public void enchant(EntityLivingBase entity, boolean success) {
+ int d = getDuration(90, 0.5f);
+ int a = getAmplifier(8);
+
+ if(success){
+ if(this.isSpelled) d+=120*20;
+ entity.addPotionEffect(new PotionEffect(Registry.potionContract.getId(), d, a));
+ }
+ }
+}
diff --git a/src/main/java/jp/plusplus/fbs/magic/enchant/MagicDagon.class b/src/main/java/jp/plusplus/fbs/magic/enchant/MagicDagon.class Binary files differnew file mode 100644 index 0000000..e185525 --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/magic/enchant/MagicDagon.class diff --git a/src/main/java/jp/plusplus/fbs/magic/enchant/MagicDagon.java b/src/main/java/jp/plusplus/fbs/magic/enchant/MagicDagon.java new file mode 100644 index 0000000..80dcf5c --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/magic/enchant/MagicDagon.java @@ -0,0 +1,34 @@ +package jp.plusplus.fbs.magic.enchant;
+
+import jp.plusplus.fbs.api.MagicEnchantBase;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.potion.Potion;
+import net.minecraft.potion.PotionEffect;
+
+/**
+ * Createdby pluslus_Fon 2015/09/19.
+ */
+public class MagicDagon extends MagicEnchantBase {
+ public MagicDagon() {
+ super(4, 6);
+ }
+
+ @Override
+ public boolean checkSuccess() {
+ int d=getLvDiff();
+ float prob=isSpelled?0.5f:0.3f;
+ if(d>0) prob+=0.08f*d;
+ return rand.nextFloat()<=prob;
+ }
+ @Override
+ public void enchant(EntityLivingBase entity, boolean success) {
+ int d = getDuration(90, 0.5f);
+ int a = getAmplifier(8);
+
+ if(success){
+ if(this.isSpelled) d+=120*20;
+ entity.addPotionEffect(new PotionEffect(Potion.waterBreathing.getId(), d, a));
+ }
+ else entity.addPotionEffect(new PotionEffect(Potion.weakness.getId(), d, a));
+ }
+}
diff --git a/src/main/java/jp/plusplus/fbs/magic/enchant/MagicDamageBoost.class b/src/main/java/jp/plusplus/fbs/magic/enchant/MagicDamageBoost.class Binary files differnew file mode 100644 index 0000000..76bc834 --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/magic/enchant/MagicDamageBoost.class diff --git a/src/main/java/jp/plusplus/fbs/magic/enchant/MagicDamageBoost.java b/src/main/java/jp/plusplus/fbs/magic/enchant/MagicDamageBoost.java new file mode 100644 index 0000000..73422fd --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/magic/enchant/MagicDamageBoost.java @@ -0,0 +1,34 @@ +package jp.plusplus.fbs.magic.enchant;
+
+import jp.plusplus.fbs.api.MagicEnchantBase;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.potion.Potion;
+import net.minecraft.potion.PotionEffect;
+
+/**
+ * Createdby pluslus_Fon 2015/06/16.
+ */
+public class MagicDamageBoost extends MagicEnchantBase {
+ public MagicDamageBoost() {
+ super(4, 6);
+ }
+
+ @Override
+ public boolean checkSuccess() {
+ int d=getLvDiff();
+ float prob=isSpelled?0.5f:0.3f;
+ if(d>0) prob+=0.08f*d;
+ return rand.nextFloat()<=prob;
+ }
+ @Override
+ public void enchant(EntityLivingBase entity, boolean success) {
+ int d = getDuration(60, 0.3f);
+ int a = getAmplifier(8);
+
+ if(success){
+ if(this.isSpelled) d+=60*20;
+ entity.addPotionEffect(new PotionEffect(Potion.damageBoost.getId(), d, a));
+ }
+ else entity.addPotionEffect(new PotionEffect(Potion.weakness.getId(), d, a));
+ }
+}
diff --git a/src/main/java/jp/plusplus/fbs/magic/enchant/MagicEvolutionKing.class b/src/main/java/jp/plusplus/fbs/magic/enchant/MagicEvolutionKing.class Binary files differnew file mode 100644 index 0000000..75b8880 --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/magic/enchant/MagicEvolutionKing.class diff --git a/src/main/java/jp/plusplus/fbs/magic/enchant/MagicEvolutionKing.java b/src/main/java/jp/plusplus/fbs/magic/enchant/MagicEvolutionKing.java new file mode 100644 index 0000000..546817d --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/magic/enchant/MagicEvolutionKing.java @@ -0,0 +1,39 @@ +package jp.plusplus.fbs.magic.enchant;
+
+import jp.plusplus.fbs.api.MagicEnchantBase;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.potion.Potion;
+import net.minecraft.potion.PotionEffect;
+
+/**
+ * Createdby pluslus_Fon 2015/06/14.
+ */
+public class MagicEvolutionKing extends MagicEnchantBase {
+ public MagicEvolutionKing() {
+ super(4, 6);
+ }
+
+ @Override
+ public boolean checkSuccess() {
+ float prob=(isSpelled?0.6f:0.2f)+0.05f*(property.getMagicLevel()-bookData.lv);
+ return rand.nextFloat()<=prob;
+ }
+
+ @Override
+ public void enchant(EntityLivingBase entity, boolean success) {
+ int d = getDuration(60, 2);
+ int a = getAmplifier(5);
+
+ if(success){
+ if(this.isSpelled) d+=30*20;
+ entity.addPotionEffect(new PotionEffect(Potion.damageBoost.getId(), d, a));
+ entity.addPotionEffect(new PotionEffect(Potion.resistance.getId(), d, a));
+ entity.addPotionEffect(new PotionEffect(Potion.field_76434_w.getId(), d, a));
+ }
+ else{
+ entity.addPotionEffect(new PotionEffect(Potion.weakness.getId(), d, a));
+ entity.addPotionEffect(new PotionEffect(Potion.moveSlowdown.getId(), d, a));
+ entity.addPotionEffect(new PotionEffect(Potion.wither.getId(), d/5, a));
+ }
+ }
+}
diff --git a/src/main/java/jp/plusplus/fbs/magic/enchant/MagicFireArmor.class b/src/main/java/jp/plusplus/fbs/magic/enchant/MagicFireArmor.class Binary files differnew file mode 100644 index 0000000..7e8087e --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/magic/enchant/MagicFireArmor.class diff --git a/src/main/java/jp/plusplus/fbs/magic/enchant/MagicFireArmor.java b/src/main/java/jp/plusplus/fbs/magic/enchant/MagicFireArmor.java new file mode 100644 index 0000000..850f611 --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/magic/enchant/MagicFireArmor.java @@ -0,0 +1,42 @@ +package jp.plusplus.fbs.magic.enchant;
+
+import jp.plusplus.fbs.api.MagicEnchantBase;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.potion.Potion;
+import net.minecraft.potion.PotionEffect;
+
+/**
+ * Createdby pluslus_Fon 2015/09/19.
+ */
+public class MagicFireArmor extends MagicEnchantBase {
+ public MagicFireArmor() {
+ super(4, 6);
+ }
+
+ @Override
+ public boolean checkSuccess() {
+ int d=getLvDiff();
+ float prob=isSpelled?0.5f:0.3f;
+ if(d>0) prob+=0.08f*d;
+ return rand.nextFloat()<=prob;
+ }
+ @Override
+ public void enchant(EntityLivingBase entity, boolean success) {
+ int d = getDuration(60, 1);
+ int a = getAmplifier(8);
+
+ if(success){
+ if(this.isSpelled) d+=30*20;
+ entity.addPotionEffect(new PotionEffect(Potion.fireResistance.getId(), d, a));
+ }
+ else entity.addPotionEffect(new PotionEffect(Potion.weakness.getId(), d, a));
+ }
+
+ @Override
+ public ParticleColor setParticleColor(){
+ ParticleColor col=new ParticleColor();
+ col.green-=0.3f+0.25f*rand.nextFloat();
+ col.blue-=0.7f+0.3f*rand.nextFloat();
+ return col;
+ }
+}
diff --git a/src/main/java/jp/plusplus/fbs/magic/enchant/MagicInvisible.class b/src/main/java/jp/plusplus/fbs/magic/enchant/MagicInvisible.class Binary files differnew file mode 100644 index 0000000..d349c08 --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/magic/enchant/MagicInvisible.class diff --git a/src/main/java/jp/plusplus/fbs/magic/enchant/MagicInvisible.java b/src/main/java/jp/plusplus/fbs/magic/enchant/MagicInvisible.java new file mode 100644 index 0000000..41a06d8 --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/magic/enchant/MagicInvisible.java @@ -0,0 +1,37 @@ +package jp.plusplus.fbs.magic.enchant;
+
+import jp.plusplus.fbs.api.MagicEnchantBase;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.potion.Potion;
+import net.minecraft.potion.PotionEffect;
+
+/**
+ * Createdby pluslus_Fon 2015/09/19.
+ */
+public class MagicInvisible extends MagicEnchantBase {
+ public MagicInvisible() {
+ super(4, 6);
+ }
+
+ @Override
+ public boolean checkSuccess() {
+ int d=getLvDiff();
+ float prob=isSpelled?0.5f:0.3f;
+ if(d>0) prob+=0.08f*d;
+ return rand.nextFloat()<=prob;
+ }
+ @Override
+ public void enchant(EntityLivingBase entity, boolean success) {
+ int d = getDuration(60, 2);
+ int a = getAmplifier(4);
+
+ if(success){
+ if(this.isSpelled) d+=30*20;
+ entity.addPotionEffect(new PotionEffect(Potion.invisibility.getId(), d, a));
+ }
+ else{
+ entity.addPotionEffect(new PotionEffect(Potion.weakness.getId(), d, a));
+ entity.addPotionEffect(new PotionEffect(Potion.blindness.getId(), d, a));
+ }
+ }
+}
diff --git a/src/main/java/jp/plusplus/fbs/magic/enchant/MagicJump.class b/src/main/java/jp/plusplus/fbs/magic/enchant/MagicJump.class Binary files differnew file mode 100644 index 0000000..100baab --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/magic/enchant/MagicJump.class diff --git a/src/main/java/jp/plusplus/fbs/magic/enchant/MagicJump.java b/src/main/java/jp/plusplus/fbs/magic/enchant/MagicJump.java new file mode 100644 index 0000000..1f5d89a --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/magic/enchant/MagicJump.java @@ -0,0 +1,45 @@ +package jp.plusplus.fbs.magic.enchant;
+
+import jp.plusplus.fbs.api.MagicEnchantBase;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.entity.player.EntityPlayerMP;
+import net.minecraft.network.play.server.S12PacketEntityVelocity;
+
+/**
+ * Createdby pluslus_Fon 2015/09/18.
+ */
+public class MagicJump extends MagicEnchantBase {
+ public MagicJump() {
+ super(2, 6);
+ }
+
+ @Override
+ public boolean checkSuccess() {
+ int d=getLvDiff();
+ float prob=isSpelled?0.35f:0.1f;
+ if(d>0) prob+=0.05f*d;
+ return rand.nextFloat()<=prob;
+ }
+
+ @Override
+ public void enchant(EntityLivingBase entity, boolean success) {
+ if(!entity.onGround) return;
+
+ int v=getLvDiff();
+ double d=0.5+Math.max(0, v*0.05);
+ if(entity instanceof EntityPlayerMP){
+ if(!success) d*=2;
+ entity.addVelocity(0, d-player.motionY, 0);
+ ((EntityPlayerMP) entity).playerNetServerHandler.sendPacket(new S12PacketEntityVelocity(entity));
+ }
+ else{
+ if(!success) d*=0.5;
+ entity.addVelocity(0, d-player.motionY, 0);
+ }
+ }
+
+ @Override
+ public float damageScale(EntityLivingBase entity){
+ return 0.5f;
+ }
+}
diff --git a/src/main/java/jp/plusplus/fbs/magic/enchant/MagicPoison.class b/src/main/java/jp/plusplus/fbs/magic/enchant/MagicPoison.class Binary files differnew file mode 100644 index 0000000..b7f66c1 --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/magic/enchant/MagicPoison.class diff --git a/src/main/java/jp/plusplus/fbs/magic/enchant/MagicPoison.java b/src/main/java/jp/plusplus/fbs/magic/enchant/MagicPoison.java new file mode 100644 index 0000000..46c0c87 --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/magic/enchant/MagicPoison.java @@ -0,0 +1,54 @@ +package jp.plusplus.fbs.magic.enchant;
+
+import jp.plusplus.fbs.api.MagicEnchantBase;
+import net.minecraft.entity.Entity;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.potion.Potion;
+import net.minecraft.potion.PotionEffect;
+
+/**
+ * Createdby pluslus_Fon 2015/10/22.
+ */
+public class MagicPoison extends MagicEnchantBase {
+ public MagicPoison() {
+ super(4, 6);
+ }
+
+ @Override
+ public boolean checkSuccess() {
+ if(!isSpelled) return false;
+
+ float prob=0.4f+0.02f*property.getMagicLevel();
+ return rand.nextFloat()<=prob;
+ }
+
+ @Override
+ public void success() {
+ Entity e=getTouchEntity();
+ if(e instanceof EntityLivingBase){
+ enchant((EntityLivingBase)e, true);
+ }
+ }
+
+
+ @Override
+ public void enchant(EntityLivingBase entity, boolean success) {
+ int d = getDuration(5, 3);
+ int a = getAmplifier(10);
+
+ if(success){
+ if(isSpelled) d+=3*20;
+ entity.addPotionEffect(new PotionEffect(Potion.poison.getId(), d, a));
+ }
+ }
+
+ @Override
+ public ParticleColor setParticleColor(){
+ ParticleColor col=new ParticleColor();
+ float v=0.1f+0.5f*rand.nextFloat();
+ col.blue-=v;
+ col.red-=v;
+ col.green=0;
+ return col;
+ }
+}
diff --git a/src/main/java/jp/plusplus/fbs/magic/enchant/MagicRegeneration.class b/src/main/java/jp/plusplus/fbs/magic/enchant/MagicRegeneration.class Binary files differnew file mode 100644 index 0000000..418570f --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/magic/enchant/MagicRegeneration.class diff --git a/src/main/java/jp/plusplus/fbs/magic/enchant/MagicRegeneration.java b/src/main/java/jp/plusplus/fbs/magic/enchant/MagicRegeneration.java new file mode 100644 index 0000000..b0c5ffb --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/magic/enchant/MagicRegeneration.java @@ -0,0 +1,35 @@ +package jp.plusplus.fbs.magic.enchant;
+
+import jp.plusplus.fbs.api.MagicEnchantBase;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.potion.Potion;
+import net.minecraft.potion.PotionEffect;
+
+/**
+ * Createdby pluslus_Fon 2015/06/16.
+ */
+public class MagicRegeneration extends MagicEnchantBase {
+ public MagicRegeneration() {
+ super(4, 6);
+ }
+
+ @Override
+ public boolean checkSuccess() {
+ int d=getLvDiff();
+ float prob=isSpelled?0.35f:0.1f;
+ if(d>0) prob+=0.05f*d;
+ return rand.nextFloat()<=prob;
+ }
+
+ @Override
+ public void enchant(EntityLivingBase entity, boolean success) {
+ int d = getDuration(10, 2);
+ int a = getAmplifier(8);
+
+ if(success){
+ if(this.isSpelled) d+=5*20;
+ entity.addPotionEffect(new PotionEffect(Potion.regeneration.getId(), d, a));
+ }
+ else entity.addPotionEffect(new PotionEffect(Potion.wither.getId(), d, a));
+ }
+}
diff --git a/src/main/java/jp/plusplus/fbs/magic/enchant/MagicSpeed.class b/src/main/java/jp/plusplus/fbs/magic/enchant/MagicSpeed.class Binary files differnew file mode 100644 index 0000000..71a7997 --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/magic/enchant/MagicSpeed.class diff --git a/src/main/java/jp/plusplus/fbs/magic/enchant/MagicSpeed.java b/src/main/java/jp/plusplus/fbs/magic/enchant/MagicSpeed.java new file mode 100644 index 0000000..36cc369 --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/magic/enchant/MagicSpeed.java @@ -0,0 +1,47 @@ +package jp.plusplus.fbs.magic.enchant;
+
+import jp.plusplus.fbs.api.MagicEnchantBase;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.potion.Potion;
+import net.minecraft.potion.PotionEffect;
+
+/**
+ * Createdby pluslus_Fon 2015/06/08.
+ */
+public class MagicSpeed extends MagicEnchantBase {
+ public MagicSpeed() {
+ super(4, 6);
+ }
+
+ @Override
+ public boolean checkSuccess() {
+ if(!isSpelled) return false;
+
+ float prob=0.4f+0.02f*property.getMagicLevel();
+ return rand.nextFloat()<=prob;
+ }
+
+ @Override
+ public void enchant(EntityLivingBase entity, boolean success) {
+ int d = getDuration(30, 1);
+ int a = getAmplifier(8);
+
+ if(success){
+ if(isSpelled) d+=120*20;
+ entity.addPotionEffect(new PotionEffect(Potion.moveSpeed.getId(), d, a));
+ entity.addPotionEffect(new PotionEffect(Potion.jump.getId(), d, a));
+ }
+ else{
+ entity.addPotionEffect(new PotionEffect(Potion.moveSlowdown.getId(), d, a));
+ }
+ }
+
+ @Override
+ public ParticleColor setParticleColor(){
+ ParticleColor col=new ParticleColor();
+ float v=0.1f+0.5f*rand.nextFloat();
+ col.blue-=v;
+ col.red-=v;
+ return col;
+ }
+}
diff --git a/src/main/java/jp/plusplus/fbs/magic/enchant/MagicWedge.class b/src/main/java/jp/plusplus/fbs/magic/enchant/MagicWedge.class Binary files differnew file mode 100644 index 0000000..f560bb9 --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/magic/enchant/MagicWedge.class diff --git a/src/main/java/jp/plusplus/fbs/magic/enchant/MagicWedge.java b/src/main/java/jp/plusplus/fbs/magic/enchant/MagicWedge.java new file mode 100644 index 0000000..eefe3bd --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/magic/enchant/MagicWedge.java @@ -0,0 +1,71 @@ +package jp.plusplus.fbs.magic.enchant;
+
+import jp.plusplus.fbs.api.IMagicEnchant;
+import jp.plusplus.fbs.api.MagicBase;
+import jp.plusplus.fbs.entity.EntityMagicWedge;
+import net.minecraft.entity.Entity;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.potion.Potion;
+import net.minecraft.potion.PotionEffect;
+
+/**
+ * Createdby pluslus_Fon 2015/06/14.
+ */
+public class MagicWedge extends MagicBase implements IMagicEnchant {
+ @Override
+ public boolean checkSuccess() {
+ if(isSpelled) return true;
+
+ float prob=0.4f+0.03f*property.getMagicLevel();
+ return rand.nextFloat()<=prob;
+ }
+
+ @Override
+ public void success() {
+ int l=getLvDiff();
+ int eLv=1;
+ int eDu=20*(isSpelled?20:10);
+ float dm=isSpelled?1.0f:0.5f;
+ if(l>0){
+ eLv+=l/5;
+ eDu+=20*(l/2);
+ dm+=0.5f*(l/8);
+ }
+
+ Entity e=new EntityMagicWedge(world, player, 1.0F, 1.0F, dm, eLv, eDu);
+ world.spawnEntityInWorld(e);
+ }
+
+ @Override
+ public void failure() {
+ sanity(1,6);
+ }
+
+ @Override
+ public void enchant(EntityLivingBase entity, boolean success) {
+ int l=getLvDiff();
+ int eLv=1;
+ int eDu=20*(isSpelled?20:10);
+ if(l>0){
+ eLv+=l/5;
+ eDu+=20*(l/2);
+ }
+
+ entity.addPotionEffect(new PotionEffect(Potion.weakness.getId(), eDu, eLv));
+ }
+
+ @Override
+ public float damageScale(EntityLivingBase entity) {
+ return 0.75f;
+ }
+
+ @Override
+ public float damageValue(EntityLivingBase entity) {
+ return 0.f;
+ }
+
+ @Override
+ public ParticleColor setParticleColor() {
+ return new ParticleColor();
+ }
+}
diff --git a/src/main/java/jp/plusplus/fbs/magic/resonance/FlexibleResonance.class b/src/main/java/jp/plusplus/fbs/magic/resonance/FlexibleResonance.class Binary files differnew file mode 100644 index 0000000..f7045b1 --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/magic/resonance/FlexibleResonance.class diff --git a/src/main/java/jp/plusplus/fbs/magic/resonance/FlexibleResonance.java b/src/main/java/jp/plusplus/fbs/magic/resonance/FlexibleResonance.java new file mode 100644 index 0000000..65b89b1 --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/magic/resonance/FlexibleResonance.java @@ -0,0 +1,83 @@ +package jp.plusplus.fbs.magic.resonance;
+
+import jp.plusplus.fbs.Registry;
+import jp.plusplus.fbs.api.IMagicEnchant;
+import jp.plusplus.fbs.api.IResonance;
+import net.minecraft.util.StatCollector;
+
+import java.util.LinkedList;
+
+/**
+ * Created by pluslus_F on 2015/06/23.
+ * 特定の魔導書+付与魔法1個以上による共鳴
+ * 付与魔法が複数ある場合は全てに対して動作するように魔法は実装してね
+ */
+public class FlexibleResonance implements IResonance {
+ public String type; //ベースとなる魔法のタイプ
+
+ public LinkedList<Registry.MagicData> enchants=new LinkedList<Registry.MagicData>();
+ public Registry.MagicData base;
+
+ public FlexibleResonance(String type){
+ this.type=type;
+ }
+
+
+ @Override
+ public IResonance copy() {
+ return new FlexibleResonance(type);
+ }
+
+ @Override
+ public boolean isMatch(Registry.MagicData[] magics) {
+ boolean foundBase=false;
+ boolean foundEnchant=false;
+ for(Registry.MagicData md : magics){
+
+ //ベースとなる魔法の判定。ベースが2つ以上あればfalse
+ if(md.title.equals(type)){
+ if(foundBase) return false;
+ foundBase=true;
+ }
+
+ //付与魔法ならフラグを立てる
+ if(IMagicEnchant.class.isAssignableFrom(md.magic)){
+ foundEnchant=true;
+ }
+ }
+
+ return foundBase && foundEnchant;
+ }
+
+ @Override
+ public String getResonanceMagicName() {
+ return "resonance."+type;
+ }
+
+ @Override
+ public String getDisplayMagicName(String[] titles){
+ String sss=StatCollector.translateToLocal("magic.suffix."+type);
+ String ppp=null;
+
+ for(int i=0;i<titles.length;i++){
+ if(titles==null) continue;
+ Registry.MagicData md=Registry.GetMagic(titles[i]);
+ if(IMagicEnchant.class.isAssignableFrom(md.magic)){
+ ppp=StatCollector.translateToLocal("magic.prefix."+md.title);
+ break;
+ }
+ }
+
+ if(StatCollector.canTranslate("locale.fbs.jp")){
+ return ppp+sss;
+ }
+ else{
+ return ppp+" "+sss;
+ }
+ }
+
+ @Override
+ public int priority() {
+ return 0;
+ }
+}
diff --git a/src/main/java/jp/plusplus/fbs/magic/resonance/ShapedResonance.class b/src/main/java/jp/plusplus/fbs/magic/resonance/ShapedResonance.class Binary files differnew file mode 100644 index 0000000..f6bcb08 --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/magic/resonance/ShapedResonance.class diff --git a/src/main/java/jp/plusplus/fbs/magic/resonance/ShapedResonance.java b/src/main/java/jp/plusplus/fbs/magic/resonance/ShapedResonance.java new file mode 100644 index 0000000..0a44354 --- /dev/null +++ b/src/main/java/jp/plusplus/fbs/magic/resonance/ShapedResonance.java @@ -0,0 +1,68 @@ +package jp.plusplus.fbs.magic.resonance;
+
+import jp.plusplus.fbs.Registry;
+import jp.plusplus.fbs.api.IResonance;
+
+import java.util.Iterator;
+import java.util.LinkedList;
+
+/**
+ * Created by pluslus_F on 2015/06/23.
+ * 固定された魔導書同士での共鳴
+ */
+public class ShapedResonance implements IResonance {
+ public String[] books;
+ public String title;
+
+ public ShapedResonance(String title, String ... books){
+ this.title=title;
+ this.books=new String[books.length];
+ for(int i=0;i<books.length;i++){
+ this.books[i]=books[i];
+ }
+ }
+
+ @Override
+ public IResonance copy() {
+ return new ShapedResonance(title, books);
+ }
+
+ @Override
+ public boolean isMatch(Registry.MagicData[] magics) {
+ LinkedList<String> list=new LinkedList<String>();
+ for(int i=0;i<this.books.length;i++){
+ list.add(this.books[i]);
+ }
+
+ for(Registry.MagicData bd : magics){
+ boolean find=false;
+ Iterator<String> it=list.iterator();
+ while(it.hasNext()){
+ String t=it.next();
+ if(t.equals(bd.title)){
+ find=true;
+ it.remove();
+ break;
+ }
+ }
+
+ if(!find) return false;
+ }
+
+ return list.isEmpty();
+ }
+
+ @Override
+ public String getResonanceMagicName() {
+ return title;
+ }
+ @Override
+ public String getDisplayMagicName(String[] titles){
+ return Registry.GetLocalizedBookTitle(title);
+ }
+
+ @Override
+ public int priority() {
+ return 100;
+ }
+}
|
