mirror of
https://github.com/IntellectualSites/PlotSquared.git
synced 2024-11-12 10:24:07 +01:00
working on augmentation
This commit is contained in:
parent
6608004337
commit
cb0296a09f
@ -3,7 +3,9 @@ package com.intellectualcrafters.plot.generator;
|
|||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
|
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.Chunk;
|
import org.bukkit.Chunk;
|
||||||
|
import org.bukkit.Location;
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
import org.bukkit.generator.BlockPopulator;
|
import org.bukkit.generator.BlockPopulator;
|
||||||
@ -19,27 +21,58 @@ import com.intellectualcrafters.plot.util.PlotHelper;
|
|||||||
|
|
||||||
public class AugmentedPopulator extends BlockPopulator {
|
public class AugmentedPopulator extends BlockPopulator {
|
||||||
|
|
||||||
public final PlotGenerator generator;
|
|
||||||
public final PlotWorld plotworld;
|
public final PlotWorld plotworld;
|
||||||
public final PlotManager manager;
|
public final PlotManager manager;
|
||||||
|
public final PlotGenerator generator;
|
||||||
|
|
||||||
|
private final int botx;
|
||||||
|
private final int botz;
|
||||||
|
private final int topx;
|
||||||
|
private final int topz;
|
||||||
|
|
||||||
public BlockWrapper getBlock(int i, int j, short[][] result) {
|
public BlockWrapper getBlock(int X, int Z, int i, int j, short[][] result, boolean check) {
|
||||||
int y_1 = (i << 4);
|
int y_1 = (i << 4);
|
||||||
int y_2 = (j >> 8);
|
int y_2 = (j >> 8);
|
||||||
int y = y_1 + y_2;
|
int y = y_1 + y_2;
|
||||||
int z_1 = (j - ((y & 0xF) << 8));
|
int z_1 = (j - ((y & 0xF) << 8));
|
||||||
int z = (z_1 >> 4);
|
int z = (z_1 >> 4);
|
||||||
int x = z_1 - (z << 4);
|
int x;
|
||||||
|
if (check) {
|
||||||
|
if (z < botz || z > topz) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
x = z_1 - (z << 4);
|
||||||
|
if (x < botx || x > topx) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
x = z_1 - (z << 4);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
short id = result[i][j];
|
short id = result[i][j];
|
||||||
return new BlockWrapper(x, y, z, id, (byte) 0);
|
return new BlockWrapper(x, y, z, id, (byte) 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
public AugmentedPopulator(PlotGenerator generator, PlotWorld plotworld, PlotManager manager) {
|
public AugmentedPopulator(String world, PlotGenerator generator, PlotCluster cluster) {
|
||||||
this.generator = generator;
|
this.generator = generator;
|
||||||
this.plotworld = plotworld;
|
this.plotworld = generator.getNewPlotWorld(world);
|
||||||
this.manager = manager;
|
this.manager = generator.getPlotManager();
|
||||||
|
|
||||||
|
World bukkitWorld = Bukkit.getWorld(world);
|
||||||
|
|
||||||
|
Location bot = manager.getPlotBottomLocAbs(plotworld, cluster.getP1());
|
||||||
|
Location top = manager.getPlotTopLocAbs(plotworld, cluster.getP2()).add(1,0,1);
|
||||||
|
|
||||||
|
this.botx = bot.getBlockX();
|
||||||
|
this.botz = bot.getBlockZ();
|
||||||
|
|
||||||
|
this.topx = top.getBlockX();
|
||||||
|
this.topz = top.getBlockZ();
|
||||||
|
|
||||||
|
// Add the populator
|
||||||
|
bukkitWorld.getPopulators().add(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -51,11 +84,36 @@ public class AugmentedPopulator extends BlockPopulator {
|
|||||||
int Z = chunk.getZ();
|
int Z = chunk.getZ();
|
||||||
int x = X << 4;
|
int x = X << 4;
|
||||||
int z = Z << 4;
|
int z = Z << 4;
|
||||||
|
int x2 = x + 15;
|
||||||
|
int z2 = z + 15;
|
||||||
|
|
||||||
|
boolean inX1 = (x > botx && x < topx);
|
||||||
|
boolean inX2 = (x2 > botx && x2 < topx);
|
||||||
|
boolean inZ1 = (z > botz && z < topz);
|
||||||
|
boolean inZ2 = (z2 > botz && z2 < topz);
|
||||||
|
|
||||||
|
|
||||||
|
boolean inX = inX1 || inX2;
|
||||||
|
boolean inZ = inZ1 || inZ2;
|
||||||
|
|
||||||
|
if (!inX || !inZ) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
boolean check;
|
||||||
|
if (!inX1 || !inX2 || !inZ1 || inZ2) {
|
||||||
|
check = true;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
check = false;
|
||||||
|
}
|
||||||
short[][] result = generator.generateExtBlockSections(world, rand, X, Z, null);
|
short[][] result = generator.generateExtBlockSections(world, rand, X, Z, null);
|
||||||
int d2_length = result[0].length;
|
int d2_length = result[0].length;
|
||||||
for(int i = 0; i < result.length; i++) {
|
for(int i = 0; i < result.length; i++) {
|
||||||
for(int j = 0; j < d2_length; j++) {
|
for(int j = 0; j < d2_length; j++) {
|
||||||
BlockWrapper blockInfo = getBlock(i, j, result);
|
BlockWrapper blockInfo = getBlock(x, z, i, j, result, check);
|
||||||
|
if (blockInfo == null) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
PlotBlock plotblock = new PlotBlock((short) blockInfo.id, (byte) 0 );
|
PlotBlock plotblock = new PlotBlock((short) blockInfo.id, (byte) 0 );
|
||||||
Block block = world.getBlockAt(x + blockInfo.x, blockInfo.y, z + blockInfo.z);
|
Block block = world.getBlockAt(x + blockInfo.x, blockInfo.y, z + blockInfo.z);
|
||||||
PlotHelper.setBlock(block, plotblock);
|
PlotHelper.setBlock(block, plotblock);
|
||||||
|
Loading…
Reference in New Issue
Block a user