mirror of
https://github.com/IntellectualSites/PlotSquared.git
synced 2025-06-28 19:54:43 +02:00
Fixing some more things
This commit is contained in:
@ -1,158 +0,0 @@
|
||||
package com.plotsquared.sponge;
|
||||
|
||||
import com.flowpowered.math.vector.Vector3i;
|
||||
import org.spongepowered.api.block.BlockState;
|
||||
import org.spongepowered.api.block.BlockTypes;
|
||||
import org.spongepowered.api.world.World;
|
||||
import org.spongepowered.api.world.extent.ImmutableBiomeArea;
|
||||
import org.spongepowered.api.world.extent.MutableBlockVolume;
|
||||
import org.spongepowered.api.world.gen.GeneratorPopulator;
|
||||
|
||||
public class PlotGen implements GeneratorPopulator {
|
||||
|
||||
public String worldname;
|
||||
public long seed;
|
||||
|
||||
|
||||
public final int PLOT_HEIGHT = 64; // Plot height of 64
|
||||
public final int PLOT_WIDTH = 42; // Plot width of 42
|
||||
public final int ROAD_WIDTH = 7; // Road width of 7
|
||||
|
||||
public final BlockState ROAD_BLOCK = BlockTypes.QUARTZ_BLOCK.getDefaultState(); // Quartz
|
||||
public final BlockState MAIN_BLOCK = BlockTypes.STONE.getDefaultState(); // Stone
|
||||
public final BlockState WALL_BLOCK = BlockTypes.BEDROCK.getDefaultState(); // Bedrock
|
||||
public final BlockState BORDER_BLOCK = BlockTypes.STONE_SLAB.getDefaultState(); // Stone slab
|
||||
public final BlockState[] FLOOR_BLOCK = new BlockState[] {BlockTypes.GRASS.getDefaultState(), BlockTypes.SPONGE.getDefaultState()}; // Grass and sponge
|
||||
|
||||
public final int total_width;
|
||||
public final int road_width_lower;
|
||||
public final int road_width_upper;
|
||||
|
||||
/**
|
||||
* I'm using my PseudoRandom class as it's more efficient and we don't need secure randomness
|
||||
*/
|
||||
public final PseudoRandom RANDOM = new PseudoRandom();
|
||||
private SpongeMain main;
|
||||
|
||||
public PlotGen(SpongeMain main, String worldname, long seed) {
|
||||
this.main = main;
|
||||
this.worldname = worldname;
|
||||
this.seed = seed;
|
||||
|
||||
total_width = PLOT_WIDTH + ROAD_WIDTH;
|
||||
|
||||
// Calculating the bottom and top road portions (this is for a PlotSquared compatible generator, but you can have any offset you want)
|
||||
if ((ROAD_WIDTH % 2) == 0) {
|
||||
road_width_lower = ROAD_WIDTH / 2 - 1;
|
||||
} else {
|
||||
road_width_lower = ROAD_WIDTH / 2;
|
||||
}
|
||||
road_width_upper = road_width_lower + PLOT_WIDTH + 1;
|
||||
main.log("LOADED GEN FOR: " + worldname);
|
||||
}
|
||||
|
||||
/**
|
||||
* This simple pairing function is used for the seed for each chunk,
|
||||
* - This is useful if you want generation to appear random, but be the same each time
|
||||
* - You could also use a simple hash function like `return x + y * 31` - but this looks fancier
|
||||
* @param x
|
||||
* @param y
|
||||
* @return
|
||||
*/
|
||||
public int pair(int x, int y) {
|
||||
long hash;
|
||||
if (x >= 0) {
|
||||
if (y >= 0) {
|
||||
hash = (x * x) + (3 * x) + (2 * x * y) + y + (y * y) + 2;
|
||||
} else {
|
||||
final int y1 = -y;
|
||||
hash = (x * x) + (3 * x) + (2 * x * y1) + y1 + (y1 * y1) + 1;
|
||||
}
|
||||
} else {
|
||||
final int x1 = -x;
|
||||
if (y >= 0) {
|
||||
hash = -((x1 * x1) + (3 * x1) + (2 * x1 * y) + y + (y * y));
|
||||
} else {
|
||||
final int y1 = -y;
|
||||
hash = -((x1 * x1) + (3 * x1) + (2 * x1 * y1) + y1 + (y1 * y1) + 1);
|
||||
}
|
||||
}
|
||||
return (int) (hash % Integer.MAX_VALUE);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void populate(World world, MutableBlockVolume buffer, ImmutableBiomeArea biomeBase) {
|
||||
try {
|
||||
Vector3i min = buffer.getBlockMin();
|
||||
int X = min.getX();
|
||||
int Z = min.getZ();
|
||||
int cx = X >> 4;
|
||||
int cz = Z >> 4;
|
||||
main.log("POPULATING " + worldname + " | " + cx + "," + cz);
|
||||
// If you have any random elements to your generation, you will want to set the state of the random class
|
||||
RANDOM.state = pair(cx, cz);
|
||||
|
||||
// TODO set bedrock
|
||||
|
||||
// We want all plots to be the same
|
||||
// To do this we will need to reduce the coordinates to the same base location
|
||||
// To get the world coord from a chunk coord we multiply by 16 `cx << 4`
|
||||
// Then we find the remainder of that `(cx << 4) % total_width`
|
||||
// We don't want negative numbers though so add the `total_width` if the remainder is less than 0
|
||||
// We have to do this as the plot size will not necessarily have to be a multiple of 16, and so it won't always align to the chunk
|
||||
// If the total width is a multiple of 16, you can in fact make some neat optimizations, see PlotSquaredMG source for more info
|
||||
int bx = (cx << 4) % total_width + (cx < 0 ? total_width : 0);
|
||||
int bz = (cz << 4) % total_width + (cz < 0 ? total_width : 0);
|
||||
|
||||
// This is our main loop where we go over all the columns in the chunk and set the blocks
|
||||
for (int x = 0; x < 16; x++) {
|
||||
for (int z = 0; z < 16; z++) {
|
||||
// Getting the reduced coordinate
|
||||
int xx = (x + bx);
|
||||
int zz = (z + bz);
|
||||
// If it's greater than the total width, we need to reduce it
|
||||
// Although we reduced the chunk coordinates before, that only means the base coordinate of the chunk is reduced
|
||||
// The top coordinate could still be outside our desired range
|
||||
if (xx >= total_width) xx -= total_width;
|
||||
if (zz >= total_width) zz -= total_width;
|
||||
|
||||
// ROAD
|
||||
if (xx < road_width_lower || zz < road_width_lower || xx > road_width_upper || zz > road_width_upper) {
|
||||
for (int y = 0; y < PLOT_HEIGHT; y++) setBlock(buffer, X + x, y, Z + z, ROAD_BLOCK);
|
||||
}
|
||||
// WALL
|
||||
else if (xx == road_width_lower || zz == road_width_lower || xx == road_width_upper || zz == road_width_upper) {
|
||||
// Set the wall block
|
||||
for (int y = 0; y < PLOT_HEIGHT; y++) setBlock(buffer, X + x, y, Z + z, WALL_BLOCK);
|
||||
// Set the border block (on top of the wall)
|
||||
setBlock(buffer, X + x, PLOT_HEIGHT, Z + z, BORDER_BLOCK);
|
||||
}
|
||||
// PLOT
|
||||
else {
|
||||
// Set the main plot block
|
||||
for (int y = 0; y < PLOT_HEIGHT - 1; y++) setBlock(buffer, X + x, y, Z + z, MAIN_BLOCK);
|
||||
// Set the plot floor
|
||||
setBlock(buffer, X + x, PLOT_HEIGHT - 1, Z + z, FLOOR_BLOCK);
|
||||
}
|
||||
}
|
||||
}
|
||||
main.log("SUCCESS " + worldname + " | " + cx + "," + cz);
|
||||
}
|
||||
catch (Exception e) {
|
||||
// Normally if something goes wrong in your code it will fail silently with world generators
|
||||
// Having this try/catch will help recover the exception
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
public void setBlock(MutableBlockVolume buffer, int x, int y, int z, BlockState...states) {
|
||||
if (states.length == 1) {
|
||||
setBlock(buffer, x, y, z, states[0]);
|
||||
}
|
||||
setBlock(buffer, x, y, z, states[RANDOM.random(states.length)]);
|
||||
}
|
||||
|
||||
public void setBlock(MutableBlockVolume buffer, int x, int y, int z, BlockState state) {
|
||||
buffer.setBlock(x, y, z, state);
|
||||
}
|
||||
}
|
@ -1,26 +0,0 @@
|
||||
package com.plotsquared.sponge;
|
||||
|
||||
public class PseudoRandom {
|
||||
public long state = 1;
|
||||
|
||||
public long nextLong() {
|
||||
final long a = state;
|
||||
state = xorShift64(a);
|
||||
return a;
|
||||
}
|
||||
|
||||
public long xorShift64(long a) {
|
||||
a ^= (a << 21);
|
||||
a ^= (a >>> 35);
|
||||
a ^= (a << 4);
|
||||
return a;
|
||||
}
|
||||
|
||||
public int random(final int n) {
|
||||
if (n == 1) {
|
||||
return 0;
|
||||
}
|
||||
final long r = ((nextLong() >>> 32) * n) >> 32;
|
||||
return (int) r;
|
||||
}
|
||||
}
|
128
src/main/java/com/plotsquared/sponge/SpongeChunkManager.java
Normal file
128
src/main/java/com/plotsquared/sponge/SpongeChunkManager.java
Normal file
@ -0,0 +1,128 @@
|
||||
package com.plotsquared.sponge;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.spongepowered.api.data.DataContainer;
|
||||
import org.spongepowered.api.world.Chunk;
|
||||
import org.spongepowered.api.world.World;
|
||||
import org.spongepowered.api.world.storage.ChunkDataStream;
|
||||
import org.spongepowered.api.world.storage.WorldStorage;
|
||||
|
||||
import com.google.common.base.Optional;
|
||||
import com.google.common.util.concurrent.ListenableFuture;
|
||||
import com.intellectualcrafters.plot.object.ChunkLoc;
|
||||
import com.intellectualcrafters.plot.object.Location;
|
||||
import com.intellectualcrafters.plot.object.Plot;
|
||||
import com.intellectualcrafters.plot.object.PlotBlock;
|
||||
import com.intellectualcrafters.plot.object.PlotId;
|
||||
import com.intellectualcrafters.plot.util.ChunkManager;
|
||||
import com.intellectualcrafters.plot.util.TaskManager;
|
||||
import com.intellectualcrafters.plot.util.SetBlockQueue.ChunkWrapper;
|
||||
import com.plotsquared.sponge.util.SpongeUtil;
|
||||
|
||||
public class SpongeChunkManager extends ChunkManager {
|
||||
|
||||
@Override
|
||||
public void setChunk(ChunkWrapper loc, PlotBlock[][] result) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public int[] countEntities(Plot plot) {
|
||||
// TODO Auto-generated method stub
|
||||
return new int[5];
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean loadChunk(String world, ChunkLoc loc, boolean force) {
|
||||
World worldObj = SpongeUtil.getWorld(world);
|
||||
return worldObj.loadChunk(loc.x << 4, 0, loc.z << 4, force).isPresent();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean unloadChunk(String world, ChunkLoc loc, boolean save, boolean safe) {
|
||||
World worldObj = SpongeUtil.getWorld(world);
|
||||
Optional<Chunk> chunk = worldObj.getChunk(loc.x << 4, 0, loc.z << 4);
|
||||
if (chunk.isPresent()) {
|
||||
return worldObj.unloadChunk(chunk.get());
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<ChunkLoc> getChunkChunks(String world) {
|
||||
ArrayList<ChunkLoc> chunks = new ArrayList<ChunkLoc>();
|
||||
World worldObj = SpongeUtil.getWorld(world);
|
||||
ChunkDataStream storage = worldObj.getWorldStorage().getGeneratedChunks();
|
||||
while (storage.hasNext()) {
|
||||
DataContainer data = storage.next();
|
||||
|
||||
// TODO get chunk from DataContainer
|
||||
}
|
||||
return chunks;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void regenerateChunk(String world, ChunkLoc loc) {
|
||||
World worldObj = SpongeUtil.getWorld(world);
|
||||
Optional<Chunk> chunk = worldObj.getChunk(loc.x << 4, 0, loc.z << 4);
|
||||
if (chunk.isPresent()) {
|
||||
// TODO regenerate chunk
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deleteRegionFile(String world, ChunkLoc loc) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deleteRegionFiles(String world, List<ChunkLoc> chunks) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public Plot hasPlot(String world, ChunkLoc chunk) {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean copyRegion(Location pos1, Location pos2, Location newPos, Runnable whenDone) {
|
||||
// TODO Auto-generated method stub
|
||||
TaskManager.runTask(whenDone);
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean regenerateRegion(Location pos1, Location pos2, Runnable whenDone) {
|
||||
// TODO Auto-generated method stub
|
||||
TaskManager.runTask(whenDone);
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void clearAllEntities(Plot plot) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void swap(String world, PlotId id, PlotId plotid) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void swap(String worldname, Location bot1, Location top1, Location bot2, Location top2) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
}
|
@ -1,65 +0,0 @@
|
||||
package com.plotsquared.sponge;
|
||||
|
||||
import com.intellectualcrafters.plot.generator.PlotGenerator;
|
||||
import com.intellectualcrafters.plot.object.PlotCluster;
|
||||
import com.intellectualcrafters.plot.object.PlotManager;
|
||||
import com.intellectualcrafters.plot.object.PlotWorld;
|
||||
import com.intellectualcrafters.plot.object.SetupObject;
|
||||
|
||||
import org.spongepowered.api.world.gen.WorldGenerator;
|
||||
|
||||
public class SpongeGeneratorWrapper extends PlotGenerator<WorldGenerator>{
|
||||
|
||||
public SpongeGeneratorWrapper(String world, WorldGenerator generator) {
|
||||
super(world, generator);
|
||||
// TODO Auto-generated constructor stub
|
||||
}
|
||||
|
||||
@Override
|
||||
public void initialize(PlotWorld plotworld) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void augment(PlotCluster cluster, PlotWorld plotworld) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setGenerator(String generator) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public PlotWorld getNewPlotWorld(String world) {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public PlotManager getPlotManager() {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isFull() {
|
||||
// TODO Auto-generated method stub
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void processSetup(SetupObject object) {
|
||||
// TODO Auto-generated method stub
|
||||
}
|
||||
|
||||
}
|
@ -1,24 +1,29 @@
|
||||
package com.plotsquared.sponge;
|
||||
|
||||
import com.google.inject.Inject;
|
||||
import com.intellectualcrafters.configuration.ConfigurationSection;
|
||||
import com.intellectualcrafters.plot.IPlotMain;
|
||||
import com.intellectualcrafters.plot.PS;
|
||||
import com.intellectualcrafters.plot.config.C;
|
||||
import com.intellectualcrafters.plot.config.Settings;
|
||||
import com.intellectualcrafters.plot.generator.HybridUtils;
|
||||
import com.intellectualcrafters.plot.object.PlotPlayer;
|
||||
import com.intellectualcrafters.plot.util.*;
|
||||
import com.intellectualcrafters.plot.uuid.UUIDWrapper;
|
||||
import com.plotsquared.listener.APlotListener;
|
||||
import java.io.File;
|
||||
import java.lang.reflect.Field;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.nio.file.Files;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.spongepowered.api.CatalogType;
|
||||
import org.spongepowered.api.Game;
|
||||
import org.spongepowered.api.GameRegistry;
|
||||
import org.spongepowered.api.MinecraftVersion;
|
||||
import org.spongepowered.api.Server;
|
||||
import org.spongepowered.api.block.BlockState;
|
||||
import org.spongepowered.api.block.BlockType;
|
||||
import org.spongepowered.api.block.BlockTypes;
|
||||
import org.spongepowered.api.data.manipulator.block.StoneData;
|
||||
import org.spongepowered.api.entity.player.Player;
|
||||
import org.spongepowered.api.entity.player.gamemode.GameModes;
|
||||
import org.spongepowered.api.event.EventHandler;
|
||||
import org.spongepowered.api.event.Subscribe;
|
||||
import org.spongepowered.api.event.entity.player.PlayerChatEvent;
|
||||
import org.spongepowered.api.event.state.PreInitializationEvent;
|
||||
@ -26,13 +31,56 @@ import org.spongepowered.api.event.state.ServerAboutToStartEvent;
|
||||
import org.spongepowered.api.plugin.Plugin;
|
||||
import org.spongepowered.api.plugin.PluginContainer;
|
||||
import org.spongepowered.api.service.profile.GameProfileResolver;
|
||||
import org.spongepowered.api.text.Text;
|
||||
import org.spongepowered.api.text.Texts;
|
||||
import org.spongepowered.api.text.translation.Translatable;
|
||||
import org.spongepowered.api.text.translation.Translation;
|
||||
import org.spongepowered.api.world.DimensionTypes;
|
||||
import org.spongepowered.api.world.GeneratorTypes;
|
||||
import org.spongepowered.api.world.World;
|
||||
import org.spongepowered.api.world.gen.WorldGeneratorModifier;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.Collection;
|
||||
import java.util.UUID;
|
||||
import com.google.common.base.Optional;
|
||||
import com.google.inject.Inject;
|
||||
import com.intellectualcrafters.configuration.ConfigurationSection;
|
||||
import com.intellectualcrafters.plot.IPlotMain;
|
||||
import com.intellectualcrafters.plot.PS;
|
||||
import com.intellectualcrafters.plot.config.C;
|
||||
import com.intellectualcrafters.plot.config.Configuration;
|
||||
import com.intellectualcrafters.plot.config.Settings;
|
||||
import com.intellectualcrafters.plot.generator.HybridUtils;
|
||||
import com.intellectualcrafters.plot.generator.PlotGenerator;
|
||||
import com.intellectualcrafters.plot.object.PlotBlock;
|
||||
import com.intellectualcrafters.plot.object.PlotManager;
|
||||
import com.intellectualcrafters.plot.object.PlotPlayer;
|
||||
import com.intellectualcrafters.plot.object.PlotWorld;
|
||||
import com.intellectualcrafters.plot.util.AbstractTitle;
|
||||
import com.intellectualcrafters.plot.util.BlockManager;
|
||||
import com.intellectualcrafters.plot.util.ChunkManager;
|
||||
import com.intellectualcrafters.plot.util.ConsoleColors;
|
||||
import com.intellectualcrafters.plot.util.EconHandler;
|
||||
import com.intellectualcrafters.plot.util.EventUtil;
|
||||
import com.intellectualcrafters.plot.util.InventoryUtil;
|
||||
import com.intellectualcrafters.plot.util.SchematicHandler;
|
||||
import com.intellectualcrafters.plot.util.SetupUtils;
|
||||
import com.intellectualcrafters.plot.util.TaskManager;
|
||||
import com.intellectualcrafters.plot.util.UUIDHandlerImplementation;
|
||||
import com.intellectualcrafters.plot.uuid.UUIDWrapper;
|
||||
import com.plotsquared.sponge.generator.SpongeBasicGen;
|
||||
import com.plotsquared.sponge.generator.SpongeGeneratorWrapper;
|
||||
import com.plotsquared.sponge.generator.WorldModify;
|
||||
import com.plotsquared.sponge.listener.MainListener;
|
||||
import com.plotsquared.sponge.util.KillRoadMobs;
|
||||
import com.plotsquared.sponge.util.SpongeBlockManager;
|
||||
import com.plotsquared.sponge.util.SpongeCommand;
|
||||
import com.plotsquared.sponge.util.SpongeEventUtil;
|
||||
import com.plotsquared.sponge.util.SpongeInventoryUtil;
|
||||
import com.plotsquared.sponge.util.SpongeMetrics;
|
||||
import com.plotsquared.sponge.util.SpongeTaskManager;
|
||||
import com.plotsquared.sponge.util.SpongeUtil;
|
||||
import com.plotsquared.sponge.uuid.SpongeLowerOfflineUUIDWrapper;
|
||||
import com.plotsquared.sponge.uuid.SpongeOnlineUUIDWrapper;
|
||||
import com.plotsquared.sponge.uuid.SpongeUUIDHandler;
|
||||
|
||||
/**
|
||||
* Created by robin on 01/11/2014
|
||||
@ -70,7 +118,68 @@ public class SpongeMain implements IPlotMain, PluginContainer {
|
||||
}
|
||||
|
||||
public Object getPlugin() {
|
||||
return this.plugin;
|
||||
return plugin;
|
||||
}
|
||||
|
||||
public Text getText(String m) {
|
||||
return Texts.of(m);
|
||||
}
|
||||
|
||||
public Translatable getTranslation(final String m) {
|
||||
return new Translatable() {
|
||||
@Override
|
||||
public Translation getTranslation() {
|
||||
return new Translation() {
|
||||
|
||||
@Override
|
||||
public String getId() {
|
||||
return m;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String get(Locale l, Object... args) {
|
||||
return m;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String get(Locale l) {
|
||||
return m;
|
||||
}
|
||||
};
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
private PlotBlock NULL_BLOCK = new PlotBlock((short) 0, (byte) 0);
|
||||
private BlockState[][] blockMap;
|
||||
private Map<BlockState, PlotBlock> blockMapReverse;
|
||||
|
||||
public BlockState getBlockState(PlotBlock block) {
|
||||
if (blockMap[block.id] == null) {
|
||||
log("UNKNOWN BLOCK: " + block.toString());
|
||||
return null;
|
||||
}
|
||||
else if (blockMap[block.id].length <= block.data) {
|
||||
log("UNKNOWN BLOCK: " + block.toString() + " -> Using " + block.id + ":0 instead");
|
||||
return blockMap[block.id][0];
|
||||
}
|
||||
return blockMap[block.id][block.data];
|
||||
}
|
||||
|
||||
public BlockState getBlockState(int id) {
|
||||
return blockMap[id][0];
|
||||
}
|
||||
|
||||
public Collection<BlockState> getAllStates() {
|
||||
return this.blockMapReverse.keySet();
|
||||
}
|
||||
|
||||
public PlotBlock getPlotBlock(BlockState state) {
|
||||
PlotBlock val = blockMapReverse.get(state);
|
||||
if (val == null) {
|
||||
return NULL_BLOCK;
|
||||
}
|
||||
return val;
|
||||
}
|
||||
/////////
|
||||
|
||||
@ -114,43 +223,159 @@ public class SpongeMain implements IPlotMain, PluginContainer {
|
||||
log("INIT");
|
||||
THIS = this;
|
||||
|
||||
// resolver
|
||||
//
|
||||
resolver = game.getServiceManager().provide(GameProfileResolver.class).get();
|
||||
plugin = game.getPluginManager().getPlugin("PlotSquared").get().getInstance();
|
||||
log("PLUGIN IS THIS: " + (plugin == this));
|
||||
plugin = this;
|
||||
server = game.getServer();
|
||||
//
|
||||
|
||||
PS.instance = new PS(this);
|
||||
|
||||
// Set the generators for each world...
|
||||
server = game.getServer();
|
||||
Collection<World> worlds = server.getWorlds();
|
||||
if (worlds.size() > 0) {
|
||||
log("INJECTING WORLDS!!!!!!!");
|
||||
for (World world : server.getWorlds()) {
|
||||
log("INJECTING WORLD: " + world.getName());
|
||||
world.setWorldGenerator(new SpongePlotGenerator(world.getName()));
|
||||
}
|
||||
}
|
||||
// TODO Until P^2 has json chat stuff for sponge, disable this
|
||||
Settings.FANCY_CHAT = false;
|
||||
// done
|
||||
|
||||
registerBlocks();
|
||||
|
||||
ConfigurationSection worldSection = PS.get().config.getConfigurationSection("worlds");
|
||||
if (worldSection != null) {
|
||||
for (String world : worldSection.getKeys(false)) {
|
||||
this.modify = new WorldModify(this);
|
||||
|
||||
SpongeBasicGen generator = new SpongeBasicGen(world);
|
||||
PS.get().loadWorld(world, new SpongeGeneratorWrapper(world, generator));
|
||||
|
||||
this.modify = new WorldModify(generator);
|
||||
Game game = event.getGame();
|
||||
game.getRegistry().registerWorldGeneratorModifier(modify);
|
||||
game.getRegistry().getWorldBuilder()
|
||||
|
||||
Optional<World> builder = game.getRegistry().getWorldBuilder()
|
||||
.name(world)
|
||||
.enabled(true)
|
||||
.loadsOnStartup(true)
|
||||
.keepsSpawnLoaded(true)
|
||||
.dimensionType(DimensionTypes.OVERWORLD)
|
||||
.generator(GeneratorTypes.DEBUG)
|
||||
.generator(GeneratorTypes.FLAT)
|
||||
.gameMode(GameModes.CREATIVE)
|
||||
.usesMapFeatures(false)
|
||||
.generatorModifiers(modify)
|
||||
.build();
|
||||
World worldObj = builder.get();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void registerBlock(PlotBlock block, BlockState state) {
|
||||
BlockState[] val = blockMap[block.id];
|
||||
if (val == null) {
|
||||
blockMap[block.id] = new BlockState[block.data + 1];
|
||||
}
|
||||
else if (val.length <= block.data) {
|
||||
blockMap[block.id] = Arrays.copyOf(val, block.data + 1);
|
||||
}
|
||||
else if (val[block.data] != null) {
|
||||
return;
|
||||
}
|
||||
blockMap[block.id][block.data] = state;
|
||||
blockMapReverse.put(state, block);
|
||||
}
|
||||
|
||||
public PlotBlock registerBlock(BlockState state) {
|
||||
PlotBlock val = blockMapReverse.get(state);
|
||||
if (val != null) {
|
||||
return val;
|
||||
}
|
||||
byte data;
|
||||
if (blockMap[0] == null) {
|
||||
blockMap[0] = new BlockState[1];
|
||||
data = 0;
|
||||
}
|
||||
else {
|
||||
data = (byte) (blockMap[0].length);
|
||||
}
|
||||
PlotBlock block = new PlotBlock((short) 0, data);
|
||||
registerBlock(block, state);
|
||||
return block;
|
||||
}
|
||||
|
||||
public void registerBlocks() {
|
||||
blockMap = new BlockState[256][];
|
||||
blockMapReverse = new ConcurrentHashMap<BlockState, PlotBlock>();
|
||||
HashMap<String, BlockState> states = new HashMap<>();
|
||||
|
||||
PS.get().copyFile("ids.txt", "config");
|
||||
PS.get().copyFile("data.txt", "config");
|
||||
|
||||
try {
|
||||
|
||||
File id_file = new File(getDirectory(), "config" + File.separator + "ids.txt");
|
||||
List<String> id_lines = Files.readAllLines(id_file.toPath(), StandardCharsets.UTF_8);
|
||||
|
||||
File data_file = new File(getDirectory(), "config" + File.separator + "data.txt");
|
||||
List<String> data_lines = Files.readAllLines(data_file.toPath(), StandardCharsets.UTF_8);
|
||||
|
||||
Field[] fields = BlockTypes.class.getDeclaredFields();
|
||||
for (Field field : fields) {
|
||||
BlockType type = (BlockType) field.get(null);
|
||||
BlockState state = type.getDefaultState();
|
||||
if (state != null) {
|
||||
try {
|
||||
states.put(type.getId() + ":" + 0, state);
|
||||
}
|
||||
catch (Exception e) {}
|
||||
}
|
||||
}
|
||||
String packaze = "org.spongepowered.api.data.type.";
|
||||
for (int i = 0; i < data_lines.size(); i++) {
|
||||
String classname = packaze + data_lines.get(i).trim();
|
||||
try {
|
||||
Class<?> clazz = Class.forName(classname);
|
||||
fields = clazz.getDeclaredFields();
|
||||
for (Field field : fields) {
|
||||
CatalogType type = (CatalogType) field.get(null);
|
||||
String minecraft_id = type.getId();
|
||||
BlockState state = states.get(minecraft_id + ":" + 0);
|
||||
if (state == null) {
|
||||
continue;
|
||||
}
|
||||
state.getManipulator(StoneData.class);
|
||||
}
|
||||
}
|
||||
catch (Throwable e) {}
|
||||
}
|
||||
|
||||
PlotBlock block = null;
|
||||
for (int i = 0; i < id_lines.size(); i++) {
|
||||
String line = id_lines.get(i).trim();
|
||||
switch(i%3) {
|
||||
case 0: {
|
||||
block = Configuration.BLOCK.parseString(line);
|
||||
break;
|
||||
}
|
||||
case 1: {
|
||||
break;
|
||||
}
|
||||
case 2: {
|
||||
String minecraft_id = line;
|
||||
BlockState state = states.remove(minecraft_id + ":" + block.data);
|
||||
if (state == null) {
|
||||
continue;
|
||||
}
|
||||
registerBlock(block, state);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
for (Entry<String, BlockState> state : states.entrySet()) {
|
||||
log("REGISTERING: " + registerBlock(state.getValue()) + " | " + state.getValue().getType());
|
||||
}
|
||||
}
|
||||
catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
@Subscribe
|
||||
public void onPlayerChat(PlayerChatEvent event) {
|
||||
// This is how events sort of work?
|
||||
@ -160,8 +385,15 @@ public class SpongeMain implements IPlotMain, PluginContainer {
|
||||
|
||||
@Override
|
||||
public void log(String message) {
|
||||
message = ConsoleColors.fromString(message);
|
||||
logger.info(message);
|
||||
message = C.format(message, C.replacements);
|
||||
if (!Settings.CONSOLE_COLOR) {
|
||||
message = message.replaceAll('\u00a7' + "[a-z|0-9]", "");
|
||||
}
|
||||
if (server == null || server.getConsole() == null) {
|
||||
logger.info(message);
|
||||
return;
|
||||
}
|
||||
server.getConsole().sendMessage(Texts.of(message));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -191,6 +423,66 @@ public class SpongeMain implements IPlotMain, PluginContainer {
|
||||
String[] split = version.split("\\.");
|
||||
return new int[] { Integer.parseInt(split[0]), Integer.parseInt(split[1]), (split.length == 3) ? Integer.parseInt(split[2]) : 0 };
|
||||
}
|
||||
|
||||
@Override
|
||||
public InventoryUtil initInventoryUtil() {
|
||||
return new SpongeInventoryUtil();
|
||||
}
|
||||
|
||||
@Override
|
||||
public SpongeGeneratorWrapper getGenerator(String world, String name) {
|
||||
if (name == null) {
|
||||
return new SpongeGeneratorWrapper(world, null);
|
||||
}
|
||||
if (name.equals("PlotSquared")) {
|
||||
return new SpongeGeneratorWrapper(world, null);
|
||||
}
|
||||
else {
|
||||
throw new UnsupportedOperationException("NOT IMPLEMENTED YET");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public EconHandler getEconomyHandler() {
|
||||
// TODO Auto-generated method stub
|
||||
// Nothing like Vault exists yet
|
||||
PS.log("getEconomyHandler NOT IMPLEMENTED YET");
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public BlockManager initBlockManager() {
|
||||
return new SpongeBlockManager();
|
||||
}
|
||||
|
||||
@Override
|
||||
public EventUtil initEventUtil() {
|
||||
return new SpongeEventUtil();
|
||||
}
|
||||
|
||||
@Override
|
||||
public ChunkManager initChunkManager() {
|
||||
return new SpongeChunkManager();
|
||||
}
|
||||
|
||||
@Override
|
||||
public SetupUtils initSetupUtils() {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public HybridUtils initHybridUtils() {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public SchematicHandler initSchematicHandler() {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public TaskManager getTaskManager() {
|
||||
@ -199,20 +491,17 @@ public class SpongeMain implements IPlotMain, PluginContainer {
|
||||
|
||||
@Override
|
||||
public void runEntityTask() {
|
||||
// TODO Auto-generated method stub
|
||||
log("runEntityTask is not implemented!");
|
||||
new KillRoadMobs().run();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void registerCommands() {
|
||||
// TODO Auto-generated method stub
|
||||
log("registerCommands is not implemented!");
|
||||
getGame().getCommandDispatcher().register(plugin, new SpongeCommand(), "plots", "p", "plot", "ps", "plotsquared", "p2");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void registerPlayerEvents() {
|
||||
// TODO Auto-generated method stub
|
||||
log("registerPlayerEvents is not implemented!");
|
||||
game.getEventManager().register(this, new MainListener());
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -245,42 +534,6 @@ public class SpongeMain implements IPlotMain, PluginContainer {
|
||||
log("registerTNTListener is not implemented!");
|
||||
}
|
||||
|
||||
@Override
|
||||
public EconHandler getEconomyHandler() {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public BlockManager initBlockManager() {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public EventUtil initEventUtil() {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ChunkManager initChunkManager() {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public SetupUtils initSetupUtils() {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public HybridUtils initHybridUtils() {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public UUIDHandlerImplementation initUUIDHandler() {
|
||||
UUIDWrapper wrapper;
|
||||
@ -293,57 +546,33 @@ public class SpongeMain implements IPlotMain, PluginContainer {
|
||||
return new SpongeUUIDHandler(wrapper);
|
||||
}
|
||||
|
||||
@Override
|
||||
public InventoryUtil initInventoryUtil() {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean initPlotMeConverter() {
|
||||
// TODO Auto-generated method stub
|
||||
PS.log("initPlotMeConverter NOT IMPLEMENTED YET");
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void unregister(PlotPlayer player) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public SpongeGeneratorWrapper getGenerator(String world, String name) {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public APlotListener initPlotListener() {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
SpongeUtil.removePlayer(player.getName());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void registerChunkProcessor() {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
PS.log("registerChunkProcessor NOT IMPLEMENTED YET");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void registerWorldEvents() {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public PlayerManager initPlayerManager() {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
PS.log("registerWorldEvents NOT IMPLEMENTED YET");
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getServerName() {
|
||||
// TODO FIXME
|
||||
// TODO FIXME
|
||||
throw new UnsupportedOperationException("NOT IMPLEMENTED YET");
|
||||
}
|
||||
|
||||
@ -360,7 +589,11 @@ public class SpongeMain implements IPlotMain, PluginContainer {
|
||||
|
||||
@Override
|
||||
public void setGenerator(String world) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
// THIS IS DONE DURING STARTUP ALREADY
|
||||
}
|
||||
|
||||
@Override
|
||||
public AbstractTitle initTitleManager() {
|
||||
return new SpongeTitleManager();
|
||||
}
|
||||
}
|
@ -4,13 +4,17 @@ import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.UUID;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.permissions.Permission;
|
||||
import org.bukkit.permissions.PermissionDefault;
|
||||
import org.spongepowered.api.entity.player.Player;
|
||||
import org.spongepowered.api.entity.player.gamemode.GameMode;
|
||||
import org.spongepowered.api.entity.player.gamemode.GameModes;
|
||||
import org.spongepowered.api.service.permission.PermissionService;
|
||||
import org.spongepowered.api.text.Texts;
|
||||
import org.spongepowered.api.text.chat.ChatTypes;
|
||||
import org.spongepowered.api.text.title.Title;
|
||||
import org.spongepowered.api.world.World;
|
||||
|
||||
import com.flowpowered.math.vector.Vector3d;
|
||||
import com.intellectualcrafters.plot.PS;
|
||||
import com.intellectualcrafters.plot.commands.RequiredType;
|
||||
import com.intellectualcrafters.plot.config.C;
|
||||
import com.intellectualcrafters.plot.config.Settings;
|
||||
@ -18,7 +22,10 @@ import com.intellectualcrafters.plot.object.Location;
|
||||
import com.intellectualcrafters.plot.object.PlotPlayer;
|
||||
import com.intellectualcrafters.plot.util.EconHandler;
|
||||
import com.intellectualcrafters.plot.util.MainUtil;
|
||||
import com.intellectualcrafters.plot.util.PlotGamemode;
|
||||
import com.intellectualcrafters.plot.util.PlotWeather;
|
||||
import com.intellectualcrafters.plot.util.UUIDHandler;
|
||||
import com.plotsquared.sponge.util.SpongeUtil;
|
||||
|
||||
public class SpongePlayer implements PlotPlayer {
|
||||
|
||||
@ -97,12 +104,13 @@ public class SpongePlayer implements PlotPlayer {
|
||||
@Override
|
||||
public void teleport(Location loc) {
|
||||
String world = player.getWorld().getName();
|
||||
if (world != loc.getWorld()) {
|
||||
player.transferToWorld(world, new Vector3d(loc.getX(), loc.getY(), loc.getZ()));
|
||||
if (!world.equals(loc.getWorld())) {
|
||||
player.transferToWorld(loc.getWorld(), new Vector3d(loc.getX(), loc.getY(), loc.getZ()));
|
||||
}
|
||||
else {
|
||||
org.spongepowered.api.world.Location current = player.getLocation();
|
||||
player.setLocationSafely(current.setPosition(new Vector3d(loc.getX(), loc.getY(), loc.getZ())));
|
||||
current = current.setPosition(new Vector3d(loc.getX(), loc.getY(), loc.getZ()));
|
||||
player.setLocation(current);
|
||||
}
|
||||
}
|
||||
|
||||
@ -188,13 +196,10 @@ public class SpongePlayer implements PlotPlayer {
|
||||
@Override
|
||||
public boolean getAttribute(String key) {
|
||||
key = "plotsquared_user_attributes." + key;
|
||||
Permission perm = Bukkit.getServer().getPluginManager().getPermission(key);
|
||||
if (perm == null) {
|
||||
perm = new Permission(key, PermissionDefault.FALSE);
|
||||
Bukkit.getServer().getPluginManager().addPermission(perm);
|
||||
Bukkit.getServer().getPluginManager().recalculatePermissionDefaults(perm);
|
||||
}
|
||||
return player.hasPermission(key);
|
||||
|
||||
// TODO register attributes
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -202,4 +207,71 @@ public class SpongePlayer implements PlotPlayer {
|
||||
key = "plotsquared_user_attributes." + key;
|
||||
EconHandler.manager.setPermission(this, key, false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setWeather(PlotWeather weather) {
|
||||
// TODO Auto-generated method stub
|
||||
throw new UnsupportedOperationException("NOT IMPLEMENTED YET");
|
||||
}
|
||||
|
||||
@Override
|
||||
public PlotGamemode getGamemode() {
|
||||
// TODO Auto-generated method stub
|
||||
GameMode gamemode = player.getGameModeData().getValue();
|
||||
if (gamemode == GameModes.ADVENTURE) {
|
||||
return PlotGamemode.ADVENTURE;
|
||||
}
|
||||
if (gamemode == GameModes.CREATIVE) {
|
||||
return PlotGamemode.CREATIVE;
|
||||
}
|
||||
if (gamemode == GameModes.SPECTATOR) {
|
||||
return PlotGamemode.SPECTATOR;
|
||||
}
|
||||
if (gamemode == GameModes.SURVIVAL) {
|
||||
return PlotGamemode.SURVIVAL;
|
||||
}
|
||||
throw new UnsupportedOperationException("INVALID GAMEMODE");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setGamemode(PlotGamemode gamemode) {
|
||||
// TODO Auto-generated method stub
|
||||
switch (gamemode) {
|
||||
case ADVENTURE:
|
||||
player.getGameModeData().setGameMode(GameModes.ADVENTURE);
|
||||
return;
|
||||
case CREATIVE:
|
||||
player.getGameModeData().setGameMode(GameModes.CREATIVE);
|
||||
return;
|
||||
case SPECTATOR:
|
||||
player.getGameModeData().setGameMode(GameModes.SPECTATOR);
|
||||
return;
|
||||
case SURVIVAL:
|
||||
player.getGameModeData().setGameMode(GameModes.SURVIVAL);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setTime(long time) {
|
||||
// TODO Auto-generated method stub
|
||||
throw new UnsupportedOperationException("NOT IMPLEMENTED YET");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setFlight(boolean fly) {
|
||||
// TODO Auto-generated method stub
|
||||
throw new UnsupportedOperationException("NOT IMPLEMENTED YET");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void playMusic(Location loc, int id) {
|
||||
// TODO Auto-generated method stub
|
||||
throw new UnsupportedOperationException("NOT IMPLEMENTED YET");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void kick(String message) {
|
||||
player.kick(SpongeMain.THIS.getText(message));
|
||||
}
|
||||
}
|
||||
|
@ -1,50 +0,0 @@
|
||||
package com.plotsquared.sponge;
|
||||
|
||||
import org.spongepowered.api.world.gen.BiomeGenerator;
|
||||
import org.spongepowered.api.world.gen.GeneratorPopulator;
|
||||
import org.spongepowered.api.world.gen.Populator;
|
||||
import org.spongepowered.api.world.gen.WorldGenerator;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class SpongePlotGenerator implements WorldGenerator {
|
||||
|
||||
public SpongePlotGenerator(String world) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public GeneratorPopulator getBaseGeneratorPopulator() {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public BiomeGenerator getBiomeGenerator() {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<GeneratorPopulator> getGeneratorPopulators() {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Populator> getPopulators() {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setBaseGeneratorPopulator(GeneratorPopulator arg0) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setBiomeGenerator(BiomeGenerator arg0) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
}
|
15
src/main/java/com/plotsquared/sponge/SpongeTitleManager.java
Normal file
15
src/main/java/com/plotsquared/sponge/SpongeTitleManager.java
Normal file
@ -0,0 +1,15 @@
|
||||
package com.plotsquared.sponge;
|
||||
|
||||
import org.spongepowered.api.text.title.Title;
|
||||
|
||||
import com.intellectualcrafters.plot.PS;
|
||||
import com.intellectualcrafters.plot.object.PlotPlayer;
|
||||
import com.intellectualcrafters.plot.util.AbstractTitle;
|
||||
|
||||
public class SpongeTitleManager extends AbstractTitle {
|
||||
|
||||
@Override
|
||||
public void sendTitle(PlotPlayer player, String head, String sub, int in, int delay, int out) {
|
||||
((SpongePlayer) player).player.sendTitle(new Title(SpongeMain.THIS.getText(head), SpongeMain.THIS.getText(sub), in * 20, delay * 20, out * 20, false, false));
|
||||
}
|
||||
}
|
@ -1,28 +0,0 @@
|
||||
package com.plotsquared.sponge;
|
||||
|
||||
import org.spongepowered.api.entity.Entity;
|
||||
|
||||
import com.flowpowered.math.vector.Vector3d;
|
||||
import com.flowpowered.math.vector.Vector3i;
|
||||
import com.intellectualcrafters.plot.object.Location;
|
||||
import com.intellectualcrafters.plot.util.MathMan;
|
||||
|
||||
public class SpongeUtil {
|
||||
|
||||
public static Location getLocation(Entity player) {
|
||||
String world = player.getWorld().getName();
|
||||
org.spongepowered.api.world.Location loc = player.getLocation();
|
||||
Vector3i pos = loc.getBlockPosition();
|
||||
return new Location(world, pos.getX(), pos.getY(), pos.getZ());
|
||||
}
|
||||
|
||||
public static Location getLocationFull(Entity player) {
|
||||
String world = player.getWorld().getName();
|
||||
Vector3d rot = player.getRotation();
|
||||
float[] pitchYaw = MathMan.getPitchAndYaw((float) rot.getX(), (float) rot.getY(), (float) rot.getZ());
|
||||
org.spongepowered.api.world.Location loc = player.getLocation();
|
||||
Vector3i pos = loc.getBlockPosition();
|
||||
return new Location(world, pos.getX(), pos.getY(), pos.getZ(), pitchYaw[1], pitchYaw[0]);
|
||||
}
|
||||
|
||||
}
|
@ -1,29 +0,0 @@
|
||||
package com.plotsquared.sponge;
|
||||
|
||||
import org.spongepowered.api.data.DataContainer;
|
||||
import org.spongepowered.api.world.WorldCreationSettings;
|
||||
import org.spongepowered.api.world.gen.WorldGenerator;
|
||||
import org.spongepowered.api.world.gen.WorldGeneratorModifier;
|
||||
|
||||
public class WorldModify implements WorldGeneratorModifier {
|
||||
private SpongeMain main;
|
||||
|
||||
public WorldModify(SpongeMain main) {
|
||||
this.main = main;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void modifyWorldGenerator(WorldCreationSettings world, DataContainer settings, WorldGenerator worldGenerator) {
|
||||
worldGenerator.setBaseGeneratorPopulator(new PlotGen(main, world.getWorldName(), world.getSeed()));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return "PlotSquared";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getId() {
|
||||
return "PlotSquared";
|
||||
}
|
||||
}
|
@ -0,0 +1,47 @@
|
||||
package com.plotsquared.sponge.events;
|
||||
|
||||
import org.spongepowered.api.event.AbstractEvent;
|
||||
import org.spongepowered.api.event.Cancellable;
|
||||
|
||||
import com.intellectualcrafters.plot.flag.Flag;
|
||||
import com.intellectualcrafters.plot.object.PlotCluster;
|
||||
|
||||
public class ClusterFlagRemoveEvent extends AbstractEvent implements Cancellable {
|
||||
|
||||
private final PlotCluster cluster;
|
||||
private final Flag flag;
|
||||
private boolean cancelled;
|
||||
|
||||
public ClusterFlagRemoveEvent(final Flag flag, final PlotCluster cluster) {
|
||||
this.cluster = cluster;
|
||||
this.flag = flag;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the cluster involved
|
||||
*
|
||||
* @return PlotCluster
|
||||
*/
|
||||
public PlotCluster getCluster() {
|
||||
return this.cluster;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the flag involved
|
||||
*
|
||||
* @return Flag
|
||||
*/
|
||||
public Flag getFlag() {
|
||||
return this.flag;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isCancelled() {
|
||||
return cancelled;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setCancelled(boolean cancel) {
|
||||
cancelled = cancel;
|
||||
}
|
||||
}
|
@ -0,0 +1,51 @@
|
||||
package com.plotsquared.sponge.events;
|
||||
|
||||
import org.spongepowered.api.entity.player.Player;
|
||||
import org.spongepowered.api.event.Cancellable;
|
||||
|
||||
import com.intellectualcrafters.plot.object.Plot;
|
||||
|
||||
public class PlayerClaimPlotEvent extends PlayerEvent implements Cancellable {
|
||||
|
||||
private final Plot plot;
|
||||
private final boolean auto;
|
||||
private boolean cancelled;
|
||||
|
||||
/**
|
||||
* PlayerClaimPlotEvent: Called when a plot is claimed
|
||||
*
|
||||
* @param player Player that claimed the plot
|
||||
* @param plot Plot that was claimed
|
||||
*/
|
||||
public PlayerClaimPlotEvent(final Player player, final Plot plot, final boolean auto) {
|
||||
super(player);
|
||||
this.plot = plot;
|
||||
this.auto = auto;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the plot involved
|
||||
*
|
||||
* @return Plot
|
||||
*/
|
||||
public Plot getPlot() {
|
||||
return this.plot;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return true if it was an automated claim, else false
|
||||
*/
|
||||
public boolean wasAuto() {
|
||||
return this.auto;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isCancelled() {
|
||||
return cancelled;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setCancelled(boolean cancel) {
|
||||
cancelled = cancel;
|
||||
}
|
||||
}
|
@ -0,0 +1,31 @@
|
||||
package com.plotsquared.sponge.events;
|
||||
|
||||
import org.spongepowered.api.entity.player.Player;
|
||||
|
||||
import com.intellectualcrafters.plot.object.Plot;
|
||||
|
||||
public class PlayerEnterPlotEvent extends PlayerEvent {
|
||||
|
||||
private final Plot plot;
|
||||
private boolean cancelled;
|
||||
|
||||
/**
|
||||
* PlayerEnterPlotEvent: Called when a player leaves a plot
|
||||
*
|
||||
* @param player Player that entered the plot
|
||||
* @param plot Plot that was entered
|
||||
*/
|
||||
public PlayerEnterPlotEvent(final Player player, final Plot plot) {
|
||||
super(player);
|
||||
this.plot = plot;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the plot involved
|
||||
*
|
||||
* @return Plot
|
||||
*/
|
||||
public Plot getPlot() {
|
||||
return this.plot;
|
||||
}
|
||||
}
|
18
src/main/java/com/plotsquared/sponge/events/PlayerEvent.java
Normal file
18
src/main/java/com/plotsquared/sponge/events/PlayerEvent.java
Normal file
@ -0,0 +1,18 @@
|
||||
package com.plotsquared.sponge.events;
|
||||
|
||||
import org.spongepowered.api.entity.player.Player;
|
||||
import org.spongepowered.api.event.AbstractEvent;
|
||||
|
||||
public abstract class PlayerEvent extends AbstractEvent {
|
||||
|
||||
public final Player player;
|
||||
|
||||
public PlayerEvent(Player player) {
|
||||
this.player = player;
|
||||
}
|
||||
|
||||
public Player getPlayer() {
|
||||
return this.player;
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,31 @@
|
||||
package com.plotsquared.sponge.events;
|
||||
|
||||
import org.spongepowered.api.entity.player.Player;
|
||||
|
||||
import com.intellectualcrafters.plot.object.Plot;
|
||||
|
||||
public class PlayerLeavePlotEvent extends PlayerEvent {
|
||||
|
||||
private final Plot plot;
|
||||
private boolean cancelled;
|
||||
|
||||
/**
|
||||
* PlayerLeavePlotEvent: Called when a player leaves a plot
|
||||
*
|
||||
* @param player Player that left the plot
|
||||
* @param plot Plot that was left
|
||||
*/
|
||||
public PlayerLeavePlotEvent(final Player player, final Plot plot) {
|
||||
super(player);
|
||||
this.plot = plot;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the plot involved
|
||||
*
|
||||
* @return Plot
|
||||
*/
|
||||
public Plot getPlot() {
|
||||
return this.plot;
|
||||
}
|
||||
}
|
@ -0,0 +1,56 @@
|
||||
package com.plotsquared.sponge.events;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
import org.spongepowered.api.entity.player.Player;
|
||||
|
||||
import com.intellectualcrafters.plot.object.Plot;
|
||||
|
||||
public class PlayerPlotDeniedEvent extends PlotEvent {
|
||||
|
||||
private final Player initiator;
|
||||
private final boolean added;
|
||||
private final UUID player;
|
||||
|
||||
/**
|
||||
* PlayerPlotDeniedEvent: Called when the denied UUID list is modified for a plot
|
||||
*
|
||||
* @param initiator Player that initiated the event
|
||||
* @param plot Plot in which the event occurred
|
||||
* @param player Player that was denied/un-denied
|
||||
* @param added true of add to deny list, false if removed
|
||||
*/
|
||||
public PlayerPlotDeniedEvent(final Player initiator, final Plot plot, final UUID player, final boolean added) {
|
||||
super(plot);
|
||||
this.initiator = initiator;
|
||||
this.added = added;
|
||||
this.player = player;
|
||||
}
|
||||
|
||||
/**
|
||||
* If a user was added
|
||||
*
|
||||
* @return boolean
|
||||
*/
|
||||
public boolean wasAdded() {
|
||||
return this.added;
|
||||
}
|
||||
|
||||
/**
|
||||
* The player added/removed
|
||||
*
|
||||
* @return UUID
|
||||
*/
|
||||
public UUID getPlayer() {
|
||||
return this.player;
|
||||
}
|
||||
|
||||
/**
|
||||
* The player initiating the action
|
||||
*
|
||||
* @return Player
|
||||
*/
|
||||
public Player getInitiator() {
|
||||
return this.initiator;
|
||||
}
|
||||
}
|
@ -0,0 +1,56 @@
|
||||
package com.plotsquared.sponge.events;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
import org.spongepowered.api.entity.player.Player;
|
||||
|
||||
import com.intellectualcrafters.plot.object.Plot;
|
||||
|
||||
public class PlayerPlotHelperEvent extends PlotEvent {
|
||||
|
||||
private final Player initiator;
|
||||
private final boolean added;
|
||||
private final UUID player;
|
||||
|
||||
/**
|
||||
* PlayerPlotHelperEvent: Called when a plot helper is added/removed
|
||||
*
|
||||
* @param initiator Player that initiated the event
|
||||
* @param plot Plot in which the event occurred
|
||||
* @param player Player that was added/removed from the helper list
|
||||
* @param added true of the player was added, false if the player was removed
|
||||
*/
|
||||
public PlayerPlotHelperEvent(final Player initiator, final Plot plot, final UUID player, final boolean added) {
|
||||
super(plot);
|
||||
this.initiator = initiator;
|
||||
this.added = added;
|
||||
this.player = player;
|
||||
}
|
||||
|
||||
/**
|
||||
* If a user was added
|
||||
*
|
||||
* @return boolean
|
||||
*/
|
||||
public boolean wasAdded() {
|
||||
return this.added;
|
||||
}
|
||||
|
||||
/**
|
||||
* The player added/removed
|
||||
*
|
||||
* @return UUID
|
||||
*/
|
||||
public UUID getPlayer() {
|
||||
return this.player;
|
||||
}
|
||||
|
||||
/**
|
||||
* The player initiating the action
|
||||
*
|
||||
* @return Player
|
||||
*/
|
||||
public Player getInitiator() {
|
||||
return this.initiator;
|
||||
}
|
||||
}
|
@ -0,0 +1,56 @@
|
||||
package com.plotsquared.sponge.events;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
import org.spongepowered.api.entity.player.Player;
|
||||
|
||||
import com.intellectualcrafters.plot.object.Plot;
|
||||
|
||||
public class PlayerPlotTrustedEvent extends PlotEvent {
|
||||
|
||||
private final Player initiator;
|
||||
private final boolean added;
|
||||
private final UUID player;
|
||||
|
||||
/**
|
||||
* PlayerPlotTrustedEvent: Called when a plot trusted user is added/removed
|
||||
*
|
||||
* @param initiator Player that initiated the event
|
||||
* @param plot Plot in which the event occurred
|
||||
* @param player Player that was added/removed from the trusted list
|
||||
* @param added true of the player was added, false if the player was removed
|
||||
*/
|
||||
public PlayerPlotTrustedEvent(final Player initiator, final Plot plot, final UUID player, final boolean added) {
|
||||
super(plot);
|
||||
this.initiator = initiator;
|
||||
this.added = added;
|
||||
this.player = player;
|
||||
}
|
||||
|
||||
/**
|
||||
* If a user was added
|
||||
*
|
||||
* @return boolean
|
||||
*/
|
||||
public boolean wasAdded() {
|
||||
return this.added;
|
||||
}
|
||||
|
||||
/**
|
||||
* The player added/removed
|
||||
*
|
||||
* @return UUID
|
||||
*/
|
||||
public UUID getPlayer() {
|
||||
return this.player;
|
||||
}
|
||||
|
||||
/**
|
||||
* The player initiating the action
|
||||
*
|
||||
* @return Player
|
||||
*/
|
||||
public Player getInitiator() {
|
||||
return this.initiator;
|
||||
}
|
||||
}
|
@ -0,0 +1,55 @@
|
||||
package com.plotsquared.sponge.events;
|
||||
|
||||
import org.spongepowered.api.entity.player.Player;
|
||||
import org.spongepowered.api.event.Cancellable;
|
||||
|
||||
import com.intellectualcrafters.plot.object.Location;
|
||||
import com.intellectualcrafters.plot.object.Plot;
|
||||
|
||||
public class PlayerTeleportToPlotEvent extends PlayerEvent implements Cancellable {
|
||||
|
||||
private final Location from;
|
||||
private final Plot plot;
|
||||
private boolean cancelled;
|
||||
|
||||
/**
|
||||
* PlayerTeleportToPlotEvent: Called when a player teleports to a plot
|
||||
*
|
||||
* @param player That was teleported
|
||||
* @param from Start location
|
||||
* @param plot Plot to which the player was teleported
|
||||
*/
|
||||
public PlayerTeleportToPlotEvent(final Player player, final Location from, final Plot plot) {
|
||||
super(player);
|
||||
this.from = from;
|
||||
this.plot = plot;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the from location
|
||||
*
|
||||
* @return Location
|
||||
*/
|
||||
public Location getFrom() {
|
||||
return this.from;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the plot involved
|
||||
*
|
||||
* @return Plot
|
||||
*/
|
||||
public Plot getPlot() {
|
||||
return this.plot;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isCancelled() {
|
||||
return cancelled;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setCancelled(boolean cancel) {
|
||||
cancelled = cancel;
|
||||
}
|
||||
}
|
@ -0,0 +1,51 @@
|
||||
package com.plotsquared.sponge.events;
|
||||
|
||||
import org.spongepowered.api.event.AbstractEvent;
|
||||
import org.spongepowered.api.event.Cancellable;
|
||||
|
||||
import com.intellectualcrafters.plot.object.PlotId;
|
||||
|
||||
public class PlotClearEvent extends AbstractEvent implements Cancellable {
|
||||
private final PlotId id;
|
||||
private final String world;
|
||||
private boolean cancelled;
|
||||
|
||||
/**
|
||||
* PlotDeleteEvent: Called when a plot is cleared
|
||||
*
|
||||
* @param world The world in which the plot was cleared
|
||||
* @param id The plot that was cleared
|
||||
*/
|
||||
public PlotClearEvent(final String world, final PlotId id) {
|
||||
this.id = id;
|
||||
this.world = world;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the PlotId
|
||||
*
|
||||
* @return PlotId
|
||||
*/
|
||||
public PlotId getPlotId() {
|
||||
return this.id;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the world name
|
||||
*
|
||||
* @return String
|
||||
*/
|
||||
public String getWorld() {
|
||||
return this.world;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isCancelled() {
|
||||
return cancelled;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setCancelled(boolean cancel) {
|
||||
cancelled = cancel;
|
||||
}
|
||||
}
|
@ -0,0 +1,39 @@
|
||||
package com.plotsquared.sponge.events;
|
||||
|
||||
import org.spongepowered.api.event.AbstractEvent;
|
||||
|
||||
import com.intellectualcrafters.plot.object.PlotId;
|
||||
|
||||
public class PlotDeleteEvent extends AbstractEvent {
|
||||
private final PlotId id;
|
||||
private final String world;
|
||||
|
||||
/**
|
||||
* PlotDeleteEvent: Called when a plot is deleted
|
||||
*
|
||||
* @param world The world in which the plot was deleted
|
||||
* @param id The ID of the plot that was deleted
|
||||
*/
|
||||
public PlotDeleteEvent(final String world, final PlotId id) {
|
||||
this.id = id;
|
||||
this.world = world;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the PlotId
|
||||
*
|
||||
* @return PlotId
|
||||
*/
|
||||
public PlotId getPlotId() {
|
||||
return this.id;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the world name
|
||||
*
|
||||
* @return String
|
||||
*/
|
||||
public String getWorld() {
|
||||
return this.world;
|
||||
}
|
||||
}
|
19
src/main/java/com/plotsquared/sponge/events/PlotEvent.java
Normal file
19
src/main/java/com/plotsquared/sponge/events/PlotEvent.java
Normal file
@ -0,0 +1,19 @@
|
||||
package com.plotsquared.sponge.events;
|
||||
|
||||
import org.spongepowered.api.event.AbstractEvent;
|
||||
|
||||
import com.intellectualcrafters.plot.object.Plot;
|
||||
|
||||
public abstract class PlotEvent extends AbstractEvent {
|
||||
|
||||
private final Plot plot;
|
||||
|
||||
public PlotEvent(final Plot plot) {
|
||||
this.plot = plot;
|
||||
}
|
||||
|
||||
public final Plot getPlot() {
|
||||
return this.plot;
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,41 @@
|
||||
package com.plotsquared.sponge.events;
|
||||
|
||||
import org.spongepowered.api.event.Cancellable;
|
||||
|
||||
import com.intellectualcrafters.plot.flag.Flag;
|
||||
import com.intellectualcrafters.plot.object.Plot;
|
||||
|
||||
public class PlotFlagAddEvent extends PlotEvent implements Cancellable {
|
||||
private final Flag flag;
|
||||
private boolean cancelled;
|
||||
|
||||
/**
|
||||
* PlotFlagAddEvent: Called when a Flag is added to a plot
|
||||
*
|
||||
* @param flag Flag that was added
|
||||
* @param plot Plot to which the flag was added
|
||||
*/
|
||||
public PlotFlagAddEvent(final Flag flag, final Plot plot) {
|
||||
super(plot);
|
||||
this.flag = flag;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the flag involved
|
||||
*
|
||||
* @return Flag
|
||||
*/
|
||||
public Flag getFlag() {
|
||||
return this.flag;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isCancelled() {
|
||||
return cancelled;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setCancelled(boolean cancel) {
|
||||
cancelled = cancel;
|
||||
}
|
||||
}
|
@ -0,0 +1,41 @@
|
||||
package com.plotsquared.sponge.events;
|
||||
|
||||
import org.spongepowered.api.event.Cancellable;
|
||||
|
||||
import com.intellectualcrafters.plot.flag.Flag;
|
||||
import com.intellectualcrafters.plot.object.Plot;
|
||||
|
||||
public class PlotFlagRemoveEvent extends PlotEvent implements Cancellable {
|
||||
private final Flag flag;
|
||||
private boolean cancelled;
|
||||
|
||||
/**
|
||||
* PlotFlagRemoveEvent: Called when a flag is removed from a plot
|
||||
*
|
||||
* @param flag Flag that was removed
|
||||
* @param plot Plot from which the flag was removed
|
||||
*/
|
||||
public PlotFlagRemoveEvent(final Flag flag, final Plot plot) {
|
||||
super(plot);
|
||||
this.flag = flag;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the flag involved
|
||||
*
|
||||
* @return Flag
|
||||
*/
|
||||
public Flag getFlag() {
|
||||
return this.flag;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isCancelled() {
|
||||
return cancelled;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setCancelled(boolean cancel) {
|
||||
cancelled = cancel;
|
||||
}
|
||||
}
|
@ -0,0 +1,60 @@
|
||||
package com.plotsquared.sponge.events;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
import org.spongepowered.api.event.AbstractEvent;
|
||||
import org.spongepowered.api.event.Cancellable;
|
||||
import org.spongepowered.api.world.World;
|
||||
|
||||
import com.intellectualcrafters.plot.object.Plot;
|
||||
import com.intellectualcrafters.plot.object.PlotId;
|
||||
|
||||
public class PlotMergeEvent extends AbstractEvent implements Cancellable {
|
||||
private final ArrayList<PlotId> plots;
|
||||
private boolean cancelled;
|
||||
private Plot plot;
|
||||
private World world;
|
||||
|
||||
/**
|
||||
* PlotMergeEvent: Called when plots are merged
|
||||
*
|
||||
* @param world World in which the event occurred
|
||||
* @param plot Plot that was merged
|
||||
* @param plots A list of plots involved in the event
|
||||
*/
|
||||
public PlotMergeEvent(final World world, final Plot plot, final ArrayList<PlotId> plots) {
|
||||
this.plots = plots;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the plots being added;
|
||||
*
|
||||
* @return Plot
|
||||
*/
|
||||
public ArrayList<PlotId> getPlots() {
|
||||
return this.plots;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the main plot
|
||||
*
|
||||
* @return Plot
|
||||
*/
|
||||
public Plot getPlot() {
|
||||
return this.plot;
|
||||
}
|
||||
|
||||
public World getWorld() {
|
||||
return this.world;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isCancelled() {
|
||||
return cancelled;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setCancelled(boolean cancel) {
|
||||
cancelled = cancel;
|
||||
}
|
||||
}
|
@ -0,0 +1,28 @@
|
||||
package com.plotsquared.sponge.events;
|
||||
|
||||
import com.intellectualcrafters.plot.object.Plot;
|
||||
import com.intellectualcrafters.plot.object.PlotPlayer;
|
||||
import com.intellectualcrafters.plot.object.Rating;
|
||||
|
||||
public class PlotRateEvent extends PlotEvent {
|
||||
private final PlotPlayer rater;
|
||||
private Rating rating;
|
||||
|
||||
public PlotRateEvent(final PlotPlayer rater, final Rating rating, final Plot plot) {
|
||||
super(plot);
|
||||
this.rater = rater;
|
||||
this.rating = rating;
|
||||
}
|
||||
|
||||
public PlotPlayer getRater() {
|
||||
return this.rater;
|
||||
}
|
||||
|
||||
public void setRating(Rating rating) {
|
||||
this.rating = rating;
|
||||
}
|
||||
|
||||
public Rating getRating() {
|
||||
return this.rating;
|
||||
}
|
||||
}
|
@ -0,0 +1,49 @@
|
||||
package com.plotsquared.sponge.events;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
import org.spongepowered.api.event.AbstractEvent;
|
||||
import org.spongepowered.api.event.Cancellable;
|
||||
import org.spongepowered.api.world.World;
|
||||
|
||||
import com.intellectualcrafters.plot.object.PlotId;
|
||||
|
||||
public class PlotUnlinkEvent extends AbstractEvent implements Cancellable {
|
||||
private final ArrayList<PlotId> plots;
|
||||
private final World world;
|
||||
private boolean cancelled;
|
||||
|
||||
/**
|
||||
* Called when a mega-plot is unlinked.
|
||||
*
|
||||
* @param world World in which the event occurred
|
||||
* @param plots Plots that are involved in the event
|
||||
*/
|
||||
public PlotUnlinkEvent(final World world, final ArrayList<PlotId> plots) {
|
||||
this.plots = plots;
|
||||
this.world = world;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the plots involved
|
||||
*
|
||||
* @return PlotId
|
||||
*/
|
||||
public ArrayList<PlotId> getPlots() {
|
||||
return this.plots;
|
||||
}
|
||||
|
||||
public World getWorld() {
|
||||
return this.world;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isCancelled() {
|
||||
return cancelled;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setCancelled(boolean cancel) {
|
||||
cancelled = cancel;
|
||||
}
|
||||
}
|
@ -0,0 +1,38 @@
|
||||
package com.plotsquared.sponge.generator;
|
||||
|
||||
import org.spongepowered.api.world.biome.BiomeType;
|
||||
import org.spongepowered.api.world.biome.BiomeTypes;
|
||||
import org.spongepowered.api.world.extent.MutableBiomeArea;
|
||||
import org.spongepowered.api.world.gen.BiomeGenerator;
|
||||
|
||||
import com.flowpowered.math.vector.Vector2i;
|
||||
import com.intellectualcrafters.plot.object.PlotWorld;
|
||||
|
||||
public class SpongeBasicBiomeProvider implements BiomeGenerator {
|
||||
|
||||
private PlotWorld plotworld;
|
||||
|
||||
public SpongeBasicBiomeProvider(PlotWorld plotworld) {
|
||||
this.plotworld = plotworld;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void generateBiomes(MutableBiomeArea biomeBase) {
|
||||
Vector2i min = biomeBase.getBiomeMin();
|
||||
int bx = min.getX();
|
||||
int bz = min.getY();
|
||||
BiomeType biome = BiomeTypes.FOREST;
|
||||
try {
|
||||
biome = (BiomeType) BiomeTypes.class.getField(plotworld.PLOT_BIOME.toUpperCase()).get(null);
|
||||
}
|
||||
catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
for (int x = bx; x < bx + 16; x++) {
|
||||
for (int z = bz; z < bz + 16; z++) {
|
||||
biomeBase.setBiome(x, z, biome);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,135 @@
|
||||
package com.plotsquared.sponge.generator;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.spongepowered.api.block.BlockState;
|
||||
import org.spongepowered.api.block.BlockTypes;
|
||||
import org.spongepowered.api.world.gen.BiomeGenerator;
|
||||
|
||||
import com.intellectualcrafters.plot.generator.HybridPlotManager;
|
||||
import com.intellectualcrafters.plot.generator.HybridPlotWorld;
|
||||
import com.intellectualcrafters.plot.object.PlotManager;
|
||||
import com.intellectualcrafters.plot.object.PlotWorld;
|
||||
import com.plotsquared.sponge.SpongeMain;
|
||||
|
||||
public class SpongeBasicGen extends SpongePlotGenerator {
|
||||
|
||||
public final BlockState ROAD_BLOCK = BlockTypes.QUARTZ_BLOCK.getDefaultState(); // Quartz
|
||||
public final BlockState MAIN_BLOCK = BlockTypes.STONE.getDefaultState(); // Stone
|
||||
public final BlockState WALL_BLOCK = BlockTypes.BEDROCK.getDefaultState(); // Bedrock
|
||||
public final BlockState BORDER_BLOCK = BlockTypes.STONE_SLAB.getDefaultState(); // Stone slab
|
||||
public final BlockState[] FLOOR_BLOCK = new BlockState[] {BlockTypes.GRASS.getDefaultState(), BlockTypes.SPONGE.getDefaultState(), BlockTypes.PLANKS.getDefaultState() }; // Grass and sponge
|
||||
|
||||
private static HybridPlotManager manager;
|
||||
public HybridPlotWorld plotworld;
|
||||
|
||||
public SpongeBasicGen(String world) {
|
||||
super(world);
|
||||
}
|
||||
|
||||
/**
|
||||
* Some generator specific variables (implementation dependent)
|
||||
*
|
||||
* TODO USE THESE
|
||||
*
|
||||
*/
|
||||
public int plotsize;
|
||||
public int pathsize;
|
||||
public int size;
|
||||
public int roadheight;
|
||||
public int wallheight;
|
||||
public int plotheight;
|
||||
public short pathWidthLower;
|
||||
public short pathWidthUpper;
|
||||
public boolean doState = false;
|
||||
|
||||
BlockState wall;
|
||||
BlockState wallfilling;
|
||||
BlockState roadblock;
|
||||
BlockState[] plotfloors;
|
||||
BlockState[] filling;
|
||||
|
||||
@Override
|
||||
public void init(PlotWorld plotworld) {
|
||||
if (plotworld != null) {
|
||||
this.plotworld = (HybridPlotWorld) plotworld;
|
||||
}
|
||||
this.plotsize = this.plotworld.PLOT_WIDTH;
|
||||
this.pathsize = this.plotworld.ROAD_WIDTH;
|
||||
this.size = this.pathsize + this.plotsize;
|
||||
this.wallheight = this.plotworld.WALL_HEIGHT;
|
||||
this.roadheight = this.plotworld.ROAD_HEIGHT;
|
||||
this.plotheight = this.plotworld.PLOT_HEIGHT;
|
||||
if (this.pathsize == 0) {
|
||||
this.pathWidthLower = (short) -1;
|
||||
this.pathWidthUpper = (short) (this.plotsize + 1);
|
||||
}
|
||||
else {
|
||||
if ((this.pathsize % 2) == 0) {
|
||||
this.pathWidthLower = (short) (Math.floor(this.pathsize / 2) - 1);
|
||||
} else {
|
||||
this.pathWidthLower = (short) (Math.floor(this.pathsize / 2));
|
||||
}
|
||||
this.pathWidthUpper = (short) (this.pathWidthLower + this.plotsize + 1);
|
||||
}
|
||||
|
||||
this.roadblock = SpongeMain.THIS.getBlockState(this.plotworld.ROAD_BLOCK);
|
||||
this.wallfilling = SpongeMain.THIS.getBlockState(this.plotworld.WALL_FILLING);
|
||||
this.wall = SpongeMain.THIS.getBlockState(this.plotworld.WALL_BLOCK);
|
||||
this.plotfloors = new BlockState[this.plotworld.TOP_BLOCK.length];
|
||||
for (int i = 0; i < this.plotworld.TOP_BLOCK.length; i++) {
|
||||
this.plotfloors[i] = SpongeMain.THIS.getBlockState(this.plotworld.TOP_BLOCK[i]);
|
||||
}
|
||||
this.filling = new BlockState[this.plotworld.MAIN_BLOCK.length];
|
||||
for (int i = 0; i < this.plotworld.MAIN_BLOCK.length; i++) {
|
||||
this.filling[i] = SpongeMain.THIS.getBlockState(this.plotworld.MAIN_BLOCK[i]);
|
||||
}
|
||||
if ((this.filling.length > 1) || (this.plotfloors.length > 1)) {
|
||||
this.doState = true;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public PlotWorld getNewPlotWorld(String world) {
|
||||
if (this.plotworld == null) {
|
||||
this.plotworld = new HybridPlotWorld(world);
|
||||
}
|
||||
return this.plotworld;
|
||||
}
|
||||
|
||||
@Override
|
||||
public PlotManager getPlotManager() {
|
||||
if (SpongeBasicGen.manager == null) {
|
||||
SpongeBasicGen.manager = new HybridPlotManager();
|
||||
}
|
||||
return SpongeBasicGen.manager;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<SpongePlotPopulator> getPlotPopulators() {
|
||||
// TODO Auto-generated method stub
|
||||
return new ArrayList<>();
|
||||
}
|
||||
|
||||
private SpongeBasicPop generator;
|
||||
|
||||
@Override
|
||||
public SpongePlotPopulator getGenerator() {
|
||||
if (generator == null) {
|
||||
generator = new SpongeBasicPop(this);
|
||||
}
|
||||
return generator;
|
||||
}
|
||||
|
||||
private BiomeGenerator biome;
|
||||
|
||||
@Override
|
||||
public BiomeGenerator getPlotBiomeProvider() {
|
||||
if (biome == null) {
|
||||
biome = new SpongeBasicBiomeProvider(plotworld);
|
||||
}
|
||||
return biome;
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,99 @@
|
||||
package com.plotsquared.sponge.generator;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
|
||||
import org.spongepowered.api.world.World;
|
||||
|
||||
import com.intellectualcrafters.plot.object.PlotBlock;
|
||||
import com.intellectualcrafters.plot.object.PlotLoc;
|
||||
import com.intellectualcrafters.plot.object.PseudoRandom;
|
||||
import com.intellectualcrafters.plot.object.RegionWrapper;
|
||||
import com.intellectualcrafters.plot.object.schematic.PlotItem;
|
||||
import com.intellectualcrafters.plot.util.BlockManager;
|
||||
import com.plotsquared.sponge.SpongeMain;
|
||||
|
||||
public class SpongeBasicPop extends SpongePlotPopulator<SpongeBasicGen> {
|
||||
|
||||
public SpongeBasicPop(SpongeBasicGen generator) {
|
||||
super(generator);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void populate(World world, RegionWrapper requiredRegion, PseudoRandom random, int cx, int cz) {
|
||||
int sx = (short) ((this.X - generator.plotworld.ROAD_OFFSET_X) % generator.size);
|
||||
int sz = (short) ((this.Z - generator.plotworld.ROAD_OFFSET_Z) % generator.size);
|
||||
if (sx < 0) {
|
||||
sx += generator.size;
|
||||
}
|
||||
if (sz < 0) {
|
||||
sz += generator.size;
|
||||
}
|
||||
|
||||
for (short x = 0; x < 16; x++) {
|
||||
for (short z = 0; z < 16; z++) {
|
||||
final int absX = ((sx + x) % generator.size);
|
||||
final int absZ = ((sz + z) % generator.size);
|
||||
final boolean gx = absX > generator.pathWidthLower;
|
||||
final boolean gz = absZ > generator.pathWidthLower;
|
||||
final boolean lx = absX < generator.pathWidthUpper;
|
||||
final boolean lz = absZ < generator.pathWidthUpper;
|
||||
// inside plot
|
||||
if (gx && gz && lx && lz) {
|
||||
for (short y = 1; y < generator.plotheight; y++) {
|
||||
setBlock(x, y, z, generator.filling);
|
||||
}
|
||||
setBlock(x, (short) generator.plotheight, z, generator.plotfloors);
|
||||
if (generator.plotworld.PLOT_SCHEMATIC) {
|
||||
final PlotLoc loc = new PlotLoc(absX, absZ);
|
||||
final HashMap<Short, Short> blocks = generator.plotworld.G_SCH.get(loc);
|
||||
if (blocks != null) {
|
||||
final HashMap<Short, Byte> datas = generator.plotworld.G_SCH_DATA.get(loc);
|
||||
for (final short y : blocks.keySet()) {
|
||||
Byte data = datas.get(y);
|
||||
setBlock(x, (short) (generator.plotheight + y), z, SpongeMain.THIS.getBlockState(new PlotBlock(blocks.get(y), data == null ? 0 : data)));
|
||||
}
|
||||
}
|
||||
if (generator.plotworld.G_SCH_STATE != null) {
|
||||
HashSet<PlotItem> states = generator.plotworld.G_SCH_STATE.get(loc);
|
||||
if (states != null) {
|
||||
for (PlotItem items : states) {
|
||||
items.x = this.X + x;
|
||||
items.z = this.Z + z;
|
||||
BlockManager.manager.addItems(generator.plotworld.worldname, items);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} else if (generator.pathsize != 0) {
|
||||
// wall
|
||||
if (((absX >= generator.pathWidthLower) && (absX <= generator.pathWidthUpper) && (absZ >= generator.pathWidthLower) && (absZ <= generator.pathWidthUpper))) {
|
||||
for (short y = 1; y <= generator.wallheight; y++) {
|
||||
setBlock(x, y, z, generator.wallfilling);
|
||||
}
|
||||
if (!generator.plotworld.ROAD_SCHEMATIC_ENABLED) {
|
||||
setBlock(x, generator.wallheight + 1, z, generator.wall);
|
||||
}
|
||||
}
|
||||
// road
|
||||
else {
|
||||
for (short y = 1; y <= generator.roadheight; y++) {
|
||||
setBlock(x, y, z, generator.roadblock);
|
||||
}
|
||||
}
|
||||
if (generator.plotworld.ROAD_SCHEMATIC_ENABLED) {
|
||||
final PlotLoc loc = new PlotLoc(absX, absZ);
|
||||
final HashMap<Short, Short> blocks = generator.plotworld.G_SCH.get(loc);
|
||||
if (blocks != null) {
|
||||
final HashMap<Short, Byte> datas = generator.plotworld.G_SCH_DATA.get(loc);
|
||||
for (final short y : blocks.keySet()) {
|
||||
Byte data = datas.get(y);
|
||||
setBlock(x, (short) (generator.plotheight + y), z, SpongeMain.THIS.getBlockState(new PlotBlock(blocks.get(y), data == null ? 0 : data)));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,91 @@
|
||||
package com.plotsquared.sponge.generator;
|
||||
|
||||
import org.spongepowered.api.world.gen.WorldGenerator;
|
||||
|
||||
import com.intellectualcrafters.plot.PS;
|
||||
import com.intellectualcrafters.plot.generator.PlotGenerator;
|
||||
import com.intellectualcrafters.plot.object.PlotCluster;
|
||||
import com.intellectualcrafters.plot.object.PlotManager;
|
||||
import com.intellectualcrafters.plot.object.PlotWorld;
|
||||
import com.intellectualcrafters.plot.object.SetupObject;
|
||||
|
||||
public class SpongeGeneratorWrapper extends PlotGenerator<WorldGenerator>{
|
||||
|
||||
public final boolean full;
|
||||
|
||||
public SpongeGeneratorWrapper(String world, WorldGenerator generator) {
|
||||
super(world, generator);
|
||||
full = (generator instanceof SpongePlotGenerator);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void initialize(PlotWorld plotworld) {
|
||||
if (generator instanceof SpongePlotGenerator) {
|
||||
((SpongePlotGenerator) generator).init(plotworld);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void augment(PlotCluster cluster, PlotWorld plotworld) {
|
||||
if (generator instanceof SpongePlotGenerator) {
|
||||
SpongePlotGenerator plotgen = (SpongePlotGenerator) generator;
|
||||
if (cluster != null) {
|
||||
// TODO Augment partial
|
||||
throw new UnsupportedOperationException("NOT IMPLEMENTED YET");
|
||||
}
|
||||
else {
|
||||
// TODO augment full
|
||||
throw new UnsupportedOperationException("NOT IMPLEMENTED YET");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setGenerator(String gen_string) {
|
||||
if (gen_string == null) {
|
||||
generator = new SpongeBasicGen(world);
|
||||
} else {
|
||||
PlotGenerator<WorldGenerator> gen_wrapper = (PlotGenerator<WorldGenerator>) PS.get().IMP.getGenerator(world, gen_string);
|
||||
if (gen_wrapper != null) {
|
||||
generator = gen_wrapper.generator;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public PlotWorld getNewPlotWorld(String world) {
|
||||
if (!(generator instanceof SpongePlotGenerator)) {
|
||||
return null;
|
||||
}
|
||||
return ((SpongePlotGenerator) generator).getNewPlotWorld(world);
|
||||
}
|
||||
|
||||
@Override
|
||||
public PlotManager getPlotManager() {
|
||||
if (!(generator instanceof SpongePlotGenerator)) {
|
||||
return null;
|
||||
}
|
||||
return ((SpongePlotGenerator) generator).getPlotManager();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isFull() {
|
||||
return full;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
if (generator == null) {
|
||||
return "Null";
|
||||
}
|
||||
return generator.getClass().getName();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void processSetup(SetupObject object) {
|
||||
if (generator instanceof SpongePlotGenerator) {
|
||||
((SpongePlotGenerator) generator).processSetup(object);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,91 @@
|
||||
package com.plotsquared.sponge.generator;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.spongepowered.api.world.gen.BiomeGenerator;
|
||||
import org.spongepowered.api.world.gen.GeneratorPopulator;
|
||||
import org.spongepowered.api.world.gen.Populator;
|
||||
import org.spongepowered.api.world.gen.WorldGenerator;
|
||||
|
||||
import com.intellectualcrafters.plot.object.PlotManager;
|
||||
import com.intellectualcrafters.plot.object.PlotWorld;
|
||||
import com.intellectualcrafters.plot.object.SetupObject;
|
||||
|
||||
public abstract class SpongePlotGenerator implements WorldGenerator {
|
||||
|
||||
public final String world;
|
||||
|
||||
public SpongePlotGenerator(String world) {
|
||||
this.world = world;
|
||||
}
|
||||
|
||||
@Override
|
||||
public GeneratorPopulator getBaseGeneratorPopulator() {
|
||||
return getGenerator();
|
||||
}
|
||||
|
||||
@Override
|
||||
public BiomeGenerator getBiomeGenerator() {
|
||||
return getPlotBiomeProvider();
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<GeneratorPopulator> getGeneratorPopulators() {
|
||||
List<GeneratorPopulator> pops = new ArrayList<>();
|
||||
pops.addAll(this.getPlotPopulators());
|
||||
return pops;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Populator> getPopulators() {
|
||||
return new ArrayList<>();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setBaseGeneratorPopulator(GeneratorPopulator arg0) {
|
||||
// TODO Auto-generated method stub
|
||||
throw new UnsupportedOperationException("NOT IMPLEMENTED YET");
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setBiomeGenerator(BiomeGenerator biomeGenerator) {
|
||||
// TODO
|
||||
throw new UnsupportedOperationException("NOT IMPLEMENTED YET");
|
||||
}
|
||||
|
||||
public abstract SpongePlotPopulator getGenerator();
|
||||
|
||||
public abstract BiomeGenerator getPlotBiomeProvider();
|
||||
|
||||
public abstract List<SpongePlotPopulator> getPlotPopulators();
|
||||
|
||||
/**
|
||||
* This is called when the generator is initialized.
|
||||
* You don't need to do anything with it necessarily.
|
||||
* @param plotworld
|
||||
*/
|
||||
public abstract void init(PlotWorld plotworld);
|
||||
|
||||
/**
|
||||
* Return a new instance of the PlotWorld for a world
|
||||
* @param world
|
||||
* @return
|
||||
*/
|
||||
public abstract PlotWorld getNewPlotWorld(final String world);
|
||||
|
||||
/**
|
||||
* Get the PlotManager class for this generator
|
||||
* @return
|
||||
*/
|
||||
public abstract PlotManager getPlotManager();
|
||||
|
||||
/**
|
||||
* If you need to do anything fancy for /plot setup<br>
|
||||
* - Otherwise it will just use the PlotWorld configuration<br>
|
||||
* Feel free to extend BukkitSetupUtils and customize world creation
|
||||
* @param object
|
||||
*/
|
||||
public void processSetup(SetupObject object) {}
|
||||
}
|
@ -0,0 +1,97 @@
|
||||
package com.plotsquared.sponge.generator;
|
||||
|
||||
import org.spongepowered.api.block.BlockState;
|
||||
import org.spongepowered.api.world.World;
|
||||
import org.spongepowered.api.world.extent.ImmutableBiomeArea;
|
||||
import org.spongepowered.api.world.extent.MutableBlockVolume;
|
||||
import org.spongepowered.api.world.gen.GeneratorPopulator;
|
||||
|
||||
import com.flowpowered.math.vector.Vector3i;
|
||||
import com.intellectualcrafters.plot.PS;
|
||||
import com.intellectualcrafters.plot.object.PseudoRandom;
|
||||
import com.intellectualcrafters.plot.object.RegionWrapper;
|
||||
import com.intellectualcrafters.plot.util.ChunkManager;
|
||||
|
||||
public abstract class SpongePlotPopulator<T extends SpongePlotGenerator> implements GeneratorPopulator {
|
||||
|
||||
public int X;
|
||||
public int Z;
|
||||
public String worldname;
|
||||
private World world;
|
||||
private PseudoRandom random = new PseudoRandom();
|
||||
private MutableBlockVolume buffer;
|
||||
public final T generator;
|
||||
|
||||
public SpongePlotPopulator(T generator) {
|
||||
this.generator = generator;
|
||||
}
|
||||
|
||||
// @Override
|
||||
// public void populate(Chunk chunk, Random random) {
|
||||
// this.world = chunk.getWorld();
|
||||
// this.worldname = world.getName();
|
||||
// Vector3i min = chunk.getBlockMin();
|
||||
|
||||
// }
|
||||
|
||||
public void populate(World world, MutableBlockVolume buffer, ImmutableBiomeArea biomeBase) {
|
||||
try {
|
||||
this.world = world;
|
||||
this.worldname = world.getName();
|
||||
this.buffer = buffer;
|
||||
Vector3i min = buffer.getBlockMin();
|
||||
this.X = min.getX();
|
||||
this.Z = min.getZ();
|
||||
int cx = X >> 4;
|
||||
int cz = Z >> 4;
|
||||
int h = 1;
|
||||
final int prime = 13;
|
||||
h = (prime * h) + cx;
|
||||
h = (prime * h) + cz;
|
||||
this.random.state = h;
|
||||
|
||||
// TODO plot clearing stuff
|
||||
|
||||
populate(world, ChunkManager.CURRENT_PLOT_CLEAR, random, cx, cz);
|
||||
}
|
||||
catch (Exception e) {
|
||||
PS.debug("ERROR GENERATING CHUNK!");
|
||||
e.printStackTrace();
|
||||
}
|
||||
};
|
||||
|
||||
public abstract void populate(World world, RegionWrapper requiredRegion, PseudoRandom random, int cx, int cz);
|
||||
|
||||
/**
|
||||
* Set the id and data at a location. (x, y, z) must be between [0,15], [0,255], [0,15]
|
||||
* @param x
|
||||
* @param y
|
||||
* @param z
|
||||
* @param id
|
||||
* @param data
|
||||
*/
|
||||
public void setBlock(int x, int y, int z, BlockState state) {
|
||||
buffer.setBlock(X + x, y, Z + z, state);
|
||||
}
|
||||
|
||||
public void setBlock(int x, int y, int z, BlockState[] states) {
|
||||
if (states.length == 1) {
|
||||
setBlock(x,y,z,states[0]);
|
||||
}
|
||||
setBlock(x,y,z,states[random.random(states.length)]);
|
||||
}
|
||||
|
||||
/**
|
||||
* check if a region contains a location. (x, z) must be between [0,15], [0,15]
|
||||
* @param plot
|
||||
* @param x
|
||||
* @param z
|
||||
* @return
|
||||
*/
|
||||
public boolean contains(final RegionWrapper plot, final int x, final int z) {
|
||||
int xx = X + x;
|
||||
int zz = Z + z;
|
||||
return ((xx >= plot.minX) && (xx <= plot.maxX) && (zz >= plot.minZ) && (zz <= plot.maxZ));
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,40 @@
|
||||
package com.plotsquared.sponge.generator;
|
||||
|
||||
import org.spongepowered.api.data.DataContainer;
|
||||
import org.spongepowered.api.world.WorldCreationSettings;
|
||||
import org.spongepowered.api.world.gen.WorldGenerator;
|
||||
import org.spongepowered.api.world.gen.WorldGeneratorModifier;
|
||||
import org.spongepowered.common.world.gen.SpongeWorldGenerator;
|
||||
|
||||
import com.intellectualcrafters.plot.PS;
|
||||
import com.plotsquared.sponge.SpongeMain;
|
||||
|
||||
public class WorldModify implements WorldGeneratorModifier {
|
||||
|
||||
private SpongePlotGenerator plotgen;
|
||||
|
||||
public WorldModify(SpongePlotGenerator plotgen) {
|
||||
this.plotgen = plotgen;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void modifyWorldGenerator(WorldCreationSettings world, DataContainer settings, WorldGenerator gen) {
|
||||
gen.setBaseGeneratorPopulator(plotgen.getBaseGeneratorPopulator());
|
||||
gen.setBiomeGenerator(plotgen.getBiomeGenerator());
|
||||
// if (gen instanceof SpongeWorldGenerator) {
|
||||
// SpongePlotGenerator plotgen = (SpongePlotGenerator) gen;
|
||||
// plotgen.setBaseGeneratorPopulator(plotgen.getGenerator());
|
||||
// plotgen.setBiomeGenerator(plotgen.getPlotBiomeProvider());
|
||||
// }
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return "PlotSquared";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getId() {
|
||||
return "PlotSquared";
|
||||
}
|
||||
}
|
836
src/main/java/com/plotsquared/sponge/listener/MainListener.java
Normal file
836
src/main/java/com/plotsquared/sponge/listener/MainListener.java
Normal file
@ -0,0 +1,836 @@
|
||||
package com.plotsquared.sponge.listener;
|
||||
|
||||
import static com.intellectualcrafters.plot.object.StaticStrings.PERMISSION_ADMIN_BUILD_OTHER;
|
||||
import static com.intellectualcrafters.plot.object.StaticStrings.PERMISSION_ADMIN_BUILD_ROAD;
|
||||
import static com.intellectualcrafters.plot.object.StaticStrings.PERMISSION_ADMIN_BUILD_UNOWNED;
|
||||
import static com.intellectualcrafters.plot.object.StaticStrings.PERMISSION_ADMIN_DESTROY_OTHER;
|
||||
import static com.intellectualcrafters.plot.object.StaticStrings.PERMISSION_ADMIN_DESTROY_ROAD;
|
||||
import static com.intellectualcrafters.plot.object.StaticStrings.PERMISSION_ADMIN_DESTROY_UNOWNED;
|
||||
import static com.intellectualcrafters.plot.object.StaticStrings.PERMISSION_ADMIN_ENTRY_DENIED;
|
||||
import static com.intellectualcrafters.plot.object.StaticStrings.PERMISSION_ADMIN_EXIT_DENIED;
|
||||
import static com.intellectualcrafters.plot.object.StaticStrings.PERMISSION_ADMIN_INTERACT_OTHER;
|
||||
import static com.intellectualcrafters.plot.object.StaticStrings.PERMISSION_ADMIN_INTERACT_ROAD;
|
||||
import static com.intellectualcrafters.plot.object.StaticStrings.PERMISSION_ADMIN_INTERACT_UNOWNED;
|
||||
import static com.intellectualcrafters.plot.object.StaticStrings.PERMISSION_COMMANDS_CHAT;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
|
||||
import org.spongepowered.api.block.BlockState;
|
||||
import org.spongepowered.api.entity.Entity;
|
||||
import org.spongepowered.api.entity.EntityTypes;
|
||||
import org.spongepowered.api.entity.player.Player;
|
||||
import org.spongepowered.api.event.Cancellable;
|
||||
import org.spongepowered.api.event.Subscribe;
|
||||
import org.spongepowered.api.event.block.BlockMoveEvent;
|
||||
import org.spongepowered.api.event.block.BlockRedstoneUpdateEvent;
|
||||
import org.spongepowered.api.event.block.FloraGrowEvent;
|
||||
import org.spongepowered.api.event.entity.EntityChangeBlockEvent;
|
||||
import org.spongepowered.api.event.entity.EntityExplosionEvent;
|
||||
import org.spongepowered.api.event.entity.EntitySpawnEvent;
|
||||
import org.spongepowered.api.event.entity.EntityTeleportEvent;
|
||||
import org.spongepowered.api.event.entity.player.PlayerBreakBlockEvent;
|
||||
import org.spongepowered.api.event.entity.player.PlayerChangeWorldEvent;
|
||||
import org.spongepowered.api.event.entity.player.PlayerChatEvent;
|
||||
import org.spongepowered.api.event.entity.player.PlayerInteractBlockEvent;
|
||||
import org.spongepowered.api.event.entity.player.PlayerJoinEvent;
|
||||
import org.spongepowered.api.event.entity.player.PlayerMessageEvent;
|
||||
import org.spongepowered.api.event.entity.player.PlayerMoveEvent;
|
||||
import org.spongepowered.api.event.entity.player.PlayerPlaceBlockEvent;
|
||||
import org.spongepowered.api.event.entity.player.PlayerQuitEvent;
|
||||
import org.spongepowered.api.event.message.CommandEvent;
|
||||
import org.spongepowered.api.event.network.PlayerConnectionEvent;
|
||||
import org.spongepowered.api.event.world.ChunkLoadEvent;
|
||||
import org.spongepowered.api.event.world.ChunkPreGenerateEvent;
|
||||
import org.spongepowered.api.event.world.ChunkPrePopulateEvent;
|
||||
import org.spongepowered.api.network.PlayerConnection;
|
||||
import org.spongepowered.api.text.Text;
|
||||
import org.spongepowered.api.text.Texts;
|
||||
import org.spongepowered.api.util.command.CommandSource;
|
||||
import org.spongepowered.api.util.event.callback.EventCallback;
|
||||
import org.spongepowered.api.world.World;
|
||||
import org.spongepowered.api.world.extent.Extent;
|
||||
|
||||
import com.flowpowered.math.vector.Vector3d;
|
||||
import com.flowpowered.math.vector.Vector3i;
|
||||
import com.google.common.base.Predicate;
|
||||
import com.intellectualcrafters.plot.PS;
|
||||
import com.intellectualcrafters.plot.config.C;
|
||||
import com.intellectualcrafters.plot.config.Settings;
|
||||
import com.intellectualcrafters.plot.database.DBFunc;
|
||||
import com.intellectualcrafters.plot.flag.Flag;
|
||||
import com.intellectualcrafters.plot.flag.FlagManager;
|
||||
import com.intellectualcrafters.plot.object.Location;
|
||||
import com.intellectualcrafters.plot.object.Plot;
|
||||
import com.intellectualcrafters.plot.object.PlotBlock;
|
||||
import com.intellectualcrafters.plot.object.PlotId;
|
||||
import com.intellectualcrafters.plot.object.PlotManager;
|
||||
import com.intellectualcrafters.plot.object.PlotPlayer;
|
||||
import com.intellectualcrafters.plot.object.PlotWorld;
|
||||
import com.intellectualcrafters.plot.object.StringWrapper;
|
||||
import com.intellectualcrafters.plot.util.EventUtil;
|
||||
import com.intellectualcrafters.plot.util.ExpireManager;
|
||||
import com.intellectualcrafters.plot.util.MainUtil;
|
||||
import com.intellectualcrafters.plot.util.Permissions;
|
||||
import com.intellectualcrafters.plot.util.StringMan;
|
||||
import com.intellectualcrafters.plot.util.TaskManager;
|
||||
import com.intellectualcrafters.plot.util.UUIDHandler;
|
||||
import com.plotsquared.bukkit.object.BukkitPlayer;
|
||||
import com.plotsquared.listener.PlotListener;
|
||||
import com.plotsquared.sponge.SpongeMain;
|
||||
import com.plotsquared.sponge.SpongePlayer;
|
||||
import com.plotsquared.sponge.util.SpongeUtil;
|
||||
|
||||
public class MainListener {
|
||||
|
||||
/*
|
||||
* TODO:
|
||||
* - Anything marked with a TODO below
|
||||
* - BlockSpreadEvent
|
||||
* - BlockPhysicsEvent
|
||||
* - BlockFormEvent
|
||||
* - BlockFadeEvent
|
||||
* - BlockFromToEvent
|
||||
* - BlockDamageEvent
|
||||
* - Structure (tree etc)
|
||||
* - Per plot mob caps
|
||||
* - PlayerIgniteBlockEvent
|
||||
* - PlayerBucketEmptyEvent
|
||||
* - PlayerBucketFillEvent
|
||||
* - VehicleCreateEvent
|
||||
* - HangingPlaceEvent
|
||||
* - HangingBreakEvent
|
||||
* - PVP
|
||||
* - PVE
|
||||
* - VehicleDestroy
|
||||
* - Projectile
|
||||
*/
|
||||
|
||||
@Subscribe
|
||||
public void onMobSpawn(EntitySpawnEvent event) {
|
||||
Entity entity = event.getEntity();
|
||||
if (entity instanceof Player) {
|
||||
return;
|
||||
}
|
||||
final Location loc = SpongeUtil.getLocation(event.getLocation());
|
||||
final String world = loc.getWorld();
|
||||
if (!PS.get().isPlotWorld(world)) {
|
||||
return;
|
||||
}
|
||||
Plot plot = MainUtil.getPlot(loc);
|
||||
if (plot == null) {
|
||||
if (MainUtil.isPlotRoad(loc)) {
|
||||
event.setCancelled(true);
|
||||
}
|
||||
return;
|
||||
}
|
||||
final PlotWorld pW = PS.get().getPlotWorld(world);
|
||||
|
||||
// TODO selectively cancel depending on spawn reason
|
||||
// - Not sure if possible to get spawn reason (since there are no callbacks)
|
||||
|
||||
event.setCancelled(true);
|
||||
}
|
||||
|
||||
@Subscribe
|
||||
public void onBlockChange(EntityChangeBlockEvent event) {
|
||||
Entity entity = event.getEntity();
|
||||
if (entity.getType() == EntityTypes.PLAYER) {
|
||||
return;
|
||||
}
|
||||
if (PS.get().isPlotWorld(entity.getWorld().getName())) {
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
|
||||
@Subscribe
|
||||
public void onCommand(CommandEvent event) {
|
||||
switch (event.getCommand().toLowerCase()) {
|
||||
case "plotme": {
|
||||
CommandSource source = event.getSource();
|
||||
if (Settings.USE_PLOTME_ALIAS) {
|
||||
SpongeMain.THIS.getGame().getCommandDispatcher().process(source, ("plots " + event.getArguments()).trim());
|
||||
} else {
|
||||
source.sendMessage(SpongeMain.THIS.getText(C.NOT_USING_PLOTME.s()));
|
||||
}
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
// TODO
|
||||
}
|
||||
|
||||
@Subscribe
|
||||
public void onBlockMove(BlockMoveEvent event) {
|
||||
org.spongepowered.api.world.Location block = event.getBlocks().get(0);
|
||||
Extent extent = block.getExtent();
|
||||
if (extent instanceof World) {
|
||||
World world = (World) extent;
|
||||
final String worldname = world.getName();
|
||||
if (!PS.get().isPlotWorld(worldname)) {
|
||||
return;
|
||||
}
|
||||
event.filter(new Predicate<org.spongepowered.api.world.Location>() {
|
||||
@Override
|
||||
public boolean apply(org.spongepowered.api.world.Location loc) {
|
||||
if (MainUtil.isPlotRoad(SpongeUtil.getLocation(worldname, loc))) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@Subscribe
|
||||
public void onFloraGrow(FloraGrowEvent event) {
|
||||
org.spongepowered.api.world.Location block = event.getBlock();
|
||||
Extent extent = block.getExtent();
|
||||
if (extent instanceof World) {
|
||||
World world = (World) extent;
|
||||
final String worldname = world.getName();
|
||||
if (!PS.get().isPlotWorld(worldname)) {
|
||||
return;
|
||||
}
|
||||
if (MainUtil.isPlotRoad(SpongeUtil.getLocation(worldname, block))) {
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Subscribe
|
||||
public void onChat(PlayerChatEvent event) {
|
||||
final Player player = event.getEntity();
|
||||
final String world = player.getWorld().getName();
|
||||
if (!PS.get().isPlotWorld(world)) {
|
||||
return;
|
||||
}
|
||||
final PlotWorld plotworld = PS.get().getPlotWorld(world);
|
||||
final PlotPlayer plr = SpongeUtil.getPlayer(player);
|
||||
if (!plotworld.PLOT_CHAT && (plr.getMeta("chat") == null || !(Boolean) plr.getMeta("chat"))) {
|
||||
return;
|
||||
}
|
||||
final Location loc = SpongeUtil.getLocation(player);
|
||||
final Plot plot = MainUtil.getPlot(loc);
|
||||
if (plot == null) {
|
||||
return;
|
||||
}
|
||||
Text message = event.getUnformattedMessage();
|
||||
|
||||
// TODO use display name rather than username
|
||||
// - Getting displayname currently causes NPE, so wait until sponge fixes that
|
||||
|
||||
String sender = player.getName();
|
||||
PlotId id = plot.id;
|
||||
String newMessage = StringMan.replaceAll(C.PLOT_CHAT_FORMAT.s(), "%plot_id%", id.x + ";" + id.y, "%sender%", sender);
|
||||
String forcedMessage = StringMan.replaceAll(C.PLOT_CHAT_FORCED.s(), "%plot_id%", id.x + ";" + id.y, "%sender%", sender);
|
||||
for (PlotPlayer user : UUIDHandler.getPlayers().values()) {
|
||||
String toSend;
|
||||
if (plot.equals(MainUtil.getPlot(user.getLocation()))) {
|
||||
toSend = newMessage;
|
||||
}
|
||||
else if (Permissions.hasPermission(user, PERMISSION_COMMANDS_CHAT)) {
|
||||
toSend = forcedMessage;
|
||||
}
|
||||
else {
|
||||
continue;
|
||||
}
|
||||
String[] split = (toSend + " ").split("%msg%");
|
||||
List<Text> components = new ArrayList<>();
|
||||
Text prefix = null;
|
||||
for (String part : split) {
|
||||
if (prefix != null) {
|
||||
components.add(prefix);
|
||||
}
|
||||
else {
|
||||
prefix = message;
|
||||
}
|
||||
components.add(Texts.of(part));
|
||||
}
|
||||
((SpongePlayer) user).player.sendMessage(Texts.join(components));
|
||||
}
|
||||
event.setNewMessage(Texts.of());
|
||||
event.setCancelled(true);
|
||||
}
|
||||
|
||||
@Subscribe
|
||||
public void onBigBoom(final EntityExplosionEvent event) {
|
||||
Location loc = SpongeUtil.getLocation(event.getExplosionLocation());
|
||||
final String world = loc.getWorld();
|
||||
if (!PS.get().isPlotWorld(world)) {
|
||||
return;
|
||||
}
|
||||
final Plot plot = MainUtil.getPlot(loc);
|
||||
if ((plot != null) && plot.hasOwner()) {
|
||||
if (FlagManager.isPlotFlagTrue(plot, "explosion")) {
|
||||
event.filter(new Predicate<org.spongepowered.api.world.Location>() {
|
||||
@Override
|
||||
public boolean apply(org.spongepowered.api.world.Location loc) {
|
||||
if (!plot.equals(MainUtil.getPlot(SpongeUtil.getLocation(loc)))) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
});
|
||||
return;
|
||||
}
|
||||
}
|
||||
if (MainUtil.isPlotArea(loc)) {
|
||||
event.setYield(0);
|
||||
} else {
|
||||
if (FlagManager.isPlotFlagTrue(plot, "explosion")) {
|
||||
event.filter(new Predicate<org.spongepowered.api.world.Location>() {
|
||||
@Override
|
||||
public boolean apply(org.spongepowered.api.world.Location loc) {
|
||||
if (!plot.equals(MainUtil.getPlot(SpongeUtil.getLocation(loc)))) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
});
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Subscribe
|
||||
public void onChunkPreGenerator(ChunkPreGenerateEvent event) {
|
||||
org.spongepowered.api.world.Chunk chunk = event.getChunk();
|
||||
World world = chunk.getWorld();
|
||||
final String worldname = world.getName();
|
||||
if (MainUtil.worldBorder.containsKey(worldname)) {
|
||||
final int border = MainUtil.getBorder(worldname);
|
||||
Vector3i min = world.getBlockMin();
|
||||
final int x = Math.abs(min.getX());
|
||||
final int z = Math.abs(min.getZ());
|
||||
if ((x > border) || (z > border)) {
|
||||
// TODO cancel this chunk from loading
|
||||
// - Currently not possible / this event doesn't seem to be called
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Subscribe
|
||||
public void onRedstoneEvent(BlockRedstoneUpdateEvent event) {
|
||||
org.spongepowered.api.world.Location block = event.getBlock();
|
||||
Location loc = SpongeUtil.getLocation(block);
|
||||
if (loc == null || !PS.get().isPlotWorld(loc.getWorld())) {
|
||||
return;
|
||||
}
|
||||
Plot plot = MainUtil.getPlot(loc);
|
||||
if (plot == null || !plot.hasOwner()) {
|
||||
return;
|
||||
}
|
||||
if (event.getOldSignalStrength() > event.getNewSignalStrength()) {
|
||||
return;
|
||||
}
|
||||
if (Settings.REDSTONE_DISABLER) {
|
||||
if (UUIDHandler.getPlayer(plot.owner) == null) {
|
||||
boolean disable = true;
|
||||
for (UUID trusted : plot.getTrusted()) {
|
||||
if (UUIDHandler.getPlayer(trusted) != null) {
|
||||
disable = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (disable) {
|
||||
event.setNewSignalStrength(0);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
Flag redstone = FlagManager.getPlotFlag(plot, "redstone");
|
||||
if (FlagManager.isPlotFlagFalse(plot, "redstone")) {
|
||||
event.setNewSignalStrength(0);
|
||||
// TODO only disable clocks
|
||||
}
|
||||
}
|
||||
|
||||
@Subscribe
|
||||
public void onBlockBreak(PlayerBreakBlockEvent event) {
|
||||
Player player = event.getEntity();
|
||||
World world = player.getWorld();
|
||||
String worldname = world.getName();
|
||||
org.spongepowered.api.world.Location blockLoc = event.getBlock();
|
||||
final Location loc = SpongeUtil.getLocation(worldname, event.getBlock());
|
||||
final Plot plot = MainUtil.getPlot(loc);
|
||||
if (plot != null) {
|
||||
if (event.getBlock().getY() == 0) {
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
if (!plot.hasOwner()) {
|
||||
final PlotPlayer pp = SpongeUtil.getPlayer(player);
|
||||
if (Permissions.hasPermission(pp, PERMISSION_ADMIN_DESTROY_UNOWNED)) {
|
||||
return;
|
||||
}
|
||||
MainUtil.sendMessage(pp, C.NO_PERMISSION, PERMISSION_ADMIN_DESTROY_UNOWNED);
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
final PlotPlayer pp = SpongeUtil.getPlayer(player);
|
||||
if (!plot.isAdded(pp.getUUID())) {
|
||||
final Flag destroy = FlagManager.getPlotFlag(plot, "break");
|
||||
BlockState state = blockLoc.getBlock();
|
||||
if ((destroy != null) && ((HashSet<PlotBlock>) destroy.getValue()).contains(SpongeMain.THIS.getPlotBlock(state))) {
|
||||
return;
|
||||
}
|
||||
if (Permissions.hasPermission(pp, PERMISSION_ADMIN_DESTROY_OTHER)) {
|
||||
return;
|
||||
}
|
||||
MainUtil.sendMessage(pp, C.NO_PERMISSION, PERMISSION_ADMIN_DESTROY_OTHER);
|
||||
event.setCancelled(true);
|
||||
}
|
||||
return;
|
||||
}
|
||||
final PlotPlayer pp = SpongeUtil.getPlayer(player);
|
||||
if (Permissions.hasPermission(pp, PERMISSION_ADMIN_DESTROY_ROAD)) {
|
||||
return;
|
||||
}
|
||||
if (MainUtil.isPlotArea(loc)) {
|
||||
MainUtil.sendMessage(pp, C.NO_PERMISSION, PERMISSION_ADMIN_DESTROY_ROAD);
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
|
||||
@Subscribe
|
||||
public void onBlockPlace(PlayerPlaceBlockEvent event) {
|
||||
Player player = event.getEntity();
|
||||
World world = player.getWorld();
|
||||
String worldname = world.getName();
|
||||
org.spongepowered.api.world.Location blockLoc = event.getBlock();
|
||||
final Location loc = SpongeUtil.getLocation(worldname, event.getBlock());
|
||||
final Plot plot = MainUtil.getPlot(loc);
|
||||
if (plot != null) {
|
||||
if (event.getBlock().getY() == 0) {
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
if (!plot.hasOwner()) {
|
||||
final PlotPlayer pp = SpongeUtil.getPlayer(player);
|
||||
if (Permissions.hasPermission(pp, PERMISSION_ADMIN_BUILD_UNOWNED)) {
|
||||
return;
|
||||
}
|
||||
MainUtil.sendMessage(pp, C.NO_PERMISSION, PERMISSION_ADMIN_BUILD_UNOWNED);
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
final PlotPlayer pp = SpongeUtil.getPlayer(player);
|
||||
if (!plot.isAdded(pp.getUUID())) {
|
||||
final Flag destroy = FlagManager.getPlotFlag(plot, "place");
|
||||
BlockState state = blockLoc.getBlock();
|
||||
if ((destroy != null) && ((HashSet<PlotBlock>) destroy.getValue()).contains(SpongeMain.THIS.getPlotBlock(state))) {
|
||||
return;
|
||||
}
|
||||
if (Permissions.hasPermission(pp, PERMISSION_ADMIN_BUILD_OTHER)) {
|
||||
return;
|
||||
}
|
||||
MainUtil.sendMessage(pp, C.NO_PERMISSION, PERMISSION_ADMIN_DESTROY_OTHER);
|
||||
event.setCancelled(true);
|
||||
}
|
||||
return;
|
||||
}
|
||||
final PlotPlayer pp = SpongeUtil.getPlayer(player);
|
||||
if (Permissions.hasPermission(pp, PERMISSION_ADMIN_BUILD_ROAD)) {
|
||||
return;
|
||||
}
|
||||
if (MainUtil.isPlotArea(loc)) {
|
||||
MainUtil.sendMessage(pp, C.NO_PERMISSION, PERMISSION_ADMIN_BUILD_ROAD);
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
|
||||
@Subscribe
|
||||
public void onBlockInteract(PlayerInteractBlockEvent event) {
|
||||
Player player = event.getEntity();
|
||||
World world = player.getWorld();
|
||||
String worldname = world.getName();
|
||||
org.spongepowered.api.world.Location blockLoc = event.getBlock();
|
||||
final Location loc = SpongeUtil.getLocation(worldname, event.getBlock());
|
||||
final Plot plot = MainUtil.getPlot(loc);
|
||||
if (plot != null) {
|
||||
if (event.getBlock().getY() == 0) {
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
if (!plot.hasOwner()) {
|
||||
final PlotPlayer pp = SpongeUtil.getPlayer(player);
|
||||
if (Permissions.hasPermission(pp, PERMISSION_ADMIN_INTERACT_UNOWNED)) {
|
||||
return;
|
||||
}
|
||||
MainUtil.sendMessage(pp, C.NO_PERMISSION, PERMISSION_ADMIN_INTERACT_UNOWNED);
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
final PlotPlayer pp = SpongeUtil.getPlayer(player);
|
||||
if (!plot.isAdded(pp.getUUID())) {
|
||||
final Flag destroy = FlagManager.getPlotFlag(plot, "use");
|
||||
BlockState state = blockLoc.getBlock();
|
||||
if ((destroy != null) && ((HashSet<PlotBlock>) destroy.getValue()).contains(SpongeMain.THIS.getPlotBlock(state))) {
|
||||
return;
|
||||
}
|
||||
if (Permissions.hasPermission(pp, PERMISSION_ADMIN_INTERACT_OTHER)) {
|
||||
return;
|
||||
}
|
||||
MainUtil.sendMessage(pp, C.NO_PERMISSION, PERMISSION_ADMIN_INTERACT_OTHER);
|
||||
event.setCancelled(true);
|
||||
}
|
||||
return;
|
||||
}
|
||||
final PlotPlayer pp = SpongeUtil.getPlayer(player);
|
||||
if (Permissions.hasPermission(pp, PERMISSION_ADMIN_INTERACT_ROAD)) {
|
||||
return;
|
||||
}
|
||||
if (MainUtil.isPlotArea(loc)) {
|
||||
MainUtil.sendMessage(pp, C.NO_PERMISSION, PERMISSION_ADMIN_INTERACT_ROAD);
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
|
||||
@Subscribe
|
||||
public void onConnect(PlayerConnectionEvent event) {
|
||||
PlayerConnection connection = event.getConnection();
|
||||
Player player = connection.getPlayer();
|
||||
String name = player.getName();
|
||||
PlotPlayer pp = SpongeUtil.getPlayer(player);
|
||||
if (name.equals("PlotSquared") || pp.getUUID().equals(DBFunc.everyone)) {
|
||||
player.kick();
|
||||
SpongeUtil.removePlayer(pp.getName());
|
||||
}
|
||||
}
|
||||
|
||||
@Subscribe
|
||||
public void onJoin(PlayerJoinEvent event) {
|
||||
final Player player = event.getUser();
|
||||
SpongeUtil.removePlayer(player.getName());
|
||||
final PlotPlayer pp = SpongeUtil.getPlayer(player);
|
||||
final String username = pp.getName();
|
||||
final StringWrapper name = new StringWrapper(username);
|
||||
final UUID uuid = pp.getUUID();
|
||||
UUIDHandler.add(name, uuid);
|
||||
ExpireManager.dates.put(uuid, System.currentTimeMillis());
|
||||
|
||||
// TODO worldedit bypass
|
||||
|
||||
if (PS.get().update != null && pp.hasPermission("plots.admin")) {
|
||||
TaskManager.runTaskLater(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
MainUtil.sendMessage(pp, "&6An update for PlotSquared is available: &7/plot update");
|
||||
}
|
||||
}, 20);
|
||||
}
|
||||
final Location loc = SpongeUtil.getLocation(player);
|
||||
final Plot plot = MainUtil.getPlot(loc);
|
||||
if (plot == null) {
|
||||
return;
|
||||
}
|
||||
if (Settings.TELEPORT_ON_LOGIN) {
|
||||
MainUtil.teleportPlayer(pp, pp.getLocation(), plot);
|
||||
MainUtil.sendMessage(pp, C.TELEPORTED_TO_ROAD);
|
||||
}
|
||||
PlotListener.plotEntry(pp, plot);
|
||||
}
|
||||
|
||||
@Subscribe
|
||||
public void onQuit(PlayerQuitEvent event) {
|
||||
Player player = event.getEntity();
|
||||
PlotPlayer pp = SpongeUtil.getPlayer(player);
|
||||
ExpireManager.dates.put(pp.getUUID(), System.currentTimeMillis());
|
||||
EventUtil.unregisterPlayer(pp);
|
||||
|
||||
// TODO unregister WorldEdit manager
|
||||
// TODO delete plots on ban
|
||||
|
||||
SpongeUtil.removePlayer(pp.getName());
|
||||
}
|
||||
|
||||
public int getInt(double value) {
|
||||
return (int) (value < 0 ? value - 1 : value);
|
||||
}
|
||||
|
||||
@Subscribe
|
||||
public void onMove(PlayerMoveEvent event) {
|
||||
org.spongepowered.api.world.Location from = event.getOldLocation();
|
||||
org.spongepowered.api.world.Location to = event.getNewLocation();
|
||||
int x2;
|
||||
if (getInt(from.getX()) != (x2 = getInt(to.getX()))) {
|
||||
Extent extent = to.getExtent();
|
||||
if (!(extent instanceof World)) {
|
||||
return;
|
||||
}
|
||||
World world = (World) extent;
|
||||
String worldname = ((World) extent).getName();
|
||||
PlotWorld plotworld = PS.get().getPlotWorld(worldname);
|
||||
if (plotworld == null) {
|
||||
return;
|
||||
}
|
||||
PlotManager plotManager = PS.get().getPlotManager(worldname);
|
||||
PlotId id = plotManager.getPlotId(plotworld, x2, 0, getInt(to.getZ()));
|
||||
Player player = event.getUser();
|
||||
PlotPlayer pp = SpongeUtil.getPlayer(player);
|
||||
Plot lastPlot = (Plot) pp.getMeta("lastplot");
|
||||
if (id == null) {
|
||||
if (lastPlot == null) {
|
||||
return;
|
||||
}
|
||||
if (!PlotListener.plotExit(pp, lastPlot)) {
|
||||
MainUtil.sendMessage(pp, C.NO_PERMISSION, PERMISSION_ADMIN_EXIT_DENIED);
|
||||
if (lastPlot.equals(MainUtil.getPlot(SpongeUtil.getLocation(worldname, from)))) {
|
||||
event.setNewLocation(from);
|
||||
}
|
||||
else {
|
||||
event.setNewLocation(world.getSpawnLocation());
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
else if (lastPlot != null && id.equals(lastPlot.id)) {
|
||||
return;
|
||||
}
|
||||
else {
|
||||
Plot plot = MainUtil.getPlot(worldname, id);
|
||||
if (!PlotListener.plotEntry(pp, plot)) {
|
||||
MainUtil.sendMessage(pp, C.NO_PERMISSION, PERMISSION_ADMIN_ENTRY_DENIED);
|
||||
if (!plot.equals(MainUtil.getPlot(SpongeUtil.getLocation(worldname, from)))) {
|
||||
event.setNewLocation(from);
|
||||
}
|
||||
else {
|
||||
event.setNewLocation(world.getSpawnLocation());
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
Integer border = MainUtil.worldBorder.get(worldname);
|
||||
if (border != null) {
|
||||
if (x2 > border) {
|
||||
Vector3d pos = to.getPosition();
|
||||
to = to.setPosition(new Vector3d(border - 4, pos.getY(), pos.getZ()));
|
||||
event.setNewLocation(to);
|
||||
MainUtil.sendMessage(pp, C.BORDER);
|
||||
}
|
||||
else if (x2 < -border) {
|
||||
Vector3d pos = to.getPosition();
|
||||
to = to.setPosition(new Vector3d(-border + 4, pos.getY(), pos.getZ()));
|
||||
event.setNewLocation(to);
|
||||
MainUtil.sendMessage(pp, C.BORDER);
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
int z2;
|
||||
if (getInt(from.getZ()) != (z2 = getInt(to.getZ())) ) {
|
||||
Extent extent = to.getExtent();
|
||||
if (!(extent instanceof World)) {
|
||||
return;
|
||||
}
|
||||
World world = (World) extent;
|
||||
String worldname = ((World) extent).getName();
|
||||
PlotWorld plotworld = PS.get().getPlotWorld(worldname);
|
||||
if (plotworld == null) {
|
||||
return;
|
||||
}
|
||||
PlotManager plotManager = PS.get().getPlotManager(worldname);
|
||||
PlotId id = plotManager.getPlotId(plotworld, x2, 0, z2);
|
||||
Player player = event.getUser();
|
||||
PlotPlayer pp = SpongeUtil.getPlayer(player);
|
||||
Plot lastPlot = (Plot) pp.getMeta("lastplot");
|
||||
if (id == null) {
|
||||
if (lastPlot == null) {
|
||||
return;
|
||||
}
|
||||
if (!PlotListener.plotExit(pp, lastPlot)) {
|
||||
MainUtil.sendMessage(pp, C.NO_PERMISSION, PERMISSION_ADMIN_EXIT_DENIED);
|
||||
if (lastPlot.equals(MainUtil.getPlot(SpongeUtil.getLocation(worldname, from)))) {
|
||||
event.setNewLocation(from);
|
||||
}
|
||||
else {
|
||||
event.setNewLocation(world.getSpawnLocation());
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
else if (lastPlot != null && id.equals(lastPlot.id)) {
|
||||
return;
|
||||
}
|
||||
else {
|
||||
Plot plot = MainUtil.getPlot(worldname, id);
|
||||
if (!PlotListener.plotEntry(pp, plot)) {
|
||||
MainUtil.sendMessage(pp, C.NO_PERMISSION, PERMISSION_ADMIN_ENTRY_DENIED);
|
||||
if (!plot.equals(MainUtil.getPlot(SpongeUtil.getLocation(worldname, from)))) {
|
||||
event.setNewLocation(from);
|
||||
}
|
||||
else {
|
||||
event.setNewLocation(world.getSpawnLocation());
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
Integer border = MainUtil.worldBorder.get(worldname);
|
||||
if (border != null) {
|
||||
if (z2 > border) {
|
||||
Vector3d pos = to.getPosition();
|
||||
to = to.setPosition(new Vector3d(pos.getX(), pos.getY(), border - 4));
|
||||
event.setNewLocation(to);
|
||||
MainUtil.sendMessage(pp, C.BORDER);
|
||||
}
|
||||
else if (z2 < -border) {
|
||||
Vector3d pos = to.getPosition();
|
||||
to = to.setPosition(new Vector3d(pos.getX(), pos.getY(), -border + 4));
|
||||
event.setNewLocation(to);
|
||||
MainUtil.sendMessage(pp, C.BORDER);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Subscribe
|
||||
public void onWorldChange(EntityTeleportEvent event) {
|
||||
Entity entity = event.getEntity();
|
||||
if (entity instanceof Player) {
|
||||
org.spongepowered.api.world.Location from = event.getOldLocation();
|
||||
org.spongepowered.api.world.Location to = event.getNewLocation();
|
||||
int x2;
|
||||
if (getInt(from.getX()) != (x2 = getInt(to.getX()))) {
|
||||
Extent extent = to.getExtent();
|
||||
if (!(extent instanceof World)) {
|
||||
return;
|
||||
}
|
||||
World world = (World) extent;
|
||||
String worldname = ((World) extent).getName();
|
||||
PlotWorld plotworld = PS.get().getPlotWorld(worldname);
|
||||
if (plotworld == null) {
|
||||
return;
|
||||
}
|
||||
PlotManager plotManager = PS.get().getPlotManager(worldname);
|
||||
PlotId id = plotManager.getPlotId(plotworld, x2, 0, getInt(to.getZ()));
|
||||
Player player = (Player) entity;
|
||||
PlotPlayer pp = SpongeUtil.getPlayer(player);
|
||||
Plot lastPlot = (Plot) pp.getMeta("lastplot");
|
||||
if (id == null) {
|
||||
if (lastPlot == null) {
|
||||
return;
|
||||
}
|
||||
if (!PlotListener.plotExit(pp, lastPlot)) {
|
||||
MainUtil.sendMessage(pp, C.NO_PERMISSION, PERMISSION_ADMIN_EXIT_DENIED);
|
||||
if (lastPlot.equals(MainUtil.getPlot(SpongeUtil.getLocation(worldname, from)))) {
|
||||
event.setNewLocation(from);
|
||||
}
|
||||
else {
|
||||
event.setNewLocation(world.getSpawnLocation());
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
else if (lastPlot != null && id.equals(lastPlot.id)) {
|
||||
return;
|
||||
}
|
||||
else {
|
||||
Plot plot = MainUtil.getPlot(worldname, id);
|
||||
if (!PlotListener.plotEntry(pp, plot)) {
|
||||
MainUtil.sendMessage(pp, C.NO_PERMISSION, PERMISSION_ADMIN_ENTRY_DENIED);
|
||||
if (!plot.equals(MainUtil.getPlot(SpongeUtil.getLocation(worldname, from)))) {
|
||||
event.setNewLocation(from);
|
||||
}
|
||||
else {
|
||||
event.setNewLocation(world.getSpawnLocation());
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
Integer border = MainUtil.worldBorder.get(worldname);
|
||||
if (border != null) {
|
||||
if (x2 > border) {
|
||||
Vector3d pos = to.getPosition();
|
||||
to = to.setPosition(new Vector3d(border - 4, pos.getY(), pos.getZ()));
|
||||
event.setNewLocation(to);
|
||||
MainUtil.sendMessage(pp, C.BORDER);
|
||||
}
|
||||
else if (x2 < -border) {
|
||||
Vector3d pos = to.getPosition();
|
||||
to = to.setPosition(new Vector3d(-border + 4, pos.getY(), pos.getZ()));
|
||||
event.setNewLocation(to);
|
||||
MainUtil.sendMessage(pp, C.BORDER);
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
int z2;
|
||||
if (getInt(from.getZ()) != (z2 = getInt(to.getZ())) ) {
|
||||
Extent extent = to.getExtent();
|
||||
if (!(extent instanceof World)) {
|
||||
return;
|
||||
}
|
||||
World world = (World) extent;
|
||||
String worldname = ((World) extent).getName();
|
||||
PlotWorld plotworld = PS.get().getPlotWorld(worldname);
|
||||
if (plotworld == null) {
|
||||
return;
|
||||
}
|
||||
PlotManager plotManager = PS.get().getPlotManager(worldname);
|
||||
PlotId id = plotManager.getPlotId(plotworld, x2, 0, z2);
|
||||
Player player = (Player) entity;
|
||||
PlotPlayer pp = SpongeUtil.getPlayer(player);
|
||||
Plot lastPlot = (Plot) pp.getMeta("lastplot");
|
||||
if (id == null) {
|
||||
if (lastPlot == null) {
|
||||
return;
|
||||
}
|
||||
if (!PlotListener.plotExit(pp, lastPlot)) {
|
||||
MainUtil.sendMessage(pp, C.NO_PERMISSION, PERMISSION_ADMIN_EXIT_DENIED);
|
||||
if (lastPlot.equals(MainUtil.getPlot(SpongeUtil.getLocation(worldname, from)))) {
|
||||
event.setNewLocation(from);
|
||||
}
|
||||
else {
|
||||
event.setNewLocation(player.getWorld().getSpawnLocation());
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
else if (lastPlot != null && id.equals(lastPlot.id)) {
|
||||
return;
|
||||
}
|
||||
else {
|
||||
Plot plot = MainUtil.getPlot(worldname, id);
|
||||
if (!PlotListener.plotEntry(pp, plot)) {
|
||||
MainUtil.sendMessage(pp, C.NO_PERMISSION, PERMISSION_ADMIN_ENTRY_DENIED);
|
||||
if (!plot.equals(MainUtil.getPlot(SpongeUtil.getLocation(worldname, from)))) {
|
||||
event.setNewLocation(from);
|
||||
}
|
||||
else {
|
||||
event.setNewLocation(player.getWorld().getSpawnLocation());
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
Integer border = MainUtil.worldBorder.get(worldname);
|
||||
if (border != null) {
|
||||
if (z2 > border) {
|
||||
Vector3d pos = to.getPosition();
|
||||
to = to.setPosition(new Vector3d(pos.getX(), pos.getY(), border - 4));
|
||||
event.setNewLocation(to);
|
||||
MainUtil.sendMessage(pp, C.BORDER);
|
||||
}
|
||||
else if (z2 < -border) {
|
||||
Vector3d pos = to.getPosition();
|
||||
to = to.setPosition(new Vector3d(pos.getX(), pos.getY(), -border + 4));
|
||||
event.setNewLocation(to);
|
||||
MainUtil.sendMessage(pp, C.BORDER);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Subscribe
|
||||
public void onWorldChange(PlayerChangeWorldEvent event) {
|
||||
final PlotPlayer player = SpongeUtil.getPlayer(event.getUser());
|
||||
|
||||
// TODO worldedit mask
|
||||
|
||||
((BukkitPlayer) player).hasPerm = new HashSet<>();
|
||||
((BukkitPlayer) player).noPerm = new HashSet<>();
|
||||
}
|
||||
}
|
@ -0,0 +1,7 @@
|
||||
package com.plotsquared.sponge.util;
|
||||
|
||||
public class KillRoadMobs {
|
||||
public void run() {
|
||||
// TODO kill road mobs
|
||||
}
|
||||
}
|
@ -0,0 +1,202 @@
|
||||
package com.plotsquared.sponge.util;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.spongepowered.api.block.BlockState;
|
||||
import org.spongepowered.api.block.BlockType;
|
||||
import org.spongepowered.api.block.BlockTypes;
|
||||
import org.spongepowered.api.block.tileentity.Sign;
|
||||
import org.spongepowered.api.data.manipulator.tileentity.SignData;
|
||||
import org.spongepowered.api.text.Text;
|
||||
import org.spongepowered.api.world.World;
|
||||
import org.spongepowered.api.world.biome.BiomeType;
|
||||
import org.spongepowered.api.world.biome.BiomeTypes;
|
||||
|
||||
import com.intellectualcrafters.plot.PS;
|
||||
import com.intellectualcrafters.plot.object.Location;
|
||||
import com.intellectualcrafters.plot.object.PlotBlock;
|
||||
import com.intellectualcrafters.plot.object.schematic.PlotItem;
|
||||
import com.intellectualcrafters.plot.util.BlockManager;
|
||||
import com.intellectualcrafters.plot.util.MathMan;
|
||||
import com.intellectualcrafters.plot.util.StringComparison;
|
||||
import com.plotsquared.sponge.SpongeMain;
|
||||
|
||||
public class SpongeBlockManager extends BlockManager {
|
||||
|
||||
@Override
|
||||
public boolean isBlockSolid(PlotBlock block) {
|
||||
BlockState state = SpongeMain.THIS.getBlockState(block);
|
||||
BlockType type = state.getType();
|
||||
return type.isSolidCube() && !type.isAffectedByGravity();
|
||||
}
|
||||
|
||||
@Override
|
||||
public StringComparison<PlotBlock>.ComparisonResult getClosestBlock(String name) {
|
||||
try {
|
||||
double match;
|
||||
short id;
|
||||
byte data;
|
||||
String[] split = name.split(":");
|
||||
if (split.length == 2) {
|
||||
data = Byte.parseByte(split[1]);
|
||||
name = split[0];
|
||||
}
|
||||
else {
|
||||
data = 0;
|
||||
}
|
||||
if (MathMan.isInteger(split[0])) {
|
||||
id = Short.parseShort(split[0]);
|
||||
match = 0;
|
||||
}
|
||||
else {
|
||||
StringComparison<BlockState>.ComparisonResult comparison = new StringComparison<BlockState>(name, SpongeMain.THIS.getAllStates()) {
|
||||
public String getString(BlockState o) {
|
||||
return o.getType().getId();
|
||||
};
|
||||
}.getBestMatchAdvanced();
|
||||
match = comparison.match;
|
||||
id = SpongeMain.THIS.getPlotBlock(comparison.best).id;
|
||||
}
|
||||
PlotBlock block = new PlotBlock(id, data);
|
||||
StringComparison<PlotBlock> outer = new StringComparison<PlotBlock>();
|
||||
return outer.new ComparisonResult(match, block);
|
||||
|
||||
}
|
||||
catch (Exception e) {}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getClosestMatchingName(PlotBlock block) {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String[] getBiomeList() {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean addItems(String world, PlotItem items) {
|
||||
// TODO Auto-generated method stub
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getBiomeFromString(String biome) {
|
||||
// TODO Auto-generated method stub
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public PlotBlock getPlotBlockFromString(String block) {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getHeighestBlock(String worldname, int x, int z) {
|
||||
World world = SpongeUtil.getWorld(worldname);
|
||||
for (int y = 255; y > 0; y--) {
|
||||
BlockState block = world.getBlock(x, y, z);
|
||||
if (block != null && block.getType() != BlockTypes.AIR) {
|
||||
return y+1;
|
||||
}
|
||||
}
|
||||
return 64;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getBiome(String world, int x, int z) {
|
||||
return SpongeUtil.getWorld(world).getBiome(x, z).getName().toUpperCase();
|
||||
}
|
||||
|
||||
@Override
|
||||
public PlotBlock getBlock(Location loc) {
|
||||
BlockState state = SpongeUtil.getWorld(loc.getWorld()).getBlock(loc.getX(), loc.getY(), loc.getZ());
|
||||
PlotBlock block = SpongeMain.THIS.getPlotBlock(state);
|
||||
if (block == null) {
|
||||
block = SpongeMain.THIS.registerBlock(state);
|
||||
}
|
||||
return block;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Location getSpawn(String world) {
|
||||
return SpongeUtil.getLocation(world, SpongeUtil.getWorld(world).getSpawnLocation());
|
||||
}
|
||||
|
||||
@Override
|
||||
public String[] getSign(Location loc) {
|
||||
BlockState block = SpongeUtil.getWorld(loc.getWorld()).getBlock(loc.getX(), loc.getY(), loc.getZ());
|
||||
if (!(block instanceof Sign)) {
|
||||
return null;
|
||||
}
|
||||
Sign sign = (Sign) block;
|
||||
String[] result = new String[4];
|
||||
List<Text> lines = sign.getData().get().getLines();
|
||||
for (int i = 0; i < 4; i++) {
|
||||
result[i] = lines.get(i).toString();
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isWorld(String world) {
|
||||
return SpongeUtil.getWorld(world) != null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void functionSetBlocks(String worldname, int[] xv, int[] yv, int[] zv, int[] id, byte[] data) {
|
||||
for (int i = 0; i < xv.length; i++) {
|
||||
functionSetBlock(worldname, xv[i], yv[i], zv[i], id[i], data[i]);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void functionSetSign(String worldname, int x, int y, int z, String[] lines) {
|
||||
World world = SpongeUtil.getWorld(worldname);
|
||||
world.setBlock(x, y, z, BlockTypes.WALL_SIGN.getDefaultState());
|
||||
BlockState block = world.getBlock(x, y, z);
|
||||
if (!(block instanceof Sign)) {
|
||||
return;
|
||||
}
|
||||
Sign sign = (Sign) block;
|
||||
SignData data = sign.getData().get();
|
||||
for (int i = 0; i < 4; i++) {
|
||||
data.setLine(i, SpongeMain.THIS.getText(lines[i]));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void functionSetBlock(String worldname, int x, int y, int z, int id, byte data) {
|
||||
BlockState state;
|
||||
if (data == 0) {
|
||||
state = SpongeMain.THIS.getBlockState(id);
|
||||
}
|
||||
else {
|
||||
state = SpongeMain.THIS.getBlockState(new PlotBlock((short) id, data));
|
||||
}
|
||||
if (state == null) {
|
||||
return;
|
||||
}
|
||||
SpongeUtil.getWorld(worldname).setBlock(x, y, z, state);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void functionSetBiomes(String worldname, int[] xv, int[] zv, String biomeName) {
|
||||
BiomeType biome;
|
||||
try {
|
||||
biome = (BiomeType) BiomeTypes.class.getField(biomeName.toUpperCase()).get(null);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
biome = BiomeTypes.FOREST;
|
||||
}
|
||||
for (int i = 0; i < xv.length; i++) {
|
||||
SpongeUtil.getWorld(worldname).setBiome(xv[i], zv[i], biome);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
71
src/main/java/com/plotsquared/sponge/util/SpongeCommand.java
Normal file
71
src/main/java/com/plotsquared/sponge/util/SpongeCommand.java
Normal file
@ -0,0 +1,71 @@
|
||||
package com.plotsquared.sponge.util;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
|
||||
import org.spongepowered.api.entity.player.Player;
|
||||
import org.spongepowered.api.text.Text;
|
||||
import org.spongepowered.api.text.Texts;
|
||||
import org.spongepowered.api.util.command.CommandCallable;
|
||||
import org.spongepowered.api.util.command.CommandException;
|
||||
import org.spongepowered.api.util.command.CommandResult;
|
||||
import org.spongepowered.api.util.command.CommandSource;
|
||||
|
||||
import com.google.common.base.Optional;
|
||||
import com.intellectualcrafters.plot.PS;
|
||||
import com.intellectualcrafters.plot.commands.MainCommand;
|
||||
import com.intellectualcrafters.plot.object.ConsolePlayer;
|
||||
import com.intellectualcrafters.plot.object.PlotPlayer;
|
||||
import com.plotsquared.sponge.SpongeMain;
|
||||
|
||||
public class SpongeCommand implements CommandCallable {
|
||||
|
||||
@Override
|
||||
public CommandResult process(CommandSource cmd, String string) throws CommandException {
|
||||
String id = cmd.getIdentifier();
|
||||
PlotPlayer pp;
|
||||
try {
|
||||
UUID uuid = UUID.fromString(id);
|
||||
Player player = SpongeMain.THIS.getServer().getPlayer(uuid).get();
|
||||
pp = SpongeUtil.getPlayer(player);
|
||||
}
|
||||
catch (Exception e) {
|
||||
pp = ConsolePlayer.getConsole();
|
||||
}
|
||||
if (MainCommand.onCommand(pp, cmd.getName(), string.split(" "))) {
|
||||
return CommandResult.success();
|
||||
}
|
||||
else {
|
||||
return CommandResult.empty();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> getSuggestions(CommandSource cmd, String string) throws CommandException {
|
||||
// TODO Auto-generated method stub
|
||||
return new ArrayList<>(Arrays.asList("TEST"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean testPermission(CommandSource cmd) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Optional<? extends Text> getShortDescription(CommandSource cmd) {
|
||||
return Optional.of(Texts.of("Shows plot help"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public Optional<? extends Text> getHelp(CommandSource cmd) {
|
||||
return Optional.of(Texts.of("/plot help"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public Text getUsage(CommandSource cmd) {
|
||||
return Texts.of("/plot <command>");
|
||||
}
|
||||
|
||||
}
|
119
src/main/java/com/plotsquared/sponge/util/SpongeEventUtil.java
Normal file
119
src/main/java/com/plotsquared/sponge/util/SpongeEventUtil.java
Normal file
@ -0,0 +1,119 @@
|
||||
package com.plotsquared.sponge.util;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.UUID;
|
||||
|
||||
import org.spongepowered.api.event.Cancellable;
|
||||
import org.spongepowered.api.event.Event;
|
||||
import org.spongepowered.api.service.event.EventManager;
|
||||
|
||||
import com.intellectualcrafters.plot.flag.Flag;
|
||||
import com.intellectualcrafters.plot.object.Location;
|
||||
import com.intellectualcrafters.plot.object.Plot;
|
||||
import com.intellectualcrafters.plot.object.PlotCluster;
|
||||
import com.intellectualcrafters.plot.object.PlotId;
|
||||
import com.intellectualcrafters.plot.object.PlotPlayer;
|
||||
import com.intellectualcrafters.plot.util.EventUtil;
|
||||
import com.plotsquared.sponge.SpongeMain;
|
||||
import com.plotsquared.sponge.events.ClusterFlagRemoveEvent;
|
||||
import com.plotsquared.sponge.events.PlayerClaimPlotEvent;
|
||||
import com.plotsquared.sponge.events.PlayerEnterPlotEvent;
|
||||
import com.plotsquared.sponge.events.PlayerLeavePlotEvent;
|
||||
import com.plotsquared.sponge.events.PlayerPlotDeniedEvent;
|
||||
import com.plotsquared.sponge.events.PlayerPlotHelperEvent;
|
||||
import com.plotsquared.sponge.events.PlayerPlotTrustedEvent;
|
||||
import com.plotsquared.sponge.events.PlayerTeleportToPlotEvent;
|
||||
import com.plotsquared.sponge.events.PlotClearEvent;
|
||||
import com.plotsquared.sponge.events.PlotDeleteEvent;
|
||||
import com.plotsquared.sponge.events.PlotFlagAddEvent;
|
||||
import com.plotsquared.sponge.events.PlotFlagRemoveEvent;
|
||||
import com.plotsquared.sponge.events.PlotMergeEvent;
|
||||
import com.plotsquared.sponge.events.PlotUnlinkEvent;
|
||||
|
||||
public class SpongeEventUtil extends EventUtil {
|
||||
|
||||
public EventManager events;
|
||||
|
||||
public SpongeEventUtil() {
|
||||
this.events = SpongeMain.THIS.getGame().getEventManager();
|
||||
}
|
||||
|
||||
public boolean callEvent(Event event) {
|
||||
events.post(event);
|
||||
if (event instanceof Cancellable) {
|
||||
return !((Cancellable) event).isCancelled();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean callClaim(PlotPlayer player, Plot plot, boolean auto) {
|
||||
return callEvent(new PlayerClaimPlotEvent(SpongeUtil.getPlayer(player), plot, auto));
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean callTeleport(PlotPlayer player, Location from, Plot plot) {
|
||||
return callEvent(new PlayerTeleportToPlotEvent(SpongeUtil.getPlayer(player), from, plot));
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean callClear(String world, PlotId id) {
|
||||
return callEvent(new PlotClearEvent(world, id));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void callDelete(String world, PlotId id) {
|
||||
callEvent(new PlotDeleteEvent(world, id));
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean callFlagAdd(Flag flag, Plot plot) {
|
||||
return callEvent(new PlotFlagAddEvent(flag, plot));
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean callFlagRemove(Flag flag, Plot plot) {
|
||||
return callEvent(new PlotFlagRemoveEvent(flag, plot));
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean callMerge(String world, Plot plot, ArrayList<PlotId> plots) {
|
||||
return callEvent(new PlotMergeEvent(SpongeUtil.getWorld(world), plot, plots));
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean callUnlink(String world, ArrayList<PlotId> plots) {
|
||||
return callEvent(new PlotUnlinkEvent(SpongeUtil.getWorld(world), plots));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void callEntry(PlotPlayer player, Plot plot) {
|
||||
callEvent(new PlayerEnterPlotEvent(SpongeUtil.getPlayer(player), plot));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void callLeave(PlotPlayer player, Plot plot) {
|
||||
callEvent(new PlayerLeavePlotEvent(SpongeUtil.getPlayer(player), plot));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void callDenied(PlotPlayer initiator, Plot plot, UUID player, boolean added) {
|
||||
callEvent(new PlayerPlotDeniedEvent(SpongeUtil.getPlayer(initiator), plot, player, added));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void callTrusted(PlotPlayer initiator, Plot plot, UUID player, boolean added) {
|
||||
callEvent(new PlayerPlotHelperEvent(SpongeUtil.getPlayer(initiator), plot, player, added));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void callMember(PlotPlayer initiator, Plot plot, UUID player, boolean added) {
|
||||
callEvent(new PlayerPlotTrustedEvent(SpongeUtil.getPlayer(initiator), plot, player, added));
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean callFlagRemove(Flag flag, PlotCluster cluster) {
|
||||
return callEvent(new ClusterFlagRemoveEvent(flag, cluster));
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,116 @@
|
||||
package com.plotsquared.sponge.util;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Locale;
|
||||
|
||||
import org.spongepowered.api.entity.player.Player;
|
||||
import org.spongepowered.api.item.ItemType;
|
||||
import org.spongepowered.api.item.ItemTypes;
|
||||
import org.spongepowered.api.item.inventory.Carrier;
|
||||
import org.spongepowered.api.item.inventory.Inventories;
|
||||
import org.spongepowered.api.item.inventory.Inventory;
|
||||
import org.spongepowered.api.item.inventory.ItemStack;
|
||||
import org.spongepowered.api.item.inventory.ItemStackBuilder;
|
||||
import org.spongepowered.api.item.inventory.custom.CustomInventory;
|
||||
import org.spongepowered.api.item.inventory.property.SlotIndex;
|
||||
import org.spongepowered.api.item.inventory.type.CarriedInventory;
|
||||
|
||||
import com.intellectualcrafters.plot.object.PlotInventory;
|
||||
import com.intellectualcrafters.plot.object.PlotItemStack;
|
||||
import com.intellectualcrafters.plot.object.PlotPlayer;
|
||||
import com.intellectualcrafters.plot.util.InventoryUtil;
|
||||
import com.plotsquared.sponge.SpongeMain;
|
||||
import com.plotsquared.sponge.SpongePlayer;
|
||||
|
||||
public class SpongeInventoryUtil extends InventoryUtil {
|
||||
|
||||
public ItemStackBuilder builder;
|
||||
|
||||
public SpongeInventoryUtil() {
|
||||
this.builder = SpongeMain.THIS.getGame().getRegistry().getItemBuilder();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void open(PlotInventory inv) {
|
||||
// TODO Auto-generated method stub
|
||||
SpongePlayer sp = (SpongePlayer) inv.player;
|
||||
Player player = sp.player;
|
||||
|
||||
CustomInventory inventory = Inventories.customInventoryBuilder().name(SpongeMain.THIS.getTranslation(inv.getTitle())).size(inv.size).build();
|
||||
PlotItemStack[] items = inv.getItems();
|
||||
for (int i = 0; i < inv.size * 9; i++) {
|
||||
PlotItemStack item = items[i];
|
||||
if (item != null) {
|
||||
inventory.set(new SlotIndex(i), getItem(item));
|
||||
}
|
||||
}
|
||||
inv.player.setMeta("inventory", inv);
|
||||
player.openInventory(inventory);
|
||||
}
|
||||
|
||||
|
||||
public ItemStack getItem(PlotItemStack item) {
|
||||
// FIXME item type, item data, item name, item lore
|
||||
return builder.itemType(ItemTypes.SPONGE).quantity(item.amount).build();
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void close(PlotInventory inv) {
|
||||
if (!inv.isOpen()) {
|
||||
return;
|
||||
}
|
||||
inv.player.deleteMeta("inventory");
|
||||
SpongePlayer sp = (SpongePlayer) inv.player;
|
||||
sp.player.closeInventory();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setItem(PlotInventory inv, int index, PlotItemStack item) {
|
||||
if (!inv.isOpen()) {
|
||||
return;
|
||||
}
|
||||
SpongePlayer sp = (SpongePlayer) inv.player;
|
||||
Player player = sp.player;
|
||||
Inventory inventory = player.getOpenInventory().get();
|
||||
throw new UnsupportedOperationException("NOT IMPLEMENTED YET");
|
||||
|
||||
}
|
||||
|
||||
public PlotItemStack getItem(ItemStack item) {
|
||||
if (item == null) {
|
||||
return null;
|
||||
}
|
||||
ItemType type = item.getItem();
|
||||
String id = type.getId();
|
||||
int amount = item.getQuantity();
|
||||
// TODO name / lore
|
||||
return new PlotItemStack(id, amount, null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public PlotItemStack[] getItems(PlotPlayer player) {
|
||||
SpongePlayer sp = (SpongePlayer) player;
|
||||
CarriedInventory<? extends Carrier> inv = sp.player.getInventory();
|
||||
ArrayList<PlotItemStack> list = new ArrayList<PlotItemStack>();
|
||||
|
||||
throw new UnsupportedOperationException("NOT IMPLEMENTED YET");
|
||||
|
||||
// return list.toArray();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isOpen(PlotInventory inv) {
|
||||
if (!inv.isOpen()) {
|
||||
return false;
|
||||
}
|
||||
SpongePlayer sp = (SpongePlayer) inv.player;
|
||||
Player player = sp.player;
|
||||
if (player.isViewingInventory()) {
|
||||
CarriedInventory<? extends Carrier> inventory = player.getInventory();
|
||||
return inv.getTitle().equals(inventory.getName().getTranslation().get(Locale.ENGLISH));
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
@ -1,4 +1,4 @@
|
||||
package com.plotsquared.sponge;
|
||||
package com.plotsquared.sponge.util;
|
||||
|
||||
/*
|
||||
* Copyright 2011-2013 Tyler Blair. All rights reserved.
|
||||
@ -28,16 +28,13 @@ package com.plotsquared.sponge;
|
||||
* either expressed or implied, of anybody else.
|
||||
*/
|
||||
|
||||
import ninja.leaping.configurate.commented.CommentedConfigurationNode;
|
||||
import ninja.leaping.configurate.hocon.HoconConfigurationLoader;
|
||||
import ninja.leaping.configurate.loader.ConfigurationLoader;
|
||||
import org.spongepowered.api.Game;
|
||||
import org.spongepowered.api.plugin.PluginContainer;
|
||||
import org.spongepowered.api.service.scheduler.Task;
|
||||
import org.spongepowered.api.service.scheduler.TaskBuilder;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import java.io.*;
|
||||
import java.io.BufferedReader;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.OutputStream;
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.net.Proxy;
|
||||
import java.net.URL;
|
||||
import java.net.URLConnection;
|
||||
@ -46,6 +43,17 @@ import java.util.UUID;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.zip.GZIPOutputStream;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
||||
import ninja.leaping.configurate.commented.CommentedConfigurationNode;
|
||||
import ninja.leaping.configurate.hocon.HoconConfigurationLoader;
|
||||
import ninja.leaping.configurate.loader.ConfigurationLoader;
|
||||
|
||||
import org.spongepowered.api.Game;
|
||||
import org.spongepowered.api.plugin.PluginContainer;
|
||||
import org.spongepowered.api.service.scheduler.Task;
|
||||
import org.spongepowered.api.service.scheduler.TaskBuilder;
|
||||
|
||||
public class SpongeMetrics {
|
||||
|
||||
/**
|
@ -1,4 +1,4 @@
|
||||
package com.plotsquared.sponge;
|
||||
package com.plotsquared.sponge.util;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
@ -7,6 +7,7 @@ import org.spongepowered.api.service.scheduler.Task;
|
||||
import org.spongepowered.api.service.scheduler.TaskBuilder;
|
||||
|
||||
import com.intellectualcrafters.plot.util.TaskManager;
|
||||
import com.plotsquared.sponge.SpongeMain;
|
||||
|
||||
public class SpongeTaskManager extends TaskManager {
|
||||
|
||||
@ -27,25 +28,25 @@ public class SpongeTaskManager extends TaskManager {
|
||||
@Override
|
||||
public void taskAsync(Runnable r) {
|
||||
TaskBuilder builder = SpongeMain.THIS.getGame().getScheduler().getTaskBuilder();
|
||||
builder.async().execute(r);
|
||||
builder.async().execute(r).submit(SpongeMain.THIS.getPlugin());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void task(Runnable r) {
|
||||
TaskBuilder builder = SpongeMain.THIS.getGame().getScheduler().getTaskBuilder();
|
||||
builder.execute(r);
|
||||
builder.execute(r).submit(SpongeMain.THIS.getPlugin());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void taskLater(Runnable r, int delay) {
|
||||
TaskBuilder builder = SpongeMain.THIS.getGame().getScheduler().getTaskBuilder();
|
||||
builder.delay(delay).execute(r);
|
||||
builder.delay(delay).execute(r).submit(SpongeMain.THIS.getPlugin());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void taskLaterAsync(Runnable r, int delay) {
|
||||
TaskBuilder builder = SpongeMain.THIS.getGame().getScheduler().getTaskBuilder();
|
||||
builder.async().delay(delay).execute(r);
|
||||
builder.async().delay(delay).execute(r).submit(SpongeMain.THIS.getPlugin());
|
||||
}
|
||||
|
||||
@Override
|
86
src/main/java/com/plotsquared/sponge/util/SpongeUtil.java
Normal file
86
src/main/java/com/plotsquared/sponge/util/SpongeUtil.java
Normal file
@ -0,0 +1,86 @@
|
||||
package com.plotsquared.sponge.util;
|
||||
|
||||
import org.spongepowered.api.entity.Entity;
|
||||
import org.spongepowered.api.entity.player.Player;
|
||||
import org.spongepowered.api.world.World;
|
||||
import org.spongepowered.api.world.extent.Extent;
|
||||
|
||||
import com.flowpowered.math.vector.Vector3d;
|
||||
import com.flowpowered.math.vector.Vector3i;
|
||||
import com.google.common.base.Optional;
|
||||
import com.intellectualcrafters.plot.object.Location;
|
||||
import com.intellectualcrafters.plot.object.PlotPlayer;
|
||||
import com.intellectualcrafters.plot.util.MathMan;
|
||||
import com.intellectualcrafters.plot.util.UUIDHandler;
|
||||
import com.plotsquared.sponge.SpongeMain;
|
||||
import com.plotsquared.sponge.SpongePlayer;
|
||||
|
||||
public class SpongeUtil {
|
||||
|
||||
public static Location getLocation(Entity player) {
|
||||
String world = player.getWorld().getName();
|
||||
org.spongepowered.api.world.Location loc = player.getLocation();
|
||||
Vector3i pos = loc.getBlockPosition();
|
||||
return new Location(world, pos.getX(), pos.getY(), pos.getZ());
|
||||
}
|
||||
|
||||
public static Location getLocation(org.spongepowered.api.world.Location block) {
|
||||
Extent extent = block.getExtent();
|
||||
if (extent instanceof World) {
|
||||
return getLocation(((World) extent).getName(), block);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public static Location getLocationFull(Entity player) {
|
||||
String world = player.getWorld().getName();
|
||||
Vector3d rot = player.getRotation();
|
||||
float[] pitchYaw = MathMan.getPitchAndYaw((float) rot.getX(), (float) rot.getY(), (float) rot.getZ());
|
||||
org.spongepowered.api.world.Location loc = player.getLocation();
|
||||
Vector3i pos = loc.getBlockPosition();
|
||||
return new Location(world, pos.getX(), pos.getY(), pos.getZ(), pitchYaw[1], pitchYaw[0]);
|
||||
}
|
||||
|
||||
private static Player lastPlayer = null;
|
||||
private static PlotPlayer lastPlotPlayer = null;
|
||||
|
||||
public static PlotPlayer getPlayer(Player player) {
|
||||
if (player == lastPlayer) {
|
||||
return lastPlotPlayer;
|
||||
}
|
||||
String name = player.getName();
|
||||
PlotPlayer pp = UUIDHandler.getPlayers().get(name);
|
||||
if (pp != null) {
|
||||
return pp;
|
||||
}
|
||||
lastPlotPlayer = new SpongePlayer(player);
|
||||
UUIDHandler.getPlayers().put(name, lastPlotPlayer);
|
||||
lastPlayer = player;
|
||||
return lastPlotPlayer;
|
||||
}
|
||||
|
||||
public static Player getPlayer(PlotPlayer player) {
|
||||
if (player instanceof SpongePlayer) {
|
||||
return ((SpongePlayer) player).player;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public static World getWorld(String world) {
|
||||
Optional<World> optional = SpongeMain.THIS.getServer().getWorld(world);
|
||||
if (!optional.isPresent()) {
|
||||
return null;
|
||||
}
|
||||
return optional.get();
|
||||
}
|
||||
|
||||
public static void removePlayer(String player) {
|
||||
lastPlayer = null;
|
||||
lastPlotPlayer = null;
|
||||
UUIDHandler.getPlayers().remove(player);
|
||||
}
|
||||
|
||||
public static Location getLocation(String world, org.spongepowered.api.world.Location spawn) {
|
||||
return new Location(world, spawn.getBlockX(), spawn.getBlockY(), spawn.getBlockZ());
|
||||
}
|
||||
}
|
@ -1,18 +1,16 @@
|
||||
package com.plotsquared.sponge;
|
||||
package com.plotsquared.sponge.uuid;
|
||||
|
||||
import java.util.UUID;
|
||||
import java.util.concurrent.ExecutionException;
|
||||
|
||||
import org.spongepowered.api.GameProfile;
|
||||
import org.spongepowered.api.entity.player.Player;
|
||||
import org.spongepowered.api.service.profile.GameProfileResolver;
|
||||
|
||||
import com.google.common.base.Charsets;
|
||||
import com.google.inject.Inject;
|
||||
import com.intellectualcrafters.plot.object.OfflinePlotPlayer;
|
||||
import com.intellectualcrafters.plot.object.PlotPlayer;
|
||||
import com.intellectualcrafters.plot.util.UUIDHandler;
|
||||
import com.intellectualcrafters.plot.uuid.UUIDWrapper;
|
||||
import com.plotsquared.sponge.SpongeMain;
|
||||
|
||||
public class SpongeLowerOfflineUUIDWrapper extends UUIDWrapper {
|
||||
|
@ -1,12 +1,13 @@
|
||||
package com.plotsquared.sponge;
|
||||
package com.plotsquared.sponge.uuid;
|
||||
|
||||
import java.util.UUID;
|
||||
import java.util.concurrent.ExecutionException;
|
||||
|
||||
import com.intellectualcrafters.plot.object.OfflinePlotPlayer;
|
||||
import com.intellectualcrafters.plot.object.PlotPlayer;
|
||||
import com.intellectualcrafters.plot.util.UUIDHandler;
|
||||
import com.intellectualcrafters.plot.uuid.UUIDWrapper;
|
||||
import com.plotsquared.sponge.SpongeMain;
|
||||
import com.plotsquared.sponge.SpongePlayer;
|
||||
|
||||
public class SpongeOnlineUUIDWrapper extends UUIDWrapper {
|
||||
|
@ -1,18 +1,16 @@
|
||||
package com.plotsquared.sponge;
|
||||
package com.plotsquared.sponge.uuid;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.UUID;
|
||||
|
||||
import org.spongepowered.api.GameProfile;
|
||||
import org.spongepowered.api.service.profile.GameProfileResolver;
|
||||
|
||||
import com.google.inject.Inject;
|
||||
import com.intellectualcrafters.plot.database.DBFunc;
|
||||
import com.intellectualcrafters.plot.object.RunnableVal;
|
||||
import com.intellectualcrafters.plot.object.StringWrapper;
|
||||
import com.intellectualcrafters.plot.util.TaskManager;
|
||||
import com.intellectualcrafters.plot.util.UUIDHandlerImplementation;
|
||||
import com.intellectualcrafters.plot.uuid.UUIDWrapper;
|
||||
import com.plotsquared.sponge.SpongeMain;
|
||||
|
||||
public class SpongeUUIDHandler extends UUIDHandlerImplementation {
|
||||
|
Reference in New Issue
Block a user