Skip to content

Commit e09c8e1

Browse files
committed
update: 完善网格Grid的Y平面的代码,目前可以随便给定某平面的两点就可以绘制一个网格
1 parent 000ef33 commit e09c8e1

2 files changed

Lines changed: 113 additions & 27 deletions

File tree

src/top/zoyn/particlelib/ParticleLib.java

Lines changed: 28 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,12 @@ public static void showBorderAndGridAboutBlock(Block block, Particle particle) {
6666
high.clone().add(5, 0, 5),
6767
high.clone().add(0, 0, 5));
6868

69+
Grid grid = new Grid(low, lowers.get(2), 1.4D);
70+
grid.setParticle(Particle.FLAME);
71+
grid.show();
72+
Grid grid2 = new Grid(high, highers.get(2), 1.4D);
73+
grid2.setParticle(Particle.FLAME);
74+
grid2.show();
6975
for (int i = 0; i < lowers.size(); i++) {
7076
Location origin = lowers.get(i);
7177
Location top = highers.get(i);
@@ -90,9 +96,9 @@ public static void showBorderAndGridAboutBlock(Block block, Particle particle) {
9096
low.getWorld().spawnParticle(particle, top.clone().add(vectorTT.clone().multiply(j)), 1, 0, 0, 0, 0);
9197
}
9298
// 绘制网格面
93-
Grid grid = new Grid(origin, topNext, 1.4D);
94-
grid.setParticle(Particle.FLAME);
95-
grid.show();
99+
Grid grid3 = new Grid(origin, topNext, 1.4D);
100+
grid3.setParticle(Particle.FLAME);
101+
grid3.show();
96102
}
97103
}
98104

