1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
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);
}
}
|