Mirror von
https://github.com/IntellectualSites/FastAsyncWorldEdit.git
synchronisiert 2024-12-26 02:50:06 +01:00
Added /pumpkins.
Dieser Commit ist enthalten in:
Ursprung
4f03ba6811
Commit
9f74a71374
@ -29,6 +29,7 @@ import java.util.Set;
|
|||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.Stack;
|
import java.util.Stack;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Random;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This class can wrap all block editing operations into one "edit session" that
|
* This class can wrap all block editing operations into one "edit session" that
|
||||||
@ -73,6 +74,10 @@ public class EditSession {
|
|||||||
* List of object types to queue.
|
* List of object types to queue.
|
||||||
*/
|
*/
|
||||||
private static final HashSet<Integer> queuedBlocks = new HashSet<Integer>();
|
private static final HashSet<Integer> queuedBlocks = new HashSet<Integer>();
|
||||||
|
/**
|
||||||
|
* Random number generator.
|
||||||
|
*/
|
||||||
|
private static Random prng = new Random();
|
||||||
|
|
||||||
static {
|
static {
|
||||||
queuedBlocks.add(50); // Torch
|
queuedBlocks.add(50); // Torch
|
||||||
@ -1251,6 +1256,105 @@ public class EditSession {
|
|||||||
setBlockIfAir(basePos.add(0, height, 0), leavesBlock);
|
setBlockIfAir(basePos.add(0, height, 0), leavesBlock);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Makes a pumpkin patch.
|
||||||
|
*
|
||||||
|
* @param basePos
|
||||||
|
*/
|
||||||
|
private void makePumpkinPatch(Vector basePos)
|
||||||
|
throws MaxChangedBlocksException {
|
||||||
|
BaseBlock logBlock = new BaseBlock(17);
|
||||||
|
BaseBlock leavesBlock = new BaseBlock(18);
|
||||||
|
|
||||||
|
setBlock(basePos.subtract(0, 1, 0), logBlock);
|
||||||
|
setBlockIfAir(basePos, leavesBlock);
|
||||||
|
|
||||||
|
makePumpkinPatchVine(basePos, basePos.add(0, 0, 1));
|
||||||
|
makePumpkinPatchVine(basePos, basePos.add(0, 0, -1));
|
||||||
|
makePumpkinPatchVine(basePos, basePos.add(1, 0, 0));
|
||||||
|
makePumpkinPatchVine(basePos, basePos.add(-1, 0, 0));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Make a pumpkin patch fine.
|
||||||
|
*
|
||||||
|
* @param basePos
|
||||||
|
* @param pos
|
||||||
|
*/
|
||||||
|
private void makePumpkinPatchVine(Vector basePos, Vector pos)
|
||||||
|
throws MaxChangedBlocksException {
|
||||||
|
if (pos.distance(basePos) > 4) return;
|
||||||
|
if (getBlock(pos).getID() != 0) return;
|
||||||
|
|
||||||
|
for (int i = -1; i > -3; i--) {
|
||||||
|
Vector testPos = pos.add(0, i, 0);
|
||||||
|
if (getBlock(testPos).getID() == 0) {
|
||||||
|
pos = testPos;
|
||||||
|
} else {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
setBlockIfAir(pos, new BaseBlock(18));
|
||||||
|
|
||||||
|
int t = prng.nextInt(4);
|
||||||
|
int h = prng.nextInt(3) - 1;
|
||||||
|
|
||||||
|
if (t == 0) {
|
||||||
|
if (prng.nextBoolean()) makePumpkinPatchVine(basePos, pos.add(1, 0, 0));
|
||||||
|
if (prng.nextBoolean()) setBlockIfAir(pos.add(1, h, -1), new BaseBlock(18));
|
||||||
|
setBlockIfAir(pos.add(0, 0, -1), new BaseBlock(86));
|
||||||
|
} else if (t == 1) {
|
||||||
|
if (prng.nextBoolean()) makePumpkinPatchVine(basePos, pos.add(0, 0, 1));
|
||||||
|
if (prng.nextBoolean()) setBlockIfAir(pos.add(1, h, 0), new BaseBlock(18));
|
||||||
|
setBlockIfAir(pos.add(1, 0, 1), new BaseBlock(86));
|
||||||
|
} else if (t == 2) {
|
||||||
|
if (prng.nextBoolean()) makePumpkinPatchVine(basePos, pos.add(0, 0, -1));
|
||||||
|
if (prng.nextBoolean()) setBlockIfAir(pos.add(-1, h, 0), new BaseBlock(18));
|
||||||
|
setBlockIfAir(pos.add(-1, 0, 1), new BaseBlock(86));
|
||||||
|
} else if (t == 3) {
|
||||||
|
if (prng.nextBoolean()) makePumpkinPatchVine(basePos, pos.add(-1, 0, 0));
|
||||||
|
if (prng.nextBoolean()) setBlockIfAir(pos.add(-1, h, -1), new BaseBlock(18));
|
||||||
|
setBlockIfAir(pos.add(-1, 0, -1), new BaseBlock(86));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Makes pumpkin patches.
|
||||||
|
*
|
||||||
|
* @param basePos
|
||||||
|
* @param size
|
||||||
|
* @return number of trees created
|
||||||
|
*/
|
||||||
|
public int makePumpkinPatches(Vector basePos, int size)
|
||||||
|
throws MaxChangedBlocksException {
|
||||||
|
int affected = 0;
|
||||||
|
|
||||||
|
for (int x = basePos.getBlockX() - size; x <= basePos.getBlockX() + size; x++) {
|
||||||
|
for (int z = basePos.getBlockZ() - size; z <= basePos.getBlockZ() + size; z++) {
|
||||||
|
// Don't want to be in the ground
|
||||||
|
if (!getBlock(new Vector(x, basePos.getBlockY(), z)).isAir())
|
||||||
|
continue;
|
||||||
|
// The gods don't want a pumpkin patch here
|
||||||
|
if (Math.random() < 0.98) { continue; }
|
||||||
|
|
||||||
|
for (int y = basePos.getBlockY(); y >= basePos.getBlockY() - 10; y--) {
|
||||||
|
// Check if we hit the ground
|
||||||
|
int t = getBlock(new Vector(x, y, z)).getID();
|
||||||
|
if (t == 2 || t == 3) {
|
||||||
|
makePumpkinPatch(new Vector(x, y + 1, z));
|
||||||
|
affected++;
|
||||||
|
break;
|
||||||
|
} else if (t != 0) { // Trees won't grow on this!
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return affected;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Makes a terrible looking pine forest.
|
* Makes a terrible looking pine forest.
|
||||||
*
|
*
|
||||||
|
@ -167,6 +167,7 @@ public class WorldEdit {
|
|||||||
commands.put("//hsphere", "[ID] [Radius] <Raised?> - Create a hollow sphere");
|
commands.put("//hsphere", "[ID] [Radius] <Raised?> - Create a hollow sphere");
|
||||||
commands.put("/fixwater", "[Radius] - Level nearby pools of water");
|
commands.put("/fixwater", "[Radius] - Level nearby pools of water");
|
||||||
commands.put("/forestgen", "<Size> - Make an ugly pine tree forest");
|
commands.put("/forestgen", "<Size> - Make an ugly pine tree forest");
|
||||||
|
commands.put("/pumpkins", "<Size> - Make a pumpkin forest");
|
||||||
commands.put("/unstuck", "Go up to the first free spot");
|
commands.put("/unstuck", "Go up to the first free spot");
|
||||||
commands.put("/ascend", "Go up one level");
|
commands.put("/ascend", "Go up one level");
|
||||||
commands.put("/descend", "Go down one level");
|
commands.put("/descend", "Go down one level");
|
||||||
@ -780,6 +781,16 @@ public class WorldEdit {
|
|||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
|
// Make pumpkin patches
|
||||||
|
} else if (split[0].equalsIgnoreCase("/pumpkins")) {
|
||||||
|
checkArgs(split, 0, 1, split[0]);
|
||||||
|
int size = split.length > 1 ? Math.max(1, Integer.parseInt(split[1])) : 10;
|
||||||
|
|
||||||
|
int affected = editSession.makePumpkinPatches(player.getPosition(), size);
|
||||||
|
player.print(affected + " pumpkin patches created.");
|
||||||
|
|
||||||
|
return true;
|
||||||
|
|
||||||
// Move
|
// Move
|
||||||
} else if (split[0].equalsIgnoreCase("//moveair") ||
|
} else if (split[0].equalsIgnoreCase("//moveair") ||
|
||||||
split[0].equalsIgnoreCase("//move")) {
|
split[0].equalsIgnoreCase("//move")) {
|
||||||
|
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren