1
0
mirror of https://github.com/Zrips/Jobs.git synced 2024-11-25 20:16:13 +01:00

Lets update signs and heads in hard way and lets make it more optimized

This commit is contained in:
Zrips 2019-02-01 15:38:25 +02:00
parent 84681df41a
commit c3ccf30b6d
3 changed files with 231 additions and 183 deletions

View File

@ -3,19 +3,24 @@ package com.gamingmesh.jobs.Signs;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.World;
import org.bukkit.block.Block;
import org.bukkit.block.BlockFace;
import org.bukkit.block.Skull;
import org.bukkit.block.data.BlockData;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.configuration.file.YamlConfiguration;
import com.gamingmesh.jobs.Jobs;
import com.gamingmesh.jobs.CMILib.CMIChatColor;
import com.gamingmesh.jobs.config.CommentedYamlConfiguration;
import com.gamingmesh.jobs.container.TopList;
import com.gamingmesh.jobs.stuff.Debug;
public class SignUtil {
@ -32,9 +37,9 @@ public class SignUtil {
// Sign file
public void LoadSigns() {
// Boolean false does not create a file
if (!Jobs.getGCManager().SignsEnabled)
return;
// Boolean false does not create a file
if (!Jobs.getGCManager().SignsEnabled)
return;
Signs.GetAllSigns().clear();
File file = new File(plugin.getDataFolder(), "Signs.yml");
@ -65,8 +70,8 @@ public class SignUtil {
// Signs save file
public void saveSigns() {
if (!Jobs.getGCManager().SignsEnabled)
return;
if (!Jobs.getGCManager().SignsEnabled)
return;
File f = new File(plugin.getDataFolder(), "Signs.yml");
YamlConfiguration conf = YamlConfiguration.loadConfiguration(f);
@ -99,148 +104,184 @@ public class SignUtil {
}
public boolean SignUpdate(String JobName) {
if (!Jobs.getGCManager().SignsEnabled)
return true;
if (!Jobs.getGCManager().SignsEnabled)
return true;
List<com.gamingmesh.jobs.Signs.Sign> Copy = new ArrayList<>(Signs.GetAllSigns().size());
for (com.gamingmesh.jobs.Signs.Sign foo : Signs.GetAllSigns()) {
Copy.add(foo);
}
int timelapse = 1;
for (com.gamingmesh.jobs.Signs.Sign one : Copy) {
List<TopList> PlayerList = new ArrayList<>();
if (JobName.equalsIgnoreCase("gtoplist"))
PlayerList = Jobs.getJobsDAO().getGlobalTopList(0);
for (com.gamingmesh.jobs.Signs.Sign one : new ArrayList<>(Signs.GetAllSigns())) {
String SignJobName = one.GetJobName();
if (JobName.equalsIgnoreCase(SignJobName)) {
String SignsWorld = one.GetWorld();
double SignsX = one.GetX();
double SignsY = one.GetY();
double SignsZ = one.GetZ();
int number = one.GetNumber() - 1;
if (!JobName.equalsIgnoreCase(SignJobName))
continue;
List<TopList> PlayerList = new ArrayList<>();
if (!JobName.equalsIgnoreCase("gtoplist")) {
PlayerList = Jobs.getJobsDAO().toplist(SignJobName, number);
} else {
PlayerList = Jobs.getJobsDAO().getGlobalTopList(number);
}
if (PlayerList.size() != 0) {
World world = Bukkit.getWorld(SignsWorld);
if (world == null)
continue;
Location nloc = new Location(world, SignsX, SignsY, SignsZ);
Block block = nloc.getBlock();
if (!(block.getState() instanceof org.bukkit.block.Sign)) {
Signs.GetAllSigns().remove(one);
saveSigns();
} else {
org.bukkit.block.Sign sign = (org.bukkit.block.Sign) block.getState();
if (!one.isSpecial()) {
for (int i = 0; i < 4; i++) {
if (i >= PlayerList.size())
break;
String PlayerName = PlayerList.get(i).getPlayerName();
World world = Bukkit.getWorld(one.GetWorld());
if (world == null)
continue;
if (PlayerName != null && PlayerName.length() > 8) {
String PlayerNameStrip = PlayerName.split("(?<=\\G.{7})")[0];
PlayerName = PlayerNameStrip + "~";
}
double SignsX = one.GetX();
double SignsY = one.GetY();
double SignsZ = one.GetZ();
int number = one.GetNumber() - 1;
if (PlayerName == null)
PlayerName = "Unknown";
String line = Jobs.getLanguage().getMessage("signs.List");
line = line.replace("[number]", String.valueOf(i + number + 1));
line = line.replace("[player]", PlayerName);
line = line.replace("[level]", String.valueOf(PlayerList.get(i).getLevel()));
sign.setLine(i, line);
}
sign.update();
UpdateHead(sign, PlayerList.get(0).getPlayerName(), timelapse);
} else {
String PlayerName = PlayerList.get(0).getPlayerName();
if (PlayerName.length() > 8) {
String PlayerNameStrip = PlayerName.split("(?<=\\G.{7})")[0];
PlayerName = PlayerNameStrip + "~";
}
String line1 = Jobs.getLanguage().getMessage("signs.SpecialList.p" + one.GetNumber(),
"[number]", one.GetNumber() + number + 1,
"[player]", PlayerName,
"[level]", PlayerList.get(0).getLevel(),
"[job]", JobName);
sign.setLine(0, line1);
line1 = Jobs.getLanguage().getMessage("signs.SpecialList.name",
"[number]", one.GetNumber() + number + 1,
"[player]", PlayerName,
"[level]", PlayerList.get(0).getLevel(),
"[job]", JobName);
sign.setLine(1, line1);
line1 = Jobs.getLanguage().getMessage("signs.SpecialList.level",
"[number]", one.GetNumber() + number + 1,
"[player]", PlayerName,
"[level]", PlayerList.get(0).getLevel(),
"[job]", JobName);
sign.setLine(2, line1);
line1 = Jobs.getLanguage().getMessage("signs.SpecialList.bottom",
"[number]", one.GetNumber() + number + 1,
"[player]", PlayerName,
"[level]", PlayerList.get(0).getLevel(),
"[job]", JobName);
sign.setLine(3, line1);
sign.update();
UpdateHead(sign, PlayerList.get(0).getPlayerName(), timelapse);
}
timelapse++;
}
}
if (!JobName.equalsIgnoreCase("gtoplist")) {
PlayerList = Jobs.getJobsDAO().toplist(SignJobName, number);
}
if (PlayerList.isEmpty())
continue;
Location nloc = new Location(world, SignsX, SignsY, SignsZ);
Block block = nloc.getBlock();
if (!(block.getState() instanceof org.bukkit.block.Sign)) {
Signs.GetAllSigns().remove(one);
saveSigns();
continue;
}
org.bukkit.block.Sign sign = (org.bukkit.block.Sign) block.getState();
if (!one.isSpecial()) {
for (int i = 0; i < 4; i++) {
if (i >= PlayerList.size())
break;
String PlayerName = PlayerList.get(i).getPlayerName();
if (PlayerName != null && PlayerName.length() > 8) {
String PlayerNameStrip = PlayerName.split("(?<=\\G.{7})")[0];
PlayerName = PlayerNameStrip + "~";
}
if (PlayerName == null)
PlayerName = "Unknown";
String line = Jobs.getLanguage().getMessage("signs.List");
line = line.replace("[number]", String.valueOf(i + number + 1));
line = line.replace("[player]", PlayerName);
line = line.replace("[level]", String.valueOf(PlayerList.get(i).getLevel()));
sign.setLine(i, line);
}
sign.update();
if (!UpdateHead(sign, PlayerList.get(0).getPlayerName(), timelapse))
timelapse--;
} else {
TopList pl = PlayerList.get(one.GetNumber() - 1);
String PlayerName = pl.getPlayerName();
if (PlayerName.length() > 8) {
String PlayerNameStrip = PlayerName.split("(?<=\\G.{7})")[0];
PlayerName = PlayerNameStrip + "~";
}
String line1 = Jobs.getLanguage().getMessage("signs.SpecialList.p" + one.GetNumber(),
"[number]", one.GetNumber() + number + 1,
"[player]", PlayerName,
"[level]", pl.getLevel(),
"[job]", JobName);
sign.setLine(0, line1);
line1 = Jobs.getLanguage().getMessage("signs.SpecialList.name",
"[number]", one.GetNumber() + number + 1,
"[player]", PlayerName,
"[level]", pl.getLevel(),
"[job]", JobName);
sign.setLine(1, line1);
line1 = Jobs.getLanguage().getMessage("signs.SpecialList.level",
"[number]", one.GetNumber() + number + 1,
"[player]", PlayerName,
"[level]", pl.getLevel(),
"[job]", JobName);
sign.setLine(2, line1);
line1 = Jobs.getLanguage().getMessage("signs.SpecialList.bottom",
"[number]", one.GetNumber() + number + 1,
"[player]", PlayerName,
"[level]", pl.getLevel(),
"[job]", JobName);
sign.setLine(3, line1);
sign.update();
if (!UpdateHead(sign, PlayerName, timelapse))
timelapse--;
}
timelapse++;
}
return true;
}
public void UpdateHead(final org.bukkit.block.Sign sign, final String Playername, final int timelapse) {
public boolean UpdateHead(final org.bukkit.block.Sign sign, final String Playername, int timelapse) {
try {
timelapse = timelapse < 1 ? 1 : timelapse;
org.bukkit.material.Sign signMat = (org.bukkit.material.Sign) sign.getData();
BlockFace directionFacing = signMat.getFacing();
Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() {
@Override
public void run() {
final Location loc = sign.getLocation().clone();
loc.add(0, 1, 0);
org.bukkit.material.Sign signMat = (org.bukkit.material.Sign) sign.getData();
BlockFace directionFacing = signMat.getFacing();
if (Playername == null)
return false;
Location loc = sign.getLocation().clone();
loc.add(0, 1, 0);
Block block = loc.getBlock();
if (Playername == null)
if (block == null || !(block.getState() instanceof Skull))
loc.add(directionFacing.getOppositeFace().getModX(), 0, directionFacing.getOppositeFace().getModZ());
block = loc.getBlock();
if (block == null || !(block.getState() instanceof Skull))
return false;
Skull skull = (Skull) block.getState();
if (skull == null)
return false;
if (skull.getOwner() != null && skull.getOwner().equalsIgnoreCase(Playername))
return false;
Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() {
@Override
public void run() {
Block b = loc.getBlock();
final Material type = b.getType();
final BlockData data = b.getBlockData();
b.setType(Material.AIR);
Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() {
@Override
public void run() {
Block b = loc.getBlock();
b.setType(type);
b.setBlockData(data);
Skull skull = (Skull) b.getState();
if (skull == null)
return;
skull.setOwner(Playername);
skull.update();
return;
}
}, 1L);
return;
Block block = loc.getBlock();
if (block == null || !(block.getState() instanceof Skull))
loc.add(directionFacing.getOppositeFace().getModX(), 0, directionFacing.getOppositeFace().getModZ());
block = loc.getBlock();
if (block == null || !(block.getState() instanceof Skull))
return;
Skull skull = (Skull) block.getState();
if (skull == null)
return;
skull.setOwner(Playername);
skull.update();
return;
}
}, timelapse * Jobs.getGCManager().InfoUpdateInterval * 20L);
}
}, timelapse * Jobs.getGCManager().InfoUpdateInterval * 20L);
} catch (Exception | Error e) {
e.printStackTrace();
}
return true;
}
}

View File

@ -342,7 +342,7 @@ public class LanguageManager {
c.get("command.give.help.info", "Gives item by jobs name and item category name. Player name is optional");
c.get("command.give.help.args", "[playername] [jobname] [items/limiteditems] [jobitemname]");
Jobs.getGCManager().commandArgs.put("give", Arrays.asList("[playername]", "[jobname]", "[jobitemname]"));
Jobs.getGCManager().commandArgs.put("give", Arrays.asList("[playername]", "[jobname]%%[jobitemname]", "[jobitemname]"));
c.get("command.give.output.notonline", "&4Player [%playername%] is not online!");
c.get("command.give.output.noitem", "&4Can't find any item by given name!");

View File

@ -51,73 +51,80 @@ public class TabComplete implements TabCompleter {
continue;
String arg = ArgsList.get(i - 1);
List<String> temp = new ArrayList<>();
List<String> t2 = new ArrayList<>();
if (arg.contains("%%"))
for (String one : arg.split("%%")) {
temp.add(one);
t2.add(one);
}
else
t2.add(arg);
switch (arg) {
case "[jobname]":
List<Job> Jobsai = Jobs.getJobs();
for (Job one : Jobsai) {
temp.add(one.getName());
}
break;
case "[playername]":
for (Player player : Bukkit.getOnlinePlayers()) {
temp.add(player.getName());
}
break;
case "[action]":
for (ActionType action : ActionType.values()) {
temp.add(action.getName());
}
break;
case "[jobitemname]":
if (args[3].equals("items")) {
List<String> temp = new ArrayList<>();
for (String ar : t2) {
switch (ar) {
case "[jobname]":
List<Job> Jobsai = Jobs.getJobs();
for (Job one : Jobsai) {
temp.add(one.getName());
}
break;
case "[playername]":
for (Player player : Bukkit.getOnlinePlayers()) {
temp.add(player.getName());
}
break;
case "[action]":
for (ActionType action : ActionType.values()) {
temp.add(action.getName());
}
break;
case "[jobitemname]":
for (Entry<String, JobItems> one : ItemBoostManager.getItems().entrySet()) {
temp.add(one.getValue().getNode());
}
} else if (args[3].equals("limiteditems")) {
Job oneJob = Jobs.getJob(args[i - 1]);
if (oneJob != null)
if (args[3].equals("limiteditems")) {
for (Entry<String, JobLimitedItems> limitedItem : oneJob.getLimitedItems().entrySet()) {
temp.add(limitedItem.getValue().getNode());
if (args.length > 3 && args[3].equals("limiteditems")) {
Job oneJob = Jobs.getJob(args[i - 1]);
if (oneJob != null)
if (args[3].equals("limiteditems")) {
for (Entry<String, JobLimitedItems> limitedItem : oneJob.getLimitedItems().entrySet()) {
temp.add(limitedItem.getValue().getNode());
}
}
}
}
break;
case "[boosteditems]":
for (Entry<String, JobItems> one : ItemBoostManager.getItems().entrySet()) {
temp.add(one.getValue().getNode());
}
break;
case "[oldjob]":
JobsPlayer onePlayerJob = Jobs.getPlayerManager().getJobsPlayer(args[i - 1]);
if (onePlayerJob != null)
for (JobProgression oneOldJob : onePlayerJob.getJobProgression()) {
temp.add(oneOldJob.getJob().getName());
}
break;
case "[oldplayerjob]":
if (sender instanceof Player) {
onePlayerJob = Jobs.getPlayerManager().getJobsPlayer((Player) sender);
break;
case "[boosteditems]":
for (Entry<String, JobItems> one : ItemBoostManager.getItems().entrySet()) {
temp.add(one.getValue().getNode());
}
break;
case "[oldjob]":
JobsPlayer onePlayerJob = Jobs.getPlayerManager().getJobsPlayer(args[i - 1]);
if (onePlayerJob != null)
for (JobProgression oneOldJob : onePlayerJob.getJobProgression()) {
temp.add(oneOldJob.getJob().getName());
}
}
break;
case "[newjob]":
if (sender instanceof Player) {
for (Job job : Jobs.getJobs()) {
temp.add(job.getName());
break;
case "[oldplayerjob]":
if (sender instanceof Player) {
onePlayerJob = Jobs.getPlayerManager().getJobsPlayer((Player) sender);
if (onePlayerJob != null)
for (JobProgression oneOldJob : onePlayerJob.getJobProgression()) {
temp.add(oneOldJob.getJob().getName());
}
}
break;
case "[newjob]":
if (sender instanceof Player) {
for (Job job : Jobs.getJobs()) {
temp.add(job.getName());
}
}
break;
default:
temp.add(ar);
break;
}
break;
}
StringUtil.copyPartialMatches(PartOfCommand, temp, completionList);