Progress towards #515
Fixes #512
Fixes #514
Fixes (possibly) #529
Fixes #535
Update to latest sponge
This commit is contained in:
boy0001 2015-08-11 20:45:13 +10:00
parent b77b550e56
commit 1a9ec84a4d
23 changed files with 391 additions and 167 deletions

View File

@ -526,6 +526,45 @@ public class PS {
public ArrayList<Plot> sortPlots(Collection<Plot> plots) { public ArrayList<Plot> sortPlots(Collection<Plot> plots) {
return sortPlots(plots, SortType.DISTANCE_FROM_ORIGIN, null); return sortPlots(plots, SortType.DISTANCE_FROM_ORIGIN, null);
} }
public ArrayList<Plot> sortPlotsByTemp(Collection<Plot> plots) {
int max = 0;
int overflowCount = 0;
for (Plot plot : plots) {
if (plot.temp > 0) {
if (plot.temp > max) {
max = plot.temp;
}
}
else {
overflowCount++;
}
}
Plot[] array = new Plot[max + 1];
List<Plot> overflow = new ArrayList<>(overflowCount);
for (Plot plot : plots) {
if (plot.temp <= 0) {
overflow.add(plot);
}
else {
array[plot.temp] = plot;
}
}
ArrayList<Plot> result = new ArrayList<>(plots.size());
for (Plot plot : array) {
if (plot != null) {
result.add(plot);
}
}
Collections.sort(overflow, new Comparator<Plot>() {
@Override
public int compare(Plot a, Plot b) {
return a.hashCode() - b.hashCode();
}
});
result.addAll(overflow);
return result;
}
/** /**
* Sort plots by hashcode * Sort plots by hashcode
@ -834,7 +873,7 @@ public class PS {
} }
} }
public enum SortType { CREATION_DATE, DISTANCE_FROM_ORIGIN; } public enum SortType { CREATION_DATE, CREATION_DATE_TIMESTAMP, DISTANCE_FROM_ORIGIN; }
/** /**
* Sort a collection of plots by world (with a priority world), then by hashcode * Sort a collection of plots by world (with a priority world), then by hashcode
@ -887,6 +926,9 @@ public class PS {
for (String world : worlds) { for (String world : worlds) {
switch (type) { switch (type) {
case CREATION_DATE: case CREATION_DATE:
toReturn.addAll(sortPlotsByTemp(map.get(world)));
break;
case CREATION_DATE_TIMESTAMP:
toReturn.addAll(sortPlotsByTimestamp(map.get(world))); toReturn.addAll(sortPlotsByTimestamp(map.get(world)));
break; break;
case DISTANCE_FROM_ORIGIN: case DISTANCE_FROM_ORIGIN:
@ -1477,13 +1519,14 @@ public class PS {
public void disable() { public void disable() {
try { try {
TASK = null; TASK = null;
database = null;
// Validate that all data in the db is correct // Validate that all data in the db is correct
DBFunc.validatePlots(getPlotsRaw()); DBFunc.validatePlots(getPlotsRaw());
// Close the connection // Close the connection
database.closeConnection(); DBFunc.close();
UUIDHandler.handleShutdown(); UUIDHandler.handleShutdown();
} catch (NullPointerException | SQLException e) { } catch (NullPointerException e) {
log("&cCould not close database connection!"); log("&cCould not close database connection!");
} }
} }
@ -1630,7 +1673,7 @@ public class PS {
FlagManager.addFlag(new AbstractFlag("weather") { FlagManager.addFlag(new AbstractFlag("weather") {
public PlotWeather parseValueRaw(final String value) { public PlotWeather parseValueRaw(final String value) {
switch (value) { switch (value.toLowerCase()) {
case "rain": case "rain":
case "storm": case "storm":
case "on": case "on":

View File

@ -51,8 +51,7 @@ public class Home extends SubCommand {
@Override @Override
public boolean onCommand(final PlotPlayer plr, String[] args) { public boolean onCommand(final PlotPlayer plr, String[] args) {
final ArrayList<Plot> plots = PS.get().sortPlotsByTemp(PS.get().getPlots(plr));//PS.get().sortPlots(PS.get().getPlots(plr), SortType.CREATION_DATE, null);
final ArrayList<Plot> plots = PS.get().sortPlots(PS.get().getPlots(plr), SortType.CREATION_DATE, null);
if (plots.size() == 1) { if (plots.size() == 1) {
MainUtil.teleportPlayer(plr, plr.getLocation(), plots.get(0)); MainUtil.teleportPlayer(plr, plr.getLocation(), plots.get(0));
return true; return true;

View File

@ -23,6 +23,7 @@ package com.intellectualcrafters.plot.commands;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.Comparator; import java.util.Comparator;
import java.util.HashMap;
import java.util.Map.Entry; import java.util.Map.Entry;
import java.util.UUID; import java.util.UUID;
@ -147,14 +148,17 @@ public class Rate extends SubCommand {
} }
}; };
if (plot.getSettings().ratings == null) { if (plot.getSettings().ratings == null) {
TaskManager.runTaskAsync(new Runnable() { if (!Settings.CACHE_RATINGS) {
@Override TaskManager.runTaskAsync(new Runnable() {
public void run() { @Override
plot.getSettings().ratings = DBFunc.getRatings(plot); public void run() {
run.run(); plot.getSettings().ratings = DBFunc.getRatings(plot);
} run.run();
}); }
return true; });
return true;
}
plot.getSettings().ratings = new HashMap<UUID, Integer>();
} }
run.run(); run.run();
return true; return true;
@ -196,14 +200,17 @@ public class Rate extends SubCommand {
} }
}; };
if (plot.getSettings().ratings == null) { if (plot.getSettings().ratings == null) {
TaskManager.runTaskAsync(new Runnable() { if (!Settings.CACHE_RATINGS) {
@Override TaskManager.runTaskAsync(new Runnable() {
public void run() { @Override
plot.getSettings().ratings = DBFunc.getRatings(plot); public void run() {
run.run(); plot.getSettings().ratings = DBFunc.getRatings(plot);
} run.run();
}); }
return true; });
return true;
}
plot.getSettings().ratings = new HashMap<UUID, Integer>();
} }
run.run(); run.run();
return true; return true;

View File

@ -68,10 +68,10 @@ public class Visit extends SubCommand {
UUID user = UUIDHandler.getCachedUUID(args[0], null); UUID user = UUIDHandler.getCachedUUID(args[0], null);
if (user != null ) { if (user != null ) {
// do plots by username // do plots by username
plots = PS.get().sortPlots(PS.get().getPlots(user), SortType.CREATION_DATE, null); plots = PS.get().sortPlotsByTemp(PS.get().getPlots(user));
} else if (PS.get().isPlotWorld(args[0])) { } else if (PS.get().isPlotWorld(args[0])) {
// do plots by world // do plots by world
plots = PS.get().sortPlots(PS.get().getPlotsInWorld(args[0]), SortType.CREATION_DATE, null); plots = PS.get().sortPlots(PS.get().getPlotsInWorld(args[0]), SortType.DISTANCE_FROM_ORIGIN, null);
} }
else { else {
Plot plot = MainUtil.getPlotFromString(plr, args[0], true); Plot plot = MainUtil.getPlotFromString(plr, args[0], true);

View File

@ -138,7 +138,8 @@ public class list extends SubCommand {
MainUtil.sendMessage(plr, C.NO_PERMISSION, "plots.list.mine"); MainUtil.sendMessage(plr, C.NO_PERMISSION, "plots.list.mine");
return false; return false;
} }
plots = new ArrayList<>(PS.get().getPlots(plr)); sort = false;
plots = PS.get().sortPlotsByTemp(PS.get().getPlots(plr));
break; break;
} }
case "shared": { case "shared": {
@ -283,7 +284,8 @@ public class list extends SubCommand {
MainUtil.sendMessage(plr, C.NO_PERMISSION, "plots.list.player"); MainUtil.sendMessage(plr, C.NO_PERMISSION, "plots.list.player");
return false; return false;
} }
plots = new ArrayList<>(PS.get().getPlots(uuid)); sort = false;
plots = PS.get().sortPlotsByTemp(PS.get().getPlots(uuid));
break; break;
} }
} }

View File

@ -334,4 +334,6 @@ public interface AbstractDB {
* Don't fuck with this one, unless you enjoy it rough * Don't fuck with this one, unless you enjoy it rough
*/ */
boolean deleteTables(); boolean deleteTables();
void close();
} }