@@ -111,29 +117,30 @@ public void onDisable() {
111117
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
112118
Player player = (Player) sender;
113119

114-
// showBorderAndGridAboutBlock(player.getLocation().getBlock(), Particle.VILLAGER_HAPPY);
120+
Location location = player.getLocation().clone();
121+
Bukkit.getScheduler().runTaskTimer(this, () -> showBorderAndGridAboutBlock(location.getBlock(), Particle.VILLAGER_HAPPY), 0L, 10L);
115122

116-
// Grid grid = new Grid(player.getLocation(), player.getLocation().add(5, -8, 0), 1.2D);
123+
// Grid grid = new Grid(player.getLocation(), player.getLocation().add(5, 0, 5), 1.2D);
117124
//
118125
// grid.setPeriod(20);
119126
// grid.alwaysShowAsync();
120127

121-
Vector vector = player.getLocation().getDirection();
122-
Location location = player.getLocation();
123-
World world = location.getWorld();
124-
ThreeDProjector projector = new ThreeDProjector(location, vector);
125-
Bukkit.getScheduler().runTaskTimer(this, () -> {
126-
double y = 0;
127-
for (int i = 0; i < 8 * 360; i += 20) {
128-
double rad = Math.toRadians(i);
129-
double x = Math.cos(rad);
130-
y += 0.1;
131-
double z = Math.sin(rad);
132-
// 通过投影器开始转换坐标
133-
Location loc = projector.apply(x, y, z);
134-
world.spawnParticle(Particle.VILLAGER_HAPPY, loc, 1, 0, 0, 0, 0);
135-
}
136-
}, 0L, 10L);
128+
// Vector vector = player.getLocation().getDirection();
129+
// Location location = player.getLocation();
130+
// World world = location.getWorld();
131+
// ThreeDProjector projector = n ew ThreeDProjector(location, vector);
132+
// Bukkit.getScheduler().runTaskTimer(this, () -> {
133+
// double y = 0;
134+
// for (int i = 0; i < 8 * 360; i += 20) {
135+
// double rad = Math.toRadians(i);
136+
// double x = Math.cos(rad);
137+
// y += 0.1;
138+
// double z = Math.sin(rad);
139+
// // 通过投影器开始转换坐标
140+
// Location loc = projector.apply(x, y, z);
141+
// world.spawnParticle(Particle.VILLAGER_HAPPY, loc, 1, 0, 0, 0, 0);
142+
// }
143+
// }, 0L, 10L);
137144

138145
// Vector vector = player.getLocation().getDirection();
139146
// Location location = player.getLocation();

src/top/zoyn/particlelib/pobject/Grid.java

Lines changed: 85 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ public class Grid extends ParticleObject {
99
private Location minimumLocation;
1010
private Location maximumLocation;
1111
private boolean isXDimension = false;
12-
private boolean isYDimension = true;
12+
private boolean isYDimension = false;
1313

1414
public Grid(Location minimumLocation, Location maximumLocation) {
1515
this(minimumLocation, maximumLocation, 1.2D);
@@ -41,12 +41,24 @@ public Grid(Location minimumLocation, Location maximumLocation, double gridLengt
4141

4242
@Override
4343
public void show() {
44-
double height = Math.abs(maximumLocation.getY() - minimumLocation.getY());
44+
double height;
4545
double weight;
46-
if (isXDimension) {
47-
weight = Math.abs(maximumLocation.getX() - minimumLocation.getX());
46+
// 在Y平面下有点不一样
47+
if (isYDimension) {
48+
if (Math.abs(minimumLocation.getX() - maximumLocation.getX()) > Math.abs(minimumLocation.getZ() - maximumLocation.getZ())) {
49+
height = Math.abs(minimumLocation.getX() - maximumLocation.getX());
50+
weight = Math.abs(minimumLocation.getZ() - maximumLocation.getZ());
51+
} else {
52+
height = Math.abs(minimumLocation.getZ() - maximumLocation.getZ());
53+
weight = Math.abs(minimumLocation.getX() - maximumLocation.getX());
54+
}
4855
} else {
49-
weight = Math.abs(maximumLocation.getZ() - minimumLocation.getZ());
56+
height = Math.abs(maximumLocation.getY() - minimumLocation.getY());
57+
if (isXDimension) {
58+
weight = Math.abs(maximumLocation.getX() - minimumLocation.getX());
59+
} else {
60+
weight = Math.abs(maximumLocation.getZ() - minimumLocation.getZ());
61+
}
5062
}
5163
int heightSideLine = (int) (height / gridLength);
5264
int weightSideLine = (int) (weight / gridLength);
@@ -55,6 +67,35 @@ public void show() {
5567
Location minLocation = findMinimumLocation();
5668
Location maxLocation = findMaximumLocation();
5769

70+
// spawnParticle(minimumLocation);
71+
// spawnParticle(maximumLocation);
72+
73+
// spawnParticle(minLocation);
74+
// spawnParticle(maxLocation);
75+
76+
if (isYDimension) {
77+
for (int i = 1; i <= heightSideLine; i++) {
78+
Vector vector = maxLocation.clone().subtract(minLocation).toVector();
79+
vector.setZ(0).normalize();
80+
81+
Location start = minLocation.clone().add(0, 0, i * gridLength);
82+
for (double j = 0; j < weight; j += 0.2) {
83+
spawnParticle(start.clone().add(vector.clone().multiply(j)));
84+
}
85+
}
86+
87+
for (int i = 1; i <= weightSideLine; i++) {
88+
Vector vector = maxLocation.clone().subtract(minLocation).toVector();
89+
vector.setX(0).normalize();
90+
Location start = minLocation.clone().add(i * gridLength, 0, 0);
91+
92+
for (double j = 0; j < height; j += 0.2) {
93+
spawnParticle(start.clone().add(vector.clone().multiply(j)));
94+
}
95+
}
96+
return;
97+
}
98+
5899
for (int i = 1; i <= heightSideLine; i++) {
59100
Vector vector = maxLocation.clone().subtract(minLocation).toVector();
60101
vector.setY(0).normalize();
@@ -83,6 +124,25 @@ public void show() {
83124
}
84125

85126
private Location findMinimumLocation() {
127+
if (isYDimension) {
128+
if (minimumLocation.getBlockX() < maximumLocation.getBlockX()) {
129+
if (minimumLocation.getBlockZ() < maximumLocation.getBlockZ()) {
130+
return minimumLocation;
131+
} else {
132+
Location minToLower = minimumLocation.clone();
133+
minToLower.setZ(maximumLocation.getZ());
134+
return minToLower;
135+
}
136+
} else {
137+
if (minimumLocation.getBlockZ() < maximumLocation.getBlockZ()) {
138+
Location maxToLower = maximumLocation.clone();
139+
maxToLower.setZ(minimumLocation.getZ());
140+
return maxToLower;
141+
} else {
142+
return maximumLocation;
143+
}
144+
}
145+
}
86146
if (isXDimension) {
87147
// 以下的代码请把 minimumLoc 当做平面坐标系的中心
88148
// maximumLoc 在第一第二象限的情况
@@ -92,7 +152,7 @@ private Location findMinimumLocation() {
92152
maxToLower.setY(minimumLocation.getY());
93153
return maxToLower;
94154
}
95-
// maximumLoc 在第三第四象限的情况
155+
// maximumLoc 在第三第四象限的情况
96156
} else {
97157
if (minimumLocation.getBlockX() > maximumLocation.getBlockX()) {
98158
return maximumLocation;
@@ -123,6 +183,25 @@ private Location findMinimumLocation() {
123183
}
124184

125185
private Location findMaximumLocation() {
186+
if (isYDimension) {
187+
if (minimumLocation.getBlockX() < maximumLocation.getBlockX()) {
188+
if (minimumLocation.getBlockZ() < maximumLocation.getBlockZ()) {
189+
return maximumLocation;
190+
} else {
191+
Location minToHigher = minimumLocation.clone();
192+
minToHigher.setX(maximumLocation.getX());
193+
return minToHigher;
194+
}
195+
} else {
196+
if (minimumLocation.getBlockZ() < maximumLocation.getBlockZ()) {
197+
Location maxToLower = maximumLocation.clone();
198+
maxToLower.setX(minimumLocation.getX());
199+
return maxToLower;
200+
} else {
201+
return minimumLocation;
202+
}
203+
}
204+
}
126205
if (isXDimension) {
127206
if (minimumLocation.getBlockY() < maximumLocation.getBlockY()) {
128207
if (minimumLocation.getBlockX() > maximumLocation.getBlockX()) {

0 commit comments

Comments
 (0)