mirror of
https://github.com/taoneill/war.git
synced 2024-11-14 06:17:01 +01:00
Rolling my on sortof-Cuboid
This commit is contained in:
parent
7de2886f19
commit
dbe7fdfc11
@ -4,7 +4,7 @@ import org.bukkit.*;
|
|||||||
|
|
||||||
public class Monument {
|
public class Monument {
|
||||||
private Location location;
|
private Location location;
|
||||||
private int[] initialState = new int[10];
|
private int[] initialState = new int[26];
|
||||||
private World world = null;
|
private World world = null;
|
||||||
private Team ownerTeam = null;
|
private Team ownerTeam = null;
|
||||||
private final String name;
|
private final String name;
|
||||||
@ -16,16 +16,45 @@ public class Monument {
|
|||||||
int x = location.getBlockX();
|
int x = location.getBlockX();
|
||||||
int y = location.getBlockY();
|
int y = location.getBlockY();
|
||||||
int z = location.getBlockZ();
|
int z = location.getBlockZ();
|
||||||
getInitialState()[0] = world.getBlockAt(x+1, y-1, z+1).getTypeID();
|
|
||||||
getInitialState()[1] = world.getBlockAt(x+1, y-1, z).getTypeID();
|
// center
|
||||||
getInitialState()[2] = world.getBlockAt(x+1, y-1, z-1).getTypeID();
|
getInitialState()[0] = world.getBlockAt(x, y, z).getTypeID();
|
||||||
getInitialState()[3] = world.getBlockAt(x, y-1, z+1).getTypeID();
|
getInitialState()[1] = world.getBlockAt(x, y-1, z).getTypeID();
|
||||||
getInitialState()[4] = world.getBlockAt(x, y-1, z).getTypeID();
|
|
||||||
getInitialState()[5] = world.getBlockAt(x, y-1, z-1).getTypeID();
|
// inner ring
|
||||||
getInitialState()[6] = world.getBlockAt(x-1, y-1, z+1).getTypeID();
|
getInitialState()[2] = world.getBlockAt(x+1, y-1, z+1).getTypeID();
|
||||||
getInitialState()[7] = world.getBlockAt(x-1, y-1, z).getTypeID();
|
getInitialState()[3] = world.getBlockAt(x+1, y-1, z).getTypeID();
|
||||||
getInitialState()[8] = world.getBlockAt(x-1, y-1, z-1).getTypeID();
|
getInitialState()[4] = world.getBlockAt(x+1, y-1, z-1).getTypeID();
|
||||||
getInitialState()[9] = world.getBlockAt(x, y, z).getTypeID();
|
|
||||||
|
getInitialState()[5] = world.getBlockAt(x, y-1, z+1).getTypeID();
|
||||||
|
getInitialState()[6] = world.getBlockAt(x, y-1, z-1).getTypeID();
|
||||||
|
|
||||||
|
getInitialState()[7] = world.getBlockAt(x-1, y-1, z+1).getTypeID();
|
||||||
|
getInitialState()[9] = world.getBlockAt(x-1, y-1, z).getTypeID();
|
||||||
|
getInitialState()[9] = world.getBlockAt(x-1, y-1, z-1).getTypeID();
|
||||||
|
|
||||||
|
// outer ring
|
||||||
|
getInitialState()[10] = world.getBlockAt(x+2, y-1, z+2).getTypeID();
|
||||||
|
getInitialState()[11] = world.getBlockAt(x+2, y-1, z+1).getTypeID();
|
||||||
|
getInitialState()[12] = world.getBlockAt(x+2, y-1, z).getTypeID();
|
||||||
|
getInitialState()[13] = world.getBlockAt(x+2, y-1, z-1).getTypeID();
|
||||||
|
getInitialState()[14] = world.getBlockAt(x+2, y-1, z-2).getTypeID();
|
||||||
|
|
||||||
|
getInitialState()[15] = world.getBlockAt(x-1, y-1, z+2).getTypeID();
|
||||||
|
getInitialState()[16] = world.getBlockAt(x-1, y-1, z-2).getTypeID();
|
||||||
|
|
||||||
|
getInitialState()[17] = world.getBlockAt(x, y-1, z+2).getTypeID();
|
||||||
|
getInitialState()[18] = world.getBlockAt(x, y-1, z-2).getTypeID();
|
||||||
|
|
||||||
|
getInitialState()[19] = world.getBlockAt(x+1, y-1, z+2).getTypeID();
|
||||||
|
getInitialState()[20] = world.getBlockAt(x+1, y-1, z-2).getTypeID();
|
||||||
|
|
||||||
|
getInitialState()[21] = world.getBlockAt(x-2, y-1, z+2).getTypeID();
|
||||||
|
getInitialState()[22] = world.getBlockAt(x-2, y-1, z+1).getTypeID();
|
||||||
|
getInitialState()[23] = world.getBlockAt(x-2, y-1, z).getTypeID();
|
||||||
|
getInitialState()[24] = world.getBlockAt(x-2, y-1, z-1).getTypeID();
|
||||||
|
getInitialState()[25] = world.getBlockAt(x-2, y-1, z-2).getTypeID();
|
||||||
|
|
||||||
this.reset();
|
this.reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -58,10 +87,38 @@ public class Monument {
|
|||||||
|
|
||||||
public void ignite(Team team) {
|
public void ignite(Team team) {
|
||||||
ownerTeam = team;
|
ownerTeam = team;
|
||||||
|
int x = location.getBlockX();
|
||||||
|
int y = location.getBlockY();
|
||||||
|
int z = location.getBlockZ();
|
||||||
|
|
||||||
|
world.getBlockAt(x+1, y-1, z+1).setType(Material.GlowingRedstoneOre);
|
||||||
|
world.getBlockAt(x+1, y-1, z).setType(Material.GlowingRedstoneOre);
|
||||||
|
world.getBlockAt(x+1, y-1, z-1).setType(Material.GlowingRedstoneOre);
|
||||||
|
|
||||||
|
world.getBlockAt(x, y-1, z+1).setType(Material.GlowingRedstoneOre);
|
||||||
|
world.getBlockAt(x, y-1, z-1).setType(Material.GlowingRedstoneOre);
|
||||||
|
|
||||||
|
world.getBlockAt(x-1, y-1, z+1).setType(Material.GlowingRedstoneOre);
|
||||||
|
world.getBlockAt(x-1, y-1, z).setType(Material.GlowingRedstoneOre);
|
||||||
|
world.getBlockAt(x-1, y-1, z-1).setType(Material.GlowingRedstoneOre);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void smother() {
|
public void smother() {
|
||||||
ownerTeam = null;
|
ownerTeam = null;
|
||||||
|
int x = location.getBlockX();
|
||||||
|
int y = location.getBlockY();
|
||||||
|
int z = location.getBlockZ();
|
||||||
|
world.getBlockAt(x+1, y-1, z+1).setType(Material.CoalOre);
|
||||||
|
world.getBlockAt(x+1, y-1, z).setType(Material.CoalOre);
|
||||||
|
world.getBlockAt(x+1, y-1, z-1).setType(Material.CoalOre);
|
||||||
|
|
||||||
|
world.getBlockAt(x, y-1, z+1).setType(Material.CoalOre);
|
||||||
|
world.getBlockAt(x, y-1, z-1).setType(Material.CoalOre);
|
||||||
|
|
||||||
|
world.getBlockAt(x-1, y-1, z+1).setType(Material.CoalOre);
|
||||||
|
world.getBlockAt(x-1, y-1, z).setType(Material.CoalOre);
|
||||||
|
world.getBlockAt(x-1, y-1, z-1).setType(Material.CoalOre);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void reset() {
|
public void reset() {
|
||||||
@ -69,32 +126,88 @@ public class Monument {
|
|||||||
int x = location.getBlockX();
|
int x = location.getBlockX();
|
||||||
int y = location.getBlockY();
|
int y = location.getBlockY();
|
||||||
int z = location.getBlockZ();
|
int z = location.getBlockZ();
|
||||||
world.getBlockAt(x+1, y-1, z+1).setTypeID(49);
|
|
||||||
world.getBlockAt(x+1, y-1, z).setTypeID(49);
|
// center
|
||||||
world.getBlockAt(x+1, y-1, z-1).setTypeID(49);
|
world.getBlockAt(x, y, z).setType(Material.Air);
|
||||||
world.getBlockAt(x, y-1, z+1).setTypeID(49);
|
world.getBlockAt(x, y-1, z).setType(Material.Soil);
|
||||||
world.getBlockAt(x, y-1, z).setTypeID(87);
|
|
||||||
world.getBlockAt(x, y-1, z-1).setTypeID(49);
|
// inner ring
|
||||||
world.getBlockAt(x-1, y-1, z+1).setTypeID(49);
|
world.getBlockAt(x+1, y-1, z+1).setType(Material.CoalOre);
|
||||||
world.getBlockAt(x-1, y-1, z).setTypeID(49);
|
world.getBlockAt(x+1, y-1, z).setType(Material.CoalOre);
|
||||||
world.getBlockAt(x-1, y-1, z-1).setTypeID(49);
|
world.getBlockAt(x+1, y-1, z-1).setType(Material.CoalOre);
|
||||||
world.getBlockAt(x, y, z).setTypeID(0);
|
|
||||||
|
world.getBlockAt(x, y-1, z+1).setType(Material.CoalOre);
|
||||||
|
world.getBlockAt(x, y-1, z-1).setType(Material.CoalOre);
|
||||||
|
|
||||||
|
world.getBlockAt(x-1, y-1, z+1).setType(Material.CoalOre);
|
||||||
|
world.getBlockAt(x-1, y-1, z).setType(Material.CoalOre);
|
||||||
|
world.getBlockAt(x-1, y-1, z-1).setType(Material.CoalOre);
|
||||||
|
|
||||||
|
// outer ring
|
||||||
|
//world.getBlockAt(x+2, y-1, z+2).setType(Material.Obsidian);
|
||||||
|
world.getBlockAt(x+2, y-1, z+1).setType(Material.Obsidian);
|
||||||
|
world.getBlockAt(x+2, y-1, z).setType(Material.Obsidian);
|
||||||
|
world.getBlockAt(x+2, y-1, z-1).setType(Material.Obsidian);
|
||||||
|
//world.getBlockAt(x+2, y-1, z-2).setType(Material.Obsidian);
|
||||||
|
|
||||||
|
world.getBlockAt(x-1, y-1, z+2).setType(Material.Obsidian);
|
||||||
|
world.getBlockAt(x-1, y-1, z-2).setType(Material.Obsidian);
|
||||||
|
|
||||||
|
world.getBlockAt(x, y-1, z+2).setType(Material.Obsidian);
|
||||||
|
world.getBlockAt(x, y-1, z-2).setType(Material.Obsidian);
|
||||||
|
|
||||||
|
world.getBlockAt(x+1, y-1, z+2).setType(Material.Obsidian);
|
||||||
|
world.getBlockAt(x+1, y-1, z-2).setType(Material.Obsidian);
|
||||||
|
|
||||||
|
//world.getBlockAt(x-2, y-1, z+2).setType(Material.Obsidian);
|
||||||
|
world.getBlockAt(x-2, y-1, z+1).setType(Material.Obsidian);
|
||||||
|
world.getBlockAt(x-2, y-1, z).setType(Material.Obsidian);
|
||||||
|
world.getBlockAt(x-2, y-1, z-1).setType(Material.Obsidian);
|
||||||
|
//world.getBlockAt(x-2, y-1, z-2).setType(Material.Obsidian);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void remove() {
|
public void remove() {
|
||||||
int x = location.getBlockX();
|
int x = location.getBlockX();
|
||||||
int y = location.getBlockY();
|
int y = location.getBlockY();
|
||||||
int z = location.getBlockZ();
|
int z = location.getBlockZ();
|
||||||
world.getBlockAt(x+1, y-1, z+1).setTypeID(getInitialState()[0]);
|
|
||||||
world.getBlockAt(x+1, y-1, z).setTypeID(getInitialState()[1]);
|
// center
|
||||||
world.getBlockAt(x+1, y-1, z-1).setTypeID(getInitialState()[2]);
|
world.getBlockAt(x, y, z).setTypeID(getInitialState()[0]);
|
||||||
world.getBlockAt(x, y-1, z+1).setTypeID(getInitialState()[3]);
|
world.getBlockAt(x, y - 1, z).setTypeID(getInitialState()[1]);
|
||||||
world.getBlockAt(x, y-1, z).setTypeID(getInitialState()[4]);
|
|
||||||
world.getBlockAt(x, y-1, z-1).setTypeID(getInitialState()[5]);
|
// inner ring
|
||||||
world.getBlockAt(x-1, y-1, z+1).setTypeID(getInitialState()[6]);
|
world.getBlockAt(x+1, y-1, z+1).setTypeID(getInitialState()[2]);
|
||||||
world.getBlockAt(x-1, y-1, z).setTypeID(getInitialState()[7]);
|
world.getBlockAt(x+1, y-1, z).setTypeID(getInitialState()[3]);
|
||||||
world.getBlockAt(x-1, y-1, z-1).setTypeID(getInitialState()[8]);
|
world.getBlockAt(x+1, y-1, z-1).setTypeID(getInitialState()[4]);
|
||||||
world.getBlockAt(x, y, z).setTypeID(getInitialState()[9]);
|
|
||||||
|
world.getBlockAt(x, y-1, z+1).setTypeID(getInitialState()[5]);
|
||||||
|
world.getBlockAt(x, y-1, z-1).setTypeID(getInitialState()[6]);
|
||||||
|
|
||||||
|
world.getBlockAt(x-1, y-1, z+1).setTypeID(getInitialState()[7]);
|
||||||
|
world.getBlockAt(x-1, y-1, z).setTypeID(getInitialState()[8]);
|
||||||
|
world.getBlockAt(x-1, y-1, z-1).setTypeID(getInitialState()[9]);
|
||||||
|
|
||||||
|
// outer ring
|
||||||
|
world.getBlockAt(x+2, y-1, z+2).setTypeID(getInitialState()[10]);
|
||||||
|
world.getBlockAt(x+2, y-1, z+1).setTypeID(getInitialState()[11]);
|
||||||
|
world.getBlockAt(x+2, y-1, z).setTypeID(getInitialState()[12]);
|
||||||
|
world.getBlockAt(x+2, y-1, z-1).setTypeID(getInitialState()[13]);
|
||||||
|
world.getBlockAt(x+2, y-1, z-2).setTypeID(getInitialState()[14]);
|
||||||
|
|
||||||
|
world.getBlockAt(x-1, y-1, z+2).setTypeID(getInitialState()[15]);
|
||||||
|
world.getBlockAt(x-1, y-1, z-2).setTypeID(getInitialState()[16]);
|
||||||
|
|
||||||
|
world.getBlockAt(x, y-1, z+2).setTypeID(getInitialState()[17]);
|
||||||
|
world.getBlockAt(x, y-1, z-2).setTypeID(getInitialState()[18]);
|
||||||
|
|
||||||
|
world.getBlockAt(x+1, y-1, z+2).setTypeID(getInitialState()[19]);
|
||||||
|
world.getBlockAt(x+1, y-1, z-2).setTypeID(getInitialState()[20]);
|
||||||
|
|
||||||
|
world.getBlockAt(x-2, y-1, z+2).setTypeID(getInitialState()[21]);
|
||||||
|
world.getBlockAt(x-2, y-1, z+1).setTypeID(getInitialState()[22]);
|
||||||
|
world.getBlockAt(x-2, y-1, z).setTypeID(getInitialState()[23]);
|
||||||
|
world.getBlockAt(x-2, y-1, z-1).setTypeID(getInitialState()[24]);
|
||||||
|
world.getBlockAt(x-2, y-1, z-2).setTypeID(getInitialState()[25]);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Location getLocation() {
|
public Location getLocation() {
|
||||||
@ -143,7 +256,7 @@ public class Monument {
|
|||||||
int bx = block.getX();
|
int bx = block.getX();
|
||||||
int by = block.getY();
|
int by = block.getY();
|
||||||
int bz = block.getZ();
|
int bz = block.getZ();
|
||||||
if((bx == x && by == y && bz == z) ||
|
if(/*(bx == x && by == y && bz == z) ||*/
|
||||||
(bx == x+1 && by == y-1 && bz == z+1) ||
|
(bx == x+1 && by == y-1 && bz == z+1) ||
|
||||||
(bx == x+1 && by == y-1 && bz == z) ||
|
(bx == x+1 && by == y-1 && bz == z) ||
|
||||||
(bx == x+1 && by == y-1 && bz == z-1) ||
|
(bx == x+1 && by == y-1 && bz == z-1) ||
|
||||||
|
160
war/src/main/java/com/tommytony/war/Volume.java
Normal file
160
war/src/main/java/com/tommytony/war/Volume.java
Normal file
@ -0,0 +1,160 @@
|
|||||||
|
package com.tommytony.war;
|
||||||
|
|
||||||
|
import org.bukkit.Block;
|
||||||
|
import org.bukkit.World;
|
||||||
|
import org.bukkit.block.Sign;
|
||||||
|
|
||||||
|
public class Volume {
|
||||||
|
private final String name;
|
||||||
|
private final World world;
|
||||||
|
private Block cornerOne;
|
||||||
|
private Block cornerTwo;
|
||||||
|
private Block[][][] blocks = null;
|
||||||
|
private final War war;
|
||||||
|
|
||||||
|
public Volume(String name, War war, World world) {
|
||||||
|
this.name = name;
|
||||||
|
this.war = war;
|
||||||
|
this.world = world;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean hasTwoCorners() {
|
||||||
|
return cornerOne != null && cornerTwo != null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCornerOne(Block block) {
|
||||||
|
this.cornerOne = block;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean saveBlocks() {
|
||||||
|
try {
|
||||||
|
if(hasTwoCorners()) {
|
||||||
|
this.blocks = new Block[getSizeX()][getSizeY()][getSizeZ()];
|
||||||
|
int x = getMinX();
|
||||||
|
for(int i = 0; i < getSizeX(); i++){
|
||||||
|
int y = getMinY();
|
||||||
|
for(int j = 0; j < getSizeY(); j++){
|
||||||
|
int z = getMinZ();
|
||||||
|
for(int k = 0;k < getSizeZ(); k++) {
|
||||||
|
this.blocks[i][j][k] = world.getBlockAt(x, y, z);
|
||||||
|
z++;
|
||||||
|
}
|
||||||
|
y++;
|
||||||
|
}
|
||||||
|
x++;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
} catch (Exception e) {
|
||||||
|
this.war.getLogger().warning(war.str("Failed to save volume " + name + " blocks. " + e.getMessage()));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean resetBlocks() {
|
||||||
|
try {
|
||||||
|
if(hasTwoCorners() && blocks != null) {
|
||||||
|
int x = getMinX();
|
||||||
|
for(int i = 0; i < getSizeX(); i++){
|
||||||
|
int y = getMinY();
|
||||||
|
for(int j = 0; j < getSizeY(); j++){
|
||||||
|
int z = getMinZ();
|
||||||
|
for(int k = 0;k < getSizeZ(); k++) {
|
||||||
|
Block oldBlock = blocks[i][j][k];
|
||||||
|
Block currentBlock = world.getBlockAt(x, y, z);
|
||||||
|
currentBlock.setType(oldBlock.getType());
|
||||||
|
currentBlock.setData(currentBlock.getData());
|
||||||
|
if(oldBlock instanceof Sign) {
|
||||||
|
Sign oldSign = (Sign) oldBlock;
|
||||||
|
Sign currentSign = (Sign) currentBlock;
|
||||||
|
currentSign.setLine(0, oldSign.getLine(0));
|
||||||
|
currentSign.setLine(1, oldSign.getLine(1));
|
||||||
|
currentSign.setLine(2, oldSign.getLine(2));
|
||||||
|
currentSign.setLine(3, oldSign.getLine(3));
|
||||||
|
}
|
||||||
|
z++;
|
||||||
|
}
|
||||||
|
y++;
|
||||||
|
}
|
||||||
|
x++;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
} catch (Exception e) {
|
||||||
|
this.war.getLogger().warning(war.str("Failed to reset volume " + name + " blocks. " + e.getMessage()));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCornerTwo(Block block) {
|
||||||
|
this.cornerTwo = block;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Block getMinXBlock() {
|
||||||
|
if(cornerOne.getX() < cornerTwo.getX()) return cornerOne;
|
||||||
|
return cornerTwo;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Block getMinYBlock() {
|
||||||
|
if(cornerOne.getY() < cornerTwo.getY()) return cornerOne;
|
||||||
|
return cornerTwo;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Block getMinZBlock() {
|
||||||
|
if(cornerOne.getZ() < cornerTwo.getZ()) return cornerOne;
|
||||||
|
return cornerTwo;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getMinX() {
|
||||||
|
return getMinXBlock().getX();
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getMinY() {
|
||||||
|
return getMinYBlock().getY();
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getMinZ() {
|
||||||
|
return getMinZBlock().getZ();
|
||||||
|
}
|
||||||
|
|
||||||
|
public Block getMaxXBlock() {
|
||||||
|
if(cornerOne.getX() < cornerTwo.getX()) return cornerTwo;
|
||||||
|
return cornerOne;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Block getMaxYBlock() {
|
||||||
|
if(cornerOne.getY() < cornerTwo.getY()) return cornerTwo;
|
||||||
|
return cornerOne;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Block getMaxZBlock() {
|
||||||
|
if(cornerOne.getZ() < cornerTwo.getZ()) return cornerTwo;
|
||||||
|
return cornerOne;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getMaxX() {
|
||||||
|
return getMaxXBlock().getX();
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getMaxY() {
|
||||||
|
return getMaxYBlock().getY();
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getMaxZ() {
|
||||||
|
return getMaxZBlock().getZ();
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getSizeX() {
|
||||||
|
return getMaxX() - getMinX();
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getSizeY() {
|
||||||
|
return getMaxY() - getMinY();
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getSizeZ() {
|
||||||
|
return getMaxZ() - getMinZ();
|
||||||
|
}
|
||||||
|
}
|
@ -8,6 +8,8 @@ import org.bukkit.plugin.PluginLoader;
|
|||||||
import org.bukkit.plugin.PluginManager;
|
import org.bukkit.plugin.PluginManager;
|
||||||
import org.bukkit.plugin.java.JavaPlugin;
|
import org.bukkit.plugin.java.JavaPlugin;
|
||||||
|
|
||||||
|
import com.tommytony.war.mappers.WarMapper;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
@ -54,6 +56,7 @@ public class War extends JavaPlugin {
|
|||||||
pm.registerEvent(Event.Type.ENTITY_DEATH, entityListener, Priority.Normal, this); //HEALTH_CHANGE
|
pm.registerEvent(Event.Type.ENTITY_DEATH, entityListener, Priority.Normal, this); //HEALTH_CHANGE
|
||||||
pm.registerEvent(Event.Type.ENTITY_DAMAGEDBY_ENTITY, entityListener, Priority.Normal, this); //DAMAGE
|
pm.registerEvent(Event.Type.ENTITY_DAMAGEDBY_ENTITY, entityListener, Priority.Normal, this); //DAMAGE
|
||||||
|
|
||||||
|
pm.registerEvent(Event.Type.BLOCK_PLACED, blockListener, Priority.Normal, this);
|
||||||
pm.registerEvent(Event.Type.BLOCK_IGNITE, blockListener, Priority.Normal, this);
|
pm.registerEvent(Event.Type.BLOCK_IGNITE, blockListener, Priority.Normal, this);
|
||||||
pm.registerEvent(Event.Type.BLOCK_FLOW, blockListener, Priority.Normal, this);
|
pm.registerEvent(Event.Type.BLOCK_FLOW, blockListener, Priority.Normal, this);
|
||||||
pm.registerEvent(Event.Type.BLOCK_CANBUILD, blockListener, Priority.Normal, this); // BLOCK_PLACE
|
pm.registerEvent(Event.Type.BLOCK_CANBUILD, blockListener, Priority.Normal, this); // BLOCK_PLACE
|
||||||
|
@ -3,13 +3,14 @@ package com.tommytony.war;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import org.bukkit.Block;
|
import org.bukkit.Block;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.Player;
|
import org.bukkit.Player;
|
||||||
import org.bukkit.event.block.BlockBrokenEvent;
|
import org.bukkit.event.block.BlockBrokenEvent;
|
||||||
import org.bukkit.event.block.BlockCanBuildEvent;
|
import org.bukkit.event.block.BlockCanBuildEvent;
|
||||||
import org.bukkit.event.block.BlockFromToEvent;
|
import org.bukkit.event.block.BlockFromToEvent;
|
||||||
import org.bukkit.event.block.BlockIgniteEvent;
|
import org.bukkit.event.block.BlockIgniteEvent;
|
||||||
import org.bukkit.event.block.BlockListener;
|
import org.bukkit.event.block.BlockListener;
|
||||||
|
import org.bukkit.event.block.BlockPlacedEvent;
|
||||||
|
|
||||||
public class WarBlockListener extends BlockListener {
|
public class WarBlockListener extends BlockListener {
|
||||||
|
|
||||||
@ -19,6 +20,30 @@ public class WarBlockListener extends BlockListener {
|
|||||||
this.war = war;
|
this.war = war;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void onBlockPlaced(BlockPlacedEvent event) {
|
||||||
|
Player player = event.getPlayer();
|
||||||
|
Block block = event.getBlock();
|
||||||
|
if(player != null) {
|
||||||
|
Team team = war.getPlayerTeam(player.getName());
|
||||||
|
Warzone zone = war.getPlayerWarzone(player.getName());
|
||||||
|
if(team != null && block != null && zone != null
|
||||||
|
&& zone.isMonumentCenterBlock(block)
|
||||||
|
&& (block.getType() == Material.YellowFlower || block.getType() == Material.RedRose || block.getType() == Material.Sapling)) {
|
||||||
|
Monument monument = zone.getMonumentFromCenterBlock(block);
|
||||||
|
if(!monument.hasOwner()) {
|
||||||
|
monument.ignite(team);
|
||||||
|
List<Team> teams = zone.getTeams();
|
||||||
|
for(Team t : teams) {
|
||||||
|
t.teamcast(war.str("Monument " + monument.getName() + " has been ignited by team " + team.getName() + "."));
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
player.sendMessage(war.str("Monument must be smothered first."));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public void onBlockBroken(BlockBrokenEvent event) {
|
public void onBlockBroken(BlockBrokenEvent event) {
|
||||||
Player player = event.getPlayer();
|
Player player = event.getPlayer();
|
||||||
Block block = event.getBlock();
|
Block block = event.getBlock();
|
||||||
@ -27,7 +52,6 @@ public class WarBlockListener extends BlockListener {
|
|||||||
if(warzone != null && war.getPlayerTeam(player.getName()) == null) {
|
if(warzone != null && war.getPlayerTeam(player.getName()) == null) {
|
||||||
// can't actually destroy blocks in a warzone if not part of a team
|
// can't actually destroy blocks in a warzone if not part of a team
|
||||||
player.sendMessage(war.str("Can't destroy part of a warzone if you're not in a team."));
|
player.sendMessage(war.str("Can't destroy part of a warzone if you're not in a team."));
|
||||||
|
|
||||||
// BUKKIT
|
// BUKKIT
|
||||||
// event.setCancelled(true);
|
// event.setCancelled(true);
|
||||||
}
|
}
|
||||||
@ -37,49 +61,61 @@ public class WarBlockListener extends BlockListener {
|
|||||||
// BUKKIT
|
// BUKKIT
|
||||||
// event.setCancelled(true);
|
// event.setCancelled(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Team team = war.getPlayerTeam(player.getName());
|
||||||
|
if(team != null && block != null && warzone != null
|
||||||
|
&& warzone.isMonumentCenterBlock(block)){
|
||||||
|
Monument monument = warzone.getMonumentFromCenterBlock(block);
|
||||||
|
if(monument.hasOwner()) {
|
||||||
|
monument.smother();
|
||||||
|
List<Team> teams = warzone.getTeams();
|
||||||
|
for(Team t : teams) {
|
||||||
|
t.teamcast(war.str("Monument " + monument.getName() + " has been smothered."));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void onBlockCanBuild(BlockCanBuildEvent event) {
|
public void onBlockCanBuild(BlockCanBuildEvent event) {
|
||||||
// BUKKIT
|
// BUKKIT
|
||||||
// Player player = event.getPlayer();
|
|
||||||
// Block blockPlaced = event.getBlock();
|
// Block blockPlaced = event.getBlock();
|
||||||
// Warzone warzone = war.warzone(player.getLocation());
|
//
|
||||||
|
// Warzone warzone = war.warzone(new Location(warblockPlaced.getX());
|
||||||
// if(warzone != null) {
|
// if(warzone != null) {
|
||||||
// if(warzone.isImportantBlock(blockPlaced) || warzone.isImportantBlock(blockClicked)) {
|
// if(warzone.isImportantBlock(blockPlaced) || warzone.isImportantBlock(blockClicked)) {
|
||||||
// player.sendMessage(war.str("Can't build here."));
|
|
||||||
// event.setCancelled(true);
|
// event.setCancelled(true);
|
||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
public void onBlockFlow(BlockFromToEvent event) {
|
public void onBlockFlow(BlockFromToEvent event) {
|
||||||
Block block = null;
|
// Block block = null;
|
||||||
Block blockTo = event.getBlock();
|
// Block blockTo = event.getBlock();
|
||||||
Block blockFrom = event.getFromBlock();
|
// Block blockFrom = event.getFromBlock();
|
||||||
if(blockTo != null) {
|
// if(blockTo != null) {
|
||||||
block = blockTo;
|
// block = blockTo;
|
||||||
} else if (blockFrom != null) {
|
// } else if (blockFrom != null) {
|
||||||
block = blockFrom;
|
// block = blockFrom;
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
if(block != null) {
|
// if(block != null) {
|
||||||
Warzone zone = war.warzone(new Location(block.getWorld(), block.getX(), block.getY(), block.getZ()));
|
// Warzone zone = war.warzone(new Location(block.getWorld(), block.getX(), block.getY(), block.getZ()));
|
||||||
if(zone != null &&
|
// if(zone != null &&
|
||||||
((blockTo != null && zone.isMonumentFirestone(blockTo)
|
// ((blockTo != null && zone.isMonumentCenterBlock(blockTo)
|
||||||
|| (blockFrom != null && zone.isMonumentFirestone(blockFrom))))) {
|
// || (blockFrom != null && zone.isMonumentCenterBlock(blockFrom))))) {
|
||||||
Monument monument = null;
|
// Monument monument = null;
|
||||||
if(blockTo != null) monument = zone.getMonumentForFirestone(blockTo);
|
// if(blockTo != null) monument = zone.getMonumentFromCenterBlock(blockTo);
|
||||||
if(monument == null && blockFrom != null) monument = zone.getMonumentForFirestone(blockFrom);
|
// if(monument == null && blockFrom != null) monument = zone.getMonumentFromCenterBlock(blockFrom);
|
||||||
if(monument.hasOwner()) {
|
// if(monument.hasOwner()) {
|
||||||
monument.setOwnerTeam(null);
|
// monument.setOwnerTeam(null);
|
||||||
List<Team> teams = zone.getTeams();
|
// List<Team> teams = zone.getTeams();
|
||||||
for(Team team : teams) {
|
// for(Team team : teams) {
|
||||||
team.teamcast(war.str("Monument " + monument.getName() + " has been smothered."));
|
// team.teamcast(war.str("Monument " + monument.getName() + " has been smothered."));
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
public void onBlockIgnite(BlockIgniteEvent event) {
|
public void onBlockIgnite(BlockIgniteEvent event) {
|
||||||
|
@ -10,6 +10,9 @@ import org.bukkit.event.player.PlayerEvent;
|
|||||||
import org.bukkit.event.player.PlayerListener;
|
import org.bukkit.event.player.PlayerListener;
|
||||||
import org.bukkit.event.player.PlayerMoveEvent;
|
import org.bukkit.event.player.PlayerMoveEvent;
|
||||||
|
|
||||||
|
import com.tommytony.war.mappers.WarMapper;
|
||||||
|
import com.tommytony.war.mappers.WarzoneMapper;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public class WarPlayerListener extends PlayerListener {
|
public class WarPlayerListener extends PlayerListener {
|
||||||
|
@ -257,7 +257,7 @@ public class Warzone {
|
|||||||
player.teleportTo(team.getTeamSpawn());
|
player.teleportTo(team.getTeamSpawn());
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isMonumentFirestone(Block block) {
|
public boolean isMonumentCenterBlock(Block block) {
|
||||||
for(Monument monument : monuments) {
|
for(Monument monument : monuments) {
|
||||||
int x = monument.getLocation().getBlockX();
|
int x = monument.getLocation().getBlockX();
|
||||||
int y = monument.getLocation().getBlockY();
|
int y = monument.getLocation().getBlockY();
|
||||||
@ -269,7 +269,7 @@ public class Warzone {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Monument getMonumentForFirestone(Block block) {
|
public Monument getMonumentFromCenterBlock(Block block) {
|
||||||
for(Monument monument : monuments) {
|
for(Monument monument : monuments) {
|
||||||
int x = monument.getLocation().getBlockX();
|
int x = monument.getLocation().getBlockX();
|
||||||
int y = monument.getLocation().getBlockY();
|
int y = monument.getLocation().getBlockY();
|
||||||
@ -296,47 +296,128 @@ public class Warzone {
|
|||||||
int x = (int)team.getTeamSpawn().getBlockX();
|
int x = (int)team.getTeamSpawn().getBlockX();
|
||||||
int y = (int)team.getTeamSpawn().getBlockY();
|
int y = (int)team.getTeamSpawn().getBlockY();
|
||||||
int z = (int)team.getTeamSpawn().getBlockZ();
|
int z = (int)team.getTeamSpawn().getBlockZ();
|
||||||
world.getBlockAt(x+1, y-1, z+1).setTypeID(spawnState[0]);
|
|
||||||
world.getBlockAt(x+1, y-1, z).setTypeID(spawnState[1]);
|
// center
|
||||||
world.getBlockAt(x+1, y-1, z-1).setTypeID(spawnState[2]);
|
world.getBlockAt(x, y, z).setTypeID(spawnState[0]);
|
||||||
world.getBlockAt(x, y-1, z+1).setTypeID(spawnState[3]);
|
world.getBlockAt(x, y-1, z).setTypeID(spawnState[1]);
|
||||||
world.getBlockAt(x, y-1, z).setTypeID(spawnState[4]);
|
|
||||||
world.getBlockAt(x, y-1, z-1).setTypeID(spawnState[5]);
|
// inner ring
|
||||||
world.getBlockAt(x-1, y-1, z+1).setTypeID(spawnState[6]);
|
world.getBlockAt(x+1, y-1, z+1).setTypeID(spawnState[2]);
|
||||||
world.getBlockAt(x-1, y-1, z).setTypeID(spawnState[7]);
|
world.getBlockAt(x+1, y-1, z).setTypeID(spawnState[3]);
|
||||||
world.getBlockAt(x-1, y-1, z-1).setTypeID(spawnState[8]);
|
world.getBlockAt(x+1, y-1, z-1).setTypeID(spawnState[4]);
|
||||||
world.getBlockAt(x, y, z).setTypeID(spawnState[9]);
|
|
||||||
|
world.getBlockAt(x, y-1, z+1).setTypeID(spawnState[5]);
|
||||||
|
world.getBlockAt(x, y-1, z-1).setTypeID(spawnState[6]);
|
||||||
|
|
||||||
|
world.getBlockAt(x-1, y-1, z+1).setTypeID(spawnState[7]);
|
||||||
|
world.getBlockAt(x-1, y-1, z).setTypeID(spawnState[8]);
|
||||||
|
world.getBlockAt(x-1, y-1, z-1).setTypeID(spawnState[9]);
|
||||||
|
|
||||||
|
// outer ring
|
||||||
|
world.getBlockAt(x+2, y-1, z+2).setTypeID(spawnState[10]);
|
||||||
|
world.getBlockAt(x+2, y-1, z+1).setTypeID(spawnState[11]);
|
||||||
|
world.getBlockAt(x+2, y-1, z).setTypeID(spawnState[12]);
|
||||||
|
world.getBlockAt(x+2, y-1, z-1).setTypeID(spawnState[13]);
|
||||||
|
world.getBlockAt(x+2, y-1, z-2).setTypeID(spawnState[14]);
|
||||||
|
|
||||||
|
world.getBlockAt(x-1, y-1, z+2).setTypeID(spawnState[15]);
|
||||||
|
world.getBlockAt(x-1, y-1, z-2).setTypeID(spawnState[16]);
|
||||||
|
|
||||||
|
world.getBlockAt(x, y-1, z+2).setTypeID(spawnState[17]);
|
||||||
|
world.getBlockAt(x, y-1, z-2).setTypeID(spawnState[18]);
|
||||||
|
|
||||||
|
world.getBlockAt(x+1, y-1, z+2).setTypeID(spawnState[19]);
|
||||||
|
world.getBlockAt(x+1, y-1, z-2).setTypeID(spawnState[20]);
|
||||||
|
|
||||||
|
world.getBlockAt(x-2, y-1, z+2).setTypeID(spawnState[21]);
|
||||||
|
world.getBlockAt(x-2, y-1, z+1).setTypeID(spawnState[22]);
|
||||||
|
world.getBlockAt(x-2, y-1, z).setTypeID(spawnState[23]);
|
||||||
|
world.getBlockAt(x-2, y-1, z-1).setTypeID(spawnState[24]);
|
||||||
|
world.getBlockAt(x-2, y-1, z-2).setTypeID(spawnState[25]);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addSpawnArea(Team team, Location location, int blockType) {
|
public void addSpawnArea(Team team, Location location, int blockType) {
|
||||||
// Save the spawn state (i.e. the nine block under the player spawn)
|
// Save the spawn state (i.e. the nine block under the player spawn)
|
||||||
int[] spawnState = new int[10];
|
int[] spawnState = new int[26];
|
||||||
int x = location.getBlockX();
|
int x = location.getBlockX();
|
||||||
int y = location.getBlockY();
|
int y = location.getBlockY();
|
||||||
int z = location.getBlockZ();
|
int z = location.getBlockZ();
|
||||||
spawnState[0] = world.getBlockAt(x+1, y-1, z+1).getTypeID();
|
// center
|
||||||
spawnState[1] = world.getBlockAt(x+1, y-1, z).getTypeID();
|
spawnState[0] = world.getBlockAt(x, y, z).getTypeID();
|
||||||
spawnState[2] = world.getBlockAt(x+1, y-1, z-1).getTypeID();
|
spawnState[1] = world.getBlockAt(x, y-1, z).getTypeID();
|
||||||
spawnState[3] = world.getBlockAt(x, y-1, z+1).getTypeID();
|
|
||||||
spawnState[4] = world.getBlockAt(x, y-1, z).getTypeID();
|
// inner ring
|
||||||
spawnState[5] = world.getBlockAt(x, y-1, z-1).getTypeID();
|
spawnState[2] = world.getBlockAt(x+1, y-1, z+1).getTypeID();
|
||||||
spawnState[6] = world.getBlockAt(x-1, y-1, z+1).getTypeID();
|
spawnState[3] = world.getBlockAt(x+1, y-1, z).getTypeID();
|
||||||
spawnState[7] = world.getBlockAt(x-1, y-1, z).getTypeID();
|
spawnState[4] = world.getBlockAt(x+1, y-1, z-1).getTypeID();
|
||||||
spawnState[8] = world.getBlockAt(x-1, y-1, z-1).getTypeID();
|
|
||||||
spawnState[9] = world.getBlockAt(x, y, z).getTypeID();
|
spawnState[5] = world.getBlockAt(x, y-1, z+1).getTypeID();
|
||||||
|
spawnState[6] = world.getBlockAt(x, y-1, z-1).getTypeID();
|
||||||
|
|
||||||
|
spawnState[7] = world.getBlockAt(x-1, y-1, z+1).getTypeID();
|
||||||
|
spawnState[8] = world.getBlockAt(x-1, y-1, z).getTypeID();
|
||||||
|
spawnState[9] = world.getBlockAt(x-1, y-1, z-1).getTypeID();
|
||||||
|
|
||||||
|
// outer ring
|
||||||
|
spawnState[10] = world.getBlockAt(x+2, y-1, z+2).getTypeID();
|
||||||
|
spawnState[11] = world.getBlockAt(x+2, y-1, z+1).getTypeID();
|
||||||
|
spawnState[12] = world.getBlockAt(x+2, y-1, z).getTypeID();
|
||||||
|
spawnState[13] = world.getBlockAt(x+2, y-1, z-1).getTypeID();
|
||||||
|
spawnState[14] = world.getBlockAt(x+2, y-1, z-2).getTypeID();
|
||||||
|
|
||||||
|
spawnState[15] = world.getBlockAt(x-1, y-1, z+2).getTypeID();
|
||||||
|
spawnState[16] = world.getBlockAt(x-1, y-1, z-2).getTypeID();
|
||||||
|
|
||||||
|
spawnState[17] = world.getBlockAt(x, y-1, z+2).getTypeID();
|
||||||
|
spawnState[18] = world.getBlockAt(x, y-1, z-2).getTypeID();
|
||||||
|
|
||||||
|
spawnState[19] = world.getBlockAt(x+1, y-1, z+2).getTypeID();
|
||||||
|
spawnState[20] = world.getBlockAt(x+1, y-1, z-2).getTypeID();
|
||||||
|
|
||||||
|
spawnState[21] = world.getBlockAt(x-2, y-1, z+2).getTypeID();
|
||||||
|
spawnState[22] = world.getBlockAt(x-2, y-1, z+1).getTypeID();
|
||||||
|
spawnState[23] = world.getBlockAt(x-2, y-1, z).getTypeID();
|
||||||
|
spawnState[24] = world.getBlockAt(x-2, y-1, z-1).getTypeID();
|
||||||
|
spawnState[25] = world.getBlockAt(x-2, y-1, z-2).getTypeID();
|
||||||
|
|
||||||
team.setTeamSpawn(location);
|
team.setTeamSpawn(location);
|
||||||
team.setOldSpawnState(spawnState);
|
team.setOldSpawnState(spawnState);
|
||||||
// Set the spawn as gold blocks
|
|
||||||
world.getBlockAt(x+1, y-1, z+1);
|
// Set the spawn
|
||||||
world.getBlockAt(x+1, y-1, z);
|
|
||||||
world.getBlockAt(x+1, y-1, z-1);
|
// first ring
|
||||||
world.getBlockAt(x, y-1, z+1);
|
world.getBlockAt(x+1, y-1, z+1).setType(Material.LightStone);
|
||||||
world.getBlockAt(x, y-1, z);
|
world.getBlockAt(x+1, y-1, z).setType(Material.LightStone);
|
||||||
world.getBlockAt(x, y-1, z-1);
|
world.getBlockAt(x+1, y-1, z-1).setType(Material.LightStone);
|
||||||
world.getBlockAt(x-1, y-1, z+1);
|
world.getBlockAt(x, y-1, z+1).setType(Material.LightStone);
|
||||||
world.getBlockAt(x-1, y-1, z);
|
world.getBlockAt(x, y-1, z).setType(Material.Stone);
|
||||||
world.getBlockAt(x-1, y-1, z-1);
|
world.getBlockAt(x, y-1, z-1).setType(Material.LightStone);
|
||||||
|
world.getBlockAt(x-1, y-1, z+1).setType(Material.LightStone);
|
||||||
|
world.getBlockAt(x-1, y-1, z).setType(Material.LightStone);
|
||||||
|
world.getBlockAt(x-1, y-1, z-1).setType(Material.LightStone);
|
||||||
|
|
||||||
|
// outer ring
|
||||||
|
//world.getBlockAt(x+2, y-1, z+2).setType(Material.Stone);
|
||||||
|
world.getBlockAt(x+2, y-1, z+1).setType(Material.Stone);
|
||||||
|
world.getBlockAt(x+2, y-1, z).setType(Material.Stone);
|
||||||
|
world.getBlockAt(x+2, y-1, z-1).setType(Material.Stone);
|
||||||
|
//world.getBlockAt(x+2, y-1, z-2).setType(Material.Stone);
|
||||||
|
|
||||||
|
world.getBlockAt(x-1, y-1, z+2).setType(Material.Stone);
|
||||||
|
world.getBlockAt(x-1, y-1, z-2).setType(Material.Stone);
|
||||||
|
|
||||||
|
world.getBlockAt(x, y-1, z+2).setType(Material.Stone);
|
||||||
|
world.getBlockAt(x, y-1, z-2).setType(Material.Stone);
|
||||||
|
|
||||||
|
world.getBlockAt(x+1, y-1, z+2).setType(Material.Stone);
|
||||||
|
world.getBlockAt(x+1, y-1, z-2).setType(Material.Stone);
|
||||||
|
|
||||||
|
//world.getBlockAt(x-2, y-1, z+2).setType(Material.Stone);
|
||||||
|
world.getBlockAt(x-2, y-1, z+1).setType(Material.Stone);
|
||||||
|
world.getBlockAt(x-2, y-1, z).setType(Material.Stone);
|
||||||
|
world.getBlockAt(x-2, y-1, z-1).setType(Material.Stone);
|
||||||
|
//world.getBlockAt(x-2, y-1, z-2).setType(Material.Stone);
|
||||||
|
|
||||||
resetSign(team);
|
resetSign(team);
|
||||||
}
|
}
|
||||||
|
17
war/src/main/java/com/tommytony/war/mappers/BlockMapper.java
Normal file
17
war/src/main/java/com/tommytony/war/mappers/BlockMapper.java
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
package com.tommytony.war.mappers;
|
||||||
|
|
||||||
|
import org.bukkit.Block;
|
||||||
|
import org.bukkit.World;
|
||||||
|
|
||||||
|
import com.tommytony.war.Volume;
|
||||||
|
import com.tommytony.war.War;
|
||||||
|
|
||||||
|
public class BlockMapper {
|
||||||
|
public static Block load(War war, World world, String key) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void save(War war, Volume volume) {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
101
war/src/main/java/com/tommytony/war/mappers/WarMapper.java
Normal file
101
war/src/main/java/com/tommytony/war/mappers/WarMapper.java
Normal file
@ -0,0 +1,101 @@
|
|||||||
|
package com.tommytony.war.mappers;
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
import com.tommytony.war.PropertiesFile;
|
||||||
|
import com.tommytony.war.War;
|
||||||
|
import com.tommytony.war.Warzone;
|
||||||
|
|
||||||
|
|
||||||
|
public class WarMapper {
|
||||||
|
|
||||||
|
public static void load(War war) {
|
||||||
|
war.getLogger().info("Loading war config...");
|
||||||
|
(new File(war.getName())).mkdir();
|
||||||
|
PropertiesFile warConfig = new PropertiesFile(war.getName() + "/war.txt");
|
||||||
|
try {
|
||||||
|
warConfig.load();
|
||||||
|
} catch (IOException e) {
|
||||||
|
war.getLogger().info("Failed to load war.txt file.");
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create file if need be
|
||||||
|
boolean newWar = false;
|
||||||
|
if(!warConfig.containsKey("warzones")) {
|
||||||
|
newWar = true;
|
||||||
|
WarMapper.save(war);
|
||||||
|
war.getLogger().info("War config file created.");
|
||||||
|
try {
|
||||||
|
warConfig.load();
|
||||||
|
} catch (IOException e) {
|
||||||
|
war.getLogger().info("Failed to reload war.txt file after creating it.");
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// warzones
|
||||||
|
String warzonesStr = warConfig.getString("warzones");
|
||||||
|
String[] warzoneSplit = warzonesStr.split(",");
|
||||||
|
war.getWarzones().clear();
|
||||||
|
for(String warzoneName : warzoneSplit) {
|
||||||
|
if(warzoneName != null && !warzoneName.equals("")){
|
||||||
|
Warzone zone = WarzoneMapper.load(war, warzoneName, !newWar); // cascade load, only load blocks if warzone exists
|
||||||
|
war.getWarzones().add(zone);
|
||||||
|
zone.resetState(); // is this wise?
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// defaultLoadout
|
||||||
|
// String defaultLoadoutStr = warConfig.getString("defaultLoadout");
|
||||||
|
// String[] defaultLoadoutSplit = defaultLoadoutStr.split(";");
|
||||||
|
// war.getDefaultLoadout().clear();
|
||||||
|
// for(String itemStr : defaultLoadoutSplit) {
|
||||||
|
// if(itemStr != null && !itemStr.equals("")) {
|
||||||
|
// String[] itemStrSplit = itemStr.split(",");
|
||||||
|
// ItemStack item = new ItemStack(Integer.parseInt(itemStrSplit[0]),
|
||||||
|
// Integer.parseInt(itemStrSplit[1]));
|
||||||
|
// war.getDefaultLoadout().add(item);
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
// defaultLifePool
|
||||||
|
war.setDefaultLifepool(warConfig.getInt("defaultLifePool"));
|
||||||
|
|
||||||
|
// defaultFriendlyFire
|
||||||
|
war.setDefaultFriendlyFire(warConfig.getBoolean("defaultFriendlyFire"));
|
||||||
|
|
||||||
|
warConfig.close();
|
||||||
|
war.getLogger().info("Loaded war config.");
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void save(War war) {
|
||||||
|
war.getLogger().info("Saving war config...");
|
||||||
|
PropertiesFile warConfig = new PropertiesFile(war.getName() + "/war.txt");
|
||||||
|
String warzonesStr = "";
|
||||||
|
|
||||||
|
// warzones
|
||||||
|
for(Warzone zone : war.getWarzones()) {
|
||||||
|
warzonesStr += zone.getName() + ",";
|
||||||
|
}
|
||||||
|
warConfig.setString("warzones", warzonesStr);
|
||||||
|
|
||||||
|
// defaultLoadout
|
||||||
|
// String defaultLoadoutStr = "";
|
||||||
|
// List<Item> items = war.getDefaultLoadout();
|
||||||
|
// for(Item item : items) {
|
||||||
|
// defaultLoadoutStr += item.getItemId() + "," + item.getAmount() + "," + item.getSlot() + ";";
|
||||||
|
// }
|
||||||
|
// warConfig.setString("defaultLoadout", defaultLoadoutStr);
|
||||||
|
|
||||||
|
// defaultLifepool
|
||||||
|
warConfig.setInt("defaultLifePool", war.getDefaultLifepool());
|
||||||
|
|
||||||
|
// defaultFriendlyFire
|
||||||
|
warConfig.setBoolean("defaultFriendlyFire", war.getDefaultFriendlyFire());
|
||||||
|
|
||||||
|
warConfig.save();
|
||||||
|
warConfig.close();
|
||||||
|
war.getLogger().info("Saved war config.");
|
||||||
|
}
|
||||||
|
}
|
327
war/src/main/java/com/tommytony/war/mappers/WarzoneMapper.java
Normal file
327
war/src/main/java/com/tommytony/war/mappers/WarzoneMapper.java
Normal file
@ -0,0 +1,327 @@
|
|||||||
|
package com.tommytony.war.mappers;
|
||||||
|
|
||||||
|
import org.bukkit.*;
|
||||||
|
|
||||||
|
import com.tommytony.war.Monument;
|
||||||
|
import com.tommytony.war.PropertiesFile;
|
||||||
|
import com.tommytony.war.Team;
|
||||||
|
import com.tommytony.war.War;
|
||||||
|
import com.tommytony.war.Warzone;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
|
||||||
|
public class WarzoneMapper {
|
||||||
|
|
||||||
|
public static Warzone load(War war, String name, boolean loadBlocks) {
|
||||||
|
war.getLogger().info("Loading warzone " + name + " config and blocks...");
|
||||||
|
PropertiesFile warzoneConfig = new PropertiesFile(war.getName() + "/warzone-" + name + ".txt");
|
||||||
|
try {
|
||||||
|
warzoneConfig.load();
|
||||||
|
} catch (IOException e) {
|
||||||
|
war.getLogger().info("Failed to load warzone-" + name + ".txt file.");
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
World[] worlds = war.getServer().getWorlds();
|
||||||
|
World world = worlds[0];
|
||||||
|
Warzone warzone = new Warzone(war, world, name);
|
||||||
|
|
||||||
|
// Create file if needed
|
||||||
|
if(!warzoneConfig.containsKey("name")) {
|
||||||
|
WarzoneMapper.save(war, warzone, false);
|
||||||
|
war.getLogger().info("Warzone " + name + " config file created.");
|
||||||
|
try {
|
||||||
|
warzoneConfig.load();
|
||||||
|
} catch (IOException e) {
|
||||||
|
war.getLogger().info("Failed to reload warzone-" + name + ".txt file after creating it.");
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// world
|
||||||
|
String worldStr = warzoneConfig.getProperty("world");
|
||||||
|
|
||||||
|
warzone.setWorld(world); // default world for now
|
||||||
|
|
||||||
|
// northwest
|
||||||
|
String nwStr = warzoneConfig.getString("northWest");
|
||||||
|
String[] nwStrSplit = nwStr.split(",");
|
||||||
|
int nwX = Integer.parseInt(nwStrSplit[0]);
|
||||||
|
int nwY = Integer.parseInt(nwStrSplit[1]);
|
||||||
|
int nwZ = Integer.parseInt(nwStrSplit[2]);
|
||||||
|
Location nw = new Location(world, nwX, nwY, nwZ);
|
||||||
|
warzone.setNorthwest(nw);
|
||||||
|
|
||||||
|
// southeast
|
||||||
|
String seStr = warzoneConfig.getString("southEast");
|
||||||
|
String[] seStrSplit = seStr.split(",");
|
||||||
|
int seX = Integer.parseInt(seStrSplit[0]);
|
||||||
|
int seY = Integer.parseInt(seStrSplit[1]);
|
||||||
|
int seZ = Integer.parseInt(seStrSplit[2]);
|
||||||
|
Location se = new Location(world, seX, seY, seZ);
|
||||||
|
warzone.setSoutheast(se);
|
||||||
|
|
||||||
|
// teleport
|
||||||
|
String teleportStr = warzoneConfig.getString("teleport");
|
||||||
|
if(teleportStr != null && !teleportStr.equals("")) {
|
||||||
|
String[] teleportSplit = teleportStr.split(",");
|
||||||
|
int teleX = Integer.parseInt(teleportSplit[0]);
|
||||||
|
int teleY = Integer.parseInt(teleportSplit[1]);
|
||||||
|
int teleZ = Integer.parseInt(teleportSplit[2]);
|
||||||
|
warzone.setTeleport(new Location(world, teleX, teleY, teleZ));
|
||||||
|
}
|
||||||
|
|
||||||
|
// teams
|
||||||
|
String teamsStr = warzoneConfig.getString("teams");
|
||||||
|
String[] teamsSplit = teamsStr.split(";");
|
||||||
|
warzone.getTeams().clear();
|
||||||
|
for(String teamStr : teamsSplit) {
|
||||||
|
if(teamStr != null && !teamStr.equals("")){
|
||||||
|
String[] teamStrSplit = teamStr.split(",");
|
||||||
|
int teamX = Integer.parseInt(teamStrSplit[1]);
|
||||||
|
int teamY = Integer.parseInt(teamStrSplit[2]);
|
||||||
|
int teamZ = Integer.parseInt(teamStrSplit[3]);
|
||||||
|
Team team = new Team(teamStrSplit[0],
|
||||||
|
new Location(world, teamX, teamY, teamZ));
|
||||||
|
team.setRemainingTickets(warzone.getLifePool());
|
||||||
|
warzone.getTeams().add(team);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ff
|
||||||
|
warzone.setFriendlyFire(warzoneConfig.getBoolean("friendlyFire"));
|
||||||
|
|
||||||
|
// loadout
|
||||||
|
// String loadoutStr = warzoneConfig.getString("loadout");
|
||||||
|
// String[] loadoutStrSplit = loadoutStr.split(";");
|
||||||
|
// warzone.getLoadout().clear();
|
||||||
|
// for(String itemStr : loadoutStrSplit) {
|
||||||
|
// if(itemStr != null && !itemStr.equals("")) {
|
||||||
|
// String[] itemStrSplit = itemStr.split(",");
|
||||||
|
// Item item = new Item(Integer.parseInt(itemStrSplit[0]),
|
||||||
|
// Integer.parseInt(itemStrSplit[1]), Integer.parseInt(itemStrSplit[2]));
|
||||||
|
// warzone.getLoadout().add(item);
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
// life pool
|
||||||
|
warzone.setLifePool(warzoneConfig.getInt("lifePool"));
|
||||||
|
|
||||||
|
// monuments
|
||||||
|
String monumentsStr = warzoneConfig.getString("monuments");
|
||||||
|
String[] monumentsSplit = monumentsStr.split(";");
|
||||||
|
warzone.getMonuments().clear();
|
||||||
|
for(String monumentStr : monumentsSplit) {
|
||||||
|
if(monumentStr != null && !monumentStr.equals("")){
|
||||||
|
String[] monumentStrSplit = monumentStr.split(",");
|
||||||
|
int monumentX = Integer.parseInt(monumentStrSplit[1]);
|
||||||
|
int monumentY = Integer.parseInt(monumentStrSplit[2]);
|
||||||
|
int monumentZ = Integer.parseInt(monumentStrSplit[3]);
|
||||||
|
Monument monument = new Monument(monumentStrSplit[0], world,
|
||||||
|
new Location(world, monumentX, monumentY, monumentZ));
|
||||||
|
warzone.getMonuments().add(monument);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
warzoneConfig.close();
|
||||||
|
|
||||||
|
if(loadBlocks) {
|
||||||
|
// zone blocks
|
||||||
|
PropertiesFile warzoneBlocksFile = new PropertiesFile(war.getName() + "/warzone-" + warzone.getName() + ".dat");
|
||||||
|
int northSouth = ((int)(warzone.getSoutheast().getBlockX())) - ((int)(warzone.getNorthwest().getBlockX()));
|
||||||
|
int eastWest = ((int)(warzone.getNorthwest().getBlockZ())) - ((int)(warzone.getSoutheast().getBlockZ()));
|
||||||
|
int minY = 0;
|
||||||
|
int maxY = 128;
|
||||||
|
int[][][] state = new int[northSouth + 6][128][eastWest + 6];
|
||||||
|
String stateStr = warzoneBlocksFile.getString("zoneBlocks");
|
||||||
|
String[] stateStrSplit = stateStr.split(",");
|
||||||
|
int splitIndex = 0;
|
||||||
|
if(stateStrSplit.length > 1000) {
|
||||||
|
for(int i = 0; i < northSouth + 3; i++){
|
||||||
|
for(int j = 0; j < 128; j++) {
|
||||||
|
for(int k = 0; k < eastWest + 3; k++) {
|
||||||
|
String currentBlockType = stateStrSplit[splitIndex];
|
||||||
|
if(currentBlockType != null && !currentBlockType.equals("")) {
|
||||||
|
state[i][j][k] = Integer.parseInt(currentBlockType);
|
||||||
|
}
|
||||||
|
splitIndex++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
warzone.setInitialState(state);
|
||||||
|
|
||||||
|
// monument blocks
|
||||||
|
for(Monument monument: warzone.getMonuments()) {
|
||||||
|
String monumentBlocksStr = warzoneBlocksFile.getString("monument"+monument.getName()+"Blocks");
|
||||||
|
String[] monumentBlocksSplit = monumentBlocksStr.split(",");
|
||||||
|
int[] monumentState = new int[10];
|
||||||
|
for(int i = 0; i < monumentBlocksSplit.length; i++) {
|
||||||
|
String split = monumentBlocksSplit[i];
|
||||||
|
if(split != null && !split.equals("")) {
|
||||||
|
monumentState[i] = Integer.parseInt(split);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
monument.setInitialState(monumentState);
|
||||||
|
}
|
||||||
|
|
||||||
|
// team spawn blocks
|
||||||
|
for(Team team : warzone.getTeams()) {
|
||||||
|
String teamBlocksStr = warzoneBlocksFile.getString("team"+team.getName()+"Blocks");
|
||||||
|
String[] teamBlocksSplit = teamBlocksStr.split(",");
|
||||||
|
int[] teamState = new int[10];
|
||||||
|
for(int i = 0; i < teamBlocksSplit.length; i++) {
|
||||||
|
String split = teamBlocksSplit[i];
|
||||||
|
if(split != null && !split.equals("")) {
|
||||||
|
teamState[i] = Integer.parseInt(split);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
team.setOldSpawnState(teamState);
|
||||||
|
}
|
||||||
|
|
||||||
|
warzoneBlocksFile.close();
|
||||||
|
war.getLogger().info("Loaded warzone " + name + " config and blocks.");
|
||||||
|
} else {
|
||||||
|
war.getLogger().info("Loaded warzone " + name + " config.");
|
||||||
|
}
|
||||||
|
|
||||||
|
return warzone;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void save(War war, Warzone warzone, boolean saveBlocks) {
|
||||||
|
PropertiesFile warzoneConfig = new PropertiesFile(war.getName() + "/warzone-" + warzone.getName() + ".txt");
|
||||||
|
war.getLogger().info("Saving warzone " + warzone.getName() + "...");
|
||||||
|
|
||||||
|
// name
|
||||||
|
warzoneConfig.setString("name", warzone.getName());
|
||||||
|
|
||||||
|
// world
|
||||||
|
warzoneConfig.setString("world", "world"); // default for now
|
||||||
|
|
||||||
|
// northwest
|
||||||
|
String nwStr = "";
|
||||||
|
Location nw = warzone.getNorthwest();
|
||||||
|
if(nw != null) {
|
||||||
|
nwStr = (int)nw.getBlockX() + "," + (int)nw.getBlockY() + "," + (int)nw.getBlockZ();
|
||||||
|
}
|
||||||
|
warzoneConfig.setString("northWest", nwStr);
|
||||||
|
|
||||||
|
// southeast
|
||||||
|
String seStr = "";
|
||||||
|
Location se = warzone.getSoutheast();
|
||||||
|
if(se != null) {
|
||||||
|
seStr = (int)se.getBlockX() + "," + (int)se.getBlockY() + "," + (int)se.getBlockZ();
|
||||||
|
}
|
||||||
|
warzoneConfig.setString("southEast", seStr);
|
||||||
|
|
||||||
|
// teleport
|
||||||
|
String teleportStr = "";
|
||||||
|
Location tele = warzone.getTeleport();
|
||||||
|
if(tele != null) {
|
||||||
|
teleportStr = (int)tele.getBlockX() + "," + (int)tele.getBlockY() + "," + (int)tele.getBlockZ();
|
||||||
|
}
|
||||||
|
warzoneConfig.setString("teleport", teleportStr);
|
||||||
|
|
||||||
|
// teams
|
||||||
|
String teamsStr = "";
|
||||||
|
List<Team> teams = warzone.getTeams();
|
||||||
|
for(Team team : teams) {
|
||||||
|
Location spawn = team.getTeamSpawn();
|
||||||
|
teamsStr += team.getName() + "," + (int)spawn.getBlockX() + "," + (int)spawn.getBlockY() + "," + (int)spawn.getBlockZ() + ";";
|
||||||
|
}
|
||||||
|
warzoneConfig.setString("teams", teamsStr);
|
||||||
|
|
||||||
|
// ff
|
||||||
|
warzoneConfig.setBoolean("firendlyFire", warzone.getFriendlyFire());
|
||||||
|
|
||||||
|
// loadout
|
||||||
|
// String loadoutStr = "";
|
||||||
|
// List<Item> items = warzone.getLoadout();
|
||||||
|
// for(Item item : items) {
|
||||||
|
// loadoutStr += item.getItemId() + "," + item.getAmount() + "," + item.getSlot() + ";";
|
||||||
|
// }
|
||||||
|
// warzoneConfig.setString("loadout", loadoutStr);
|
||||||
|
|
||||||
|
// life pool
|
||||||
|
warzoneConfig.setInt("lifePool", warzone.getLifePool());
|
||||||
|
|
||||||
|
// monuments
|
||||||
|
String monumentsStr = "";
|
||||||
|
List<Monument> monuments = warzone.getMonuments();
|
||||||
|
for(Monument monument : monuments) {
|
||||||
|
Location monumentLoc = monument.getLocation();
|
||||||
|
monumentsStr += monument.getName() + "," + (int)monumentLoc.getBlockX() + "," + (int)monumentLoc.getBlockY() + "," + (int)monumentLoc.getBlockZ() + ";";
|
||||||
|
}
|
||||||
|
warzoneConfig.setString("monuments", monumentsStr);
|
||||||
|
warzoneConfig.save();
|
||||||
|
warzoneConfig.close();
|
||||||
|
|
||||||
|
if(saveBlocks) {
|
||||||
|
// zone blocks
|
||||||
|
PropertiesFile warzoneBlocksFile = new PropertiesFile(war.getName() + "/warzone-" + warzone.getName() + ".dat");
|
||||||
|
int northSouth = warzone.getSoutheast().getBlockX() - warzone.getNorthwest().getBlockX();
|
||||||
|
int eastWest = warzone.getNorthwest().getBlockZ() - warzone.getSoutheast().getBlockZ();
|
||||||
|
int[][][] state = warzone.getInitialState();
|
||||||
|
StringBuilder stateBuilder = new StringBuilder();
|
||||||
|
int savedBlocks = 0;
|
||||||
|
if(state.length > 1) {
|
||||||
|
for(int i = 0; i < northSouth + 3; i++){
|
||||||
|
for(int j = 0; j < 128; j++) {
|
||||||
|
for(int k = 0; k < eastWest + 3; k++) {
|
||||||
|
stateBuilder.append(state[i][j][k] + ",");
|
||||||
|
savedBlocks++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
warzoneBlocksFile.setString("zoneBlocks", stateBuilder.toString());
|
||||||
|
|
||||||
|
|
||||||
|
// monument blocks
|
||||||
|
for(Monument monument: monuments) {
|
||||||
|
String monumentBlocksStr = "";
|
||||||
|
for(int type : monument.getInitialState()) {
|
||||||
|
monumentBlocksStr += type + ",";
|
||||||
|
}
|
||||||
|
warzoneBlocksFile.setString("monument"+monument.getName()+"Blocks", monumentBlocksStr);
|
||||||
|
}
|
||||||
|
|
||||||
|
// team spawn blocks
|
||||||
|
for(Team team : teams) {
|
||||||
|
String teamBlocksStr = "";
|
||||||
|
for(int type : team.getOldSpawnState()) {
|
||||||
|
teamBlocksStr += type + ",";
|
||||||
|
}
|
||||||
|
warzoneBlocksFile.setString("team"+team.getName()+"Blocks", teamBlocksStr);
|
||||||
|
}
|
||||||
|
|
||||||
|
warzoneBlocksFile.save();
|
||||||
|
warzoneBlocksFile.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
if(saveBlocks) {
|
||||||
|
war.getLogger().info("Saved warzone " + warzone.getName() + " config and blocks.");
|
||||||
|
} else {
|
||||||
|
war.getLogger().info("Saved warzone " + warzone.getName() + " config.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void delete(War war, String name) {
|
||||||
|
File warzoneConfig = new File(war.getName() + "/warzone-" + name + ".txt");
|
||||||
|
boolean deletedConfig = warzoneConfig.delete();
|
||||||
|
if(!deletedConfig) {
|
||||||
|
war.getLogger().warning("Failed to delete file " + war.getName() + "/warzone-"+name+".txt");
|
||||||
|
}
|
||||||
|
File warzoneBlocksFile = new File(war.getName() + "/warzone-" + name + ".dat");
|
||||||
|
boolean deletedData = warzoneBlocksFile.delete();
|
||||||
|
if(!deletedData) {
|
||||||
|
war.getLogger().warning("Failed to delete file " + war.getName() + "/warzone-"+name+".dat");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user