View File

@ -420,4 +420,8 @@ public class DBFunc {
public static void setPosition(final PlotCluster cluster, final String position) { public static void setPosition(final PlotCluster cluster, final String position) {
dbManager.setPosition(cluster, position); dbManager.setPosition(cluster, position);
} }
public static void close() {
dbManager.close();
}
} }

View File

@ -108,6 +108,25 @@ public class SQLManager implements AbstractDB {
tasks = new ConcurrentLinkedQueue<>(); tasks = new ConcurrentLinkedQueue<>();
plotTasks.put(plot, tasks); plotTasks.put(plot, tasks);
} }
if (task == null) {
task = new UniqueStatement(plot.hashCode() + "") {
@Override
public PreparedStatement get() throws SQLException {
return null;
}
@Override
public void set(PreparedStatement stmt) throws SQLException {}
@Override
public void addBatch(PreparedStatement stmt) throws SQLException {}
@Override
public void execute(PreparedStatement stmt) throws SQLException {}
};
}
tasks.add(task); tasks.add(task);
} }
@ -140,28 +159,27 @@ public class SQLManager implements AbstractDB {
TaskManager.runTaskAsync(new Runnable() { TaskManager.runTaskAsync(new Runnable() {
@Override @Override
public void run() { public void run() {
commit();
long last = System.currentTimeMillis(); long last = System.currentTimeMillis();
while (true) { while (true) {
if (PS.get().getDatabase().getConnection() == null) { if (PS.get().getDatabase() == null) {
break; break;
} }
// schedule reconnect // schedule reconnect
if (Settings.DB.USE_MYSQL && System.currentTimeMillis() - last > 550000) { if (Settings.DB.USE_MYSQL && System.currentTimeMillis() - last > 550000) {
last = System.currentTimeMillis(); last = System.currentTimeMillis();
commit();
try { try {
connection.close(); close();
connection = PS.get().getDatabase().forceConnection(); connection = PS.get().getDatabase().forceConnection();
} catch (SQLException | ClassNotFoundException e) { } catch (SQLException | ClassNotFoundException e) {
e.printStackTrace(); e.printStackTrace();
} }
} }
sendBatch(); if (!sendBatch()) {
try { try {
Thread.sleep(50); Thread.sleep(50);
} catch (InterruptedException e) { } catch (InterruptedException e) {
e.printStackTrace(); e.printStackTrace();
}
} }
} }
} }
@ -182,14 +200,10 @@ public class SQLManager implements AbstractDB {
public boolean sendBatch() { public boolean sendBatch() {
try { try {
try { if (globalTasks.size() > 0) {
if (connection.getAutoCommit()) { if (connection.getAutoCommit()) {
connection.setAutoCommit(false); connection.setAutoCommit(false);
} }
} catch (SQLException e) {
e.printStackTrace();
}
if (globalTasks.size() > 0) {
Runnable task = globalTasks.remove(); Runnable task = globalTasks.remove();
if (task != null) { if (task != null) {
task.run(); task.run();
@ -197,8 +211,12 @@ public class SQLManager implements AbstractDB {
commit(); commit();
return true; return true;
} }
int count = 0; int count = -1;
if (plotTasks.size() > 0) { if (plotTasks.size() > 0) {
count = 0;
if (connection.getAutoCommit()) {
connection.setAutoCommit(false);
}
String method = null; String method = null;
PreparedStatement stmt = null; PreparedStatement stmt = null;
UniqueStatement task = null; UniqueStatement task = null;
@ -232,6 +250,10 @@ public class SQLManager implements AbstractDB {
} }
} }
if (clusterTasks.size() > 0) { if (clusterTasks.size() > 0) {
count = 0;
if (connection.getAutoCommit()) {
connection.setAutoCommit(false);
}
String method = null; String method = null;
PreparedStatement stmt = null; PreparedStatement stmt = null;
UniqueStatement task = null; UniqueStatement task = null;
@ -239,11 +261,11 @@ public class SQLManager implements AbstractDB {
ArrayList<PlotCluster> keys = new ArrayList<>(clusterTasks.keySet()); ArrayList<PlotCluster> keys = new ArrayList<>(clusterTasks.keySet());
for (int i = 0; i < keys.size(); i++) { for (int i = 0; i < keys.size(); i++) {
PlotCluster plot = keys.get(i); PlotCluster plot = keys.get(i);
if (plotTasks.get(plot).size() == 0) { if (clusterTasks.get(plot).size() == 0) {
plotTasks.remove(plot); clusterTasks.remove(plot);
continue; continue;
} }
task = plotTasks.get(plot).remove(); task = clusterTasks.get(plot).remove();
count++; count++;
if (task != null) { if (task != null) {
if (task._method == null || !task._method.equals(method)) { if (task._method == null || !task._method.equals(method)) {
@ -264,18 +286,20 @@ public class SQLManager implements AbstractDB {
stmt.close(); stmt.close();
} }
} }
commit(); if (count > 0) {
if (count != 0) {
commit(); commit();
return true; return true;
} }
else if (count != -1) {
if (!connection.getAutoCommit()) {
connection.setAutoCommit(true);
}
}
if (clusterTasks.size() > 0) { if (clusterTasks.size() > 0) {
clusterTasks.clear(); clusterTasks.clear();
commit(); }
}
if (plotTasks.size() > 0) { if (plotTasks.size() > 0) {
plotTasks.clear(); plotTasks.clear();
commit();
} }
} }
catch (Exception e) { catch (Exception e) {
@ -355,31 +379,32 @@ public class SQLManager implements AbstractDB {
// Populating structures // Populating structures
final PreparedStatement stmt = connection.prepareStatement(GET_ALL_PLOTS); final PreparedStatement stmt = connection.prepareStatement(GET_ALL_PLOTS);
final ResultSet result = stmt.executeQuery(); try (ResultSet result = stmt.executeQuery()) {
while (result.next()) { while (result.next()) {
final int id = result.getInt("id"); final int id = result.getInt("id");
int x = result.getInt("plot_id_x"); int x = result.getInt("plot_id_x");
int y = result.getInt("plot_id_z"); int y = result.getInt("plot_id_z");
PlotId plotId = new PlotId(x, y); PlotId plotId = new PlotId(x, y);
Plot plot = plotMap.get(plotId); Plot plot = plotMap.get(plotId);
if (plot != null) { if (plot != null) {
settings.add(new SettingsPair(id, plot.getSettings())); settings.add(new SettingsPair(id, plot.getSettings()));
if (plot.getDenied() != null) { if (plot.getDenied() != null) {
for (UUID uuid : plot.getDenied()) { for (UUID uuid : plot.getDenied()) {
denied.add(new UUIDPair(id, uuid)); denied.add(new UUIDPair(id, uuid));
}
}
if (plot.getMembers() != null) {
for (UUID uuid : plot.getMembers()) {
trusted.add(new UUIDPair(id, uuid));
}
}
if (plot.getTrusted() != null) {
for (UUID uuid : plot.getTrusted()) {
helpers.add(new UUIDPair(id, uuid));
}
} }
} }
if (plot.getMembers() != null) { }
for (UUID uuid : plot.getMembers()) {
trusted.add(new UUIDPair(id, uuid));
}
}
if (plot.getTrusted() != null) {
for (UUID uuid : plot.getTrusted()) {
helpers.add(new UUIDPair(id, uuid));
}
}
}
} }
createSettings(settings, new Runnable() { createSettings(settings, new Runnable() {
@Override @Override
@ -843,10 +868,10 @@ public class SQLManager implements AbstractDB {
public void commit() { public void commit() {
try { try {
if (this.connection.getAutoCommit()) { if (!this.connection.getAutoCommit()) {
this.connection.setAutoCommit(false); this.connection.commit();
this.connection.setAutoCommit(true);
} }
this.connection.commit();
} catch (SQLException e) { } catch (SQLException e) {
e.printStackTrace(); e.printStackTrace();
} }
@ -1065,7 +1090,6 @@ public class SQLManager implements AbstractDB {
} }
PreparedStatement stmt = null; PreparedStatement stmt = null;
try { try {
commit();
commit(); commit();
if (plot.temp > 0) { if (plot.temp > 0) {
return plot.temp; return plot.temp;
@ -2326,7 +2350,7 @@ public class SQLManager implements AbstractDB {
@Override @Override
public void run() { public void run() {
try { try {
SQLManager.this.connection.close(); close();
SQLManager.this.connection = PS.get().getDatabase().forceConnection(); SQLManager.this.connection = PS.get().getDatabase().forceConnection();
final Statement stmt = connection.createStatement(); final Statement stmt = connection.createStatement();
stmt.addBatch("DROP TABLE `" + prefix + "cluster_invited`"); stmt.addBatch("DROP TABLE `" + prefix + "cluster_invited`");
@ -2382,6 +2406,13 @@ public class SQLManager implements AbstractDB {
break; break;
} }
} }
try {
if (connection.getAutoCommit()) {
connection.setAutoCommit(false);
}
} catch (SQLException e) {
e.printStackTrace();
}
ConcurrentHashMap<String, ConcurrentHashMap<PlotId, Plot>> database = getPlots(); ConcurrentHashMap<String, ConcurrentHashMap<PlotId, Plot>> database = getPlots();
ArrayList<Plot> toCreate = new ArrayList<>(); ArrayList<Plot> toCreate = new ArrayList<>();
for (Plot plot : PS.get().getPlotsRaw()) { for (Plot plot : PS.get().getPlotsRaw()) {
@ -2473,8 +2504,8 @@ public class SQLManager implements AbstractDB {
setFlags(plot, pf.values()); setFlags(plot, pf.values());
} }
} }
// TODO comments // TODO comments (null)
// TODO ratings // TODO ratings (null)
// TODO alias // TODO alias
// TODO unconnected entries from helpers, trusted, denied, comments, settings, rating // TODO unconnected entries from helpers, trusted, denied, comments, settings, rating
} }
@ -2487,11 +2518,15 @@ public class SQLManager implements AbstractDB {
} }
} }
} }
commit();
PS.debug("$4Done!"); }
@Override
public void close() {
try { try {
connection.commit(); connection.close();
} catch (SQLException e) {
e.printStackTrace();
} }
catch (SQLException e) {}
} }
} }

View File

@ -45,7 +45,7 @@ public class Flag {
this.key = key; this.key = key;
this.value = key.parseValueRaw(value); this.value = key.parseValueRaw(value);
if (this.value == null) { if (this.value == null) {
throw new IllegalArgumentException(key.getValueDesc()); throw new IllegalArgumentException(key.getValueDesc() + " (" + value + ")");
} }
} }

View File

@ -163,6 +163,7 @@ public class Plot {
} }
} }
this.timestamp = timestamp; this.timestamp = timestamp;
this.temp = temp;
} }
/** /**

View File

@ -1362,14 +1362,14 @@ public class MainUtil {
Plot p2 = PS.get().getPlot(world, newPlot); Plot p2 = PS.get().getPlot(world, newPlot);
if (p1 == null || p1.owner == null) { if (p1 == null || p1.owner == null) {
if (p2 != null && p2.owner != null) { if (p2 != null && p2.owner != null) {
moveData(p2, p1, whenDone); moveData(p2, getPlot(world, current), whenDone);
return true; return true;
} }
return false; return false;
} }
if (p2 == null || p2.owner == null) { if (p2 == null || p2.owner == null) {
if (p1 != null && p1.owner != null) { if (p1 != null && p1.owner != null) {
moveData(p1, p2, whenDone); moveData(p1, getPlot(world, newPlot), whenDone);
return true; return true;
} }
return false; return false;
@ -1395,21 +1395,24 @@ public class MainUtil {
public static boolean moveData(final Plot plot1, final Plot plot2, final Runnable whenDone) { public static boolean moveData(final Plot plot1, final Plot plot2, final Runnable whenDone) {
if (plot1.owner == null) { if (plot1.owner == null) {
TaskManager.runTaskLater(whenDone, 1); PS.debug(plot2 +" is unowned (single)");
TaskManager.runTask(whenDone);
return false; return false;
} }
final Plot pos1 = getBottomPlot(plot1); final Plot pos1 = getBottomPlot(plot1);
final Plot pos2 = getTopPlot(plot1); final Plot pos2 = getTopPlot(plot1);
final PlotId size = MainUtil.getSize(plot1); final PlotId size = MainUtil.getSize(plot1);
if (!MainUtil.isUnowned(plot2.world, plot2.id, new PlotId((plot2.id.x + size.x) - 1, (plot2.id.y + size.y) - 1))) { if (!MainUtil.isUnowned(plot2.world, plot2.id, new PlotId((plot2.id.x + size.x) - 1, (plot2.id.y + size.y) - 1))) {
TaskManager.runTaskLater(whenDone, 1); PS.debug(plot2 +" is unowned (multi)");
TaskManager.runTask(whenDone);
return false; return false;
} }
final int offset_x = plot2.id.x - pos1.id.x; final int offset_x = plot2.id.x - pos1.id.x;
final int offset_y = plot2.id.y - pos1.id.y; final int offset_y = plot2.id.y - pos1.id.y;
final ArrayList<PlotId> selection = getPlotSelectionIds(pos1.id, pos2.id); final ArrayList<PlotId> selection = getPlotSelectionIds(pos1.id, pos2.id);
for (final PlotId id : selection) { for (final PlotId id : selection) {
DBFunc.movePlot(getPlot(plot1.world, new PlotId(id.x, id.y)), getPlot(plot2.world, new PlotId(id.x + offset_x, id.y + offset_y))); String worldOriginal = plot1.world;
PlotId idOriginal = new PlotId(id.x, id.y);
final Plot plot = PS.get().getPlot(plot1.world, id); final Plot plot = PS.get().getPlot(plot1.world, id);
Map<String, ConcurrentHashMap<PlotId, Plot>> raw = PS.get().getAllPlotsRaw(); Map<String, ConcurrentHashMap<PlotId, Plot>> raw = PS.get().getAllPlotsRaw();
raw.get(plot1.world).remove(id); raw.get(plot1.world).remove(id);
@ -1417,6 +1420,7 @@ public class MainUtil {
plot.id.y += offset_y; plot.id.y += offset_y;
plot.id.recalculateHash(); plot.id.recalculateHash();
raw.get(plot2.world).put(plot.id, plot); raw.get(plot2.world).put(plot.id, plot);
DBFunc.movePlot(getPlot(worldOriginal, idOriginal), getPlot(plot2.world, new PlotId(id.x + offset_x, id.y + offset_y)));
} }
TaskManager.runTaskLater(whenDone, 1); TaskManager.runTaskLater(whenDone, 1);
return true; return true;
@ -1760,6 +1764,9 @@ public class MainUtil {
if (plot.getSettings().ratings != null) { if (plot.getSettings().ratings != null) {
rating = plot.getSettings().ratings; rating = plot.getSettings().ratings;
} }
else if (Settings.CACHE_RATINGS) {
rating = new HashMap<>();
}
else { else {
rating = DBFunc.getRatings(plot); rating = DBFunc.getRatings(plot);
} }
@ -1790,6 +1797,9 @@ public class MainUtil {
if (plot.getSettings().ratings != null) { if (plot.getSettings().ratings != null) {
rating = plot.getSettings().ratings; rating = plot.getSettings().ratings;
} }
else if (Settings.CACHE_RATINGS) {
rating = new HashMap<>();
}
else { else {
rating = DBFunc.getRatings(plot); rating = DBFunc.getRatings(plot);
} }

View File

@ -126,8 +126,8 @@ public class BukkitMain extends JavaPlugin implements Listener, IPlotMain {
@Override @Override
public void onDisable() { public void onDisable() {
Bukkit.getScheduler().cancelTasks(this);
PS.get().disable(); PS.get().disable();
Bukkit.getScheduler().cancelTasks(this);
THIS = null; THIS = null;
} }

View File

@ -178,6 +178,8 @@ public class EntityWrapper {
this.x = loc.getX(); this.x = loc.getX();
this.y = loc.getY(); this.y = loc.getY();
this.z = loc.getZ(); this.z = loc.getZ();
System.out.print("ENTITY: " + entity.getType());
System.out.print("ENTITY: " + entity.getType().getTypeId());
this.id = entity.getType().getTypeId(); this.id = entity.getType().getTypeId();
if (depth == 0) { if (depth == 0) {
return; return;

View File

@ -494,12 +494,14 @@ public class BukkitChunkManager extends ChunkManager {
public static void restoreEntities(final World world, final int x_offset, final int z_offset) { public static void restoreEntities(final World world, final int x_offset, final int z_offset) {
for (final EntityWrapper entity : entities) { for (final EntityWrapper entity : entities) {
try { try {
System.out.print("RESTORING ENTITIE!: " + EntityType.fromId(entity.id));
entity.spawn(world, x_offset, z_offset); entity.spawn(world, x_offset, z_offset);
} catch (final Exception e) { } catch (final Exception e) {
PS.debug("Failed to restore entity (e): " + entity.x + "," + entity.y + "," + entity.z + " : " + entity.id + " : " + EntityType.fromId(entity.id)); PS.debug("Failed to restore entity (e): " + entity.x + "," + entity.y + "," + entity.z + " : " + entity.id + " : " + EntityType.fromId(entity.id));
e.printStackTrace(); e.printStackTrace();
} }
} }
entities.clear();
} }
public static void restoreBlocks(final World world, final int x_offset, final int z_offset) { public static void restoreBlocks(final World world, final int x_offset, final int z_offset) {

View File

@ -12,6 +12,7 @@ import org.bukkit.World;
import com.intellectualcrafters.plot.PS; import com.intellectualcrafters.plot.PS;
import com.intellectualcrafters.plot.object.ChunkLoc; import com.intellectualcrafters.plot.object.ChunkLoc;
import com.intellectualcrafters.plot.util.TaskManager;
import com.intellectualcrafters.plot.util.ReflectionUtils.RefClass; import com.intellectualcrafters.plot.util.ReflectionUtils.RefClass;
import com.intellectualcrafters.plot.util.ReflectionUtils.RefConstructor; import com.intellectualcrafters.plot.util.ReflectionUtils.RefConstructor;
import com.intellectualcrafters.plot.util.ReflectionUtils.RefField; import com.intellectualcrafters.plot.util.ReflectionUtils.RefField;
@ -87,12 +88,20 @@ public class SendChunk {
} }
} }
if (unload) { if (unload) {
try { TaskManager.runTask(new Runnable() {
chunk.unload(true, true); @Override
} public void run() {
catch (Exception e) { try {
e.printStackTrace(); chunk.unload(true, true);
} }
catch (Exception e) {
String worldname = chunk.getWorld().getName();
PS.debug("$4Could not save chunk: " + worldname + ";" + chunk.getX() + ";" + chunk.getZ());
PS.debug("$3 - $4File may be open in another process (e.g. MCEdit)");
PS.debug("$3 - $4" + worldname + "/level.dat or " + worldname + "level_old.dat may be corrupt (try repairing or removing these)");
}
}
});
} }
} }

View File

@ -21,7 +21,7 @@ import org.spongepowered.api.Server;
import org.spongepowered.api.block.BlockState; import org.spongepowered.api.block.BlockState;
import org.spongepowered.api.block.BlockType; import org.spongepowered.api.block.BlockType;
import org.spongepowered.api.block.BlockTypes; import org.spongepowered.api.block.BlockTypes;
import org.spongepowered.api.data.manipulator.block.StoneData; import org.spongepowered.api.data.manipulator.mutable.block.StoneData;
import org.spongepowered.api.entity.player.Player; import org.spongepowered.api.entity.player.Player;
import org.spongepowered.api.event.Subscribe; import org.spongepowered.api.event.Subscribe;
import org.spongepowered.api.event.entity.player.PlayerChatEvent; import org.spongepowered.api.event.entity.player.PlayerChatEvent;
@ -261,7 +261,7 @@ public class SpongeMain implements IPlotMain, PluginContainer {
case 0: { case 0: {
this.modify = new WorldModify(generator, false); this.modify = new WorldModify(generator, false);
game.getRegistry().registerWorldGeneratorModifier(modify); game.getRegistry().registerWorldGeneratorModifier(modify);
Optional<World> builder = game.getRegistry().getWorldBuilder() Optional<World> builder = game.getRegistry().createWorldBuilder()
.name(world) .name(world)
.enabled(true) .enabled(true)
.loadsOnStartup(true) .loadsOnStartup(true)
@ -277,7 +277,7 @@ public class SpongeMain implements IPlotMain, PluginContainer {
default: { default: {
this.modify = new WorldModify(generator, true); this.modify = new WorldModify(generator, true);
game.getRegistry().registerWorldGeneratorModifier(modify); game.getRegistry().registerWorldGeneratorModifier(modify);
Optional<World> builder = game.getRegistry().getWorldBuilder() Optional<World> builder = game.getRegistry().createWorldBuilder()
.name(world) .name(world)
.enabled(true) .enabled(true)
.loadsOnStartup(true) .loadsOnStartup(true)
@ -356,17 +356,16 @@ public class SpongeMain implements IPlotMain, PluginContainer {
for (int i = 0; i < data_lines.size(); i++) { for (int i = 0; i < data_lines.size(); i++) {
String classname = packaze + data_lines.get(i).trim(); String classname = packaze + data_lines.get(i).trim();
try { try {
Class<?> clazz = Class.forName(classname); Class<?> clazz = Class.forName(classname);
fields = clazz.getDeclaredFields(); fields = clazz.getDeclaredFields();
for (Field field : fields) { for (Field field : fields) {
CatalogType type = (CatalogType) field.get(null); CatalogType type = (CatalogType) field.get(null);
String minecraft_id = type.getId(); String minecraft_id = type.getId();
BlockState state = states.get(minecraft_id + ":" + 0); BlockState state = states.get(minecraft_id + ":" + 0);
if (state == null) { if (state == null) {
continue; continue;
}
} }
state.getManipulator(StoneData.class);
}
} }
catch (Throwable e) {} catch (Throwable e) {}
} }

View File

@ -8,9 +8,13 @@ import java.util.Random;
import org.spongepowered.api.block.BlockState; import org.spongepowered.api.block.BlockState;
import org.spongepowered.api.block.BlockType; import org.spongepowered.api.block.BlockType;
import org.spongepowered.api.util.DiscreteTransform3;
import org.spongepowered.api.world.Chunk; import org.spongepowered.api.world.Chunk;
import org.spongepowered.api.world.World; import org.spongepowered.api.world.World;
import org.spongepowered.api.world.extent.ImmutableBlockVolume;
import org.spongepowered.api.world.extent.MutableBlockVolume; import org.spongepowered.api.world.extent.MutableBlockVolume;
import org.spongepowered.api.world.extent.StorageType;
import org.spongepowered.api.world.extent.UnmodifiableBlockVolume;
import org.spongepowered.api.world.gen.GeneratorPopulator; import org.spongepowered.api.world.gen.GeneratorPopulator;
import org.spongepowered.api.world.gen.Populator; import org.spongepowered.api.world.gen.Populator;
import org.spongepowered.api.world.gen.WorldGenerator; import org.spongepowered.api.world.gen.WorldGenerator;
@ -283,6 +287,48 @@ public class AugmentedPopulator implements Populator {
public void setBlockType(Vector3i v, BlockType t) { public void setBlockType(Vector3i v, BlockType t) {
setBlockType(v.getX(), v.getY(), v.getZ(), t); setBlockType(v.getX(), v.getY(), v.getZ(), t);
} }
@Override
public MutableBlockVolume getBlockCopy() {
// TODO Auto-generated method stub
return this;
}
@Override
public MutableBlockVolume getBlockCopy(StorageType arg0) {
// TODO Auto-generated method stub
return this;
}
@Override
public ImmutableBlockVolume getImmutableBlockCopy() {
// TODO Auto-generated method stub
return null;
}
@Override
public UnmodifiableBlockVolume getUnmodifiableBlockView() {
// TODO Auto-generated method stub
return null;
}
@Override
public MutableBlockVolume getBlockView(DiscreteTransform3 arg0) {
// TODO Auto-generated method stub
return this;
}
@Override
public MutableBlockVolume getBlockView(Vector3i arg0, Vector3i arg1) {
// TODO Auto-generated method stub
return this;
}
@Override
public MutableBlockVolume getRelativeBlockView() {
// TODO Auto-generated method stub
return this;
}
}; };
this.populator.populate(world, blocks , null); this.populator.populate(world, blocks , null);
} }

View File

@ -27,7 +27,6 @@ import org.spongepowered.api.event.block.BlockMoveEvent;
import org.spongepowered.api.event.block.BlockRedstoneUpdateEvent; import org.spongepowered.api.event.block.BlockRedstoneUpdateEvent;
import org.spongepowered.api.event.block.FloraGrowEvent; import org.spongepowered.api.event.block.FloraGrowEvent;
import org.spongepowered.api.event.entity.EntityChangeBlockEvent; 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.EntitySpawnEvent;
import org.spongepowered.api.event.entity.EntityTeleportEvent; import org.spongepowered.api.event.entity.EntityTeleportEvent;
import org.spongepowered.api.event.entity.player.PlayerBreakBlockEvent; import org.spongepowered.api.event.entity.player.PlayerBreakBlockEvent;
@ -41,11 +40,13 @@ import org.spongepowered.api.event.entity.player.PlayerQuitEvent;
import org.spongepowered.api.event.message.CommandEvent; import org.spongepowered.api.event.message.CommandEvent;
import org.spongepowered.api.event.network.PlayerConnectionEvent; import org.spongepowered.api.event.network.PlayerConnectionEvent;
import org.spongepowered.api.event.world.ChunkPreGenerateEvent; import org.spongepowered.api.event.world.ChunkPreGenerateEvent;
import org.spongepowered.api.event.world.WorldOnExplosionEvent;
import org.spongepowered.api.network.PlayerConnection; import org.spongepowered.api.network.PlayerConnection;
import org.spongepowered.api.text.Text; import org.spongepowered.api.text.Text;
import org.spongepowered.api.text.Texts; import org.spongepowered.api.text.Texts;
import org.spongepowered.api.util.command.CommandSource; import org.spongepowered.api.util.command.CommandSource;
import org.spongepowered.api.world.World; import org.spongepowered.api.world.World;
import org.spongepowered.api.world.explosion.Explosion;
import org.spongepowered.api.world.extent.Extent; import org.spongepowered.api.world.extent.Extent;
import com.flowpowered.math.vector.Vector3d; import com.flowpowered.math.vector.Vector3d;
@ -110,7 +111,8 @@ public class MainListener {
} }
final Location loc = SpongeUtil.getLocation(event.getLocation()); final Location loc = SpongeUtil.getLocation(event.getLocation());
final String world = loc.getWorld(); final String world = loc.getWorld();
if (!PS.get().isPlotWorld(world)) { PlotWorld plotworld = PS.get().getPlotWorld(world);
if (plotworld == null) {
return; return;
} }
Plot plot = MainUtil.getPlot(loc); Plot plot = MainUtil.getPlot(loc);
@ -132,7 +134,9 @@ public class MainListener {
return; return;
} }
event.setCancelled(true); if (!plotworld.MOB_SPAWNING) {
event.setCancelled(true);
}
} }
@Subscribe @Subscribe
@ -164,7 +168,7 @@ public class MainListener {
@Subscribe @Subscribe
public void onBlockMove(BlockMoveEvent event) { public void onBlockMove(BlockMoveEvent event) {
org.spongepowered.api.world.Location block = event.getBlocks().get(0); org.spongepowered.api.world.Location block = event.getLocations().get(0);
Extent extent = block.getExtent(); Extent extent = block.getExtent();
if (extent instanceof World) { if (extent instanceof World) {
World world = (World) extent; World world = (World) extent;
@ -172,7 +176,7 @@ public class MainListener {
if (!PS.get().isPlotWorld(worldname)) { if (!PS.get().isPlotWorld(worldname)) {
return; return;
} }
event.filter(new Predicate<org.spongepowered.api.world.Location>() { event.filterLocations(new Predicate<org.spongepowered.api.world.Location>() {
@Override @Override
public boolean apply(org.spongepowered.api.world.Location loc) { public boolean apply(org.spongepowered.api.world.Location loc) {
if (MainUtil.isPlotRoad(SpongeUtil.getLocation(worldname, loc))) { if (MainUtil.isPlotRoad(SpongeUtil.getLocation(worldname, loc))) {
@ -186,7 +190,7 @@ public class MainListener {
@Subscribe @Subscribe
public void onFloraGrow(FloraGrowEvent event) { public void onFloraGrow(FloraGrowEvent event) {
org.spongepowered.api.world.Location block = event.getBlock(); org.spongepowered.api.world.Location block = event.getLocation();
Extent extent = block.getExtent(); Extent extent = block.getExtent();
if (extent instanceof World) { if (extent instanceof World) {
World world = (World) extent; World world = (World) extent;
@ -258,16 +262,19 @@ public class MainListener {
} }
@Subscribe @Subscribe
public void onBigBoom(final EntityExplosionEvent event) { public void onBigBoom(final WorldOnExplosionEvent event) {
Location loc = SpongeUtil.getLocation(event.getExplosionLocation()); World worldObj = event.getWorld();
final String world = loc.getWorld(); final String world = worldObj.getName();
if (!PS.get().isPlotWorld(world)) { if (!PS.get().isPlotWorld(world)) {
return; return;
} }
Explosion explosion = event.getExplosion();
Vector3d origin = explosion.getOrigin();
Location loc = new Location(world, origin.getFloorX(), origin.getFloorY(), origin.getFloorZ());
final Plot plot = MainUtil.getPlot(loc); final Plot plot = MainUtil.getPlot(loc);
if ((plot != null) && plot.hasOwner()) { if ((plot != null) && plot.hasOwner()) {
if (FlagManager.isPlotFlagTrue(plot, "explosion")) { if (FlagManager.isPlotFlagTrue(plot, "explosion")) {
event.filter(new Predicate<org.spongepowered.api.world.Location>() { event.filterLocations(new Predicate<org.spongepowered.api.world.Location>() {
@Override @Override
public boolean apply(org.spongepowered.api.world.Location loc) { public boolean apply(org.spongepowered.api.world.Location loc) {
if (!plot.equals(MainUtil.getPlot(SpongeUtil.getLocation(loc)))) { if (!plot.equals(MainUtil.getPlot(SpongeUtil.getLocation(loc)))) {
@ -276,14 +283,35 @@ public class MainListener {
return true; return true;
} }
}); });
event.filterEntities(new Predicate<Entity>() {
@Override
public boolean apply(Entity entity) {
if (!plot.equals(MainUtil.getPlot(SpongeUtil.getLocation(entity)))) {
return false;
}
return true;
}
});
return; return;
} }
} }
if (MainUtil.isPlotArea(loc)) { if (MainUtil.isPlotArea(loc)) {
event.setYield(0); explosion.shouldBreakBlocks(false);
explosion.canCauseFire(false);
explosion.setRadius(0);
event.filterEntities(new Predicate<Entity>() {
@Override
public boolean apply(Entity entity) {
if (!plot.equals(MainUtil.getPlot(SpongeUtil.getLocation(entity)))) {
return false;
}
return true;
}
});
return;
} else { } else {
if (FlagManager.isPlotFlagTrue(plot, "explosion")) { if (FlagManager.isPlotFlagTrue(plot, "explosion")) {
event.filter(new Predicate<org.spongepowered.api.world.Location>() { event.filterLocations(new Predicate<org.spongepowered.api.world.Location>() {
@Override @Override
public boolean apply(org.spongepowered.api.world.Location loc) { public boolean apply(org.spongepowered.api.world.Location loc) {
if (!plot.equals(MainUtil.getPlot(SpongeUtil.getLocation(loc)))) { if (!plot.equals(MainUtil.getPlot(SpongeUtil.getLocation(loc)))) {
@ -292,6 +320,15 @@ public class MainListener {
return true; return true;
} }
}); });
event.filterEntities(new Predicate<Entity>() {
@Override
public boolean apply(Entity entity) {
if (!plot.equals(MainUtil.getPlot(SpongeUtil.getLocation(entity)))) {
return false;
}
return true;
}
});
return; return;
} }
} }
@ -317,7 +354,7 @@ public class MainListener {
@Subscribe @Subscribe
public void onRedstoneEvent(BlockRedstoneUpdateEvent event) { public void onRedstoneEvent(BlockRedstoneUpdateEvent event) {
org.spongepowered.api.world.Location block = event.getBlock(); org.spongepowered.api.world.Location block = event.getLocation();
Location loc = SpongeUtil.getLocation(block); Location loc = SpongeUtil.getLocation(block);
if (loc == null || !PS.get().isPlotWorld(loc.getWorld())) { if (loc == null || !PS.get().isPlotWorld(loc.getWorld())) {
return; return;
@ -356,11 +393,11 @@ public class MainListener {
Player player = event.getEntity(); Player player = event.getEntity();
World world = player.getWorld(); World world = player.getWorld();
String worldname = world.getName(); String worldname = world.getName();
org.spongepowered.api.world.Location blockLoc = event.getBlock(); org.spongepowered.api.world.Location blockLoc = event.getLocation();
final Location loc = SpongeUtil.getLocation(worldname, event.getBlock()); final Location loc = SpongeUtil.getLocation(worldname, blockLoc);
final Plot plot = MainUtil.getPlot(loc); final Plot plot = MainUtil.getPlot(loc);
if (plot != null) { if (plot != null) {
if (event.getBlock().getY() == 0) { if (blockLoc.getY() == 0) {
event.setCancelled(true); event.setCancelled(true);
return; return;
} }
@ -403,11 +440,11 @@ public class MainListener {
Player player = event.getEntity(); Player player = event.getEntity();
World world = player.getWorld(); World world = player.getWorld();
String worldname = world.getName(); String worldname = world.getName();
org.spongepowered.api.world.Location blockLoc = event.getBlock(); org.spongepowered.api.world.Location blockLoc = event.getLocation();
final Location loc = SpongeUtil.getLocation(worldname, event.getBlock()); final Location loc = SpongeUtil.getLocation(worldname, blockLoc);
final Plot plot = MainUtil.getPlot(loc); final Plot plot = MainUtil.getPlot(loc);
if (plot != null) { if (plot != null) {
if (event.getBlock().getY() == 0) { if (blockLoc.getY() == 0) {
event.setCancelled(true); event.setCancelled(true);
return; return;
} }
@ -450,11 +487,11 @@ public class MainListener {
Player player = event.getEntity(); Player player = event.getEntity();
World world = player.getWorld(); World world = player.getWorld();
String worldname = world.getName(); String worldname = world.getName();
org.spongepowered.api.world.Location blockLoc = event.getBlock(); org.spongepowered.api.world.Location blockLoc = event.getLocation();
final Location loc = SpongeUtil.getLocation(worldname, event.getBlock()); final Location loc = SpongeUtil.getLocation(worldname, blockLoc);
final Plot plot = MainUtil.getPlot(loc); final Plot plot = MainUtil.getPlot(loc);
if (plot != null) { if (plot != null) {
if (event.getBlock().getY() == 0) { if (blockLoc.getY() == 0) {
event.setCancelled(true); event.setCancelled(true);
return; return;
} }

View File

@ -1,8 +1,12 @@
package com.plotsquared.sponge.object; package com.plotsquared.sponge.object;
import java.util.Date;
import java.util.HashSet; import java.util.HashSet;
import java.util.UUID; import java.util.UUID;
import org.spongepowered.api.data.key.Keys;
import org.spongepowered.api.data.manipulator.mutable.entity.GameModeData;
import org.spongepowered.api.data.value.mutable.Value;
import org.spongepowered.api.entity.player.Player; import org.spongepowered.api.entity.player.Player;
import org.spongepowered.api.entity.player.gamemode.GameMode; import org.spongepowered.api.entity.player.gamemode.GameMode;
import org.spongepowered.api.entity.player.gamemode.GameModes; import org.spongepowered.api.entity.player.gamemode.GameModes;
@ -47,7 +51,11 @@ public class SpongePlayer extends PlotPlayer {
@Override @Override
public long getPreviousLogin() { public long getPreviousLogin() {
return (long) (player.getJoinData().getLastPlayed().getSeconds()) * 1000; Value<Date> data = player.getJoinData().lastPlayed();
if (data.exists()) {
return last = data.get().getSeconds() * 1000;
}
return 0;
} }
@Override @Override
@ -168,7 +176,7 @@ public class SpongePlayer extends PlotPlayer {
@Override @Override
public PlotGamemode getGamemode() { public PlotGamemode getGamemode() {
// TODO Auto-generated method stub // TODO Auto-generated method stub
GameMode gamemode = player.getGameModeData().getValue(); GameMode gamemode = player.getGameModeData().type().get();
if (gamemode == GameModes.ADVENTURE) { if (gamemode == GameModes.ADVENTURE) {
return PlotGamemode.ADVENTURE; return PlotGamemode.ADVENTURE;
} }
@ -187,20 +195,20 @@ public class SpongePlayer extends PlotPlayer {
@Override @Override
public void setGamemode(PlotGamemode gamemode) { public void setGamemode(PlotGamemode gamemode) {
// TODO Auto-generated method stub // TODO Auto-generated method stub
switch (gamemode) { // switch (gamemode) {
case ADVENTURE: // case ADVENTURE:
player.getGameModeData().setGameMode(GameModes.ADVENTURE); // player.offer(Keys.GAME_MODE, GameModes.ADVENTURE);
return; // return;
case CREATIVE: // case CREATIVE:
player.getGameModeData().setGameMode(GameModes.CREATIVE); // player.offer(Keys.GAME_MODE, GameModes.CREATIVE);
return; // return;
case SPECTATOR: // case SPECTATOR:
player.getGameModeData().setGameMode(GameModes.SPECTATOR); // player.offer(Keys.GAME_MODE, GameModes.SPECTATOR);
return; // return;
case SURVIVAL: // case SURVIVAL:
player.getGameModeData().setGameMode(GameModes.SURVIVAL); // player.offer(Keys.GAME_MODE, GameModes.SURVIVAL);
return; // return;
} // }
} }
@Override @Override

View File

@ -1,17 +1,21 @@
package com.plotsquared.sponge.util; package com.plotsquared.sponge.util;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import org.spongepowered.api.block.BlockState; import org.spongepowered.api.block.BlockState;
import org.spongepowered.api.block.BlockType; import org.spongepowered.api.block.BlockType;
import org.spongepowered.api.block.BlockTypes; import org.spongepowered.api.block.BlockTypes;
import org.spongepowered.api.block.tileentity.Sign; import org.spongepowered.api.block.tileentity.Sign;
import org.spongepowered.api.data.manipulator.tileentity.SignData; import org.spongepowered.api.block.tileentity.TileEntity;
import org.spongepowered.api.data.key.Keys;
import org.spongepowered.api.data.manipulator.mutable.tileentity.SignData;
import org.spongepowered.api.text.Text; import org.spongepowered.api.text.Text;
import org.spongepowered.api.world.World; import org.spongepowered.api.world.World;
import org.spongepowered.api.world.biome.BiomeType; import org.spongepowered.api.world.biome.BiomeType;
import org.spongepowered.api.world.biome.BiomeTypes; import org.spongepowered.api.world.biome.BiomeTypes;
import com.google.common.base.Optional;
import com.intellectualcrafters.plot.object.Location; import com.intellectualcrafters.plot.object.Location;
import com.intellectualcrafters.plot.object.PlotBlock; import com.intellectualcrafters.plot.object.PlotBlock;
import com.intellectualcrafters.plot.object.schematic.PlotItem; import com.intellectualcrafters.plot.object.schematic.PlotItem;
@ -132,13 +136,22 @@ public class SpongeBlockManager extends BlockManager {
@Override @Override
public String[] getSign(Location loc) { public String[] getSign(Location loc) {
BlockState block = SpongeUtil.getWorld(loc.getWorld()).getBlock(loc.getX(), loc.getY(), loc.getZ()); World world = SpongeUtil.getWorld(loc.getWorld());
if (!(block instanceof Sign)) { Optional<TileEntity> block = world.getTileEntity(loc.getX(), loc.getY(), loc.getZ());
if (!block.isPresent()) {
return null;
}
TileEntity tile = block.get();
if (!(tile instanceof Sign)) {
return null;
}
Sign sign = (Sign) tile;
Optional<List<Text>> optional = tile.get(Keys.SIGN_LINES);
if (!optional.isPresent()) {
return null; return null;
} }
Sign sign = (Sign) block;
String[] result = new String[4]; String[] result = new String[4];
List<Text> lines = sign.getData().get().getLines(); List<Text> lines = optional.get();
for (int i = 0; i < 4; i++) { for (int i = 0; i < 4; i++) {
result[i] = lines.get(i).toString(); result[i] = lines.get(i).toString();
} }
@ -161,15 +174,20 @@ public class SpongeBlockManager extends BlockManager {
public void functionSetSign(String worldname, int x, int y, int z, String[] lines) { public void functionSetSign(String worldname, int x, int y, int z, String[] lines) {
World world = SpongeUtil.getWorld(worldname); World world = SpongeUtil.getWorld(worldname);
world.setBlock(x, y, z, BlockTypes.WALL_SIGN.getDefaultState()); world.setBlock(x, y, z, BlockTypes.WALL_SIGN.getDefaultState());
BlockState block = world.getBlock(x, y, z); Optional<TileEntity> block = world.getTileEntity(x, y, z);
if (!(block instanceof Sign)) { if (!block.isPresent()) {
return; return;
} }
Sign sign = (Sign) block; TileEntity tile = block.get();
SignData data = sign.getData().get(); if (!(tile instanceof Sign)) {
for (int i = 0; i < 4; i++) { return;
data.setLine(i, SpongeMain.THIS.getText(lines[i]));
} }
Sign sign = (Sign) tile;
List<Text> text = new ArrayList<>(4);
for (int i = 0; i < 4; i++) {
text.add(SpongeMain.THIS.getText(lines[i]));
}
sign.offer(Keys.SIGN_LINES, text);
} }
@Override @Override

View File

@ -27,7 +27,7 @@ public class SpongeInventoryUtil extends InventoryUtil {
public ItemStackBuilder builder; public ItemStackBuilder builder;
public SpongeInventoryUtil() { public SpongeInventoryUtil() {
this.builder = SpongeMain.THIS.getGame().getRegistry().getItemBuilder(); this.builder = SpongeMain.THIS.getGame().getRegistry().createItemBuilder();
} }
@Override @Override

View File

@ -184,7 +184,7 @@ public class SpongeMetrics {
} }
// Begin hitting the server with glorious data // Begin hitting the server with glorious data
TaskBuilder builder = game.getScheduler().getTaskBuilder(); TaskBuilder builder = game.getScheduler().createTaskBuilder();
builder.async() builder.async()
.interval(TimeUnit.MINUTES.toMillis(PING_INTERVAL)) .interval(TimeUnit.MINUTES.toMillis(PING_INTERVAL))
.execute(new Runnable() { .execute(new Runnable() {

View File

@ -18,7 +18,7 @@ public class SpongeTaskManager extends TaskManager {
@Override @Override
public int taskRepeat(Runnable r, int interval) { public int taskRepeat(Runnable r, int interval) {
int val = i.incrementAndGet(); int val = i.incrementAndGet();
TaskBuilder builder = SpongeMain.THIS.getGame().getScheduler().getTaskBuilder(); TaskBuilder builder = SpongeMain.THIS.getGame().getScheduler().createTaskBuilder();
TaskBuilder built = builder.delay(interval).interval(interval).execute(r); TaskBuilder built = builder.delay(interval).interval(interval).execute(r);
Task task = built.submit(SpongeMain.THIS.getPlugin()); Task task = built.submit(SpongeMain.THIS.getPlugin());
tasks.put(val, task); tasks.put(val, task);
@ -28,7 +28,7 @@ public class SpongeTaskManager extends TaskManager {
@Override @Override
public int taskRepeatAsync(Runnable r, int interval) { public int taskRepeatAsync(Runnable r, int interval) {
int val = i.incrementAndGet(); int val = i.incrementAndGet();
TaskBuilder builder = SpongeMain.THIS.getGame().getScheduler().getTaskBuilder(); TaskBuilder builder = SpongeMain.THIS.getGame().getScheduler().createTaskBuilder();
TaskBuilder built = builder.delay(interval).async().interval(interval).execute(r); TaskBuilder built = builder.delay(interval).async().interval(interval).execute(r);
Task task = built.submit(SpongeMain.THIS.getPlugin()); Task task = built.submit(SpongeMain.THIS.getPlugin());
tasks.put(val, task); tasks.put(val, task);
@ -37,25 +37,25 @@ public class SpongeTaskManager extends TaskManager {
@Override @Override
public void taskAsync(Runnable r) { public void taskAsync(Runnable r) {
TaskBuilder builder = SpongeMain.THIS.getGame().getScheduler().getTaskBuilder(); TaskBuilder builder = SpongeMain.THIS.getGame().getScheduler().createTaskBuilder();
builder.async().execute(r).submit(SpongeMain.THIS.getPlugin()); builder.async().execute(r).submit(SpongeMain.THIS.getPlugin());
} }
@Override @Override
public void task(Runnable r) { public void task(Runnable r) {
TaskBuilder builder = SpongeMain.THIS.getGame().getScheduler().getTaskBuilder(); TaskBuilder builder = SpongeMain.THIS.getGame().getScheduler().createTaskBuilder();
builder.execute(r).submit(SpongeMain.THIS.getPlugin()); builder.execute(r).submit(SpongeMain.THIS.getPlugin());
} }
@Override @Override
public void taskLater(Runnable r, int delay) { public void taskLater(Runnable r, int delay) {
TaskBuilder builder = SpongeMain.THIS.getGame().getScheduler().getTaskBuilder(); TaskBuilder builder = SpongeMain.THIS.getGame().getScheduler().createTaskBuilder();
builder.delay(delay).execute(r).submit(SpongeMain.THIS.getPlugin()); builder.delay(delay).execute(r).submit(SpongeMain.THIS.getPlugin());
} }
@Override @Override
public void taskLaterAsync(Runnable r, int delay) { public void taskLaterAsync(Runnable r, int delay) {
TaskBuilder builder = SpongeMain.THIS.getGame().getScheduler().getTaskBuilder(); TaskBuilder builder = SpongeMain.THIS.getGame().getScheduler().createTaskBuilder();
builder.async().delay(delay).execute(r).submit(SpongeMain.THIS.getPlugin()); builder.async().delay(delay).execute(r).submit(SpongeMain.THIS.getPlugin());
} }