mirror of
https://github.com/IntellectualSites/PlotSquared.git
synced 2024-11-22 05:06:44 +01:00
First Commit
This commit is contained in:
parent
e616c3b418
commit
fa7dd4a86c
276
src/com/intellectualcrafters/plot/C.java
Normal file
276
src/com/intellectualcrafters/plot/C.java
Normal file
@ -0,0 +1,276 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) IntellectualCrafters - 2014.
|
||||||
|
* You are not allowed to distribute and/or monetize any of our intellectual property.
|
||||||
|
* IntellectualCrafters is not affiliated with Mojang AB. Minecraft is a trademark of Mojang AB.
|
||||||
|
*
|
||||||
|
* >> File = C.java
|
||||||
|
* >> Generated by: Citymonstret at 2014-08-09 01:43
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.intellectualcrafters.plot;
|
||||||
|
|
||||||
|
import org.bukkit.ChatColor;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Captions class.
|
||||||
|
* @author Citymonstret
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public enum C {
|
||||||
|
/*
|
||||||
|
Schematic Stuff
|
||||||
|
*/
|
||||||
|
SCHEMATIC_MISSING_ARG("&cYou need to specify an argument. Possible values: &6test {name}"),
|
||||||
|
SCHEMATIC_INVALID("&cThat is not a valid schematic. Reason: &c%s"),
|
||||||
|
SCHEMATIC_VALID("&cThat's a valid schematic"),
|
||||||
|
/*
|
||||||
|
Title Stuff
|
||||||
|
*/
|
||||||
|
TITLE_ENTERED_PLOT("You entered plot %s"),
|
||||||
|
TITLE_ENTERED_PLOT_COLOR("GOLD"),
|
||||||
|
TITLE_ENTERED_PLOT_SUB("Owned by %s"),
|
||||||
|
TITLE_ENTERED_PLOT_SUB_COLOR("RED"),
|
||||||
|
TITLE_LEFT_PLOT("You entered plot %s"),
|
||||||
|
TITLE_LEFT_PLOT_COLOR("GOLD"),
|
||||||
|
TITLE_LEFT_PLOT_SUB("Owned by %s"),
|
||||||
|
TITLE_LEFT_PLOT_SUB_COLOR("RED"),
|
||||||
|
/*
|
||||||
|
Core Stuff
|
||||||
|
*/
|
||||||
|
PREFIX("&c[&6&lPlot&c] "),
|
||||||
|
ENABLED("&6Plots are now enabled"),
|
||||||
|
EXAMPLE_MESSAGE("&cThis is an example message &k!!!"),
|
||||||
|
/*
|
||||||
|
Reload
|
||||||
|
*/
|
||||||
|
RELOADED_CONFIGS("&6The translation files has been reloaded"),
|
||||||
|
RELOAD_FAILED("&cFailed to reload the translations file"),
|
||||||
|
/*
|
||||||
|
BarAPI
|
||||||
|
*/
|
||||||
|
BOSSBAR_CLEARING("&cClearing plot: &6%id%"),
|
||||||
|
/*
|
||||||
|
Alias
|
||||||
|
*/
|
||||||
|
ALIAS_SET_TO("&cPlot alias set to &6%alias%"),
|
||||||
|
MISSING_ALIAS("&cYou need to specify the alias"),
|
||||||
|
ALIAS_IS_TAKEN("&cThat alias is already taken"),
|
||||||
|
/*
|
||||||
|
Position
|
||||||
|
*/
|
||||||
|
MISSING_POSITION("&cYou need to specify a position. Possible values: &6default&c, &6center"),
|
||||||
|
POSITION_SET("&cPlot home position set"),
|
||||||
|
INVALID_POSITION("&cThat is not a valid position value"),
|
||||||
|
/*
|
||||||
|
Time
|
||||||
|
*/
|
||||||
|
TIME_FORMAT("&6%hours%, %min%, %sec%"),
|
||||||
|
/*
|
||||||
|
Permission
|
||||||
|
*/
|
||||||
|
NO_PERMISSION("&cYou don't have the permissions required to use this command."),
|
||||||
|
NO_PLOT_PERMS("&cYou don't have the permissions to do that in this plot"),
|
||||||
|
CANT_CLAIM_MORE_PLOTS("&cYou can't claim more plots."),
|
||||||
|
YOU_BE_DENIED("&cYou are not allowed to enter this plot"),
|
||||||
|
/*
|
||||||
|
Commands
|
||||||
|
*/
|
||||||
|
NOT_VALID_SUBCOMMAND("&cThat is not a valid subcommand."),
|
||||||
|
NO_COMMANDS("&cI'm sorry, but you're not permitted to use any subcommands."),
|
||||||
|
SUBCOMMAND_SET_OPTIONS_HEADER("&cPossible Values: "),
|
||||||
|
/*
|
||||||
|
No {plot}
|
||||||
|
*/
|
||||||
|
NOT_IN_PLOT("&cYou're not in a plot"),
|
||||||
|
NOT_IN_PLOT_WORLD("&cYou're not in a plot world"),
|
||||||
|
NO_PLOTS("&cYou don't have any plots"),
|
||||||
|
/*
|
||||||
|
Block List
|
||||||
|
*/
|
||||||
|
NOT_VALID_BLOCK_LIST_HEADER("&cThat's not a valid block. Valid blocks are:\\n"),
|
||||||
|
BLOCK_LIST_ITEM(" &6%mat%&c,"),
|
||||||
|
/*
|
||||||
|
Biome
|
||||||
|
*/
|
||||||
|
NEED_BIOME("&cYou've got to specify a biome"),
|
||||||
|
BIOME_SET_TO("&cPlot biome set to &c"),
|
||||||
|
/*
|
||||||
|
Teleport / Entry
|
||||||
|
*/
|
||||||
|
TELEPORTED_TO_PLOT("&6You have been teleported"),
|
||||||
|
/*
|
||||||
|
Set Block
|
||||||
|
*/
|
||||||
|
SET_BLOCK_ACTION_FINISHED("&6The last setblock action is now finished."),
|
||||||
|
/*
|
||||||
|
Debug
|
||||||
|
*/
|
||||||
|
DEUBG_HEADER("&6Debug Information\\n"),
|
||||||
|
DEBUG_SECTION("&c>> &6&l%val%"),
|
||||||
|
DEBUG_LINE("&c>> &6%var%&c:&6 %val%\\n"),
|
||||||
|
/*
|
||||||
|
Invalid
|
||||||
|
*/
|
||||||
|
NOT_VALID_DATA("&cThat's not a valid data id."),
|
||||||
|
NOT_VALID_BLOCK("&cThat's not a valid block."),
|
||||||
|
NOT_VALID_NUMBER("&cThat's not a valid number"),
|
||||||
|
NOT_VALID_PLOT_ID("&cThat's not a valid plot id."),
|
||||||
|
NOT_YOUR_PLOT("&cThat is not your plot."),
|
||||||
|
NO_SUCH_PLOT("&cThere is no such plot"),
|
||||||
|
PLAYER_HAS_NOT_BEEN_ON("&cThat player hasn't been in the plotworld"),
|
||||||
|
FOUND_NO_PLOTS("&cFound no plots with your search query"),
|
||||||
|
/*
|
||||||
|
Camera
|
||||||
|
*/
|
||||||
|
CAMERA_STARTED("&cYou have entered camera mode for plot &6%s"),
|
||||||
|
CAMERA_STOPPED("&cYou are no longer in camera mode"),
|
||||||
|
/*
|
||||||
|
Need
|
||||||
|
*/
|
||||||
|
NEED_PLOT_NUMBER("&cYou've got to specify a plot number or alias"),
|
||||||
|
NEED_BLOCK("&cYou've got to specify a block"),
|
||||||
|
NEED_PLOT_ID("&cYou've got to specify a plot id."),
|
||||||
|
NEED_USER("&cYou need to specify a username"),
|
||||||
|
/*
|
||||||
|
Info
|
||||||
|
*/
|
||||||
|
PLOT_INFO_UNCLAIMED("&cPlot &6%s&c is not yet claimed"),
|
||||||
|
PLOT_INFO("plot ID: &6%id%&c, plot Alias: &6%alias%&c, plot Owner: &6%owner%&c, plot Biome: &6%biome%&c, plot Time: &6%time%&c, plot Weather: &6%weather%&c, plot Helpers:&6%helpers%&c, plot Denied:&6%denied%&c"),
|
||||||
|
PLOT_USER_LIST(" &6%user%&c,"),
|
||||||
|
/*
|
||||||
|
Generating
|
||||||
|
*/
|
||||||
|
GENERATING_FLOOR("&6Started generating floor from your settings. It will take %time%"),
|
||||||
|
GENERATING_WALL("&6Started generating wall from your settings"),
|
||||||
|
GENERATING_WALL_FILLING("&cStarted generating wall filling from your settings."),
|
||||||
|
/*
|
||||||
|
Clearing
|
||||||
|
*/
|
||||||
|
CLEARING_PLOT("&cClearing plot."),
|
||||||
|
CLEARING_DONE("&aDone! Took %time% seconds"),
|
||||||
|
/*
|
||||||
|
Claiming
|
||||||
|
*/
|
||||||
|
PLOT_IS_CLAIMED("&cThis plot is already claimed"),
|
||||||
|
CLAIMED("&6You successfully claimed the plot"),
|
||||||
|
/*
|
||||||
|
List
|
||||||
|
*/
|
||||||
|
PLOT_LIST_HEADER("&6List of %word% plots"),
|
||||||
|
PLOT_LIST_ITEM("&c>> &6%id% &c- &6%owner%"),
|
||||||
|
PLOT_LIST_FOOTER("&c>> &6%word% a total of &c%num% &6claimed %plot%."),
|
||||||
|
/*
|
||||||
|
Left
|
||||||
|
*/
|
||||||
|
LEFT_PLOT("&cYou left a plot"),
|
||||||
|
/*
|
||||||
|
Wait
|
||||||
|
*/
|
||||||
|
WAIT_FOR_TIMER("&cA setblock timer is bound to either the current plot or you. Please wait for it to finish"),
|
||||||
|
/*
|
||||||
|
Chat
|
||||||
|
*/
|
||||||
|
PLOT_CHAT_FORMAT("&c[&6Plot Chat&c][&6%plot_id%&c] &6%sender%&c: &6%msg%"),
|
||||||
|
/*
|
||||||
|
Denied
|
||||||
|
*/
|
||||||
|
DENIED_REMOVED("&cYou successfully undenied the player from this plot"),
|
||||||
|
DENIED_ADDED("&cYou successfully denied the player from this plot"),
|
||||||
|
DENIED_NEED_ARGUMENT("&cArguments are missing. &6/plot denied add {name} &cor &6/plot helpers remove {name}"),
|
||||||
|
WAS_NOT_DENIED("&cThat player was not denied on this plot"),
|
||||||
|
/*
|
||||||
|
Rain
|
||||||
|
*/
|
||||||
|
NEED_ON_OFF("&cYou need to specify a value. Possible values: &6on&c, &6off"),
|
||||||
|
SETTING_UPDATED("&cYou successfully updated the setting"),
|
||||||
|
/*
|
||||||
|
Helper
|
||||||
|
*/
|
||||||
|
HELPER_ADDED("&6You successfully added a helper to the plot"),
|
||||||
|
HELPER_REMOVED("&6You successfully removed a helper from the plot"),
|
||||||
|
HELPER_NEED_ARGUMENT("&cArguments are missing. &6/plot helpers add {name} &cor &6/plot helpers remove {name}"),
|
||||||
|
WAS_NOT_ADDED("&cThat player was not added as a helper on this plot"),
|
||||||
|
/*
|
||||||
|
Set Owner
|
||||||
|
*/
|
||||||
|
SET_OWNER("&6You successfully set the plot owner"),
|
||||||
|
/*
|
||||||
|
Signs
|
||||||
|
*/
|
||||||
|
OWNER_SIGN_LINE_1("&cID: &6%id%"),
|
||||||
|
OWNER_SIGN_LINE_2("&cOwner:"),
|
||||||
|
OWNER_SIGN_LINE_3("&6%plr%"),
|
||||||
|
OWNER_SIGN_LINE_4("&2Claimed"),
|
||||||
|
/*
|
||||||
|
Help
|
||||||
|
*/
|
||||||
|
HELP_CATEGORY("&6Current Category&c: &l%category%"),
|
||||||
|
HELP_INFO("&6You need to specify a help category"),
|
||||||
|
HELP_INFO_ITEM("&6/plots help %category% &c- &6%category_desc%"),
|
||||||
|
HELP_PAGE("&c>> &6%usage% &c[&6%alias%&c] &c- &6%desc%"),
|
||||||
|
HELP_HEADER("&6Help for Plots"),
|
||||||
|
/*
|
||||||
|
Custom
|
||||||
|
*/
|
||||||
|
CUSTOM_STRING("-")
|
||||||
|
;
|
||||||
|
/**
|
||||||
|
* Default
|
||||||
|
*/
|
||||||
|
private String d;
|
||||||
|
/**
|
||||||
|
* Translated
|
||||||
|
*/
|
||||||
|
private String s;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor for custom strings.
|
||||||
|
*/
|
||||||
|
@SuppressWarnings("unused")
|
||||||
|
C() {
|
||||||
|
/*
|
||||||
|
use setCustomString();
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor
|
||||||
|
* @param d default
|
||||||
|
*/
|
||||||
|
C(String d) {
|
||||||
|
this.d = d;
|
||||||
|
this.s = PlotMain.translations.getString(this.toString());
|
||||||
|
if (this.s==null) {
|
||||||
|
this.s = "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the default string
|
||||||
|
* @return default
|
||||||
|
*/
|
||||||
|
@SuppressWarnings("unused")
|
||||||
|
public String d() {
|
||||||
|
return this.d;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get translated if exists
|
||||||
|
* @return translated if exists else default
|
||||||
|
*/
|
||||||
|
public String s() {
|
||||||
|
if(this.s.length() < 1)
|
||||||
|
return this.d.replace("\\n", "\n");
|
||||||
|
return this.s.replace("\\n", "\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @return translated and color decoded
|
||||||
|
*/
|
||||||
|
public String translated() {
|
||||||
|
return ChatColor.translateAlternateColorCodes('&', this.s());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
121
src/com/intellectualcrafters/plot/LSetCube.java
Normal file
121
src/com/intellectualcrafters/plot/LSetCube.java
Normal file
@ -0,0 +1,121 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) IntellectualCrafters - 2014.
|
||||||
|
* You are not allowed to distribute and/or monetize any of our intellectual property.
|
||||||
|
* IntellectualCrafters is not affiliated with Mojang AB. Minecraft is a trademark of Mojang AB.
|
||||||
|
*
|
||||||
|
* >> File = LSetCube.java
|
||||||
|
* >> Generated by: Citymonstret at 2014-08-09 01:43
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.intellectualcrafters.plot;
|
||||||
|
|
||||||
|
import org.bukkit.Location;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Cube utilities
|
||||||
|
* @author Citymonstret
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class LSetCube {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Base locations
|
||||||
|
*/
|
||||||
|
private Location l1,l2;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor
|
||||||
|
* @param l1
|
||||||
|
* @param l2
|
||||||
|
*/
|
||||||
|
public LSetCube(Location l1, Location l2) {
|
||||||
|
this.l1 = l1;
|
||||||
|
this.l1 = l2;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Secondary constructor
|
||||||
|
* @param l1
|
||||||
|
* @param size
|
||||||
|
*/
|
||||||
|
public LSetCube(Location l1, int size) {
|
||||||
|
this.l1 = l1;
|
||||||
|
this.l2 = l1.clone().add(size, size, size);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the absolute min. of the cube
|
||||||
|
* @return abs. min
|
||||||
|
*/
|
||||||
|
public Location minLoc() {
|
||||||
|
int x = Math.min(l1.getBlockX(), l2.getBlockX());
|
||||||
|
int y = Math.min(l1.getBlockY(), l2.getBlockY());
|
||||||
|
int z = Math.min(l1.getBlockZ(), l2.getBlockZ());
|
||||||
|
return new Location(l1.getWorld(), x, y, z);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the absolute max. of the cube
|
||||||
|
* @return abs. max
|
||||||
|
*/
|
||||||
|
public Location maxLoc() {
|
||||||
|
int x = Math.max(l1.getBlockX(), l2.getBlockX());
|
||||||
|
int y = Math.max(l1.getBlockY(), l2.getBlockY());
|
||||||
|
int z = Math.max(l1.getBlockZ(), l2.getBlockZ());
|
||||||
|
return new Location(l1.getWorld(), x, y, z);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a LCycler for the cube.
|
||||||
|
* @return new lcycler
|
||||||
|
*/
|
||||||
|
public LCycler getCycler() {
|
||||||
|
return new LCycler(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Citymonstret
|
||||||
|
*/
|
||||||
|
protected class LCycler {
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
private Location min;
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
private Location max;
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
private Location current;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param cube
|
||||||
|
*/
|
||||||
|
public LCycler(LSetCube cube) {
|
||||||
|
this.min = cube.minLoc();
|
||||||
|
this.max = cube.maxLoc();
|
||||||
|
this.current = this.min;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public boolean hasNext() {
|
||||||
|
return ((this.current.getBlockX() + 1) <= this.max.getBlockX()) && ((this.current.getBlockY() + 1) <= this.max.getBlockY()) && ((this.current.getBlockZ() + 1) <= this.max.getBlockZ());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public Location getNext() {
|
||||||
|
if(!hasNext()) return null;
|
||||||
|
this.current = this.current.add(1,1,1);
|
||||||
|
return this.current;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
86
src/com/intellectualcrafters/plot/Lag.java
Normal file
86
src/com/intellectualcrafters/plot/Lag.java
Normal file
@ -0,0 +1,86 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) IntellectualCrafters - 2014.
|
||||||
|
* You are not allowed to distribute and/or monetize any of our intellectual property.
|
||||||
|
* IntellectualCrafters is not affiliated with Mojang AB. Minecraft is a trademark of Mojang AB.
|
||||||
|
*
|
||||||
|
* >> File = Lag.java
|
||||||
|
* >> Generated by: Citymonstret at 2014-08-09 01:43
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.intellectualcrafters.plot;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* TPS and Lag Checker.
|
||||||
|
* @author Citymonstret
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class Lag implements Runnable{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tick count
|
||||||
|
*/
|
||||||
|
public static int TC = 0;
|
||||||
|
/**
|
||||||
|
* Ticks
|
||||||
|
*/
|
||||||
|
public static long[] T = new long[600];
|
||||||
|
/**
|
||||||
|
* something :_:
|
||||||
|
*/
|
||||||
|
@SuppressWarnings("unused")
|
||||||
|
public static long LT = 0L;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the server TPS
|
||||||
|
* @return server tick per second
|
||||||
|
*/
|
||||||
|
public static double getTPS() {
|
||||||
|
return Math.round(getTPS(100)) > 20.0D ? 20.0D : Math.round(getTPS(100));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return the tick per second (measured in $ticks)
|
||||||
|
* @param ticks Ticks
|
||||||
|
* @return ticks per second
|
||||||
|
*/
|
||||||
|
public static double getTPS(int ticks) {
|
||||||
|
if(TC < ticks)
|
||||||
|
return 20.0D;
|
||||||
|
int t = (TC - 1 - ticks) % T.length;
|
||||||
|
long e = System.currentTimeMillis() - T[t];
|
||||||
|
return ticks / (e / 1000.0D);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get number of ticks since
|
||||||
|
* @param tI Ticks <
|
||||||
|
* @return number of ticks since $tI
|
||||||
|
*/
|
||||||
|
@SuppressWarnings("unused")
|
||||||
|
public static long getElapsed(int tI) {
|
||||||
|
long t = T[tI % T.length];
|
||||||
|
return System.currentTimeMillis() - t;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
T[TC % T.length] = System.currentTimeMillis();
|
||||||
|
TC++;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get lag percentage
|
||||||
|
* @return lag percentage
|
||||||
|
*/
|
||||||
|
public static double getPercentage() {
|
||||||
|
return Math.round((1.0D - Lag.getTPS() / 20.0D) * 100.0D);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get TPS percentage (of 20)
|
||||||
|
* @return TPS percentage
|
||||||
|
*/
|
||||||
|
public static double getFullPercentage() {
|
||||||
|
return getTPS() * 5.0D;
|
||||||
|
}
|
||||||
|
}
|
70
src/com/intellectualcrafters/plot/Logger.java
Normal file
70
src/com/intellectualcrafters/plot/Logger.java
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) IntellectualCrafters - 2014.
|
||||||
|
* You are not allowed to distribute and/or monetize any of our intellectual property.
|
||||||
|
* IntellectualCrafters is not affiliated with Mojang AB. Minecraft is a trademark of Mojang AB.
|
||||||
|
*
|
||||||
|
* >> File = Logger.java
|
||||||
|
* >> Generated by: Citymonstret at 2014-08-09 01:43
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.intellectualcrafters.plot;
|
||||||
|
|
||||||
|
import java.io.*;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Logging of errors and debug messages.
|
||||||
|
* @author Citymonstret
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class Logger {
|
||||||
|
|
||||||
|
private static ArrayList<String> entries;
|
||||||
|
private static File log;
|
||||||
|
|
||||||
|
public static void setup(File file) {
|
||||||
|
log = file;
|
||||||
|
entries = new ArrayList<>();
|
||||||
|
try {
|
||||||
|
BufferedReader reader = new BufferedReader(new FileReader(file));
|
||||||
|
String line;
|
||||||
|
while((line = reader.readLine()) != null) {
|
||||||
|
entries.add(line);
|
||||||
|
}
|
||||||
|
reader.close();
|
||||||
|
} catch(IOException e) {
|
||||||
|
PlotMain.sendConsoleSenderMessage(C.PREFIX.s() + "File setup error Logger#setup");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public enum LogLevel {
|
||||||
|
GENERAL("General"),
|
||||||
|
WARNING("Warning"),
|
||||||
|
DANGER("Danger");
|
||||||
|
private String name;
|
||||||
|
LogLevel(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return this.name;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void write() throws IOException {
|
||||||
|
FileWriter writer = new FileWriter(log);
|
||||||
|
for(String string : entries) {
|
||||||
|
writer.write(string + System.lineSeparator());
|
||||||
|
}
|
||||||
|
writer.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void add(LogLevel level, String string) {
|
||||||
|
append("[" + level.toString() + "] " + string);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void append(String string) {
|
||||||
|
entries.add("[" + new Date().toString() + "]" + string);
|
||||||
|
}
|
||||||
|
}
|
64
src/com/intellectualcrafters/plot/PWE.java
Normal file
64
src/com/intellectualcrafters/plot/PWE.java
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
package com.intellectualcrafters.plot;
|
||||||
|
|
||||||
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.World;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import com.sk89q.worldedit.LocalSession;
|
||||||
|
import com.sk89q.worldedit.LocalWorld;
|
||||||
|
import com.sk89q.worldedit.Vector;
|
||||||
|
import com.sk89q.worldedit.bukkit.BukkitPlayer;
|
||||||
|
import com.sk89q.worldedit.masks.RegionMask;
|
||||||
|
import com.sk89q.worldedit.regions.CuboidRegion;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author Citymonstret
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class PWE {
|
||||||
|
|
||||||
|
public static void setMask(Player p, Location l) {
|
||||||
|
LocalSession s = PlotMain.worldEdit.getSession(p);
|
||||||
|
Plot plot = PlayerFunctions.getCurrentPlot(p);
|
||||||
|
if (plot!=null) {
|
||||||
|
boolean r;
|
||||||
|
if (plot.getOwner()!=null)
|
||||||
|
r = plot.getOwner().equals(p.getUniqueId());
|
||||||
|
else
|
||||||
|
r = false;
|
||||||
|
if (!r) {
|
||||||
|
if (p.hasPermission("plots.we.member") && plot.hasRights(p))
|
||||||
|
r = true;
|
||||||
|
else if (p.hasPermission("plots.we.bypass")) {
|
||||||
|
s.setMask(null);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (r) {
|
||||||
|
World w = p.getWorld();
|
||||||
|
Location b = PlotHelper.getPlotBottomLoc(w, plot.id);
|
||||||
|
Location t = PlotHelper.getPlotTopLoc(w, plot.id);
|
||||||
|
Vector p1 = new Vector(b.getBlockX(),b.getBlockY(),b.getBlockZ());
|
||||||
|
Vector p2 = new Vector(t.getBlockX(),t.getBlockY(),t.getBlockZ());
|
||||||
|
LocalWorld world = PlotMain.worldEdit.wrapPlayer(p).getWorld();
|
||||||
|
CuboidRegion cr = new CuboidRegion(world, p1, p2);
|
||||||
|
RegionMask rm = new RegionMask(cr);
|
||||||
|
s.setMask(rm);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(s.getMask() == null) {
|
||||||
|
BukkitPlayer plr = PlotMain.worldEdit.wrapPlayer(p);
|
||||||
|
LocalWorld world = plr.getWorld();
|
||||||
|
Vector p1 = new Vector(0,0,0), p2 = new Vector(0,0,0);
|
||||||
|
s.setMask(new RegionMask(new CuboidRegion(world, p1, p2)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void removeMask(Player p) {
|
||||||
|
LocalSession s = PlotMain.worldEdit.getSession(p);
|
||||||
|
s.setMask(null);
|
||||||
|
}
|
||||||
|
}
|
237
src/com/intellectualcrafters/plot/PlayerFunctions.java
Normal file
237
src/com/intellectualcrafters/plot/PlayerFunctions.java
Normal file
@ -0,0 +1,237 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) IntellectualCrafters - 2014.
|
||||||
|
* You are not allowed to distribute and/or monetize any of our intellectual property.
|
||||||
|
* IntellectualCrafters is not affiliated with Mojang AB. Minecraft is a trademark of Mojang AB.
|
||||||
|
*
|
||||||
|
* >> File = PlayerFunctions.java
|
||||||
|
* >> Generated by: Citymonstret at 2014-08-09 01:43
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.intellectualcrafters.plot;
|
||||||
|
|
||||||
|
import org.bukkit.*;
|
||||||
|
import org.bukkit.block.Biome;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Functions involving players, plots and locations.
|
||||||
|
* @author Citymonstret
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
@SuppressWarnings("javadoc")
|
||||||
|
public class PlayerFunctions {
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param player player
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static boolean isInPlot(Player player) {
|
||||||
|
return getCurrentPlot(player) != null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param plot plot
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static boolean hasExpired(Plot plot) {
|
||||||
|
OfflinePlayer player = Bukkit.getOfflinePlayer(plot.owner);
|
||||||
|
long lp = player.getLastPlayed();
|
||||||
|
long cu = System.currentTimeMillis();
|
||||||
|
return (lp - cu) > 30l;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param loc
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static PlotId getPlot(Location loc) {
|
||||||
|
int valx = loc.getBlockX();
|
||||||
|
int valz = loc.getBlockZ();
|
||||||
|
|
||||||
|
PlotWorld plotworld = PlotMain.getWorldSettings(loc.getWorld());
|
||||||
|
int size = plotworld.PLOT_WIDTH + plotworld.ROAD_WIDTH;
|
||||||
|
int pathsize = plotworld.ROAD_WIDTH;
|
||||||
|
|
||||||
|
boolean road = false;
|
||||||
|
double n3;
|
||||||
|
|
||||||
|
int mod2 = 0;
|
||||||
|
int mod1 = 1;
|
||||||
|
|
||||||
|
int x = (int) Math.ceil((double) valx / size);
|
||||||
|
int z = (int) Math.ceil((double) valz / size);
|
||||||
|
|
||||||
|
if(pathsize % 2 == 1) {
|
||||||
|
n3 = Math.ceil(((double) pathsize) / 2);
|
||||||
|
mod2 = -1;
|
||||||
|
} else {
|
||||||
|
n3 = Math.floor(((double) pathsize) / 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
for(double i = n3; i >= 0; i--) {
|
||||||
|
if((valx - i + mod1) % size == 0 || (valx + i + mod2) % size == 0) {
|
||||||
|
road = true;
|
||||||
|
x = (int) Math.ceil((valx - n3) / size);
|
||||||
|
}
|
||||||
|
if((valz - i + mod1) % size == 0 || (valz + i + mod2) % size == 0) {
|
||||||
|
road = true;
|
||||||
|
z = (int) Math.ceil((valz - n3) / size);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(road) {
|
||||||
|
return null;
|
||||||
|
} else {
|
||||||
|
return new PlotId(x,z);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param player
|
||||||
|
* @param plot
|
||||||
|
*/
|
||||||
|
public static void togglePlotWeather(Player player, Plot plot) {
|
||||||
|
player.setPlayerWeather(plot.settings.getRain() ? WeatherType.DOWNFALL : WeatherType.CLEAR);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param player
|
||||||
|
* @param plot
|
||||||
|
*/
|
||||||
|
public static void togglePlotTime(Player player, Plot plot) {
|
||||||
|
player.setPlayerTime(plot.settings.getTime(), false);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param player
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@SuppressWarnings("deprecation")
|
||||||
|
public static Plot getCurrentPlot(Player player) {
|
||||||
|
if (!PlotMain.isPlotWorld(player.getWorld()))
|
||||||
|
return null;
|
||||||
|
PlotId id = getPlot(player.getLocation());
|
||||||
|
World world = player.getWorld();
|
||||||
|
if(id==null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
HashMap<PlotId, Plot> plots = PlotMain.getPlots(world);
|
||||||
|
|
||||||
|
if (plots!=null) {
|
||||||
|
if(plots.containsKey(id)) {
|
||||||
|
return plots.get(id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
}
|
||||||
|
return new Plot(id, null, Biome.FOREST, new ArrayList<UUID>(), new ArrayList<UUID>(), world.getName());
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @deprecated
|
||||||
|
* @param id
|
||||||
|
* @param plot
|
||||||
|
*/
|
||||||
|
public static void set(Integer[] id, Plot plot) {
|
||||||
|
PlotMain.updatePlot(plot);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param plr
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
// public static Set<Plot> getPlayerPlots(Player plr) {
|
||||||
|
// return PlotMain.getPlots(plr);
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
public static Set<Plot> getPlayerPlots(World world, Player plr) {
|
||||||
|
Set<Plot> p = PlotMain.getPlots(world, plr);
|
||||||
|
if (p==null)
|
||||||
|
return new HashSet<Plot>();
|
||||||
|
return p;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param plr
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
// public static int getPlayerPlotCount(Player plr) {
|
||||||
|
// return getPlayerPlots(plr).size();
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
public static int getPlayerPlotCount(World world, Player plr) {
|
||||||
|
return getPlayerPlots(world, plr).size();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param p
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@SuppressWarnings("SuspiciousNameCombination")
|
||||||
|
public static int getAllowedPlots(Player p) {
|
||||||
|
if(p.hasPermission("plots.admin")) return Integer.MAX_VALUE;
|
||||||
|
int y = 0;
|
||||||
|
for(int x = 1; x <= 100; x++) {
|
||||||
|
if(p.hasPermission("plots.plot." + x)) y = x;
|
||||||
|
else {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return y;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @return PlotMain.getPlots();
|
||||||
|
* @deprecated
|
||||||
|
*/
|
||||||
|
public static Set<Plot> getPlots() {
|
||||||
|
return PlotMain.getPlots();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \\previous\\
|
||||||
|
* @param plr
|
||||||
|
* @param msg
|
||||||
|
* Was used to wrap the chat client length (Packets out--)
|
||||||
|
*/
|
||||||
|
public static void sendMessageWrapped(Player plr, String msg) {
|
||||||
|
plr.sendMessage(msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Send a message to the player
|
||||||
|
* @param plr Player to recieve message
|
||||||
|
* @param msg Message to send
|
||||||
|
*/
|
||||||
|
public static void sendMessage(Player plr, String msg) {
|
||||||
|
if(msg.length() == 0 || msg.equalsIgnoreCase("")) return;
|
||||||
|
sendMessageWrapped(plr, ChatColor.translateAlternateColorCodes('&', C.PREFIX.s() + msg));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Send a message to the player
|
||||||
|
* @param plr Player to recieve message
|
||||||
|
* @param c Caption to send
|
||||||
|
*/
|
||||||
|
public static void sendMessage(Player plr, C c, String ... args) {
|
||||||
|
if(c.s().length() < 1) return;
|
||||||
|
String msg = c.s();
|
||||||
|
if(args != null && args.length > 0) {
|
||||||
|
for(String str : args)
|
||||||
|
msg = msg.replaceFirst("%s", str);
|
||||||
|
}
|
||||||
|
sendMessage(plr, msg);
|
||||||
|
}
|
||||||
|
}
|
240
src/com/intellectualcrafters/plot/Plot.java
Normal file
240
src/com/intellectualcrafters/plot/Plot.java
Normal file
@ -0,0 +1,240 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) IntellectualCrafters - 2014.
|
||||||
|
* You are not allowed to distribute and/or monetize any of our intellectual property.
|
||||||
|
* IntellectualCrafters is not affiliated with Mojang AB. Minecraft is a trademark of Mojang AB.
|
||||||
|
*
|
||||||
|
* >> File = Plot.java
|
||||||
|
* >> Generated by: Citymonstret at 2014-08-09 01:43
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.intellectualcrafters.plot;
|
||||||
|
|
||||||
|
import com.intellectualcrafters.plot.database.DBFunc;
|
||||||
|
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.World;
|
||||||
|
import org.bukkit.block.Biome;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The plot class
|
||||||
|
* @author Citymonstret
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
@SuppressWarnings("javadoc")
|
||||||
|
public class Plot implements Cloneable{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* plot ID
|
||||||
|
*/
|
||||||
|
public PlotId id;
|
||||||
|
/**
|
||||||
|
* plot world
|
||||||
|
*/
|
||||||
|
public String world;
|
||||||
|
/**
|
||||||
|
* plot owner
|
||||||
|
*/
|
||||||
|
public UUID owner;
|
||||||
|
/**
|
||||||
|
* Deny Entry
|
||||||
|
*/
|
||||||
|
public boolean deny_entry;
|
||||||
|
/**
|
||||||
|
* List of helpers (with plot permissions)
|
||||||
|
*/
|
||||||
|
public ArrayList<UUID> helpers;
|
||||||
|
/**
|
||||||
|
* List of denied players
|
||||||
|
*/
|
||||||
|
public ArrayList<UUID> denied;
|
||||||
|
/**
|
||||||
|
* External settings class
|
||||||
|
*/
|
||||||
|
public PlotSettings settings;
|
||||||
|
/**
|
||||||
|
* Delete on next save cycle?
|
||||||
|
*/
|
||||||
|
public boolean delete;
|
||||||
|
/**
|
||||||
|
* Has the plot changed since the last save cycle?
|
||||||
|
*/
|
||||||
|
public boolean hasChanged = false;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Primary constructor
|
||||||
|
* @param id
|
||||||
|
* @param owner
|
||||||
|
* @param plotBiome
|
||||||
|
* @param helpers
|
||||||
|
* @param denied
|
||||||
|
*/
|
||||||
|
public Plot(PlotId id, UUID owner, Biome plotBiome, ArrayList<UUID> helpers, ArrayList<UUID> denied, String world) {
|
||||||
|
this.id = id;
|
||||||
|
this.settings = new PlotSettings(this);
|
||||||
|
this.settings.setBiome(plotBiome);
|
||||||
|
this.owner = owner;
|
||||||
|
this.deny_entry = this.owner == null;
|
||||||
|
this.helpers = helpers;
|
||||||
|
this.denied = denied;
|
||||||
|
this.settings.setTime(8000l);
|
||||||
|
this.settings.setRain(false);
|
||||||
|
this.settings.setTimeChange(false);
|
||||||
|
this.settings.setAlias("");
|
||||||
|
this.settings.setPosition(PlotHomePosition.DEFAULT);
|
||||||
|
this.delete = false;
|
||||||
|
this.world = world;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor for saved plots
|
||||||
|
* @param id
|
||||||
|
* @param owner
|
||||||
|
* @param plotBiome
|
||||||
|
* @param helpers
|
||||||
|
* @param denied
|
||||||
|
* @param changeTime
|
||||||
|
* @param time
|
||||||
|
*/
|
||||||
|
public Plot(PlotId id, UUID owner, Biome plotBiome, ArrayList<UUID> helpers, ArrayList<UUID> denied, boolean changeTime, long time, boolean rain, String alias, PlotHomePosition position, String world) {
|
||||||
|
this.id = id;
|
||||||
|
this.settings = new PlotSettings(this);
|
||||||
|
this.settings.setBiome(plotBiome);
|
||||||
|
this.owner = owner;
|
||||||
|
this.deny_entry = this.owner != null;
|
||||||
|
this.helpers = helpers;
|
||||||
|
this.denied = denied;
|
||||||
|
this.settings.setTime(time);
|
||||||
|
this.settings.setRain(rain);
|
||||||
|
this.settings.setTimeChange(changeTime);
|
||||||
|
this.settings.setAlias(alias);
|
||||||
|
this.settings.setPosition(position);
|
||||||
|
this.delete = false;
|
||||||
|
this.world = world;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if the plot has a set owner
|
||||||
|
* @return false if there is no owner
|
||||||
|
*/
|
||||||
|
public boolean hasOwner() {
|
||||||
|
return this.owner != null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the owner
|
||||||
|
* @param player
|
||||||
|
*/
|
||||||
|
public void setOwner(Player player) {
|
||||||
|
this.owner = player.getUniqueId();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if the player is either the owner or on the helpers list
|
||||||
|
* @param player
|
||||||
|
* @return true if the player is added as a helper or is the owner
|
||||||
|
*/
|
||||||
|
public boolean hasRights(Player player) {
|
||||||
|
return player.hasPermission("plots.admin") || this.helpers != null && this.helpers.contains(DBFunc.everyone) || this.helpers != null && this.helpers.contains(player.getUniqueId()) || this.owner != null && this.owner.equals(player.getUniqueId());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Should the player be allowed to enter?
|
||||||
|
* @param player
|
||||||
|
* @return false if the player is allowed to enter
|
||||||
|
*/
|
||||||
|
public boolean deny_entry(Player player) {
|
||||||
|
return this.denied != null && (this.denied.contains(DBFunc.everyone) && !this.hasRights(player) || !this.hasRights(player) && this.denied.contains(player.getUniqueId()));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the UUID of the owner
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public UUID getOwner() {
|
||||||
|
return this.owner;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the plot ID
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public PlotId getId() {
|
||||||
|
return this.id;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the plot World
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public World getWorld() {
|
||||||
|
return Bukkit.getWorld(this.world);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get a clone of the plot
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public Object clone() throws CloneNotSupportedException {
|
||||||
|
try {
|
||||||
|
return super.clone();
|
||||||
|
} catch(CloneNotSupportedException e) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Deny someone (use DBFunc.addDenied() as well)
|
||||||
|
* @param uuid
|
||||||
|
*/
|
||||||
|
public void addDenied(UUID uuid) { this.denied.add(uuid); }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add someone as a helper (use DBFunc as well)
|
||||||
|
* @param uuid
|
||||||
|
*/
|
||||||
|
public void addHelper(UUID uuid) { this.helpers.add(uuid); }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get plot display name
|
||||||
|
* @return alias if set, else id
|
||||||
|
*/
|
||||||
|
public String getDisplayName() {
|
||||||
|
if(this.settings.getAlias().length() > 1) {
|
||||||
|
return this.settings.getAlias();
|
||||||
|
}
|
||||||
|
return this.getId().x+";"+this.getId().y;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove a denied player (use DBFunc as well)
|
||||||
|
* @param uuid
|
||||||
|
*/
|
||||||
|
public void removeDenied(UUID uuid) { this.denied.remove(uuid); }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove a helper (use DBFunc as well)
|
||||||
|
* @param uuid
|
||||||
|
*/
|
||||||
|
public void removeHelper(UUID uuid) { this.helpers.remove(uuid); }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Clear a plot
|
||||||
|
* @param plr initiator
|
||||||
|
*/
|
||||||
|
public void clear(Player plr) {
|
||||||
|
PlotHelper.clear(plr, this);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Delete a plot
|
||||||
|
* @param plr initiator
|
||||||
|
*/
|
||||||
|
@SuppressWarnings("unused")
|
||||||
|
public void delete(Player plr) { this.clear(plr); }
|
||||||
|
}
|
757
src/com/intellectualcrafters/plot/PlotHelper.java
Normal file
757
src/com/intellectualcrafters/plot/PlotHelper.java
Normal file
@ -0,0 +1,757 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) IntellectualCrafters - 2014.
|
||||||
|
* You are not allowed to distribute and/or monetize any of our intellectual property.
|
||||||
|
* IntellectualCrafters is not affiliated with Mojang AB. Minecraft is a trademark of Mojang AB.
|
||||||
|
*
|
||||||
|
* >> File = PlotHelper.java
|
||||||
|
* >> Generated by: Citymonstret at 2014-08-09 01:43
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.intellectualcrafters.plot;
|
||||||
|
|
||||||
|
import com.intellectualcrafters.plot.database.DBFunc;
|
||||||
|
|
||||||
|
import org.bukkit.*;
|
||||||
|
import org.bukkit.block.Biome;
|
||||||
|
import org.bukkit.block.Block;
|
||||||
|
import org.bukkit.block.Sign;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
|
import static com.intellectualcrafters.plot.Settings.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* plot functions
|
||||||
|
* @author Citymonstret
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class PlotHelper {
|
||||||
|
|
||||||
|
private static double calculateNeededTime(double blocks, double blocks_per_second) {
|
||||||
|
return (blocks / blocks_per_second);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Short[] getRandom(Random random, Object[] filling) {
|
||||||
|
int len= ((Short[]) filling[0]).length;
|
||||||
|
if (len==1) {
|
||||||
|
return new Short[] {((Short[]) filling[0])[0],((Short[]) filling[1])[0]};
|
||||||
|
}
|
||||||
|
int index = random.nextInt(len);
|
||||||
|
return new Short[] {((Short[]) filling[0])[index],((Short[]) filling[1])[index]};
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void removeSign(Player plr, Plot p) {
|
||||||
|
PlotWorld plotworld = PlotMain.getWorldSettings(Bukkit.getWorld(p.world));
|
||||||
|
Location pl = new Location(plr.getWorld(), getPlotBottomLoc(plr.getWorld(), p.id).getBlockX() , plotworld.ROAD_HEIGHT + 1, getPlotBottomLoc(plr.getWorld(), p.id).getBlockZ());
|
||||||
|
Block bs = pl.add(0,0,-1).getBlock();
|
||||||
|
bs.setType(Material.AIR);
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("deprecation")
|
||||||
|
public static void setSign(Player plr, Plot p) {
|
||||||
|
PlotWorld plotworld = PlotMain.getWorldSettings(Bukkit.getWorld(p.world));
|
||||||
|
Location pl = new Location(plr.getWorld(), getPlotBottomLoc(plr.getWorld(), p.id).getBlockX() , plotworld.ROAD_HEIGHT + 1, getPlotBottomLoc(plr.getWorld(), p.id).getBlockZ());
|
||||||
|
Block bs = pl.add(0,0,-1).getBlock();
|
||||||
|
bs.setType(Material.AIR);
|
||||||
|
bs.setTypeIdAndData(Material.WALL_SIGN.getId(), (byte) 2, false);
|
||||||
|
String id = p.id.y+";"+p.id.x;
|
||||||
|
Sign sign = (Sign) bs.getState();
|
||||||
|
sign.setLine(0, C.OWNER_SIGN_LINE_1.translated().replaceAll("%id%", id));
|
||||||
|
sign.setLine(1, C.OWNER_SIGN_LINE_2.translated().replaceAll("%id%", id).replaceAll("%plr%", plr.getName()));
|
||||||
|
sign.setLine(2, C.OWNER_SIGN_LINE_3.translated().replaceAll("%id%", id).replaceAll("%plr%", plr.getName()));
|
||||||
|
sign.setLine(3, C.OWNER_SIGN_LINE_4.translated().replaceAll("%id%", id).replaceAll("%plr%", plr.getName()));
|
||||||
|
sign.update(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String getPlayerName(UUID uuid) {
|
||||||
|
if(uuid == null) return "unknown";
|
||||||
|
OfflinePlayer plr = Bukkit.getOfflinePlayer(uuid);
|
||||||
|
if(plr == null) return "unknown";
|
||||||
|
return plr.getName();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String getStringSized(int max, String string) {
|
||||||
|
if(string.length() > max) return string.substring(0,max);
|
||||||
|
return string;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void adjustWall(World w, Plot plot, short id, byte data) {
|
||||||
|
|
||||||
|
PlotWorld plotworld = PlotMain.getWorldSettings(Bukkit.getWorld(plot.world));
|
||||||
|
|
||||||
|
List<String> wallIds = new ArrayList<String>();
|
||||||
|
|
||||||
|
wallIds.add("" + id + ":" + data);
|
||||||
|
|
||||||
|
Location bottom = getPlotBottomLoc(w, plot.id);
|
||||||
|
Location top = getPlotTopLoc(w, plot.id);
|
||||||
|
|
||||||
|
int x, z;
|
||||||
|
|
||||||
|
Block block;
|
||||||
|
|
||||||
|
for (x = bottom.getBlockX(); x < top.getBlockX() + 1; x++) {
|
||||||
|
z = bottom.getBlockZ();
|
||||||
|
|
||||||
|
block = w.getBlockAt(x, plotworld.ROAD_HEIGHT + 1, z);
|
||||||
|
setWall(block, "" + id + ":" + data);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (z = bottom.getBlockZ(); z < top.getBlockZ() + 1; z++) {
|
||||||
|
x = top.getBlockX() + 1;
|
||||||
|
|
||||||
|
block = w.getBlockAt(x, plotworld.ROAD_HEIGHT + 1, z);
|
||||||
|
setWall(block, "" + id + ":" + data);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (x = top.getBlockX() + 1; x > bottom.getBlockX() - 1; x--) {
|
||||||
|
z = top.getBlockZ() + 1;
|
||||||
|
|
||||||
|
block = w.getBlockAt(x, plotworld.ROAD_HEIGHT + 1, z);
|
||||||
|
setWall(block, "" + id + ":" + data);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (z = top.getBlockZ() + 1; z > bottom.getBlockZ() - 1; z--) {
|
||||||
|
x = bottom.getBlockX();
|
||||||
|
block = w.getBlockAt(x, plotworld.ROAD_HEIGHT + 1, z);
|
||||||
|
setWall(block, "" + id + ":" + data);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean createPlot(Player player, Plot plot) {
|
||||||
|
@SuppressWarnings("deprecation")
|
||||||
|
World w = plot.getWorld();
|
||||||
|
Plot p = new Plot(plot.id, player.getUniqueId(), plot.settings.getBiome(), null, null, w.getName());
|
||||||
|
PlotMain.updatePlot(p);
|
||||||
|
DBFunc.createPlot(p);
|
||||||
|
DBFunc.createPlotSettings(DBFunc.getId(w.getName(),p.id), p);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static int getLoadedChunks(World world) {
|
||||||
|
return world.getLoadedChunks().length;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static int getEntities(World world) {
|
||||||
|
return world.getEntities().size();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static int getTileEntities(World world) {
|
||||||
|
PlotWorld plotworld = PlotMain.getWorldSettings(world);
|
||||||
|
int x = 0;
|
||||||
|
for(Chunk chunk : world.getLoadedChunks()) {
|
||||||
|
x += chunk.getTileEntities().length;
|
||||||
|
}
|
||||||
|
return x;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static double getWorldFolderSize(){
|
||||||
|
//long size = FileUtils.sizeOfDirectory(Bukkit.getWorld(Settings.PLOT_WORLD).getWorldFolder());
|
||||||
|
long size = 10;
|
||||||
|
return (((size) / 1024) / 1024);
|
||||||
|
}
|
||||||
|
|
||||||
|
// public static void adjustLinkedPlots(String id) {
|
||||||
|
// World world = Bukkit.getWorld(Settings.PLOT_WORLD);
|
||||||
|
// int x = getIdX(id);
|
||||||
|
// int z = getIdZ(id);
|
||||||
|
//
|
||||||
|
// plot p11 = getPlot(id);
|
||||||
|
// if (p11 != null) {
|
||||||
|
// plot p01, p10, p12, p21, p00, p02, p20, p22;
|
||||||
|
// p01 = getPlot(x - 1, z);
|
||||||
|
// p10 = getPlot(x, z - 1);
|
||||||
|
// p12 = getPlot(x, z + 1);
|
||||||
|
// p21 = getPlot(x + 1, z);
|
||||||
|
// p00 = getPlot(x - 1, z - 1);
|
||||||
|
// p02 = getPlot(x - 1, z + 1);
|
||||||
|
// p20 = getPlot(x + 1, z - 1);
|
||||||
|
// p22 = getPlot(x + 1, z + 1);
|
||||||
|
// if (p01 != null && p01.owner.equals(p11.owner)) {
|
||||||
|
// fillroad(p01, p11, world);
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// if (p10 != null && p10.owner.equals(p11.owner)) {
|
||||||
|
// fillroad(p10, p11, world);
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// if (p12 != null && p12.owner.equals(p11.owner)) {
|
||||||
|
// fillroad(p12, p11, world);
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// if (p21 != null && p21.owner.equals(p11.owner)) {
|
||||||
|
// fillroad(p21, p11, world);
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// if (p00 != null && p10 != null && p01 != null
|
||||||
|
// && p00.owner.equals(p11.owner)
|
||||||
|
// && p11.owner.equals(p10.owner)
|
||||||
|
// && p10.owner.equals(p01.owner)) {
|
||||||
|
// fillmiddleroad(p00, p11, world);
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// if (p10 != null && p20 != null && p21 != null
|
||||||
|
// && p10.owner.equals(p11.owner)
|
||||||
|
// && p11.owner.equals(p20.owner)
|
||||||
|
// && p20.owner.equals(p21.owner)) {
|
||||||
|
// fillmiddleroad(p20, p11, world);
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// if (p01 != null && p02 != null && p12 != null
|
||||||
|
// && p01.owner.equals(p11.owner)
|
||||||
|
// && p11.owner.equals(p02.owner)
|
||||||
|
// && p02.owner.equals(p12.owner)) {
|
||||||
|
// fillmiddleroad(p02, p11, world);
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// if (p12 != null && p21 != null && p22 != null
|
||||||
|
// && p12.owner.equals(p11.owner)
|
||||||
|
// && p11.owner.equals(p21.owner)
|
||||||
|
// && p21.owner.equals(p22.owner)) {
|
||||||
|
// fillmiddleroad(p22, p11, world);
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// public static void fillroad(plot plot1, plot plot2, World w) {
|
||||||
|
// Location bottomPlot1, topPlot1, bottomPlot2, topPlot2;
|
||||||
|
// bottomPlot1 = getPlotBottomLoc(w, plot1.id);
|
||||||
|
// topPlot1 = getPlotTopLoc(w, plot1.id);
|
||||||
|
// bottomPlot2 = getPlotBottomLoc(w, plot2.id);
|
||||||
|
// topPlot2 = getPlotTopLoc(w, plot2.id);
|
||||||
|
//
|
||||||
|
// int minX, maxX, minZ, maxZ;
|
||||||
|
//
|
||||||
|
// boolean isWallX;
|
||||||
|
//
|
||||||
|
// int h = Settings.ROAD_HEIGHT;
|
||||||
|
// int wallId = Settings.WALL_BLOCK;
|
||||||
|
// int fillId = Settings.TOP_BLOCK;
|
||||||
|
//
|
||||||
|
// if(bottomPlot1.getBlockX() == bottomPlot2.getBlockX()) {
|
||||||
|
// minX = bottomPlot1.getBlockX();
|
||||||
|
// maxX = topPlot1.getBlockX();
|
||||||
|
//
|
||||||
|
// minZ = Math.min(bottomPlot1.getBlockZ(), bottomPlot2.getBlockZ()) + Settings.PLOT_WIDTH;
|
||||||
|
// maxZ = Math.min(topPlot1.getBlockZ(), topPlot2.getBlockZ()) - Settings.PLOT_WIDTH;
|
||||||
|
// } else {
|
||||||
|
// minZ = bottomPlot1.getBlockZ();
|
||||||
|
// maxZ = topPlot1.getBlockZ();
|
||||||
|
//
|
||||||
|
// minX = Math.min(bottomPlot1.getBlockX(), bottomPlot2.getBlockX()) + Settings.PLOT_WIDTH;
|
||||||
|
// maxX = Math.max(topPlot1.getBlockX(), topPlot2.getBlockX()) - Settings.PLOT_WIDTH;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// isWallX = (maxX - minX) > (maxZ - minZ);
|
||||||
|
//
|
||||||
|
// if(isWallX) {
|
||||||
|
// minX--;
|
||||||
|
// maxX++;
|
||||||
|
// } else {
|
||||||
|
// minZ--;
|
||||||
|
// maxZ++;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// for(int x = minX; x <= maxX; x++) {
|
||||||
|
// for(int z = minZ; x <= maxZ; z++) {
|
||||||
|
// for(int y = h; y < h + 3; y++) {
|
||||||
|
// if(y >= (h + 2)) {
|
||||||
|
// w.getBlockAt(x,y,z).setType(Material.AIR);
|
||||||
|
// } else if(y == (h + 1)) {
|
||||||
|
// if(isWallX && (x == minX || x == maxX)) {
|
||||||
|
// w.getBlockAt(x,y,z).setTypeIdAndData(wallId, (byte) 0, true);
|
||||||
|
// } else if(!isWallX && (z == minZ || z == maxZ)) {
|
||||||
|
// w.getBlockAt(x,y,z).setTypeIdAndData(wallId, (byte) 0, true);
|
||||||
|
// } else {
|
||||||
|
// w.getBlockAt(x,y,z).setType(Material.AIR);
|
||||||
|
// }
|
||||||
|
// } else {
|
||||||
|
// w.getBlockAt(x,y,z).setTypeIdAndData(fillId, (byte) 0, true);
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// public static void fillmiddleroad(plot p1, plot p2, World w) {
|
||||||
|
// Location b1 = getPlotBottomLoc(w, p1.id);
|
||||||
|
// Location t1 = getPlotTopLoc(w, p1.id);
|
||||||
|
// Location b2 = getPlotBottomLoc(w, p2.id);
|
||||||
|
// Location t2 = getPlotTopLoc(w, p2.id);
|
||||||
|
//
|
||||||
|
// int minX, maxX, minZ, maxZ;
|
||||||
|
//
|
||||||
|
// int h = Settings.ROAD_HEIGHT;
|
||||||
|
// int fillID = Settings.TOP_BLOCK;
|
||||||
|
//
|
||||||
|
// minX = Math.min(t1.getBlockX(), t2.getBlockX());
|
||||||
|
// maxX = Math.max(b1.getBlockX(), b2.getBlockX());
|
||||||
|
//
|
||||||
|
// minZ = Math.min(t1.getBlockZ(), t2.getBlockZ());
|
||||||
|
// maxZ = Math.max(b1.getBlockZ(), b2.getBlockZ());
|
||||||
|
//
|
||||||
|
// for(int x = minX; x <= maxX; x++) {
|
||||||
|
// for(int z = minZ; z <= maxZ; z++) {
|
||||||
|
// for(int y = h; y < h + 3; y++) {
|
||||||
|
// if(y >= (h + 1)) {
|
||||||
|
// w.getBlockAt(x,y,z).setType(Material.AIR);
|
||||||
|
// } else {
|
||||||
|
// w.getBlockAt(x,y,z).setTypeId(fillID);
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
public static String createId(int x, int z) {
|
||||||
|
return x + ";" + z;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static ArrayList<String> runners_p = new ArrayList<String>();
|
||||||
|
public static HashMap<Plot, Integer> runners = new HashMap<Plot, Integer>();
|
||||||
|
|
||||||
|
public static void adjustWallFilling(final Player requester, final World w, final Plot plot,
|
||||||
|
final short id, final byte data) {
|
||||||
|
if(runners.containsKey(plot)) {
|
||||||
|
PlayerFunctions.sendMessage(requester, C.WAIT_FOR_TIMER);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
PlayerFunctions.sendMessage(requester, C.GENERATING_WALL_FILLING);
|
||||||
|
final PlotWorld plotworld = PlotMain.getWorldSettings(w);
|
||||||
|
runners.put(
|
||||||
|
plot,
|
||||||
|
Bukkit.getScheduler().scheduleSyncRepeatingTask(PlotMain.getMain(),
|
||||||
|
new Runnable() {
|
||||||
|
Location bottom = getPlotBottomLoc(w, plot.id);
|
||||||
|
Location top = getPlotTopLoc(w, plot.id);
|
||||||
|
int y = plotworld.ROAD_HEIGHT;
|
||||||
|
int x, z;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
for (x = bottom.getBlockX(); x < top
|
||||||
|
.getBlockX() + 1; x++) {
|
||||||
|
z = bottom.getBlockZ();
|
||||||
|
setWall(w.getBlockAt(x, y, z), "" + id
|
||||||
|
+ ":" + data);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (z = bottom.getBlockZ(); z < top
|
||||||
|
.getBlockZ() + 1; z++) {
|
||||||
|
x = top.getBlockX() + 1;
|
||||||
|
setWall(w.getBlockAt(x, y, z), "" + id
|
||||||
|
+ ":" + data);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (x = top.getBlockX() + 1; x > bottom
|
||||||
|
.getBlockX() - 1; x--) {
|
||||||
|
z = top.getBlockZ() + 1;
|
||||||
|
setWall(w.getBlockAt(x, y, z), "" + id
|
||||||
|
+ ":" + data);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (z = top.getBlockZ() + 1; z > bottom
|
||||||
|
.getBlockZ() - 1; z--) {
|
||||||
|
x = bottom.getBlockX();
|
||||||
|
setWall(w.getBlockAt(x, y, z), "" + id
|
||||||
|
+ ":" + data);
|
||||||
|
}
|
||||||
|
|
||||||
|
y--;
|
||||||
|
if (y < 1) {
|
||||||
|
int runner = runners.get(plot);
|
||||||
|
runners.remove(plot);
|
||||||
|
PlayerFunctions.sendMessage(requester, C.SET_BLOCK_ACTION_FINISHED);
|
||||||
|
Bukkit.getScheduler().cancelTask(runner);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}, 0l, 5l));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void setFloor(final Player requester, final Plot plot, final Material material[], final byte data[]) {
|
||||||
|
final PlotWorld plotworld = PlotMain.getWorldSettings(Bukkit.getWorld(plot.world));
|
||||||
|
if(runners.containsKey(plot)) {
|
||||||
|
PlayerFunctions.sendMessage(requester, C.WAIT_FOR_TIMER);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
String time = RUtils.formatTime(calculateNeededTime(square(plotworld.PLOT_WIDTH), 2 * plotworld.PLOT_WIDTH));
|
||||||
|
String send = C.GENERATING_FLOOR.s().replaceAll("%time%", time);
|
||||||
|
PlayerFunctions.sendMessage(requester, send);
|
||||||
|
runners.put(plot, Bukkit.getScheduler().scheduleSyncRepeatingTask(PlotMain.getMain(), new Runnable() {
|
||||||
|
World world = Bukkit.getWorld(plot.world);
|
||||||
|
int x1 = getPlotBottomLoc(world, plot.id).getBlockX();
|
||||||
|
int x2 = x1 + plotworld.PLOT_WIDTH;
|
||||||
|
int z1 = getPlotBottomLoc(world, plot.id).getBlockZ();
|
||||||
|
int z2 = z1 + plotworld.PLOT_WIDTH;
|
||||||
|
|
||||||
|
int xMin = Math.min(x1, x2) + 1;
|
||||||
|
int xMax = Math.max(x1, x2);
|
||||||
|
|
||||||
|
int zMin = Math.min(z1, z2) + 1;
|
||||||
|
int zMax = Math.max(z1, z2);
|
||||||
|
Random random = new Random();
|
||||||
|
int x = xMin;
|
||||||
|
@SuppressWarnings("deprecation")
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
for(int z = zMin; z <= zMax; z++) {
|
||||||
|
int y = plotworld.PLOT_HEIGHT;
|
||||||
|
byte d;
|
||||||
|
short id;
|
||||||
|
if(material.length > 1) {
|
||||||
|
int index = random.nextInt(material.length);
|
||||||
|
d = data[index];
|
||||||
|
id = (short) material[index].getId();
|
||||||
|
} else {
|
||||||
|
d = data[0];
|
||||||
|
id = (short)material[0].getId();
|
||||||
|
}
|
||||||
|
world.getBlockAt(x, y, z).setTypeIdAndData(id,d, true);
|
||||||
|
}
|
||||||
|
x++;
|
||||||
|
if(x > xMax) {
|
||||||
|
int runner = runners.get(plot);
|
||||||
|
runners.remove(plot);
|
||||||
|
PlayerFunctions.sendMessage(requester, C.SET_BLOCK_ACTION_FINISHED);
|
||||||
|
Bukkit.getScheduler().cancelTask(runner);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
},0l, 10l));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static int square(int x) {
|
||||||
|
return x * x;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static int getPlotSize(World world) {
|
||||||
|
PlotWorld plotworld = PlotMain.getWorldSettings(world);
|
||||||
|
return (square(plotworld.PLOT_WIDTH)) * (world.getMaxHeight());
|
||||||
|
}
|
||||||
|
public static Short[] getBlock(String block) {
|
||||||
|
if (block.contains(":")) {
|
||||||
|
String[] split = block.split(":");
|
||||||
|
return new Short[] {Short.parseShort(split[0]),Short.parseShort(split[1])};
|
||||||
|
}
|
||||||
|
return new Short[] {Short.parseShort(block),0};
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void clear(final Player requester, final Plot plot) {
|
||||||
|
PlotWorld plotworld = PlotMain.getWorldSettings(Bukkit.getWorld(plot.world));
|
||||||
|
long start = System.currentTimeMillis();
|
||||||
|
PlotHelper.setBiome(requester.getWorld(), plot, Biome.FOREST);
|
||||||
|
PlotHelper.removeSign(requester, plot);
|
||||||
|
PlayerFunctions.sendMessage(requester, C.CLEARING_PLOT);
|
||||||
|
World world = requester.getWorld();
|
||||||
|
Location pos1 = getPlotBottomLoc(world, plot.id);
|
||||||
|
Location pos2 = getPlotTopLoc(world, plot.id);
|
||||||
|
SetBlockFast setBlockClass = null;
|
||||||
|
|
||||||
|
Short[] plotfloors = new Short[plotworld.TOP_BLOCK.length];
|
||||||
|
Short[] plotfloors_data = new Short[plotworld.TOP_BLOCK.length];
|
||||||
|
|
||||||
|
Short[] filling = new Short[plotworld.MAIN_BLOCK.length];
|
||||||
|
Short[] filling_data = new Short[plotworld.MAIN_BLOCK.length];
|
||||||
|
|
||||||
|
for (int i = 0; i < plotworld.TOP_BLOCK.length; i++) {
|
||||||
|
Short[] result = getBlock(plotworld.TOP_BLOCK[i]);
|
||||||
|
plotfloors[i] = result[0];
|
||||||
|
plotfloors_data[i] = result[1];
|
||||||
|
}
|
||||||
|
for (int i = 0; i < plotworld.MAIN_BLOCK.length; i++) {
|
||||||
|
Short[] result = getBlock(plotworld.MAIN_BLOCK[i]);
|
||||||
|
filling[i] = result[0];
|
||||||
|
filling_data[i] = result[1];
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
setBlockClass = new SetBlockFast();
|
||||||
|
regenerateCuboid(pos1, pos2,requester,plotworld, new Object[] {plotfloors,plotfloors_data}, new Object[] {filling, filling_data});
|
||||||
|
}
|
||||||
|
catch (NoClassDefFoundError e) {
|
||||||
|
PlotMain.sendConsoleSenderMessage(C.PREFIX.s() + "&cFast plot clearing is currently not enabled.");
|
||||||
|
PlotMain.sendConsoleSenderMessage(C.PREFIX.s() + "&c - Please get PlotSquared for "+Bukkit.getVersion()+" for improved performance");
|
||||||
|
}
|
||||||
|
if (pos2.getBlockX()-pos1.getBlockX()<16) {
|
||||||
|
regenerateCuboid(pos1, pos2,requester,plotworld, new Object[] {plotfloors,plotfloors_data}, new Object[] {filling, filling_data});
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
int startX = (pos1.getBlockX()/16)*16;
|
||||||
|
int startZ = (pos1.getBlockZ()/16)*16;
|
||||||
|
int chunkX = 16+pos2.getBlockX();
|
||||||
|
int chunkZ = 16+pos2.getBlockZ();
|
||||||
|
int plotMinX = getPlotBottomLoc(world,plot.id).getBlockX()+1;
|
||||||
|
int plotMinZ = getPlotBottomLoc(world,plot.id).getBlockZ()+1;
|
||||||
|
int plotMaxX = getPlotTopLoc(world,plot.id).getBlockX();
|
||||||
|
int plotMaxZ = getPlotTopLoc(world,plot.id).getBlockZ();
|
||||||
|
Location min = null;
|
||||||
|
Location max = null;
|
||||||
|
for (int i = startX; i<chunkX;i+=16) {
|
||||||
|
for (int j = startZ; j<chunkZ;j+=16) {
|
||||||
|
Plot plot1 = getCurrentPlot(new Location(world, i, 0, j));
|
||||||
|
if (plot1!=null && plot1.getId()!=plot.getId() && plot1.hasOwner()) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
Plot plot2 = getCurrentPlot(new Location(world, i+15, 0, j));
|
||||||
|
if (plot2!=null && plot2.getId()!=plot.getId() && plot2.hasOwner()) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
Plot plot3 = getCurrentPlot(new Location(world, i+15, 0, j+15));
|
||||||
|
if (plot3!=null && plot3.getId()!=plot.getId() && plot3.hasOwner()) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
Plot plot4 = getCurrentPlot(new Location(world, i, 0, j+15));
|
||||||
|
if (plot4!=null && plot4.getId()!=plot.getId() && plot4.hasOwner()) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
Plot plot5 = getCurrentPlot(new Location(world, i+15, 0, j+15));
|
||||||
|
if (plot5!=null && plot5.getId()!=plot.getId() && plot5.hasOwner()) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (min==null) {
|
||||||
|
min = new Location(world, Math.max(i-1, plotMinX), 0, Math.max(j-1, plotMinZ));
|
||||||
|
max = new Location(world, Math.min(i+16, plotMaxX), 0, Math.min(j+16, plotMaxZ));
|
||||||
|
}
|
||||||
|
else if (max.getBlockZ() < j + 15 || max.getBlockX() < i + 15) {
|
||||||
|
max = new Location(world, Math.min(i+16, plotMaxX), 0, Math.min(j+16, plotMaxZ));
|
||||||
|
}
|
||||||
|
world.regenerateChunk(i/16, j/16);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (min==null) {
|
||||||
|
regenerateCuboid(pos1, pos2,requester,plotworld, new Object[] {plotfloors,plotfloors_data}, new Object[] {filling, filling_data});
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
int height = world.getMaxHeight();
|
||||||
|
regenerateCuboid(new Location(world, plotMinX, 0, plotMinZ), new Location(world, min.getBlockX(), height, min.getBlockZ()),requester,plotworld, new Object[] {plotfloors,plotfloors_data}, new Object[] {filling, filling_data}); //1
|
||||||
|
regenerateCuboid(new Location(world, min.getBlockX(), 0, plotMinZ), new Location(world, max.getBlockX(), height, min.getBlockZ()),requester,plotworld, new Object[] {plotfloors,plotfloors_data}, new Object[] {filling, filling_data}); //2
|
||||||
|
regenerateCuboid(new Location(world, max.getBlockX(), 0, plotMinZ), new Location(world, plotMaxX, height, min.getBlockZ()),requester,plotworld, new Object[] {plotfloors,plotfloors_data}, new Object[] {filling, filling_data}); //3
|
||||||
|
regenerateCuboid(new Location(world, plotMinX, 0, min.getBlockZ()), new Location(world, min.getBlockX(), height, max.getBlockZ()),requester,plotworld, new Object[] {plotfloors,plotfloors_data}, new Object[] {filling, filling_data}); //4
|
||||||
|
regenerateCuboid(new Location(world, plotMinX, 0, max.getBlockZ()), new Location(world, min.getBlockX(), height, plotMaxZ),requester,plotworld, new Object[] {plotfloors,plotfloors_data}, new Object[] {filling, filling_data}); //5
|
||||||
|
regenerateCuboid(new Location(world, min.getBlockX(), 0, max.getBlockZ()), new Location(world, max.getBlockX(), height, plotMaxZ),requester,plotworld, new Object[] {plotfloors,plotfloors_data}, new Object[] {filling, filling_data}); //6
|
||||||
|
regenerateCuboid(new Location(world, max.getBlockX(), 0, min.getBlockZ()), new Location(world, plotMaxX, height, max.getBlockZ()),requester,plotworld, new Object[] {plotfloors,plotfloors_data}, new Object[] {filling, filling_data}); //7
|
||||||
|
regenerateCuboid(new Location(world, max.getBlockX(), 0, max.getBlockZ()), new Location(world, plotMaxX, height, plotMaxZ),requester,plotworld, new Object[] {plotfloors,plotfloors_data}, new Object[] {filling, filling_data}); //8
|
||||||
|
}
|
||||||
|
PlayerFunctions.sendMessage(requester, C.CLEARING_DONE.s().replaceAll("%time%", ""+((System.currentTimeMillis()-start)/1000.0)));
|
||||||
|
if (setBlockClass!=null) {
|
||||||
|
SetBlockFast.update(requester);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public static void regenerateCuboid(Location pos1, Location pos2,Player player, PlotWorld plotworld, Object[] plotfloors, Object[] filling) {
|
||||||
|
World world = pos1.getWorld();
|
||||||
|
int zMin = pos1.getBlockZ();
|
||||||
|
int zMax = pos2.getBlockZ();
|
||||||
|
int xMin = pos1.getBlockX();
|
||||||
|
int xMax = pos2.getBlockX();
|
||||||
|
int height = pos2.getBlockY();
|
||||||
|
Random random = new Random();
|
||||||
|
|
||||||
|
for (int y = 0; y<=height; y++) {
|
||||||
|
for (int x = xMin; x<=xMax; x++) {
|
||||||
|
for(int z = zMin; z <= zMax; z++) {
|
||||||
|
short d = 0;
|
||||||
|
short id = 0;
|
||||||
|
boolean change = true;
|
||||||
|
Block block = world.getBlockAt(x,y,z);
|
||||||
|
int type = block.getTypeId();
|
||||||
|
if(y == 0) {
|
||||||
|
if(type != 7)
|
||||||
|
id = (short) Material.BEDROCK.getId();
|
||||||
|
else
|
||||||
|
change = false;
|
||||||
|
} else if(y == plotworld.PLOT_HEIGHT) {
|
||||||
|
Short[] result = getRandom(random, plotfloors);
|
||||||
|
id = result[0];
|
||||||
|
d = result[1];
|
||||||
|
} else if(y < plotworld.PLOT_HEIGHT) {
|
||||||
|
Short[] result = getRandom(random, filling);
|
||||||
|
id = result[0];
|
||||||
|
d = result[1];
|
||||||
|
} else if(y > plotworld.PLOT_HEIGHT && y < world.getMaxHeight()) {
|
||||||
|
if(type != 0)
|
||||||
|
id = 0;
|
||||||
|
else
|
||||||
|
change = false;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
change = false;
|
||||||
|
}
|
||||||
|
if(change) {
|
||||||
|
if (type!=id) {
|
||||||
|
block.setTypeIdAndData(id, (byte) d, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void setBiome(World world, Plot plot, Biome b) {
|
||||||
|
int bottomX = getPlotBottomLoc(world, plot.id).getBlockX() - 1;
|
||||||
|
int topX = getPlotTopLoc(world, plot.id).getBlockX() + 1;
|
||||||
|
int bottomZ = getPlotBottomLoc(world, plot.id).getBlockZ() - 1;
|
||||||
|
int topZ = getPlotTopLoc(world, plot.id).getBlockZ() + 1;
|
||||||
|
|
||||||
|
for (int x = bottomX; x <= topX; x++) {
|
||||||
|
for (int z = bottomZ; z <= topZ; z++) {
|
||||||
|
world.getBlockAt(x, 0, z).setBiome(b);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
plot.settings.setBiome(b);
|
||||||
|
PlotMain.updatePlot(plot);
|
||||||
|
refreshPlotChunks(world, plot);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Location getPlotHome(World w, Plot plot) {
|
||||||
|
PlotWorld plotworld = PlotMain.getWorldSettings(w);
|
||||||
|
if(plot.settings.getPosition() == PlotHomePosition.DEFAULT) {
|
||||||
|
int x = getPlotBottomLoc(w, plot.id).getBlockX()
|
||||||
|
+ (getPlotTopLoc(w, plot.id).getBlockX() - getPlotBottomLoc(w,
|
||||||
|
plot.id).getBlockX());
|
||||||
|
int z = getPlotBottomLoc(w, plot.id).getBlockZ() - 2;
|
||||||
|
return new Location(w, x, plotworld.ROAD_HEIGHT + 2, z);
|
||||||
|
} else {
|
||||||
|
World world = w;
|
||||||
|
int x1 = getPlotBottomLoc(world, plot.id).getBlockX();
|
||||||
|
int x2 = x1 + plotworld.PLOT_WIDTH;
|
||||||
|
int z1 = getPlotBottomLoc(world, plot.id).getBlockZ();
|
||||||
|
int z2 = z1 + plotworld.PLOT_WIDTH;
|
||||||
|
|
||||||
|
int xMin = Math.min(x1, x2) + 1;
|
||||||
|
// int xMax = Math.max(x1, x2);
|
||||||
|
|
||||||
|
int zMin = Math.min(z1, z2) + 1;
|
||||||
|
// int zMax = Math.max(z1, z2);
|
||||||
|
|
||||||
|
double adder = (plotworld.PLOT_WIDTH / 2);
|
||||||
|
double x = (xMin + adder), y = plotworld.ROAD_HEIGHT + 3, z = (zMin + adder);
|
||||||
|
return new Location(world, x, y, z);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Location getPlotHome(World w, PlotId id) {
|
||||||
|
PlotWorld plotworld = PlotMain.getWorldSettings(w);
|
||||||
|
if(getPlot(w,id).settings.getPosition() == PlotHomePosition.DEFAULT) {
|
||||||
|
int x = getPlotBottomLoc(w, id).getBlockX()
|
||||||
|
+ (getPlotTopLoc(w, id).getBlockX() - getPlotBottomLoc(w, id)
|
||||||
|
.getBlockX());
|
||||||
|
int z = getPlotBottomLoc(w, id).getBlockZ() - 2;
|
||||||
|
return new Location(w, x, plotworld.ROAD_HEIGHT + 2, z);
|
||||||
|
} else {
|
||||||
|
World world = w;
|
||||||
|
int x1 = getPlotBottomLoc(world, id).getBlockX();
|
||||||
|
int x2 = x1 + plotworld.PLOT_WIDTH;
|
||||||
|
int z1 = getPlotBottomLoc(world, id).getBlockZ();
|
||||||
|
int z2 = z1 + plotworld.PLOT_WIDTH;
|
||||||
|
|
||||||
|
int xMin = Math.min(x1, x2) + 1;
|
||||||
|
int xMax = Math.max(x1, x2);
|
||||||
|
|
||||||
|
int zMin = Math.min(z1, z2) + 1;
|
||||||
|
int zMax = Math.max(z1, z2);
|
||||||
|
|
||||||
|
double adder = (plotworld.PLOT_WIDTH / 2);
|
||||||
|
double x = (xMin + adder), y = plotworld.ROAD_HEIGHT + 3, z = (zMin + adder);
|
||||||
|
return new Location(world, x, y, z);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void refreshPlotChunks(World world, Plot plot) {
|
||||||
|
int bottomX = getPlotBottomLoc(world, plot.id).getBlockX();
|
||||||
|
int topX = getPlotTopLoc(world, plot.id).getBlockX();
|
||||||
|
int bottomZ = getPlotBottomLoc(world, plot.id).getBlockZ();
|
||||||
|
int topZ = getPlotTopLoc(world, plot.id).getBlockZ();
|
||||||
|
|
||||||
|
int minChunkX = (int) Math.floor((double) bottomX / 16);
|
||||||
|
int maxChunkX = (int) Math.floor((double) topX / 16);
|
||||||
|
int minChunkZ = (int) Math.floor((double) bottomZ / 16);
|
||||||
|
int maxChunkZ = (int) Math.floor((double) topZ / 16);
|
||||||
|
|
||||||
|
for (int x = minChunkX; x <= maxChunkX; x++) {
|
||||||
|
for (int z = minChunkZ; z <= maxChunkZ; z++) {
|
||||||
|
world.refreshChunk(x, z);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Location getPlotTopLoc(World world, PlotId id) {
|
||||||
|
PlotWorld plotworld = PlotMain.getWorldSettings(world);
|
||||||
|
int px = id.x;
|
||||||
|
int pz = id.y;
|
||||||
|
|
||||||
|
int x = px * (plotworld.ROAD_WIDTH + plotworld.PLOT_WIDTH)
|
||||||
|
- ((int) Math.floor(plotworld.ROAD_WIDTH / 2)) - 1;
|
||||||
|
int z = pz * (plotworld.ROAD_WIDTH + plotworld.PLOT_WIDTH)
|
||||||
|
- ((int) Math.floor(plotworld.ROAD_WIDTH / 2)) - 1;
|
||||||
|
|
||||||
|
return new Location(world, x, 255, z);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Location getPlotBottomLoc(World world, PlotId id) {
|
||||||
|
PlotWorld plotworld = PlotMain.getWorldSettings(world);
|
||||||
|
int px = id.x;
|
||||||
|
int pz = id.y;
|
||||||
|
|
||||||
|
int x = px * (plotworld.ROAD_WIDTH + plotworld.PLOT_WIDTH) - plotworld.PLOT_WIDTH
|
||||||
|
- ((int) Math.floor(plotworld.ROAD_WIDTH / 2)) - 1;
|
||||||
|
int z = pz * (plotworld.ROAD_WIDTH + plotworld.PLOT_WIDTH) - plotworld.PLOT_WIDTH
|
||||||
|
- ((int) Math.floor(plotworld.ROAD_WIDTH / 2)) - 1;
|
||||||
|
|
||||||
|
return new Location(world, x, 1, z);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Plot getPlot(World world, PlotId id) {
|
||||||
|
if (id == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
if (PlotMain.getPlots(world).containsKey(id)) {
|
||||||
|
return PlotMain.getPlots(world).get(id);
|
||||||
|
}
|
||||||
|
return new Plot(id, null, Biome.FOREST, new ArrayList<UUID>(), new ArrayList<UUID>(), world.getName());
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Plot getCurrentPlot(Location loc) {
|
||||||
|
/*
|
||||||
|
* Vector vector = player.getLocation().toVector(); for(plot plot :
|
||||||
|
* getPlots()) if(vector.isInAABB(plot.l1.toVector(),
|
||||||
|
* plot.l2.toVector())) return plot; return null;
|
||||||
|
*/
|
||||||
|
PlotId id = PlayerFunctions.getPlot(loc);
|
||||||
|
if (id.equals("...") || id.equals("road")) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
if (PlotMain.getPlots(loc.getWorld()).containsKey(id)) {
|
||||||
|
return PlotMain.getPlots(loc.getWorld()).get(id);
|
||||||
|
}
|
||||||
|
return new Plot(id, null, Biome.FOREST, new ArrayList<UUID>(), new ArrayList<UUID>(), loc.getWorld().getName());
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings({ "deprecation" })
|
||||||
|
private static void setWall(Block block, String currentBlockId) {
|
||||||
|
int blockId;
|
||||||
|
byte blockData = 0;
|
||||||
|
if (currentBlockId.contains(":")) {
|
||||||
|
try {
|
||||||
|
blockId = Integer.parseInt(currentBlockId.substring(0,
|
||||||
|
currentBlockId.indexOf(":")));
|
||||||
|
blockData = Byte.parseByte(currentBlockId
|
||||||
|
.substring(currentBlockId.indexOf(":") + 1));
|
||||||
|
} catch (NumberFormatException e) {
|
||||||
|
blockId = 1;
|
||||||
|
blockData = (byte) 0;
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
try {
|
||||||
|
blockId = Integer.parseInt(currentBlockId);
|
||||||
|
} catch (NumberFormatException e) {
|
||||||
|
blockId = 1;
|
||||||
|
blockData = (byte) 0;
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
block.setTypeIdAndData(blockId, blockData, true);
|
||||||
|
}
|
||||||
|
}
|
33
src/com/intellectualcrafters/plot/PlotHomePosition.java
Normal file
33
src/com/intellectualcrafters/plot/PlotHomePosition.java
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) IntellectualCrafters - 2014.
|
||||||
|
* You are not allowed to distribute and/or monetize any of our intellectual property.
|
||||||
|
* IntellectualCrafters is not affiliated with Mojang AB. Minecraft is a trademark of Mojang AB.
|
||||||
|
*
|
||||||
|
* >> File = PlotHomePosition.java
|
||||||
|
* >> Generated by: Citymonstret at 2014-08-09 01:44
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.intellectualcrafters.plot;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by Citymonstret on 2014-08-05.
|
||||||
|
*/
|
||||||
|
public enum PlotHomePosition {
|
||||||
|
CENTER("Center", 'c'),
|
||||||
|
DEFAULT("Default", 'd')
|
||||||
|
;
|
||||||
|
|
||||||
|
private String string;
|
||||||
|
private char ch;
|
||||||
|
PlotHomePosition(String string, char ch) {
|
||||||
|
this.string = string;
|
||||||
|
this.ch = ch;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isMatching(String string) {
|
||||||
|
if(string.length() < 2 && string.charAt(0) == this.ch) return true;
|
||||||
|
if(string.equalsIgnoreCase(this.string)) return true;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
31
src/com/intellectualcrafters/plot/PlotId.java
Normal file
31
src/com/intellectualcrafters/plot/PlotId.java
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
package com.intellectualcrafters.plot;
|
||||||
|
import java.util.Arrays;
|
||||||
|
|
||||||
|
|
||||||
|
public class PlotId {
|
||||||
|
public int x;
|
||||||
|
public int y;
|
||||||
|
public PlotId(int x, int y) {
|
||||||
|
this.x = x;
|
||||||
|
this.y = y;
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object obj){
|
||||||
|
if (this == obj)
|
||||||
|
return true;
|
||||||
|
if (obj == null)
|
||||||
|
return false;
|
||||||
|
if (getClass() != obj.getClass())
|
||||||
|
return false;
|
||||||
|
PlotId other = (PlotId) obj;
|
||||||
|
return (this.x==other.x && this.y==other.y);
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
final int prime = 31;
|
||||||
|
int result = 1;
|
||||||
|
result = prime * result + x;
|
||||||
|
result = prime * result + y;
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
}
|
740
src/com/intellectualcrafters/plot/PlotMain.java
Normal file
740
src/com/intellectualcrafters/plot/PlotMain.java
Normal file
@ -0,0 +1,740 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) IntellectualCrafters - 2014.
|
||||||
|
* You are not allowed to distribute and/or monetize any of our intellectual property.
|
||||||
|
* IntellectualCrafters is not affiliated with Mojang AB. Minecraft is a trademark of Mojang AB.
|
||||||
|
*
|
||||||
|
* >> File = Main.java
|
||||||
|
* >> Generated by: Citymonstret at 2014-08-09 01:43
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.intellectualcrafters.plot;
|
||||||
|
|
||||||
|
import ca.mera.CameraAPI;
|
||||||
|
|
||||||
|
import com.intellectualcrafters.plot.commands.Camera;
|
||||||
|
import com.intellectualcrafters.plot.database.*;
|
||||||
|
import com.intellectualcrafters.plot.Logger.LogLevel;
|
||||||
|
import com.intellectualcrafters.plot.Settings.Web;
|
||||||
|
import com.intellectualcrafters.plot.commands.MainCommand;
|
||||||
|
import com.intellectualcrafters.plot.events.PlayerTeleportToPlotEvent;
|
||||||
|
import com.intellectualcrafters.plot.listeners.PlayerEvents;
|
||||||
|
import com.intellectualcrafters.plot.listeners.WorldEditListener;
|
||||||
|
import com.intellectualsites.web.PlotWeb;
|
||||||
|
import com.sk89q.worldedit.bukkit.WorldEditPlugin;
|
||||||
|
|
||||||
|
import me.confuser.barapi.BarAPI;
|
||||||
|
import net.gravitydevelopment.updater.Updater;
|
||||||
|
|
||||||
|
import org.bukkit.*;
|
||||||
|
import org.bukkit.configuration.file.YamlConfiguration;
|
||||||
|
import org.bukkit.entity.Entity;
|
||||||
|
import org.bukkit.entity.EntityType;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.generator.ChunkGenerator;
|
||||||
|
import org.bukkit.plugin.java.JavaPlugin;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileWriter;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.sql.Connection;
|
||||||
|
import java.sql.DatabaseMetaData;
|
||||||
|
import java.sql.ResultSet;
|
||||||
|
import java.sql.SQLException;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Set;
|
||||||
|
import java.util.Map.Entry;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
import static org.bukkit.Material.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @awesome @author Empire92
|
||||||
|
* @author Citymonstret
|
||||||
|
* PlotMain class.
|
||||||
|
*/
|
||||||
|
public class PlotMain extends JavaPlugin {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* settings.properties
|
||||||
|
*/
|
||||||
|
public static File configFile;
|
||||||
|
public static YamlConfiguration config;
|
||||||
|
private static int config_ver = 1;
|
||||||
|
/**
|
||||||
|
* storage.properties
|
||||||
|
*/
|
||||||
|
public static File storageFile;
|
||||||
|
public static YamlConfiguration storage;
|
||||||
|
public static int storage_ver = 1;
|
||||||
|
/**
|
||||||
|
* translations.properties
|
||||||
|
*/
|
||||||
|
public static File translationsFile;
|
||||||
|
public static YamlConfiguration translations;
|
||||||
|
public static int translations_ver = 1;
|
||||||
|
/**
|
||||||
|
* MySQL Object
|
||||||
|
*/
|
||||||
|
private static MySQL mySQL;
|
||||||
|
/**
|
||||||
|
* MySQL Connection
|
||||||
|
*/
|
||||||
|
public static Connection connection;
|
||||||
|
/**
|
||||||
|
* WorldEdit object
|
||||||
|
*/
|
||||||
|
public static WorldEditPlugin worldEdit = null;
|
||||||
|
/**
|
||||||
|
* BarAPI object
|
||||||
|
*/
|
||||||
|
public static BarAPI barAPI = null;
|
||||||
|
/**
|
||||||
|
* CameraAPI object
|
||||||
|
*/
|
||||||
|
public static CameraAPI cameraAPI;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* !!WorldGeneration!!
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public ChunkGenerator getDefaultWorldGenerator(String worldname, String id) {
|
||||||
|
return new WorldGenerator(worldname);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* TODO: Implement better system
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
@SuppressWarnings("deprecation")
|
||||||
|
public static void checkForExpiredPlots() {
|
||||||
|
final JavaPlugin plugin = PlotMain.getMain();
|
||||||
|
Bukkit.getScheduler().scheduleAsyncRepeatingTask(plugin,
|
||||||
|
new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
checkExpired(plugin, true);
|
||||||
|
}
|
||||||
|
}, 0l, 12 * 60 * 60 * 20l);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* All loaded plots
|
||||||
|
*/
|
||||||
|
private static HashMap<String, HashMap<PlotId, Plot>> plots;
|
||||||
|
/**
|
||||||
|
* All loaded plot worlds
|
||||||
|
*/
|
||||||
|
private static HashMap<String, PlotWorld> worlds = new HashMap<String, PlotWorld>();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get all plots
|
||||||
|
*
|
||||||
|
* @return HashMap containing the plot ID and the plot object.
|
||||||
|
*/
|
||||||
|
public static Set<Plot> getPlots() {
|
||||||
|
ArrayList<Plot> myplots = new ArrayList<Plot>();
|
||||||
|
for (HashMap<PlotId, Plot> world:plots.values()) {
|
||||||
|
myplots.addAll(world.values());
|
||||||
|
}
|
||||||
|
return new HashSet<Plot>(myplots);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Set<Plot> getPlots(Player player) {
|
||||||
|
UUID uuid = player.getUniqueId();
|
||||||
|
ArrayList<Plot> myplots = new ArrayList<Plot>();
|
||||||
|
for (HashMap<PlotId, Plot> world:plots.values()) {
|
||||||
|
for (Plot plot:world.values()) {
|
||||||
|
if (plot.getOwner().equals(uuid)) {
|
||||||
|
myplots.add(plot);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return new HashSet<Plot>(myplots);
|
||||||
|
}
|
||||||
|
public static Set<Plot> getPlots(World world, Player player) {
|
||||||
|
UUID uuid = player.getUniqueId();
|
||||||
|
ArrayList<Plot> myplots = new ArrayList<Plot>();
|
||||||
|
for (Plot plot:getPlots(world).values()) {
|
||||||
|
if (plot.getOwner().equals(uuid)) {
|
||||||
|
myplots.add(plot);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return new HashSet<Plot>(myplots);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static HashMap<PlotId, Plot> getPlots(World world) {
|
||||||
|
if (plots.containsKey(world.getName())) {
|
||||||
|
return plots.get(world.getName());
|
||||||
|
}
|
||||||
|
return new HashMap<PlotId, Plot>();
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* get all plot worlds
|
||||||
|
*/
|
||||||
|
public static World[] getPlotWorlds() {
|
||||||
|
return (worlds.keySet().toArray(new World[0]));
|
||||||
|
}
|
||||||
|
public static String[] getPlotWorldsString() {
|
||||||
|
return plots.keySet().toArray(new String[0]);
|
||||||
|
}
|
||||||
|
public static boolean isPlotWorld(World world) {
|
||||||
|
return (worlds.containsKey(world.getName()));
|
||||||
|
}
|
||||||
|
public static PlotWorld getWorldSettings(World world) {
|
||||||
|
if (worlds.containsKey(world.getName()))
|
||||||
|
return worlds.get(world.getName());
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
public static PlotWorld getWorldSettings(String world) {
|
||||||
|
if (worlds.containsKey(world))
|
||||||
|
return worlds.get(world);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param world
|
||||||
|
* @return set containing the plots for a world
|
||||||
|
*/
|
||||||
|
public static Plot[] getWorldPlots(World world) {
|
||||||
|
return (Plot[])(plots.get(world.getName()).values().toArray(new Plot[0]));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void removePlot(String world, PlotId id) {
|
||||||
|
plots.get(world).remove(id);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Replace the plot object with an updated version
|
||||||
|
*
|
||||||
|
* @param id plot Id
|
||||||
|
* @param plot plot object
|
||||||
|
*/
|
||||||
|
public static void updatePlot(Plot plot) {
|
||||||
|
String world = plot.world;
|
||||||
|
if (!plots.containsKey(world))
|
||||||
|
plots.put(world,new HashMap<PlotId, Plot>());
|
||||||
|
plot.hasChanged = true;
|
||||||
|
plots.get(world).put(plot.id, plot);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* TODO: Implement better system
|
||||||
|
*
|
||||||
|
* @param plugin Plugin
|
||||||
|
* @param async Call async?
|
||||||
|
*/
|
||||||
|
private static void checkExpired(JavaPlugin plugin, boolean async) {
|
||||||
|
if (async) {
|
||||||
|
Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
for (String world:getPlotWorldsString()) {
|
||||||
|
if (plots.containsKey(world)) {
|
||||||
|
for (Plot plot : plots.get(world).values()) {
|
||||||
|
if (plot.owner == null) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (PlayerFunctions.hasExpired(plot)) {
|
||||||
|
DBFunc.delete(world, plot);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
for (String world:getPlotWorldsString()) {
|
||||||
|
if (PlotMain.plots.containsKey(world)) {
|
||||||
|
for (Plot plot : PlotMain.plots.get(world).values()) {
|
||||||
|
if (PlayerFunctions.hasExpired(plot)) {
|
||||||
|
DBFunc.delete(world, plot);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* On Load.
|
||||||
|
* TODO: Load updates async
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
@SuppressWarnings("deprecation")
|
||||||
|
public void onEnable() {
|
||||||
|
{
|
||||||
|
File log = new File(getMain().getDataFolder() + File.separator + "logs" + File.separator + "plots.log");
|
||||||
|
if (!log.exists()) {
|
||||||
|
try {
|
||||||
|
if (!new File(getMain().getDataFolder() + File.separator + "logs").mkdirs()) {
|
||||||
|
sendConsoleSenderMessage(C.PREFIX.s() + "&cFailed to create logs folder. Do it manually.");
|
||||||
|
}
|
||||||
|
if (log.createNewFile()) {
|
||||||
|
FileWriter writer = new FileWriter(log);
|
||||||
|
writer.write("Created at: " + new Date().toString() + "\n\n\n");
|
||||||
|
writer.close();
|
||||||
|
}
|
||||||
|
} catch (IOException e) {
|
||||||
|
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Logger.setup(log);
|
||||||
|
Logger.add(LogLevel.GENERAL, "Logger enabled");
|
||||||
|
}
|
||||||
|
configs();
|
||||||
|
|
||||||
|
// TODO make this configurable
|
||||||
|
PlotWorld.BLOCKS = new ArrayList<>(Arrays.asList(new Material[]{
|
||||||
|
ACACIA_STAIRS, BEACON, BEDROCK,
|
||||||
|
BIRCH_WOOD_STAIRS, BOOKSHELF,
|
||||||
|
BREWING_STAND, BRICK, BRICK_STAIRS,
|
||||||
|
BURNING_FURNACE, CAKE_BLOCK,
|
||||||
|
CAULDRON, CLAY_BRICK, CLAY,
|
||||||
|
COAL_BLOCK, COAL_ORE, COBBLE_WALL,
|
||||||
|
COBBLESTONE, COBBLESTONE_STAIRS,
|
||||||
|
COMMAND, DARK_OAK_STAIRS,
|
||||||
|
DAYLIGHT_DETECTOR, DIAMOND_ORE,
|
||||||
|
DIAMOND_BLOCK, DIRT, DISPENSER,
|
||||||
|
DROPPER, EMERALD_BLOCK, EMERALD_ORE,
|
||||||
|
ENCHANTMENT_TABLE, ENDER_PORTAL_FRAME,
|
||||||
|
ENDER_STONE, FURNACE, GLOWSTONE,
|
||||||
|
GOLD_ORE, GOLD_BLOCK, GRASS,
|
||||||
|
GRAVEL, GLASS, HARD_CLAY,
|
||||||
|
HAY_BLOCK, HUGE_MUSHROOM_1,
|
||||||
|
HUGE_MUSHROOM_2, IRON_BLOCK,
|
||||||
|
IRON_ORE, JACK_O_LANTERN, JUKEBOX,
|
||||||
|
JUNGLE_WOOD_STAIRS, LAPIS_BLOCK,
|
||||||
|
LAPIS_ORE, LEAVES, LEAVES_2,
|
||||||
|
LOG, LOG_2, MELON_BLOCK,
|
||||||
|
MOB_SPAWNER, MOSSY_COBBLESTONE,
|
||||||
|
MYCEL, NETHER_BRICK,
|
||||||
|
NETHER_BRICK_STAIRS, NETHERRACK,
|
||||||
|
NOTE_BLOCK, OBSIDIAN, PACKED_ICE,
|
||||||
|
PUMPKIN, QUARTZ_BLOCK, QUARTZ_ORE,
|
||||||
|
QUARTZ_STAIRS, REDSTONE_BLOCK,
|
||||||
|
SANDSTONE, SAND, SANDSTONE_STAIRS,
|
||||||
|
SMOOTH_BRICK, SMOOTH_STAIRS,
|
||||||
|
SNOW_BLOCK, SOUL_SAND, SPONGE,
|
||||||
|
SPRUCE_WOOD_STAIRS, STONE, WOOD,
|
||||||
|
WOOD_STAIRS, WORKBENCH, WOOL,
|
||||||
|
getMaterial(44), getMaterial(126)}));
|
||||||
|
if (Settings.KILL_ROAD_MOBS)
|
||||||
|
killAllEntities();
|
||||||
|
|
||||||
|
if (C.ENABLED.s().length() > 0) {
|
||||||
|
Broadcast(C.ENABLED);
|
||||||
|
}
|
||||||
|
if (Settings.Update.AUTO_UPDATE) {
|
||||||
|
Updater updater = new Updater(this, 83369, this.getFile(), Updater.UpdateType.DEFAULT, true);
|
||||||
|
switch (updater.getResult()) {
|
||||||
|
case SUCCESS:
|
||||||
|
sendConsoleSenderMessage(C.PREFIX.s() + "&cUpdate " + updater.getLatestName() + " installed successfully. Restart the server to load it.");
|
||||||
|
break;
|
||||||
|
case FAIL_DOWNLOAD:
|
||||||
|
sendConsoleSenderMessage(C.PREFIX.s() + "&cUpdate could not be installed.");
|
||||||
|
break;
|
||||||
|
case UPDATE_AVAILABLE:
|
||||||
|
sendConsoleSenderMessage(C.PREFIX.s() + ChatColor.GREEN + "There is an available update.");
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
sendConsoleSenderMessage(C.PREFIX.s() + ChatColor.GREEN + "You're using the latest update.");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (Settings.DB.USE_MYSQL) {
|
||||||
|
try {
|
||||||
|
mySQL = new MySQL(this, Settings.DB.HOST_NAME, Settings.DB.PORT,
|
||||||
|
Settings.DB.DATABASE, Settings.DB.USER,
|
||||||
|
Settings.DB.PASSWORD);
|
||||||
|
connection = mySQL.openConnection();
|
||||||
|
{
|
||||||
|
DatabaseMetaData meta = connection.getMetaData();
|
||||||
|
ResultSet res = meta.getTables(null, null, "plot", null);
|
||||||
|
if(!res.next())
|
||||||
|
DBFunc.createTables();
|
||||||
|
}
|
||||||
|
} catch (ClassNotFoundException | SQLException e) {
|
||||||
|
Logger.add(LogLevel.DANGER, "MySQL connection failed.");
|
||||||
|
System.out.print("\u001B[31m[Plots] MySQL is not setup correctly. The plugin will disable itself.\u001B[0m");
|
||||||
|
System.out.print("\u001B[36m==== Here is an ugly stacktrace if you are interested in those things ====\u001B[0m");
|
||||||
|
e.printStackTrace();
|
||||||
|
Bukkit.getPluginManager().disablePlugin(this);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
plots = DBFunc.getPlots();
|
||||||
|
|
||||||
|
} else if (Settings.DB.USE_MONGO) {
|
||||||
|
sendConsoleSenderMessage(C.PREFIX.s() + "MongoDB is not yet implemented");
|
||||||
|
} else {
|
||||||
|
Logger.add(LogLevel.DANGER, "No storage type is set.");
|
||||||
|
sendConsoleSenderMessage(C.PREFIX + "&cNo storage type is set!");
|
||||||
|
getServer().getPluginManager().disablePlugin(this);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (getServer().getPluginManager().getPlugin("PlotMe") != null ) {
|
||||||
|
try {
|
||||||
|
new PlotMeConverter(this).runAsync();
|
||||||
|
} catch(Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
getCommand("plots").setExecutor(new MainCommand());
|
||||||
|
getCommand("plots").setAliases(
|
||||||
|
new ArrayList<String>() {
|
||||||
|
{
|
||||||
|
add("p");
|
||||||
|
add("plotme");
|
||||||
|
add("plot");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
getServer().getPluginManager().registerEvents(new PlayerEvents(), this);
|
||||||
|
|
||||||
|
if (getServer().getPluginManager().getPlugin("CameraAPI") != null ){
|
||||||
|
cameraAPI = CameraAPI.getInstance();
|
||||||
|
Camera camera = new Camera();
|
||||||
|
MainCommand.subCommands.add(camera);
|
||||||
|
getServer().getPluginManager().registerEvents(camera, this);
|
||||||
|
}
|
||||||
|
if (getServer().getPluginManager().getPlugin("BarAPI") != null) {
|
||||||
|
barAPI = (BarAPI) getServer().getPluginManager().getPlugin("BarAPI");
|
||||||
|
}
|
||||||
|
if (getServer().getPluginManager().getPlugin("WorldEdit") != null) {
|
||||||
|
worldEdit = (WorldEditPlugin) getServer().getPluginManager()
|
||||||
|
.getPlugin("WorldEdit");
|
||||||
|
getServer().getPluginManager().registerEvents(
|
||||||
|
new WorldEditListener(), this);
|
||||||
|
}
|
||||||
|
checkExpired(PlotMain.getMain(), true);
|
||||||
|
checkForExpiredPlots();
|
||||||
|
|
||||||
|
getServer().getScheduler().scheduleSyncRepeatingTask(this, new Lag(),
|
||||||
|
100L, 1L);
|
||||||
|
if(Web.ENABLED) {
|
||||||
|
try {
|
||||||
|
PlotWeb web = new PlotWeb("PlotWeb", Web.PORT);
|
||||||
|
web.start();
|
||||||
|
sendConsoleSenderMessage("Web Server running on port " + Web.PORT);
|
||||||
|
} catch(Exception e) {
|
||||||
|
sendConsoleSenderMessage("Failed to start web server.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get MySQL Connection
|
||||||
|
*
|
||||||
|
* @return connection MySQL Connection.
|
||||||
|
*/
|
||||||
|
@SuppressWarnings("unused")
|
||||||
|
public static Connection getConnection() {
|
||||||
|
return connection;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** .. */
|
||||||
|
|
||||||
|
//Old Stuff
|
||||||
|
/*private static boolean checkForUpdate() throws IOException {
|
||||||
|
URL call = new URL(Settings.Update.VERSION_URL);
|
||||||
|
InputStream stream = call.openStream();
|
||||||
|
BufferedReader reader = new BufferedReader(new InputStreamReader(stream));
|
||||||
|
String latest = reader.readLine();
|
||||||
|
reader.close();
|
||||||
|
return !getPlotMain().getDescription().getVersion().equalsIgnoreCase(latest);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static String getNextUpdateString() throws IOException {
|
||||||
|
URL call = new URL(Settings.Update.VERSION_URL);
|
||||||
|
InputStream stream = call.openStream();
|
||||||
|
BufferedReader reader = new BufferedReader(new InputStreamReader(stream));
|
||||||
|
return reader.readLine();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void update() throws IOException {
|
||||||
|
sendConsoleSenderMessage(C.PREFIX.s() + "&c&lThere is an update! New Update: &6&l" + getNextUpdateString() + "&c&l, Current Update: &6&l" + getPlotMain().getDescription().getVersion());
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Send a message to the console.
|
||||||
|
*
|
||||||
|
* @param string message
|
||||||
|
*/
|
||||||
|
public static void sendConsoleSenderMessage(String string) {
|
||||||
|
getMain().getServer().getConsoleSender().sendMessage(ChatColor.translateAlternateColorCodes('&', string));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean teleportPlayer(Player player, Location from, Plot plot) {
|
||||||
|
PlayerTeleportToPlotEvent event = new PlayerTeleportToPlotEvent(player, from, plot);
|
||||||
|
Bukkit.getServer().getPluginManager().callEvent(event);
|
||||||
|
if(!event.isCancelled()) {
|
||||||
|
Location location = PlotHelper.getPlotHome(Bukkit.getWorld(plot.world), plot);
|
||||||
|
if(location.getBlockX() >= 29999999 || location.getBlockX() <= -29999999 ||
|
||||||
|
location.getBlockZ() >= 299999999 ||location.getBlockZ() <= -29999999) {
|
||||||
|
event.setCancelled(true);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
player.teleport(location);
|
||||||
|
PlayerFunctions.sendMessage(player, C.TELEPORTED_TO_PLOT);
|
||||||
|
}
|
||||||
|
return event.isCancelled();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Send a message to the console
|
||||||
|
*
|
||||||
|
* @param c message
|
||||||
|
*/
|
||||||
|
@SuppressWarnings("unused")
|
||||||
|
public static void sendConsoleSenderMessage(C c) {
|
||||||
|
sendConsoleSenderMessage(c.s());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Broadcast publicly
|
||||||
|
*
|
||||||
|
* @param c message
|
||||||
|
*/
|
||||||
|
public static void Broadcast(C c) {
|
||||||
|
Bukkit.broadcastMessage(ChatColor.translateAlternateColorCodes('&',
|
||||||
|
C.PREFIX.s() + c.s()));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the main class.
|
||||||
|
*
|
||||||
|
* @return (this class)
|
||||||
|
*/
|
||||||
|
public static PlotMain getMain() {
|
||||||
|
return JavaPlugin.getPlugin(PlotMain.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Broadcast a message to all admins
|
||||||
|
*
|
||||||
|
* @param c message
|
||||||
|
*/
|
||||||
|
public static void BroadcastWithPerms(C c) {
|
||||||
|
for (Player player : Bukkit.getOnlinePlayers()) {
|
||||||
|
if (player.hasPermission("plots.admin"))
|
||||||
|
PlayerFunctions.sendMessage(player, c);
|
||||||
|
}
|
||||||
|
System.out.println(ChatColor.stripColor(ChatColor
|
||||||
|
.translateAlternateColorCodes('&', C.PREFIX.s() + c.s())));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static void reloadTranslations() throws IOException {
|
||||||
|
translations = YamlConfiguration.loadConfiguration(translationsFile);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Load configuration files
|
||||||
|
*/
|
||||||
|
@SuppressWarnings("deprecation")
|
||||||
|
public static void configs() {
|
||||||
|
File folder = new File(getMain().getDataFolder() + File.separator + "config");
|
||||||
|
if (!folder.exists() && !folder.mkdirs()) {
|
||||||
|
sendConsoleSenderMessage(C.PREFIX.s() + "&cFailed to create the /plugins/config folder. Please create it manually.");
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
configFile = new File(getMain().getDataFolder() + File.separator + "config" + File.separator +"settings.yml");
|
||||||
|
if (!configFile.exists()) {
|
||||||
|
configFile.createNewFile();
|
||||||
|
}
|
||||||
|
config = YamlConfiguration.loadConfiguration(configFile);
|
||||||
|
setupConfig();
|
||||||
|
}
|
||||||
|
catch (Exception err_trans) {
|
||||||
|
Logger.add(LogLevel.DANGER, "Failed to save settings.yml");
|
||||||
|
System.out.println("Failed to save settings.yml");
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
storageFile = new File(getMain().getDataFolder() + File.separator + "config" + File.separator +"storage.yml");
|
||||||
|
if (!storageFile.exists()) {
|
||||||
|
storageFile.createNewFile();
|
||||||
|
}
|
||||||
|
storage = YamlConfiguration.loadConfiguration(storageFile);
|
||||||
|
setupStorage();
|
||||||
|
}
|
||||||
|
catch (Exception err_trans) {
|
||||||
|
Logger.add(LogLevel.DANGER, "Failed to save storage.yml");
|
||||||
|
System.out.println("Failed to save storage.yml");
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
translationsFile = new File(getMain().getDataFolder() + File.separator + "config" + File.separator +"translations.yml");
|
||||||
|
if (!translationsFile.exists()) {
|
||||||
|
translationsFile.createNewFile();
|
||||||
|
}
|
||||||
|
translations = YamlConfiguration.loadConfiguration(translationsFile);
|
||||||
|
setupTranslations();
|
||||||
|
}
|
||||||
|
catch (Exception err_trans) {
|
||||||
|
Logger.add(LogLevel.DANGER, "Failed to save translations.yml");
|
||||||
|
System.out.println("Failed to save translations.yml");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
try {
|
||||||
|
config.save(configFile);
|
||||||
|
storage.save(storageFile);
|
||||||
|
translations.save(translationsFile);
|
||||||
|
} catch (IOException e) {
|
||||||
|
Logger.add(LogLevel.DANGER, "Configuration file saving failed");
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
{
|
||||||
|
Settings.DB.USE_MYSQL = true;
|
||||||
|
Settings.DB.USER = storage.getString("mysql_user");
|
||||||
|
Settings.DB.PASSWORD = storage.getString("mysql_password");
|
||||||
|
Settings.DB.HOST_NAME = storage.getString("mysql_host");
|
||||||
|
Settings.DB.PORT = storage.getString("mysql_port");
|
||||||
|
Settings.DB.DATABASE = storage.getString("mysql_database");
|
||||||
|
}
|
||||||
|
{
|
||||||
|
Settings.Update.AUTO_UPDATE = config.getBoolean("auto_update");
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//Web
|
||||||
|
Web.ENABLED = config.getBoolean("web.enabled");
|
||||||
|
Web.PORT = config.getInt("web.port");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Kill all entities on roads
|
||||||
|
*/
|
||||||
|
@SuppressWarnings("deprecation")
|
||||||
|
public static void killAllEntities() {
|
||||||
|
Bukkit.getScheduler().scheduleAsyncRepeatingTask(getMain(),
|
||||||
|
new Runnable() {
|
||||||
|
World world;
|
||||||
|
Location location;
|
||||||
|
long ticked = 0l;
|
||||||
|
long error = 0l;
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
for (World w: getPlotWorlds()) {
|
||||||
|
World world = w;
|
||||||
|
try {
|
||||||
|
if(world.getLoadedChunks().length < 1) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
for (Chunk chunk : world.getLoadedChunks()) {
|
||||||
|
for (Entity entity : chunk.getEntities()){
|
||||||
|
if (entity.getType() == EntityType.PLAYER)
|
||||||
|
continue;
|
||||||
|
location = entity.getLocation();
|
||||||
|
if (!PlayerEvents.isInPlot(location))
|
||||||
|
entity.remove();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
++error;
|
||||||
|
}
|
||||||
|
finally {
|
||||||
|
++ticked;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}, 0l, 2l);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* SETUP: settings.properties
|
||||||
|
*/
|
||||||
|
private static void setupConfig() {
|
||||||
|
config.set("version", config_ver);
|
||||||
|
Map<String, Object> options = new HashMap<String, Object>();
|
||||||
|
options.put("auto_update", false);
|
||||||
|
options.put("kill_road_mobs", Settings.KILL_ROAD_MOBS_DEFAULT);
|
||||||
|
options.put("web.enabled", Web.ENABLED);
|
||||||
|
options.put("web.port", Web.PORT);
|
||||||
|
for (Entry<String, Object> node : options.entrySet()) {
|
||||||
|
if (!config.contains(node.getKey())) {
|
||||||
|
config.set(node.getKey(), node.getValue());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (String node:config.getConfigurationSection("worlds").getKeys(false)) {
|
||||||
|
World world = Bukkit.getWorld(node);
|
||||||
|
if (world==null) {
|
||||||
|
Logger.add(LogLevel.WARNING, "World '"+node+"' in settings.yml does not exist (case sensitive)");
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
ChunkGenerator gen = world.getGenerator();
|
||||||
|
if (gen==null || gen.toString().equals("PlotSquared")) {
|
||||||
|
Logger.add(LogLevel.WARNING, "World '"+node+"' in settings.yml is not using PlotSquared generator");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* SETUP: storage.properties
|
||||||
|
*/
|
||||||
|
private static void setupStorage() {
|
||||||
|
storage.set("version", storage_ver);
|
||||||
|
Map<String, Object> options = new HashMap<String, Object>();
|
||||||
|
options.put("mysql_host", "localhost");
|
||||||
|
options.put("mysql_port", "3306");
|
||||||
|
options.put("mysql_user", "root");
|
||||||
|
options.put("mysql_password", "password");
|
||||||
|
options.put("mysql_database", "plot_db");
|
||||||
|
for (Entry<String, Object> node : options.entrySet()) {
|
||||||
|
if (!storage.contains(node.getKey())) {
|
||||||
|
storage.set(node.getKey(), node.getValue());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* SETUP: translations.properties
|
||||||
|
*/
|
||||||
|
public static void setupTranslations() {
|
||||||
|
translations.set("version", translations_ver);
|
||||||
|
for (C c : C.values()) {
|
||||||
|
if (!translations.contains(c.toString())) {
|
||||||
|
translations.set(c.toString(), c.s());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* On unload
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void onDisable() {
|
||||||
|
Logger.add(LogLevel.GENERAL, "Logger disabled");
|
||||||
|
try {
|
||||||
|
Logger.write();
|
||||||
|
} catch (IOException e1) {
|
||||||
|
e1.printStackTrace();
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
connection.close();
|
||||||
|
mySQL.closeConnection();
|
||||||
|
}
|
||||||
|
catch (NullPointerException | SQLException e) {
|
||||||
|
if (connection!=null) {
|
||||||
|
Logger.add(LogLevel.DANGER, "Could not close mysql connection");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(PlotWeb.PLOTWEB != null) {
|
||||||
|
try {
|
||||||
|
PlotWeb.PLOTWEB.stop();
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public static void addPlotWorld(String world,PlotWorld plotworld) {
|
||||||
|
PlotMain.worlds.put(world,plotworld);
|
||||||
|
if(!plots.containsKey(world))
|
||||||
|
plots.put(world, new HashMap<PlotId, Plot>());
|
||||||
|
}
|
||||||
|
}
|
127
src/com/intellectualcrafters/plot/PlotSettings.java
Normal file
127
src/com/intellectualcrafters/plot/PlotSettings.java
Normal file
@ -0,0 +1,127 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) IntellectualCrafters - 2014.
|
||||||
|
* You are not allowed to distribute and/or monetize any of our intellectual property.
|
||||||
|
* IntellectualCrafters is not affiliated with Mojang AB. Minecraft is a trademark of Mojang AB.
|
||||||
|
*
|
||||||
|
* >> File = PlotSettings.java
|
||||||
|
* >> Generated by: Citymonstret at 2014-08-09 01:44
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.intellectualcrafters.plot;
|
||||||
|
|
||||||
|
import org.bukkit.block.Biome;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* plot settings
|
||||||
|
* @author Citymonstret
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class PlotSettings {
|
||||||
|
|
||||||
|
private String alias;
|
||||||
|
/**
|
||||||
|
* plot object
|
||||||
|
*/
|
||||||
|
@SuppressWarnings("unused")
|
||||||
|
private Plot plot;
|
||||||
|
/**
|
||||||
|
* plot biome
|
||||||
|
*/
|
||||||
|
private Biome biome;
|
||||||
|
/**
|
||||||
|
* plot rain
|
||||||
|
*/
|
||||||
|
private boolean rain;
|
||||||
|
/**
|
||||||
|
* plot time
|
||||||
|
*/
|
||||||
|
private Long time;
|
||||||
|
/**
|
||||||
|
* Change time?
|
||||||
|
*/
|
||||||
|
private boolean changeTime;
|
||||||
|
private PlotHomePosition position;
|
||||||
|
/**
|
||||||
|
* Constructor
|
||||||
|
* @param plot
|
||||||
|
*/
|
||||||
|
public PlotSettings(Plot plot) {
|
||||||
|
this.plot = plot;
|
||||||
|
this.alias = "";
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param b
|
||||||
|
*/
|
||||||
|
public void setBiome(Biome b) {
|
||||||
|
this.biome = b;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param b
|
||||||
|
*/
|
||||||
|
public void setTimeChange(boolean b) {
|
||||||
|
this.changeTime = b;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param l
|
||||||
|
*/
|
||||||
|
public void setTime(long l) {
|
||||||
|
this.time = l;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
* @deprecated
|
||||||
|
*/
|
||||||
|
public Biome getBiome() {
|
||||||
|
return this.biome;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public boolean getRain() {
|
||||||
|
return this.rain;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setRain(boolean b) {
|
||||||
|
this.rain = b;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public long getTime() {
|
||||||
|
return this.time;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public boolean getChangeTime() {
|
||||||
|
return this.changeTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public void setAlias(String alias) {
|
||||||
|
this.alias = alias;
|
||||||
|
}
|
||||||
|
|
||||||
|
public PlotHomePosition getPosition() { return this.position; }
|
||||||
|
public void setPosition(PlotHomePosition position) { this.position = position; }
|
||||||
|
public String getAlias() { return this.alias; }
|
||||||
|
public String getJoinMessage() { return ""; }
|
||||||
|
|
||||||
|
public String getLeaveMessage() { return ""; }
|
||||||
|
}
|
163
src/com/intellectualcrafters/plot/PlotWorld.java
Normal file
163
src/com/intellectualcrafters/plot/PlotWorld.java
Normal file
@ -0,0 +1,163 @@
|
|||||||
|
package com.intellectualcrafters.plot;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
import org.bukkit.Material;
|
||||||
|
|
||||||
|
public class PlotWorld {
|
||||||
|
/**
|
||||||
|
* Road Height
|
||||||
|
*/
|
||||||
|
public int ROAD_HEIGHT;
|
||||||
|
/**
|
||||||
|
* Default Road Height: 64
|
||||||
|
*/
|
||||||
|
public static int ROAD_HEIGHT_DEFAULT = 64;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* plot height
|
||||||
|
*/
|
||||||
|
public int PLOT_HEIGHT;
|
||||||
|
/**
|
||||||
|
* Default plot height: 64
|
||||||
|
*/
|
||||||
|
public static int PLOT_HEIGHT_DEFAULT = 64;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Wall height
|
||||||
|
*/
|
||||||
|
public int WALL_HEIGHT;
|
||||||
|
/**
|
||||||
|
* Default Wall Height: 64
|
||||||
|
*/
|
||||||
|
public static int WALL_HEIGHT_DEFAULT = 64;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* plot width
|
||||||
|
*/
|
||||||
|
public int PLOT_WIDTH;
|
||||||
|
/**
|
||||||
|
* Default plot width: 32
|
||||||
|
*/
|
||||||
|
public static int PLOT_WIDTH_DEFAULT = 32;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Road width
|
||||||
|
*/
|
||||||
|
public int ROAD_WIDTH;
|
||||||
|
/**
|
||||||
|
* Default road width: 7
|
||||||
|
*/
|
||||||
|
public static int ROAD_WIDTH_DEFAULT = 7;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Plot biome
|
||||||
|
*/
|
||||||
|
public String PLOT_BIOME;
|
||||||
|
/**
|
||||||
|
* Default biome = FOREST
|
||||||
|
*/
|
||||||
|
public static String PLOT_BIOME_DEFAULT = "FOREST";
|
||||||
|
/**
|
||||||
|
* PlotMain block
|
||||||
|
*/
|
||||||
|
public String[] MAIN_BLOCK;
|
||||||
|
/**
|
||||||
|
* Default main block: 1
|
||||||
|
*/
|
||||||
|
public static String[] MAIN_BLOCK_DEFAULT = new String[] {"1:0"};
|
||||||
|
/**
|
||||||
|
* Top blocks
|
||||||
|
*/
|
||||||
|
public String[] TOP_BLOCK;
|
||||||
|
/**
|
||||||
|
* Default top blocks: {"2"}
|
||||||
|
*/
|
||||||
|
public static String[] TOP_BLOCK_DEFAULT = new String[] {"2:0"};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Wall block
|
||||||
|
*/
|
||||||
|
public String WALL_BLOCK;
|
||||||
|
/**
|
||||||
|
* Default wall block: 44
|
||||||
|
*/
|
||||||
|
public static String WALL_BLOCK_DEFAULT = "44:0";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Wall filling
|
||||||
|
*/
|
||||||
|
public String WALL_FILLING;
|
||||||
|
/**
|
||||||
|
* Default wall filling: 1
|
||||||
|
*/
|
||||||
|
public static String WALL_FILLING_DEFAULT = "1:0";
|
||||||
|
|
||||||
|
// /**
|
||||||
|
// * Road stripes
|
||||||
|
// */
|
||||||
|
// public int ROAD_STRIPES;
|
||||||
|
// /**
|
||||||
|
// * Default road stripes: 35
|
||||||
|
// */
|
||||||
|
// public static int ROAD_STRIPES_DEFAULT = 35;
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * Road stripes data value (byte)
|
||||||
|
// */
|
||||||
|
// public int ROAD_STRIPES_DATA;
|
||||||
|
// /**
|
||||||
|
// * Default road stripes data value: (byte) 0
|
||||||
|
// */
|
||||||
|
// public static int ROAD_STRIPES_DATA_DEFAULT = 0;
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * Wall block data value (byte)
|
||||||
|
// */
|
||||||
|
// public int WALL_BLOCK_DATA;
|
||||||
|
// /**
|
||||||
|
// * Default wall block data value: (byte) 0
|
||||||
|
// */
|
||||||
|
// public static int WALL_BLOCK_DATA_DEFAULT = 0;
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * Wall filling data value (byte)
|
||||||
|
// */
|
||||||
|
// public int WALL_FILLING_DATA;
|
||||||
|
// /**
|
||||||
|
// * Default wall filling data value: (byte) 0
|
||||||
|
// */
|
||||||
|
// public static int WALL_FILLING_DATA_DEFAULT = 0;
|
||||||
|
/**
|
||||||
|
* Road block
|
||||||
|
*/
|
||||||
|
public String ROAD_BLOCK;
|
||||||
|
/**
|
||||||
|
* Default road block: 155
|
||||||
|
*/
|
||||||
|
public static String ROAD_BLOCK_DEFAULT = "155:0";
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * Road block data value (byte)
|
||||||
|
// */
|
||||||
|
// public int ROAD_BLOCK_DATA;
|
||||||
|
// /**
|
||||||
|
// * Default road block data value: (byte) 0
|
||||||
|
// */
|
||||||
|
// public static int ROAD_BLOCK_DATA_DEFAULT = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* plot chat?
|
||||||
|
*/
|
||||||
|
public boolean PLOT_CHAT;
|
||||||
|
/**
|
||||||
|
* Default plot chat: true
|
||||||
|
*/
|
||||||
|
public static boolean PLOT_CHAT_DEFAULT = false;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Blocks available in /p set
|
||||||
|
*/
|
||||||
|
public static ArrayList<Material> BLOCKS = new ArrayList<Material>();
|
||||||
|
|
||||||
|
}
|
114
src/com/intellectualcrafters/plot/RUtils.java
Normal file
114
src/com/intellectualcrafters/plot/RUtils.java
Normal file
@ -0,0 +1,114 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) IntellectualCrafters - 2014.
|
||||||
|
* You are not allowed to distribute and/or monetize any of our intellectual property.
|
||||||
|
* IntellectualCrafters is not affiliated with Mojang AB. Minecraft is a trademark of Mojang AB.
|
||||||
|
*
|
||||||
|
* >> File = RUtils.java
|
||||||
|
* >> Generated by: Citymonstret at 2014-08-09 01:44
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.intellectualcrafters.plot;
|
||||||
|
|
||||||
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Random utilities
|
||||||
|
* @author Citymonstret
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class RUtils {
|
||||||
|
|
||||||
|
public static long getTotalRam() {
|
||||||
|
return (Runtime.getRuntime().maxMemory() / 1024) / 1024;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static long getFreeRam() {
|
||||||
|
return (Runtime.getRuntime().freeMemory() / 1024) / 1024;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static long getRamPercentage() {
|
||||||
|
return (getFreeRam() / getTotalRam()) * 100;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String formatTime(double sec) {
|
||||||
|
double h = sec / 3600;
|
||||||
|
double m = (sec % 3600) / 60;
|
||||||
|
double s = sec % 60;
|
||||||
|
String string = C.TIME_FORMAT.s();
|
||||||
|
|
||||||
|
@SuppressWarnings("unused")
|
||||||
|
//String s_d = (int) d + " " + (d != 1 ? "days" : "day");
|
||||||
|
String s_h = (int) h + " " + ((int) h != 1 ? "hours" : "hour");
|
||||||
|
String s_m = (int) m + " " + ((int) m != 1 ? "minutes" : "minute");
|
||||||
|
String s_s = (int) s + " " + ((int) s != 1 ? "seconds" : "second");
|
||||||
|
return string.replaceAll("%sec%", s_s).replaceAll("%min%", s_m).replaceAll("%hours%", s_h);
|
||||||
|
}
|
||||||
|
|
||||||
|
enum Direction {
|
||||||
|
SOUTH(0),
|
||||||
|
EAST(1),
|
||||||
|
NORTH(2),
|
||||||
|
WEST(3)
|
||||||
|
;
|
||||||
|
private int i;
|
||||||
|
Direction(int i) {
|
||||||
|
this.i = i;
|
||||||
|
}
|
||||||
|
public int getInt() {
|
||||||
|
return this.i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void forceTexture(Player p) {
|
||||||
|
p.setResourcePack(Settings.PLOT_SPECIFIC_RESOURCE_PACK);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Direction getDirection(Location l) {
|
||||||
|
double d = (l.getYaw() * 4.0F / 360.0F) + 0.5D;
|
||||||
|
int i = (int) d;
|
||||||
|
int x = d < i ? i - 1 : i;
|
||||||
|
|
||||||
|
float yaw;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
switch(x) {
|
||||||
|
case 0:
|
||||||
|
return Direction.SOUTH;
|
||||||
|
case 1:
|
||||||
|
return Direction.EAST;
|
||||||
|
case 2:
|
||||||
|
return Direction.NORTH;
|
||||||
|
case 3:
|
||||||
|
return Direction.WEST;
|
||||||
|
default:
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean compareDirections(Location l1, Location l2) {
|
||||||
|
return getDirection(l1) == getDirection(l2);
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean AND(boolean b1, boolean b2) {
|
||||||
|
return b1 && b2;
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean OR(boolean b1, boolean b2) {
|
||||||
|
return b1 || b2;
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean XOR(boolean b1, boolean b2) {
|
||||||
|
return b1 ^ b2;
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean NAND(boolean b1, boolean b2) {
|
||||||
|
return !b1 && !b2;
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean NOR(boolean b1, boolean b2) {
|
||||||
|
return !b1 || !b2;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
483
src/com/intellectualcrafters/plot/ReflectionUtils.java
Normal file
483
src/com/intellectualcrafters/plot/ReflectionUtils.java
Normal file
@ -0,0 +1,483 @@
|
|||||||
|
package com.intellectualcrafters.plot;
|
||||||
|
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.Server;
|
||||||
|
|
||||||
|
import java.lang.reflect.Constructor;
|
||||||
|
import java.lang.reflect.Field;
|
||||||
|
import java.lang.reflect.Method;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author DPOH-VAR
|
||||||
|
* @version 1.0
|
||||||
|
*/
|
||||||
|
@SuppressWarnings({ "UnusedDeclaration", "rawtypes" })
|
||||||
|
public class ReflectionUtils {
|
||||||
|
|
||||||
|
/** prefix of bukkit classes */
|
||||||
|
private static String preClassB = "org.bukkit.craftbukkit";
|
||||||
|
/** prefix of minecraft classes */
|
||||||
|
private static String preClassM = "net.minecraft.server";
|
||||||
|
/** boolean value, TRUE if server uses forge or MCPC+ */
|
||||||
|
private static boolean forge = false;
|
||||||
|
|
||||||
|
/** check server version and class names */
|
||||||
|
static {
|
||||||
|
if(Bukkit.getServer()!=null) {
|
||||||
|
if(Bukkit.getVersion().contains("MCPC")||Bukkit.getVersion().contains("Forge")) forge = true;
|
||||||
|
Server server = Bukkit.getServer();
|
||||||
|
Class<?> bukkitServerClass = server.getClass();
|
||||||
|
String[] pas = bukkitServerClass.getName().split("\\.");
|
||||||
|
if (pas.length == 5) {
|
||||||
|
String verB = pas[3];
|
||||||
|
preClassB += "."+verB;
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
Method getHandle = bukkitServerClass.getDeclaredMethod("getHandle");
|
||||||
|
Object handle = getHandle.invoke(server);
|
||||||
|
Class handleServerClass = handle.getClass();
|
||||||
|
pas = handleServerClass.getName().split("\\.");
|
||||||
|
if (pas.length == 5) {
|
||||||
|
String verM = pas[3];
|
||||||
|
preClassM += "."+verM;
|
||||||
|
}
|
||||||
|
} catch (Exception ignored) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return true if server has forge classes
|
||||||
|
*/
|
||||||
|
public static boolean isForge(){
|
||||||
|
return forge;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get class for name.
|
||||||
|
* Replace {nms} to net.minecraft.server.V*.
|
||||||
|
* Replace {cb} to org.bukkit.craftbukkit.V*.
|
||||||
|
* Replace {nm} to net.minecraft
|
||||||
|
* @param classes possible class paths
|
||||||
|
* @return RefClass object
|
||||||
|
* @throws RuntimeException if no class found
|
||||||
|
*/
|
||||||
|
public static RefClass getRefClass(String... classes){
|
||||||
|
for (String className: classes) try {
|
||||||
|
className = className
|
||||||
|
.replace("{cb}", preClassB)
|
||||||
|
.replace("{nms}", preClassM)
|
||||||
|
.replace("{nm}", "net.minecraft");
|
||||||
|
return getRefClass(Class.forName(className));
|
||||||
|
} catch (ClassNotFoundException ignored) {
|
||||||
|
}
|
||||||
|
throw new RuntimeException("no class found");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* get RefClass object by real class
|
||||||
|
* @param clazz class
|
||||||
|
* @return RefClass based on passed class
|
||||||
|
*/
|
||||||
|
public static RefClass getRefClass(Class clazz) {
|
||||||
|
return new RefClass(clazz);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* RefClass - utility to simplify work with reflections.
|
||||||
|
*/
|
||||||
|
public static class RefClass {
|
||||||
|
private final Class<?> clazz;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* get passed class
|
||||||
|
* @return class
|
||||||
|
*/
|
||||||
|
public Class<?> getRealClass() {
|
||||||
|
return clazz;
|
||||||
|
}
|
||||||
|
private RefClass(Class<?> clazz) {
|
||||||
|
this.clazz = clazz;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* see {@link Class#isInstance(Object)}
|
||||||
|
* @param object the object to check
|
||||||
|
* @return true if object is an instance of this class
|
||||||
|
*/
|
||||||
|
public boolean isInstance(Object object){
|
||||||
|
return clazz.isInstance(object);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* get existing method by name and types
|
||||||
|
* @param name name
|
||||||
|
* @param types method parameters. can be Class or RefClass
|
||||||
|
* @return RefMethod object
|
||||||
|
* @throws RuntimeException if method not found
|
||||||
|
*/
|
||||||
|
public RefMethod getMethod(String name, Object... types) {
|
||||||
|
try {
|
||||||
|
Class[] classes = new Class[types.length];
|
||||||
|
int i=0; for (Object e: types) {
|
||||||
|
if (e instanceof Class) classes[i++] = (Class)e;
|
||||||
|
else if (e instanceof RefClass) classes[i++] = ((RefClass) e).getRealClass();
|
||||||
|
else classes[i++] = e.getClass();
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
return new RefMethod(clazz.getMethod(name, classes));
|
||||||
|
} catch (NoSuchMethodException ignored) {
|
||||||
|
return new RefMethod(clazz.getDeclaredMethod(name, classes));
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* get existing constructor by types
|
||||||
|
* @param types parameters. can be Class or RefClass
|
||||||
|
* @return RefMethod object
|
||||||
|
* @throws RuntimeException if constructor not found
|
||||||
|
*/
|
||||||
|
public RefConstructor getConstructor(Object... types) {
|
||||||
|
try {
|
||||||
|
Class[] classes = new Class[types.length];
|
||||||
|
int i=0; for (Object e: types) {
|
||||||
|
if (e instanceof Class) classes[i++] = (Class)e;
|
||||||
|
else if (e instanceof RefClass) classes[i++] = ((RefClass) e).getRealClass();
|
||||||
|
else classes[i++] = e.getClass();
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
return new RefConstructor(clazz.getConstructor(classes));
|
||||||
|
} catch (NoSuchMethodException ignored) {
|
||||||
|
return new RefConstructor(clazz.getDeclaredConstructor(classes));
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* find method by type parameters
|
||||||
|
* @param types parameters. can be Class or RefClass
|
||||||
|
* @return RefMethod object
|
||||||
|
* @throws RuntimeException if method not found
|
||||||
|
*/
|
||||||
|
public RefMethod findMethod(Object... types) {
|
||||||
|
Class[] classes = new Class[types.length];
|
||||||
|
int t=0; for (Object e: types) {
|
||||||
|
if (e instanceof Class) classes[t++] = (Class)e;
|
||||||
|
else if (e instanceof RefClass) classes[t++] = ((RefClass) e).getRealClass();
|
||||||
|
else classes[t++] = e.getClass();
|
||||||
|
}
|
||||||
|
List<Method> methods = new ArrayList<>();
|
||||||
|
Collections.addAll(methods, clazz.getMethods());
|
||||||
|
Collections.addAll(methods, clazz.getDeclaredMethods());
|
||||||
|
findMethod: for (Method m: methods) {
|
||||||
|
Class<?>[] methodTypes = m.getParameterTypes();
|
||||||
|
if (methodTypes.length != classes.length) continue;
|
||||||
|
for (int i=0; i<classes.length; i++) {
|
||||||
|
if (!classes.equals(methodTypes)) continue findMethod;
|
||||||
|
return new RefMethod(m);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
throw new RuntimeException("no such method");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* find method by name
|
||||||
|
* @param names possible names of method
|
||||||
|
* @return RefMethod object
|
||||||
|
* @throws RuntimeException if method not found
|
||||||
|
*/
|
||||||
|
public RefMethod findMethodByName(String... names) {
|
||||||
|
List<Method> methods = new ArrayList<>();
|
||||||
|
Collections.addAll(methods, clazz.getMethods());
|
||||||
|
Collections.addAll(methods, clazz.getDeclaredMethods());
|
||||||
|
for (Method m: methods) {
|
||||||
|
for (String name: names) {
|
||||||
|
if (m.getName().equals(name)) {
|
||||||
|
return new RefMethod(m);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
throw new RuntimeException("no such method");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* find method by return value
|
||||||
|
* @param type type of returned value
|
||||||
|
* @throws RuntimeException if method not found
|
||||||
|
* @return RefMethod
|
||||||
|
*/
|
||||||
|
public RefMethod findMethodByReturnType(RefClass type) {
|
||||||
|
return findMethodByReturnType(type.clazz);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* find method by return value
|
||||||
|
* @param type type of returned value
|
||||||
|
* @return RefMethod
|
||||||
|
* @throws RuntimeException if method not found
|
||||||
|
*/
|
||||||
|
public RefMethod findMethodByReturnType(Class type) {
|
||||||
|
if (type==null) type = void.class;
|
||||||
|
List<Method> methods = new ArrayList<>();
|
||||||
|
Collections.addAll(methods, clazz.getMethods());
|
||||||
|
Collections.addAll(methods, clazz.getDeclaredMethods());
|
||||||
|
for (Method m: methods) {
|
||||||
|
if (type.equals(m.getReturnType())) {
|
||||||
|
return new RefMethod(m);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
throw new RuntimeException("no such method");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* find constructor by number of arguments
|
||||||
|
* @param number number of arguments
|
||||||
|
* @return RefConstructor
|
||||||
|
* @throws RuntimeException if constructor not found
|
||||||
|
*/
|
||||||
|
public RefConstructor findConstructor(int number) {
|
||||||
|
List<Constructor> constructors = new ArrayList<>();
|
||||||
|
Collections.addAll(constructors, clazz.getConstructors());
|
||||||
|
Collections.addAll(constructors, clazz.getDeclaredConstructors());
|
||||||
|
for (Constructor m: constructors) {
|
||||||
|
if (m.getParameterTypes().length == number) return new RefConstructor(m);
|
||||||
|
}
|
||||||
|
throw new RuntimeException("no such constructor");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* get field by name
|
||||||
|
* @param name field name
|
||||||
|
* @return RefField
|
||||||
|
* @throws RuntimeException if field not found
|
||||||
|
*/
|
||||||
|
public RefField getField(String name) {
|
||||||
|
try {
|
||||||
|
try {
|
||||||
|
return new RefField(clazz.getField(name));
|
||||||
|
} catch (NoSuchFieldException ignored) {
|
||||||
|
return new RefField(clazz.getDeclaredField(name));
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* find field by type
|
||||||
|
* @param type field type
|
||||||
|
* @return RefField
|
||||||
|
* @throws RuntimeException if field not found
|
||||||
|
*/
|
||||||
|
public RefField findField(RefClass type) {
|
||||||
|
return findField(type.clazz);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* find field by type
|
||||||
|
* @param type field type
|
||||||
|
* @return RefField
|
||||||
|
* @throws RuntimeException if field not found
|
||||||
|
*/
|
||||||
|
public RefField findField(Class type) {
|
||||||
|
if (type==null) type = void.class;
|
||||||
|
List<Field> fields = new ArrayList<>();
|
||||||
|
Collections.addAll(fields, clazz.getFields());
|
||||||
|
Collections.addAll(fields, clazz.getDeclaredFields());
|
||||||
|
for (Field f: fields) {
|
||||||
|
if (type.equals(f.getType())) {
|
||||||
|
return new RefField(f);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
throw new RuntimeException("no such field");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Method wrapper
|
||||||
|
*/
|
||||||
|
public static class RefMethod {
|
||||||
|
private final Method method;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return passed method
|
||||||
|
*/
|
||||||
|
public Method getRealMethod(){
|
||||||
|
return method;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* @return owner class of method
|
||||||
|
*/
|
||||||
|
public RefClass getRefClass(){
|
||||||
|
return new RefClass(method.getDeclaringClass());
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* @return class of method return type
|
||||||
|
*/
|
||||||
|
public RefClass getReturnRefClass(){
|
||||||
|
return new RefClass(method.getReturnType());
|
||||||
|
}
|
||||||
|
private RefMethod (Method method) {
|
||||||
|
this.method = method;
|
||||||
|
method.setAccessible(true);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* apply method to object
|
||||||
|
* @param e object to which the method is applied
|
||||||
|
* @return RefExecutor with method call(...)
|
||||||
|
*/
|
||||||
|
public RefExecutor of(Object e) {
|
||||||
|
return new RefExecutor(e);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* call static method
|
||||||
|
* @param params sent parameters
|
||||||
|
* @return return value
|
||||||
|
*/
|
||||||
|
public Object call(Object... params) {
|
||||||
|
try{
|
||||||
|
return method.invoke(null,params);
|
||||||
|
} catch (Exception e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public class RefExecutor {
|
||||||
|
Object e;
|
||||||
|
public RefExecutor(Object e) {
|
||||||
|
this.e = e;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* apply method for selected object
|
||||||
|
* @param params sent parameters
|
||||||
|
* @return return value
|
||||||
|
* @throws RuntimeException if something went wrong
|
||||||
|
*/
|
||||||
|
public Object call(Object... params) {
|
||||||
|
try{
|
||||||
|
return method.invoke(e,params);
|
||||||
|
} catch (Exception e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor wrapper
|
||||||
|
*/
|
||||||
|
public static class RefConstructor {
|
||||||
|
private final Constructor constructor;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return passed constructor
|
||||||
|
*/
|
||||||
|
public Constructor getRealConstructor(){
|
||||||
|
return constructor;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return owner class of method
|
||||||
|
*/
|
||||||
|
public RefClass getRefClass(){
|
||||||
|
return new RefClass(constructor.getDeclaringClass());
|
||||||
|
}
|
||||||
|
private RefConstructor (Constructor constructor) {
|
||||||
|
this.constructor = constructor;
|
||||||
|
constructor.setAccessible(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* create new instance with constructor
|
||||||
|
* @param params parameters for constructor
|
||||||
|
* @return new object
|
||||||
|
* @throws RuntimeException if something went wrong
|
||||||
|
*/
|
||||||
|
public Object create(Object... params) {
|
||||||
|
try{
|
||||||
|
return constructor.newInstance(params);
|
||||||
|
} catch (Exception e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class RefField {
|
||||||
|
private Field field;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return passed field
|
||||||
|
*/
|
||||||
|
public Field getRealField(){
|
||||||
|
return field;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return owner class of field
|
||||||
|
*/
|
||||||
|
public RefClass getRefClass(){
|
||||||
|
return new RefClass(field.getDeclaringClass());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return type of field
|
||||||
|
*/
|
||||||
|
public RefClass getFieldRefClass(){
|
||||||
|
return new RefClass(field.getType());
|
||||||
|
}
|
||||||
|
private RefField (Field field) {
|
||||||
|
this.field = field;
|
||||||
|
field.setAccessible(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* apply fiend for object
|
||||||
|
* @param e applied object
|
||||||
|
* @return RefExecutor with getter and setter
|
||||||
|
*/
|
||||||
|
public RefExecutor of(Object e) {
|
||||||
|
return new RefExecutor(e);
|
||||||
|
}
|
||||||
|
public class RefExecutor {
|
||||||
|
Object e;
|
||||||
|
public RefExecutor(Object e) {
|
||||||
|
this.e = e;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* set field value for applied object
|
||||||
|
* @param param value
|
||||||
|
*/
|
||||||
|
public void set(Object param) {
|
||||||
|
try{
|
||||||
|
field.set(e,param);
|
||||||
|
} catch (Exception e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* get field value for applied object
|
||||||
|
* @return value of field
|
||||||
|
*/
|
||||||
|
public Object get() {
|
||||||
|
try{
|
||||||
|
return field.get(e);
|
||||||
|
} catch (Exception e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
165
src/com/intellectualcrafters/plot/SchematicHandler.java
Normal file
165
src/com/intellectualcrafters/plot/SchematicHandler.java
Normal file
@ -0,0 +1,165 @@
|
|||||||
|
package com.intellectualcrafters.plot;
|
||||||
|
|
||||||
|
import com.sk89q.jnbt.*;
|
||||||
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.World;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileInputStream;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.zip.GZIPInputStream;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by Citymonstret on 2014-09-15.
|
||||||
|
*/
|
||||||
|
public class SchematicHandler {
|
||||||
|
|
||||||
|
@SuppressWarnings("deprecation")
|
||||||
|
public boolean paste(Location location, Schematic schematic) {
|
||||||
|
if(schematic == null) {
|
||||||
|
PlotMain.sendConsoleSenderMessage("Schematic == null :|");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
Dimension dimension = schematic.getSchematicDimension();
|
||||||
|
DataCollection[] collection = schematic.getBlockCollection();
|
||||||
|
World world = location.getWorld();
|
||||||
|
|
||||||
|
for(int x = 0; x < dimension.getX(); x++) {
|
||||||
|
for(int y = 0; y < dimension.getY(); y++) {
|
||||||
|
for(int z = 0; z < dimension.getZ(); z++) {
|
||||||
|
DataCollection current = collection[getCurrent(x, y, z, dimension)];
|
||||||
|
(new Location(world, location.getBlockX() + x, location.getBlockY() + y, location.getBlockZ() + z).getBlock()).setTypeIdAndData(current.getBlock(), current.getData(), true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Schematic getSchematic(String name) {
|
||||||
|
{
|
||||||
|
File parent = new File(PlotMain.getPlugin(PlotMain.class).getDataFolder() + File.separator + "schematics");
|
||||||
|
if(!parent.exists()) {
|
||||||
|
parent.mkdir();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
File file = new File(PlotMain.getPlugin(PlotMain.class).getDataFolder() + File.separator + "schematics" + File.separator + name + ".schematic");
|
||||||
|
if(!file.exists()) {
|
||||||
|
PlotMain.sendConsoleSenderMessage(file.toString() + " doesn't exist");
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
Schematic schematic = null;
|
||||||
|
try {
|
||||||
|
InputStream iStream = new FileInputStream(file);
|
||||||
|
NBTInputStream stream = new NBTInputStream(new GZIPInputStream(iStream));
|
||||||
|
CompoundTag tag = (CompoundTag) stream.readTag();
|
||||||
|
Map<String, Tag> tagMap = tag.getValue();
|
||||||
|
|
||||||
|
byte[] addId = new byte[0];
|
||||||
|
if (tagMap.containsKey("AddBlocks")) {
|
||||||
|
addId = ByteArrayTag.class.cast(tagMap.get("AddBlocks")).getValue();
|
||||||
|
}
|
||||||
|
|
||||||
|
short width = ShortTag.class.cast(tagMap.get("Width")).getValue();
|
||||||
|
short length = ShortTag.class.cast(tagMap.get("Length")).getValue();
|
||||||
|
short height = ShortTag.class.cast(tagMap.get("Height")).getValue();
|
||||||
|
|
||||||
|
byte[] b = ByteArrayTag.class.cast(tagMap.get("Blocks")).getValue();
|
||||||
|
byte[] d = ByteArrayTag.class.cast(tagMap.get("Data")).getValue();
|
||||||
|
short[] blocks = new short[b.length];
|
||||||
|
|
||||||
|
Dimension dimension = new Dimension(width, height, length);
|
||||||
|
|
||||||
|
for (int index = 0; index < b.length; index++) {
|
||||||
|
if ((index >> 1) >= addId.length) { // No corresponding AddBlocks index
|
||||||
|
blocks[index] = (short) (b[index] & 0xFF);
|
||||||
|
} else {
|
||||||
|
if ((index & 1) == 0) {
|
||||||
|
blocks[index] = (short) (((addId[index >> 1] & 0x0F) << 8) + (b[index] & 0xFF));
|
||||||
|
} else {
|
||||||
|
blocks[index] = (short) (((addId[index >> 1] & 0xF0) << 4) + (b[index] & 0xFF));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
DataCollection[] collection = new DataCollection[b.length];
|
||||||
|
|
||||||
|
for(int x = 0; x < b.length; x++) {
|
||||||
|
collection[x] = new DataCollection(blocks[x], d[x]);
|
||||||
|
}
|
||||||
|
|
||||||
|
schematic = new Schematic(collection, dimension);
|
||||||
|
} catch(Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
return null;
|
||||||
|
} finally {
|
||||||
|
return schematic;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private int getCurrent(int x, int y, int z, Dimension dimension) {
|
||||||
|
return (x * dimension.getX()) + (y * dimension.getY()) + (z * dimension.getZ());
|
||||||
|
}
|
||||||
|
|
||||||
|
public class Schematic {
|
||||||
|
private DataCollection[] blockCollection;
|
||||||
|
private Dimension schematicDimension;
|
||||||
|
|
||||||
|
public Schematic(DataCollection[] blockCollection, Dimension schematicDimension) {
|
||||||
|
this.blockCollection = blockCollection;
|
||||||
|
this.schematicDimension = schematicDimension;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Dimension getSchematicDimension() {
|
||||||
|
return this.schematicDimension;
|
||||||
|
}
|
||||||
|
|
||||||
|
public DataCollection[] getBlockCollection() {
|
||||||
|
return this.blockCollection;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public class Dimension {
|
||||||
|
private int x;
|
||||||
|
private int y;
|
||||||
|
private int z;
|
||||||
|
|
||||||
|
public Dimension(int x, int y, int z) {
|
||||||
|
this.x = x;
|
||||||
|
this.y = y;
|
||||||
|
this.z = z;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getX() {
|
||||||
|
return this.x;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getY() {
|
||||||
|
return this.y;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getZ() {
|
||||||
|
return this.z;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public class DataCollection {
|
||||||
|
private short block;
|
||||||
|
private byte data;
|
||||||
|
|
||||||
|
public DataCollection(short block, byte data) {
|
||||||
|
this.block = block;
|
||||||
|
this.data = data;
|
||||||
|
}
|
||||||
|
|
||||||
|
public short getBlock() {
|
||||||
|
return this.block;
|
||||||
|
}
|
||||||
|
|
||||||
|
public byte getData() {
|
||||||
|
return this.data;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
38
src/com/intellectualcrafters/plot/SetBlockFast.java
Normal file
38
src/com/intellectualcrafters/plot/SetBlockFast.java
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
package com.intellectualcrafters.plot;
|
||||||
|
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import static com.intellectualcrafters.plot.ReflectionUtils.*;
|
||||||
|
|
||||||
|
public class SetBlockFast {
|
||||||
|
|
||||||
|
private static final RefClass classBlock = getRefClass("{nms}.Block");
|
||||||
|
private static final RefClass classChunk = getRefClass("{nms}.Chunk");
|
||||||
|
private static final RefClass classWorld = getRefClass("{nms}.World");
|
||||||
|
private static final RefClass classCraftWorld = getRefClass("{cb}.CraftWorld");
|
||||||
|
|
||||||
|
private static final RefMethod methodGetHandle = classCraftWorld.getMethod("getHandle");
|
||||||
|
private static final RefMethod methodGetChunkAt = classWorld.getMethod("getChunkAt",int.class,int.class);
|
||||||
|
private static final RefMethod methodA = classChunk.getMethod("a",int.class,int.class,int.class,classBlock,int.class);
|
||||||
|
private static final RefMethod methodGetById = classBlock.getMethod("getById", int.class);
|
||||||
|
|
||||||
|
public SetBlockFast() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean set(org.bukkit.World world, int x, int y, int z, int blockId, byte data) {
|
||||||
|
Object w = methodGetHandle.of(world).call();
|
||||||
|
|
||||||
|
Object chunk = methodGetChunkAt.of(w).call(x >> 4, z >> 4);
|
||||||
|
Object block = methodGetById.of(null).call(blockId);
|
||||||
|
methodA.of(chunk).call(x & 0x0f, y, z & 0x0f,block , data);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
public static void update(Player player) {
|
||||||
|
for (int cx = -8; cx < 8; cx++) {
|
||||||
|
for (int cz = -8; cz < 8; cz++) {
|
||||||
|
player.getWorld().refreshChunk(player.getLocation().getChunk().getX() + cx, player.getLocation().getChunk().getZ() + cz);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
68
src/com/intellectualcrafters/plot/Settings.java
Normal file
68
src/com/intellectualcrafters/plot/Settings.java
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) IntellectualCrafters - 2014.
|
||||||
|
* You are not allowed to distribute and/or monetize any of our intellectual property.
|
||||||
|
* IntellectualCrafters is not affiliated with Mojang AB. Minecraft is a trademark of Mojang AB.
|
||||||
|
*
|
||||||
|
* >> File = Settings.java
|
||||||
|
* >> Generated by: Citymonstret at 2014-08-09 01:44
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.intellectualcrafters.plot;
|
||||||
|
|
||||||
|
import org.bukkit.Material;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Updater and DB settings
|
||||||
|
* @author Citymonstret
|
||||||
|
*
|
||||||
|
* @author Empire92
|
||||||
|
*/
|
||||||
|
public class Settings {
|
||||||
|
/**
|
||||||
|
* plot specific resource pack
|
||||||
|
*/
|
||||||
|
public static String PLOT_SPECIFIC_RESOURCE_PACK = "";
|
||||||
|
/**
|
||||||
|
* Kill road mobs?
|
||||||
|
*/
|
||||||
|
public static boolean KILL_ROAD_MOBS;
|
||||||
|
/**
|
||||||
|
* Default kill road mobs: true
|
||||||
|
*/
|
||||||
|
public static boolean KILL_ROAD_MOBS_DEFAULT = true;
|
||||||
|
/**
|
||||||
|
* Update settings
|
||||||
|
* @author Citymonstret
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public static String URL = "http://dev.bukkit.org/bukkit-plugins/plotsquared/";
|
||||||
|
public static class Update {
|
||||||
|
/**
|
||||||
|
* Update plugin?
|
||||||
|
*/
|
||||||
|
public static boolean AUTO_UPDATE = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class Web {
|
||||||
|
public static boolean ENABLED = false;
|
||||||
|
public static int PORT = 9000;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Database settings
|
||||||
|
* @author Citymonstret
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public static class DB {
|
||||||
|
public static boolean USE_MONGO = false; /* TODO: Implement Mongo */;
|
||||||
|
public static boolean USE_MYSQL = true; /* NOTE: Fixed connector */
|
||||||
|
public static String HOST_NAME = "localhost";
|
||||||
|
public static String PORT = "3306";
|
||||||
|
public static String DATABASE = "plot_db";
|
||||||
|
public static String USER = "root";
|
||||||
|
public static String PASSWORD = "password";
|
||||||
|
}
|
||||||
|
}
|
436
src/com/intellectualcrafters/plot/Title.java
Normal file
436
src/com/intellectualcrafters/plot/Title.java
Normal file
@ -0,0 +1,436 @@
|
|||||||
|
package com.intellectualcrafters.plot;
|
||||||
|
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.ChatColor;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import java.lang.reflect.Field;
|
||||||
|
import java.lang.reflect.Method;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Minecraft 1.8 Title
|
||||||
|
*
|
||||||
|
* @version 1.0.3
|
||||||
|
* @author Maxim Van de Wynckel
|
||||||
|
*/
|
||||||
|
@SuppressWarnings("unused")
|
||||||
|
public class Title {
|
||||||
|
/* Title packet */
|
||||||
|
private Class<?> packetTitle;
|
||||||
|
/* Title packet actions ENUM */
|
||||||
|
private Class<?> packetActions;
|
||||||
|
/* Chat serializer */
|
||||||
|
private Class<?> nmsChatSerializer;
|
||||||
|
/* Title text and color */
|
||||||
|
private String title = "";
|
||||||
|
private ChatColor titleColor = ChatColor.WHITE;
|
||||||
|
/* Subtitle text and color */
|
||||||
|
private String subtitle = "";
|
||||||
|
private ChatColor subtitleColor = ChatColor.WHITE;
|
||||||
|
/* Title timings */
|
||||||
|
private int fadeInTime = -1;
|
||||||
|
private int stayTime = -1;
|
||||||
|
private int fadeOutTime = -1;
|
||||||
|
private boolean ticks = false;
|
||||||
|
|
||||||
|
private static final Map<Class<?>, Class<?>> CORRESPONDING_TYPES;
|
||||||
|
|
||||||
|
static {
|
||||||
|
CORRESPONDING_TYPES = new HashMap<>();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a new 1.8 title
|
||||||
|
*
|
||||||
|
* @param title
|
||||||
|
* Title
|
||||||
|
*/
|
||||||
|
public Title(String title) {
|
||||||
|
this.title = title;
|
||||||
|
loadClasses();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a new 1.8 title
|
||||||
|
*
|
||||||
|
* @param title
|
||||||
|
* Title text
|
||||||
|
* @param subtitle
|
||||||
|
* Subtitle text
|
||||||
|
*/
|
||||||
|
public Title(String title, String subtitle) {
|
||||||
|
this.title = title;
|
||||||
|
this.subtitle = subtitle;
|
||||||
|
loadClasses();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a new 1.8 title
|
||||||
|
*
|
||||||
|
* @param title
|
||||||
|
* Title text
|
||||||
|
* @param subtitle
|
||||||
|
* Subtitle text
|
||||||
|
* @param fadeInTime
|
||||||
|
* Fade in time
|
||||||
|
* @param stayTime
|
||||||
|
* Stay on screen time
|
||||||
|
* @param fadeOutTime
|
||||||
|
* Fade out time
|
||||||
|
*/
|
||||||
|
public Title(String title, String subtitle, int fadeInTime, int stayTime,
|
||||||
|
int fadeOutTime) {
|
||||||
|
this.title = title;
|
||||||
|
this.subtitle = subtitle;
|
||||||
|
this.fadeInTime = fadeInTime;
|
||||||
|
this.stayTime = stayTime;
|
||||||
|
this.fadeOutTime = fadeOutTime;
|
||||||
|
loadClasses();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Load spigot and NMS classes
|
||||||
|
*/
|
||||||
|
private void loadClasses() {
|
||||||
|
packetTitle = getClass("org.spigotmc.ProtocolInjector$PacketTitle");
|
||||||
|
packetActions = getClass("org.spigotmc.ProtocolInjector$PacketTitle$Action");
|
||||||
|
nmsChatSerializer = getNMSClass("ChatSerializer");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the title color
|
||||||
|
*
|
||||||
|
* @param color
|
||||||
|
* Chat color
|
||||||
|
*/
|
||||||
|
public void setTitleColor(ChatColor color) {
|
||||||
|
this.titleColor = color;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the subtitle color
|
||||||
|
*
|
||||||
|
* @param color
|
||||||
|
* Chat color
|
||||||
|
*/
|
||||||
|
public void setSubtitleColor(ChatColor color) {
|
||||||
|
this.subtitleColor = color;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set title fade in time
|
||||||
|
*
|
||||||
|
* @param time
|
||||||
|
* Time
|
||||||
|
*/
|
||||||
|
public void setFadeInTime(int time) {
|
||||||
|
this.fadeInTime = time;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set title fade out time
|
||||||
|
*
|
||||||
|
* @param time
|
||||||
|
* Time
|
||||||
|
*/
|
||||||
|
public void setFadeOutTime(int time) {
|
||||||
|
this.fadeOutTime = time;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set title stay time
|
||||||
|
*
|
||||||
|
* @param time
|
||||||
|
* Time
|
||||||
|
*/
|
||||||
|
public void setStayTime(int time) {
|
||||||
|
this.stayTime = time;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set timings to ticks
|
||||||
|
*/
|
||||||
|
public void setTimingsToTicks() {
|
||||||
|
ticks = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set timings to seconds
|
||||||
|
*/
|
||||||
|
public void setTimingsToSeconds() {
|
||||||
|
ticks = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Send the title to a player
|
||||||
|
*
|
||||||
|
* @param player
|
||||||
|
* Player
|
||||||
|
*/
|
||||||
|
public void send(Player player) {
|
||||||
|
if (getProtocolVersion(player) >= 47 && isSpigot()
|
||||||
|
&& packetTitle != null) {
|
||||||
|
// First reset previous settings
|
||||||
|
resetTitle(player);
|
||||||
|
try {
|
||||||
|
// Send timings first
|
||||||
|
Object handle = getHandle(player);
|
||||||
|
Object connection = getField(handle.getClass(),
|
||||||
|
"playerConnection").get(handle);
|
||||||
|
Object[] actions = packetActions.getEnumConstants();
|
||||||
|
Method sendPacket = getMethod(connection.getClass(),
|
||||||
|
"sendPacket");
|
||||||
|
Object packet = packetTitle.getConstructor(packetActions,
|
||||||
|
Integer.TYPE, Integer.TYPE, Integer.TYPE).newInstance(
|
||||||
|
actions[2], fadeInTime * (ticks ? 1 : 20),
|
||||||
|
stayTime * (ticks ? 1 : 20),
|
||||||
|
fadeOutTime * (ticks ? 1 : 20));
|
||||||
|
// Send if set
|
||||||
|
if (fadeInTime != -1 && fadeOutTime != -1 && stayTime != -1)
|
||||||
|
sendPacket.invoke(connection, packet);
|
||||||
|
|
||||||
|
// Send title
|
||||||
|
Object serialized = getMethod(nmsChatSerializer, "a",
|
||||||
|
String.class).invoke(
|
||||||
|
null,
|
||||||
|
"{text:\""
|
||||||
|
+ ChatColor.translateAlternateColorCodes('&',
|
||||||
|
title) + "\",color:"
|
||||||
|
+ titleColor.name().toLowerCase() + "}");
|
||||||
|
packet = packetTitle.getConstructor(packetActions,
|
||||||
|
getNMSClass("IChatBaseComponent")).newInstance(
|
||||||
|
actions[0], serialized);
|
||||||
|
sendPacket.invoke(connection, packet);
|
||||||
|
if (!subtitle.equals("")) {
|
||||||
|
// Send subtitle if present
|
||||||
|
serialized = getMethod(nmsChatSerializer, "a", String.class)
|
||||||
|
.invoke(null,
|
||||||
|
"{text:\""
|
||||||
|
+ ChatColor
|
||||||
|
.translateAlternateColorCodes(
|
||||||
|
'&', subtitle)
|
||||||
|
+ "\",color:"
|
||||||
|
+ subtitleColor.name()
|
||||||
|
.toLowerCase() + "}");
|
||||||
|
packet = packetTitle.getConstructor(packetActions,
|
||||||
|
getNMSClass("IChatBaseComponent")).newInstance(
|
||||||
|
actions[1], serialized);
|
||||||
|
sendPacket.invoke(connection, packet);
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Broadcast the title to all players
|
||||||
|
*/
|
||||||
|
public void broadcast() {
|
||||||
|
for (Player p : Bukkit.getOnlinePlayers()) {
|
||||||
|
send(p);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Clear the title
|
||||||
|
*
|
||||||
|
* @param player
|
||||||
|
* Player
|
||||||
|
*/
|
||||||
|
public void clearTitle(Player player) {
|
||||||
|
if (getProtocolVersion(player) >= 47 && isSpigot()) {
|
||||||
|
try {
|
||||||
|
// Send timings first
|
||||||
|
Object handle = getHandle(player);
|
||||||
|
Object connection = getField(handle.getClass(),
|
||||||
|
"playerConnection").get(handle);
|
||||||
|
Object[] actions = packetActions.getEnumConstants();
|
||||||
|
Method sendPacket = getMethod(connection.getClass(),
|
||||||
|
"sendPacket");
|
||||||
|
Object packet = packetTitle.getConstructor(packetActions)
|
||||||
|
.newInstance(actions[3]);
|
||||||
|
sendPacket.invoke(connection, packet);
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reset the title settings
|
||||||
|
*
|
||||||
|
* @param player
|
||||||
|
* Player
|
||||||
|
*/
|
||||||
|
public void resetTitle(Player player) {
|
||||||
|
if (getProtocolVersion(player) >= 47 && isSpigot()) {
|
||||||
|
try {
|
||||||
|
// Send timings first
|
||||||
|
Object handle = getHandle(player);
|
||||||
|
Object connection = getField(handle.getClass(),
|
||||||
|
"playerConnection").get(handle);
|
||||||
|
Object[] actions = packetActions.getEnumConstants();
|
||||||
|
Method sendPacket = getMethod(connection.getClass(),
|
||||||
|
"sendPacket");
|
||||||
|
Object packet = packetTitle.getConstructor(packetActions)
|
||||||
|
.newInstance(actions[4]);
|
||||||
|
sendPacket.invoke(connection, packet);
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the protocol version of the player
|
||||||
|
*
|
||||||
|
* @param player
|
||||||
|
* Player
|
||||||
|
* @return Protocol version
|
||||||
|
*/
|
||||||
|
private int getProtocolVersion(Player player) {
|
||||||
|
int version = 0;
|
||||||
|
try {
|
||||||
|
Object handle = getHandle(player);
|
||||||
|
Object connection = getField(handle.getClass(), "playerConnection")
|
||||||
|
.get(handle);
|
||||||
|
Object networkManager = getValue("networkManager", connection);
|
||||||
|
version = (Integer) getMethod("getVersion",
|
||||||
|
networkManager.getClass()).invoke(networkManager);
|
||||||
|
|
||||||
|
return version;
|
||||||
|
} catch (Exception ex) {
|
||||||
|
// ex.printStackTrace(); <-- spammy console
|
||||||
|
}
|
||||||
|
return version;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if running spigot
|
||||||
|
*
|
||||||
|
* @return Spigot
|
||||||
|
*/
|
||||||
|
private boolean isSpigot() {
|
||||||
|
return Bukkit.getVersion().contains("Spigot");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get class by url
|
||||||
|
*
|
||||||
|
* @param namespace
|
||||||
|
* Namespace url
|
||||||
|
* @return Class
|
||||||
|
*/
|
||||||
|
private Class<?> getClass(String namespace) {
|
||||||
|
try {
|
||||||
|
return Class.forName(namespace);
|
||||||
|
} catch (Exception e) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private Field getField(String name, Class<?> clazz) throws Exception {
|
||||||
|
return clazz.getDeclaredField(name);
|
||||||
|
}
|
||||||
|
|
||||||
|
private Object getValue(String name, Object obj) throws Exception {
|
||||||
|
Field f = getField(name, obj.getClass());
|
||||||
|
f.setAccessible(true);
|
||||||
|
return f.get(obj);
|
||||||
|
}
|
||||||
|
|
||||||
|
private Class<?> getPrimitiveType(Class<?> clazz) {
|
||||||
|
return CORRESPONDING_TYPES.containsKey(clazz) ? CORRESPONDING_TYPES
|
||||||
|
.get(clazz) : clazz;
|
||||||
|
}
|
||||||
|
|
||||||
|
private Class<?>[] toPrimitiveTypeArray(Class<?>[] classes) {
|
||||||
|
int a = classes != null ? classes.length : 0;
|
||||||
|
Class<?>[] types = new Class<?>[a];
|
||||||
|
for (int i = 0; i < a; i++)
|
||||||
|
types[i] = getPrimitiveType(classes[i]);
|
||||||
|
return types;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static boolean equalsTypeArray(Class<?>[] a, Class<?>[] o) {
|
||||||
|
if (a.length != o.length)
|
||||||
|
return false;
|
||||||
|
for (int i = 0; i < a.length; i++)
|
||||||
|
if (!a[i].equals(o[i]) && !a[i].isAssignableFrom(o[i]))
|
||||||
|
return false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
private Object getHandle(Object obj) {
|
||||||
|
try {
|
||||||
|
return getMethod("getHandle", obj.getClass()).invoke(obj);
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private Method getMethod(String name, Class<?> clazz,
|
||||||
|
Class<?>... paramTypes) {
|
||||||
|
Class<?>[] t = toPrimitiveTypeArray(paramTypes);
|
||||||
|
for (Method m : clazz.getMethods()) {
|
||||||
|
Class<?>[] types = toPrimitiveTypeArray(m.getParameterTypes());
|
||||||
|
if (m.getName().equals(name) && equalsTypeArray(types, t))
|
||||||
|
return m;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private String getVersion() {
|
||||||
|
String name = Bukkit.getServer().getClass().getPackage().getName();
|
||||||
|
return name.substring(name.lastIndexOf('.') + 1) + ".";
|
||||||
|
}
|
||||||
|
|
||||||
|
private Class<?> getNMSClass(String className) {
|
||||||
|
String fullName = "net.minecraft.server." + getVersion() + className;
|
||||||
|
Class<?> clazz = null;
|
||||||
|
try {
|
||||||
|
clazz = Class.forName(fullName);
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
return clazz;
|
||||||
|
}
|
||||||
|
|
||||||
|
private Field getField(Class<?> clazz, String name) {
|
||||||
|
try {
|
||||||
|
Field field = clazz.getDeclaredField(name);
|
||||||
|
field.setAccessible(true);
|
||||||
|
return field;
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private Method getMethod(Class<?> clazz, String name, Class<?>... args) {
|
||||||
|
for (Method m : clazz.getMethods())
|
||||||
|
if (m.getName().equals(name)
|
||||||
|
&& (args.length == 0 || ClassListEqual(args,
|
||||||
|
m.getParameterTypes()))) {
|
||||||
|
m.setAccessible(true);
|
||||||
|
return m;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean ClassListEqual(Class<?>[] l1, Class<?>[] l2) {
|
||||||
|
boolean equal = true;
|
||||||
|
if (l1.length != l2.length)
|
||||||
|
return false;
|
||||||
|
for (int i = 0; i < l1.length; i++)
|
||||||
|
if (l1[i] != l2[i]) {
|
||||||
|
equal = false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return equal;
|
||||||
|
}
|
||||||
|
}
|
412
src/com/intellectualcrafters/plot/WorldGenerator.java
Normal file
412
src/com/intellectualcrafters/plot/WorldGenerator.java
Normal file
@ -0,0 +1,412 @@
|
|||||||
|
package com.intellectualcrafters.plot;
|
||||||
|
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.World;
|
||||||
|
import org.bukkit.block.Biome;
|
||||||
|
import org.bukkit.command.defaults.SaveCommand;
|
||||||
|
import org.bukkit.configuration.file.YamlConfiguration;
|
||||||
|
import org.bukkit.generator.BlockPopulator;
|
||||||
|
import org.bukkit.generator.ChunkGenerator;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Random;
|
||||||
|
import java.util.Map.Entry;
|
||||||
|
|
||||||
|
import static com.intellectualcrafters.plot.PlotWorld.*;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* TODO finish recoding this class
|
||||||
|
* @auther Empire92
|
||||||
|
* @author Citymonstret
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class WorldGenerator extends ChunkGenerator {
|
||||||
|
short[][] result;
|
||||||
|
double plotsize;
|
||||||
|
double pathsize;
|
||||||
|
short bottom;
|
||||||
|
short wall;
|
||||||
|
short wallfilling;
|
||||||
|
short floor1;
|
||||||
|
short floor2;
|
||||||
|
double size;
|
||||||
|
Biome biome;
|
||||||
|
int roadheight;
|
||||||
|
int wallheight;
|
||||||
|
int plotheight;
|
||||||
|
|
||||||
|
Short[] plotfloors;
|
||||||
|
Short[] filling;
|
||||||
|
|
||||||
|
public short getFilling(Random random) {
|
||||||
|
if (filling.length==1) {
|
||||||
|
return filling[0];
|
||||||
|
}
|
||||||
|
return filling[random.nextInt(filling.length)];
|
||||||
|
}
|
||||||
|
|
||||||
|
public short getPlotFloor(Random random) {
|
||||||
|
if (plotfloors.length==1) {
|
||||||
|
return plotfloors[0];
|
||||||
|
}
|
||||||
|
return plotfloors[random.nextInt(plotfloors.length)];
|
||||||
|
}
|
||||||
|
|
||||||
|
public Short getBlock(String block) {
|
||||||
|
if (block.contains(":")) {
|
||||||
|
String[] split = block.split(":");
|
||||||
|
return Short.parseShort(split[0]);
|
||||||
|
}
|
||||||
|
return Short.parseShort(block);
|
||||||
|
}
|
||||||
|
|
||||||
|
public WorldGenerator(String world) {
|
||||||
|
YamlConfiguration config = PlotMain.config;
|
||||||
|
PlotWorld plotworld = new PlotWorld();
|
||||||
|
Map<String, Object> options = new HashMap<String, Object>();
|
||||||
|
|
||||||
|
options.put("worlds."+world+".plot_height", PLOT_HEIGHT_DEFAULT);
|
||||||
|
options.put("worlds."+world+".plot_size", PLOT_WIDTH_DEFAULT);
|
||||||
|
options.put("worlds."+world+".plot_biome", PLOT_BIOME_DEFAULT);
|
||||||
|
options.put("worlds."+world+".plot_filling", Arrays.asList(MAIN_BLOCK_DEFAULT));
|
||||||
|
options.put("worlds."+world+".top_floor", Arrays.asList(TOP_BLOCK_DEFAULT));
|
||||||
|
options.put("worlds."+world+".wall_block", WALL_BLOCK_DEFAULT);
|
||||||
|
options.put("worlds."+world+".road_width", ROAD_WIDTH_DEFAULT);
|
||||||
|
options.put("worlds."+world+".road_height", ROAD_HEIGHT_DEFAULT);
|
||||||
|
options.put("worlds."+world+".road_block", ROAD_BLOCK_DEFAULT);
|
||||||
|
// options.put("worlds."+world+".road_stripes", ROAD_STRIPES_DEFAULT);
|
||||||
|
options.put("worlds."+world+".wall_filling", WALL_FILLING_DEFAULT);
|
||||||
|
options.put("worlds."+world+".wall_height", WALL_HEIGHT_DEFAULT);
|
||||||
|
|
||||||
|
for (Entry<String, Object> node : options.entrySet()) {
|
||||||
|
if (!config.contains(node.getKey())) {
|
||||||
|
config.set(node.getKey(), node.getValue());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
config.save(PlotMain.configFile);
|
||||||
|
} catch (IOException e) {
|
||||||
|
PlotMain.sendConsoleSenderMessage("&c[Warning] PlotSquared failed to save the configuration&7 (settings.yml may differ from the one in memory)\n - To force a save from console use /plots save");
|
||||||
|
}
|
||||||
|
plotworld.PLOT_HEIGHT = config.getInt("worlds."+world+".plot_height");
|
||||||
|
plotworld.PLOT_WIDTH = config.getInt("worlds."+world+".plot_size");
|
||||||
|
plotworld.PLOT_BIOME = config.getString("worlds."+world+".plot_biome");
|
||||||
|
plotworld.MAIN_BLOCK = config.getStringList("worlds."+world+".plot_filling").toArray(new String[0]);
|
||||||
|
plotworld.TOP_BLOCK = config.getStringList("worlds."+world+".top_floor").toArray(new String[0]);
|
||||||
|
plotworld.WALL_BLOCK = config.getString("worlds."+world+".wall_block");
|
||||||
|
plotworld.ROAD_WIDTH = config.getInt("worlds."+world+".road_width");
|
||||||
|
plotworld.ROAD_HEIGHT = config.getInt("worlds."+world+".road_height");
|
||||||
|
plotworld.ROAD_BLOCK = config.getString("worlds."+world+".road_block");
|
||||||
|
// plotworld.ROAD_STRIPES = config.getInt("worlds."+world+".road_stripes");
|
||||||
|
plotworld.WALL_FILLING = config.getString("worlds."+world+".wall_filling");
|
||||||
|
plotworld.WALL_HEIGHT = config.getInt("worlds."+world+".wall_height");
|
||||||
|
plotworld.PLOT_CHAT = config.getBoolean("worlds."+world+".plot_chat");
|
||||||
|
PlotMain.addPlotWorld(world, plotworld);
|
||||||
|
|
||||||
|
plotsize = plotworld.PLOT_WIDTH;
|
||||||
|
pathsize = plotworld.ROAD_WIDTH;
|
||||||
|
bottom = (short) Material.BEDROCK.getId();
|
||||||
|
filling = new Short[plotworld.MAIN_BLOCK.length];
|
||||||
|
plotfloors = new Short[plotworld.TOP_BLOCK.length];
|
||||||
|
|
||||||
|
floor1 = getBlock(plotworld.ROAD_BLOCK);
|
||||||
|
// floor2 = getBlock(plotworld.ROAD_STRIPES);
|
||||||
|
wallfilling = getBlock(plotworld.WALL_FILLING);
|
||||||
|
size = pathsize + plotsize;
|
||||||
|
wall = getBlock(plotworld.WALL_BLOCK);
|
||||||
|
|
||||||
|
Short[] plotfloors = new Short[plotworld.TOP_BLOCK.length];
|
||||||
|
Short[] plotfloors_data = new Short[plotworld.TOP_BLOCK.length];
|
||||||
|
|
||||||
|
for (int i = 0; i < plotworld.TOP_BLOCK.length; i++) {
|
||||||
|
plotfloors[i] = getBlock(plotworld.TOP_BLOCK[i]);
|
||||||
|
}
|
||||||
|
for (int i = 0; i < plotworld.MAIN_BLOCK.length; i++) {
|
||||||
|
filling[i] = getBlock(plotworld.MAIN_BLOCK[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
wallheight = plotworld.WALL_HEIGHT;
|
||||||
|
roadheight = plotworld.ROAD_HEIGHT;
|
||||||
|
plotheight = plotworld.PLOT_HEIGHT;
|
||||||
|
|
||||||
|
biome = Biome.FOREST;
|
||||||
|
for (Biome myBiome:Biome.values()) {
|
||||||
|
if (myBiome.name().equalsIgnoreCase(plotworld.PLOT_BIOME)) {
|
||||||
|
biome = myBiome;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<BlockPopulator> getDefaultPopulators(World world) {
|
||||||
|
return Arrays.asList((BlockPopulator) new XPopulator());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Location getFixedSpawnLocation(World world, Random random) {
|
||||||
|
return new Location(world, 0, PlotMain.getWorldSettings(world).ROAD_HEIGHT + 2, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCuboidRegion(double x1,double x2, int y1, int y2, double z1, double z2, short id) {
|
||||||
|
for (double x = x1; x < x2; x++) {
|
||||||
|
for (double z = z1; z < z2; z++) {
|
||||||
|
for (int y = y1; y < y2; y++) {
|
||||||
|
setBlock(result, (int) x, y, (int) z, id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("deprecation")
|
||||||
|
@Override
|
||||||
|
public short[][] generateExtBlockSections(World world, Random random,
|
||||||
|
int cx, int cz, BiomeGrid biomes) {
|
||||||
|
int maxY = world.getMaxHeight();
|
||||||
|
|
||||||
|
result = new short[maxY / 16][];
|
||||||
|
|
||||||
|
double pathWidthLower;
|
||||||
|
pathWidthLower = Math.floor(pathsize/2);
|
||||||
|
if (cx<0)
|
||||||
|
cx+=((-cx)*(size));
|
||||||
|
if (cz<0)
|
||||||
|
cz+=((-cz)*(size));
|
||||||
|
double absX = (cx*16+16-pathWidthLower-1+8*size);
|
||||||
|
double absZ = (cz*16+16-pathWidthLower-1+8*size);
|
||||||
|
double plotMinX = (((absX)%size));
|
||||||
|
double plotMinZ = (((absZ)%size));
|
||||||
|
double roadStartX = (plotMinX + pathsize);
|
||||||
|
double roadStartZ = (plotMinZ + pathsize);
|
||||||
|
if (roadStartX>=size)
|
||||||
|
roadStartX-=size;
|
||||||
|
if (roadStartZ>=size)
|
||||||
|
roadStartZ-=size;
|
||||||
|
|
||||||
|
// BOTTOM (1/1 cuboids)
|
||||||
|
for (int x = 0; x < 16; x++) {
|
||||||
|
for (int z = 0; z < 16; z++) {
|
||||||
|
setBlock(result, x, 0, z, bottom);
|
||||||
|
biomes.setBiome(x, z, biome);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// ROAD (0/24) The following is an inefficient placeholder as it is too much work to finish it
|
||||||
|
|
||||||
|
if (plotMinZ+1<=16||roadStartZ<=16&&roadStartZ>0) {
|
||||||
|
int start = (int) Math.max(16-plotMinZ-pathsize+1,16-roadStartZ+1);
|
||||||
|
int end = (int) Math.min(16-plotMinZ-1,16-roadStartZ+pathsize);
|
||||||
|
if (start>=0 && start<=16 && end <0)
|
||||||
|
end = 16;
|
||||||
|
setCuboidRegion(0, 16, 1, roadheight+1, Math.max(start,0),Math.min(16,end), floor1);
|
||||||
|
}
|
||||||
|
if (plotMinX+1<=16||roadStartX<=16&&roadStartX>0) {
|
||||||
|
int start = (int) Math.max(16-plotMinX-pathsize+1,16-roadStartX+1);
|
||||||
|
int end = (int) Math.min(16-plotMinX-1,16-roadStartX+pathsize);
|
||||||
|
if (start>=0 && start<=16 && end <0)
|
||||||
|
end = 16;
|
||||||
|
setCuboidRegion(Math.max(start,0), Math.min(16,end), 1, roadheight+1, 0, 16, floor1);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Plot filling (28/28 cuboids) (10x2 + 4x2)
|
||||||
|
if (plotsize>16) {
|
||||||
|
if (roadStartX<=16) {
|
||||||
|
if (roadStartZ<=16) {
|
||||||
|
setCuboidRegion(0, 16-roadStartX, 1, plotheight, 0, 16-roadStartZ, getFilling(random));
|
||||||
|
setCuboidRegion(0, 16-roadStartX, plotheight, plotheight+1, 0, 16-roadStartZ, getPlotFloor(random));
|
||||||
|
}
|
||||||
|
if (plotMinZ<=16) {
|
||||||
|
setCuboidRegion(0, 16-roadStartX, 1, plotheight, 16-plotMinZ, 16, getFilling(random));
|
||||||
|
setCuboidRegion(0, 16-roadStartX, plotheight, plotheight+1, 16-plotMinZ, 16, getPlotFloor(random));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (roadStartZ<=16) {
|
||||||
|
if (plotMinX>16) {
|
||||||
|
setCuboidRegion(0, 16, 1, plotheight, 0, 16-roadStartZ, getFilling(random));
|
||||||
|
setCuboidRegion(0, 16, plotheight, plotheight+1, 0, 16-roadStartZ, getPlotFloor(random));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (plotMinX<=16) {
|
||||||
|
if (plotMinZ<=16) {
|
||||||
|
setCuboidRegion(16-plotMinX, 16, 1, plotheight, 16-plotMinZ, 16, getFilling(random));
|
||||||
|
setCuboidRegion(16-plotMinX, 16, plotheight, plotheight+1, 16-plotMinZ, 16, getPlotFloor(random));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
int z = (int) (16-roadStartZ);
|
||||||
|
if (z<0)
|
||||||
|
z=16;
|
||||||
|
setCuboidRegion(16-plotMinX, 16, 1, plotheight, 0, z, getFilling(random));
|
||||||
|
setCuboidRegion(16-plotMinX, 16, plotheight, plotheight+1, 0, z, getPlotFloor(random));
|
||||||
|
}
|
||||||
|
if (roadStartZ<=16) {
|
||||||
|
setCuboidRegion(16-plotMinX, 16, 1, plotheight, 0, 16-roadStartZ, getFilling(random));
|
||||||
|
setCuboidRegion(16-plotMinX, 16, plotheight, plotheight+1, 0, 16-roadStartZ, getPlotFloor(random));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (roadStartX<=16) {
|
||||||
|
if (plotMinZ>16) {
|
||||||
|
int x = (int) (16-roadStartX);
|
||||||
|
if (x<0)
|
||||||
|
x=16;
|
||||||
|
setCuboidRegion(0, x, 1, plotheight, 0, 16, getFilling(random));
|
||||||
|
setCuboidRegion(0, x, plotheight,plotheight+1, 0, 16, getPlotFloor(random));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (plotMinZ<=16) {
|
||||||
|
if (roadStartX>16) {
|
||||||
|
int x = (int) (16-roadStartX);
|
||||||
|
if (x<0)
|
||||||
|
x=16;
|
||||||
|
setCuboidRegion(0, x, 1, plotheight, 16-plotMinZ, 16, getFilling(random));
|
||||||
|
setCuboidRegion(0, x, plotheight, plotheight+1, 16-plotMinZ, 16, getPlotFloor(random));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (roadStartZ>16) {
|
||||||
|
int x = (int) (16-roadStartX);
|
||||||
|
if (x<0)
|
||||||
|
x=16;
|
||||||
|
int z = (int) (16-roadStartZ);
|
||||||
|
if (z<0)
|
||||||
|
z=16;
|
||||||
|
if (roadStartX>16) {
|
||||||
|
setCuboidRegion(0, x, 1, plotheight, 0, z, getFilling(random));
|
||||||
|
setCuboidRegion(0, x, plotheight, plotheight+1, 0, z, getPlotFloor(random));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
setCuboidRegion(0, x, 1, plotheight, 0, z, getFilling(random));
|
||||||
|
setCuboidRegion(0, x, plotheight, plotheight+1, 0, z, getPlotFloor(random));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (roadStartX<=16) {
|
||||||
|
if (roadStartZ<=16) {
|
||||||
|
setCuboidRegion(0, 16-roadStartX, 1, plotheight, 0, 16-roadStartZ, getFilling(random));
|
||||||
|
setCuboidRegion(0, 16-roadStartX, plotheight, plotheight+1, 0, 16-roadStartZ, getPlotFloor(random));
|
||||||
|
}
|
||||||
|
if (plotMinZ<=16) {
|
||||||
|
setCuboidRegion(0, 16-roadStartX, 1, plotheight, 16-plotMinZ, 16, getFilling(random));
|
||||||
|
setCuboidRegion(0, 16-roadStartX, plotheight, plotheight+1, 16-plotMinZ, 16, getPlotFloor(random));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (plotMinX<=16) {
|
||||||
|
if (plotMinZ<=16) {
|
||||||
|
setCuboidRegion(16-plotMinX, 16, 1, plotheight, 16-plotMinZ, 16, getFilling(random));
|
||||||
|
setCuboidRegion(16-plotMinX, 16, plotheight, plotheight+1, 16-plotMinZ, 16, getPlotFloor(random));
|
||||||
|
}
|
||||||
|
if (roadStartZ<=16) {
|
||||||
|
setCuboidRegion(16-plotMinX, 16, 1, plotheight, 0, 16-roadStartZ, getFilling(random));
|
||||||
|
setCuboidRegion(16-plotMinX, 16, plotheight, plotheight+1, 0, 16-roadStartZ, getPlotFloor(random));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// WALLS (16/16 cuboids)
|
||||||
|
|
||||||
|
if (plotMinZ+1<=16) {
|
||||||
|
double start,end;
|
||||||
|
if (plotMinX+2<=16)
|
||||||
|
start = 16-plotMinX-1;
|
||||||
|
else
|
||||||
|
start = 16;
|
||||||
|
if (roadStartX-1<=16)
|
||||||
|
end = 16-roadStartX+1;
|
||||||
|
else
|
||||||
|
end = 0;
|
||||||
|
if (!(plotMinX+2<=16||roadStartX-1<=16)) {
|
||||||
|
start = 0;
|
||||||
|
}
|
||||||
|
setCuboidRegion(0, end, 1, wallheight+1, 16-plotMinZ-1, 16-plotMinZ, wallfilling);
|
||||||
|
setCuboidRegion(0, end, wallheight+1, wallheight+2, 16-plotMinZ-1, 16-plotMinZ, wall);
|
||||||
|
setCuboidRegion(start, 16, 1, wallheight+1, 16-plotMinZ-1, 16-plotMinZ, wallfilling);
|
||||||
|
setCuboidRegion(start, 16, wallheight+1, wallheight+2, 16-plotMinZ-1, 16-plotMinZ, wall);
|
||||||
|
}
|
||||||
|
if (plotMinX+1<=16) {
|
||||||
|
double start,end;
|
||||||
|
if (plotMinZ+2<=16)
|
||||||
|
start = 16-plotMinZ-1;
|
||||||
|
else
|
||||||
|
start = 16;
|
||||||
|
if (roadStartZ-1<=16)
|
||||||
|
end = 16-roadStartZ+1;
|
||||||
|
else
|
||||||
|
end = 0;
|
||||||
|
if (!(plotMinZ+2<=16||roadStartZ-1<=16)) {
|
||||||
|
start = 0;
|
||||||
|
}
|
||||||
|
setCuboidRegion( 16-plotMinX-1, 16-plotMinX, 1, wallheight+1,0, end, wallfilling);
|
||||||
|
setCuboidRegion( 16-plotMinX-1, 16-plotMinX,wallheight+1, wallheight+2, 0, end, wall);
|
||||||
|
setCuboidRegion(16-plotMinX-1, 16-plotMinX, 1, wallheight+1, start, 16, wallfilling);
|
||||||
|
setCuboidRegion( 16-plotMinX-1, 16-plotMinX, wallheight+1, wallheight+2,start, 16, wall);
|
||||||
|
}
|
||||||
|
if (roadStartZ<=16&&roadStartZ>0) {
|
||||||
|
double start,end;
|
||||||
|
if (plotMinX+1<=16)
|
||||||
|
start = 16-plotMinX;
|
||||||
|
else
|
||||||
|
start = 16;
|
||||||
|
if (roadStartX<=16)
|
||||||
|
end = 16-roadStartX;
|
||||||
|
else
|
||||||
|
end = 0;
|
||||||
|
if (!(plotMinX+1<=16||roadStartX<=16)) {
|
||||||
|
start = 0;
|
||||||
|
}
|
||||||
|
setCuboidRegion(0, end, 1, wallheight+1, 16-roadStartZ, 16-roadStartZ+1, wallfilling);
|
||||||
|
setCuboidRegion(0, end, wallheight+1, wallheight+2, 16-roadStartZ, 16-roadStartZ+1, wall);
|
||||||
|
setCuboidRegion(start, 16, 1, wallheight+1, 16-roadStartZ, 16-roadStartZ+1, wallfilling);
|
||||||
|
setCuboidRegion(start, 16, wallheight+1, wallheight+2, 16-roadStartZ, 16-roadStartZ+1, wall);
|
||||||
|
}
|
||||||
|
if (roadStartX<=16&&roadStartX>0) {
|
||||||
|
double start,end;
|
||||||
|
if (plotMinZ+1<=16)
|
||||||
|
start = 16-plotMinZ;
|
||||||
|
else
|
||||||
|
start = 16;
|
||||||
|
if (roadStartZ+1<=16)
|
||||||
|
end = 16-roadStartZ+1;
|
||||||
|
else
|
||||||
|
end = 0;
|
||||||
|
if (!(plotMinZ+1<=16||roadStartZ+1<=16)) {
|
||||||
|
start = 0;
|
||||||
|
}
|
||||||
|
setCuboidRegion( 16-roadStartX, 16-roadStartX+1, 1, wallheight+1,0, end, wallfilling);
|
||||||
|
setCuboidRegion( 16-roadStartX, 16-roadStartX+1,wallheight+1, roadheight+2,0, end, wall);
|
||||||
|
setCuboidRegion( 16-roadStartX, 16-roadStartX+1, 1, wallheight+1, start, 16,wallfilling);
|
||||||
|
setCuboidRegion( 16-roadStartX, 16-roadStartX+1,wallheight+1, wallheight+2, start, 16, wall);
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@SuppressWarnings({ "deprecation", "unused" })
|
||||||
|
private void setBlock(short[][] result, int x, int y, int z,
|
||||||
|
Material material) {
|
||||||
|
setBlock(result, x, y, z, (short) material.getId());
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private void setBlock(short[][] result, int x, int y, int z, short blkid) {
|
||||||
|
if (result[y >> 4] == null) {
|
||||||
|
result[y >> 4] = new short[4096];
|
||||||
|
}
|
||||||
|
result[y >> 4][((y & 0xF) << 8) | (z << 4) | x] = blkid;
|
||||||
|
}
|
||||||
|
}
|
213
src/com/intellectualcrafters/plot/XPopulator.java
Normal file
213
src/com/intellectualcrafters/plot/XPopulator.java
Normal file
@ -0,0 +1,213 @@
|
|||||||
|
package com.intellectualcrafters.plot;
|
||||||
|
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.Chunk;
|
||||||
|
import org.bukkit.World;
|
||||||
|
import org.bukkit.generator.BlockPopulator;
|
||||||
|
|
||||||
|
import java.util.Random;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* TODO recode this class
|
||||||
|
* Fuck you PlotMe!
|
||||||
|
* @author Citymonstret
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class XPopulator extends BlockPopulator {
|
||||||
|
private SetBlockFast setBlockClass = null;
|
||||||
|
public XPopulator() {
|
||||||
|
try {
|
||||||
|
setBlockClass = new SetBlockFast();
|
||||||
|
}
|
||||||
|
catch (NoClassDefFoundError e) {
|
||||||
|
PlotMain.sendConsoleSenderMessage(C.PREFIX.s() + "&cFast plot clearing is currently not enabled.");
|
||||||
|
PlotMain.sendConsoleSenderMessage(C.PREFIX.s() + "&c - Please get PlotSquared for "+Bukkit.getVersion()+" for improved performance");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCuboidRegion(int x1,int x2, int y1, int y2, int z1, int z2, short id, byte data, World w) {
|
||||||
|
if (data!=0) {
|
||||||
|
for (int x = x1; x < x2; x++) {
|
||||||
|
for (int z = z1; z < z2; z++) {
|
||||||
|
for (int y = y1; y < y2; y++) {
|
||||||
|
if (w.getBlockTypeIdAt(x, y, z)==id)
|
||||||
|
setBlock(w, x, y, z, id, data);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public short[] getBlock(String block) {
|
||||||
|
if (block.contains(":")) {
|
||||||
|
String[] split = block.split(":");
|
||||||
|
return new short[] {Short.parseShort(split[0]),Short.parseShort(split[1])};
|
||||||
|
}
|
||||||
|
return new short[] {Short.parseShort(block),0};
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void populate(World w, Random r, Chunk c) {
|
||||||
|
PlotWorld plotworld = PlotMain.getWorldSettings(w);
|
||||||
|
|
||||||
|
int plotsize = plotworld.PLOT_WIDTH;
|
||||||
|
int pathsize = plotworld.ROAD_WIDTH;
|
||||||
|
int wallheight = plotworld.WALL_HEIGHT;
|
||||||
|
int roadheight = plotworld.ROAD_HEIGHT;
|
||||||
|
int plotheight = plotworld.PLOT_HEIGHT;
|
||||||
|
int size = pathsize + plotsize;
|
||||||
|
byte w_v, f1_v, wf_v;
|
||||||
|
|
||||||
|
short w_id, f1_id, wf_id;
|
||||||
|
|
||||||
|
// WALL
|
||||||
|
short[] result_w = getBlock(plotworld.WALL_BLOCK);
|
||||||
|
w_id = result_w[0];
|
||||||
|
w_v = (byte) result_w[1];
|
||||||
|
|
||||||
|
// WALL FILLING
|
||||||
|
short[] result_wf = getBlock(plotworld.WALL_FILLING);
|
||||||
|
wf_id = result_wf[0];
|
||||||
|
wf_v = (byte) result_wf[1];
|
||||||
|
|
||||||
|
// ROAD
|
||||||
|
short[] result_f1 = getBlock(plotworld.ROAD_BLOCK);
|
||||||
|
f1_id = result_f1[0];
|
||||||
|
f1_v = (byte) result_f1[1];
|
||||||
|
//
|
||||||
|
|
||||||
|
// Floor 2
|
||||||
|
// f2_id = (short) Settings.ROAD_STRIPES;
|
||||||
|
// f2_v = (byte) Settings.ROAD_STRIPES_DATA;
|
||||||
|
//
|
||||||
|
|
||||||
|
int cx = c.getX(), cz = c.getZ();
|
||||||
|
|
||||||
|
double pathWidthLower;
|
||||||
|
pathWidthLower = Math.floor(pathsize/2);
|
||||||
|
if (cx<0)
|
||||||
|
cx+=((-cx)*(size));
|
||||||
|
if (cz<0)
|
||||||
|
cz+=((-cz)*(size));
|
||||||
|
double absX = (cx*16+16-pathWidthLower-1+8*size);
|
||||||
|
double absZ = (cz*16+16-pathWidthLower-1+8*size);
|
||||||
|
int plotMinX = (int) (((absX)%size));
|
||||||
|
int plotMinZ = (int) (((absZ)%size));
|
||||||
|
int roadStartX = (plotMinX + pathsize);
|
||||||
|
int roadStartZ = (plotMinZ + pathsize);
|
||||||
|
if (roadStartX>=size)
|
||||||
|
roadStartX-=size;
|
||||||
|
if (roadStartZ>=size)
|
||||||
|
roadStartZ-=size;
|
||||||
|
|
||||||
|
// ROADS
|
||||||
|
|
||||||
|
if (plotMinZ+1<=16||roadStartZ<=16&&roadStartZ>0) {
|
||||||
|
int start = (int) Math.max(16-plotMinZ-pathsize+1,16-roadStartZ+1);
|
||||||
|
int end = (int) Math.min(16-plotMinZ-1,16-roadStartZ+pathsize);
|
||||||
|
if (start>=0 && start<=16 && end <0)
|
||||||
|
end = 16;
|
||||||
|
setCuboidRegion(0, 16, 1, roadheight+1, Math.max(start,0),Math.min(16,end), f1_id, f1_v, w);
|
||||||
|
}
|
||||||
|
if (plotMinX+1<=16||roadStartX<=16&&roadStartX>0) {
|
||||||
|
int start = (int) Math.max(16-plotMinX-pathsize+1,16-roadStartX+1);
|
||||||
|
int end = (int) Math.min(16-plotMinX-1,16-roadStartX+pathsize);
|
||||||
|
if (start>=0 && start<=16 && end <0)
|
||||||
|
end = 16;
|
||||||
|
setCuboidRegion(Math.max(start,0), Math.min(16,end), 1, roadheight+1, 0, 16, f1_id, f1_v, w);
|
||||||
|
}
|
||||||
|
|
||||||
|
// WALLS
|
||||||
|
|
||||||
|
if (plotMinZ+1<=16) {
|
||||||
|
int start,end;
|
||||||
|
if (plotMinX+2<=16)
|
||||||
|
start = 16-plotMinX-1;
|
||||||
|
else
|
||||||
|
start = 16;
|
||||||
|
if (roadStartX-1<=16)
|
||||||
|
end = 16-roadStartX+1;
|
||||||
|
else
|
||||||
|
end = 0;
|
||||||
|
if (!(plotMinX+2<=16||roadStartX-1<=16)) {
|
||||||
|
start = 0;
|
||||||
|
}
|
||||||
|
setCuboidRegion(0, end, 1, wallheight+1, 16-plotMinZ-1, 16-plotMinZ, wf_id, wf_v, w);
|
||||||
|
setCuboidRegion(0, end, wallheight+1, wallheight+2, 16-plotMinZ-1, 16-plotMinZ, w_id, w_v, w);
|
||||||
|
setCuboidRegion(start, 16, 1, wallheight+1, 16-plotMinZ-1, 16-plotMinZ, wf_id, wf_v, w);
|
||||||
|
setCuboidRegion(start, 16, wallheight+1, wallheight+2, 16-plotMinZ-1, 16-plotMinZ, w_id, w_v, w);
|
||||||
|
}
|
||||||
|
if (plotMinX+1<=16) {
|
||||||
|
int start,end;
|
||||||
|
if (plotMinZ+2<=16)
|
||||||
|
start = 16-plotMinZ-1;
|
||||||
|
else
|
||||||
|
start = 16;
|
||||||
|
if (roadStartZ-1<=16)
|
||||||
|
end = 16-roadStartZ+1;
|
||||||
|
else
|
||||||
|
end = 0;
|
||||||
|
if (!(plotMinZ+2<=16||roadStartZ-1<=16)) {
|
||||||
|
start = 0;
|
||||||
|
}
|
||||||
|
setCuboidRegion( 16-plotMinX-1, 16-plotMinX, 1, wallheight+1,0, end, wf_id, wf_v, w);
|
||||||
|
setCuboidRegion( 16-plotMinX-1, 16-plotMinX,wallheight+1, wallheight+2, 0, end, w_id, w_v, w);
|
||||||
|
setCuboidRegion(16-plotMinX-1, 16-plotMinX, 1, wallheight+1, start, 16, wf_id, wf_v, w);
|
||||||
|
setCuboidRegion( 16-plotMinX-1, 16-plotMinX, wallheight+1, wallheight+2,start, 16, w_id, w_v, w);
|
||||||
|
}
|
||||||
|
if (roadStartZ<=16&&roadStartZ>0) {
|
||||||
|
int start,end;
|
||||||
|
if (plotMinX+1<=16)
|
||||||
|
start = 16-plotMinX;
|
||||||
|
else
|
||||||
|
start = 16;
|
||||||
|
if (roadStartX<=16)
|
||||||
|
end = 16-roadStartX;
|
||||||
|
else
|
||||||
|
end = 0;
|
||||||
|
if (!(plotMinX+1<=16||roadStartX<=16)) {
|
||||||
|
start = 0;
|
||||||
|
}
|
||||||
|
setCuboidRegion(0, end, 1, wallheight+1, 16-roadStartZ, 16-roadStartZ+1, wf_id, wf_v, w);
|
||||||
|
setCuboidRegion(0, end, wallheight+1, wallheight+2, 16-roadStartZ, 16-roadStartZ+1, w_id, w_v, w);
|
||||||
|
setCuboidRegion(start, 16, 1, wallheight+1, 16-roadStartZ, 16-roadStartZ+1, wf_id, wf_v, w);
|
||||||
|
setCuboidRegion(start, 16, wallheight+1, wallheight+2, 16-roadStartZ, 16-roadStartZ+1, w_id, w_v, w);
|
||||||
|
}
|
||||||
|
if (roadStartX<=16&&roadStartX>0) {
|
||||||
|
int start,end;
|
||||||
|
if (plotMinZ+1<=16)
|
||||||
|
start = 16-plotMinZ;
|
||||||
|
else
|
||||||
|
start = 16;
|
||||||
|
if (roadStartZ+1<=16)
|
||||||
|
end = 16-roadStartZ+1;
|
||||||
|
else
|
||||||
|
end = 0;
|
||||||
|
if (!(plotMinZ+1<=16||roadStartZ+1<=16)) {
|
||||||
|
start = 0;
|
||||||
|
}
|
||||||
|
setCuboidRegion( 16-roadStartX, 16-roadStartX+1, 1, wallheight+1,0, end, wf_id, wf_v, w);
|
||||||
|
setCuboidRegion( 16-roadStartX, 16-roadStartX+1,wallheight+1, roadheight+2,0, end, w_id, w_v, w);
|
||||||
|
setCuboidRegion( 16-roadStartX, 16-roadStartX+1, 1, wallheight+1, start, 16,wf_id, wf_v, w);
|
||||||
|
setCuboidRegion( 16-roadStartX, 16-roadStartX+1,wallheight+1, wallheight+2, start, 16, w_id, w_v, w);
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO PLOT MAIN - How are we going to do the IDs for the actual plot if we have randomized blocks...
|
||||||
|
// - possibly on plot claiming, we could regenerate using the xpopulator
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("deprecation")
|
||||||
|
private void setBlock(World w, int x, int y, int z, short id, byte val) {
|
||||||
|
if (setBlockClass!=null) {
|
||||||
|
setBlockClass.set(w, x, y, z, id, val);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (val != 0) {
|
||||||
|
w.getBlockAt(x, y, z).setTypeIdAndData(id, val, false);
|
||||||
|
} else {
|
||||||
|
w.getBlockAt(x, y, z).setTypeId(id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
291
src/com/intellectualcrafters/plot/api/PlotAPI.java
Normal file
291
src/com/intellectualcrafters/plot/api/PlotAPI.java
Normal file
@ -0,0 +1,291 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) IntellectualCrafters - 2014.
|
||||||
|
* You are not allowed to distribute and/or monetize any of our intellectual property.
|
||||||
|
* IntellectualCrafters is not affiliated with Mojang AB. Minecraft is a trademark of Mojang AB.
|
||||||
|
*
|
||||||
|
* >> File = PlotAPI.java
|
||||||
|
* >> Generated by: Citymonstret at 2014-08-09 01:44
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.intellectualcrafters.plot.api;
|
||||||
|
|
||||||
|
import com.intellectualcrafters.plot.*;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.World;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.plugin.java.JavaPlugin;
|
||||||
|
|
||||||
|
import com.intellectualcrafters.plot.PlotMain;
|
||||||
|
import com.intellectualcrafters.plot.commands.MainCommand;
|
||||||
|
import com.intellectualcrafters.plot.commands.SubCommand;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The plotMain api class.
|
||||||
|
* @author Citymonstret
|
||||||
|
*/
|
||||||
|
@SuppressWarnings({"unused", "javadoc"})
|
||||||
|
public class PlotAPI {
|
||||||
|
|
||||||
|
//To perform bukkit operations correctly.
|
||||||
|
private JavaPlugin plugin;
|
||||||
|
//To access plotMain stuffz.
|
||||||
|
private PlotMain plotMain;
|
||||||
|
//To access the plotworld.
|
||||||
|
private World plotWorld;
|
||||||
|
//Reference
|
||||||
|
public static final String ADMIN_PERMISSION = "plots.admin";
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor. Insert any Plugin.
|
||||||
|
* @param plugin
|
||||||
|
*/
|
||||||
|
public PlotAPI(JavaPlugin plugin) {
|
||||||
|
this.plugin = plugin;
|
||||||
|
this.plotMain = JavaPlugin.getPlugin(PlotMain.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Send a message to a player.
|
||||||
|
* @param player
|
||||||
|
* @param c (Caption)
|
||||||
|
*/
|
||||||
|
public void sendMessage(Player player, C c){
|
||||||
|
PlayerFunctions.sendMessage(player, c);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Send a message to a player.
|
||||||
|
* @param player
|
||||||
|
* @param string
|
||||||
|
*/
|
||||||
|
public void sendMessage(Player player, String string) {
|
||||||
|
PlayerFunctions.sendMessage(player, string);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Send a message to the console.
|
||||||
|
* @param msg
|
||||||
|
*/
|
||||||
|
public void sendConsoleMessage(String msg) {
|
||||||
|
PlotMain.sendConsoleSenderMessage(msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Send a message to the console
|
||||||
|
* @param c (Caption)
|
||||||
|
*/
|
||||||
|
public void sendConsoleMessage(C c) {
|
||||||
|
sendConsoleMessage(c.s());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get a plot based on the ID
|
||||||
|
* @param id
|
||||||
|
* @return plot, null if ID is wrong
|
||||||
|
*/
|
||||||
|
public Plot getPlot(World world, int x, int z) {
|
||||||
|
return PlotHelper.getPlot(world, new PlotId(x, z));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get a plot based on the location
|
||||||
|
* @param l
|
||||||
|
* @return plot if found, otherwise it creates a temporary plot-
|
||||||
|
*/
|
||||||
|
public Plot getPlot(Location l) {
|
||||||
|
return PlotHelper.getCurrentPlot(l);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get a plot based on the player location
|
||||||
|
* @param player
|
||||||
|
* @return plot if found, otherwise it creates a temporary plot
|
||||||
|
*/
|
||||||
|
public Plot getPlot(Player player) {
|
||||||
|
return this.getPlot(player.getLocation());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check whether or not a player has a plot
|
||||||
|
* @param player
|
||||||
|
* @return true if player has a plot, false if not.
|
||||||
|
*/
|
||||||
|
public boolean hasPlot(World world, Player player) {
|
||||||
|
return getPlots(world, player, true) != null && getPlots(world, player, true).length > 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get all plots for the player
|
||||||
|
* @param plr to search for
|
||||||
|
* @param just_owner should we just search for owner? Or with rights?
|
||||||
|
*/
|
||||||
|
public Plot[] getPlots(World world, Player plr, boolean just_owner) {
|
||||||
|
ArrayList<Plot> pPlots = new ArrayList<>();
|
||||||
|
for(Plot plot : PlotMain.getPlots(world).values()) {
|
||||||
|
if(just_owner) {
|
||||||
|
if(plot.owner != null && plot.owner == plr.getUniqueId()) {
|
||||||
|
pPlots.add(plot);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if(plot.hasRights(plr)) {
|
||||||
|
pPlots.add(plot);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return (Plot[]) pPlots.toArray();
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Get all plots for the world
|
||||||
|
* @param World to get plots of
|
||||||
|
* @return Plot[] - array of plot objects in world
|
||||||
|
*/
|
||||||
|
public Plot[] getPlots(World world) {
|
||||||
|
return PlotMain.getWorldPlots(world);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Get all plot worlds
|
||||||
|
* @return World[] - array of plot worlds
|
||||||
|
*/
|
||||||
|
public World[] getPlotWorlds() {
|
||||||
|
return PlotMain.getPlotWorlds();
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Get if plot world
|
||||||
|
* @param world (to check if plot world)
|
||||||
|
* @return boolean (if plot world or not)
|
||||||
|
*/
|
||||||
|
public boolean isPlotWorld(World world) {
|
||||||
|
for (World w:PlotMain.getPlotWorlds()) {
|
||||||
|
if (w.equals(world))
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Get the settings for a world (settings bundled in PlotWorld class)
|
||||||
|
* @param world (to get settings of)
|
||||||
|
* @return PlotWorld class for ther world
|
||||||
|
* ! will return null if not a plot world
|
||||||
|
*/
|
||||||
|
public PlotWorld getWorldSettings(World world) {
|
||||||
|
return PlotMain.getWorldSettings(world);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get plot locations
|
||||||
|
* @param p
|
||||||
|
* @return [0] = bottomLc, [1] = topLoc, [2] = home
|
||||||
|
*/
|
||||||
|
public Location[] getLocations(Plot p) {
|
||||||
|
World world = Bukkit.getWorld(p.world);
|
||||||
|
return new Location[] {
|
||||||
|
PlotHelper.getPlotBottomLoc(world, p.id),
|
||||||
|
PlotHelper.getPlotTopLoc(world, p.id),
|
||||||
|
PlotHelper.getPlotHome(world, p.id)
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get home location
|
||||||
|
* @param p
|
||||||
|
* @return plot bottom location
|
||||||
|
*/
|
||||||
|
public Location getHomeLocation(Plot p) {
|
||||||
|
return PlotHelper.getPlotHome(getPlotWorld(), p.id);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get Bottom Location
|
||||||
|
* @param p
|
||||||
|
* @return plot bottom location
|
||||||
|
*/
|
||||||
|
public Location getBottomLocation(Plot p){
|
||||||
|
World world = Bukkit.getWorld(p.world);
|
||||||
|
return PlotHelper.getPlotBottomLoc(world, p.id);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get Top Location
|
||||||
|
* @param p
|
||||||
|
* @return plot top location
|
||||||
|
*/
|
||||||
|
public Location getTopLocation(Plot p){
|
||||||
|
World world = Bukkit.getWorld(p.world);
|
||||||
|
return PlotHelper.getPlotTopLoc(world, p.id);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check whether or not a player is in a plot
|
||||||
|
* @param player
|
||||||
|
* @return true if the player is in a plot, false if not-
|
||||||
|
*/
|
||||||
|
public boolean isInPlot(Player player) {
|
||||||
|
return PlayerFunctions.isInPlot(player);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Register a subcommand
|
||||||
|
* @param c
|
||||||
|
*/
|
||||||
|
public void registerCommand(SubCommand c) {
|
||||||
|
MainCommand.subCommands.add(c);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the plotworld object
|
||||||
|
* @return PlotWorld
|
||||||
|
*/
|
||||||
|
public World getPlotWorld() {
|
||||||
|
return this.plotWorld;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the plotMain class
|
||||||
|
* @return PlotMain Class
|
||||||
|
*/
|
||||||
|
public PlotMain getPlotMain() {
|
||||||
|
return this.plotMain;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the inserted plugin
|
||||||
|
* @return Plugin.
|
||||||
|
* @deprecated
|
||||||
|
*/
|
||||||
|
@SuppressWarnings("unused")
|
||||||
|
private JavaPlugin getPlugin() {
|
||||||
|
return this.plugin;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the player plot count
|
||||||
|
* @param player
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public int getPlayerPlotCount(World world, Player player) {
|
||||||
|
return PlayerFunctions.getPlayerPlotCount(world, player);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get a players plots
|
||||||
|
* @param player
|
||||||
|
* @return a set containing the players plots
|
||||||
|
*/
|
||||||
|
public Set<Plot> getPlayerPlots(World world, Player player) {
|
||||||
|
return PlayerFunctions.getPlayerPlots(world, player);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the allowed plot count for a player
|
||||||
|
* @param player
|
||||||
|
* @return the number of allowed plots
|
||||||
|
*/
|
||||||
|
public int getAllowedPlots(Player player) {
|
||||||
|
return PlayerFunctions.getAllowedPlots(player);
|
||||||
|
}
|
||||||
|
}
|
71
src/com/intellectualcrafters/plot/commands/Auto.java
Normal file
71
src/com/intellectualcrafters/plot/commands/Auto.java
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) IntellectualCrafters - 2014.
|
||||||
|
* You are not allowed to distribute and/or monetize any of our intellectual property.
|
||||||
|
* IntellectualCrafters is not affiliated with Mojang AB. Minecraft is a trademark of Mojang AB.
|
||||||
|
*
|
||||||
|
* >> File = Auto.java
|
||||||
|
* >> Generated by: Citymonstret at 2014-08-09 01:40
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.intellectualcrafters.plot.commands;
|
||||||
|
|
||||||
|
import com.intellectualcrafters.plot.C;
|
||||||
|
import com.intellectualcrafters.plot.PlayerFunctions;
|
||||||
|
import com.intellectualcrafters.plot.Plot;
|
||||||
|
import com.intellectualcrafters.plot.PlotHelper;
|
||||||
|
import com.intellectualcrafters.plot.PlotId;
|
||||||
|
import com.intellectualcrafters.plot.PlotMain;
|
||||||
|
|
||||||
|
import org.bukkit.World;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
@SuppressWarnings("deprecation")
|
||||||
|
public class Auto extends SubCommand {
|
||||||
|
|
||||||
|
public Auto() {
|
||||||
|
super("auto", "plots.auto", "Claim the nearest plot", "auto", "a", CommandCategory.CLAIMING);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean execute(Player plr, String ... args) {
|
||||||
|
World world;
|
||||||
|
if (PlotMain.getPlotWorlds().length==1)
|
||||||
|
world = PlotMain.getPlotWorlds()[0];
|
||||||
|
else {
|
||||||
|
if (PlotMain.isPlotWorld(plr.getWorld()))
|
||||||
|
world = plr.getWorld();
|
||||||
|
else {
|
||||||
|
PlayerFunctions.sendMessage(plr, C.NOT_IN_PLOT_WORLD);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
if(PlayerFunctions.getPlayerPlotCount(world, plr) >= PlayerFunctions.getAllowedPlots(plr)) {
|
||||||
|
PlayerFunctions.sendMessage(plr, C.CANT_CLAIM_MORE_PLOTS);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
boolean br = false;
|
||||||
|
int x = 0, z = 0, q = 100;
|
||||||
|
PlotId id;
|
||||||
|
while(!br) {
|
||||||
|
id = new PlotId(x,z);
|
||||||
|
if(PlotHelper.getPlot(world, id).owner == null) {
|
||||||
|
Plot plot = PlotHelper.getPlot(world, id);
|
||||||
|
Claim.claimPlot(plr, plot, true);
|
||||||
|
br = true;
|
||||||
|
}
|
||||||
|
if(z < q && (z - x) < q) {
|
||||||
|
z++;
|
||||||
|
} else if(x < q) {
|
||||||
|
x++;
|
||||||
|
z = q - 100;
|
||||||
|
} else {
|
||||||
|
q += 100;
|
||||||
|
x = q;
|
||||||
|
z = q;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
86
src/com/intellectualcrafters/plot/commands/Camera.java
Normal file
86
src/com/intellectualcrafters/plot/commands/Camera.java
Normal file
@ -0,0 +1,86 @@
|
|||||||
|
package com.intellectualcrafters.plot.commands;
|
||||||
|
|
||||||
|
import ca.mera.CameraAPI;
|
||||||
|
import ca.mera.CameraController;
|
||||||
|
import ca.mera.events.TravelEndEvent;
|
||||||
|
import com.intellectualcrafters.plot.*;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.World;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.event.EventHandler;
|
||||||
|
import org.bukkit.event.Listener;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by Citymonstret on 2014-08-15.
|
||||||
|
*/
|
||||||
|
public class Camera extends SubCommand implements Listener {
|
||||||
|
|
||||||
|
private CameraAPI api;
|
||||||
|
public Camera() {
|
||||||
|
super("camera", "plots.camera", "Go into camera mode", "camera", "c", CommandCategory.TELEPORT);
|
||||||
|
api = CameraAPI.getInstance();
|
||||||
|
travelers = new ArrayList<String>();
|
||||||
|
}
|
||||||
|
|
||||||
|
private ArrayList<String> travelers;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean execute(Player player, String ... args) {
|
||||||
|
if(!PlayerFunctions.isInPlot(player)) {
|
||||||
|
PlayerFunctions.sendMessage(player, C.NOT_IN_PLOT);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
api = CameraAPI.getInstance();
|
||||||
|
Plot plot = PlotHelper.getCurrentPlot(player.getLocation());
|
||||||
|
if(api.isTravelling(player)) {
|
||||||
|
api.stopTravel(player);
|
||||||
|
PlayerFunctions.sendMessage(player, C.CAMERA_STOPPED);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
api.travel(getController(player, plot));
|
||||||
|
PlayerFunctions.sendMessage(player, C.CAMERA_STARTED, plot.getId().x+";"+plot.getId().y);
|
||||||
|
travelers.add(player.getName());
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
public void onTravelEnded(TravelEndEvent event) {
|
||||||
|
if(travelers.contains(event.getPlayer().getName())) {
|
||||||
|
|
||||||
|
travelers.remove(event.getPlayer().getName());
|
||||||
|
PlayerFunctions.sendMessage(event.getPlayer(), C.CAMERA_STOPPED);
|
||||||
|
}
|
||||||
|
if(travelers.contains(event.getPlayer().getName())) {
|
||||||
|
event.getHandlers().bake();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public CameraController getController(Player player, Plot plot) {
|
||||||
|
World w = Bukkit.getWorld(plot.world);
|
||||||
|
PlotWorld plotworld = PlotMain.getWorldSettings(w);
|
||||||
|
int seconds = plotworld.PLOT_WIDTH * 5;
|
||||||
|
Location loc1, loc2, loc3, loc4, loc5;
|
||||||
|
double y = player.getLocation().getY();
|
||||||
|
Location bottomLoc = PlotHelper.getPlotBottomLoc(w, plot.id);
|
||||||
|
Location topLoc = PlotHelper.getPlotTopLoc(w, plot.id );
|
||||||
|
World world = bottomLoc.getWorld();
|
||||||
|
int maxX = Math.max(bottomLoc.getBlockX(), topLoc.getBlockX());
|
||||||
|
int maxZ = Math.max(bottomLoc.getBlockZ(), topLoc.getBlockZ());
|
||||||
|
int minX = Math.min(bottomLoc.getBlockX(), topLoc.getBlockX());
|
||||||
|
int minZ = Math.min(bottomLoc.getBlockZ(), topLoc.getBlockZ());
|
||||||
|
loc1 = new Location(world, maxX, y, maxZ);
|
||||||
|
loc2 = new Location(world, maxX, y, minZ);
|
||||||
|
loc3 = new Location(world, minX, y, minZ);
|
||||||
|
loc4 = new Location(world, minX, y, maxZ);
|
||||||
|
loc1.setYaw((3 / 4.0F * 360.0F) - 0.5F);
|
||||||
|
loc3.setYaw((1 / 4.0F * 360.0F) - 0.5F);
|
||||||
|
loc4.setYaw((2 / 4.0F * 360.0F) - 0.5F);
|
||||||
|
loc2.setYaw((0 / 4.0F * 360.0F) - 0.5F);
|
||||||
|
loc5 = loc1.clone();
|
||||||
|
CameraController controller = api.createController(player, seconds, loc1, loc2, loc3, loc4, loc5);
|
||||||
|
return controller;
|
||||||
|
}
|
||||||
|
}
|
61
src/com/intellectualcrafters/plot/commands/Claim.java
Normal file
61
src/com/intellectualcrafters/plot/commands/Claim.java
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) IntellectualCrafters - 2014.
|
||||||
|
* You are not allowed to distribute and/or monetize any of our intellectual property.
|
||||||
|
* IntellectualCrafters is not affiliated with Mojang AB. Minecraft is a trademark of Mojang AB.
|
||||||
|
*
|
||||||
|
* >> File = Claim.java
|
||||||
|
* >> Generated by: Citymonstret at 2014-08-09 01:41
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.intellectualcrafters.plot.commands;
|
||||||
|
|
||||||
|
import com.intellectualcrafters.plot.*;
|
||||||
|
import com.intellectualcrafters.plot.events.PlayerClaimPlotEvent;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author Citymonstret
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class Claim extends SubCommand{
|
||||||
|
|
||||||
|
public Claim() {
|
||||||
|
super(Command.CLAIM, "Claim the current plot you're standing on.", "claim", CommandCategory.CLAIMING);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean execute(Player plr, String ... args) {
|
||||||
|
if(!PlayerFunctions.isInPlot(plr)) {
|
||||||
|
PlayerFunctions.sendMessage(plr, C.NOT_IN_PLOT);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if(PlayerFunctions.getPlayerPlotCount(plr.getWorld() , plr) >= PlayerFunctions.getAllowedPlots(plr)) {
|
||||||
|
PlayerFunctions.sendMessage(plr, C.CANT_CLAIM_MORE_PLOTS);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
Plot plot = PlayerFunctions.getCurrentPlot(plr);
|
||||||
|
if(plot.hasOwner()) {
|
||||||
|
PlayerFunctions.sendMessage(plr, C.PLOT_IS_CLAIMED);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
claimPlot(plr, plot, false);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static boolean claimPlot(Player player, Plot plot, boolean teleport) {
|
||||||
|
PlayerClaimPlotEvent event = new PlayerClaimPlotEvent(player, plot);
|
||||||
|
Bukkit.getPluginManager().callEvent(event);
|
||||||
|
if(!event.isCancelled()) {
|
||||||
|
PlotHelper.createPlot(player, plot);
|
||||||
|
PlotHelper.setSign(player, plot);
|
||||||
|
PlayerFunctions.sendMessage(player, C.CLAIMED);
|
||||||
|
if(teleport) {
|
||||||
|
PlotMain.teleportPlayer(player, player.getLocation(), plot);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return event.isCancelled();
|
||||||
|
}
|
||||||
|
}
|
38
src/com/intellectualcrafters/plot/commands/Clear.java
Normal file
38
src/com/intellectualcrafters/plot/commands/Clear.java
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) IntellectualCrafters - 2014.
|
||||||
|
* You are not allowed to distribute and/or monetize any of our intellectual property.
|
||||||
|
* IntellectualCrafters is not affiliated with Mojang AB. Minecraft is a trademark of Mojang AB.
|
||||||
|
*
|
||||||
|
* >> File = Clear.java
|
||||||
|
* >> Generated by: Citymonstret at 2014-08-09 01:41
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.intellectualcrafters.plot.commands;
|
||||||
|
|
||||||
|
import com.intellectualcrafters.plot.database.DBFunc;
|
||||||
|
import com.intellectualcrafters.plot.PlotMain;
|
||||||
|
import com.intellectualcrafters.plot.PlayerFunctions;
|
||||||
|
import com.intellectualcrafters.plot.Plot;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by Citymonstret on 2014-08-01.
|
||||||
|
*/
|
||||||
|
public class Clear extends SubCommand {
|
||||||
|
|
||||||
|
public Clear() {
|
||||||
|
super(Command.CLEAR, "Clear a plot", "clear", CommandCategory.ACTIONS);
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public boolean execute(Player plr, String ... args) {
|
||||||
|
if(!PlayerFunctions.isInPlot(plr)) {
|
||||||
|
PlayerFunctions.sendMessage(plr, "You're not in a plot.");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
Plot plot = PlayerFunctions.getCurrentPlot(plr);
|
||||||
|
DBFunc.delete(plr.getWorld().getName(), plot);
|
||||||
|
PlotMain.removePlot(plr.getWorld().getName(), plot.id);
|
||||||
|
plot.clear(plr);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
137
src/com/intellectualcrafters/plot/commands/Command.java
Normal file
137
src/com/intellectualcrafters/plot/commands/Command.java
Normal file
@ -0,0 +1,137 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) IntellectualCrafters - 2014.
|
||||||
|
* You are not allowed to distribute and/or monetize any of our intellectual property.
|
||||||
|
* IntellectualCrafters is not affiliated with Mojang AB. Minecraft is a trademark of Mojang AB.
|
||||||
|
*
|
||||||
|
* >> File = Command.java
|
||||||
|
* >> Generated by: Citymonstret at 2014-08-09 01:41
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.intellectualcrafters.plot.commands;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by Citymonstret on 2014-08-03.
|
||||||
|
* @author Citymonstret
|
||||||
|
*/
|
||||||
|
public enum Command {
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
HELPERS("helpers", "hp"),
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
DENIED("denied", "dn"),
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
CLAIM("claim", "c"),
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
CLEAR("clear", "delete", new CommandPermission("plots.admin")),
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
DEBUG("debug", "database", new CommandPermission("plots.admin")),
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
HOME("home", "h"),
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
INFO("info", "i"),
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
LIST("list", "l"),
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
SET("set", "s"),
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
TP("tp", "tp");
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
private String command;
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
private String alias;
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
private CommandPermission permission;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param command
|
||||||
|
*/
|
||||||
|
Command(String command) {
|
||||||
|
this.command = command;
|
||||||
|
this.alias = command;
|
||||||
|
this.permission = new CommandPermission("plots." + command);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param command
|
||||||
|
* @param permission
|
||||||
|
*/
|
||||||
|
Command(String command, CommandPermission permission) {
|
||||||
|
this.command = command;
|
||||||
|
this.permission = permission;
|
||||||
|
this.alias = command;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param command
|
||||||
|
* @param alias
|
||||||
|
*/
|
||||||
|
Command(String command, String alias) {
|
||||||
|
this.command = command;
|
||||||
|
this.alias = alias;
|
||||||
|
this.permission = new CommandPermission("plots." + command);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param Command
|
||||||
|
* @param alias
|
||||||
|
* @param permission
|
||||||
|
*/
|
||||||
|
Command(String command, String alias, CommandPermission permission) {
|
||||||
|
this.command = command;
|
||||||
|
this.alias = alias;
|
||||||
|
this.permission = permission;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public String getCommand() {
|
||||||
|
return this.command;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public String getAlias() {
|
||||||
|
return this.alias;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public CommandPermission getPermission(){
|
||||||
|
return this.permission;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,40 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) IntellectualCrafters - 2014.
|
||||||
|
* You are not allowed to distribute and/or monetize any of our intellectual property.
|
||||||
|
* IntellectualCrafters is not affiliated with Mojang AB. Minecraft is a trademark of Mojang AB.
|
||||||
|
*
|
||||||
|
* >> File = CommandPermission.java
|
||||||
|
* >> Generated by: Citymonstret at 2014-08-09 01:41
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.intellectualcrafters.plot.commands;
|
||||||
|
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by Citymonstret on 2014-08-03.
|
||||||
|
* @author Citymonstret
|
||||||
|
*/
|
||||||
|
public class CommandPermission {
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
private String permission;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param permission
|
||||||
|
*/
|
||||||
|
public CommandPermission(String permission) {
|
||||||
|
this.permission = permission.toLowerCase();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param player
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public boolean hasPermission(Player player) {
|
||||||
|
return player.hasPermission(this.permission) || player.hasPermission("plots.admin");
|
||||||
|
}
|
||||||
|
}
|
117
src/com/intellectualcrafters/plot/commands/Debug.java
Normal file
117
src/com/intellectualcrafters/plot/commands/Debug.java
Normal file
@ -0,0 +1,117 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) IntellectualCrafters - 2014.
|
||||||
|
* You are not allowed to distribute and/or monetize any of our intellectual property.
|
||||||
|
* IntellectualCrafters is not affiliated with Mojang AB. Minecraft is a trademark of Mojang AB.
|
||||||
|
*
|
||||||
|
* >> File = Debug.java
|
||||||
|
* >> Generated by: Citymonstret at 2014-08-09 01:41
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.intellectualcrafters.plot.commands;
|
||||||
|
|
||||||
|
import com.intellectualcrafters.plot.*;
|
||||||
|
|
||||||
|
import org.bukkit.World;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Citymonstret
|
||||||
|
* \\SuperCharged Compiler made by Citymonstret\\
|
||||||
|
* ||#Compiler:ALPHA-1.0#########################
|
||||||
|
* ||#ST:Java(1.7.*)\impl(bukkit)->api(s[])######
|
||||||
|
* ||#Section:\Debug\############################
|
||||||
|
* ||##Debug->Debug.properties|Debug.txt#########
|
||||||
|
* ||############################################
|
||||||
|
* ||#Signed By:Citymonstret@IC##################
|
||||||
|
* \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
|
||||||
|
*/
|
||||||
|
public class Debug extends SubCommand{
|
||||||
|
|
||||||
|
//private extends SubCommand^Implements {Command, Information} from >>\\S.txt6\\
|
||||||
|
public Debug() {
|
||||||
|
super(Command.DEBUG, "Show debug information", "debug [msg]", CommandCategory.INFO);
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* This.
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean execute(Player plr, String ... args) {
|
||||||
|
PlotWorld plotworld = PlotMain.getWorldSettings(plr.getWorld());
|
||||||
|
if(args.length > 0 && args[0].equalsIgnoreCase("msg")) {
|
||||||
|
StringBuilder msg = new StringBuilder();
|
||||||
|
for(C c : C.values()) {
|
||||||
|
msg.append(c.s() + "\n");
|
||||||
|
}
|
||||||
|
PlayerFunctions.sendMessage(plr, msg.toString());
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
StringBuilder information;
|
||||||
|
String header, line, section;
|
||||||
|
/**
|
||||||
|
* {$notnull || compile:: \\Debug:Captions\\}
|
||||||
|
*/
|
||||||
|
{
|
||||||
|
information = new StringBuilder();
|
||||||
|
header = C.DEUBG_HEADER.s();
|
||||||
|
line = C.DEBUG_LINE.s();
|
||||||
|
section = C.DEBUG_SECTION.s();
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* {||direct:: load: debug::I>Captions::trsl}
|
||||||
|
* \\
|
||||||
|
* if(missing) set(default) -> this->(){}
|
||||||
|
* \\
|
||||||
|
* echo line->line(Compiler.cpp -> lineCompiler);
|
||||||
|
* when finished: now = this();
|
||||||
|
* now(getter)->setter(this())->{
|
||||||
|
* "string" = getter(this);
|
||||||
|
* setter(string) = getter(this->setter);
|
||||||
|
* }
|
||||||
|
* when ^ finished compile;
|
||||||
|
* if(^compile failed -> |this->failed.|tests->failed.|
|
||||||
|
* ||run test {this->test}|on fail(action(){return FAILED})|
|
||||||
|
*/
|
||||||
|
{
|
||||||
|
StringBuilder worlds = new StringBuilder("");
|
||||||
|
for (World world: PlotMain.getPlotWorlds())
|
||||||
|
worlds.append(world.getName()+" ");
|
||||||
|
information.append(header);
|
||||||
|
information.append(getSection(section, "Lag / TPS"));
|
||||||
|
information.append(getLine(line, "Ticks Per Second", Lag.getTPS()));
|
||||||
|
information.append(getLine(line, "Lag Percentage", (int) Lag.getPercentage() + "%"));
|
||||||
|
information.append(getLine(line, "TPS Percentage", (int) Lag.getFullPercentage() + "%"));
|
||||||
|
information.append(getSection(section, "PlotWorld"));
|
||||||
|
information.append(getLine(line, "Plot Worlds", worlds));
|
||||||
|
information.append(getLine(line, "Owned Plots", PlotMain.getPlots().size()));
|
||||||
|
information.append(getLine(line, "PlotWorld Size", PlotHelper.getWorldFolderSize() + "MB"));
|
||||||
|
information.append(getLine(line, "Entities", PlotHelper.getEntities(plr.getWorld())));
|
||||||
|
information.append(getLine(line, "Loaded Tile Entities", PlotHelper.getTileEntities(plr.getWorld())));
|
||||||
|
information.append(getLine(line, "Loaded Chunks", PlotHelper.getLoadedChunks(plr.getWorld())));
|
||||||
|
information.append(getSection(section, "RAM"));
|
||||||
|
information.append(getLine(line, "Free Ram", RUtils.getFreeRam() + "MB"));
|
||||||
|
information.append(getLine(line, "Total Ram", RUtils.getTotalRam() + "MB"));
|
||||||
|
information.append(getSection(section, "Messages"));
|
||||||
|
information.append(getLine(line, "Total Messages", C.values().length));
|
||||||
|
information.append(getLine(line, "View all captions", "/plot debug msg"));
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* {function:: SEND_MESSAGE |local player -> plr|local string -> information.toString())}
|
||||||
|
*/
|
||||||
|
{
|
||||||
|
PlayerFunctions.sendMessage(plr, information.toString());
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
private String getSection(String line, String val) {
|
||||||
|
return line.replaceAll("%val%", val) + "\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
private String getLine(String line, String var, Object val) {
|
||||||
|
return line.replaceAll("%var%", var).replaceAll("%val%", "" + val) + "\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
125
src/com/intellectualcrafters/plot/commands/Denied.java
Normal file
125
src/com/intellectualcrafters/plot/commands/Denied.java
Normal file
@ -0,0 +1,125 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) IntellectualCrafters - 2014.
|
||||||
|
* You are not allowed to distribute and/or monetize any of our intellectual property.
|
||||||
|
* IntellectualCrafters is not affiliated with Mojang AB. Minecraft is a trademark of Mojang AB.
|
||||||
|
*
|
||||||
|
* >> File = Denied.java
|
||||||
|
* >> Generated by: Citymonstret at 2014-08-09 01:41
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.intellectualcrafters.plot.commands;
|
||||||
|
|
||||||
|
import com.intellectualcrafters.plot.C;
|
||||||
|
import com.intellectualcrafters.plot.PlayerFunctions;
|
||||||
|
import com.intellectualcrafters.plot.Plot;
|
||||||
|
import com.intellectualcrafters.plot.database.DBFunc;
|
||||||
|
import com.intellectualcrafters.plot.events.PlayerPlotDeniedEvent;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.OfflinePlayer;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by Citymonstret on 2014-08-03.
|
||||||
|
*/
|
||||||
|
@SuppressWarnings("deprecated")
|
||||||
|
public class Denied extends SubCommand{
|
||||||
|
|
||||||
|
public Denied() {
|
||||||
|
super(Command.DENIED, "Manage plot helpers", "denied {add|remove} {player}", CommandCategory.ACTIONS);
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("deprecated")
|
||||||
|
private boolean hasBeenOnServer(String name) {
|
||||||
|
Player plr;
|
||||||
|
if((plr = Bukkit.getPlayer(name)) == null) {
|
||||||
|
OfflinePlayer oplr = Bukkit.getOfflinePlayer(name);
|
||||||
|
if(oplr == null) return false;
|
||||||
|
else return oplr.hasPlayedBefore();
|
||||||
|
} else {
|
||||||
|
if(plr.isOnline()) return true;
|
||||||
|
else return plr.hasPlayedBefore();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean execute(Player plr, String ... args) {
|
||||||
|
if(args.length < 2) {
|
||||||
|
PlayerFunctions.sendMessage(plr, C.DENIED_NEED_ARGUMENT);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if(!PlayerFunctions.isInPlot(plr)) {
|
||||||
|
PlayerFunctions.sendMessage(plr, C.NOT_IN_PLOT);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
Plot plot = PlayerFunctions.getCurrentPlot(plr);
|
||||||
|
if(plot.owner == null || !plot.hasRights(plr)) {
|
||||||
|
PlayerFunctions.sendMessage(plr, C.NO_PERMISSION);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if(args[0].equalsIgnoreCase("add")) {
|
||||||
|
if(args[1].equalsIgnoreCase("*")) {
|
||||||
|
UUID uuid = DBFunc.everyone;
|
||||||
|
plot.addDenied(uuid);
|
||||||
|
DBFunc.setDenied(plr.getWorld().getName(), plot, Bukkit.getOfflinePlayer(args[1]));
|
||||||
|
PlayerFunctions.sendMessage(plr, C.DENIED_ADDED);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if(!hasBeenOnServer(args[1])) {
|
||||||
|
PlayerFunctions.sendMessage(plr, C.PLAYER_HAS_NOT_BEEN_ON);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
UUID uuid = null;
|
||||||
|
if(Bukkit.getPlayer(args[1]) != null && Bukkit.getPlayer(args[1]).isOnline())
|
||||||
|
uuid = Bukkit.getPlayer(args[1]).getUniqueId();
|
||||||
|
else
|
||||||
|
uuid = Bukkit.getOfflinePlayer(args[1]).getUniqueId();
|
||||||
|
plot.addDenied(uuid);
|
||||||
|
DBFunc.setDenied(plr.getWorld().getName(), plot, Bukkit.getOfflinePlayer(args[1]));
|
||||||
|
PlayerPlotDeniedEvent event = new PlayerPlotDeniedEvent(plr, plot, uuid, true);
|
||||||
|
Bukkit.getPluginManager().callEvent(event);
|
||||||
|
PlayerFunctions.sendMessage(plr, C.DENIED_ADDED);
|
||||||
|
if(Bukkit.getPlayer(uuid) != null && Bukkit.getPlayer(uuid).isOnline()) {
|
||||||
|
Plot pl = PlayerFunctions.getCurrentPlot(Bukkit.getPlayer((uuid)));
|
||||||
|
if(pl.id == plot.id) {
|
||||||
|
PlayerFunctions.sendMessage(Bukkit.getPlayer(uuid), C.YOU_BE_DENIED);
|
||||||
|
Bukkit.getPlayer(uuid).teleport(Bukkit.getPlayer(uuid).getWorld().getSpawnLocation());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if(args[0].equalsIgnoreCase("remove")) {
|
||||||
|
if(args[1].equalsIgnoreCase("*")) {
|
||||||
|
UUID uuid = DBFunc.everyone;
|
||||||
|
if(!plot.denied.contains(uuid)) {
|
||||||
|
PlayerFunctions.sendMessage(plr, C.WAS_NOT_ADDED);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
plot.removeDenied(uuid);
|
||||||
|
DBFunc.removeDenied(plr.getWorld().getName(), plot, Bukkit.getOfflinePlayer(args[1]));
|
||||||
|
PlayerFunctions.sendMessage(plr, C.DENIED_REMOVED);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if(!hasBeenOnServer(args[1])) {
|
||||||
|
PlayerFunctions.sendMessage(plr, C.PLAYER_HAS_NOT_BEEN_ON);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
UUID uuid = null;
|
||||||
|
if(Bukkit.getPlayer(args[1]).isOnline())
|
||||||
|
uuid = Bukkit.getPlayer(args[1]).getUniqueId();
|
||||||
|
else
|
||||||
|
uuid = Bukkit.getOfflinePlayer(args[1]).getUniqueId();
|
||||||
|
if(!plot.denied.contains(uuid)) {
|
||||||
|
PlayerFunctions.sendMessage(plr, C.WAS_NOT_ADDED);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
plot.removeDenied(uuid);
|
||||||
|
DBFunc.removeDenied(plr.getWorld().getName(), plot, Bukkit.getOfflinePlayer(args[1]));
|
||||||
|
PlayerPlotDeniedEvent event = new PlayerPlotDeniedEvent(plr, plot, uuid, false);
|
||||||
|
Bukkit.getPluginManager().callEvent(event);
|
||||||
|
PlayerFunctions.sendMessage(plr, C.DENIED_REMOVED);
|
||||||
|
} else {
|
||||||
|
PlayerFunctions.sendMessage(plr, C.DENIED_NEED_ARGUMENT);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
22
src/com/intellectualcrafters/plot/commands/Help.java
Normal file
22
src/com/intellectualcrafters/plot/commands/Help.java
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) IntellectualCrafters - 2014.
|
||||||
|
* You are not allowed to distribute and/or monetize any of our intellectual property.
|
||||||
|
* IntellectualCrafters is not affiliated with Mojang AB. Minecraft is a trademark of Mojang AB.
|
||||||
|
*
|
||||||
|
* >> File = Help.java
|
||||||
|
* >> Generated by: Citymonstret at 2014-08-11 17:32
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.intellectualcrafters.plot.commands;
|
||||||
|
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by Citymonstret on 2014-08-11.
|
||||||
|
*/
|
||||||
|
public class Help extends SubCommand {
|
||||||
|
public Help() {
|
||||||
|
super("help", "", "Get this help menu", "help", "he", SubCommand.CommandCategory.INFO);
|
||||||
|
}
|
||||||
|
public boolean execute(Player plr, String ... args) { return false; }
|
||||||
|
}
|
115
src/com/intellectualcrafters/plot/commands/Helpers.java
Normal file
115
src/com/intellectualcrafters/plot/commands/Helpers.java
Normal file
@ -0,0 +1,115 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) IntellectualCrafters - 2014.
|
||||||
|
* You are not allowed to distribute and/or monetize any of our intellectual property.
|
||||||
|
* IntellectualCrafters is not affiliated with Mojang AB. Minecraft is a trademark of Mojang AB.
|
||||||
|
*
|
||||||
|
* >> File = Helpers.java
|
||||||
|
* >> Generated by: Citymonstret at 2014-08-09 01:41
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.intellectualcrafters.plot.commands;
|
||||||
|
|
||||||
|
import com.intellectualcrafters.plot.C;
|
||||||
|
import com.intellectualcrafters.plot.PlayerFunctions;
|
||||||
|
import com.intellectualcrafters.plot.Plot;
|
||||||
|
import com.intellectualcrafters.plot.database.DBFunc;
|
||||||
|
import com.intellectualcrafters.plot.events.PlayerPlotHelperEvent;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.OfflinePlayer;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
@SuppressWarnings("deprecation")
|
||||||
|
public class Helpers extends SubCommand{
|
||||||
|
|
||||||
|
public Helpers() {
|
||||||
|
super(Command.HELPERS, "Manage plot helpers", "helpers {add|remove} {player}", CommandCategory.ACTIONS);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private boolean hasBeenOnServer(String name) {
|
||||||
|
Player plr;
|
||||||
|
if((plr = Bukkit.getPlayer(name)) == null) {
|
||||||
|
OfflinePlayer oplr = Bukkit.getOfflinePlayer(name);
|
||||||
|
if(oplr == null) return false;
|
||||||
|
else return oplr.hasPlayedBefore();
|
||||||
|
} else {
|
||||||
|
if(plr.isOnline()) return true;
|
||||||
|
else return plr.hasPlayedBefore();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean execute(Player plr, String ... args) {
|
||||||
|
if(args.length < 2) {
|
||||||
|
PlayerFunctions.sendMessage(plr, C.HELPER_NEED_ARGUMENT);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if(!PlayerFunctions.isInPlot(plr)) {
|
||||||
|
PlayerFunctions.sendMessage(plr, C.NOT_IN_PLOT);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
Plot plot = PlayerFunctions.getCurrentPlot(plr);
|
||||||
|
if(plot.owner == null || !plot.hasRights(plr)) {
|
||||||
|
PlayerFunctions.sendMessage(plr, C.NO_PERMISSION);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if(args[0].equalsIgnoreCase("add")) {
|
||||||
|
if(args[1].equalsIgnoreCase("*")) {
|
||||||
|
UUID uuid = DBFunc.everyone;
|
||||||
|
plot.addHelper(uuid);
|
||||||
|
DBFunc.setHelper(plr.getWorld().getName(), plot, Bukkit.getOfflinePlayer(args[1]));
|
||||||
|
PlayerFunctions.sendMessage(plr, C.HELPER_ADDED);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if(!hasBeenOnServer(args[1])) {
|
||||||
|
PlayerFunctions.sendMessage(plr, C.PLAYER_HAS_NOT_BEEN_ON);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
UUID uuid = null;
|
||||||
|
if(Bukkit.getPlayer(args[1]) != null && Bukkit.getPlayer(args[1]).isOnline())
|
||||||
|
uuid = Bukkit.getPlayer(args[1]).getUniqueId();
|
||||||
|
else
|
||||||
|
uuid = Bukkit.getOfflinePlayer(args[1]).getUniqueId();
|
||||||
|
plot.addHelper(uuid);
|
||||||
|
DBFunc.setHelper(plr.getWorld().getName(), plot, Bukkit.getOfflinePlayer(args[1]));
|
||||||
|
PlayerPlotHelperEvent event = new PlayerPlotHelperEvent(plr, plot, uuid, true);
|
||||||
|
Bukkit.getPluginManager().callEvent(event);
|
||||||
|
PlayerFunctions.sendMessage(plr, C.HELPER_ADDED);
|
||||||
|
} else if(args[0].equalsIgnoreCase("remove")) {
|
||||||
|
if(args[1].equalsIgnoreCase("*")) {
|
||||||
|
UUID uuid = DBFunc.everyone;
|
||||||
|
if(!plot.helpers.contains(uuid)) {
|
||||||
|
PlayerFunctions.sendMessage(plr, C.WAS_NOT_ADDED);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
plot.removeHelper(uuid);
|
||||||
|
DBFunc.removeHelper(plr.getWorld().getName(), plot, Bukkit.getOfflinePlayer(args[1]));
|
||||||
|
PlayerFunctions.sendMessage(plr, C.HELPER_REMOVED);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if(!hasBeenOnServer(args[1])) {
|
||||||
|
PlayerFunctions.sendMessage(plr, C.PLAYER_HAS_NOT_BEEN_ON);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
UUID uuid = null;
|
||||||
|
if(Bukkit.getPlayer(args[1]).isOnline())
|
||||||
|
uuid = Bukkit.getPlayer(args[1]).getUniqueId();
|
||||||
|
else
|
||||||
|
uuid = Bukkit.getOfflinePlayer(args[1]).getUniqueId();
|
||||||
|
if(!plot.helpers.contains(uuid)) {
|
||||||
|
PlayerFunctions.sendMessage(plr, C.WAS_NOT_ADDED);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
plot.removeHelper(uuid);
|
||||||
|
DBFunc.removeHelper(plr.getWorld().getName(), plot, Bukkit.getOfflinePlayer(args[1]));
|
||||||
|
PlayerPlotHelperEvent event = new PlayerPlotHelperEvent(plr, plot, uuid, false);
|
||||||
|
Bukkit.getPluginManager().callEvent(event);
|
||||||
|
PlayerFunctions.sendMessage(plr, C.HELPER_REMOVED);
|
||||||
|
} else {
|
||||||
|
PlayerFunctions.sendMessage(plr, C.HELPER_NEED_ARGUMENT);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
80
src/com/intellectualcrafters/plot/commands/Home.java
Normal file
80
src/com/intellectualcrafters/plot/commands/Home.java
Normal file
@ -0,0 +1,80 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) IntellectualCrafters - 2014.
|
||||||
|
* You are not allowed to distribute and/or monetize any of our intellectual property.
|
||||||
|
* IntellectualCrafters is not affiliated with Mojang AB. Minecraft is a trademark of Mojang AB.
|
||||||
|
*
|
||||||
|
* >> File = Home.java
|
||||||
|
* >> Generated by: Citymonstret at 2014-08-09 01:41
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.intellectualcrafters.plot.commands;
|
||||||
|
|
||||||
|
import com.intellectualcrafters.plot.*;
|
||||||
|
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author Citymonstret
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class Home extends SubCommand{
|
||||||
|
|
||||||
|
public Home() {
|
||||||
|
super(Command.HOME, "Go to your plot", "home {id|alias}", CommandCategory.TELEPORT);
|
||||||
|
}
|
||||||
|
private Plot isAlias(String a) {
|
||||||
|
for(Plot p : PlotMain.getPlots()) {
|
||||||
|
if(p.settings.getAlias().length() > 0 && p.settings.getAlias().equalsIgnoreCase(a))
|
||||||
|
return p;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public boolean execute(Player plr, String ... args) {
|
||||||
|
|
||||||
|
// TODO plot names / alias
|
||||||
|
|
||||||
|
Plot[] plots = PlotMain.getPlots(plr).toArray(new Plot[0]);
|
||||||
|
if(plots.length == 1) {
|
||||||
|
PlotMain.teleportPlayer(plr, plr.getLocation(), plots[0]);
|
||||||
|
return true;
|
||||||
|
} else if(plots.length > 1) {
|
||||||
|
if(args.length < 1) {
|
||||||
|
PlayerFunctions.sendMessage(plr, C.NEED_PLOT_NUMBER);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
int id = 0;
|
||||||
|
try {
|
||||||
|
id = Integer.parseInt(args[0]);
|
||||||
|
} catch (Exception e) {
|
||||||
|
|
||||||
|
Plot temp;
|
||||||
|
if((temp = isAlias(args[0])) != null) {
|
||||||
|
if (temp.hasOwner()) {
|
||||||
|
if (temp.getOwner().equals(plr.getUniqueId())) {
|
||||||
|
PlotMain.teleportPlayer(plr, plr.getLocation(), temp);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
PlayerFunctions.sendMessage(plr, C.NOT_YOUR_PLOT);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
PlayerFunctions.sendMessage(plr, C.NOT_VALID_NUMBER);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if(id > (plots.length) || id < 1) {
|
||||||
|
PlayerFunctions.sendMessage(plr, C.NOT_VALID_NUMBER);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
PlotMain.teleportPlayer(plr, plr.getLocation(), plots[id - 1]);
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
PlayerFunctions.sendMessage(plr, C.NO_PLOTS);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
110
src/com/intellectualcrafters/plot/commands/Info.java
Normal file
110
src/com/intellectualcrafters/plot/commands/Info.java
Normal file
@ -0,0 +1,110 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) IntellectualCrafters - 2014.
|
||||||
|
* You are not allowed to distribute and/or monetize any of our intellectual property.
|
||||||
|
* IntellectualCrafters is not affiliated with Mojang AB. Minecraft is a trademark of Mojang AB.
|
||||||
|
*
|
||||||
|
* >> File = Info.java
|
||||||
|
* >> Generated by: Citymonstret at 2014-08-09 01:41
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.intellectualcrafters.plot.commands;
|
||||||
|
|
||||||
|
import com.intellectualcrafters.plot.*;
|
||||||
|
import com.intellectualcrafters.plot.database.DBFunc;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.OfflinePlayer;
|
||||||
|
import org.bukkit.World;
|
||||||
|
import org.bukkit.block.Biome;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author Citymonstret
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class Info extends SubCommand{
|
||||||
|
|
||||||
|
public Info() {
|
||||||
|
super(Command.INFO, "Display plot info", "info", CommandCategory.INFO);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean execute(Player player, String ... args) {
|
||||||
|
if(!PlayerFunctions.isInPlot(player)) {
|
||||||
|
PlayerFunctions.sendMessage(player, C.NOT_IN_PLOT);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ||
|
||||||
|
Plot plot = PlayerFunctions.getCurrentPlot(player);
|
||||||
|
|
||||||
|
boolean hasOwner = plot.hasOwner();
|
||||||
|
boolean containsEveryone;
|
||||||
|
|
||||||
|
// Wildcard player {added}
|
||||||
|
{
|
||||||
|
if(plot.helpers == null) {
|
||||||
|
containsEveryone = false;
|
||||||
|
} else {
|
||||||
|
containsEveryone = plot.helpers.contains(DBFunc.everyone);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Unclaimed?
|
||||||
|
if(!hasOwner && !containsEveryone) {
|
||||||
|
PlayerFunctions.sendMessage(player, C.PLOT_INFO_UNCLAIMED, plot.id.x+";"+plot.id.y);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Helpers :D
|
||||||
|
StringBuilder helpers = new StringBuilder();
|
||||||
|
|
||||||
|
String owner = "none";
|
||||||
|
if(plot.owner != null)
|
||||||
|
owner = Bukkit.getOfflinePlayer(plot.owner).getName();
|
||||||
|
|
||||||
|
String info = C.PLOT_INFO.s();
|
||||||
|
info = info.replaceAll("%alias%", plot.settings.getAlias().length() > 0 ? plot.settings.getAlias() : "none");
|
||||||
|
info = info.replaceAll("%id%", plot.id.x+";"+plot.id.y);
|
||||||
|
info = info.replaceAll("%biome%", getBiomeAt(plot).toString());
|
||||||
|
info = info.replaceAll("%owner%", owner);
|
||||||
|
info = info.replaceAll("%time%", plot.settings.getChangeTime() ? plot.settings.getTime() + "" : "default");
|
||||||
|
info = info.replaceAll("%weather%", plot.settings.getRain() ? "rain" : "default");
|
||||||
|
info = info.replaceAll("%helpers%", getPlayerList(plot.helpers));
|
||||||
|
info = info.replaceAll("%denied%", getPlayerList(plot.denied));
|
||||||
|
PlayerFunctions.sendMessage(player, info);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
private String getPlayerList(ArrayList<UUID> l) {
|
||||||
|
if(l == null || l.size() < 1) return " none";
|
||||||
|
String c = C.PLOT_USER_LIST.s();
|
||||||
|
StringBuilder list = new StringBuilder();
|
||||||
|
for(int x = 0; x < l.size(); x++) {
|
||||||
|
if(x + 1 == l.size())
|
||||||
|
list.append(c.replace("%user%", getPlayerName(l.get(x))).replace(",", ""));
|
||||||
|
else
|
||||||
|
list.append(c.replace("%user%", getPlayerName(l.get(x))));
|
||||||
|
}
|
||||||
|
return list.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
private String getPlayerName(UUID uuid) {
|
||||||
|
if(uuid == null) return "unknown";
|
||||||
|
if(uuid.equals(DBFunc.everyone) || uuid.toString().equalsIgnoreCase(DBFunc.everyone.toString()))
|
||||||
|
return "everyone";
|
||||||
|
OfflinePlayer plr = Bukkit.getOfflinePlayer(uuid);
|
||||||
|
if(plr == null) return "unknown";
|
||||||
|
return plr.getName();
|
||||||
|
}
|
||||||
|
|
||||||
|
private Biome getBiomeAt(Plot plot) {
|
||||||
|
World w = Bukkit.getWorld(plot.world);
|
||||||
|
Location bl = PlotHelper.getPlotTopLoc(w, plot.id);
|
||||||
|
return bl.getBlock().getBiome();
|
||||||
|
}
|
||||||
|
}
|
59
src/com/intellectualcrafters/plot/commands/Inventory.java
Normal file
59
src/com/intellectualcrafters/plot/commands/Inventory.java
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) IntellectualCrafters - 2014.
|
||||||
|
* You are not allowed to distribute and/or monetize any of our intellectual property.
|
||||||
|
* IntellectualCrafters is not affiliated with Mojang AB. Minecraft is a trademark of Mojang AB.
|
||||||
|
*
|
||||||
|
* >> File = Inventory.java
|
||||||
|
* >> Generated by: Citymonstret at 2014-08-10 13:57
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.intellectualcrafters.plot.commands;
|
||||||
|
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.ChatColor;
|
||||||
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
import org.bukkit.inventory.meta.ItemMeta;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
public class Inventory extends SubCommand {
|
||||||
|
|
||||||
|
public Inventory() {
|
||||||
|
super("inventory", "plots.inventory", "Open a command inventory", "inventory", "inv", CommandCategory.INFO);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean execute(final Player plr, String ... args) {
|
||||||
|
ArrayList<SubCommand> cmds = new ArrayList<>();
|
||||||
|
for(SubCommand cmd : MainCommand.subCommands) {
|
||||||
|
if(cmd.permission.hasPermission(plr))
|
||||||
|
cmds.add(cmd);
|
||||||
|
}
|
||||||
|
int size = 9 * (int) Math.ceil(cmds.size() / 9.0);
|
||||||
|
org.bukkit.inventory.Inventory inventory = Bukkit.createInventory(null, size, "PlotSquared Commands");
|
||||||
|
for(SubCommand cmd : cmds) {
|
||||||
|
inventory.addItem(getItem(cmd));
|
||||||
|
}
|
||||||
|
plr.openInventory(inventory);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
private ItemStack getItem(final SubCommand cmd) {
|
||||||
|
ItemStack stack = new ItemStack(Material.COMMAND);
|
||||||
|
ItemMeta meta = stack.getItemMeta();
|
||||||
|
{
|
||||||
|
meta.setDisplayName(ChatColor.GREEN + cmd.cmd + ChatColor.DARK_GRAY + " [" + ChatColor.GREEN + cmd.alias + ChatColor.DARK_GRAY + "]");
|
||||||
|
meta.setLore(new ArrayList<String>() {
|
||||||
|
{
|
||||||
|
add(ChatColor.RED + "Category: " + ChatColor.GOLD + cmd.category.toString());
|
||||||
|
add(ChatColor.RED + "Description: " + ChatColor.GOLD + cmd.description);
|
||||||
|
add(ChatColor.RED + "Usage: " + ChatColor.GOLD + "/plot " + cmd.usage);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
stack.setItemMeta(meta);
|
||||||
|
return stack;
|
||||||
|
}
|
||||||
|
}
|
158
src/com/intellectualcrafters/plot/commands/MainCommand.java
Normal file
158
src/com/intellectualcrafters/plot/commands/MainCommand.java
Normal file
@ -0,0 +1,158 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) IntellectualCrafters - 2014.
|
||||||
|
* You are not allowed to distribute and/or monetize any of our intellectual property.
|
||||||
|
* IntellectualCrafters is not affiliated with Mojang AB. Minecraft is a trademark of Mojang AB.
|
||||||
|
*
|
||||||
|
* >> File = MainCommand.java
|
||||||
|
* >> Generated by: Citymonstret at 2014-08-09 01:42
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.intellectualcrafters.plot.commands;
|
||||||
|
|
||||||
|
import com.intellectualcrafters.plot.C;
|
||||||
|
import com.intellectualcrafters.plot.PlayerFunctions;
|
||||||
|
import com.intellectualcrafters.plot.PlotMain;
|
||||||
|
|
||||||
|
import org.bukkit.ChatColor;
|
||||||
|
import org.bukkit.command.Command;
|
||||||
|
import org.bukkit.command.CommandExecutor;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* PlotMain command class
|
||||||
|
* @author Citymonstret
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class MainCommand implements CommandExecutor{
|
||||||
|
|
||||||
|
private static SubCommand[] _subCommands = new SubCommand[] {
|
||||||
|
new Claim(),
|
||||||
|
new Auto(),
|
||||||
|
new Home(),
|
||||||
|
new Visit(),
|
||||||
|
new TP(),
|
||||||
|
new Set(),
|
||||||
|
new Clear(),
|
||||||
|
new SetOwner(),
|
||||||
|
new Denied(),
|
||||||
|
new Helpers(),
|
||||||
|
new Info(),
|
||||||
|
new list(),
|
||||||
|
new Help(),
|
||||||
|
new Debug(),
|
||||||
|
new Schematic(),
|
||||||
|
new plugin(),
|
||||||
|
new Inventory(),
|
||||||
|
new Reload()
|
||||||
|
};
|
||||||
|
|
||||||
|
public static ArrayList<SubCommand> subCommands = new ArrayList<SubCommand>() { {
|
||||||
|
addAll(Arrays.asList(_subCommands));
|
||||||
|
}};
|
||||||
|
|
||||||
|
public static boolean no_permission(Player player) {
|
||||||
|
PlayerFunctions.sendMessage(player, C.NO_PERMISSION);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onCommand(CommandSender sender, Command cmd, String commandLabel,
|
||||||
|
String[] args) {
|
||||||
|
if(!(sender instanceof Player)) {
|
||||||
|
if (args.length>0) {
|
||||||
|
if (args[0].equalsIgnoreCase("reload")) {
|
||||||
|
new Reload().executeConsole(args);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
PlotMain.sendConsoleSenderMessage(C.PREFIX.s()+C.HELP_HEADER.s());
|
||||||
|
PlotMain.sendConsoleSenderMessage("&6/plots reload &c-&6 reloads the plugin");
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
Player player = (Player) sender;
|
||||||
|
if(!player.hasPermission("plots.use")) {
|
||||||
|
return no_permission(player);
|
||||||
|
}
|
||||||
|
if(args.length < 1 || (args.length >= 1 && (args[0].equalsIgnoreCase("help") || args[0].equalsIgnoreCase("he"))) )
|
||||||
|
{
|
||||||
|
if(args.length < 2) {
|
||||||
|
StringBuilder builder = new StringBuilder();
|
||||||
|
builder.append(C.HELP_INFO.s());
|
||||||
|
for(SubCommand.CommandCategory category : SubCommand.CommandCategory.values()) {
|
||||||
|
builder.append("\n" + C.HELP_INFO_ITEM.s().replaceAll("%category%", category.toString().toLowerCase()).replaceAll("%category_desc%", category.toString()));
|
||||||
|
}
|
||||||
|
PlayerFunctions.sendMessage(player, builder.toString());
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
String cat = args[1];
|
||||||
|
SubCommand.CommandCategory cato = null;
|
||||||
|
for(SubCommand.CommandCategory category : SubCommand.CommandCategory.values()) {
|
||||||
|
if(cat.equalsIgnoreCase(category.toString())){
|
||||||
|
cato = category;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(cato == null) {
|
||||||
|
StringBuilder builder = new StringBuilder();
|
||||||
|
builder.append(C.HELP_INFO.s());
|
||||||
|
for(SubCommand.CommandCategory category : SubCommand.CommandCategory.values()) {
|
||||||
|
builder.append("\n" + C.HELP_INFO_ITEM.s().replaceAll("%category%", category.toString().toLowerCase()).replaceAll("%category_desc%", category.toString()));
|
||||||
|
}
|
||||||
|
PlayerFunctions.sendMessage(player, builder.toString());
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
StringBuilder help = new StringBuilder();
|
||||||
|
for(String string : helpMenu(player, cato))
|
||||||
|
help.append(string + "\n");
|
||||||
|
PlayerFunctions.sendMessage(player, help.toString());
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
for(SubCommand command : subCommands) {
|
||||||
|
if(command.cmd.equalsIgnoreCase(args[0]) || command.alias.equalsIgnoreCase(args[0])) {
|
||||||
|
String[] arguments = new String[args.length - 1];
|
||||||
|
for(int x = 1; x < args.length; x++)
|
||||||
|
arguments[x - 1] = args[x];
|
||||||
|
if(command.permission.hasPermission(player))
|
||||||
|
return command.execute(player, arguments);
|
||||||
|
else return no_permission(player);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
PlayerFunctions.sendMessage(player, C.NOT_VALID_SUBCOMMAND);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static ArrayList<String> helpMenu(Player player, final SubCommand.CommandCategory category) {
|
||||||
|
ArrayList<String> help = new ArrayList<String>(){
|
||||||
|
{
|
||||||
|
add(t(C.HELP_HEADER.s()));
|
||||||
|
add(t(C.HELP_CATEGORY.s().replaceAll("%category%", category.toString())));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
for (SubCommand cmd : subCommands) {
|
||||||
|
if (cmd.permission.hasPermission(player) && cmd.category == category) {
|
||||||
|
String s = t(C.HELP_PAGE.s());
|
||||||
|
s = s.replaceAll("%alias%", cmd.alias);
|
||||||
|
s = s.replaceAll("%usage%", "/plot " + cmd.usage);
|
||||||
|
s = s.replaceAll("%cmd%", cmd.cmd);
|
||||||
|
s = s.replaceAll("%desc%", cmd.description);
|
||||||
|
help.add(s);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (help.size() < 2) {
|
||||||
|
help.add(t(C.NO_COMMANDS.s()));
|
||||||
|
}
|
||||||
|
return help;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static String t(String s) {
|
||||||
|
return ChatColor.translateAlternateColorCodes('&', s);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
43
src/com/intellectualcrafters/plot/commands/Reload.java
Normal file
43
src/com/intellectualcrafters/plot/commands/Reload.java
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) IntellectualCrafters - 2014.
|
||||||
|
* You are not allowed to distribute and/or monetize any of our intellectual property.
|
||||||
|
* IntellectualCrafters is not affiliated with Mojang AB. Minecraft is a trademark of Mojang AB.
|
||||||
|
*
|
||||||
|
* >> File = Reload.java
|
||||||
|
* >> Generated by: Citymonstret at 2014-08-09 01:42
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.intellectualcrafters.plot.commands;
|
||||||
|
|
||||||
|
import com.intellectualcrafters.plot.PlayerFunctions;
|
||||||
|
import com.intellectualcrafters.plot.PlotMain;
|
||||||
|
|
||||||
|
import org.bukkit.ChatColor;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import com.intellectualcrafters.plot.C;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Deprecated
|
||||||
|
*/
|
||||||
|
public class Reload extends SubCommand{
|
||||||
|
|
||||||
|
public Reload() {
|
||||||
|
super("reload", "plots.admin", "Reload configurations", "", "reload", CommandCategory.INFO);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean execute(Player plr, String ... args) {
|
||||||
|
try {
|
||||||
|
PlotMain.reloadTranslations();
|
||||||
|
PlotMain.BroadcastWithPerms(C.RELOADED_CONFIGS);
|
||||||
|
} catch(Exception e) {
|
||||||
|
if (plr!=null)
|
||||||
|
PlayerFunctions.sendMessage(plr, C.RELOAD_FAILED);
|
||||||
|
else
|
||||||
|
PlotMain.sendConsoleSenderMessage(C.RELOAD_FAILED);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
51
src/com/intellectualcrafters/plot/commands/Schematic.java
Normal file
51
src/com/intellectualcrafters/plot/commands/Schematic.java
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
package com.intellectualcrafters.plot.commands;
|
||||||
|
|
||||||
|
import com.intellectualcrafters.plot.C;
|
||||||
|
import com.intellectualcrafters.plot.PlotMain;
|
||||||
|
import com.intellectualcrafters.plot.SchematicHandler;
|
||||||
|
import com.intellectualcrafters.plot.Settings;
|
||||||
|
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
public class Schematic extends SubCommand {
|
||||||
|
|
||||||
|
public Schematic() {
|
||||||
|
super("schematic", "plots.admin", "Schematic Command", "schematic {arg}", "sch", CommandCategory.ACTIONS);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean execute(Player plr, String... args) {
|
||||||
|
if(args.length < 1) {
|
||||||
|
sendMessage(plr, C.SCHEMATIC_MISSING_ARG);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
String arg = args[0];
|
||||||
|
switch(arg) {
|
||||||
|
case "test":
|
||||||
|
if(args.length < 2) {
|
||||||
|
sendMessage(plr, C.SCHEMATIC_MISSING_ARG);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
String file = args[1];
|
||||||
|
SchematicHandler.Schematic schematic = new SchematicHandler().getSchematic(file);
|
||||||
|
if(schematic == null) {
|
||||||
|
sendMessage(plr, C.SCHEMATIC_INVALID, "non-existent");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
int l1 = schematic.getSchematicDimension().getX();
|
||||||
|
int l2 = schematic.getSchematicDimension().getZ();
|
||||||
|
int length = PlotMain.getWorldSettings(plr.getWorld()).PLOT_WIDTH;
|
||||||
|
if(l1 != length || l2 != length) {
|
||||||
|
sendMessage(plr, C.SCHEMATIC_INVALID, String.format("Wrong size (x: %s, z: %d) vs %d ", l1, l2, length));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
sendMessage(plr, C.SCHEMATIC_VALID);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
sendMessage(plr, C.SCHEMATIC_MISSING_ARG);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
324
src/com/intellectualcrafters/plot/commands/Set.java
Normal file
324
src/com/intellectualcrafters/plot/commands/Set.java
Normal file
@ -0,0 +1,324 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) IntellectualCrafters - 2014.
|
||||||
|
* You are not allowed to distribute and/or monetize any of our intellectual property.
|
||||||
|
* IntellectualCrafters is not affiliated with Mojang AB. Minecraft is a trademark of Mojang AB.
|
||||||
|
*
|
||||||
|
* >> File = Set.java
|
||||||
|
* >> Generated by: Citymonstret at 2014-08-09 01:42
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.intellectualcrafters.plot.commands;
|
||||||
|
|
||||||
|
import com.intellectualcrafters.plot.*;
|
||||||
|
import com.intellectualcrafters.plot.database.DBFunc;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.ChatColor;
|
||||||
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.WeatherType;
|
||||||
|
import org.bukkit.block.Biome;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author Citymonstret
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class Set extends SubCommand{
|
||||||
|
|
||||||
|
public Set() {
|
||||||
|
super(Command.SET, "Set a plot value", "set {arg} {value...}", CommandCategory.ACTIONS);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String[] values = new String[] {
|
||||||
|
"biome", "wall", "wall_filling", "floor", "alias", "home", "rain"
|
||||||
|
};
|
||||||
|
public static String[] aliases = new String[] {
|
||||||
|
"b", "w", "wf", "f", "a", "h", "r"
|
||||||
|
};
|
||||||
|
|
||||||
|
@SuppressWarnings("deprecation")
|
||||||
|
@Override
|
||||||
|
public boolean execute(Player plr, String ... args) {
|
||||||
|
if(!PlayerFunctions.isInPlot(plr)) {
|
||||||
|
PlayerFunctions.sendMessage(plr, C.NOT_IN_PLOT);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
Plot plot = PlayerFunctions.getCurrentPlot(plr);
|
||||||
|
|
||||||
|
if(!plot.hasRights(plr) && !plr.hasPermission("plots.admin")) {
|
||||||
|
PlayerFunctions.sendMessage(plr, C.NO_PLOT_PERMS);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if(args.length < 1) {
|
||||||
|
StringBuilder builder = new StringBuilder();
|
||||||
|
builder.append(C.SUBCOMMAND_SET_OPTIONS_HEADER.s());
|
||||||
|
builder.append(getArgumentList(values));
|
||||||
|
PlayerFunctions.sendMessage(plr, builder.toString());
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
for(int i = 0; i < aliases.length; i++) {
|
||||||
|
if(aliases[i].equalsIgnoreCase(args[0])) {
|
||||||
|
args[0] = values[i];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* TODO: Implement option */
|
||||||
|
boolean advanced_permissions = false;
|
||||||
|
if(advanced_permissions) {
|
||||||
|
if(!plr.hasPermission("plots.set." + args[0].toLowerCase())) {
|
||||||
|
PlayerFunctions.sendMessage(plr, C.NO_PERMISSION);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(args[0].equalsIgnoreCase("rain")) {
|
||||||
|
if(args.length < 2) {
|
||||||
|
PlayerFunctions.sendMessage(plr, C.NEED_ON_OFF);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
String word = args[1];
|
||||||
|
if(!word.equalsIgnoreCase("on") && !word.equalsIgnoreCase("off")) {
|
||||||
|
PlayerFunctions.sendMessage(plr, C.NEED_ON_OFF);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
boolean b = word.equalsIgnoreCase("on");
|
||||||
|
DBFunc.setWeather(plr.getWorld().getName(), plot, b);
|
||||||
|
PlayerFunctions.sendMessage(plr, C.SETTING_UPDATED);
|
||||||
|
for(Player p : Bukkit.getOnlinePlayers()) {
|
||||||
|
if(PlayerFunctions.getCurrentPlot(plr).id == plot.id) {
|
||||||
|
if(b) p.setPlayerWeather(WeatherType.DOWNFALL);
|
||||||
|
else p.resetPlayerWeather();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(args[0].equalsIgnoreCase("home")) {
|
||||||
|
if(args.length < 2) {
|
||||||
|
PlayerFunctions.sendMessage(plr, C.MISSING_POSITION);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
PlotHomePosition position = null;
|
||||||
|
for(PlotHomePosition p : PlotHomePosition.values()) {
|
||||||
|
if(p.isMatching(args[1])) position = p;
|
||||||
|
}
|
||||||
|
if(position == null) {
|
||||||
|
PlayerFunctions.sendMessage(plr, C.INVALID_POSITION);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
DBFunc.setPosition(plr.getWorld().getName(), plot, position.toString());
|
||||||
|
PlayerFunctions.sendMessage(plr, C.POSITION_SET);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(args[0].equalsIgnoreCase("alias")) {
|
||||||
|
if(args.length < 2) {
|
||||||
|
PlayerFunctions.sendMessage(plr, C.MISSING_ALIAS);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
String alias = args[1];
|
||||||
|
for(Plot p : PlotMain.getPlots()) {
|
||||||
|
if(p.settings.getAlias().equalsIgnoreCase(alias)) {
|
||||||
|
PlayerFunctions.sendMessage(plr, C.ALIAS_IS_TAKEN);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
DBFunc.setAlias(plr.getWorld().getName(), plot, alias);
|
||||||
|
PlayerFunctions.sendMessage(plr, C.ALIAS_SET_TO.s().replaceAll("%alias%", alias));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if(args[0].equalsIgnoreCase("biome")) {
|
||||||
|
if(args.length < 2) {
|
||||||
|
PlayerFunctions.sendMessage(plr, C.NEED_BIOME);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
Biome biome = null;
|
||||||
|
for(Biome b : Biome.values()) {
|
||||||
|
if(b.toString().equalsIgnoreCase(args[1])) {
|
||||||
|
biome = b;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(biome == null) {
|
||||||
|
PlayerFunctions.sendMessage(plr, getBiomeList(Arrays.asList(Biome.values())));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
PlotHelper.setBiome(plr.getWorld(), plot, biome);
|
||||||
|
PlayerFunctions.sendMessage(plr, C.BIOME_SET_TO.s() + biome.toString().toLowerCase());
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if(args[0].equalsIgnoreCase("wall")) {
|
||||||
|
PlotWorld plotworld = PlotMain.getWorldSettings(plr.getWorld());
|
||||||
|
if (plotworld==null) {
|
||||||
|
PlayerFunctions.sendMessage(plr, C.NOT_IN_PLOT_WORLD);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if(args.length < 2) {
|
||||||
|
PlayerFunctions.sendMessage(plr, C.NEED_BLOCK);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
Material material = null;
|
||||||
|
for(Material m : plotworld.BLOCKS) {
|
||||||
|
if(m.toString().equalsIgnoreCase(args[1])) {
|
||||||
|
material = m;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(material == null) {
|
||||||
|
PlayerFunctions.sendMessage(plr, getBlockList(plotworld.BLOCKS));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
byte data = 0;
|
||||||
|
|
||||||
|
if(args.length > 2) {
|
||||||
|
try {
|
||||||
|
data = (byte) Integer.parseInt(args[2]);
|
||||||
|
} catch(Exception e) {
|
||||||
|
PlayerFunctions.sendMessage(plr, C.NOT_VALID_DATA);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
PlayerFunctions.sendMessage(plr, C.GENERATING_WALL);
|
||||||
|
PlotHelper.adjustWall(plr.getWorld(), plot, (short)material.getId(), data);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if(args[0].equalsIgnoreCase("floor")) {
|
||||||
|
if(args.length < 2) {
|
||||||
|
PlayerFunctions.sendMessage(plr, C.NEED_BLOCK);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
PlotWorld plotworld = PlotMain.getWorldSettings(plr.getWorld());
|
||||||
|
if (plotworld==null) {
|
||||||
|
PlayerFunctions.sendMessage(plr, C.NOT_IN_PLOT_WORLD);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
//
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
ArrayList<Material> materials = (ArrayList<Material>) plotworld.BLOCKS.clone();
|
||||||
|
materials.add(Material.AIR);
|
||||||
|
//
|
||||||
|
String[] strings = args[1].split(",");
|
||||||
|
//
|
||||||
|
Material[] material = new Material[strings.length];
|
||||||
|
byte[] data = new byte[strings.length];
|
||||||
|
//
|
||||||
|
int index = 0;
|
||||||
|
//
|
||||||
|
byte b = (byte) 0;
|
||||||
|
Material m = null;
|
||||||
|
//
|
||||||
|
for(String s : strings) {
|
||||||
|
s = s.replaceAll(",", "");
|
||||||
|
String[] ss = s.split(";");
|
||||||
|
ss[0] = ss[0].replaceAll(";", "");
|
||||||
|
for(Material ma : materials) {
|
||||||
|
if(ma.toString().equalsIgnoreCase(ss[0])) {
|
||||||
|
m = ma;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(m == null) {
|
||||||
|
PlayerFunctions.sendMessage(plr, C.NOT_VALID_BLOCK);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if(ss.length == 1) {
|
||||||
|
data[index] = (byte) 0;
|
||||||
|
material[index] = m;
|
||||||
|
} else {
|
||||||
|
try {
|
||||||
|
b = (byte) Integer.parseInt(ss[1]);
|
||||||
|
} catch(Exception e) {
|
||||||
|
PlayerFunctions.sendMessage(plr, C.NOT_VALID_DATA);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
data[index] = b;
|
||||||
|
material[index] = m;
|
||||||
|
}
|
||||||
|
index++;
|
||||||
|
}
|
||||||
|
PlotHelper.setFloor(plr, plot, material, data);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if(args[0].equalsIgnoreCase("wall_filling")) {
|
||||||
|
if(args.length < 2) {
|
||||||
|
PlayerFunctions.sendMessage(plr, C.NEED_BLOCK);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
PlotWorld plotworld = PlotMain.getWorldSettings(plr.getWorld());
|
||||||
|
if (plotworld==null) {
|
||||||
|
PlayerFunctions.sendMessage(plr, C.NOT_IN_PLOT_WORLD);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
Material material = null;
|
||||||
|
for(Material m : plotworld.BLOCKS) {
|
||||||
|
if(m.toString().equalsIgnoreCase(args[1])) {
|
||||||
|
material = m;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(material == null) {
|
||||||
|
PlayerFunctions.sendMessage(plr, getBlockList(plotworld.BLOCKS));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
byte data = 0;
|
||||||
|
|
||||||
|
if(args.length > 2) {
|
||||||
|
try {
|
||||||
|
data = (byte) Integer.parseInt(args[2]);
|
||||||
|
} catch(Exception e) {
|
||||||
|
PlayerFunctions.sendMessage(plr, C.NOT_VALID_DATA);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
PlotHelper.adjustWallFilling(plr, plr.getWorld(), plot, (short)material.getId(), data);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
PlayerFunctions.sendMessage(plr, "Not a valid option. Use {TODO: Insert list.}");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
private String getMaterial(Material m) {
|
||||||
|
return ChatColor.translateAlternateColorCodes('&', C.BLOCK_LIST_ITEM.s().replaceAll("%mat%", m.toString().toLowerCase()));
|
||||||
|
}
|
||||||
|
|
||||||
|
private String getBiome(Biome b) {
|
||||||
|
return ChatColor.translateAlternateColorCodes('&', C.BLOCK_LIST_ITEM.s().replaceAll("%mat%", b.toString().toLowerCase()));
|
||||||
|
}
|
||||||
|
|
||||||
|
private String getString(String s) {
|
||||||
|
return ChatColor.translateAlternateColorCodes('&', C.BLOCK_LIST_ITEM.s().replaceAll("%mat%", s));
|
||||||
|
}
|
||||||
|
|
||||||
|
private String getArgumentList(String[] strings) {
|
||||||
|
StringBuilder builder = new StringBuilder();
|
||||||
|
for(String s : strings) {
|
||||||
|
builder.append(getString(s));
|
||||||
|
}
|
||||||
|
return builder.toString().substring(1, builder.toString().length() - 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
private String getBiomeList(List<Biome> biomes) {
|
||||||
|
StringBuilder builder = new StringBuilder();
|
||||||
|
builder.append(ChatColor.translateAlternateColorCodes('&', C.NOT_VALID_BLOCK_LIST_HEADER.s()));
|
||||||
|
for(Biome b : biomes) {
|
||||||
|
builder.append(getBiome(b));
|
||||||
|
}
|
||||||
|
return builder.toString().substring(1,builder.toString().length() - 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
private String getBlockList(List<Material> blocks) {
|
||||||
|
StringBuilder builder = new StringBuilder();
|
||||||
|
builder.append(ChatColor.translateAlternateColorCodes('&', C.NOT_VALID_BLOCK_LIST_HEADER.s()));
|
||||||
|
for(Material b : blocks) {
|
||||||
|
builder.append(getMaterial(b));
|
||||||
|
}
|
||||||
|
return builder.toString().substring(1,builder.toString().length() - 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
51
src/com/intellectualcrafters/plot/commands/SetOwner.java
Normal file
51
src/com/intellectualcrafters/plot/commands/SetOwner.java
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) IntellectualCrafters - 2014.
|
||||||
|
* You are not allowed to distribute and/or monetize any of our intellectual property.
|
||||||
|
* IntellectualCrafters is not affiliated with Mojang AB. Minecraft is a trademark of Mojang AB.
|
||||||
|
*
|
||||||
|
* >> File = SetOwner.java
|
||||||
|
* >> Generated by: Citymonstret at 2014-08-09 01:42
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.intellectualcrafters.plot.commands;
|
||||||
|
|
||||||
|
import com.intellectualcrafters.plot.C;
|
||||||
|
import com.intellectualcrafters.plot.database.DBFunc;
|
||||||
|
import com.intellectualcrafters.plot.PlotMain;
|
||||||
|
import com.intellectualcrafters.plot.PlayerFunctions;
|
||||||
|
import com.intellectualcrafters.plot.Plot;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.OfflinePlayer;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
@SuppressWarnings("deprecation")
|
||||||
|
public class SetOwner extends SubCommand{
|
||||||
|
|
||||||
|
public SetOwner() {
|
||||||
|
super("setowner", "plots.admin", "Set the plot owner", "setowner {player}", "so", CommandCategory.ACTIONS);
|
||||||
|
}
|
||||||
|
|
||||||
|
private UUID getUUID(String string) {
|
||||||
|
OfflinePlayer player = Bukkit.getOfflinePlayer(string);
|
||||||
|
return (player != null && player.hasPlayedBefore()) ? player.getUniqueId() : null;
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public boolean execute(Player plr, String ... args) {
|
||||||
|
if(!PlayerFunctions.isInPlot(plr)) {
|
||||||
|
PlayerFunctions.sendMessage(plr, C.NOT_IN_PLOT);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
Plot plot = PlayerFunctions.getCurrentPlot(plr);
|
||||||
|
if(args.length < 1) {
|
||||||
|
PlayerFunctions.sendMessage(plr, C.NEED_USER);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
plot.owner = getUUID(args[0]);
|
||||||
|
PlotMain.updatePlot(plot);
|
||||||
|
DBFunc.setOwner(plot, plot.owner);
|
||||||
|
PlayerFunctions.sendMessage(plr, C.SET_OWNER);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
108
src/com/intellectualcrafters/plot/commands/SubCommand.java
Normal file
108
src/com/intellectualcrafters/plot/commands/SubCommand.java
Normal file
@ -0,0 +1,108 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) IntellectualCrafters - 2014.
|
||||||
|
* You are not allowed to distribute and/or monetize any of our intellectual property.
|
||||||
|
* IntellectualCrafters is not affiliated with Mojang AB. Minecraft is a trademark of Mojang AB.
|
||||||
|
*
|
||||||
|
* >> File = SubCommand.java
|
||||||
|
* >> Generated by: Citymonstret at 2014-08-09 01:42
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.intellectualcrafters.plot.commands;
|
||||||
|
|
||||||
|
import com.intellectualcrafters.plot.C;
|
||||||
|
import com.intellectualcrafters.plot.PlayerFunctions;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* SubCommand class
|
||||||
|
* @author Citymonstret
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public abstract class SubCommand {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Command
|
||||||
|
*/
|
||||||
|
public String cmd;
|
||||||
|
/**
|
||||||
|
* Permission node
|
||||||
|
*/
|
||||||
|
public CommandPermission permission;
|
||||||
|
/**
|
||||||
|
* Simple description
|
||||||
|
*/
|
||||||
|
public String description;
|
||||||
|
/**
|
||||||
|
* Alias
|
||||||
|
*/
|
||||||
|
public String alias;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Command usage
|
||||||
|
*/
|
||||||
|
public String usage;
|
||||||
|
|
||||||
|
public CommandCategory category;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param cmd Command /plot {cmd} <-- That!
|
||||||
|
* @param permission Permission Node
|
||||||
|
* @param description Simple description
|
||||||
|
* @param usage Usage description: /plot command {args...}
|
||||||
|
* @param alias Command alias
|
||||||
|
* @param category CommandCategory. Pick whichever closests to what you want.
|
||||||
|
*/
|
||||||
|
public SubCommand(String cmd, String permission, String description, String usage, String alias, CommandCategory category) {
|
||||||
|
this.cmd = cmd;
|
||||||
|
this.permission = new CommandPermission(permission);
|
||||||
|
this.description = description;
|
||||||
|
this.alias = alias;
|
||||||
|
this.usage = usage;
|
||||||
|
this.category = category;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param command Command /plot {cmd} <-- That!
|
||||||
|
* @param description Simple description
|
||||||
|
* @param usage Usage description: /plot command {args...}
|
||||||
|
* @param category CommandCategory. Pick whichever closests to what you want.
|
||||||
|
*/
|
||||||
|
public SubCommand(Command command, String description, String usage, CommandCategory category) {
|
||||||
|
this.cmd = command.getCommand();
|
||||||
|
this.permission = command.getPermission();
|
||||||
|
this.alias = command.getAlias();
|
||||||
|
this.description = description;
|
||||||
|
this.usage = usage;
|
||||||
|
this.category = category;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Execute.
|
||||||
|
* @param plr executor
|
||||||
|
* @param args arguments
|
||||||
|
* @return true on success, false on failure
|
||||||
|
*/
|
||||||
|
public abstract boolean execute(Player plr, String ... args);
|
||||||
|
public void executeConsole(String ... args) { this.execute(null, args); }
|
||||||
|
|
||||||
|
public void sendMessage(Player plr, C c, String ... args) {
|
||||||
|
PlayerFunctions.sendMessage(plr, c, args);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public enum CommandCategory {
|
||||||
|
CLAIMING("Claiming"),
|
||||||
|
TELEPORT("Teleportation"),
|
||||||
|
ACTIONS("Actions"),
|
||||||
|
INFO("Information");
|
||||||
|
private String name;
|
||||||
|
CommandCategory(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return this.name;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
69
src/com/intellectualcrafters/plot/commands/TP.java
Normal file
69
src/com/intellectualcrafters/plot/commands/TP.java
Normal file
@ -0,0 +1,69 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) IntellectualCrafters - 2014.
|
||||||
|
* You are not allowed to distribute and/or monetize any of our intellectual property.
|
||||||
|
* IntellectualCrafters is not affiliated with Mojang AB. Minecraft is a trademark of Mojang AB.
|
||||||
|
*
|
||||||
|
* >> File = TP.java
|
||||||
|
* >> Generated by: Citymonstret at 2014-08-09 01:42
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.intellectualcrafters.plot.commands;
|
||||||
|
|
||||||
|
import com.intellectualcrafters.plot.*;
|
||||||
|
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.World;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author Citymonstret
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class TP extends SubCommand {
|
||||||
|
|
||||||
|
public TP() {
|
||||||
|
super(Command.TP, "Teleport to a plot", "tp {alias|id}", CommandCategory.TELEPORT);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean execute(Player plr, String ... args) {
|
||||||
|
if(args.length < 1) {
|
||||||
|
PlayerFunctions.sendMessage(plr, C.NEED_PLOT_ID);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
String id = args[0];
|
||||||
|
PlotId plotid;
|
||||||
|
World world = plr.getWorld();
|
||||||
|
if (args.length==2) {
|
||||||
|
if (Bukkit.getWorld(args[1])!=null)
|
||||||
|
world = Bukkit.getWorld(args[1]);
|
||||||
|
}
|
||||||
|
if (!PlotMain.isPlotWorld(world)) {
|
||||||
|
PlayerFunctions.sendMessage(plr, C.NOT_IN_PLOT_WORLD);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
Plot temp;
|
||||||
|
if((temp = isAlias(id)) != null) {
|
||||||
|
PlotMain.teleportPlayer(plr, plr.getLocation(), temp);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
plotid = new PlotId(Integer.parseInt(id.split(";")[0]), Integer.parseInt(id.split(";")[1]));
|
||||||
|
PlotMain.teleportPlayer(plr, plr.getLocation(), PlotHelper.getPlot(world, plotid));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
catch (Exception e) {
|
||||||
|
PlayerFunctions.sendMessage(plr, C.NOT_VALID_PLOT_ID);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
private Plot isAlias(String a) {
|
||||||
|
for(Plot p : PlotMain.getPlots()) {
|
||||||
|
if(p.settings.getAlias().length() > 0 && p.settings.getAlias().equalsIgnoreCase(a))
|
||||||
|
return p;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
67
src/com/intellectualcrafters/plot/commands/Visit.java
Normal file
67
src/com/intellectualcrafters/plot/commands/Visit.java
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) IntellectualCrafters - 2014.
|
||||||
|
* You are not allowed to distribute and/or monetize any of our intellectual property.
|
||||||
|
* IntellectualCrafters is not affiliated with Mojang AB. Minecraft is a trademark of Mojang AB.
|
||||||
|
*
|
||||||
|
* >> File = Visit.java
|
||||||
|
* >> Generated by: Citymonstret at 2014-08-09 01:42
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.intellectualcrafters.plot.commands;
|
||||||
|
|
||||||
|
import com.intellectualcrafters.plot.*;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
|
||||||
|
public class Visit extends SubCommand{
|
||||||
|
public Visit() {
|
||||||
|
super("visit", "plots.visit", "Visit someones plot", "visit {player} [#]", "v", CommandCategory.TELEPORT);
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<Plot> getPlots(UUID uuid) {
|
||||||
|
List<Plot> plots = new ArrayList<Plot>();
|
||||||
|
for(Plot p : PlotMain.getPlots())
|
||||||
|
if(p.owner.equals(uuid))
|
||||||
|
plots.add(p);
|
||||||
|
return plots;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean execute(Player plr, String ... args) {
|
||||||
|
if(args.length < 1) {
|
||||||
|
PlayerFunctions.sendMessage(plr, C.NEED_USER);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
String username = args[0];
|
||||||
|
List<Plot> plots = getPlots(Bukkit.getOfflinePlayer(username).getUniqueId());
|
||||||
|
if(plots.isEmpty()) {
|
||||||
|
PlayerFunctions.sendMessage(plr, C.FOUND_NO_PLOTS);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if(args.length < 2){
|
||||||
|
Plot plot = plots.get(0);
|
||||||
|
PlotMain.teleportPlayer(plr, plr.getLocation(), plot);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
int i;
|
||||||
|
try {
|
||||||
|
i = Integer.parseInt(args[1]);
|
||||||
|
} catch(Exception e) {
|
||||||
|
PlayerFunctions.sendMessage(plr, C.NOT_VALID_NUMBER);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if(i < 0 || i > plots.size()) {
|
||||||
|
PlayerFunctions.sendMessage(plr, C.NOT_VALID_NUMBER);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
Plot plot = plots.get(i);
|
||||||
|
PlotMain.teleportPlayer(plr, plr.getLocation(), plot);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
104
src/com/intellectualcrafters/plot/commands/list.java
Normal file
104
src/com/intellectualcrafters/plot/commands/list.java
Normal file
@ -0,0 +1,104 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) IntellectualCrafters - 2014.
|
||||||
|
* You are not allowed to distribute and/or monetize any of our intellectual property.
|
||||||
|
* IntellectualCrafters is not affiliated with Mojang AB. Minecraft is a trademark of Mojang AB.
|
||||||
|
*
|
||||||
|
* >> File = list.java
|
||||||
|
* >> Generated by: Citymonstret at 2014-08-09 01:41
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.intellectualcrafters.plot.commands;
|
||||||
|
|
||||||
|
import com.intellectualcrafters.plot.C;
|
||||||
|
import com.intellectualcrafters.plot.PlayerFunctions;
|
||||||
|
import com.intellectualcrafters.plot.Plot;
|
||||||
|
import com.intellectualcrafters.plot.PlotId;
|
||||||
|
import com.intellectualcrafters.plot.PlotMain;
|
||||||
|
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.ChatColor;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author Citymonstret
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class list extends SubCommand{
|
||||||
|
|
||||||
|
public list() {
|
||||||
|
super(Command.LIST, "List all plots", "list {mine|all|world}", CommandCategory.INFO);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean execute(Player plr, String ... args) {
|
||||||
|
if(args.length < 1) {
|
||||||
|
StringBuilder builder = new StringBuilder();
|
||||||
|
builder.append(C.SUBCOMMAND_SET_OPTIONS_HEADER.s());
|
||||||
|
builder.append(getArgumentList(new String[]{"mine", "all", "world"}));
|
||||||
|
PlayerFunctions.sendMessage(plr, builder.toString());
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if(args[0].equalsIgnoreCase("mine")) {
|
||||||
|
StringBuilder string = new StringBuilder();
|
||||||
|
string.append(C.PLOT_LIST_HEADER.s().replaceAll("%word%", "your") + "\n");
|
||||||
|
int idx = 0;
|
||||||
|
for(Plot p : PlotMain.getPlots(plr)) {
|
||||||
|
string.append(C.PLOT_LIST_ITEM.s().replaceAll("%id%", p.id.x+";"+p.id.y+";"+p.world).replaceAll("%owner%", getName(p.owner)) + "\n");
|
||||||
|
idx++;
|
||||||
|
}
|
||||||
|
if(idx == 0) {
|
||||||
|
PlayerFunctions.sendMessage(plr, C.NO_PLOTS);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
string.append(C.PLOT_LIST_FOOTER.s().replaceAll("%word%", "You have").replaceAll("%num%", idx + "").replaceAll("%plot%", idx == 1 ? "plot" : "plots"));
|
||||||
|
PlayerFunctions.sendMessage(plr, string.toString());
|
||||||
|
return true;
|
||||||
|
} else if(args[0].equalsIgnoreCase("all")) {
|
||||||
|
StringBuilder string = new StringBuilder();
|
||||||
|
string.append(C.PLOT_LIST_HEADER.s().replaceAll("%word%", "all") + "\n");
|
||||||
|
for(Plot p : PlotMain.getPlots()) {
|
||||||
|
string.append(C.PLOT_LIST_ITEM.s().replaceAll("%id%", p.id.x+";"+p.id.y+";"+p.world).replaceAll("%owner%", getName(p.owner)) + "\n");
|
||||||
|
}
|
||||||
|
string.append(C.PLOT_LIST_FOOTER.s().replaceAll("%word%", "There is").replaceAll("%num%", PlotMain.getPlots().size() + "").replaceAll("%plot%", PlotMain.getPlots().size() == 1 ? "plot" : "plots"));
|
||||||
|
PlayerFunctions.sendMessage(plr, string.toString());
|
||||||
|
return true;
|
||||||
|
} else if(args[0].equalsIgnoreCase("world")) {
|
||||||
|
StringBuilder string = new StringBuilder();
|
||||||
|
string.append(C.PLOT_LIST_HEADER.s().replaceAll("%word%", "all") + "\n");
|
||||||
|
HashMap<PlotId, Plot> plots = PlotMain.getPlots(plr.getWorld());
|
||||||
|
for(Plot p : plots.values()) {
|
||||||
|
string.append(C.PLOT_LIST_ITEM.s().replaceAll("%id%", p.id.x+";"+p.id.y+";"+p.world).replaceAll("%owner%", getName(p.owner)) + "\n");
|
||||||
|
}
|
||||||
|
string.append(C.PLOT_LIST_FOOTER.s().replaceAll("%word%", "There is").replaceAll("%num%", plots.values().size() + "").replaceAll("%plot%", plots.values().size() == 1 ? "plot" : "plots"));
|
||||||
|
PlayerFunctions.sendMessage(plr, string.toString());
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
execute(plr);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static String getName(UUID id) {
|
||||||
|
if(id == null)
|
||||||
|
return "none";
|
||||||
|
return Bukkit.getOfflinePlayer(id).getName();
|
||||||
|
}
|
||||||
|
private String getArgumentList(String[] strings) {
|
||||||
|
StringBuilder builder = new StringBuilder();
|
||||||
|
for(String s : strings) {
|
||||||
|
builder.append(getString(s));
|
||||||
|
}
|
||||||
|
return builder.toString().substring(1, builder.toString().length() - 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private String getString(String s) {
|
||||||
|
return ChatColor.translateAlternateColorCodes('&', C.BLOCK_LIST_ITEM.s().replaceAll("%mat%", s));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
40
src/com/intellectualcrafters/plot/commands/plugin.java
Normal file
40
src/com/intellectualcrafters/plot/commands/plugin.java
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) IntellectualCrafters - 2014.
|
||||||
|
* You are not allowed to distribute and/or monetize any of our intellectual property.
|
||||||
|
* IntellectualCrafters is not affiliated with Mojang AB. Minecraft is a trademark of Mojang AB.
|
||||||
|
*
|
||||||
|
* >> File = plugin.java
|
||||||
|
* >> Generated by: Citymonstret at 2014-08-09 01:42
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.intellectualcrafters.plot.commands;
|
||||||
|
|
||||||
|
import com.intellectualcrafters.plot.PlotMain;
|
||||||
|
import com.intellectualcrafters.plot.PlayerFunctions;
|
||||||
|
import com.intellectualcrafters.plot.Settings;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
public class plugin extends SubCommand {
|
||||||
|
|
||||||
|
public plugin() {
|
||||||
|
super("plugin", "", "Show plugin information", "plugin", "pl", CommandCategory.INFO);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean execute(Player plr, String ... args) {
|
||||||
|
ArrayList<String> strings = new ArrayList<String>() {
|
||||||
|
{
|
||||||
|
add(String.format("&c>> &6PlotSquared (Version: %s)", PlotMain.getMain().getDescription().getVersion()));
|
||||||
|
add(String.format("&c>> &6Made by Citymonstret and brandonrelph"));
|
||||||
|
add(String.format("&c>> &6Download at %s", Settings.URL));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
for(String s : strings)
|
||||||
|
PlayerFunctions.sendMessage(plr, s);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
543
src/com/intellectualcrafters/plot/database/DBFunc.java
Normal file
543
src/com/intellectualcrafters/plot/database/DBFunc.java
Normal file
@ -0,0 +1,543 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) IntellectualCrafters - 2014.
|
||||||
|
* You are not allowed to distribute and/or monetize any of our intellectual property.
|
||||||
|
* IntellectualCrafters is not affiliated with Mojang AB. Minecraft is a trademark of Mojang AB.
|
||||||
|
*
|
||||||
|
* >> File = DBFunc.java
|
||||||
|
* >> Generated by: Citymonstret at 2014-08-09 01:43
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.intellectualcrafters.plot.database;
|
||||||
|
import com.intellectualcrafters.plot.Logger;
|
||||||
|
import com.intellectualcrafters.plot.Logger.LogLevel;
|
||||||
|
import com.intellectualcrafters.plot.Plot;
|
||||||
|
import com.intellectualcrafters.plot.PlotHomePosition;
|
||||||
|
import com.intellectualcrafters.plot.PlotId;
|
||||||
|
import com.intellectualcrafters.plot.PlotMain;
|
||||||
|
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.OfflinePlayer;
|
||||||
|
import org.bukkit.World;
|
||||||
|
import org.bukkit.block.Biome;
|
||||||
|
|
||||||
|
import java.sql.PreparedStatement;
|
||||||
|
import java.sql.ResultSet;
|
||||||
|
import java.sql.SQLException;
|
||||||
|
import java.sql.Statement;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
import static com.intellectualcrafters.plot.PlotMain.connection;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author Citymonstret
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class DBFunc {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set Plot owner
|
||||||
|
* @param plot
|
||||||
|
* @param uuid
|
||||||
|
*/
|
||||||
|
public static void setOwner(final Plot plot, final UUID uuid) {
|
||||||
|
runTask(new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
try {
|
||||||
|
PreparedStatement statement = connection.prepareStatement("UPDATE `plot` SET `owner` = ? WHERE `plot_id_x` = ? AND `plot_id_z` = ? ");
|
||||||
|
statement.setString(1, uuid.toString());
|
||||||
|
statement.setInt(2, plot.id.x);
|
||||||
|
statement.setInt(3, plot.id.y);
|
||||||
|
statement.executeUpdate();
|
||||||
|
statement.close();
|
||||||
|
} catch(SQLException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
Logger.add(LogLevel.DANGER, "Could not set owner for plot " + plot.id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a plot
|
||||||
|
* @param plot
|
||||||
|
*/
|
||||||
|
public static void createPlot(Plot plot) {
|
||||||
|
PreparedStatement stmt = null;
|
||||||
|
try {
|
||||||
|
stmt = connection.prepareStatement("INSERT INTO `plot`(`plot_id_x`, `plot_id_z`, `owner`, `world`) VALUES(?, ?, ?, ?)");
|
||||||
|
stmt.setInt(1, plot.id.x);
|
||||||
|
stmt.setInt(2, plot.id.y);
|
||||||
|
stmt.setString(3, plot.owner.toString());
|
||||||
|
stmt.setString(4, plot.world);
|
||||||
|
stmt.executeUpdate();
|
||||||
|
stmt.close();
|
||||||
|
} catch (SQLException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
Logger.add(LogLevel.DANGER, "Failed to save plot " + plot.id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create tables
|
||||||
|
* @throws SQLException
|
||||||
|
*/
|
||||||
|
public static void createTables() throws SQLException{
|
||||||
|
Statement stmt = connection.createStatement();
|
||||||
|
stmt.addBatch(
|
||||||
|
"CREATE TABLE IF NOT EXISTS `plot` (" +
|
||||||
|
"`id` int(11) NOT NULL AUTO_INCREMENT," +
|
||||||
|
"`plot_id_x` int(11) NOT NULL," +
|
||||||
|
"`plot_id_z` int(11) NOT NULL," +
|
||||||
|
"`owner` varchar(45) NOT NULL," +
|
||||||
|
"`world` varchar(45) NOT NULL," +
|
||||||
|
"`timestamp` timestamp not null DEFAULT CURRENT_TIMESTAMP," +
|
||||||
|
"PRIMARY KEY (`id`)" +
|
||||||
|
") ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=0");
|
||||||
|
stmt.addBatch(
|
||||||
|
"CREATE TABLE IF NOT EXISTS `plot_helpers` (" +
|
||||||
|
"`plot_plot_id` int(11) NOT NULL," +
|
||||||
|
"`user_uuid` varchar(40) NOT NULL" +
|
||||||
|
") ENGINE=InnoDB DEFAULT CHARSET=utf8"
|
||||||
|
);
|
||||||
|
stmt.addBatch(
|
||||||
|
"CREATE TABLE IF NOT EXISTS `plot_denied` (" +
|
||||||
|
"`plot_plot_id` int(11) NOT NULL," +
|
||||||
|
"`user_uuid` varchar(40) NOT NULL" +
|
||||||
|
") ENGINE=InnoDB DEFAULT CHARSET=utf8"
|
||||||
|
);
|
||||||
|
stmt.addBatch(
|
||||||
|
"CREATE TABLE IF NOT EXISTS `plot_settings` (" +
|
||||||
|
" `plot_plot_id` INT(11) NOT NULL," +
|
||||||
|
" `biome` VARCHAR(45) DEFAULT 'FOREST'," +
|
||||||
|
" `rain` INT(1) DEFAULT 0," +
|
||||||
|
" `custom_time` TINYINT(1) DEFAULT '0'," +
|
||||||
|
" `time` INT(11) DEFAULT '8000'," +
|
||||||
|
" `deny_entry` TINYINT(1) DEFAULT '0'," +
|
||||||
|
" `alias` VARCHAR(50) DEFAULT NULL," +
|
||||||
|
" `position` VARCHAR(50) NOT NULL DEFAULT 'DEFAULT'," +
|
||||||
|
" PRIMARY KEY (`plot_plot_id`)," +
|
||||||
|
" UNIQUE KEY `unique_alias` (`alias`)" +
|
||||||
|
") ENGINE=InnoDB DEFAULT CHARSET=utf8"
|
||||||
|
);
|
||||||
|
stmt.addBatch(
|
||||||
|
"ALTER TABLE `plot_settings` ADD CONSTRAINT `plot_settings_ibfk_1` FOREIGN KEY (`plot_plot_id`) REFERENCES `plot` (`id`) ON DELETE CASCADE"
|
||||||
|
);
|
||||||
|
stmt.executeBatch();
|
||||||
|
stmt.clearBatch();
|
||||||
|
stmt.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Delete a plot
|
||||||
|
* @param plot
|
||||||
|
*/
|
||||||
|
public static void delete(final String world, final Plot plot) {
|
||||||
|
PlotMain.removePlot(world,plot.id);
|
||||||
|
runTask(new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
PreparedStatement stmt = null;
|
||||||
|
int id = getId(world,plot.id);
|
||||||
|
try {
|
||||||
|
stmt = connection.prepareStatement("DELETE FROM `plot_settings` WHERE `plot_plot_id` = ?");
|
||||||
|
stmt.setInt(1, id);
|
||||||
|
stmt.executeUpdate();
|
||||||
|
stmt.close();
|
||||||
|
stmt = connection.prepareStatement("DELETE FROM `plot_helpers` WHERE `plot_plot_id` = ?");
|
||||||
|
stmt.setInt(1, id);
|
||||||
|
stmt.executeUpdate();
|
||||||
|
stmt.close();
|
||||||
|
stmt = connection.prepareStatement("DELETE FROM `plot` WHERE `id` = ?");
|
||||||
|
stmt.setInt(1, id);
|
||||||
|
stmt.executeUpdate();
|
||||||
|
stmt.close();
|
||||||
|
} catch (SQLException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
Logger.add(LogLevel.DANGER, "Failed to delete plot " + plot.id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create plot settings
|
||||||
|
* @param id
|
||||||
|
* @param plot
|
||||||
|
*/
|
||||||
|
public static void createPlotSettings(final int id, final Plot plot) {
|
||||||
|
runTask(new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
PreparedStatement stmt = null;
|
||||||
|
try {
|
||||||
|
stmt = connection.prepareStatement("INSERT INTO `plot_settings`(`plot_plot_id`) VALUES(" +
|
||||||
|
"?)");
|
||||||
|
stmt.setInt(1, id);
|
||||||
|
stmt.executeUpdate();
|
||||||
|
stmt.close();
|
||||||
|
} catch(SQLException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get a plot id
|
||||||
|
* @param plot_id
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static int getId(String world, PlotId id2) {
|
||||||
|
Statement stmt = null;
|
||||||
|
try {
|
||||||
|
stmt = connection.createStatement();
|
||||||
|
ResultSet r = stmt.executeQuery("SELECT `id` FROM `plot` WHERE `plot_id_x` = '" + id2.x + "' AND `plot_id_z` = '" + id2.y + "' AND `world` = '" + world + "' ORDER BY `timestamp` ASC");
|
||||||
|
int id = Integer.MAX_VALUE;
|
||||||
|
while(r.next()) {
|
||||||
|
id = r.getInt("id");
|
||||||
|
}
|
||||||
|
stmt.close();
|
||||||
|
return id;
|
||||||
|
} catch(SQLException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
return Integer.MAX_VALUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static HashMap<String, HashMap<PlotId, Plot>> getPlots() {
|
||||||
|
HashMap<String, HashMap<PlotId, Plot>> plots = new HashMap<String, HashMap<PlotId, Plot>>();
|
||||||
|
HashMap<String, World> worldMap = new HashMap<String, World>();
|
||||||
|
Statement stmt = null;
|
||||||
|
try {
|
||||||
|
stmt = connection.createStatement();
|
||||||
|
ResultSet r = stmt.executeQuery("SELECT `id`, `plot_id_x`, `plot_id_z`, `owner`, `world` FROM `plot`");
|
||||||
|
PlotId plot_id;
|
||||||
|
int id;
|
||||||
|
Plot p;
|
||||||
|
World w;
|
||||||
|
while (r.next()) {
|
||||||
|
plot_id = new PlotId(r.getInt("plot_id_x"),r.getInt("plot_id_z"));
|
||||||
|
id = r.getInt("id");
|
||||||
|
String worldname = r.getString("world");
|
||||||
|
// Quicker to get cache the UUID to the World than to convert each time.
|
||||||
|
HashMap<String, Object> settings = getSettings(id);
|
||||||
|
UUID owner = UUID.fromString(r.getString("owner"));
|
||||||
|
Biome plotBiome = Biome.valueOf((String) settings.get("biome"));
|
||||||
|
if(plotBiome == null) plotBiome = Biome.FOREST;
|
||||||
|
ArrayList<UUID> helpers = plotHelpers(id);
|
||||||
|
ArrayList<UUID> denied = plotDenied(id);
|
||||||
|
//boolean changeTime = ((Short) settings.get("custom_time") == 0) ? false : true;
|
||||||
|
long time = 8000l;
|
||||||
|
//if(changeTime) {
|
||||||
|
// time = Long.parseLong(settings.get("time").toString());
|
||||||
|
//}
|
||||||
|
//boolean rain = Integer.parseInt(settings.get("rain").toString()) == 1 ? true : false;
|
||||||
|
boolean rain = false;
|
||||||
|
String alias = (String) settings.get("alias");
|
||||||
|
if(alias == null || alias.equalsIgnoreCase("NEW")) alias = "";
|
||||||
|
PlotHomePosition position = null;
|
||||||
|
for(PlotHomePosition plotHomePosition : PlotHomePosition.values())
|
||||||
|
if(plotHomePosition.isMatching((String)settings.get("position"))) position = plotHomePosition;
|
||||||
|
if(position == null) position = PlotHomePosition.DEFAULT;
|
||||||
|
|
||||||
|
p = new Plot(plot_id, owner, plotBiome, helpers, denied, /*changeTime*/ false, time, rain, alias, position, worldname);
|
||||||
|
if (plots.containsKey(worldname)) {
|
||||||
|
plots.get(worldname).put((plot_id), p);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
HashMap<PlotId, Plot> map = new HashMap<PlotId, Plot>();
|
||||||
|
map.put((plot_id), p);
|
||||||
|
plots.put(worldname, map);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
stmt.close();
|
||||||
|
} catch (SQLException e) {
|
||||||
|
Logger.add(LogLevel.WARNING, "Failed to load plots.");
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
return plots;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param plot
|
||||||
|
* @param rain
|
||||||
|
*/
|
||||||
|
public static void setWeather(final String world, final Plot plot, final boolean rain) {
|
||||||
|
plot.settings.setRain(rain);
|
||||||
|
runTask(new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
try {
|
||||||
|
int weather = rain ? 1 : 0;
|
||||||
|
PreparedStatement stmt = connection.prepareStatement("UPDATE `plot_settings` SET `rain` = ? WHERE `plot_plot_id` = ?");
|
||||||
|
stmt.setInt(1, weather);
|
||||||
|
stmt.setInt(2, getId(world, plot.id));
|
||||||
|
stmt.execute();
|
||||||
|
stmt.close();
|
||||||
|
} catch(SQLException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
Logger.add(LogLevel.WARNING, "Could not set weather for plot " + plot.id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param plot
|
||||||
|
* @param alias
|
||||||
|
*/
|
||||||
|
public static void setAlias(final String world, final Plot plot, final String alias) {
|
||||||
|
plot.settings.setAlias(alias);
|
||||||
|
runTask(new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
PreparedStatement stmt = null;
|
||||||
|
try {
|
||||||
|
stmt = connection.prepareStatement("UPDATE `plot_settings` SET `alias` = ? WHERE `plot_plot_id` = ?");
|
||||||
|
stmt.setString(1, alias);
|
||||||
|
stmt.setInt(2, getId(world, plot.id));
|
||||||
|
stmt.executeUpdate();
|
||||||
|
stmt.close();
|
||||||
|
} catch(SQLException e) {
|
||||||
|
Logger.add(LogLevel.WARNING, "Failed to set alias for plot " + plot.id);
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param r
|
||||||
|
*/
|
||||||
|
private static void runTask(Runnable r) {
|
||||||
|
PlotMain.getMain().getServer().getScheduler().runTaskAsynchronously(PlotMain.getMain(), r);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param plot
|
||||||
|
* @param position
|
||||||
|
*/
|
||||||
|
public static void setPosition(final String world,final Plot plot, final String position) {
|
||||||
|
plot.settings.setPosition(PlotHomePosition.valueOf(position));
|
||||||
|
runTask(new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
PreparedStatement stmt = null;
|
||||||
|
try {
|
||||||
|
stmt = connection.prepareStatement("UPDATE `plot_settings` SET `position` = ? WHERE `plot_plot_id` = ?");
|
||||||
|
stmt.setString(1, position);
|
||||||
|
stmt.setInt(2, getId(world, plot.id));
|
||||||
|
stmt.executeUpdate();
|
||||||
|
stmt.close();
|
||||||
|
} catch(SQLException e) {
|
||||||
|
Logger.add(LogLevel.WARNING, "Failed to set position for plot " + plot.id);
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param id
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static HashMap<String, Object> getSettings(int id) {
|
||||||
|
HashMap<String, Object> h = new HashMap<String, Object>();
|
||||||
|
Statement stmt = null;
|
||||||
|
try {
|
||||||
|
stmt = connection.createStatement();
|
||||||
|
ResultSet r = stmt.executeQuery("SELECT * FROM `plot_settings` WHERE `plot_plot_id` = " + id);
|
||||||
|
String var;
|
||||||
|
Object val;
|
||||||
|
while(r.next()) {
|
||||||
|
var = "biome";
|
||||||
|
val = r.getObject(var);
|
||||||
|
h.put(var,val);
|
||||||
|
var = "rain";
|
||||||
|
val = r.getObject(var);
|
||||||
|
h.put(var,val);
|
||||||
|
var = "custom_time";
|
||||||
|
val = r.getObject(var);
|
||||||
|
h.put(var, val);
|
||||||
|
var = "time";
|
||||||
|
val = r.getObject(var);
|
||||||
|
h.put(var,val);
|
||||||
|
var = "deny_entry";
|
||||||
|
val = r.getObject(var);
|
||||||
|
h.put(var, (short) 0);
|
||||||
|
var = "alias";
|
||||||
|
val = r.getObject(var);
|
||||||
|
h.put(var, val);
|
||||||
|
var = "position";
|
||||||
|
val = r.getObject(var);
|
||||||
|
h.put(var, val);
|
||||||
|
}
|
||||||
|
stmt.close();;
|
||||||
|
} catch(SQLException e) {
|
||||||
|
Logger.add(LogLevel.WARNING, "Failed to load settings for plot: " + id);
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
return h;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public static UUID everyone = UUID.fromString("1-1-3-3-7");
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param id
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
private static ArrayList<UUID> plotDenied(int id) {
|
||||||
|
ArrayList<UUID> l = new ArrayList<UUID>();
|
||||||
|
PreparedStatement stmt = null;
|
||||||
|
try {
|
||||||
|
stmt = connection.prepareStatement("SELECT `user_uuid` FROM `plot_denied` WHERE `plot_plot_id` = ?");
|
||||||
|
stmt.setInt(1, id);
|
||||||
|
ResultSet r = stmt.executeQuery();
|
||||||
|
UUID u;
|
||||||
|
while(r.next()) {
|
||||||
|
u = UUID.fromString(r.getString("user_uuid"));
|
||||||
|
l.add(u);
|
||||||
|
}
|
||||||
|
stmt.close();
|
||||||
|
} catch(Exception e) {
|
||||||
|
Logger.add(LogLevel.DANGER, "Failed to load denied for plot: " + id);
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
return l;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param id
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
private static ArrayList<UUID> plotHelpers(int id) {
|
||||||
|
ArrayList<UUID> l = new ArrayList<UUID>();
|
||||||
|
Statement stmt = null;
|
||||||
|
try {
|
||||||
|
stmt = connection.createStatement();
|
||||||
|
ResultSet r = stmt.executeQuery("SELECT `user_uuid` FROM `plot_helpers` WHERE `plot_plot_id` = " + id);
|
||||||
|
UUID u;
|
||||||
|
while(r.next()) {
|
||||||
|
u = UUID.fromString(r.getString("user_uuid"));
|
||||||
|
l.add(u);
|
||||||
|
}
|
||||||
|
stmt.close();
|
||||||
|
} catch (SQLException e) {
|
||||||
|
Logger.add(LogLevel.WARNING, "Failed to load helpers for plot: " + id);
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
return l;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param plot
|
||||||
|
* @param player
|
||||||
|
*/
|
||||||
|
public static void removeHelper(final String world,final Plot plot, final OfflinePlayer player) {
|
||||||
|
runTask(new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
try {
|
||||||
|
PreparedStatement statement = connection.prepareStatement("DELETE FROM `plot_helpers` WHERE `plot_plot_id` = ? AND `user_uuid` = ?");
|
||||||
|
statement.setInt(1, getId(world, plot.id));
|
||||||
|
statement.setString(2, player.getUniqueId().toString());
|
||||||
|
statement.executeUpdate();
|
||||||
|
statement.close();
|
||||||
|
} catch(SQLException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
Logger.add(LogLevel.WARNING, "Failed to remove helper for plot " + plot.id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param plot
|
||||||
|
* @param player
|
||||||
|
*/
|
||||||
|
public static void setHelper(final String world,final Plot plot, final OfflinePlayer player) {
|
||||||
|
runTask(new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
try {
|
||||||
|
PreparedStatement statement = connection.prepareStatement("INSERT INTO `plot_helpers` (`plot_plot_id`, `user_uuid`) VALUES(?,?)");
|
||||||
|
statement.setInt(1, getId(world, plot.id));
|
||||||
|
statement.setString(2, player.getUniqueId().toString());
|
||||||
|
statement.executeUpdate();
|
||||||
|
statement.close();
|
||||||
|
} catch(SQLException e) {
|
||||||
|
Logger.add(LogLevel.WARNING, "Failed to set helper for plot " + plot.id);
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param plot
|
||||||
|
* @param player
|
||||||
|
*/
|
||||||
|
public static void removeDenied(final String world, final Plot plot, final OfflinePlayer player) {
|
||||||
|
runTask(new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
try {
|
||||||
|
PreparedStatement statement = connection.prepareStatement("DELETE FROM `plot_denied` WHERE `plot_plot_id` = ? AND `user_uuid` = ?");
|
||||||
|
statement.setInt(1, getId(world, plot.id));
|
||||||
|
statement.setString(2, player.getUniqueId().toString());
|
||||||
|
statement.executeUpdate();
|
||||||
|
statement.close();
|
||||||
|
} catch(SQLException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
Logger.add(LogLevel.WARNING, "Failed to remove denied for plot " + plot.id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param plot
|
||||||
|
* @param player
|
||||||
|
*/
|
||||||
|
public static void setDenied(final String world, final Plot plot, final OfflinePlayer player) {
|
||||||
|
runTask(new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
try {
|
||||||
|
PreparedStatement statement = connection.prepareStatement("INSERT INTO `plot_denied` (`plot_plot_id`, `user_uuid`) VALUES(?,?)");
|
||||||
|
statement.setInt(1, getId(world, plot.id));
|
||||||
|
statement.setString(2, player.getUniqueId().toString());
|
||||||
|
statement.executeUpdate();
|
||||||
|
statement.close();
|
||||||
|
} catch(SQLException e) {
|
||||||
|
Logger.add(LogLevel.WARNING, "Failed to set denied for plot " + plot.id);
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
101
src/com/intellectualcrafters/plot/database/Database.java
Normal file
101
src/com/intellectualcrafters/plot/database/Database.java
Normal file
@ -0,0 +1,101 @@
|
|||||||
|
package com.intellectualcrafters.plot.database;
|
||||||
|
|
||||||
|
import java.sql.Connection;
|
||||||
|
import java.sql.ResultSet;
|
||||||
|
import java.sql.SQLException;
|
||||||
|
|
||||||
|
import org.bukkit.plugin.Plugin;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Abstract Database class, serves as a base for any connection method (MySQL,
|
||||||
|
* SQLite, etc.)
|
||||||
|
*
|
||||||
|
* @author -_Husky_-
|
||||||
|
* @author tips48
|
||||||
|
*/
|
||||||
|
public abstract class Database {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Plugin instance, use for plugin.getDataFolder()
|
||||||
|
*/
|
||||||
|
protected Plugin plugin;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new Database
|
||||||
|
*
|
||||||
|
* @param plugin
|
||||||
|
* Plugin instance
|
||||||
|
*/
|
||||||
|
protected Database(Plugin plugin) {
|
||||||
|
this.plugin = plugin;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Opens a connection with the database
|
||||||
|
*
|
||||||
|
* @return Opened connection
|
||||||
|
* @throws SQLException
|
||||||
|
* if the connection can not be opened
|
||||||
|
* @throws ClassNotFoundException
|
||||||
|
* if the driver cannot be found
|
||||||
|
*/
|
||||||
|
public abstract Connection openConnection() throws SQLException,
|
||||||
|
ClassNotFoundException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks if a connection is open with the database
|
||||||
|
*
|
||||||
|
* @return true if the connection is open
|
||||||
|
* @throws SQLException
|
||||||
|
* if the connection cannot be checked
|
||||||
|
*/
|
||||||
|
public abstract boolean checkConnection() throws SQLException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the connection with the database
|
||||||
|
*
|
||||||
|
* @return Connection with the database, null if none
|
||||||
|
*/
|
||||||
|
public abstract Connection getConnection();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Closes the connection with the database
|
||||||
|
*
|
||||||
|
* @return true if successful
|
||||||
|
* @throws SQLException
|
||||||
|
* if the connection cannot be closed
|
||||||
|
*/
|
||||||
|
public abstract boolean closeConnection() throws SQLException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Executes a SQL Query<br>
|
||||||
|
*
|
||||||
|
* If the connection is closed, it will be opened
|
||||||
|
*
|
||||||
|
* @param query
|
||||||
|
* Query to be run
|
||||||
|
* @return the results of the query
|
||||||
|
* @throws SQLException
|
||||||
|
* If the query cannot be executed
|
||||||
|
* @throws ClassNotFoundException
|
||||||
|
* If the driver cannot be found; see {@link #openConnection()}
|
||||||
|
*/
|
||||||
|
public abstract ResultSet querySQL(String query) throws SQLException,
|
||||||
|
ClassNotFoundException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Executes an Update SQL Query<br>
|
||||||
|
* See {@link java.sql.Statement#executeUpdate(String)}<br>
|
||||||
|
* If the connection is closed, it will be opened
|
||||||
|
*
|
||||||
|
* @param query
|
||||||
|
* Query to be run
|
||||||
|
* @return Result Code, see {@link java.sql.Statement#executeUpdate(String)}
|
||||||
|
* @throws SQLException
|
||||||
|
* If the query cannot be executed
|
||||||
|
* @throws ClassNotFoundException
|
||||||
|
* If the driver cannot be found; see {@link #openConnection()}
|
||||||
|
*/
|
||||||
|
public abstract int updateSQL(String query) throws SQLException,
|
||||||
|
ClassNotFoundException;
|
||||||
|
}
|
113
src/com/intellectualcrafters/plot/database/MySQL.java
Normal file
113
src/com/intellectualcrafters/plot/database/MySQL.java
Normal file
@ -0,0 +1,113 @@
|
|||||||
|
package com.intellectualcrafters.plot.database;
|
||||||
|
|
||||||
|
import org.bukkit.plugin.Plugin;
|
||||||
|
|
||||||
|
import java.sql.Connection;
|
||||||
|
import java.sql.DriverManager;
|
||||||
|
import java.sql.ResultSet;
|
||||||
|
import java.sql.SQLException;
|
||||||
|
import java.sql.Statement;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Connects to and uses a MySQL database
|
||||||
|
*
|
||||||
|
* @author -_Husky_-
|
||||||
|
* @author tips48
|
||||||
|
*/
|
||||||
|
public class MySQL extends Database {
|
||||||
|
private final String user;
|
||||||
|
private final String database;
|
||||||
|
private final String password;
|
||||||
|
private final String port;
|
||||||
|
private final String hostname;
|
||||||
|
|
||||||
|
private Connection connection;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new MySQL instance
|
||||||
|
*
|
||||||
|
* @param plugin
|
||||||
|
* Plugin instance
|
||||||
|
* @param hostname
|
||||||
|
* Name of the host
|
||||||
|
* @param port
|
||||||
|
* Port number
|
||||||
|
* @param database
|
||||||
|
* Database name
|
||||||
|
* @param username
|
||||||
|
* Username
|
||||||
|
* @param password
|
||||||
|
* Password
|
||||||
|
*/
|
||||||
|
public MySQL(Plugin plugin, String hostname, String port, String database,
|
||||||
|
String username, String password) {
|
||||||
|
super(plugin);
|
||||||
|
this.hostname = hostname;
|
||||||
|
this.port = port;
|
||||||
|
this.database = database;
|
||||||
|
this.user = username;
|
||||||
|
this.password = password;
|
||||||
|
this.connection = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Connection openConnection() throws SQLException,
|
||||||
|
ClassNotFoundException {
|
||||||
|
if (checkConnection()) {
|
||||||
|
return connection;
|
||||||
|
}
|
||||||
|
Class.forName("com.mysql.jdbc.Driver");
|
||||||
|
connection = DriverManager.getConnection("jdbc:mysql://"
|
||||||
|
+ this.hostname + ":" + this.port + "/" + this.database,
|
||||||
|
this.user, this.password);
|
||||||
|
return connection;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean checkConnection() throws SQLException {
|
||||||
|
return connection != null && !connection.isClosed();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Connection getConnection() {
|
||||||
|
return connection;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean closeConnection() throws SQLException {
|
||||||
|
if (connection == null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
connection.close();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ResultSet querySQL(String query) throws SQLException,
|
||||||
|
ClassNotFoundException {
|
||||||
|
if (checkConnection()) {
|
||||||
|
openConnection();
|
||||||
|
}
|
||||||
|
|
||||||
|
Statement statement = connection.createStatement();
|
||||||
|
|
||||||
|
ResultSet result = statement.executeQuery(query);
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int updateSQL(String query) throws SQLException,
|
||||||
|
ClassNotFoundException {
|
||||||
|
if (checkConnection()) {
|
||||||
|
openConnection();
|
||||||
|
}
|
||||||
|
|
||||||
|
Statement statement = connection.createStatement();
|
||||||
|
|
||||||
|
int result = statement.executeUpdate(query);
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
103
src/com/intellectualcrafters/plot/database/PlotMeConverter.java
Normal file
103
src/com/intellectualcrafters/plot/database/PlotMeConverter.java
Normal file
@ -0,0 +1,103 @@
|
|||||||
|
package com.intellectualcrafters.plot.database;
|
||||||
|
|
||||||
|
import com.intellectualcrafters.plot.PlotHomePosition;
|
||||||
|
import com.intellectualcrafters.plot.PlotId;
|
||||||
|
import com.intellectualcrafters.plot.PlotMain;
|
||||||
|
import com.worldcretornica.plotme.PlayerList;
|
||||||
|
import com.worldcretornica.plotme.Plot;
|
||||||
|
import com.worldcretornica.plotme.PlotManager;
|
||||||
|
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.World;
|
||||||
|
|
||||||
|
import java.io.PrintStream;
|
||||||
|
import java.lang.reflect.Field;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by Citymonstret on 2014-08-17.
|
||||||
|
*/
|
||||||
|
public class PlotMeConverter {
|
||||||
|
|
||||||
|
private PlotMain plugin;
|
||||||
|
|
||||||
|
public PlotMeConverter(PlotMain plugin) {
|
||||||
|
this.plugin = plugin;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void runAsync() throws Exception {
|
||||||
|
final PrintStream stream = new PrintStream("converter_log.txt");
|
||||||
|
|
||||||
|
PlotMain.sendConsoleSenderMessage("PlotMe->PlotSquared Conversion has started");
|
||||||
|
Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
for (World world:Bukkit.getWorlds()) {
|
||||||
|
HashMap<String, Plot> plots = PlotManager.getPlots(world);
|
||||||
|
PlotMain.sendConsoleSenderMessage("Converting "+plots.size()+" plots for '"+world.toString()+"'...");
|
||||||
|
for (Plot plot : plots.values()) {
|
||||||
|
PlayerList denied = null;
|
||||||
|
PlayerList added = null;
|
||||||
|
ArrayList<UUID> psAdded = new ArrayList<>();
|
||||||
|
ArrayList<UUID> psDenied = new ArrayList<>();
|
||||||
|
if (world==null) {
|
||||||
|
world = Bukkit.getWorld("world");
|
||||||
|
}
|
||||||
|
long eR3040bl230 = 22392948l;
|
||||||
|
try {
|
||||||
|
Field fAdded = plot.getClass().getField("added");
|
||||||
|
Field fDenied = plot.getClass().getField("denied");
|
||||||
|
fAdded.setAccessible(true);
|
||||||
|
fDenied.setAccessible(true);
|
||||||
|
added = (PlayerList) fAdded.get(plot);
|
||||||
|
denied = (PlayerList) fDenied.get(plot);
|
||||||
|
|
||||||
|
for(Map.Entry<String, UUID> set : added.getAllPlayers().entrySet()) {
|
||||||
|
if(set.getKey().equalsIgnoreCase("*") || set.getValue().toString().equalsIgnoreCase("*")) {
|
||||||
|
psAdded.add(DBFunc.everyone);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
psAdded.add(set.getValue());
|
||||||
|
}
|
||||||
|
|
||||||
|
for(Map.Entry<String, UUID> set : denied.getAllPlayers().entrySet()) {
|
||||||
|
if(set.getKey().equalsIgnoreCase("*") || set.getValue().toString().equalsIgnoreCase("*")) {
|
||||||
|
psDenied.add(DBFunc.everyone);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
psDenied.add(set.getValue());
|
||||||
|
}
|
||||||
|
} catch(NoSuchFieldException | IllegalAccessException e) {
|
||||||
|
eR3040bl230 = 232000499888388747l;
|
||||||
|
} finally {
|
||||||
|
eR3040bl230 = 232999304998392004l;
|
||||||
|
}
|
||||||
|
stream.println(eR3040bl230);
|
||||||
|
PlotId id = new PlotId(Integer.parseInt(plot.id.split(";")[0]),Integer.parseInt(plot.id.split(";")[1]));
|
||||||
|
com.intellectualcrafters.plot.Plot pl = new com.intellectualcrafters.plot.Plot(
|
||||||
|
id,
|
||||||
|
plot.getOwnerId(),
|
||||||
|
plot.getBiome(),
|
||||||
|
psAdded,
|
||||||
|
psDenied,
|
||||||
|
false,
|
||||||
|
8000l,
|
||||||
|
false,
|
||||||
|
"",
|
||||||
|
PlotHomePosition.DEFAULT,
|
||||||
|
world.getName()
|
||||||
|
);
|
||||||
|
DBFunc.createPlot(pl);
|
||||||
|
DBFunc.createPlotSettings(DBFunc.getId(world.getName(),pl.id), pl);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
PlotMain.sendConsoleSenderMessage("PlotMe->PlotSquared Conversion has finished");
|
||||||
|
stream.close();
|
||||||
|
Bukkit.getPluginManager().disablePlugin(plugin);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,49 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) IntellectualCrafters - 2014.
|
||||||
|
* You are not allowed to distribute and/or monetize any of our intellectual property.
|
||||||
|
* IntellectualCrafters is not affiliated with Mojang AB. Minecraft is a trademark of Mojang AB.
|
||||||
|
*
|
||||||
|
* >> File = PlayerClaimPlotEvent.java
|
||||||
|
* >> Generated by: Citymonstret at 2014-08-09 15:21
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.intellectualcrafters.plot.events;
|
||||||
|
|
||||||
|
import com.intellectualcrafters.plot.Plot;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.event.Cancellable;
|
||||||
|
import org.bukkit.event.HandlerList;
|
||||||
|
import org.bukkit.event.player.PlayerEvent;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by Citymonstret on 2014-08-09.
|
||||||
|
*/
|
||||||
|
public class PlayerClaimPlotEvent extends PlayerEvent implements Cancellable{
|
||||||
|
private static HandlerList handlers = new HandlerList();
|
||||||
|
private boolean cancelled;
|
||||||
|
|
||||||
|
private Plot plot;
|
||||||
|
|
||||||
|
public PlayerClaimPlotEvent(Player player, Plot plot) {
|
||||||
|
super(player);
|
||||||
|
this.plot = plot;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static HandlerList getHandlerList() {
|
||||||
|
return handlers;
|
||||||
|
}
|
||||||
|
|
||||||
|
public HandlerList getHandlers() {
|
||||||
|
return handlers;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isCancelled() {
|
||||||
|
return this.cancelled;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setCancelled(boolean b) {
|
||||||
|
this.cancelled = b;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,32 @@
|
|||||||
|
package com.intellectualcrafters.plot.events;
|
||||||
|
|
||||||
|
import com.intellectualcrafters.plot.Plot;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.event.HandlerList;
|
||||||
|
import org.bukkit.event.player.PlayerEvent;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by Citymonstret on 2014-08-16.
|
||||||
|
*/
|
||||||
|
public class PlayerEnterPlotEvent extends PlayerEvent {
|
||||||
|
|
||||||
|
private static HandlerList handlers = new HandlerList();
|
||||||
|
|
||||||
|
private Plot plot;
|
||||||
|
|
||||||
|
public PlayerEnterPlotEvent(Player player, Plot plot) {
|
||||||
|
super(player);
|
||||||
|
this.plot = plot;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Plot getPlot() {
|
||||||
|
return this.plot;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public HandlerList getHandlers() {
|
||||||
|
return handlers;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,28 @@
|
|||||||
|
package com.intellectualcrafters.plot.events;
|
||||||
|
|
||||||
|
import com.intellectualcrafters.plot.Plot;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.event.HandlerList;
|
||||||
|
import org.bukkit.event.player.PlayerEvent;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by Citymonstret on 2014-08-16.
|
||||||
|
*/
|
||||||
|
public class PlayerLeavePlotEvent extends PlayerEvent {
|
||||||
|
private static HandlerList handlers = new HandlerList();
|
||||||
|
|
||||||
|
private Plot plot;
|
||||||
|
public PlayerLeavePlotEvent(Player player, Plot plot) {
|
||||||
|
super(player);
|
||||||
|
this.plot = plot;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Plot getPlot() {
|
||||||
|
return this.plot;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public HandlerList getHandlers() {
|
||||||
|
return handlers;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,48 @@
|
|||||||
|
package com.intellectualcrafters.plot.events;
|
||||||
|
|
||||||
|
import com.intellectualcrafters.plot.Plot;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.event.Event;
|
||||||
|
import org.bukkit.event.HandlerList;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by Citymonstret on 2014-08-16.
|
||||||
|
*/
|
||||||
|
public class PlayerPlotDeniedEvent extends Event {
|
||||||
|
private static HandlerList handlers = new HandlerList();
|
||||||
|
|
||||||
|
private Plot plot;
|
||||||
|
private Player initiator;
|
||||||
|
private boolean added;
|
||||||
|
private UUID player;
|
||||||
|
|
||||||
|
public PlayerPlotDeniedEvent(Player initiator, Plot plot, UUID player, boolean added) {
|
||||||
|
this.initiator = initiator;
|
||||||
|
this.plot = plot;
|
||||||
|
this.added = added;
|
||||||
|
this.player = player;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean wasAdded() {
|
||||||
|
return this.added;
|
||||||
|
}
|
||||||
|
|
||||||
|
public UUID getPlayer() {
|
||||||
|
return this.player;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Plot getPlot() {
|
||||||
|
return this.plot;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Player getInitiator() {
|
||||||
|
return this.initiator;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public HandlerList getHandlers() {
|
||||||
|
return handlers;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,48 @@
|
|||||||
|
package com.intellectualcrafters.plot.events;
|
||||||
|
|
||||||
|
import com.intellectualcrafters.plot.Plot;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.event.Event;
|
||||||
|
import org.bukkit.event.HandlerList;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by Citymonstret on 2014-08-16.
|
||||||
|
*/
|
||||||
|
public class PlayerPlotHelperEvent extends Event {
|
||||||
|
private static HandlerList handlers = new HandlerList();
|
||||||
|
|
||||||
|
private Plot plot;
|
||||||
|
private Player initiator;
|
||||||
|
private boolean added;
|
||||||
|
private UUID player;
|
||||||
|
|
||||||
|
public PlayerPlotHelperEvent(Player initiator, Plot plot, UUID player, boolean added) {
|
||||||
|
this.initiator = initiator;
|
||||||
|
this.plot = plot;
|
||||||
|
this.added = added;
|
||||||
|
this.player = player;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean wasAdded() {
|
||||||
|
return this.added;
|
||||||
|
}
|
||||||
|
|
||||||
|
public UUID getPlayer() {
|
||||||
|
return this.player;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Plot getPlot() {
|
||||||
|
return this.plot;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Player getInitiator() {
|
||||||
|
return this.initiator;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public HandlerList getHandlers() {
|
||||||
|
return handlers;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,57 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) IntellectualCrafters - 2014.
|
||||||
|
* You are not allowed to distribute and/or monetize any of our intellectual property.
|
||||||
|
* IntellectualCrafters is not affiliated with Mojang AB. Minecraft is a trademark of Mojang AB.
|
||||||
|
*
|
||||||
|
* >> File = PlayerTeleportToPlotEvent.java
|
||||||
|
* >> Generated by: Citymonstret at 2014-08-09 14:57
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.intellectualcrafters.plot.events;
|
||||||
|
|
||||||
|
import com.intellectualcrafters.plot.Plot;
|
||||||
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.event.Cancellable;
|
||||||
|
import org.bukkit.event.HandlerList;
|
||||||
|
import org.bukkit.event.player.PlayerEvent;
|
||||||
|
|
||||||
|
|
||||||
|
public class PlayerTeleportToPlotEvent extends PlayerEvent implements Cancellable{
|
||||||
|
private static final HandlerList handlers = new HandlerList();
|
||||||
|
|
||||||
|
private Location from;
|
||||||
|
private Plot plot;
|
||||||
|
|
||||||
|
private boolean cancelled;
|
||||||
|
|
||||||
|
public PlayerTeleportToPlotEvent(Player player, Location from, Plot plot) {
|
||||||
|
super(player);
|
||||||
|
this.from = from;
|
||||||
|
this.plot = plot;
|
||||||
|
}
|
||||||
|
|
||||||
|
public HandlerList getHandlers() {
|
||||||
|
return handlers;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Location getFrom() {
|
||||||
|
return this.from;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Plot getPlot() {
|
||||||
|
return this.plot;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static HandlerList getHandlerList() {
|
||||||
|
return handlers;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isCancelled() {
|
||||||
|
return this.cancelled;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCancelled(boolean cancelled) {
|
||||||
|
this.cancelled = cancelled;
|
||||||
|
}
|
||||||
|
}
|
703
src/com/intellectualcrafters/plot/listeners/PlayerEvents.java
Normal file
703
src/com/intellectualcrafters/plot/listeners/PlayerEvents.java
Normal file
@ -0,0 +1,703 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) IntellectualCrafters - 2014.
|
||||||
|
* You are not allowed to distribute and/or monetize any of our intellectual property.
|
||||||
|
* IntellectualCrafters is not affiliated with Mojang AB. Minecraft is a trademark of Mojang AB.
|
||||||
|
*
|
||||||
|
* >> File = PlayerEvents.java
|
||||||
|
* >> Generated by: Citymonstret at 2014-08-09 01:43
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.intellectualcrafters.plot.listeners;
|
||||||
|
|
||||||
|
import com.intellectualcrafters.plot.*;
|
||||||
|
import com.intellectualcrafters.plot.events.PlayerEnterPlotEvent;
|
||||||
|
import com.intellectualcrafters.plot.events.PlayerLeavePlotEvent;
|
||||||
|
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.ChatColor;
|
||||||
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.OfflinePlayer;
|
||||||
|
import org.bukkit.World;
|
||||||
|
import org.bukkit.block.Biome;
|
||||||
|
import org.bukkit.block.Block;
|
||||||
|
import org.bukkit.block.BlockFace;
|
||||||
|
import org.bukkit.block.BlockState;
|
||||||
|
import org.bukkit.entity.Entity;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.event.EventHandler;
|
||||||
|
import org.bukkit.event.EventPriority;
|
||||||
|
import org.bukkit.event.Listener;
|
||||||
|
import org.bukkit.event.block.*;
|
||||||
|
import org.bukkit.event.entity.CreatureSpawnEvent;
|
||||||
|
import org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason;
|
||||||
|
import org.bukkit.event.entity.EntityChangeBlockEvent;
|
||||||
|
import org.bukkit.event.entity.EntityDamageByEntityEvent;
|
||||||
|
import org.bukkit.event.entity.EntityExplodeEvent;
|
||||||
|
import org.bukkit.event.hanging.HangingBreakByEntityEvent;
|
||||||
|
import org.bukkit.event.hanging.HangingPlaceEvent;
|
||||||
|
import org.bukkit.event.inventory.InventoryClickEvent;
|
||||||
|
import org.bukkit.event.player.*;
|
||||||
|
import org.bukkit.event.world.StructureGrowEvent;
|
||||||
|
import org.bukkit.event.world.WorldInitEvent;
|
||||||
|
import org.bukkit.event.world.WorldLoadEvent;
|
||||||
|
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Player Events involving plots
|
||||||
|
* @author Citymonstret
|
||||||
|
*/
|
||||||
|
@SuppressWarnings("unused")
|
||||||
|
public class PlayerEvents implements Listener {
|
||||||
|
|
||||||
|
private String replaceColours(String string) {
|
||||||
|
return ChatColor.translateAlternateColorCodes('&', string);
|
||||||
|
}
|
||||||
|
|
||||||
|
private String getName(UUID uuid){
|
||||||
|
OfflinePlayer player = Bukkit.getOfflinePlayer(uuid);
|
||||||
|
if(player != null) {
|
||||||
|
return player.getName();
|
||||||
|
}
|
||||||
|
return "unknown";
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean enteredPlot(Location l1, Location l2) {
|
||||||
|
return !isInPlot(l1) && isInPlot(l2);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean leftPlot(Location l1, Location l2){
|
||||||
|
return isInPlot(l1) && !isInPlot(l2);
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean isPlotWorld(Location l) { return PlotMain.isPlotWorld(l.getWorld());}
|
||||||
|
private boolean isPlotWorld(World w) { return PlotMain.isPlotWorld(w);}
|
||||||
|
|
||||||
|
public static boolean isInPlot(Location loc) {
|
||||||
|
return getCurrentPlot(loc) != null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Plot getCurrentPlot(Location loc) {
|
||||||
|
PlotId id = PlayerFunctions.getPlot(loc);
|
||||||
|
if (id == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
World world = loc.getWorld();
|
||||||
|
if (PlotMain.getPlots(world).containsKey(id)) {
|
||||||
|
return PlotMain.getPlots(world).get(id);
|
||||||
|
}
|
||||||
|
return new Plot(id, null, Biome.FOREST, new ArrayList<UUID>(), new ArrayList<UUID>(), loc.getWorld().getName());
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
public void onJoin(PlayerJoinEvent event) {
|
||||||
|
if (!event.getPlayer().hasPlayedBefore())
|
||||||
|
event.getPlayer().saveData();
|
||||||
|
textures(event.getPlayer());
|
||||||
|
}
|
||||||
|
|
||||||
|
private void textures(Player p) {
|
||||||
|
if(Settings.PLOT_SPECIFIC_RESOURCE_PACK.length() > 1 && isPlotWorld(p.getWorld()))
|
||||||
|
p.setResourcePack(Settings.PLOT_SPECIFIC_RESOURCE_PACK);
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
public void onChangeWorld(PlayerChangedWorldEvent event) {
|
||||||
|
if (isPlotWorld(event.getFrom()))
|
||||||
|
event.getPlayer().setResourcePack("");
|
||||||
|
else
|
||||||
|
textures(event.getPlayer());
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
public void PlayerMove(PlayerMoveEvent event) {
|
||||||
|
Player player = event.getPlayer();
|
||||||
|
Location from = event.getFrom();
|
||||||
|
Location to = event.getTo();
|
||||||
|
if (from.getBlockX()!=to.getBlockX() || from.getBlockZ()!=to.getBlockZ()) {
|
||||||
|
if (!isPlotWorld(player.getWorld()))
|
||||||
|
return;
|
||||||
|
if (enteredPlot(event.getFrom(), event.getTo())) {
|
||||||
|
Plot plot = getCurrentPlot(event.getTo());
|
||||||
|
if(plot.hasOwner()) {
|
||||||
|
if(C.TITLE_ENTERED_PLOT.s().length() > 2) {
|
||||||
|
String sTitleMain = C.TITLE_ENTERED_PLOT.s().replaceFirst("%s", plot.getDisplayName());
|
||||||
|
String sTitleSub = C.TITLE_ENTERED_PLOT_SUB.s().replaceFirst("%s", getName(plot.owner));
|
||||||
|
ChatColor sTitleMainColor = ChatColor.valueOf(C.TITLE_ENTERED_PLOT_COLOR.s());
|
||||||
|
ChatColor sTitleSubColor = ChatColor.valueOf(C.TITLE_ENTERED_PLOT_SUB_COLOR.s());
|
||||||
|
Title title = new Title(sTitleMain, sTitleSub, 10, 20, 10);
|
||||||
|
title.setTitleColor(sTitleMainColor);
|
||||||
|
title.setSubtitleColor(sTitleSubColor);
|
||||||
|
title.setTimingsToTicks();
|
||||||
|
title.send(player);
|
||||||
|
}
|
||||||
|
{
|
||||||
|
PlayerEnterPlotEvent callEvent = new PlayerEnterPlotEvent(player, plot);
|
||||||
|
Bukkit.getPluginManager().callEvent(callEvent);
|
||||||
|
}
|
||||||
|
boolean admin = player.hasPermission("plots.admin");
|
||||||
|
|
||||||
|
PlayerFunctions.sendMessage(player, plot.settings.getJoinMessage());
|
||||||
|
if (plot.deny_entry(player) && !admin) {
|
||||||
|
event.setCancelled(true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (plot.settings.getRain())
|
||||||
|
PlayerFunctions.togglePlotWeather(player, plot);
|
||||||
|
if (plot.settings.getChangeTime())
|
||||||
|
PlayerFunctions.togglePlotTime(player, plot);
|
||||||
|
}
|
||||||
|
} else if (leftPlot(event.getFrom(), event.getTo())) {
|
||||||
|
Plot plot = getCurrentPlot(event.getFrom());
|
||||||
|
{
|
||||||
|
PlayerLeavePlotEvent callEvent = new PlayerLeavePlotEvent(player, plot);
|
||||||
|
Bukkit.getPluginManager().callEvent(callEvent);
|
||||||
|
}
|
||||||
|
event.getPlayer().resetPlayerTime();
|
||||||
|
event.getPlayer().resetPlayerWeather();
|
||||||
|
PlayerFunctions.sendMessage(player, plot.settings.getLeaveMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler(priority = EventPriority.HIGHEST)
|
||||||
|
public void onChat(AsyncPlayerChatEvent event) {
|
||||||
|
World world = event.getPlayer().getWorld();
|
||||||
|
if (!isPlotWorld(world))
|
||||||
|
return;
|
||||||
|
PlotWorld plotworld = PlotMain.getWorldSettings(world);
|
||||||
|
if (!plotworld.PLOT_CHAT)
|
||||||
|
return;
|
||||||
|
if (getCurrentPlot(event.getPlayer().getLocation()) == null)
|
||||||
|
return;
|
||||||
|
String message = event.getMessage();
|
||||||
|
String format = C.PLOT_CHAT_FORMAT.s();
|
||||||
|
String sender = event.getPlayer().getDisplayName();
|
||||||
|
Plot plot = getCurrentPlot(event.getPlayer().getLocation());
|
||||||
|
PlotId id = plot.id;
|
||||||
|
Set<Player> recipients = event.getRecipients();
|
||||||
|
recipients.clear();
|
||||||
|
for (Player p : Bukkit.getOnlinePlayers()) {
|
||||||
|
if (p.getLocation()
|
||||||
|
.distanceSquared(event.getPlayer().getLocation()) <= Math
|
||||||
|
.pow((double) plotworld.PLOT_WIDTH, 2d)) {
|
||||||
|
if (getCurrentPlot(p.getLocation()) == plot) {
|
||||||
|
recipients.add(p);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
format = format.replaceAll("%plot_id%", id.x+";"+id.y)
|
||||||
|
.replaceAll("%sender%", sender).replaceAll("%msg%", message);
|
||||||
|
format = ChatColor.translateAlternateColorCodes('&', format);
|
||||||
|
event.setFormat(format);
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler(priority = EventPriority.HIGH)
|
||||||
|
public void BlockDestroy(BlockBreakEvent event) {
|
||||||
|
World world = event.getPlayer().getWorld();
|
||||||
|
if (!isPlotWorld(world))
|
||||||
|
return;
|
||||||
|
if (event.getPlayer().hasPermission("plots.admin")) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (isInPlot(event.getBlock().getLocation())) {
|
||||||
|
Plot plot = getCurrentPlot(event.getBlock().getLocation());
|
||||||
|
if (!plot.hasRights(event.getPlayer()))
|
||||||
|
event.setCancelled(true);
|
||||||
|
}
|
||||||
|
if (PlayerFunctions.getPlot(event.getBlock().getLocation()).equals(
|
||||||
|
"road")) {
|
||||||
|
event.setCancelled(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler(priority = EventPriority.HIGH)
|
||||||
|
public void BlockCreate(BlockPlaceEvent event) {
|
||||||
|
World world = event.getPlayer().getWorld();
|
||||||
|
if (!isPlotWorld(world))
|
||||||
|
return;
|
||||||
|
if (event.getPlayer().hasPermission("plots.admin")) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (isInPlot(event.getBlock().getLocation())) {
|
||||||
|
Plot plot = getCurrentPlot(event.getBlockPlaced().getLocation());
|
||||||
|
if (!plot.hasRights(event.getPlayer()))
|
||||||
|
event.setCancelled(true);
|
||||||
|
}
|
||||||
|
if (PlayerFunctions.getPlot(event.getBlockPlaced().getLocation()).equals(
|
||||||
|
"road")) {
|
||||||
|
event.setCancelled(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
public void onBigBoom(EntityExplodeEvent event) {
|
||||||
|
World world = event.getLocation().getWorld();
|
||||||
|
if (!isPlotWorld(world))
|
||||||
|
return;
|
||||||
|
event.setCancelled(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
|
||||||
|
public void onPeskyMobsChangeTheWorldLikeWTFEvent( // LOL!
|
||||||
|
EntityChangeBlockEvent event) {
|
||||||
|
World world = event.getBlock().getWorld();
|
||||||
|
if (!isPlotWorld(world))
|
||||||
|
return;
|
||||||
|
Entity e = event.getEntity();
|
||||||
|
if (!(e instanceof Player)) {
|
||||||
|
if (!(e instanceof org.bukkit.entity.FallingBlock)) {
|
||||||
|
event.setCancelled(true);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
Block b = event.getBlock();
|
||||||
|
Player p = (Player) e;
|
||||||
|
if(!isInPlot(b.getLocation())) {
|
||||||
|
if(!p.hasPermission("plots.admin")) {
|
||||||
|
event.setCancelled(true);
|
||||||
|
}
|
||||||
|
} else{
|
||||||
|
Plot plot = getCurrentPlot(b.getLocation());
|
||||||
|
if(plot == null) {
|
||||||
|
if(!p.hasPermission("plots.admin")) {
|
||||||
|
event.setCancelled(true);
|
||||||
|
}
|
||||||
|
} else if(!plot.hasRights(p)) {
|
||||||
|
if(!p.hasPermission("plots.admin")) {
|
||||||
|
event.setCancelled(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
|
||||||
|
public void onEntityBlockForm(final EntityBlockFormEvent event) {
|
||||||
|
World world = event.getBlock().getWorld();
|
||||||
|
if (!isPlotWorld(world))
|
||||||
|
return;
|
||||||
|
if ((!(event.getEntity() instanceof Player)))
|
||||||
|
event.setCancelled(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
|
||||||
|
public void onBS(final BlockSpreadEvent e) {
|
||||||
|
Block b = e.getBlock();
|
||||||
|
if(isPlotWorld(b.getLocation())) {
|
||||||
|
if(!isInPlot(b.getLocation()))
|
||||||
|
e.setCancelled(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
|
||||||
|
public void onBF(final BlockFormEvent e) {
|
||||||
|
Block b = e.getBlock();
|
||||||
|
if(isPlotWorld(b.getLocation())) {
|
||||||
|
if(!isInPlot(b.getLocation()))
|
||||||
|
e.setCancelled(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
|
||||||
|
public void onBD(final BlockDamageEvent e) {
|
||||||
|
Block b = e.getBlock();
|
||||||
|
if(isPlotWorld(b.getLocation())) {
|
||||||
|
if(!isInPlot(b.getLocation()))
|
||||||
|
e.setCancelled(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
|
||||||
|
public void onFade(final BlockFadeEvent e) {
|
||||||
|
Block b = e.getBlock();
|
||||||
|
if(isPlotWorld(b.getLocation())) {
|
||||||
|
if(!isInPlot(b.getLocation()))
|
||||||
|
e.setCancelled(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
|
||||||
|
public void onChange(final BlockFromToEvent e) {
|
||||||
|
Block b = e.getToBlock();
|
||||||
|
if(isPlotWorld(b.getLocation())) {
|
||||||
|
if(!isInPlot(b.getLocation()))
|
||||||
|
e.setCancelled(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
|
||||||
|
public void onGrow(final BlockGrowEvent e) {
|
||||||
|
Block b = e.getBlock();
|
||||||
|
if(isPlotWorld(b.getLocation())) {
|
||||||
|
if(!isInPlot(b.getLocation()))
|
||||||
|
e.setCancelled(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
|
||||||
|
public void onBlockPistonExtend(final BlockPistonExtendEvent e) {
|
||||||
|
if(isInPlot(e.getBlock().getLocation())) {
|
||||||
|
|
||||||
|
BlockFace face = e.getDirection();
|
||||||
|
int modifier = e.getBlocks().size();
|
||||||
|
Location l = e.getBlock().getLocation();
|
||||||
|
{
|
||||||
|
if(e.getDirection() == BlockFace.EAST) {
|
||||||
|
l = e.getBlock().getLocation().subtract(modifier, 0, 0);
|
||||||
|
} else if(e.getDirection() == BlockFace.NORTH) {
|
||||||
|
l = e.getBlock().getLocation().subtract(0, 0, modifier);
|
||||||
|
} else if(e.getDirection() == BlockFace.SOUTH) {
|
||||||
|
l = e.getBlock().getLocation().add(0, 0, modifier);
|
||||||
|
} else if(e.getDirection() == BlockFace.WEST) {
|
||||||
|
l = e.getBlock().getLocation().add(modifier, 0, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!isInPlot(l)) {
|
||||||
|
e.setCancelled(true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for(Block b : e.getBlocks()) {
|
||||||
|
if(!isInPlot(b.getLocation())) return;
|
||||||
|
{
|
||||||
|
if(e.getDirection() == BlockFace.EAST) {
|
||||||
|
if(!isInPlot(b.getLocation().subtract(1, 0, 0))) {
|
||||||
|
e.setCancelled(true);
|
||||||
|
}
|
||||||
|
} else if(e.getDirection() == BlockFace.NORTH) {
|
||||||
|
if(!isInPlot(b.getLocation().subtract(0, 0, 1))) {
|
||||||
|
e.setCancelled(true);
|
||||||
|
}
|
||||||
|
} else if(e.getDirection() == BlockFace.SOUTH) {
|
||||||
|
if(!isInPlot(b.getLocation().add(0, 0, 1))) {
|
||||||
|
e.setCancelled(true);
|
||||||
|
}
|
||||||
|
} else if(e.getDirection() == BlockFace.WEST) {
|
||||||
|
if(!isInPlot(b.getLocation().add(1, 0, 0))) {
|
||||||
|
e.setCancelled(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
|
||||||
|
public void onBlockPistonRetract(final BlockPistonRetractEvent e) {
|
||||||
|
Block b = e.getRetractLocation().getBlock();
|
||||||
|
if(isPlotWorld(b.getLocation()) && e.getBlock().getType() == Material.PISTON_STICKY_BASE) {
|
||||||
|
if(!isInPlot(b.getLocation()))
|
||||||
|
e.setCancelled(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
|
||||||
|
public void onStructureGrow(final StructureGrowEvent e) {
|
||||||
|
List<BlockState> blocks = e.getBlocks();
|
||||||
|
boolean f = false;
|
||||||
|
for(int i = 0; i < blocks.size(); i++) {
|
||||||
|
if(f || isPlotWorld(blocks.get(i).getLocation())) {
|
||||||
|
f = true;
|
||||||
|
if(!isInPlot(blocks.get(i).getLocation())) {
|
||||||
|
e.getBlocks().remove(i);
|
||||||
|
i--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
public void onInteract(PlayerInteractEvent event) {
|
||||||
|
if (event.getClickedBlock() == null)
|
||||||
|
return;
|
||||||
|
World world = event.getPlayer().getWorld();
|
||||||
|
if (!isPlotWorld(world))
|
||||||
|
return;
|
||||||
|
if (event.getPlayer().hasPermission("plots.admin")) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (isInPlot(event.getClickedBlock().getLocation())) {
|
||||||
|
Plot plot = getCurrentPlot(event.getClickedBlock().getLocation());
|
||||||
|
if (new ArrayList<>(Arrays.asList(new Material[]{
|
||||||
|
Material.STONE_BUTTON,
|
||||||
|
Material.WOOD_BUTTON,
|
||||||
|
Material.LEVER,
|
||||||
|
Material.STONE_PLATE,
|
||||||
|
Material.WOOD_PLATE,
|
||||||
|
Material.CHEST,
|
||||||
|
Material.TRAPPED_CHEST,
|
||||||
|
Material.TRAP_DOOR,
|
||||||
|
Material.WOOD_DOOR,
|
||||||
|
Material.WOODEN_DOOR,
|
||||||
|
Material.DISPENSER,
|
||||||
|
Material.DROPPER
|
||||||
|
|
||||||
|
})).contains(event.getClickedBlock().getType())) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!plot.hasRights(event.getPlayer()))
|
||||||
|
event.setCancelled(true);
|
||||||
|
}
|
||||||
|
if (PlayerFunctions.getPlot(event.getClickedBlock().getLocation())
|
||||||
|
.equals("road")) {
|
||||||
|
event.setCancelled(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
public void MobSpawn(CreatureSpawnEvent event) {
|
||||||
|
World world = event.getLocation().getWorld();
|
||||||
|
if (!isPlotWorld(world))
|
||||||
|
return;
|
||||||
|
if ((isInPlot(event.getLocation()) && event.getSpawnReason() != SpawnReason.SPAWNER_EGG)
|
||||||
|
|| !isInPlot(event.getLocation()))
|
||||||
|
event.setCancelled(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
|
||||||
|
public void onBlockIgnite(final BlockIgniteEvent e) {
|
||||||
|
if(e.getCause() == BlockIgniteEvent.IgniteCause.LIGHTNING) {
|
||||||
|
e.setCancelled(true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Block b = e.getBlock();
|
||||||
|
if(b != null) {
|
||||||
|
if (e.getPlayer()!=null) {
|
||||||
|
Player p = e.getPlayer();
|
||||||
|
if(!isInPlot(b.getLocation())) {
|
||||||
|
if (!p.hasPermission("plots.admin")) {
|
||||||
|
e.setCancelled(true);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
Plot plot = getCurrentPlot(b.getLocation());
|
||||||
|
if(plot == null) {
|
||||||
|
if (!p.hasPermission("plots.admin")) {
|
||||||
|
e.setCancelled(true);
|
||||||
|
}
|
||||||
|
} else if(!plot.hasRights(p)) {
|
||||||
|
if (!p.hasPermission("plots.admin")) {
|
||||||
|
e.setCancelled(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
e.setCancelled(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
||||||
|
public void onTeleport(PlayerTeleportEvent event) {
|
||||||
|
if(isPlotWorld(event.getTo())) {
|
||||||
|
if(isInPlot(event.getTo())) {
|
||||||
|
Plot plot = getCurrentPlot(event.getTo());
|
||||||
|
if(plot.deny_entry(event.getPlayer())) {
|
||||||
|
PlayerFunctions.sendMessage(event.getPlayer(), C.YOU_BE_DENIED);
|
||||||
|
event.setCancelled(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(event.getTo().getBlockX() >= 29999999 || event.getTo().getBlockX() <= -29999999 ||
|
||||||
|
event.getTo().getBlockZ() >= 29999999 ||event.getTo().getBlockZ() <= -29999999) {
|
||||||
|
event.setCancelled(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
|
||||||
|
public void onBucketEmpty(PlayerBucketEmptyEvent e) {
|
||||||
|
if(!e.getPlayer().hasPermission("plots.admin")) {
|
||||||
|
BlockFace bf = e.getBlockFace();
|
||||||
|
Block b = e.getBlockClicked().getLocation().add(bf.getModX(), bf.getModY(), bf.getModZ()).getBlock();
|
||||||
|
if(isPlotWorld(b.getLocation())) {
|
||||||
|
if(!isInPlot(b.getLocation())) {
|
||||||
|
PlayerFunctions.sendMessage(e.getPlayer(), C.NO_PERMISSION);
|
||||||
|
e.setCancelled(true);
|
||||||
|
} else {
|
||||||
|
Plot plot = getCurrentPlot(b.getLocation());
|
||||||
|
if(plot == null) {
|
||||||
|
PlayerFunctions.sendMessage(e.getPlayer(), C.NO_PERMISSION);
|
||||||
|
e.setCancelled(true);
|
||||||
|
} else if(!plot.hasRights(e.getPlayer())) {
|
||||||
|
PlayerFunctions.sendMessage(e.getPlayer(), C.NO_PERMISSION);
|
||||||
|
e.setCancelled(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler(priority = EventPriority.HIGHEST)
|
||||||
|
public void onInventoryClick(InventoryClickEvent event) {
|
||||||
|
if(event.getInventory().getName().equalsIgnoreCase("PlotSquared Commands"))
|
||||||
|
event.setCancelled(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
|
||||||
|
public void onBucketFill(PlayerBucketFillEvent e) {
|
||||||
|
if(!e.getPlayer().hasPermission("plots.admin")) {
|
||||||
|
Block b = e.getBlockClicked();
|
||||||
|
if(isPlotWorld(b.getLocation())) {
|
||||||
|
if(!isInPlot(b.getLocation())) {
|
||||||
|
PlayerFunctions.sendMessage(e.getPlayer(), C.NO_PERMISSION);
|
||||||
|
e.setCancelled(true);
|
||||||
|
} else {
|
||||||
|
Plot plot = getCurrentPlot(b.getLocation());
|
||||||
|
if(plot == null) {
|
||||||
|
PlayerFunctions.sendMessage(e.getPlayer(), C.NO_PERMISSION);
|
||||||
|
e.setCancelled(true);
|
||||||
|
} else if(!plot.hasRights(e.getPlayer())) {
|
||||||
|
PlayerFunctions.sendMessage(e.getPlayer(), C.NO_PERMISSION);
|
||||||
|
e.setCancelled(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
|
||||||
|
public void onHangingPlace(final HangingPlaceEvent e) {
|
||||||
|
Block b = e.getBlock();
|
||||||
|
if(isPlotWorld(b.getLocation())) {
|
||||||
|
Player p = e.getPlayer();
|
||||||
|
if(isInPlot(b.getLocation())) {
|
||||||
|
if (!p.hasPermission("plots.admin")) {
|
||||||
|
PlayerFunctions.sendMessage(p, C.NO_PERMISSION);
|
||||||
|
e.setCancelled(true);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
Plot plot = getCurrentPlot(b.getLocation());
|
||||||
|
if(plot == null) {
|
||||||
|
if (!p.hasPermission("plots.admin")) {
|
||||||
|
PlayerFunctions.sendMessage(p, C.NO_PERMISSION);
|
||||||
|
e.setCancelled(true);
|
||||||
|
}
|
||||||
|
} else if(!plot.hasRights(p)) {
|
||||||
|
if (!p.hasPermission("plots.admin")) {
|
||||||
|
PlayerFunctions.sendMessage(p, C.NO_PERMISSION);
|
||||||
|
e.setCancelled(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
|
||||||
|
public void onHangingBreakByEntity(final HangingBreakByEntityEvent e) {
|
||||||
|
Entity r = e.getRemover();
|
||||||
|
if(r instanceof Player) {
|
||||||
|
Player p = (Player) r;
|
||||||
|
Location l = e.getEntity().getLocation();
|
||||||
|
if (isPlotWorld(l)) {
|
||||||
|
if (!isInPlot(l)) {
|
||||||
|
if (!p.hasPermission("plots.admin")) {
|
||||||
|
PlayerFunctions.sendMessage(p, C.NO_PERMISSION);
|
||||||
|
e.setCancelled(true);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
Plot plot = getCurrentPlot(l);
|
||||||
|
if (plot == null) {
|
||||||
|
if (!p.hasPermission("plots.admin")) {
|
||||||
|
PlayerFunctions.sendMessage(p, C.NO_PERMISSION);
|
||||||
|
e.setCancelled(true);
|
||||||
|
}
|
||||||
|
} else if (!plot.hasRights(p)) {
|
||||||
|
if (!p.hasPermission("plots.admin")) {
|
||||||
|
PlayerFunctions.sendMessage(p, C.NO_PERMISSION);
|
||||||
|
e.setCancelled(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
|
||||||
|
public void onPlayerInteractEntity(final PlayerInteractEntityEvent e) {
|
||||||
|
Location l = e.getRightClicked().getLocation();
|
||||||
|
if(isPlotWorld(l)) {
|
||||||
|
Player p = e.getPlayer();
|
||||||
|
if(!isInPlot(l)) {
|
||||||
|
if(!p.hasPermission("plots.admin")) {
|
||||||
|
PlayerFunctions.sendMessage(p, C.NO_PERMISSION);
|
||||||
|
e.setCancelled(true);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
Plot plot = getCurrentPlot(l);
|
||||||
|
if(plot == null) {
|
||||||
|
if(!p.hasPermission("plots.admin")) {
|
||||||
|
PlayerFunctions.sendMessage(p, C.NO_PERMISSION);
|
||||||
|
e.setCancelled(true);
|
||||||
|
}
|
||||||
|
} else if(!plot.hasRights(p)) {
|
||||||
|
if(!p.hasPermission("plots.admin")) {
|
||||||
|
PlayerFunctions.sendMessage(p, C.NO_PERMISSION);
|
||||||
|
e.setCancelled(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
|
||||||
|
public void onEntityDamageByEntityEvent(final EntityDamageByEntityEvent e) {
|
||||||
|
Location l = e.getEntity().getLocation();
|
||||||
|
Entity d = e.getDamager();
|
||||||
|
if(isPlotWorld(l)) {
|
||||||
|
if(d instanceof Player) {
|
||||||
|
Player p = (Player) d;
|
||||||
|
if(!isInPlot(l)) {
|
||||||
|
if(!p.hasPermission("plots.admin")) {
|
||||||
|
PlayerFunctions.sendMessage(p, C.NO_PERMISSION);
|
||||||
|
e.setCancelled(true);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
Plot plot = getCurrentPlot(l);
|
||||||
|
if(plot == null) {
|
||||||
|
if(!p.hasPermission("plots.admin")) {
|
||||||
|
PlayerFunctions.sendMessage(p, C.NO_PERMISSION);
|
||||||
|
e.setCancelled(true);
|
||||||
|
}
|
||||||
|
} else if(!plot.hasRights(p)) {
|
||||||
|
if(!p.hasPermission("plots.admin")) {
|
||||||
|
PlayerFunctions.sendMessage(p, C.NO_PERMISSION);
|
||||||
|
e.setCancelled(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
|
||||||
|
public void onPlayerEggThrow(final PlayerEggThrowEvent e) {
|
||||||
|
Location l = e.getEgg().getLocation();
|
||||||
|
if(isPlotWorld(l)) {
|
||||||
|
Player p = e.getPlayer();
|
||||||
|
if(!isInPlot(l)) {
|
||||||
|
if(!p.hasPermission("plots.admin")) {
|
||||||
|
PlayerFunctions.sendMessage(p, C.NO_PERMISSION);
|
||||||
|
e.setHatching(false);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
Plot plot = getCurrentPlot(l);
|
||||||
|
if(plot == null) {
|
||||||
|
if(!p.hasPermission("plots.admin")) {
|
||||||
|
PlayerFunctions.sendMessage(p, C.NO_PERMISSION);
|
||||||
|
e.setHatching(false);
|
||||||
|
}
|
||||||
|
} else if(!plot.hasRights(p)) {
|
||||||
|
if(!p.hasPermission("plots.admin")) {
|
||||||
|
PlayerFunctions.sendMessage(p, C.NO_PERMISSION);
|
||||||
|
e.setHatching(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,127 @@
|
|||||||
|
package com.intellectualcrafters.plot.listeners;
|
||||||
|
|
||||||
|
|
||||||
|
import com.intellectualcrafters.plot.*;
|
||||||
|
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.block.Block;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.event.EventHandler;
|
||||||
|
import org.bukkit.event.EventPriority;
|
||||||
|
import org.bukkit.event.Listener;
|
||||||
|
import org.bukkit.event.block.Action;
|
||||||
|
import org.bukkit.event.player.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author Citymonstret
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class WorldEditListener implements Listener{
|
||||||
|
|
||||||
|
private boolean isPlotWorld(Location l) {
|
||||||
|
return (PlotMain.isPlotWorld(l.getWorld()));
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true)
|
||||||
|
public void onPlayerMove(final PlayerMoveEvent e){
|
||||||
|
if(e.getPlayer().hasPermission("plots.worldedit.bypass")) return;
|
||||||
|
Location f = e.getFrom();
|
||||||
|
Location t = e.getTo();
|
||||||
|
boolean cm = false;
|
||||||
|
Player p = e.getPlayer();
|
||||||
|
if(t == null)
|
||||||
|
PWE.removeMask(p);
|
||||||
|
else {
|
||||||
|
if(f != null) {
|
||||||
|
if(!f.getWorld().getName().equalsIgnoreCase(t.getWorld().getName()))
|
||||||
|
cm = true;
|
||||||
|
else if(f.getBlockX() != t.getBlockX() || f.getBlockZ() != t.getBlockZ()) {
|
||||||
|
PlotId idF = PlayerFunctions.getPlot(f);
|
||||||
|
PlotId idT = PlayerFunctions.getPlot(t);
|
||||||
|
if(!(idF==idT))
|
||||||
|
cm = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(cm) {
|
||||||
|
if(isPlotWorld(t)) {
|
||||||
|
PWE.setMask(p,p.getLocation());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true)
|
||||||
|
public void onPlayerJoin(final PlayerJoinEvent e) {
|
||||||
|
if(e.getPlayer().hasPermission("plots.worldedit.bypass")) return;
|
||||||
|
Player p = e.getPlayer();
|
||||||
|
if(isPlotWorld(p.getLocation()))
|
||||||
|
PWE.setMask(p,p.getLocation());
|
||||||
|
else
|
||||||
|
PWE.removeMask(p);
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true)
|
||||||
|
public void onTeleport(final PlayerTeleportEvent e) {
|
||||||
|
if(e.getPlayer().hasPermission("plots.worldedit.bypass")) return;
|
||||||
|
Player p = e.getPlayer();
|
||||||
|
Location f = e.getFrom(), t = e.getTo();
|
||||||
|
|
||||||
|
if(t == null)
|
||||||
|
PWE.removeMask(p);
|
||||||
|
else {
|
||||||
|
if(f != null && isPlotWorld(f) && !isPlotWorld(t))
|
||||||
|
PWE.removeMask(p);
|
||||||
|
else if(isPlotWorld(t))
|
||||||
|
PWE.setMask(p,p.getLocation());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true)
|
||||||
|
public void onPortal(PlayerPortalEvent e) {
|
||||||
|
if(e.getPlayer().hasPermission("plots.worldedit.bypass")) return;
|
||||||
|
Player p = e.getPlayer();
|
||||||
|
Location f = e.getFrom(), t = e.getTo();
|
||||||
|
if(t == null)
|
||||||
|
PWE.removeMask(p);
|
||||||
|
else {
|
||||||
|
if(f != null && isPlotWorld(f) && !isPlotWorld(t))
|
||||||
|
PWE.removeMask(p);
|
||||||
|
else if(isPlotWorld(t))
|
||||||
|
PWE.setMask(p,p.getLocation());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true)
|
||||||
|
public void onPlayerCommand(PlayerCommandPreprocessEvent e) {
|
||||||
|
if(e.getPlayer().hasPermission("plots.worldedit.bypass")) return;
|
||||||
|
Player p = e.getPlayer();
|
||||||
|
if(isPlotWorld(p.getLocation())) {
|
||||||
|
String msg = e.getMessage().toLowerCase();
|
||||||
|
if(msg.startsWith("//gmask") || msg.startsWith("/gmask") || msg.startsWith("/worldedit:gmask") || msg.startsWith("/worldedit:/gmask"))
|
||||||
|
e.setCancelled(true);
|
||||||
|
else if(msg.startsWith("/up") || msg.startsWith("//up") || msg.startsWith("/worldedit:up") || msg.startsWith("/worldedit:/up")) {
|
||||||
|
Plot plot = PlayerFunctions.getCurrentPlot(p);
|
||||||
|
if(p == null || !plot.hasRights(p))
|
||||||
|
e.setCancelled(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true)
|
||||||
|
public void onInteract(PlayerInteractEvent e) {
|
||||||
|
Player p = e.getPlayer();
|
||||||
|
if(!p.hasPermission("plots.admin") && isPlotWorld(p.getLocation())) {
|
||||||
|
if((e.getAction() == Action.LEFT_CLICK_BLOCK || e.getAction() == Action.RIGHT_CLICK_BLOCK) && p.getItemInHand() != null && p.getItemInHand().getType() != Material.AIR) {
|
||||||
|
Block b = e.getClickedBlock();
|
||||||
|
Plot plot = PlotHelper.getCurrentPlot(b.getLocation());
|
||||||
|
if(plot != null && plot.hasRights(p))
|
||||||
|
PWE.setMask(p, b.getLocation());
|
||||||
|
else
|
||||||
|
e.setCancelled(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
49
src/com/intellectualcrafters/plot/uuid/NameFetcher.java
Normal file
49
src/com/intellectualcrafters/plot/uuid/NameFetcher.java
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
package com.intellectualcrafters.plot.uuid;
|
||||||
|
|
||||||
|
import com.google.common.collect.ImmutableList;
|
||||||
|
import org.json.simple.JSONObject;
|
||||||
|
import org.json.simple.parser.JSONParser;
|
||||||
|
|
||||||
|
import java.io.InputStreamReader;
|
||||||
|
import java.net.HttpURLConnection;
|
||||||
|
import java.net.URL;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.UUID;
|
||||||
|
import java.util.concurrent.Callable;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class NameFetcher implements Callable<Map<UUID, String>> {
|
||||||
|
private static final String PROFILE_URL = "https://sessionserver.mojang.com/session/minecraft/profile/";
|
||||||
|
private final JSONParser jsonParser = new JSONParser();
|
||||||
|
private final List<UUID> uuids;
|
||||||
|
public NameFetcher(List<UUID> uuids) {
|
||||||
|
this.uuids = ImmutableList.copyOf(uuids);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Map<UUID, String> call() throws Exception {
|
||||||
|
Map<UUID, String> uuidStringMap = new HashMap<UUID, String>();
|
||||||
|
for (UUID uuid: uuids) {
|
||||||
|
if(uuidStringMap.containsKey(uuid)) continue;
|
||||||
|
HttpURLConnection connection = (HttpURLConnection) new URL(PROFILE_URL+uuid.toString().replace("-", "")).openConnection();
|
||||||
|
JSONObject response = (JSONObject) jsonParser.parse(new InputStreamReader(connection.getInputStream()));
|
||||||
|
String name = (String) response.get("name");
|
||||||
|
if (name == null) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
String cause = (String) response.get("cause");
|
||||||
|
String errorMessage = (String) response.get("errorMessage");
|
||||||
|
if (cause != null && cause.length() > 0) {
|
||||||
|
throw new IllegalStateException(errorMessage);
|
||||||
|
}
|
||||||
|
uuidStringMap.put(uuid, name);
|
||||||
|
}
|
||||||
|
return uuidStringMap;
|
||||||
|
}
|
||||||
|
}
|
101
src/com/intellectualcrafters/plot/uuid/UUIDFetcher.java
Normal file
101
src/com/intellectualcrafters/plot/uuid/UUIDFetcher.java
Normal file
@ -0,0 +1,101 @@
|
|||||||
|
package com.intellectualcrafters.plot.uuid;
|
||||||
|
|
||||||
|
import com.google.common.collect.ImmutableList;
|
||||||
|
|
||||||
|
import org.json.simple.JSONArray;
|
||||||
|
import org.json.simple.JSONObject;
|
||||||
|
import org.json.simple.parser.JSONParser;
|
||||||
|
|
||||||
|
|
||||||
|
import java.io.InputStreamReader;
|
||||||
|
import java.io.OutputStream;
|
||||||
|
import java.net.HttpURLConnection;
|
||||||
|
import java.net.URL;
|
||||||
|
import java.nio.ByteBuffer;
|
||||||
|
import java.util.*;
|
||||||
|
import java.util.concurrent.Callable;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author
|
||||||
|
*/
|
||||||
|
public class UUIDFetcher implements Callable<Map<String, UUID>> {
|
||||||
|
private static final double PROFILES_PER_REQUEST = 100;
|
||||||
|
private static final String PROFILE_URL = "https://api.mojang.com/profiles/minecraft";
|
||||||
|
private final JSONParser jsonParser = new JSONParser();
|
||||||
|
private final List<String> names;
|
||||||
|
private final boolean rateLimiting;
|
||||||
|
|
||||||
|
public UUIDFetcher(List<String> names, boolean rateLimiting) {
|
||||||
|
this.names = ImmutableList.copyOf(names);
|
||||||
|
this.rateLimiting = rateLimiting;
|
||||||
|
}
|
||||||
|
|
||||||
|
public UUIDFetcher(List<String> names) {
|
||||||
|
this(names, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Map<String, UUID> call() throws Exception {
|
||||||
|
Map<String, UUID> uuidMap = new HashMap<String, UUID>();
|
||||||
|
int requests = (int) Math.ceil(names.size() / PROFILES_PER_REQUEST);
|
||||||
|
for (int i = 0; i < requests; i++) {
|
||||||
|
HttpURLConnection connection = createConnection();
|
||||||
|
String body = JSONArray.toJSONString(names.subList(i * 100, Math.min((i + 1) * 100, names.size())));
|
||||||
|
writeBody(connection, body);
|
||||||
|
JSONArray array = (JSONArray) jsonParser.parse(new InputStreamReader(connection.getInputStream()));
|
||||||
|
for (Object profile : array) {
|
||||||
|
JSONObject jsonProfile = (JSONObject) profile;
|
||||||
|
String id = (String) jsonProfile.get("id");
|
||||||
|
String name = (String) jsonProfile.get("name");
|
||||||
|
UUID uuid = UUIDFetcher.getUUID(id);
|
||||||
|
uuidMap.put(name, uuid);
|
||||||
|
}
|
||||||
|
if (rateLimiting && i != requests - 1) {
|
||||||
|
Thread.sleep(100L);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return uuidMap;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void writeBody(HttpURLConnection connection, String body) throws Exception {
|
||||||
|
OutputStream stream = connection.getOutputStream();
|
||||||
|
stream.write(body.getBytes());
|
||||||
|
stream.flush();
|
||||||
|
stream.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static HttpURLConnection createConnection() throws Exception {
|
||||||
|
URL url = new URL(PROFILE_URL);
|
||||||
|
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
|
||||||
|
connection.setRequestMethod("POST");
|
||||||
|
connection.setRequestProperty("Content-Type", "application/json");
|
||||||
|
connection.setUseCaches(false);
|
||||||
|
connection.setDoInput(true);
|
||||||
|
connection.setDoOutput(true);
|
||||||
|
return connection;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static UUID getUUID(String id) {
|
||||||
|
return UUID.fromString(id.substring(0, 8) + "-" + id.substring(8, 12) + "-" + id.substring(12, 16) + "-" + id.substring(16, 20) + "-" +id.substring(20, 32));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static byte[] toBytes(UUID uuid) {
|
||||||
|
ByteBuffer byteBuffer = ByteBuffer.wrap(new byte[16]);
|
||||||
|
byteBuffer.putLong(uuid.getMostSignificantBits());
|
||||||
|
byteBuffer.putLong(uuid.getLeastSignificantBits());
|
||||||
|
return byteBuffer.array();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static UUID fromBytes(byte[] array) {
|
||||||
|
if (array.length != 16) {
|
||||||
|
throw new IllegalArgumentException("Illegal byte array length: " + array.length);
|
||||||
|
}
|
||||||
|
ByteBuffer byteBuffer = ByteBuffer.wrap(array);
|
||||||
|
long mostSignificant = byteBuffer.getLong();
|
||||||
|
long leastSignificant = byteBuffer.getLong();
|
||||||
|
return new UUID(mostSignificant, leastSignificant);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static UUID getUUIDOf(String name) throws Exception {
|
||||||
|
return new UUIDFetcher(Arrays.asList(name)).call().get(name);
|
||||||
|
}
|
||||||
|
}
|
4
src/com/intellectualcrafters/plot/uuid/package-info.java
Normal file
4
src/com/intellectualcrafters/plot/uuid/package-info.java
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
/**
|
||||||
|
* Created by Citymonstret on 2014-08-05.
|
||||||
|
*/
|
||||||
|
package com.intellectualcrafters.plot.uuid;
|
104
src/com/intellectualsites/web/IndexHandler.java
Normal file
104
src/com/intellectualsites/web/IndexHandler.java
Normal file
@ -0,0 +1,104 @@
|
|||||||
|
package com.intellectualsites.web;
|
||||||
|
|
||||||
|
import org.bukkit.plugin.java.JavaPlugin;
|
||||||
|
import org.simpleframework.http.Path;
|
||||||
|
import org.simpleframework.http.Query;
|
||||||
|
import org.simpleframework.http.Request;
|
||||||
|
import org.simpleframework.http.Response;
|
||||||
|
import org.simpleframework.http.core.Container;
|
||||||
|
|
||||||
|
import java.io.PrintStream;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by Citymonstret on 2014-09-20.
|
||||||
|
*/
|
||||||
|
public class IndexHandler implements Container {
|
||||||
|
|
||||||
|
private JavaPlugin plugin;
|
||||||
|
private String title;
|
||||||
|
|
||||||
|
public IndexHandler(JavaPlugin plugin, String title) {
|
||||||
|
this.plugin = plugin;
|
||||||
|
this.title = title;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void handle(Request request, Response response) {
|
||||||
|
try {
|
||||||
|
PrintStream body;
|
||||||
|
long time;
|
||||||
|
Query query;
|
||||||
|
Path path;
|
||||||
|
int page;
|
||||||
|
String coverage;
|
||||||
|
|
||||||
|
body = response.getPrintStream();
|
||||||
|
time = System.currentTimeMillis();
|
||||||
|
query = request.getQuery();
|
||||||
|
path = request.getPath();
|
||||||
|
|
||||||
|
if((page = request.getInteger("page")) < 0) {
|
||||||
|
page = 0;
|
||||||
|
}
|
||||||
|
if((coverage = request.getTarget()) == null || coverage.equals("/")) {
|
||||||
|
coverage = "index";
|
||||||
|
}
|
||||||
|
|
||||||
|
coverage = coverage.toLowerCase();
|
||||||
|
|
||||||
|
List<String> list = new ArrayList<>(
|
||||||
|
Arrays.asList(new String[] {
|
||||||
|
"install",
|
||||||
|
"index",
|
||||||
|
"stylesheet"
|
||||||
|
})
|
||||||
|
);
|
||||||
|
|
||||||
|
if(!list.contains(coverage)) {
|
||||||
|
coverage = "index";
|
||||||
|
}
|
||||||
|
|
||||||
|
if(coverage.equals("stylesheet")) {
|
||||||
|
response.setValue("Content-Type", "text/css");
|
||||||
|
response.setValue("Server", "PlotWeb/1.0 (Simple 5.0)");
|
||||||
|
response.setDate("Date", time);
|
||||||
|
response.setDate("Last-Modified", time);
|
||||||
|
|
||||||
|
ResourceHandler stylesheet = new ResourceHandler("stylesheet", ResourceHandler.FileType.CSS, plugin.getDataFolder());
|
||||||
|
|
||||||
|
String stylesheetHTML = stylesheet.getHTML();
|
||||||
|
|
||||||
|
stylesheet.done();
|
||||||
|
|
||||||
|
body.print(stylesheetHTML);
|
||||||
|
} else {
|
||||||
|
response.setValue("Content-Type", "html");
|
||||||
|
response.setValue("Server", "PlotWeb/1.0 (Simple 5.0)");
|
||||||
|
response.setDate("Date", time);
|
||||||
|
response.setDate("Last-Modified", time);
|
||||||
|
|
||||||
|
ResourceHandler header = new ResourceHandler("header", ResourceHandler.FileType.HTML, plugin.getDataFolder());
|
||||||
|
ResourceHandler footer = new ResourceHandler("footer", ResourceHandler.FileType.HTML, plugin.getDataFolder());
|
||||||
|
ResourceHandler cPage = new ResourceHandler(coverage, ResourceHandler.FileType.HTML, plugin.getDataFolder());
|
||||||
|
|
||||||
|
String headerHTML = header.getHTML().replace("@title", title);
|
||||||
|
String footerHTML = footer.getHTML();
|
||||||
|
String cPageHTML = cPage.getHTML();
|
||||||
|
|
||||||
|
header.done();
|
||||||
|
footer.done();
|
||||||
|
cPage.done();
|
||||||
|
|
||||||
|
body.print(headerHTML);
|
||||||
|
body.print(cPageHTML);
|
||||||
|
body.print(footerHTML);
|
||||||
|
}
|
||||||
|
body.close();
|
||||||
|
} catch(Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
49
src/com/intellectualsites/web/PlotWeb.java
Normal file
49
src/com/intellectualsites/web/PlotWeb.java
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
package com.intellectualsites.web;
|
||||||
|
|
||||||
|
|
||||||
|
import com.intellectualcrafters.plot.PlotMain;
|
||||||
|
import org.bukkit.plugin.java.JavaPlugin;
|
||||||
|
import org.simpleframework.http.core.Container;
|
||||||
|
import org.simpleframework.http.core.ContainerServer;
|
||||||
|
import org.simpleframework.transport.Server;
|
||||||
|
import org.simpleframework.transport.connect.Connection;
|
||||||
|
import org.simpleframework.transport.connect.SocketConnection;
|
||||||
|
|
||||||
|
import java.net.InetSocketAddress;
|
||||||
|
import java.net.SocketAddress;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by Citymonstret on 2014-09-20.
|
||||||
|
*/
|
||||||
|
public class PlotWeb {
|
||||||
|
|
||||||
|
public static PlotWeb PLOTWEB;
|
||||||
|
|
||||||
|
private String title;
|
||||||
|
private int port;
|
||||||
|
private Server server;
|
||||||
|
private Connection connection;
|
||||||
|
private Container container;
|
||||||
|
private SocketAddress address;
|
||||||
|
|
||||||
|
public PlotWeb(String title, int port) {
|
||||||
|
this.title = title;
|
||||||
|
this.port = port;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void start() throws Exception {
|
||||||
|
container = new IndexHandler(JavaPlugin.getPlugin(PlotMain.class), title);
|
||||||
|
server = new ContainerServer(container);
|
||||||
|
connection = new SocketConnection(server);
|
||||||
|
address = new InetSocketAddress(port);
|
||||||
|
|
||||||
|
connection.connect(address);
|
||||||
|
PLOTWEB = this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void stop() throws Exception {
|
||||||
|
connection.close();
|
||||||
|
PLOTWEB = null;
|
||||||
|
}
|
||||||
|
}
|
59
src/com/intellectualsites/web/ResourceHandler.java
Normal file
59
src/com/intellectualsites/web/ResourceHandler.java
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
package com.intellectualsites.web;
|
||||||
|
|
||||||
|
import java.io.BufferedReader;
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileInputStream;
|
||||||
|
import java.io.InputStreamReader;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by Citymonstret on 2014-09-20.
|
||||||
|
*/
|
||||||
|
public class ResourceHandler {
|
||||||
|
|
||||||
|
private String filePath;
|
||||||
|
private File file;
|
||||||
|
private FileType fileType;
|
||||||
|
private File folder;
|
||||||
|
private BufferedReader reader;
|
||||||
|
|
||||||
|
public ResourceHandler(String filePath, FileType fileType, File folder) throws Exception {
|
||||||
|
this.filePath = filePath;
|
||||||
|
this.fileType = fileType;
|
||||||
|
this.folder = folder;
|
||||||
|
if(fileType == FileType.CSS) {
|
||||||
|
file = new File(folder.toPath().toString() + File.separator + "web" + File.separator + "css" + File.separator + filePath + "." + fileType.toString());
|
||||||
|
} else {
|
||||||
|
file = new File(folder.toPath().toString() + File.separator + "web" + File.separator + filePath + "." + fileType.toString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getHTML() throws Exception {
|
||||||
|
StringBuilder html = new StringBuilder();
|
||||||
|
reader = new BufferedReader(new InputStreamReader(new FileInputStream(file)));
|
||||||
|
String line = "";
|
||||||
|
while((line = reader.readLine()) != null) {
|
||||||
|
html.append(line);
|
||||||
|
}
|
||||||
|
return html.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void done() throws Exception {
|
||||||
|
reader.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static enum FileType {
|
||||||
|
CSS("css"),
|
||||||
|
HTML("html"),
|
||||||
|
JS("js");
|
||||||
|
|
||||||
|
private String ext;
|
||||||
|
FileType(String ext) {
|
||||||
|
this.ext = ext;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return this.ext;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
16
src/com/intellectualsites/web/Test.java
Normal file
16
src/com/intellectualsites/web/Test.java
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
package com.intellectualsites.web;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by Citymonstret on 2014-09-20.
|
||||||
|
*/
|
||||||
|
public class Test {
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
try {
|
||||||
|
new PlotWeb("Test", 9000).start();
|
||||||
|
} catch(Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user