+ new command framework
+ workbench optimizations ~ refactored commands to fit the new framework
This commit is contained in:
parent
1600996f47
commit
44100f10ad
|
@ -1,7 +1,7 @@
|
||||||
image: maven:3-jdk-8
|
image: maven:3-jdk-8
|
||||||
|
|
||||||
build:
|
build:
|
||||||
script: "mvn clean install deploy --settings .gitlab/settings.xml"
|
script: "mvn clean --settings .gitlab/settings.xml"
|
||||||
artifacts:
|
artifacts:
|
||||||
name: "Core"
|
name: "Core"
|
||||||
paths:
|
paths:
|
||||||
|
|
23
Core.iml
23
Core.iml
|
@ -20,7 +20,7 @@
|
||||||
</content>
|
</content>
|
||||||
<orderEntry type="inheritedJdk" />
|
<orderEntry type="inheritedJdk" />
|
||||||
<orderEntry type="sourceFolder" forTests="false" />
|
<orderEntry type="sourceFolder" forTests="false" />
|
||||||
<orderEntry type="library" scope="PROVIDED" name="Maven: com.destroystokyo.paper:paper-api:1.11-R0.1-SNAPSHOT" level="project" />
|
<orderEntry type="library" scope="PROVIDED" name="Maven: com.destroystokyo.paper:paper-api:1.11.2-R0.1-SNAPSHOT" level="project" />
|
||||||
<orderEntry type="library" scope="PROVIDED" name="Maven: commons-lang:commons-lang:2.6" level="project" />
|
<orderEntry type="library" scope="PROVIDED" name="Maven: commons-lang:commons-lang:2.6" level="project" />
|
||||||
<orderEntry type="library" name="Maven: com.googlecode.json-simple:json-simple:1.1.1" level="project" />
|
<orderEntry type="library" name="Maven: com.googlecode.json-simple:json-simple:1.1.1" level="project" />
|
||||||
<orderEntry type="library" name="Maven: junit:junit:4.10" level="project" />
|
<orderEntry type="library" name="Maven: junit:junit:4.10" level="project" />
|
||||||
|
@ -33,13 +33,18 @@
|
||||||
<orderEntry type="library" scope="PROVIDED" name="Maven: org.yaml:snakeyaml:1.17" level="project" />
|
<orderEntry type="library" scope="PROVIDED" name="Maven: org.yaml:snakeyaml:1.17" level="project" />
|
||||||
<orderEntry type="library" scope="PROVIDED" name="Maven: net.md-5:bungeecord-chat:1.10-SNAPSHOT" level="project" />
|
<orderEntry type="library" scope="PROVIDED" name="Maven: net.md-5:bungeecord-chat:1.10-SNAPSHOT" level="project" />
|
||||||
<orderEntry type="library" scope="PROVIDED" name="Maven: org.ow2.asm:asm-all:5.0.4" level="project" />
|
<orderEntry type="library" scope="PROVIDED" name="Maven: org.ow2.asm:asm-all:5.0.4" level="project" />
|
||||||
<orderEntry type="library" scope="PROVIDED" name="Maven: org.spigotmc:spigot-api:1.11-R0.1-SNAPSHOT" level="project" />
|
<orderEntry type="library" scope="PROVIDED" name="Maven: org.spigotmc:spigot-api:1.11.2-R0.1-SNAPSHOT" level="project" />
|
||||||
<orderEntry type="library" scope="PROVIDED" name="Maven: org.bukkit:bukkit:1.11-R0.1-SNAPSHOT" level="project" />
|
<orderEntry type="library" scope="PROVIDED" name="Maven: org.bukkit:bukkit:1.11.2-R0.1-SNAPSHOT" level="project" />
|
||||||
<orderEntry type="library" scope="PROVIDED" name="Maven: org.bukkit:craftbukkit:1.11-R0.1-SNAPSHOT" level="project" />
|
<orderEntry type="library" scope="PROVIDED" name="Maven: org.bukkit:craftbukkit:1.11.2-R0.1-SNAPSHOT" level="project" />
|
||||||
|
<orderEntry type="library" name="Maven: org.projectlombok:lombok:1.16.10" level="project" />
|
||||||
|
<orderEntry type="library" name="Maven: co.aikar:taskchain-bukkit:3.4.3" level="project" />
|
||||||
|
<orderEntry type="library" name="Maven: co.aikar:taskchain-core:3.4.3" level="project" />
|
||||||
|
<orderEntry type="library" name="Maven: io.github.lordakkarin:nbt:1.0" level="project" />
|
||||||
|
<orderEntry type="library" name="Maven: io.netty:netty-buffer:5.0.0.Alpha2" level="project" />
|
||||||
|
<orderEntry type="library" name="Maven: io.netty:netty-common:5.0.0.Alpha2" level="project" />
|
||||||
<orderEntry type="module" module-name="Commons" />
|
<orderEntry type="module" module-name="Commons" />
|
||||||
|
<orderEntry type="library" name="Maven: ai.api:libai:1.4.8" level="project" />
|
||||||
<orderEntry type="library" name="Maven: io.vertx:vertx-core:3.4.1" level="project" />
|
<orderEntry type="library" name="Maven: io.vertx:vertx-core:3.4.1" level="project" />
|
||||||
<orderEntry type="library" name="Maven: io.netty:netty-common:4.1.8.Final" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: io.netty:netty-buffer:4.1.8.Final" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: io.netty:netty-transport:4.1.8.Final" level="project" />
|
<orderEntry type="library" name="Maven: io.netty:netty-transport:4.1.8.Final" level="project" />
|
||||||
<orderEntry type="library" name="Maven: io.netty:netty-handler:4.1.8.Final" level="project" />
|
<orderEntry type="library" name="Maven: io.netty:netty-handler:4.1.8.Final" level="project" />
|
||||||
<orderEntry type="library" name="Maven: io.netty:netty-codec:4.1.8.Final" level="project" />
|
<orderEntry type="library" name="Maven: io.netty:netty-codec:4.1.8.Final" level="project" />
|
||||||
|
@ -68,6 +73,7 @@
|
||||||
<orderEntry type="library" name="Maven: org.mongodb:bson:3.4.1" level="project" />
|
<orderEntry type="library" name="Maven: org.mongodb:bson:3.4.1" level="project" />
|
||||||
<orderEntry type="library" name="Maven: io.vertx:vertx-rabbitmq-client:3.4.1" level="project" />
|
<orderEntry type="library" name="Maven: io.vertx:vertx-rabbitmq-client:3.4.1" level="project" />
|
||||||
<orderEntry type="library" name="Maven: com.rabbitmq:amqp-client:3.6.5" level="project" />
|
<orderEntry type="library" name="Maven: com.rabbitmq:amqp-client:3.6.5" level="project" />
|
||||||
|
<orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.25" level="project" />
|
||||||
<orderEntry type="library" name="Maven: org.apache.commons:commons-lang3:3.1" level="project" />
|
<orderEntry type="library" name="Maven: org.apache.commons:commons-lang3:3.1" level="project" />
|
||||||
<orderEntry type="library" name="Maven: commons-io:commons-io:2.5" level="project" />
|
<orderEntry type="library" name="Maven: commons-io:commons-io:2.5" level="project" />
|
||||||
<orderEntry type="library" name="Maven: joda-time:joda-time:2.9.4" level="project" />
|
<orderEntry type="library" name="Maven: joda-time:joda-time:2.9.4" level="project" />
|
||||||
|
@ -75,8 +81,9 @@
|
||||||
<orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-api:2.6.2" level="project" />
|
<orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-api:2.6.2" level="project" />
|
||||||
<orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-core:2.6.2" level="project" />
|
<orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-core:2.6.2" level="project" />
|
||||||
<orderEntry type="library" name="Maven: com.github.nsp:JSkills:master-0.9.0-g8b333ec-15" level="project" />
|
<orderEntry type="library" name="Maven: com.github.nsp:JSkills:master-0.9.0-g8b333ec-15" level="project" />
|
||||||
|
<orderEntry type="library" name="Maven: org.ejml:simple:0.28" level="project" />
|
||||||
|
<orderEntry type="library" name="Maven: org.ejml:core:0.28" level="project" />
|
||||||
|
<orderEntry type="library" name="Maven: org.ejml:dense64:0.28" level="project" />
|
||||||
<orderEntry type="library" name="Maven: org.gitlab:java-gitlab-api:1.2.7" level="project" />
|
<orderEntry type="library" name="Maven: org.gitlab:java-gitlab-api:1.2.7" level="project" />
|
||||||
<orderEntry type="library" name="Maven: org.projectlombok:lombok:1.16.10" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: co.aikar:taskchain-bukkit:3.4.3" level="project" />
|
|
||||||
</component>
|
</component>
|
||||||
</module>
|
</module>
|
26
pom.xml
26
pom.xml
|
@ -64,42 +64,50 @@
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.destroystokyo.paper</groupId>
|
<groupId>com.destroystokyo.paper</groupId>
|
||||||
<artifactId>paper-api</artifactId>
|
<artifactId>paper-api</artifactId>
|
||||||
<version>1.11-R0.1-SNAPSHOT</version>
|
<version>1.11.2-R0.1-SNAPSHOT</version>
|
||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.spigotmc</groupId>
|
<groupId>org.spigotmc</groupId>
|
||||||
<artifactId>spigot-api</artifactId>
|
<artifactId>spigot-api</artifactId>
|
||||||
<version>1.11-R0.1-SNAPSHOT</version>
|
<version>1.11.2-R0.1-SNAPSHOT</version>
|
||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.bukkit</groupId>
|
<groupId>org.bukkit</groupId>
|
||||||
<artifactId>bukkit</artifactId>
|
<artifactId>bukkit</artifactId>
|
||||||
<version>1.11-R0.1-SNAPSHOT</version>
|
<version>1.11.2-R0.1-SNAPSHOT</version>
|
||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.bukkit</groupId>
|
<groupId>org.bukkit</groupId>
|
||||||
<artifactId>craftbukkit</artifactId>
|
<artifactId>craftbukkit</artifactId>
|
||||||
<version>1.11-R0.1-SNAPSHOT</version>
|
<version>1.11.2-R0.1-SNAPSHOT</version>
|
||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
|
||||||
<groupId>eu.univento</groupId>
|
|
||||||
<artifactId>Commons</artifactId>
|
|
||||||
<version>1.0-SNAPSHOT</version>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.projectlombok</groupId>
|
<groupId>org.projectlombok</groupId>
|
||||||
<artifactId>lombok</artifactId>
|
<artifactId>lombok</artifactId>
|
||||||
<version>1.16.10</version>
|
<version>1.16.10</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>co.aikar</groupId>
|
<groupId>co.aikar</groupId>
|
||||||
<artifactId>taskchain-bukkit</artifactId>
|
<artifactId>taskchain-bukkit</artifactId>
|
||||||
<version>3.4.3</version>
|
<version>3.4.3</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>io.github.lordakkarin</groupId>
|
||||||
|
<artifactId>nbt</artifactId>
|
||||||
|
<version>1.0</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>eu.univento</groupId>
|
||||||
|
<artifactId>Commons</artifactId>
|
||||||
|
<version>1.0-SNAPSHOT</version>
|
||||||
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
</project>
|
</project>
|
|
@ -2,28 +2,25 @@ package eu.univento.core;
|
||||||
|
|
||||||
import eu.univento.commons.Commons;
|
import eu.univento.commons.Commons;
|
||||||
import eu.univento.commons.server.TPS;
|
import eu.univento.commons.server.TPS;
|
||||||
|
import eu.univento.core.antihack.AntiHack;
|
||||||
import eu.univento.core.api.Config;
|
import eu.univento.core.api.Config;
|
||||||
|
import eu.univento.core.api.command.CommandFramework;
|
||||||
import eu.univento.core.api.effects.Blackscreen;
|
import eu.univento.core.api.effects.Blackscreen;
|
||||||
import eu.univento.core.api.events.MoveEventFilter;
|
import eu.univento.core.api.events.MoveEventFilter;
|
||||||
import eu.univento.core.api.items.InventoryManager;
|
import eu.univento.core.api.items.InventoryManager;
|
||||||
import eu.univento.core.api.player.CustomPlayer;
|
import eu.univento.core.api.player.CustomPlayer;
|
||||||
import eu.univento.core.api.server.ServerSettings;
|
|
||||||
import eu.univento.core.api.update.PluginUpdater;
|
|
||||||
import eu.univento.core.api.utils.NettyInjection;
|
|
||||||
import eu.univento.core.commands.*;
|
import eu.univento.core.commands.*;
|
||||||
import eu.univento.core.listeners.*;
|
import eu.univento.core.listeners.*;
|
||||||
|
import eu.univento.core.listeners.cloud.Servers;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.plugin.Plugin;
|
|
||||||
import org.bukkit.plugin.PluginManager;
|
import org.bukkit.plugin.PluginManager;
|
||||||
import org.bukkit.plugin.java.JavaPlugin;
|
import org.bukkit.plugin.java.JavaPlugin;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.LinkedList;
|
import java.util.LinkedList;
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* main class
|
* main class
|
||||||
|
@ -31,34 +28,17 @@ import java.util.List;
|
||||||
* @author joethei
|
* @author joethei
|
||||||
* @version 1.0
|
* @version 1.0
|
||||||
*/
|
*/
|
||||||
public class Core extends JavaPlugin implements NettyInjection.PacketHandler {
|
public class Core extends JavaPlugin{
|
||||||
|
|
||||||
@Getter
|
@Getter private static Core instance;
|
||||||
private static Core instance;
|
@Getter private static Commons commons;
|
||||||
@Getter
|
@Getter private static CommandFramework commandFramework;
|
||||||
private static Commons commons;
|
|
||||||
|
|
||||||
private ArrayList<String> registeredPlugins = new ArrayList<>();
|
|
||||||
|
|
||||||
public void registerPlugin(Plugin plugin) {
|
|
||||||
registeredPlugins.add(plugin.getName());
|
|
||||||
}
|
|
||||||
|
|
||||||
public void unregisterPlugin(Plugin plugin) {
|
|
||||||
if (registeredPlugins.contains(plugin.getName())) registeredPlugins.remove(plugin.getName());
|
|
||||||
}
|
|
||||||
|
|
||||||
public static String getNMSVersion() {
|
public static String getNMSVersion() {
|
||||||
final String packageName = Bukkit.getServer().getClass().getPackage().getName();
|
final String packageName = Bukkit.getServer().getClass().getPackage().getName();
|
||||||
return packageName.substring(packageName.lastIndexOf('.') + 1);
|
return packageName.substring(packageName.lastIndexOf('.') + 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
private NettyInjection injection;
|
|
||||||
private static List<CustomPlayer> timeout = new LinkedList<>();
|
|
||||||
public static List<CustomPlayer> getTimeout() {
|
|
||||||
return timeout;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static Collection<CustomPlayer> getOnlinePlayers() {
|
public static Collection<CustomPlayer> getOnlinePlayers() {
|
||||||
Collection<CustomPlayer> list = new LinkedList<>();
|
Collection<CustomPlayer> list = new LinkedList<>();
|
||||||
for (Player players : Bukkit.getOnlinePlayers()) {
|
for (Player players : Bukkit.getOnlinePlayers()) {
|
||||||
|
@ -71,8 +51,8 @@ public class Core extends JavaPlugin implements NettyInjection.PacketHandler {
|
||||||
@Override
|
@Override
|
||||||
public void onEnable() {
|
public void onEnable() {
|
||||||
commons = new Commons();
|
commons = new Commons();
|
||||||
registerPlugin(this);
|
|
||||||
commons.getLoggingHandler().getCore().info("\n" +
|
System.out.println("\n" +
|
||||||
"\n" +
|
"\n" +
|
||||||
" \n" +
|
" \n" +
|
||||||
" \n" +
|
" \n" +
|
||||||
|
@ -114,22 +94,22 @@ public class Core extends JavaPlugin implements NettyInjection.PacketHandler {
|
||||||
pm.registerEvents(new SpectatorEvents(), this);
|
pm.registerEvents(new SpectatorEvents(), this);
|
||||||
pm.registerEvents(new MoveEventFilter(getServer()), this);
|
pm.registerEvents(new MoveEventFilter(getServer()), this);
|
||||||
pm.registerEvents(new InventoryManager(), this);
|
pm.registerEvents(new InventoryManager(), this);
|
||||||
|
pm.registerEvents(new WorkbenchEvents(), this);
|
||||||
|
pm.registerEvents(new NPCEvents(), this);
|
||||||
|
|
||||||
if (ServerSettings.isGame()) {
|
commandFramework = new CommandFramework(this);
|
||||||
new Fix(this, "fix", "fix your self or other players");
|
|
||||||
new Nick(this, "nick", "nick/unnick your self");
|
commandFramework.registerCommands(new DevCommands());
|
||||||
}
|
commandFramework.registerCommands(new ModCommands());
|
||||||
//AntiHack.registerListeners();
|
commandFramework.registerCommands(new BuilderCommands());
|
||||||
|
commandFramework.registerCommands(new VIPCommands());
|
||||||
|
commandFramework.registerCommands(new PlayerCommands());
|
||||||
|
|
||||||
|
commandFramework.registerCommands(new HologramCommands());
|
||||||
|
|
||||||
|
new AntiHack().registerListeners();
|
||||||
|
|
||||||
new RunAs(this, "RunAs", "run commands as other players");
|
|
||||||
new SystemInfo(this, "SystemInfo", "gives info about the server system");
|
|
||||||
new Vanish(this, "vanish", "vanish/unvanish your self");
|
|
||||||
new GameMode(this, "gamemode", "sets your gamemode", "gm");
|
|
||||||
new SetRank(this, "setrank", "sets the rank for other players", "sr");
|
new SetRank(this, "setrank", "sets the rank for other players", "sr");
|
||||||
new GlobalMute(this, "globalmute", "mutes the server");
|
|
||||||
new ChatClear(this, "chatclear", "clears the chat", "cc");
|
|
||||||
new Timeout(this, "timeout", "timeout other players");
|
|
||||||
new Hologram(this, "hologram", "manages holograms");
|
|
||||||
|
|
||||||
PluginMessenger pluginMessenger = new PluginMessenger();
|
PluginMessenger pluginMessenger = new PluginMessenger();
|
||||||
Bukkit.getMessenger().registerOutgoingPluginChannel(this, "5zig_Set");
|
Bukkit.getMessenger().registerOutgoingPluginChannel(this, "5zig_Set");
|
||||||
|
@ -141,8 +121,10 @@ public class Core extends JavaPlugin implements NettyInjection.PacketHandler {
|
||||||
Bukkit.getMessenger().registerIncomingPluginChannel(this, "PERMISSIONSREPL", pluginMessenger);
|
Bukkit.getMessenger().registerIncomingPluginChannel(this, "PERMISSIONSREPL", pluginMessenger);
|
||||||
Bukkit.getMessenger().registerOutgoingPluginChannel(this, "schematica");
|
Bukkit.getMessenger().registerOutgoingPluginChannel(this, "schematica");
|
||||||
|
|
||||||
|
Servers.register();
|
||||||
|
|
||||||
Blackscreen.setupUtil(getInstance());
|
Blackscreen.setupUtil(getInstance());
|
||||||
Bukkit.getScheduler().scheduleSyncDelayedTask(this, () -> commons.getLoggingHandler().getCore().info("\n" +
|
Bukkit.getScheduler().scheduleSyncDelayedTask(this, () -> System.out.println("\n" +
|
||||||
"\n" +
|
"\n" +
|
||||||
"\n" +
|
"\n" +
|
||||||
" _ _ \n" +
|
" _ _ \n" +
|
||||||
|
@ -154,50 +136,16 @@ public class Core extends JavaPlugin implements NettyInjection.PacketHandler {
|
||||||
" \n" +
|
" \n" +
|
||||||
" \n" +
|
" \n" +
|
||||||
"\n"), 0L);
|
"\n"), 0L);
|
||||||
/*
|
|
||||||
Bukkit.getScheduler().scheduleSyncDelayedTask(this, () -> {
|
|
||||||
for (Plugin plugin : pm.getPlugins()) {
|
|
||||||
if (!plugin.getName().equalsIgnoreCase("WorldEdit") && !plugin.getName().equalsIgnoreCase("VoxelSniper") && !registeredPlugins.contains(plugin.getName())) {
|
|
||||||
commons.getLoggingHandler().getCore().warn("§cDas Plugin " + plugin.getName() + " ist nicht für den Server zugelassen.");
|
|
||||||
getServer().shutdown();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}, 5L);
|
|
||||||
|
|
||||||
this.injection = new NettyInjection(this, this.getName());
|
|
||||||
this.injection.addHandler("TIMEOUT", new NettyInjection.PacketHandler() {
|
|
||||||
public Object onPacketIn(Player sender, Channel channel, Object packet) {
|
|
||||||
getCommons().getLoggingHandler().getCore().info("PacketIN: " + sender.getName() + " | " + channel + " | " + packet);
|
|
||||||
if (timeout.contains(CustomPlayer.getPlayer(sender)))
|
|
||||||
return null;
|
|
||||||
return packet;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Object onPacketOut(Player target, Channel channel, Object packet) {
|
|
||||||
getCommons().getLoggingHandler().getCore().info("PacketOUT: " + target.getName() + " | " + channel + " | " + packet);
|
|
||||||
return packet;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
commons.getSecurityHandler().isValidServer(getServer().getIp(), aBoolean -> {
|
|
||||||
if(!aBoolean) {
|
|
||||||
getServer().shutdown();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
*/
|
|
||||||
Bukkit.getScheduler().runTask(this, new TPS());
|
Bukkit.getScheduler().runTask(this, new TPS());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onDisable() {
|
public void onDisable() {
|
||||||
commons.shutdown();
|
|
||||||
Bukkit.getMessenger().unregisterIncomingPluginChannel(this);
|
Bukkit.getMessenger().unregisterIncomingPluginChannel(this);
|
||||||
Bukkit.getMessenger().unregisterOutgoingPluginChannel(this);
|
Bukkit.getMessenger().unregisterOutgoingPluginChannel(this);
|
||||||
|
|
||||||
//this.injection.disable();
|
System.out.println("\n" +
|
||||||
|
|
||||||
commons.getLoggingHandler().getCore().info("\n" +
|
|
||||||
"\n" +
|
"\n" +
|
||||||
" \n" +
|
" \n" +
|
||||||
" \n" +
|
" \n" +
|
||||||
|
@ -223,8 +171,9 @@ public class Core extends JavaPlugin implements NettyInjection.PacketHandler {
|
||||||
" \n" +
|
" \n" +
|
||||||
" \n" +
|
" \n" +
|
||||||
" \n" +
|
" \n" +
|
||||||
"\nd");
|
"\n");
|
||||||
new PluginUpdater("Core").update();
|
//new PluginUpdater("Core").update();
|
||||||
|
commons.shutdown();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -3,24 +3,20 @@ package eu.univento.core.antihack;
|
||||||
import eu.univento.commons.player.warn.WarnReason;
|
import eu.univento.commons.player.warn.WarnReason;
|
||||||
import eu.univento.core.Core;
|
import eu.univento.core.Core;
|
||||||
import eu.univento.core.antihack.modules.*;
|
import eu.univento.core.antihack.modules.*;
|
||||||
import eu.univento.core.antihack.utils.PacketInjector;
|
|
||||||
import eu.univento.core.api.player.CustomPlayer;
|
import eu.univento.core.api.player.CustomPlayer;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.event.EventHandler;
|
|
||||||
import org.bukkit.event.Listener;
|
import org.bukkit.event.Listener;
|
||||||
import org.bukkit.event.player.PlayerJoinEvent;
|
|
||||||
import org.bukkit.plugin.PluginManager;
|
import org.bukkit.plugin.PluginManager;
|
||||||
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
public class AntiHack implements Listener{
|
public class AntiHack implements Listener{
|
||||||
|
|
||||||
private static final PacketInjector packetInjector = new PacketInjector();
|
|
||||||
|
|
||||||
//TODO: add nofication system
|
//TODO: add nofication system
|
||||||
public static void registerListeners() {
|
public void registerListeners() {
|
||||||
PluginManager pm = Bukkit.getPluginManager();
|
PluginManager pm = Bukkit.getPluginManager();
|
||||||
pm.registerEvents(new AntiHack(), Core.getInstance());
|
pm.registerEvents(this, Core.getInstance());
|
||||||
pm.registerEvents(new Movement(), Core.getInstance());
|
pm.registerEvents(new Movement(), Core.getInstance());
|
||||||
pm.registerEvents(new AutoClicker(), Core.getInstance());
|
pm.registerEvents(new AutoClicker(), Core.getInstance());
|
||||||
pm.registerEvents(new Criticals(), Core.getInstance());
|
pm.registerEvents(new Criticals(), Core.getInstance());
|
||||||
|
@ -32,7 +28,7 @@ public class AntiHack implements Listener{
|
||||||
pm.registerEvents(new Nuker(), Core.getInstance());
|
pm.registerEvents(new Nuker(), Core.getInstance());
|
||||||
pm.registerEvents(new SelfHit(), Core.getInstance());
|
pm.registerEvents(new SelfHit(), Core.getInstance());
|
||||||
pm.registerEvents(new BowAimbot(), Core.getInstance());
|
pm.registerEvents(new BowAimbot(), Core.getInstance());
|
||||||
//pm.registerEvents(new KillAura(), Core.getInstance());
|
pm.registerEvents(new Packets(), Core.getInstance());
|
||||||
|
|
||||||
Bukkit.getScheduler().scheduleSyncRepeatingTask(Core.getInstance(), () -> {
|
Bukkit.getScheduler().scheduleSyncRepeatingTask(Core.getInstance(), () -> {
|
||||||
for(Map.Entry<CustomPlayer, Integer> entry : AutoClicker.clicks.entrySet()) {
|
for(Map.Entry<CustomPlayer, Integer> entry : AutoClicker.clicks.entrySet()) {
|
||||||
|
@ -44,9 +40,4 @@ public class AntiHack implements Listener{
|
||||||
}
|
}
|
||||||
}, 20L, 20L);
|
}, 20L, 20L);
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler
|
|
||||||
public void onJoin(PlayerJoinEvent e) {
|
|
||||||
packetInjector.addPlayer(e.getPlayer());
|
|
||||||
}
|
|
||||||
}
|
}
|
|
@ -1,36 +0,0 @@
|
||||||
package eu.univento.core.antihack.modules;
|
|
||||||
|
|
||||||
import com.mojang.authlib.GameProfile;
|
|
||||||
import eu.univento.core.Core;
|
|
||||||
import eu.univento.core.api.fakeplayer.FakePlayer;
|
|
||||||
import eu.univento.core.api.player.CustomPlayer;
|
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
import org.bukkit.event.EventHandler;
|
|
||||||
import org.bukkit.event.Listener;
|
|
||||||
import org.bukkit.event.entity.EntityDamageByEntityEvent;
|
|
||||||
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.Random;
|
|
||||||
import java.util.UUID;
|
|
||||||
|
|
||||||
public class KillAura implements Listener{
|
|
||||||
|
|
||||||
public static final HashMap<Player, FakePlayer> players = new HashMap<>();
|
|
||||||
|
|
||||||
@EventHandler
|
|
||||||
public void onEntityDamage(EntityDamageByEntityEvent e) {
|
|
||||||
if (e.getDamager() instanceof Player && e.getEntity() instanceof Player) {
|
|
||||||
CustomPlayer damager = CustomPlayer.getPlayer((Player) e.getDamager());
|
|
||||||
CustomPlayer p = CustomPlayer.getPlayer((Player) e.getEntity());
|
|
||||||
FakePlayer fp = new FakePlayer(new GameProfile(UUID.randomUUID(), ""), false, p);
|
|
||||||
players.put(p, fp);
|
|
||||||
fp.spawn(p.getLocation().add((double) new Random().nextInt(2), 0.01, (double) new Random().nextInt(2)));
|
|
||||||
Bukkit.getScheduler().runTaskLater(Core.getInstance(), () -> {
|
|
||||||
fp.removeTablist();
|
|
||||||
fp.despawn();
|
|
||||||
if(players.containsKey(p)) players.remove(p);
|
|
||||||
}, 5L);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -21,7 +21,7 @@ public class Movement implements Listener{
|
||||||
if(p.getVehicle() != null) return;
|
if(p.getVehicle() != null) return;
|
||||||
if(p.getAllowFlight()) return;
|
if(p.getAllowFlight()) return;
|
||||||
double distance = e.getTo().distance(e.getFrom());
|
double distance = e.getTo().distance(e.getFrom());
|
||||||
if(p.getFallDistance() == 0.0F && p.getLocation().getBlock().getRelative(BlockFace.UP).getType() == Material.AIR) {
|
if(p.getFallDistance() == 0.0F && p.getLocation().getBlock().getRelative(BlockFace.DOWN).getType() == Material.AIR) {
|
||||||
if(distance > 0.6D && !p.isOnGround()) {
|
if(distance > 0.6D && !p.isOnGround()) {
|
||||||
e.setCancelled(true);
|
e.setCancelled(true);
|
||||||
p.teleport(e.getFrom());
|
p.teleport(e.getFrom());
|
||||||
|
|
|
@ -0,0 +1,17 @@
|
||||||
|
package eu.univento.core.antihack.modules;
|
||||||
|
|
||||||
|
import com.destroystokyo.paper.event.player.IllegalPacketEvent;
|
||||||
|
import org.bukkit.event.EventHandler;
|
||||||
|
import org.bukkit.event.Listener;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author joethei
|
||||||
|
* @version 1.0
|
||||||
|
*/
|
||||||
|
public class Packets implements Listener{
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
public void onIllegalPacket(IllegalPacketEvent e) {
|
||||||
|
System.out.println("IllegalPacket: " + e.getType() + " | " + e.getExceptionMessage());
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,86 +0,0 @@
|
||||||
package eu.univento.core.antihack.utils;
|
|
||||||
|
|
||||||
import com.mojang.authlib.GameProfile;
|
|
||||||
import eu.univento.commons.player.warn.WarnReason;
|
|
||||||
import eu.univento.core.Core;
|
|
||||||
import eu.univento.core.antihack.modules.KillAura;
|
|
||||||
import eu.univento.core.api.fakeplayer.FakePlayer;
|
|
||||||
import eu.univento.core.api.player.CustomPlayer;
|
|
||||||
import io.netty.channel.ChannelDuplexHandler;
|
|
||||||
import io.netty.channel.ChannelHandlerContext;
|
|
||||||
import io.netty.channel.ChannelPromise;
|
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.Random;
|
|
||||||
import java.util.UUID;
|
|
||||||
|
|
||||||
class PacketHandler extends ChannelDuplexHandler {
|
|
||||||
private final Player player;
|
|
||||||
private final HashMap<Player, Integer> killAura = new HashMap<>();
|
|
||||||
private final HashMap<Player, Integer> count = new HashMap<>();
|
|
||||||
private final HashMap<Player, Long> inventory = new HashMap<>();
|
|
||||||
private final ArrayList<Player> swing = new ArrayList<>();
|
|
||||||
|
|
||||||
public PacketHandler(final Player player) {
|
|
||||||
this.player = player;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void write(final ChannelHandlerContext ctx, final Object msg, final ChannelPromise promise) throws Exception {
|
|
||||||
super.write(ctx, msg, promise);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void destroy(final FakePlayer fp, Player p) {
|
|
||||||
Bukkit.getScheduler().runTaskLater(Core.getInstance(), () -> {
|
|
||||||
fp.removeTablist();
|
|
||||||
fp.despawn();
|
|
||||||
if (KillAura.players.containsKey(p)) {
|
|
||||||
KillAura.players.remove(p);
|
|
||||||
}
|
|
||||||
}, 5L);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void channelRead(final ChannelHandlerContext c, final Object m) throws Exception {
|
|
||||||
if (m.getClass().getSimpleName().equalsIgnoreCase("PacketPlayInArmAnimation")) {
|
|
||||||
swing.add(player);
|
|
||||||
}
|
|
||||||
if (m.getClass().getSimpleName().equalsIgnoreCase("PacketPlayInUseEntity")) {
|
|
||||||
final int id = (int) Reflection.getFieldValue(m, "a");
|
|
||||||
if (Reflection.getFieldValue(m, "action").toString().equals("ATTACK") && KillAura.players.containsKey(player) && id == KillAura.players.get(player).getEntityID()) {
|
|
||||||
if (!killAura.containsKey(player)) {
|
|
||||||
final FakePlayer fp = new FakePlayer(new GameProfile(UUID.randomUUID(), ""), false, player);
|
|
||||||
KillAura.players.put(player, fp);
|
|
||||||
fp.spawn(player.getLocation().subtract((double) new Random().nextInt(2), 0.01, (double) new Random().nextInt(2)));
|
|
||||||
destroy(fp, player);
|
|
||||||
killAura.put(player, 1);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (killAura.containsKey(player) && killAura.get(player) == 1) {
|
|
||||||
final FakePlayer fp = new FakePlayer(new GameProfile(UUID.randomUUID(), ""), false, player);
|
|
||||||
KillAura.players.put(player, fp);
|
|
||||||
fp.spawn(player.getLocation().subtract((double) new Random().nextInt(2), 0.01, (double) new Random().nextInt(2)));
|
|
||||||
destroy(fp, player);
|
|
||||||
killAura.put(player, 2);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (count.get(player) < 4) {
|
|
||||||
count.put(player, count.get(player) + 1);
|
|
||||||
} else {
|
|
||||||
count.remove(player);
|
|
||||||
CustomPlayer p = CustomPlayer.getPlayer(player);
|
|
||||||
p.warn(WarnReason.SPAM, null, "https://players.univento.eu/" + p.getUniqueId().toString() + "/hacks");
|
|
||||||
}
|
|
||||||
killAura.remove(player);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (m.getClass().getSimpleName().equalsIgnoreCase("PacketPlayInClientCommand")) {
|
|
||||||
final String s = Reflection.getFieldValue(m, "a").toString();
|
|
||||||
if (s.equals("OPEN_INVENTORY_ACHIEVEMENT")) {
|
|
||||||
inventory.put(player, System.currentTimeMillis());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
super.channelRead(c, m);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,73 +0,0 @@
|
||||||
package eu.univento.core.antihack.utils;
|
|
||||||
|
|
||||||
import io.netty.channel.Channel;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
import java.lang.reflect.Field;
|
|
||||||
|
|
||||||
public class PacketInjector {
|
|
||||||
|
|
||||||
private Field EntityPlayer_playerConnection;
|
|
||||||
private Field PlayerConnection_networkManager;
|
|
||||||
private Field k;
|
|
||||||
private Field m;
|
|
||||||
|
|
||||||
public PacketInjector() {
|
|
||||||
try {
|
|
||||||
this.EntityPlayer_playerConnection = Reflection.getField(Reflection.getClass("{nms}.EntityPlayer"), "playerConnection");
|
|
||||||
Class<?> playerConnection = Reflection.getClass("{nms}.PlayerConnection");
|
|
||||||
this.PlayerConnection_networkManager = Reflection.getField(playerConnection, "networkManager");
|
|
||||||
Class<?> networkManager = Reflection.getClass("{nms}.NetworkManager");
|
|
||||||
Field[] fields2;
|
|
||||||
for (int length = (fields2 = networkManager.getFields()).length, i = 0; i < length; ++i) {
|
|
||||||
final Field fields = fields2[i];
|
|
||||||
if (fields.getType().equals(Channel.class)) {
|
|
||||||
this.k = fields;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (this.k == null) {
|
|
||||||
this.k = Reflection.getField(networkManager, "i");
|
|
||||||
}
|
|
||||||
this.m = Reflection.getField(networkManager, "m");
|
|
||||||
} catch (Throwable t) {
|
|
||||||
t.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void addPlayer(final Player p) {
|
|
||||||
try {
|
|
||||||
final Channel ch = this.getChannel(this.getNetworkManager(Reflection.getNmsPlayer(p)));
|
|
||||||
if (ch.pipeline().get("PacketInjector") == null) {
|
|
||||||
final PacketHandler h = new PacketHandler(p);
|
|
||||||
ch.pipeline().addBefore("packet_handler", "PacketInjector", h);
|
|
||||||
}
|
|
||||||
} catch (Throwable t) {
|
|
||||||
t.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void removePlayer(final Player p) {
|
|
||||||
try {
|
|
||||||
final Channel ch = this.getChannel(this.getNetworkManager(Reflection.getNmsPlayer(p)));
|
|
||||||
if (ch.pipeline().get("PacketInjector") != null) {
|
|
||||||
ch.pipeline().remove("PacketInjector");
|
|
||||||
}
|
|
||||||
} catch (Throwable t) {
|
|
||||||
t.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private Object getNetworkManager(final Object ep) {
|
|
||||||
return Reflection.getFieldValue(this.PlayerConnection_networkManager, (Object) Reflection.getFieldValue(this.EntityPlayer_playerConnection, ep));
|
|
||||||
}
|
|
||||||
|
|
||||||
private Channel getChannel(final Object networkManager) {
|
|
||||||
Channel ch;
|
|
||||||
try {
|
|
||||||
ch = Reflection.getFieldValue(this.k, networkManager);
|
|
||||||
} catch (Exception e) {
|
|
||||||
ch = Reflection.getFieldValue(this.m, networkManager);
|
|
||||||
}
|
|
||||||
return ch;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,41 +0,0 @@
|
||||||
package eu.univento.core.antihack.utils;
|
|
||||||
|
|
||||||
import io.netty.channel.Channel;
|
|
||||||
import io.netty.channel.ChannelHandler;
|
|
||||||
import io.netty.channel.ChannelHandlerContext;
|
|
||||||
import io.netty.handler.codec.MessageToMessageDecoder;
|
|
||||||
import net.minecraft.server.v1_11_R1.Packet;
|
|
||||||
import org.bukkit.craftbukkit.v1_11_R1.entity.CraftPlayer;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
class PacketReader {
|
|
||||||
|
|
||||||
private final Player player;
|
|
||||||
private Channel channel;
|
|
||||||
|
|
||||||
public PacketReader(final Player player) {
|
|
||||||
this.player = player;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void inject() {
|
|
||||||
final CraftPlayer player = (CraftPlayer) this.player;
|
|
||||||
this.channel = player.getHandle().playerConnection.networkManager.channel;
|
|
||||||
this.channel.pipeline().addAfter("decoder", "PacketInjector", new MessageToMessageDecoder<Packet<?>>() {
|
|
||||||
protected void decode(final ChannelHandlerContext arg0, final Packet<?> packet, final List<Object> arg2) throws Exception {
|
|
||||||
arg2.add(packet);
|
|
||||||
PacketReader.this.readPackets(packet);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
public void uninject() {
|
|
||||||
if (this.channel.pipeline().get("PacketInjector") != null) {
|
|
||||||
this.channel.pipeline().remove("PacketInjector");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void readPackets(final Packet<?> packet) {
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,89 +0,0 @@
|
||||||
package eu.univento.core.antihack.utils;
|
|
||||||
|
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
import org.bukkit.scoreboard.Scoreboard;
|
|
||||||
|
|
||||||
import java.lang.reflect.Field;
|
|
||||||
import java.lang.reflect.Method;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
class Reflection {
|
|
||||||
public static Class<?> getClass(final String classname) {
|
|
||||||
try {
|
|
||||||
final String version = Bukkit.getServer().getClass().getPackage().getName().replace(".", ",").split(",")[3];
|
|
||||||
final String path = classname.replace("{nms}", "net.minecraft.server." + version).replace("{nm}", "net.minecraft." + version).replace("{cb}", "org.bukkit.craftbukkit.." + version);
|
|
||||||
return Class.forName(path);
|
|
||||||
} catch (Throwable t) {
|
|
||||||
t.printStackTrace();
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static Object getNmsPlayer(final Player p) throws Exception {
|
|
||||||
final Method getHandle = p.getClass().getMethod("getHandle");
|
|
||||||
return getHandle.invoke(p);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static Object getNmsScoreboard(final Scoreboard s) throws Exception {
|
|
||||||
final Method getHandle = s.getClass().getMethod("getHandle");
|
|
||||||
return getHandle.invoke(s);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static Object getFieldValue(final Object instance, final String fieldName) throws Exception {
|
|
||||||
final Field field = instance.getClass().getDeclaredField(fieldName);
|
|
||||||
field.setAccessible(true);
|
|
||||||
return field.get(instance);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static <T> T getFieldValue(final Field field, final Object obj) {
|
|
||||||
try {
|
|
||||||
return (T) field.get(obj);
|
|
||||||
} catch (Exception e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static Field getField(final Class<?> clazz, final String fieldName) throws Exception {
|
|
||||||
final Field field = clazz.getDeclaredField(fieldName);
|
|
||||||
field.setAccessible(true);
|
|
||||||
return field;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void setValue(final Object instance, final String field, final Object value) {
|
|
||||||
try {
|
|
||||||
final Field f = instance.getClass().getDeclaredField(field);
|
|
||||||
f.setAccessible(true);
|
|
||||||
f.set(instance, value);
|
|
||||||
} catch (Throwable t) {
|
|
||||||
t.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void sendAllPacket(final Object packet) throws Exception {
|
|
||||||
for (final Player p : Bukkit.getOnlinePlayers()) {
|
|
||||||
final Object nmsPlayer = getNmsPlayer(p);
|
|
||||||
final Object connection = nmsPlayer.getClass().getField("playerConnection").get(nmsPlayer);
|
|
||||||
connection.getClass().getMethod("sendPacket", getClass("{nms}.Packet")).invoke(connection, packet);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void sendListPacket(final List<String> players, final Object packet) {
|
|
||||||
try {
|
|
||||||
for (final String name : players) {
|
|
||||||
final Object nmsPlayer = getNmsPlayer(Bukkit.getPlayer(name));
|
|
||||||
final Object connection = nmsPlayer.getClass().getField("playerConnection").get(nmsPlayer);
|
|
||||||
connection.getClass().getMethod("sendPacket", getClass("{nms}.Packet")).invoke(connection, packet);
|
|
||||||
}
|
|
||||||
} catch (Throwable t) {
|
|
||||||
t.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void sendPlayerPacket(final Player p, final Object packet) throws Exception {
|
|
||||||
final Object nmsPlayer = getNmsPlayer(p);
|
|
||||||
final Object connection = nmsPlayer.getClass().getField("playerConnection").get(nmsPlayer);
|
|
||||||
connection.getClass().getMethod("sendPacket", getClass("{nms}.Packet")).invoke(connection, packet);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,6 +1,5 @@
|
||||||
package eu.univento.core.api;
|
package eu.univento.core.api;
|
||||||
|
|
||||||
import eu.univento.core.Core;
|
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.command.Command;
|
import org.bukkit.command.Command;
|
||||||
import org.bukkit.command.CommandMap;
|
import org.bukkit.command.CommandMap;
|
||||||
|
@ -17,6 +16,7 @@ import java.util.List;
|
||||||
* @see "http://postcrafter.de/viewtopic.php?f=15&t=143"
|
* @see "http://postcrafter.de/viewtopic.php?f=15&t=143"
|
||||||
* @param <P> main class
|
* @param <P> main class
|
||||||
*/
|
*/
|
||||||
|
@Deprecated
|
||||||
public abstract class AutoCommand<P extends JavaPlugin> extends Command {
|
public abstract class AutoCommand<P extends JavaPlugin> extends Command {
|
||||||
|
|
||||||
private static String VERSION;
|
private static String VERSION;
|
||||||
|
@ -24,7 +24,7 @@ public abstract class AutoCommand<P extends JavaPlugin> extends Command {
|
||||||
static {
|
static {
|
||||||
String path = Bukkit.getServer().getClass().getPackage().getName();
|
String path = Bukkit.getServer().getClass().getPackage().getName();
|
||||||
AutoCommand.VERSION = path.substring(path.lastIndexOf(".") + 1, path.length());
|
AutoCommand.VERSION = path.substring(path.lastIndexOf(".") + 1, path.length());
|
||||||
Core.getCommons().getLoggingHandler().getCore().info("AutoCommand hook for Bukkit " + AutoCommand.VERSION);
|
System.out.println("AutoCommand hook for Bukkit " + AutoCommand.VERSION);
|
||||||
}
|
}
|
||||||
|
|
||||||
private final P plugin;
|
private final P plugin;
|
||||||
|
|
|
@ -168,20 +168,10 @@ public class Utils {
|
||||||
Bukkit.getScheduler().scheduleSyncDelayedTask(Core.getInstance(), () -> {
|
Bukkit.getScheduler().scheduleSyncDelayedTask(Core.getInstance(), () -> {
|
||||||
if(Core.getOnlinePlayers().size() != 0) {
|
if(Core.getOnlinePlayers().size() != 0) {
|
||||||
for(CustomPlayer players : Core.getOnlinePlayers())
|
for(CustomPlayer players : Core.getOnlinePlayers())
|
||||||
|
//TODO: add connect to optimal lobby server here
|
||||||
players.connectToServer("Lobby01");
|
players.connectToServer("Lobby01");
|
||||||
}
|
}
|
||||||
Bukkit.spigot().restart();
|
Bukkit.spigot().restart();
|
||||||
}, 10 * 20L);
|
}, 10 * 20L);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* shots random firework at specified location
|
|
||||||
*
|
|
||||||
* @param loc Location
|
|
||||||
*/
|
|
||||||
public static void randomFirework(Location loc) {
|
|
||||||
FireworkEffect.Builder builder = FireworkEffect.builder();
|
|
||||||
FireworkEffect effect = builder.flicker(false).trail(false).with(FireworkEffect.Type.BALL_LARGE).withColor(Color.RED).withFade(Color.BLUE).build();
|
|
||||||
//TODO: make a random fireworks effect
|
|
||||||
}
|
|
||||||
}
|
}
|
|
@ -0,0 +1,96 @@
|
||||||
|
package eu.univento.core.api.command;
|
||||||
|
|
||||||
|
import org.apache.commons.lang3.Validate;
|
||||||
|
import org.bukkit.command.CommandException;
|
||||||
|
import org.bukkit.command.CommandExecutor;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.command.TabCompleter;
|
||||||
|
import org.bukkit.plugin.Plugin;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Command Framework - BukkitCommand <br>
|
||||||
|
* An implementation of Bukkit's Command class allowing for registering of
|
||||||
|
* commands without plugin.yml
|
||||||
|
*
|
||||||
|
* @author minnymin3
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class BukkitCommand extends org.bukkit.command.Command {
|
||||||
|
|
||||||
|
private final Plugin owningPlugin;
|
||||||
|
private CommandExecutor executor;
|
||||||
|
protected BukkitCompleter completer;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A slimmed down PluginCommand
|
||||||
|
*/
|
||||||
|
protected BukkitCommand(String label, CommandExecutor executor, Plugin owner) {
|
||||||
|
super(label);
|
||||||
|
this.executor = executor;
|
||||||
|
this.owningPlugin = owner;
|
||||||
|
this.usageMessage = "";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean execute(CommandSender sender, String commandLabel, String[] args) {
|
||||||
|
boolean success;
|
||||||
|
|
||||||
|
if (!owningPlugin.isEnabled()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!testPermission(sender)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
success = executor.onCommand(sender, this, commandLabel, args);
|
||||||
|
} catch (Throwable ex) {
|
||||||
|
throw new CommandException("Unhandled exception executing command '" + commandLabel + "' in plugin "
|
||||||
|
+ owningPlugin.getDescription().getFullName(), ex);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!success && usageMessage.length() > 0) {
|
||||||
|
for (String line : usageMessage.replace("<command>", commandLabel).split("\n")) {
|
||||||
|
sender.sendMessage(line);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return success;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public java.util.List<String> tabComplete(CommandSender sender, String alias, String[] args)
|
||||||
|
throws CommandException, IllegalArgumentException {
|
||||||
|
Validate.notNull(sender, "Sender cannot be null");
|
||||||
|
Validate.notNull(args, "Arguments cannot be null");
|
||||||
|
Validate.notNull(alias, "Alias cannot be null");
|
||||||
|
|
||||||
|
List<String> completions = null;
|
||||||
|
try {
|
||||||
|
if (completer != null) {
|
||||||
|
completions = completer.onTabComplete(sender, this, alias, args);
|
||||||
|
}
|
||||||
|
if (completions == null && executor instanceof TabCompleter) {
|
||||||
|
completions = ((TabCompleter) executor).onTabComplete(sender, this, alias, args);
|
||||||
|
}
|
||||||
|
} catch (Throwable ex) {
|
||||||
|
StringBuilder message = new StringBuilder();
|
||||||
|
message.append("Unhandled exception during tab completion for command '/").append(alias).append(' ');
|
||||||
|
for (String arg : args) {
|
||||||
|
message.append(arg).append(' ');
|
||||||
|
}
|
||||||
|
message.deleteCharAt(message.length() - 1).append("' in plugin ")
|
||||||
|
.append(owningPlugin.getDescription().getFullName());
|
||||||
|
throw new CommandException(message.toString(), ex);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (completions == null) {
|
||||||
|
return super.tabComplete(sender, alias, args);
|
||||||
|
}
|
||||||
|
return completions;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,49 @@
|
||||||
|
package eu.univento.core.api.command;
|
||||||
|
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.command.TabCompleter;
|
||||||
|
|
||||||
|
import java.lang.reflect.InvocationTargetException;
|
||||||
|
import java.lang.reflect.Method;
|
||||||
|
import java.util.AbstractMap;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Command Framework - BukkitCompleter <br>
|
||||||
|
* An implementation of the TabCompleter class allowing for multiple tab
|
||||||
|
* completers per command
|
||||||
|
*
|
||||||
|
* @author minnymin3
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class BukkitCompleter implements TabCompleter {
|
||||||
|
|
||||||
|
private Map<String, Map.Entry<Method, Object>> completers = new HashMap<>();
|
||||||
|
|
||||||
|
public void addCompleter(String label, Method m, Object obj) {
|
||||||
|
completers.put(label, new AbstractMap.SimpleEntry<>(m, obj));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<String> onTabComplete(CommandSender sender, org.bukkit.command.Command command, String label, String[] args) {
|
||||||
|
for (int i = args.length; i >= 0; i--) {
|
||||||
|
StringBuilder buffer = new StringBuilder();
|
||||||
|
buffer.append(label.toLowerCase());
|
||||||
|
for (int x = 0; x < i; x++) {
|
||||||
|
if (!args[x].equals("") && !args[x].equals(" ")) buffer.append(".").append(args[x].toLowerCase());
|
||||||
|
}
|
||||||
|
String cmdLabel = buffer.toString();
|
||||||
|
if (completers.containsKey(cmdLabel)) {
|
||||||
|
Map.Entry<Method, Object> entry = completers.get(cmdLabel);
|
||||||
|
try {
|
||||||
|
return (List<String>) entry.getKey().invoke(entry.getValue(), new CommandArgs(sender, command, label, args, cmdLabel.split("\\.").length - 1));
|
||||||
|
} catch (IllegalArgumentException | IllegalAccessException | InvocationTargetException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,79 @@
|
||||||
|
package eu.univento.core.api.command;
|
||||||
|
|
||||||
|
import eu.univento.commons.player.rank.Group;
|
||||||
|
import eu.univento.commons.player.rank.Rank;
|
||||||
|
import eu.univento.commons.server.ServerType;
|
||||||
|
|
||||||
|
import java.lang.annotation.ElementType;
|
||||||
|
import java.lang.annotation.Retention;
|
||||||
|
import java.lang.annotation.RetentionPolicy;
|
||||||
|
import java.lang.annotation.Target;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Command Framework - Command <br>
|
||||||
|
* The command annotation used to designate methods as commands. All methods
|
||||||
|
* should have a single CommandArgs argument
|
||||||
|
*
|
||||||
|
* @author minnymin3, joethei
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
@Target(ElementType.METHOD)
|
||||||
|
@Retention(RetentionPolicy.RUNTIME)
|
||||||
|
public @interface Command {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The name of the command. If it is a sub command then its values would be
|
||||||
|
* separated by periods. ie. a command that would be a subcommand of test
|
||||||
|
* would be 'test.subcommandname'
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public String name();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the required permission of the command
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public Rank rank() default Rank.Player;
|
||||||
|
public Group group() default Group.None;
|
||||||
|
|
||||||
|
public ServerType serverType() default ServerType.NONE;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The message sent to the player when they do not have permission to
|
||||||
|
* execute it
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public String notAllowed() default "§cYou do not have permission to perform that action";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A list of alternate names that the command is executed under. See
|
||||||
|
* name() for details on how names work
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public String[] aliases() default {};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The description that will appear in /help of the command
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public String description() default "";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The usage that will appear in /help (commandname)
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public String usage() default "";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Whether or not the command is available to players only
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public boolean inGameOnly() default false;
|
||||||
|
}
|
|
@ -0,0 +1,108 @@
|
||||||
|
package eu.univento.core.api.command;
|
||||||
|
|
||||||
|
import eu.univento.core.api.player.CustomPlayer;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Command Framework - CommandArgs <br>
|
||||||
|
* This class is passed to the command methods and contains various utilities as
|
||||||
|
* well as the command info.
|
||||||
|
*
|
||||||
|
* @author minnymin3
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class CommandArgs {
|
||||||
|
|
||||||
|
private CommandSender sender;
|
||||||
|
private org.bukkit.command.Command command;
|
||||||
|
private String label;
|
||||||
|
private String[] args;
|
||||||
|
|
||||||
|
protected CommandArgs(CommandSender sender, org.bukkit.command.Command command, String label, String[] args,
|
||||||
|
int subCommand) {
|
||||||
|
String[] modArgs = new String[args.length - subCommand];
|
||||||
|
for (int i = 0; i < args.length - subCommand; i++) {
|
||||||
|
modArgs[i] = args[i + subCommand];
|
||||||
|
}
|
||||||
|
|
||||||
|
StringBuffer buffer = new StringBuffer();
|
||||||
|
buffer.append(label);
|
||||||
|
for (int x = 0; x < subCommand; x++) {
|
||||||
|
buffer.append("." + args[x]);
|
||||||
|
}
|
||||||
|
String cmdLabel = buffer.toString();
|
||||||
|
this.sender = sender;
|
||||||
|
this.command = command;
|
||||||
|
this.label = cmdLabel;
|
||||||
|
this.args = modArgs;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the command sender
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public CommandSender getSender() {
|
||||||
|
return sender;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the original command object
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public org.bukkit.command.Command getCommand() {
|
||||||
|
return command;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the label including sub command labels of this command
|
||||||
|
*
|
||||||
|
* @return Something like 'test.subcommand'
|
||||||
|
*/
|
||||||
|
public String getLabel() {
|
||||||
|
return label;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets all the arguments after the command's label. ie. if the command
|
||||||
|
* label was test.subcommand and the arguments were subcommand foo foo, it
|
||||||
|
* would only return 'foo foo' because 'subcommand' is part of the command
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public String[] getArgs() {
|
||||||
|
return args;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the argument at the specified index
|
||||||
|
* @param index The index to get
|
||||||
|
* @return The string at the specified index
|
||||||
|
*/
|
||||||
|
public String getArg(int index) {
|
||||||
|
return args[index];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the length of the command arguments
|
||||||
|
* @return int length of args
|
||||||
|
*/
|
||||||
|
public int length() {
|
||||||
|
return args.length;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isPlayer() {
|
||||||
|
return sender instanceof Player;
|
||||||
|
}
|
||||||
|
|
||||||
|
public CustomPlayer getPlayer() {
|
||||||
|
if (sender instanceof Player) {
|
||||||
|
return CustomPlayer.getPlayer((Player) sender);
|
||||||
|
} else {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,220 @@
|
||||||
|
package eu.univento.core.api.command;
|
||||||
|
|
||||||
|
import eu.univento.commons.player.rank.Group;
|
||||||
|
import eu.univento.commons.player.rank.Rank;
|
||||||
|
import eu.univento.commons.server.ServerType;
|
||||||
|
import eu.univento.core.api.player.CustomPlayer;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.command.CommandExecutor;
|
||||||
|
import org.bukkit.command.CommandMap;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.command.PluginCommand;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.help.GenericCommandHelpTopic;
|
||||||
|
import org.bukkit.help.HelpTopic;
|
||||||
|
import org.bukkit.help.HelpTopicComparator;
|
||||||
|
import org.bukkit.help.IndexHelpTopic;
|
||||||
|
import org.bukkit.plugin.Plugin;
|
||||||
|
import org.bukkit.plugin.SimplePluginManager;
|
||||||
|
|
||||||
|
import java.lang.reflect.Field;
|
||||||
|
import java.lang.reflect.InvocationTargetException;
|
||||||
|
import java.lang.reflect.Method;
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Command Framework - CommandFramework <br>
|
||||||
|
* The main command framework class used for controlling the framework.
|
||||||
|
*
|
||||||
|
* @author minnymin3
|
||||||
|
*/
|
||||||
|
public class CommandFramework implements CommandExecutor {
|
||||||
|
|
||||||
|
private Map<String, Map.Entry<Method, Object>> commandMap = new HashMap<>();
|
||||||
|
private CommandMap map;
|
||||||
|
private Plugin plugin;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initializes the command framework and sets up the command maps
|
||||||
|
*/
|
||||||
|
public CommandFramework(Plugin plugin) {
|
||||||
|
this.plugin = plugin;
|
||||||
|
if (plugin.getServer().getPluginManager() instanceof SimplePluginManager) {
|
||||||
|
SimplePluginManager manager = (SimplePluginManager) plugin.getServer().getPluginManager();
|
||||||
|
try {
|
||||||
|
Field field = SimplePluginManager.class.getDeclaredField("commandMap");
|
||||||
|
field.setAccessible(true);
|
||||||
|
map = (CommandMap) field.get(manager);
|
||||||
|
} catch (IllegalArgumentException | SecurityException | NoSuchFieldException | IllegalAccessException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onCommand(CommandSender sender, org.bukkit.command.Command cmd, String label, String[] args) {
|
||||||
|
return handleCommand(sender, cmd, label, args);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handles commands. Used in the onCommand method in your JavaPlugin class
|
||||||
|
*
|
||||||
|
* @param sender The {@link org.bukkit.command.CommandSender} parsed from
|
||||||
|
* onCommand
|
||||||
|
* @param cmd The {@link org.bukkit.command.Command} parsed from onCommand
|
||||||
|
* @param label The label parsed from onCommand
|
||||||
|
* @param args The arguments parsed from onCommand
|
||||||
|
* @return Always returns true for simplicity's sake in onCommand
|
||||||
|
*/
|
||||||
|
public boolean handleCommand(CommandSender sender, org.bukkit.command.Command cmd, String label, String[] args) {
|
||||||
|
for (int i = args.length; i >= 0; i--) {
|
||||||
|
StringBuilder buffer = new StringBuilder();
|
||||||
|
buffer.append(label.toLowerCase());
|
||||||
|
for (int x = 0; x < i; x++) {
|
||||||
|
buffer.append(".").append(args[x].toLowerCase());
|
||||||
|
}
|
||||||
|
String cmdLabel = buffer.toString();
|
||||||
|
if (commandMap.containsKey(cmdLabel)) {
|
||||||
|
Method method = commandMap.get(cmdLabel).getKey();
|
||||||
|
Object methodObject = commandMap.get(cmdLabel).getValue();
|
||||||
|
Command command = method.getAnnotation(Command.class);
|
||||||
|
CustomPlayer player = CustomPlayer.getPlayer((Player) sender);
|
||||||
|
if (Objects.equals(command.group(), Group.None) && !Objects.equals(command.rank(), Rank.Player) && !player.getDatabasePlayer().isAllowed(command.rank())) {
|
||||||
|
sender.sendMessage(command.notAllowed());
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (Objects.equals(command.rank(), Rank.Player) && !Objects.equals(command.group(), Group.None) && !player.getDatabasePlayer().isAllowed(command.group())) {
|
||||||
|
sender.sendMessage(command.notAllowed());
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (command.inGameOnly() && sender == null) {
|
||||||
|
sender.sendMessage("This command is only performable in game");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (command.serverType() != ServerType.NONE && command.serverType() != ServerType.getServerType()) {
|
||||||
|
sender.sendMessage("This command can only be performed on " + command.serverType().getName() + " servers");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
method.invoke(methodObject, new CommandArgs(sender, cmd, label, args,
|
||||||
|
cmdLabel.split("\\.").length - 1));
|
||||||
|
} catch (IllegalArgumentException | IllegalAccessException | InvocationTargetException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
defaultCommand(new CommandArgs(sender, cmd, label, args, 0));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Registers all command and completer methods inside of the object. Similar
|
||||||
|
* to Bukkit's registerEvents method.
|
||||||
|
*
|
||||||
|
* @param obj The object to register the commands of
|
||||||
|
*/
|
||||||
|
public void registerCommands(Object obj) {
|
||||||
|
for (Method m : obj.getClass().getMethods()) {
|
||||||
|
if (m.getAnnotation(Command.class) != null) {
|
||||||
|
Command command = m.getAnnotation(Command.class);
|
||||||
|
if (m.getParameterTypes().length > 1 || m.getParameterTypes()[0] != CommandArgs.class) {
|
||||||
|
System.out.println("Unable to register command " + m.getName() + ". Unexpected method arguments");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
registerCommand(command, command.name(), m, obj);
|
||||||
|
for (String alias : command.aliases()) {
|
||||||
|
registerCommand(command, alias, m, obj);
|
||||||
|
}
|
||||||
|
} else if (m.getAnnotation(Completer.class) != null) {
|
||||||
|
Completer comp = m.getAnnotation(Completer.class);
|
||||||
|
if (m.getParameterTypes().length > 1 || m.getParameterTypes().length == 0
|
||||||
|
|| m.getParameterTypes()[0] != CommandArgs.class) {
|
||||||
|
System.out.println("Unable to register tab completer " + m.getName()
|
||||||
|
+ ". Unexpected method arguments");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (m.getReturnType() != List.class) {
|
||||||
|
System.out.println("Unable to register tab completer " + m.getName() + ". Unexpected return type");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
registerCompleter(comp.name(), m, obj);
|
||||||
|
for (String alias : comp.aliases()) {
|
||||||
|
registerCompleter(alias, m, obj);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Registers all the commands under the plugin's help
|
||||||
|
*/
|
||||||
|
public void registerHelp() {
|
||||||
|
Set<HelpTopic> help = new TreeSet<>(HelpTopicComparator.helpTopicComparatorInstance());
|
||||||
|
for (String s : commandMap.keySet()) {
|
||||||
|
if (!s.contains(".")) {
|
||||||
|
org.bukkit.command.Command cmd = map.getCommand(s);
|
||||||
|
HelpTopic topic = new GenericCommandHelpTopic(cmd);
|
||||||
|
help.add(topic);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
IndexHelpTopic topic = new IndexHelpTopic(plugin.getName(), "All commands for " + plugin.getName(), null, help,
|
||||||
|
"Below is a list of all " + plugin.getName() + " commands:");
|
||||||
|
Bukkit.getServer().getHelpMap().addTopic(topic);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void registerCommand(Command command, String label, Method m, Object obj) {
|
||||||
|
commandMap.put(label.toLowerCase(), new AbstractMap.SimpleEntry<>(m, obj));
|
||||||
|
commandMap.put(this.plugin.getName() + ':' + label.toLowerCase(), new AbstractMap.SimpleEntry<>(m, obj));
|
||||||
|
String cmdLabel = label.split("\\.")[0].toLowerCase();
|
||||||
|
if (map.getCommand(cmdLabel) == null) {
|
||||||
|
org.bukkit.command.Command cmd = new BukkitCommand(cmdLabel, this, plugin);
|
||||||
|
map.register(plugin.getName(), cmd);
|
||||||
|
}
|
||||||
|
if (!command.description().equalsIgnoreCase("") && Objects.equals(cmdLabel, label)) {
|
||||||
|
map.getCommand(cmdLabel).setDescription(command.description());
|
||||||
|
}
|
||||||
|
if (!command.usage().equalsIgnoreCase("") && Objects.equals(cmdLabel, label)) {
|
||||||
|
map.getCommand(cmdLabel).setUsage(command.usage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void registerCompleter(String label, Method m, Object obj) {
|
||||||
|
String cmdLabel = label.split("\\.")[0].toLowerCase();
|
||||||
|
if (map.getCommand(cmdLabel) == null) {
|
||||||
|
org.bukkit.command.Command command = new BukkitCommand(cmdLabel, this, plugin);
|
||||||
|
map.register(plugin.getName(), command);
|
||||||
|
}
|
||||||
|
if (map.getCommand(cmdLabel) instanceof BukkitCommand) {
|
||||||
|
BukkitCommand command = (BukkitCommand) map.getCommand(cmdLabel);
|
||||||
|
if (command.completer == null) {
|
||||||
|
command.completer = new BukkitCompleter();
|
||||||
|
}
|
||||||
|
command.completer.addCompleter(label, m, obj);
|
||||||
|
} else if (map.getCommand(cmdLabel) instanceof PluginCommand) {
|
||||||
|
try {
|
||||||
|
Object command = map.getCommand(cmdLabel);
|
||||||
|
Field field = command.getClass().getDeclaredField("completer");
|
||||||
|
field.setAccessible(true);
|
||||||
|
if (field.get(command) == null) {
|
||||||
|
BukkitCompleter completer = new BukkitCompleter();
|
||||||
|
completer.addCompleter(label, m, obj);
|
||||||
|
field.set(command, completer);
|
||||||
|
} else if (field.get(command) instanceof BukkitCompleter) {
|
||||||
|
BukkitCompleter completer = (BukkitCompleter) field.get(command);
|
||||||
|
completer.addCompleter(label, m, obj);
|
||||||
|
} else {
|
||||||
|
System.out.println("Unable to register tab completer " + m.getName()
|
||||||
|
+ ". A tab completer is already registered for that command!");
|
||||||
|
}
|
||||||
|
} catch (Exception ex) {
|
||||||
|
ex.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void defaultCommand(CommandArgs args) {
|
||||||
|
args.getSender().sendMessage(args.getLabel() + " is not handled! Oh noes!");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,37 @@
|
||||||
|
package eu.univento.core.api.command;
|
||||||
|
|
||||||
|
import java.lang.annotation.ElementType;
|
||||||
|
import java.lang.annotation.Retention;
|
||||||
|
import java.lang.annotation.RetentionPolicy;
|
||||||
|
import java.lang.annotation.Target;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Command Framework - Completer <br>
|
||||||
|
* The completer annotation used to designate methods as command completers. All
|
||||||
|
* methods should have a single CommandArgs argument and return a String List
|
||||||
|
* object
|
||||||
|
*
|
||||||
|
* @author minnymin3
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
@Target(ElementType.METHOD)
|
||||||
|
@Retention(RetentionPolicy.RUNTIME)
|
||||||
|
public @interface Completer {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The command that this completer completes. If it is a sub command then
|
||||||
|
* its values would be separated by periods. ie. a command that would be a
|
||||||
|
* subcommand of test would be 'test.subcommandname'
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
String name();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A list of alternate names that the completer is executed under. See
|
||||||
|
* name() for details on how names work
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
String[] aliases() default {};
|
||||||
|
}
|
|
@ -1,238 +0,0 @@
|
||||||
package eu.univento.core.api.fakeplayer;
|
|
||||||
|
|
||||||
import com.mojang.authlib.GameProfile;
|
|
||||||
import eu.univento.core.Core;
|
|
||||||
import net.minecraft.server.v1_11_R1.*;
|
|
||||||
import org.bukkit.Location;
|
|
||||||
import org.bukkit.craftbukkit.v1_11_R1.entity.CraftPlayer;
|
|
||||||
import org.bukkit.entity.ArmorStand;
|
|
||||||
import org.bukkit.entity.EntityType;
|
|
||||||
import org.bukkit.entity.LivingEntity;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
import org.bukkit.scheduler.BukkitRunnable;
|
|
||||||
import org.bukkit.scheduler.BukkitTask;
|
|
||||||
|
|
||||||
import java.lang.reflect.Field;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author joethei
|
|
||||||
* @version 0.3
|
|
||||||
*/
|
|
||||||
public class FakePlayer {
|
|
||||||
|
|
||||||
//TODO: fix parts and add some stuff
|
|
||||||
|
|
||||||
private static final double MOVE_SPEED = 4.3D / 20;
|
|
||||||
|
|
||||||
private final Player player;
|
|
||||||
private final int entityId;
|
|
||||||
private final GameProfile gameProfile;
|
|
||||||
private final DataWatcher dataWatcher;
|
|
||||||
|
|
||||||
private Location location;
|
|
||||||
private ArmorStand armorStand;
|
|
||||||
private LivingEntity target;
|
|
||||||
private BukkitTask task;
|
|
||||||
|
|
||||||
private final boolean moveable;
|
|
||||||
|
|
||||||
public FakePlayer(GameProfile gameProfile, boolean moveable, Player player) {
|
|
||||||
|
|
||||||
this.player = player;
|
|
||||||
|
|
||||||
this.moveable = moveable;
|
|
||||||
|
|
||||||
this.entityId = (int) get(Entity.class, "entityCount");
|
|
||||||
set(Entity.class, null, "entityCount", this.entityId + 1);
|
|
||||||
this.gameProfile = gameProfile;
|
|
||||||
|
|
||||||
this.dataWatcher = new DataWatcher(null);
|
|
||||||
byte status = 0;
|
|
||||||
//this.dataWatcher.a(0, status);
|
|
||||||
//this.dataWatcher.a(10, (byte) 127);
|
|
||||||
//this.dataWatcher.a(6, 20F);
|
|
||||||
}
|
|
||||||
|
|
||||||
public Location getLocation() {
|
|
||||||
return location;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getEntityID() {
|
|
||||||
return entityId;
|
|
||||||
}
|
|
||||||
|
|
||||||
private final BukkitRunnable tickTask = new BukkitRunnable() {
|
|
||||||
|
|
||||||
private int ticksLiving = 0;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void run() {
|
|
||||||
if(target != null) {
|
|
||||||
followEntity(target);
|
|
||||||
|
|
||||||
ticksLiving++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
/*
|
|
||||||
private byte changeMask(byte bitMask, int bit, boolean state) {
|
|
||||||
if(state)
|
|
||||||
return bitMask | 1 << bit;
|
|
||||||
else
|
|
||||||
return bitMask & ~(1 << bit);
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
public void setTarget(LivingEntity target) {
|
|
||||||
this.target = target;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void clearTarget() {
|
|
||||||
this.target = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setFire(boolean fire) {
|
|
||||||
setStatus(0, fire);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setSneaking() {
|
|
||||||
setStatus(1, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setSprinting(boolean sprinting) {
|
|
||||||
setStatus(3, sprinting);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setUseItem(boolean useItem) {
|
|
||||||
setStatus(4, useItem);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setInvisible(boolean invisible) {
|
|
||||||
setStatus(5, invisible);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void setStatus(int data, boolean bool) {
|
|
||||||
DataWatcher dataWatcher = this.dataWatcher;
|
|
||||||
byte status = 0;
|
|
||||||
//dataWatcher.a(0, status);
|
|
||||||
//dataWatcher.a(10, (byte) 127);
|
|
||||||
//dataWatcher.a(6, 20F);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void followEntity(LivingEntity entity) {
|
|
||||||
double diffX = entity.getLocation().getX() - location.getX();
|
|
||||||
double diffY = (entity.getLocation().getY() + entity.getEyeHeight() * 0.9D) - location.getY() + 1.6F;
|
|
||||||
double diffZ = entity.getLocation().getZ() - location.getZ();
|
|
||||||
double hypoXZ = Math.sqrt(diffX * diffX + diffZ * diffZ);
|
|
||||||
float yaw = (float) (Math.atan2(diffZ, diffX) * 180D / Math.PI) - 90F;
|
|
||||||
float pitch = (float) -(Math.atan2(diffY, hypoXZ) * 18D / Math.PI);
|
|
||||||
look(yaw, pitch);
|
|
||||||
|
|
||||||
if(moveable) {
|
|
||||||
if(Math.abs(diffX) > 3D || Math.abs(diffZ) > 3D) {
|
|
||||||
yaw = (float) Math.toRadians(yaw);
|
|
||||||
double x = Math.sin(yaw);
|
|
||||||
double z = Math.cos(yaw);
|
|
||||||
move(x * MOVE_SPEED, z * MOVE_SPEED);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void move(double x, double z) {
|
|
||||||
sendPackets(new PacketPlayOutEntity.PacketPlayOutRelEntityMoveLook(this.entityId, (byte) toFixedPointNumber(x), (byte) toFixedPointNumber(0), (byte) toFixedPointNumber(z), toAngle(location.getYaw()), toAngle(location.getPitch()), true));
|
|
||||||
this.location.add(toFixedPointNumber(x) / 32D, toFixedPointNumber(0) / 32D, toFixedPointNumber(z) / 32D);
|
|
||||||
this.armorStand.teleport(this.location);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void spawn(Location location) {
|
|
||||||
PacketPlayOutNamedEntitySpawn playerSpawn = new PacketPlayOutNamedEntitySpawn();
|
|
||||||
set(playerSpawn, "a", this.entityId);
|
|
||||||
set(playerSpawn, "b", this.gameProfile.getId());
|
|
||||||
set(playerSpawn, "c", toFixedPointNumber(location.getX()));
|
|
||||||
set(playerSpawn, "d", toFixedPointNumber(location.getY()));
|
|
||||||
set(playerSpawn, "e", toFixedPointNumber(location.getZ()));
|
|
||||||
set(playerSpawn, "f", toAngle(location.getYaw()));
|
|
||||||
set(playerSpawn, "g", toAngle(location.getPitch()));
|
|
||||||
set(playerSpawn, "h", 0);
|
|
||||||
set(playerSpawn, "i", this.dataWatcher);
|
|
||||||
|
|
||||||
//XXX: cannot acess PlayerInfoData
|
|
||||||
PacketPlayOutPlayerInfo playerInfo = new PacketPlayOutPlayerInfo(PacketPlayOutPlayerInfo.EnumPlayerInfoAction.ADD_PLAYER);
|
|
||||||
//set(playerInfo, "b", Collections.singletonList(playerInfo.new PlayerInfoData(this.gameProfile, 0, WorldSettings.EnumGamemode.NOT_SET, new ChatComponentText(this.gameProfile.getName()))));
|
|
||||||
sendPackets(playerInfo, playerSpawn);
|
|
||||||
|
|
||||||
this.location = location;
|
|
||||||
this.armorStand = (ArmorStand) location.getWorld().spawnEntity(location, EntityType.ARMOR_STAND);
|
|
||||||
this.armorStand.setGravity(true);
|
|
||||||
this.armorStand.setVisible(false);
|
|
||||||
|
|
||||||
this.task = tickTask.runTaskTimer(Core.getInstance(), 0L, 1L);
|
|
||||||
}
|
|
||||||
//XXX: cannot acess PlayerInfoData
|
|
||||||
public void despawn() {
|
|
||||||
PacketPlayOutPlayerInfo playerInfo = new PacketPlayOutPlayerInfo(PacketPlayOutPlayerInfo.EnumPlayerInfoAction.REMOVE_PLAYER);
|
|
||||||
//set(playerInfo, "b", Collections.singletonList(playerInfo.new PlayerInfoData(this.gameProfile, 0, null, null)));
|
|
||||||
sendPackets(new PacketPlayOutEntityDestroy(this.entityId), playerInfo);
|
|
||||||
|
|
||||||
this.armorStand.remove();
|
|
||||||
this.armorStand = null;
|
|
||||||
this.task.cancel();
|
|
||||||
}
|
|
||||||
|
|
||||||
//XXX: cannot acess PlayerInfoData
|
|
||||||
public void removeTablist() {
|
|
||||||
PacketPlayOutPlayerInfo playerInfo = new PacketPlayOutPlayerInfo(PacketPlayOutPlayerInfo.EnumPlayerInfoAction.REMOVE_PLAYER);
|
|
||||||
//set(playerInfo, "b", Arrays.asList(playerInfo.new PlayerInfoData(this.gameProfile, 0, null, null)));
|
|
||||||
sendPackets(new PacketPlayOutEntityDestroy(this.entityId), playerInfo);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
private void look(float yaw, float pitch) {
|
|
||||||
PacketPlayOutEntityHeadRotation headRotation = new PacketPlayOutEntityHeadRotation();
|
|
||||||
set(headRotation, "a", this.entityId);
|
|
||||||
set(headRotation, "b", toAngle(yaw));
|
|
||||||
sendPackets(headRotation, new PacketPlayOutEntity.PacketPlayOutEntityLook(this.entityId, toAngle(yaw), toAngle(pitch), false));
|
|
||||||
this.location.setYaw(yaw);
|
|
||||||
this.location.setPitch(pitch);
|
|
||||||
}
|
|
||||||
|
|
||||||
private int toFixedPointNumber(double value) {
|
|
||||||
return (int) Math.floor(value * 32D);
|
|
||||||
}
|
|
||||||
|
|
||||||
private byte toAngle(float value) {
|
|
||||||
return (byte) ((int) (value * 256.0F / 360.F));
|
|
||||||
}
|
|
||||||
|
|
||||||
private void sendPackets(Packet<?>... packets) {
|
|
||||||
for(Packet<?> packet : packets)
|
|
||||||
((CraftPlayer) player).getHandle().playerConnection.sendPacket(packet);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void set(Object instance, String name, Object value) {
|
|
||||||
set(instance.getClass(), instance, name, value);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void set(Class<?> clazz, Object instance, String name, Object value) {
|
|
||||||
try{
|
|
||||||
Field field = clazz.getDeclaredField(name);
|
|
||||||
field.setAccessible(true);
|
|
||||||
field.set(instance, value);
|
|
||||||
}catch (Exception e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private Object get(Class<?> clazz, String name) {
|
|
||||||
try{
|
|
||||||
Field field = clazz.getDeclaredField("entityCount");
|
|
||||||
field.setAccessible(true);
|
|
||||||
return field.get(null);
|
|
||||||
}catch (Exception e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,51 +0,0 @@
|
||||||
package eu.univento.core.api.fakeplayer;
|
|
||||||
|
|
||||||
import com.mojang.authlib.GameProfile;
|
|
||||||
import eu.univento.core.api.utils.GameProfileBuilder;
|
|
||||||
import org.bukkit.Material;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
import org.bukkit.event.EventHandler;
|
|
||||||
import org.bukkit.event.Listener;
|
|
||||||
import org.bukkit.event.block.Action;
|
|
||||||
import org.bukkit.event.player.PlayerInteractEvent;
|
|
||||||
|
|
||||||
import java.util.UUID;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author joethei
|
|
||||||
* @version 0.1
|
|
||||||
*/
|
|
||||||
class PlayerKi implements Listener{
|
|
||||||
|
|
||||||
private FakePlayer player;
|
|
||||||
|
|
||||||
private FakePlayer createPlayer(Player p, String uuid, String skinUrl, String capeUrl) {
|
|
||||||
GameProfile gameProfile = GameProfileBuilder.getProfile(UUID.fromString(uuid), "TestUser", skinUrl, capeUrl);
|
|
||||||
return new FakePlayer(gameProfile, true, p);
|
|
||||||
}
|
|
||||||
|
|
||||||
@EventHandler
|
|
||||||
public void onInteract(PlayerInteractEvent e) {
|
|
||||||
if(e.getAction() == Action.RIGHT_CLICK_AIR) {
|
|
||||||
if(e.getItem().getType() == Material.DIAMOND) {
|
|
||||||
if(this.player != null) {
|
|
||||||
this.player.despawn();
|
|
||||||
}
|
|
||||||
FakePlayer player = createPlayer(e.getPlayer(), e.getPlayer().getUniqueId().toString(),
|
|
||||||
"http://textures.minecraft.net/texture/a116e69a845e227f7ca1fdde8c357c8c821ebd4ba619382ea4a1f87d4ae94",
|
|
||||||
"http://textures.minecraft.net/texture/3f688e0e699b3d9fe448b5bb50a3a288f9c589762b3dae8308842122dcb81");
|
|
||||||
this.player = player;
|
|
||||||
player.spawn(e.getPlayer().getLocation());
|
|
||||||
player.setTarget(e.getPlayer());
|
|
||||||
player.setSneaking();
|
|
||||||
player.removeTablist();
|
|
||||||
}
|
|
||||||
if(e.getItem().getType() == Material.DIAMOND_SWORD) {
|
|
||||||
player.despawn();
|
|
||||||
}
|
|
||||||
if(e.getItem().getType() == Material.NETHER_STAR) {
|
|
||||||
player.followEntity(e.getPlayer());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -13,6 +13,7 @@ import net.minecraft.server.v1_11_R1.EntityArmorStand;
|
||||||
import net.minecraft.server.v1_11_R1.PacketPlayOutEntityDestroy;
|
import net.minecraft.server.v1_11_R1.PacketPlayOutEntityDestroy;
|
||||||
import net.minecraft.server.v1_11_R1.PacketPlayOutSpawnEntityLiving;
|
import net.minecraft.server.v1_11_R1.PacketPlayOutSpawnEntityLiving;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.ChatColor;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.craftbukkit.v1_11_R1.CraftWorld;
|
import org.bukkit.craftbukkit.v1_11_R1.CraftWorld;
|
||||||
import org.bukkit.entity.ArmorStand;
|
import org.bukkit.entity.ArmorStand;
|
||||||
|
@ -50,13 +51,22 @@ public class Hologram implements Listener{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void showAll() {
|
||||||
|
for(CustomPlayer p : Core.getOnlinePlayers()) show(p);
|
||||||
|
}
|
||||||
|
|
||||||
public void hide(CustomPlayer p) {
|
public void hide(CustomPlayer p) {
|
||||||
for(EntityArmorStand stand : stands) {
|
for(EntityArmorStand stand : stands) {
|
||||||
p.sendPacket(new PacketPlayOutEntityDestroy(stand.getId()));
|
p.sendPacket(new PacketPlayOutEntityDestroy(stand.getId()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void hideAll() {
|
||||||
|
for(CustomPlayer p : Core.getOnlinePlayers()) hide(p);
|
||||||
|
}
|
||||||
|
|
||||||
public void destroy() {
|
public void destroy() {
|
||||||
|
hideAll();
|
||||||
for(EntityArmorStand armorStand : stands) {
|
for(EntityArmorStand armorStand : stands) {
|
||||||
armorStand.die();
|
armorStand.die();
|
||||||
}
|
}
|
||||||
|
@ -67,7 +77,7 @@ public class Hologram implements Listener{
|
||||||
double DISTANCE = 0.25D;
|
double DISTANCE = 0.25D;
|
||||||
for (String text : this.text) {
|
for (String text : this.text) {
|
||||||
EntityArmorStand entity = new EntityArmorStand(((CraftWorld) this.location.getWorld()).getHandle(),this.location.getX(), this.location.getY(),this.location.getZ());
|
EntityArmorStand entity = new EntityArmorStand(((CraftWorld) this.location.getWorld()).getHandle(),this.location.getX(), this.location.getY(),this.location.getZ());
|
||||||
entity.setCustomName(text);
|
entity.setCustomName(ChatColor.translateAlternateColorCodes('&', text));
|
||||||
entity.setCustomNameVisible(true);
|
entity.setCustomNameVisible(true);
|
||||||
entity.setInvisible(true);
|
entity.setInvisible(true);
|
||||||
entity.setNoGravity(true);
|
entity.setNoGravity(true);
|
||||||
|
|
|
@ -249,6 +249,7 @@ public class ItemBuilder {
|
||||||
meta().addEnchant(Enchantment.ARROW_DAMAGE, 10, false);
|
meta().addEnchant(Enchantment.ARROW_DAMAGE, 10, false);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Clears the defined {@link String} of lore from the {@link ItemStack}
|
* Clears the defined {@link String} of lore from the {@link ItemStack}
|
||||||
*
|
*
|
||||||
|
|
|
@ -2,152 +2,304 @@ package eu.univento.core.api.npc;
|
||||||
|
|
||||||
import com.mojang.authlib.GameProfile;
|
import com.mojang.authlib.GameProfile;
|
||||||
import com.mojang.authlib.properties.Property;
|
import com.mojang.authlib.properties.Property;
|
||||||
import eu.univento.commons.player.uuid.UUIDFetcher;
|
|
||||||
import eu.univento.core.Core;
|
import eu.univento.core.Core;
|
||||||
import eu.univento.core.api.player.CustomPlayer;
|
import eu.univento.core.api.player.CustomPlayer;
|
||||||
import eu.univento.core.api.utils.GameProfileBuilder;
|
import lombok.Getter;
|
||||||
import lombok.Data;
|
import net.minecraft.server.v1_11_R1.*;
|
||||||
import net.minecraft.server.v1_11_R1.DataWatcher;
|
|
||||||
import net.minecraft.server.v1_11_R1.PacketPlayOutEntityDestroy;
|
|
||||||
import net.minecraft.server.v1_11_R1.PacketPlayOutNamedEntitySpawn;
|
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.block.BlockFace;
|
||||||
|
import org.bukkit.craftbukkit.v1_11_R1.CraftServer;
|
||||||
|
import org.bukkit.craftbukkit.v1_11_R1.CraftWorld;
|
||||||
|
import org.bukkit.craftbukkit.v1_11_R1.entity.CraftPlayer;
|
||||||
|
import org.bukkit.craftbukkit.v1_11_R1.inventory.CraftItemStack;
|
||||||
|
import org.bukkit.entity.*;
|
||||||
|
import org.bukkit.scheduler.BukkitRunnable;
|
||||||
|
import org.bukkit.scheduler.BukkitTask;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.util.LinkedList;
|
||||||
import java.lang.reflect.Field;
|
import java.util.List;
|
||||||
import java.util.UUID;
|
import java.util.Map;
|
||||||
|
|
||||||
|
import eu.univento.core.api.npc.NPC;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author joethei
|
* @author Ploxh4D, joethei
|
||||||
* @version 0.1
|
* @version 1.0
|
||||||
*/
|
*/
|
||||||
|
public class NPC extends EntityPlayer {
|
||||||
|
|
||||||
@Data
|
@Getter private static List<NPC> npcs = new LinkedList<>();
|
||||||
public class NPC{
|
|
||||||
|
|
||||||
private int entityID;
|
public static NPC spawn(CustomPlayer p, GameProfile profile, Location location) {
|
||||||
private Location location;
|
GameProfile npcProfile = new GameProfile(profile.getId(), profile.getName());
|
||||||
private static GameProfile gameProfile;
|
for(Map.Entry<String, Property> properties : profile.getProperties().entries()) npcProfile.getProperties().put(properties.getKey(), properties.getValue());
|
||||||
private DataWatcher dataWatcher;
|
NPC npc = new NPC(((CraftServer)Bukkit.getServer()).getServer(), ((CraftWorld)p.getWorld()).getHandle(), npcProfile, new PlayerInteractManager(((CraftWorld)p.getWorld()).getHandle()), p, location.getBlockX(), location.getBlockZ());
|
||||||
|
npcProfile.getProperties().put("npc", new Property("npc", "npc"));
|
||||||
|
npcs.add(npc);
|
||||||
|
return npc;
|
||||||
|
}
|
||||||
|
|
||||||
public NPC(String name, Location location) {
|
public CustomPlayer detect;
|
||||||
this.location = location;
|
public PacketPlayOutNamedEntitySpawn packet;
|
||||||
dataWatcher = new DataWatcher(null);
|
public int x;
|
||||||
gameProfile = new GameProfile(UUID.randomUUID(), name);
|
public int z;
|
||||||
entityID = (int) (Math.ceil(Math.random() * 1000) + 2000);
|
public String message;
|
||||||
Bukkit.getScheduler().scheduleAsyncDelayedTask(Core.getInstance(), () -> {
|
public EntityPlayer player;
|
||||||
try {
|
private BukkitTask task;
|
||||||
gameProfile = GameProfileBuilder.fetch(UUIDFetcher.getRequest(name));
|
|
||||||
} catch (IOException e) {
|
public NPC(final MinecraftServer minecraftserver, final WorldServer worldserver, final GameProfile gameprofile, final PlayerInteractManager playerinteractmanager, final Player player, final int x, final int z) {
|
||||||
e.printStackTrace();
|
super(minecraftserver, worldserver, gameprofile, playerinteractmanager);
|
||||||
|
CustomPlayer p = CustomPlayer.getPlayer(player);
|
||||||
|
this.detect = null;
|
||||||
|
this.x = 0;
|
||||||
|
this.z = 0;
|
||||||
|
this.message = "";
|
||||||
|
this.detect = p;
|
||||||
|
this.x = x;
|
||||||
|
this.z = z;
|
||||||
|
try {
|
||||||
|
final NetworkManager netManager = new NPCNetworkManager(EnumProtocolDirection.SERVERBOUND);
|
||||||
|
netManager.setPacketListener(this.playerConnection = new NPCPlayerConnection(((CraftServer) Bukkit.getServer()).getServer(), netManager, this));
|
||||||
|
} catch (Exception e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
this.setSneaking(this.detect.isSneaking());
|
||||||
|
this.setSprinting(this.detect.isSprinting());
|
||||||
|
this.getBukkitEntity().setCanPickupItems(this.detect.getCanPickupItems());
|
||||||
|
final Location l = this.detect.getLocation();
|
||||||
|
l.setX(l.getX() + x);
|
||||||
|
l.setZ(l.getZ() + z);
|
||||||
|
for (int i = 0; i < 500; ++i) {
|
||||||
|
if (l.getBlock().getRelative(BlockFace.DOWN, i).getType() != Material.AIR && l.getBlock().getRelative(BlockFace.DOWN, i).getType().isSolid()) {
|
||||||
|
l.setY(l.getY() - (i - 1));
|
||||||
|
i = 500;
|
||||||
}
|
}
|
||||||
}, 20L);
|
}
|
||||||
|
for (int i = 0; i < 500; ++i) {
|
||||||
|
if (l.getBlock().getRelative(BlockFace.UP, i).getType() != Material.AIR && l.getBlock().getRelative(BlockFace.UP, i).getType().isSolid()) {
|
||||||
|
l.setY(l.getY() + (i + 1));
|
||||||
|
}
|
||||||
|
if (l.getBlock().getRelative(BlockFace.UP, i + 1).getType() == Material.AIR) {
|
||||||
|
i = 500;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this.setLocation(l.getX(), l.getY(), l.getZ(), l.getYaw(), l.getPitch());
|
||||||
|
if (!l.getBlock().getRelative(BlockFace.UP, 0).getType().isSolid() && !l.getBlock().getRelative(BlockFace.UP, 1).getType().isSolid()) {
|
||||||
|
this.enderTeleportTo(l.getX(), l.getY(), l.getZ());
|
||||||
|
}
|
||||||
|
this.packet = new PacketPlayOutNamedEntitySpawn(this);
|
||||||
|
this.runPlayerUpdate();
|
||||||
|
p.sendPacket(this.packet);
|
||||||
|
this.fauxSleeping = true;
|
||||||
|
this.player = this;
|
||||||
|
|
||||||
|
new BukkitRunnable() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
for(NPC npc : npcs) {
|
||||||
|
PacketPlayOutEntityHeadRotation headRotationPacket = new PacketPlayOutEntityHeadRotation(npc.getBukkitEntity().getHandle(), getCompressedAngle(detect.getEyeLocation().getYaw()));
|
||||||
|
PacketPlayOutEntityTeleport teleportPacket = new PacketPlayOutEntityTeleport(npc.getBukkitEntity().getHandle());
|
||||||
|
PacketPlayOutEntityMetadata metadataPacket = new PacketPlayOutEntityMetadata(npc.getId(), npc.getDataWatcher(), true);
|
||||||
|
for(CustomPlayer player : Core.getOnlinePlayers()) {
|
||||||
|
player.sendPacket(headRotationPacket);
|
||||||
|
player.sendPacket(teleportPacket);
|
||||||
|
player.sendPacket(metadataPacket);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}.runTaskTimerAsynchronously(Core.getInstance(), 0L, 0L);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void spawn() {
|
private byte getCompressedAngle(float value) {
|
||||||
PacketPlayOutNamedEntitySpawn packet = new PacketPlayOutNamedEntitySpawn();
|
return (byte) (value * 256.0F / 360F);
|
||||||
|
|
||||||
setField(packet, "a", entityID);
|
|
||||||
setField(packet, "b", gameProfile.getId());
|
|
||||||
setField(packet, "c", location.getX());
|
|
||||||
setField(packet, "d", location.getY());
|
|
||||||
setField(packet, "e", location.getZ());
|
|
||||||
setField(packet, "f", location.getYaw());
|
|
||||||
setField(packet, "g", location.getPitch());
|
|
||||||
setField(packet, "h", dataWatcher);
|
|
||||||
|
|
||||||
for(CustomPlayer player : Core.getOnlinePlayers()) player.sendPacket(packet);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setSkin(String value, String signature) {
|
|
||||||
gameProfile.getProperties().put("textures", new Property("textures", value, signature));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void remove() {
|
public void remove() {
|
||||||
PacketPlayOutEntityDestroy packet = new PacketPlayOutEntityDestroy(entityID);
|
if (npcs.contains(this)) {
|
||||||
for(CustomPlayer player : Core.getOnlinePlayers()) player.sendPacket(packet);
|
npcs.remove(this);
|
||||||
}
|
}
|
||||||
|
this.task.cancel();
|
||||||
private void addToTablist() {
|
for (CustomPlayer players : Core.getOnlinePlayers()) {
|
||||||
|
final PacketPlayOutEntityDestroy teleport = new PacketPlayOutEntityDestroy(player.getId());
|
||||||
}
|
players.sendPacket(teleport);
|
||||||
|
|
||||||
private void removeFromTablist() {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
private void setField(Object instance, String field, Object value) {
|
|
||||||
try {
|
|
||||||
Field f = instance.getClass().getDeclaredField(field);
|
|
||||||
f.setAccessible(true);
|
|
||||||
f.set(instance, value);
|
|
||||||
} catch (NoSuchFieldException | IllegalAccessException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setMessage(final String message) {
|
||||||
/*
|
this.message = message;
|
||||||
int entityID;
|
|
||||||
Location location;
|
|
||||||
GameProfile gameprofile;
|
|
||||||
|
|
||||||
|
|
||||||
public NPC(String name,Location location){
|
|
||||||
entityID = (int)Math.ceil(Math.random() * 1000) + 2000;
|
|
||||||
gameprofile = new GameProfile(UUID.randomUUID(), name);
|
|
||||||
this.location = location;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void spawn(){
|
public void runPlayerUpdate() {
|
||||||
PacketPlayOutNamedEntitySpawn packet = new PacketPlayOutNamedEntitySpawn();
|
this.task = new BukkitRunnable() {
|
||||||
|
public void run() {
|
||||||
|
if (detect != null) {
|
||||||
|
if (Bukkit.getPlayerExact(detect.getName()) != null) {
|
||||||
|
if (!getBukkitEntity().isDead()) {
|
||||||
|
setSneaking(detect.isSneaking());
|
||||||
|
setSprinting(detect.isSprinting());
|
||||||
|
EnumItemSlot[] values;
|
||||||
|
for (int length = (values = EnumItemSlot.values()).length, j = 0; j < length; ++j) {
|
||||||
|
final EnumItemSlot slot = values[j];
|
||||||
|
final PacketPlayOutEntityEquipment equip = new PacketPlayOutEntityEquipment(getBukkitEntity().getEntityId(), slot, getEquip(slot));
|
||||||
|
for (CustomPlayer players : Core.getOnlinePlayers()) {
|
||||||
|
players.sendPacket(equip);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
final Location l = detect.getLocation();
|
||||||
|
l.setX(l.getX() + x);
|
||||||
|
l.setZ(l.getZ() + z);
|
||||||
|
for (int i = 0; i < 500; ++i) {
|
||||||
|
if (l.getBlock().getRelative(BlockFace.DOWN, i).getType() != Material.AIR && l.getBlock().getRelative(BlockFace.DOWN, i).getType().isSolid()) {
|
||||||
|
l.setY(l.getY() - (i - 1));
|
||||||
|
i = 500;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (int i = 0; i < 500; ++i) {
|
||||||
|
if (l.getBlock().getRelative(BlockFace.UP, i).getType() != Material.AIR && l.getBlock().getRelative(BlockFace.UP, i).getType().isSolid()) {
|
||||||
|
l.setY(l.getY() + (i + 1));
|
||||||
|
}
|
||||||
|
if (l.getBlock().getRelative(BlockFace.UP, i + 1).getType() == Material.AIR) {
|
||||||
|
i = 500;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!l.getBlock().getRelative(BlockFace.UP, 0).getType().isSolid() && !l.getBlock().getRelative(BlockFace.UP, 1).getType().isSolid()) {
|
||||||
|
enderTeleportTo(l.getX(), l.getY(), l.getZ());
|
||||||
|
}
|
||||||
|
NPC.access$0(NPC.this, l.getYaw(), l.getPitch());
|
||||||
|
aK = l.getYaw();
|
||||||
|
aL = l.getYaw();
|
||||||
|
getBukkitEntity().setCanPickupItems(detect.getCanPickupItems());
|
||||||
|
} else {
|
||||||
|
this.cancel();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
this.cancel();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
this.cancel();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
setValue(packet, "a", entityID);
|
private ItemStack getEquip(final EnumItemSlot slot) {
|
||||||
setValue(packet, "b", gameprofile.getId());
|
switch (slot) {
|
||||||
setValue(packet, "c", (int)MathHelper.floor(location.getX() * 32.0D));
|
case MAINHAND: return CraftItemStack.asNMSCopy(detect.getInventory().getItemInMainHand());
|
||||||
setValue(packet, "d", (int)MathHelper.floor(location.getY() * 32.0D));
|
case OFFHAND: return CraftItemStack.asNMSCopy(detect.getInventory().getItemInOffHand());
|
||||||
setValue(packet, "e", (int)MathHelper.floor(location.getZ() * 32.0D));
|
case FEET: return CraftItemStack.asNMSCopy(detect.getInventory().getBoots());
|
||||||
setValue(packet, "f", (byte) ((int) (location.getYaw() * 256.0F / 360.0F)));
|
case LEGS: return CraftItemStack.asNMSCopy(detect.getInventory().getLeggings());
|
||||||
setValue(packet, "g", (byte) ((int) (location.getPitch() * 256.0F / 360.0F)));
|
case CHEST: return CraftItemStack.asNMSCopy(detect.getInventory().getChestplate());
|
||||||
setValue(packet, "h", 0);
|
case HEAD: return CraftItemStack.asNMSCopy(detect.getInventory().getHelmet());
|
||||||
DataWatcher w = new DataWatcher(null);
|
default: return null;
|
||||||
w.a(6,(float)20);
|
}
|
||||||
w.a(10,(byte)127);
|
}
|
||||||
setValue(packet, "i", w);
|
}.runTaskTimer(Core.getInstance(), 0L, 0L);
|
||||||
addToTablist();
|
|
||||||
sendPacket(packet);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void destroy(){
|
public boolean damageEntity(final DamageSource damagesource, final float f) {
|
||||||
PacketPlayOutEntityDestroy packet = new PacketPlayOutEntityDestroy(new int[] {entityID});
|
if (damagesource.getEntity().getBukkitEntity().getType() == EntityType.ARROW) {
|
||||||
rmvFromTablist();
|
final Arrow a = (Arrow) damagesource.getEntity().getBukkitEntity();
|
||||||
sendPacket(packet);
|
if (a.getShooter() != null) {
|
||||||
|
if (a.getShooter() instanceof Player) {
|
||||||
|
final Player shooter = (Player) a.getShooter();
|
||||||
|
if (this.detect != null && !shooter.getName().equals(this.detect.getName())) {
|
||||||
|
this.playEffect();
|
||||||
|
this.remove();
|
||||||
|
shooter.sendMessage(this.message);
|
||||||
|
if (npcs.contains(this)) {
|
||||||
|
npcs.remove(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
this.remove();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (damagesource.getEntity().getBukkitEntity().getType() == EntityType.SNOWBALL) {
|
||||||
|
final Snowball a2 = (Snowball) damagesource.getEntity().getBukkitEntity();
|
||||||
|
if (a2.getShooter() != null) {
|
||||||
|
if (a2.getShooter() instanceof Player) {
|
||||||
|
final Player shooter = (Player) a2.getShooter();
|
||||||
|
if (this.detect != null && !shooter.getName().equals(this.detect.getName())) {
|
||||||
|
this.playEffect();
|
||||||
|
this.remove();
|
||||||
|
shooter.sendMessage(this.message);
|
||||||
|
if (npcs.contains(this)) {
|
||||||
|
npcs.remove(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
this.remove();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (damagesource.getEntity().getBukkitEntity().getType() == EntityType.EGG) {
|
||||||
|
final Egg a3 = (Egg) damagesource.getEntity().getBukkitEntity();
|
||||||
|
if (a3.getShooter() != null) {
|
||||||
|
if (a3.getShooter() instanceof Player) {
|
||||||
|
final Player shooter = (Player) a3.getShooter();
|
||||||
|
if (this.detect != null && !shooter.getName().equals(this.detect.getName())) {
|
||||||
|
this.playEffect();
|
||||||
|
this.remove();
|
||||||
|
shooter.sendMessage(this.message);
|
||||||
|
if (npcs.contains(this)) {
|
||||||
|
npcs.remove(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
this.remove();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (damagesource.getEntity().getBukkitEntity().getType() == EntityType.FIREBALL) {
|
||||||
|
final Fireball a4 = (Fireball) damagesource.getEntity().getBukkitEntity();
|
||||||
|
if (a4.getShooter() != null) {
|
||||||
|
if (a4.getShooter() instanceof Player) {
|
||||||
|
final Player shooter = (Player) a4.getShooter();
|
||||||
|
if (this.detect != null && !shooter.getName().equals(this.detect.getName())) {
|
||||||
|
this.playEffect();
|
||||||
|
this.remove();
|
||||||
|
shooter.sendMessage(this.message);
|
||||||
|
if (npcs.contains(this)) {
|
||||||
|
npcs.remove(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
this.remove();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (damagesource.getEntity().getBukkitEntity().getType() == EntityType.PLAYER && this.detect != null && !damagesource.getEntity().getName().equals(this.detect.getName())) {
|
||||||
|
this.playEffect();
|
||||||
|
this.remove();
|
||||||
|
final Player damager = (Player) damagesource.getEntity().getBukkitEntity();
|
||||||
|
damager.sendMessage(this.message);
|
||||||
|
if (npcs.contains(this)) {
|
||||||
|
npcs.remove(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addToTablist(){
|
public void playEffect() {
|
||||||
PacketPlayOutPlayerInfo packet = new PacketPlayOutPlayerInfo();
|
this.remove();
|
||||||
PacketPlayOutPlayerInfo.PlayerInfoData data = packet.new PlayerInfoData(gameprofile, 1, EnumGamemode.NOT_SET, CraftChatMessage.fromString(gameprofile.getName())[0]);
|
for (final Player all : Bukkit.getOnlinePlayers()) {
|
||||||
@SuppressWarnings("unchecked")
|
final Location l = this.getBukkitEntity().getLocation();
|
||||||
List<PacketPlayOutPlayerInfo.PlayerInfoData> players = (List<PacketPlayOutPlayerInfo.PlayerInfoData>) getValue(packet, "b");
|
float i = 0.3f;
|
||||||
players.add(data);
|
for (int a = 0; a <= 5; ++a) {
|
||||||
|
i = i + 0.3f;
|
||||||
setValue(packet, "a", PacketPlayOutPlayerInfo.EnumPlayerInfoAction.ADD_PLAYER);
|
final PacketPlayOutWorldParticles particle = new PacketPlayOutWorldParticles(EnumParticle.CLOUD, true, (float) l.getX(), (float) l.getY() + i, (float) l.getZ(), 0.0f, 0.0f, 0.0f, 0.0f, 10);
|
||||||
setValue(packet, "b", players);
|
((CraftPlayer) all).getHandle().playerConnection.sendPacket(particle);
|
||||||
|
}
|
||||||
sendPacket(packet);
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void rmvFromTablist(){
|
public Player getPlayer() {
|
||||||
PacketPlayOutPlayerInfo packet = new PacketPlayOutPlayerInfo();
|
return this.detect;
|
||||||
PacketPlayOutPlayerInfo.PlayerInfoData data = packet.new PlayerInfoData(gameprofile, 1, EnumGamemode.NOT_SET, CraftChatMessage.fromString(gameprofile.getName())[0]);
|
}
|
||||||
@SuppressWarnings("unchecked")
|
|
||||||
List<PacketPlayOutPlayerInfo.PlayerInfoData> players = (List<PacketPlayOutPlayerInfo.PlayerInfoData>) getValue(packet, "b");
|
static /* synthetic */ void access$0(final NPC npc, final float n, final float n2) {
|
||||||
players.add(data);
|
npc.setYawPitch(n, n2);
|
||||||
|
|
||||||
setValue(packet, "a", PacketPlayOutPlayerInfo.EnumPlayerInfoAction.REMOVE_PLAYER);
|
|
||||||
setValue(packet, "b", players);
|
|
||||||
|
|
||||||
sendPacket(packet);
|
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
}
|
}
|
|
@ -0,0 +1,67 @@
|
||||||
|
package eu.univento.core.api.npc;
|
||||||
|
|
||||||
|
import io.netty.channel.*;
|
||||||
|
|
||||||
|
import java.net.SocketAddress;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Ploxh4D
|
||||||
|
* @version 1.0
|
||||||
|
*/
|
||||||
|
|
||||||
|
public class NPCChannel extends AbstractChannel {
|
||||||
|
private final ChannelConfig config;
|
||||||
|
|
||||||
|
protected NPCChannel(final Channel parent) {
|
||||||
|
super(parent);
|
||||||
|
this.config = new DefaultChannelConfig(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
public ChannelConfig config() {
|
||||||
|
this.config.setAutoRead(true);
|
||||||
|
return this.config;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isActive() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isOpen() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ChannelMetadata metadata() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void doBeginRead() throws Exception {
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void doBind(final SocketAddress arg0) throws Exception {
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void doClose() throws Exception {
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void doDisconnect() throws Exception {
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void doWrite(final ChannelOutboundBuffer arg0) throws Exception {
|
||||||
|
}
|
||||||
|
|
||||||
|
protected boolean isCompatible(final EventLoop arg0) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected SocketAddress localAddress0() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected AbstractChannel.AbstractUnsafe newUnsafe() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected SocketAddress remoteAddress0() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,15 @@
|
||||||
|
package eu.univento.core.api.npc;
|
||||||
|
|
||||||
|
import net.minecraft.server.v1_11_R1.EnumProtocolDirection;
|
||||||
|
import net.minecraft.server.v1_11_R1.NetworkManager;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Ploxh4D
|
||||||
|
* @version 1.0
|
||||||
|
*/
|
||||||
|
public class NPCNetworkManager extends NetworkManager{
|
||||||
|
|
||||||
|
public NPCNetworkManager(EnumProtocolDirection enumprotocoldirection) {
|
||||||
|
super(enumprotocoldirection);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,17 @@
|
||||||
|
package eu.univento.core.api.npc;
|
||||||
|
|
||||||
|
import net.minecraft.server.v1_11_R1.EntityPlayer;
|
||||||
|
import net.minecraft.server.v1_11_R1.MinecraftServer;
|
||||||
|
import net.minecraft.server.v1_11_R1.NetworkManager;
|
||||||
|
import net.minecraft.server.v1_11_R1.PlayerConnection;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author joethei
|
||||||
|
* @version 0.1
|
||||||
|
*/
|
||||||
|
public class NPCPlayerConnection extends PlayerConnection{
|
||||||
|
|
||||||
|
public NPCPlayerConnection(MinecraftServer minecraftserver, NetworkManager networkmanager, EntityPlayer entityplayer) {
|
||||||
|
super(minecraftserver, networkmanager, entityplayer);
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,43 +0,0 @@
|
||||||
package eu.univento.core.api.npc.datawatcher;
|
|
||||||
|
|
||||||
import lombok.Getter;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author ingrim4, joethei
|
|
||||||
* @version 1.0
|
|
||||||
*/
|
|
||||||
enum EnumDataWatcher {
|
|
||||||
|
|
||||||
//TODO: fix field
|
|
||||||
|
|
||||||
ENTITY_BITMASK_00("Entity", "ay"),//
|
|
||||||
ENTITY_AIR_01("Entity", "az"),//AIR
|
|
||||||
ENTITY_NAME_02("Entity", "aA"),//CUSTOM_NAME
|
|
||||||
ENTITY_NAME_VISIBLE_03("Entity", "aB"),//CUSTOM_NAME_VISIBLE
|
|
||||||
ENTITY_SILENT_04("Entity", "aC"),//SILENT
|
|
||||||
|
|
||||||
LIVING_HAND_05("EntityLiving", "as"),
|
|
||||||
LIVING_HEALTH_06("EntityLiving", "HEALTH"),
|
|
||||||
LIVING_POTION_COLOR_07("EntityLiving", "f"),
|
|
||||||
LIVING_POTION_AMBIENT_08("EntityLiving", "g"),
|
|
||||||
LIVING_ARROWS_09("EntityLiving", "h"),
|
|
||||||
|
|
||||||
HUMAN_ABSORTION_10("EntityHuman", ""),
|
|
||||||
HUMAN_SCORE_11("EntityHuman", ""),
|
|
||||||
HUMAN_SKIN_12("EntityHuman", ""),
|
|
||||||
HUMAN_HAND_13("EntityHuman", "");
|
|
||||||
|
|
||||||
@Getter
|
|
||||||
private String owner;
|
|
||||||
@Getter
|
|
||||||
private String field;
|
|
||||||
|
|
||||||
EnumDataWatcher(String owner, String field) {
|
|
||||||
this.owner = owner;
|
|
||||||
this.field = field;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Object getObject() {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,49 +0,0 @@
|
||||||
package eu.univento.core.api.npc.datawatcher;
|
|
||||||
|
|
||||||
import eu.univento.core.api.utils.reflection.IReflection;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author ingrim4, joethei
|
|
||||||
* @version 1.0
|
|
||||||
*/
|
|
||||||
public class NullDataWatcher {
|
|
||||||
|
|
||||||
private static final Class<?> CLASS_DATAWATCHER = IReflection.getClass(IReflection.ServerPacket.MINECRAFT_PACKAGE, "DataWatcher");
|
|
||||||
private static final IReflection.ConstructorAccessor CONSTRUCTOR_DATAWATCHER_ENTITY = IReflection.getConstructor(CLASS_DATAWATCHER, IReflection.getClass(IReflection.ServerPacket.MINECRAFT_PACKAGE, "Entity"));
|
|
||||||
|
|
||||||
private static final Class<?> CLASS_DATAWATCHER_OBJECT = IReflection.getClass(IReflection.ServerPacket.MINECRAFT_PACKAGE, "DataWatcherObject");
|
|
||||||
|
|
||||||
private static final Class<?> CLASS_DATAWATCHER_ITEM = IReflection.getClass(IReflection.ServerPacket.MINECRAFT_PACKAGE, "DataWatcher$Item");
|
|
||||||
private static final IReflection.MethodAccessor METHOD_DATAWATCHER_ITEM_SETDATA = IReflection.getMethod(CLASS_DATAWATCHER_ITEM, "a", Object.class);
|
|
||||||
|
|
||||||
private static final IReflection.MethodAccessor METHOD_DATAWATCHER_REGISTER = IReflection.getMethod(CLASS_DATAWATCHER, "register", CLASS_DATAWATCHER_OBJECT, Object.class);
|
|
||||||
private static final IReflection.MethodAccessor METHOD_DATAWATCHER_GETITEM = IReflection.getMethod(CLASS_DATAWATCHER, "c", CLASS_DATAWATCHER_OBJECT, Object.class);
|
|
||||||
|
|
||||||
private static final IReflection.MethodAccessor METHOD_DATAWATCHER_C = IReflection.getMethod(CLASS_DATAWATCHER, "c");
|
|
||||||
|
|
||||||
private final Object dataWatcher;
|
|
||||||
|
|
||||||
public NullDataWatcher() {
|
|
||||||
this.dataWatcher = CONSTRUCTOR_DATAWATCHER_ENTITY.newInstance(new Object[]{null});
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public NullDataWatcher add(EnumDataWatcher dataWatcher, Object value) {
|
|
||||||
METHOD_DATAWATCHER_REGISTER.invoke(this.dataWatcher, dataWatcher.getObject(), value);
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public NullDataWatcher update(EnumDataWatcher dataWatcher, Object value) {
|
|
||||||
Object item = METHOD_DATAWATCHER_GETITEM.invoke(this.dataWatcher, dataWatcher.getObject());
|
|
||||||
METHOD_DATAWATCHER_ITEM_SETDATA.invoke(item, value);
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Object toPacket() {
|
|
||||||
return METHOD_DATAWATCHER_C.invoke(this.dataWatcher);
|
|
||||||
}
|
|
||||||
|
|
||||||
public Object toNMS() {
|
|
||||||
return this.dataWatcher;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -14,7 +14,6 @@ import eu.univento.core.api.gui.hologram.HologramData;
|
||||||
import eu.univento.core.api.server.ServerSettings;
|
import eu.univento.core.api.server.ServerSettings;
|
||||||
import io.netty.buffer.ByteBuf;
|
import io.netty.buffer.ByteBuf;
|
||||||
import io.netty.buffer.Unpooled;
|
import io.netty.buffer.Unpooled;
|
||||||
import io.vertx.core.json.JsonObject;
|
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import net.minecraft.server.v1_11_R1.*;
|
import net.minecraft.server.v1_11_R1.*;
|
||||||
import org.bukkit.*;
|
import org.bukkit.*;
|
||||||
|
@ -60,8 +59,7 @@ public class CustomPlayer extends CraftPlayer {
|
||||||
|
|
||||||
private final GameProfile gameProfile;
|
private final GameProfile gameProfile;
|
||||||
|
|
||||||
@Getter
|
@Getter private HologramData hologramData;
|
||||||
private HologramData hologramData;
|
|
||||||
|
|
||||||
private CustomPlayer(Player player) {
|
private CustomPlayer(Player player) {
|
||||||
super((CraftServer) Bukkit.getServer(), ((CraftPlayer) player).getHandle());
|
super((CraftServer) Bukkit.getServer(), ((CraftPlayer) player).getHandle());
|
||||||
|
@ -79,15 +77,16 @@ public class CustomPlayer extends CraftPlayer {
|
||||||
location.put("X", getLocation().getX());
|
location.put("X", getLocation().getX());
|
||||||
location.put("Y", getLocation().getY());
|
location.put("Y", getLocation().getY());
|
||||||
location.put("Z", getLocation().getZ());
|
location.put("Z", getLocation().getZ());
|
||||||
location.put("Yaw", getLocation().getYaw());
|
location.put("Yaw", String.valueOf(getLocation().getYaw()));
|
||||||
location.put("Pitch", getLocation().getPitch());
|
location.put("Pitch", String.valueOf(getLocation().getPitch()));
|
||||||
|
|
||||||
if (ServerSettings.isLobby()) DATABASE_PLAYER.setInDatabase("Pos", new JsonObject(location));
|
if (ServerSettings.isLobby()) DATABASE_PLAYER.setInDatabase("Pos", location);
|
||||||
|
|
||||||
if (PLAYERS.containsKey(getUniqueId())) PLAYERS.remove(getUniqueId());
|
if (PLAYERS.containsKey(getUniqueId())) PLAYERS.remove(getUniqueId());
|
||||||
}
|
}
|
||||||
|
|
||||||
public static CustomPlayer getPlayer(String player) {
|
public static CustomPlayer getPlayer(String player) {
|
||||||
|
if(Bukkit.getPlayer(player) == null) return null;
|
||||||
Player p = Bukkit.getPlayer(player);
|
Player p = Bukkit.getPlayer(player);
|
||||||
if (PLAYERS.containsKey(p.getUniqueId())) {
|
if (PLAYERS.containsKey(p.getUniqueId())) {
|
||||||
return PLAYERS.get(p.getUniqueId());
|
return PLAYERS.get(p.getUniqueId());
|
||||||
|
@ -120,11 +119,9 @@ public class CustomPlayer extends CraftPlayer {
|
||||||
|
|
||||||
public CompletableFuture<Location> getLastLocation() {
|
public CompletableFuture<Location> getLastLocation() {
|
||||||
CompletableFuture<Location> future = new CompletableFuture<>();
|
CompletableFuture<Location> future = new CompletableFuture<>();
|
||||||
DATABASE_PLAYER.getObjectFromDatabase("POS").whenComplete((entries, throwable) -> {
|
DATABASE_PLAYER.getObjectFromDatabase("POS").whenComplete((entries, throwable) ->
|
||||||
future.complete(new Location(Bukkit.getWorld("world"), entries.getDouble("X"), entries.getDouble("Y"),
|
future.complete(new Location(Bukkit.getWorld("world"), entries.getDouble("X"), entries.getDouble("Y"), entries.getDouble("Z"),
|
||||||
entries.getDouble("Z"), entries.getFloat("Yaw"), entries.getFloat("Pitch")));
|
Float.parseFloat(entries.getString("Yaw")), Float.parseFloat(entries.getString("Pitch")))));
|
||||||
});
|
|
||||||
|
|
||||||
return future;
|
return future;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -416,7 +413,7 @@ public class CustomPlayer extends CraftPlayer {
|
||||||
ByteBuf byteBuf = Unpooled.copiedBuffer(byteOut.toByteArray());
|
ByteBuf byteBuf = Unpooled.copiedBuffer(byteOut.toByteArray());
|
||||||
PacketDataSerializer packetDataSerializer = new PacketDataSerializer(byteBuf);
|
PacketDataSerializer packetDataSerializer = new PacketDataSerializer(byteBuf);
|
||||||
PacketPlayOutCustomPayload packet = new PacketPlayOutCustomPayload("LABYMOD", packetDataSerializer);
|
PacketPlayOutCustomPayload packet = new PacketPlayOutCustomPayload("LABYMOD", packetDataSerializer);
|
||||||
getHandle().playerConnection.sendPacket(packet);
|
sendPacket(packet);
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,15 +1,17 @@
|
||||||
package eu.univento.core.api.player;
|
package eu.univento.core.api.player;
|
||||||
|
|
||||||
|
import lombok.Getter;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.json.simple.JSONArray;
|
||||||
|
import org.json.simple.JSONObject;
|
||||||
|
import org.json.simple.parser.JSONParser;
|
||||||
|
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
import java.net.URLConnection;
|
import java.net.URLConnection;
|
||||||
import java.util.Scanner;
|
import java.util.Scanner;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
|
|
||||||
import org.bukkit.Bukkit;
|
@Getter
|
||||||
import org.json.simple.JSONArray;
|
|
||||||
import org.json.simple.JSONObject;
|
|
||||||
import org.json.simple.parser.JSONParser;
|
|
||||||
|
|
||||||
class Skin {
|
class Skin {
|
||||||
private final String uuid;
|
private final String uuid;
|
||||||
private String name;
|
private String name;
|
||||||
|
@ -17,9 +19,6 @@ class Skin {
|
||||||
private String signature;
|
private String signature;
|
||||||
|
|
||||||
Skin(String uuid){this.uuid = uuid;load();}
|
Skin(String uuid){this.uuid = uuid;load();}
|
||||||
String getSkinValue(){return value;}
|
|
||||||
String getSkinName(){return name;}
|
|
||||||
String getSkinSignature(){return signature;}
|
|
||||||
|
|
||||||
private void load(){
|
private void load(){
|
||||||
try {
|
try {
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
package eu.univento.core.api.server;
|
package eu.univento.core.api.server;
|
||||||
|
|
||||||
|
import eu.univento.commons.server.ServerInfo;
|
||||||
import eu.univento.commons.server.ServerType;
|
import eu.univento.commons.server.ServerType;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -3,6 +3,7 @@ package eu.univento.core.api.server;
|
||||||
import com.google.common.io.ByteArrayDataInput;
|
import com.google.common.io.ByteArrayDataInput;
|
||||||
import com.google.common.io.ByteArrayDataOutput;
|
import com.google.common.io.ByteArrayDataOutput;
|
||||||
import com.google.common.io.ByteStreams;
|
import com.google.common.io.ByteStreams;
|
||||||
|
import eu.univento.commons.server.ServerType;
|
||||||
import eu.univento.core.Core;
|
import eu.univento.core.Core;
|
||||||
import eu.univento.core.api.player.CustomPlayer;
|
import eu.univento.core.api.player.CustomPlayer;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
@ -36,7 +37,7 @@ public class NetworkData implements PluginMessageListener{
|
||||||
public void onPluginMessageReceived(String channel, Player player, byte[] message) {
|
public void onPluginMessageReceived(String channel, Player player, byte[] message) {
|
||||||
if(!channel.equals("BungeeCord")) return;
|
if(!channel.equals("BungeeCord")) return;
|
||||||
|
|
||||||
Core.getCommons().getLoggingHandler().getCore().info("Daten incomming");
|
Core.getCommons().getLoggingHandler().log(ServerType.getServerType(), "Daten incomming");
|
||||||
|
|
||||||
ByteArrayDataInput input = ByteStreams.newDataInput(message);
|
ByteArrayDataInput input = ByteStreams.newDataInput(message);
|
||||||
String subchannel = input.readUTF();
|
String subchannel = input.readUTF();
|
||||||
|
|
|
@ -1,53 +0,0 @@
|
||||||
package eu.univento.core.api.server;
|
|
||||||
|
|
||||||
import eu.univento.commons.server.ServerType;
|
|
||||||
|
|
||||||
import java.util.regex.Pattern;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author joethei
|
|
||||||
* @version 1.0
|
|
||||||
*/
|
|
||||||
public class ServerInfo {
|
|
||||||
|
|
||||||
private final String name;
|
|
||||||
private final ServerPinger pinger;
|
|
||||||
|
|
||||||
public ServerInfo(String name) {
|
|
||||||
this.name = name;
|
|
||||||
pinger = new ServerPinger(name);
|
|
||||||
pinger.ping();
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getName() {
|
|
||||||
return name;
|
|
||||||
}
|
|
||||||
|
|
||||||
public ServerType getGame() {
|
|
||||||
String[] parts = getMotd().split(Pattern.quote(";"));
|
|
||||||
return ServerType.valueOf(parts[0]);
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getGameState() {
|
|
||||||
String[] parts = getMotd().split(Pattern.quote(";"));
|
|
||||||
return parts[1];
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isOnline() {
|
|
||||||
return pinger.isOnline();
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getOnlinePlayers() {
|
|
||||||
return pinger.getPlayerCount();
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getMaxPlayers() {
|
|
||||||
return pinger.getMaxPlayers();
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getMotd() {
|
|
||||||
//return ServerDatabase.getMotd(name);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,96 +1,28 @@
|
||||||
package eu.univento.core.api.server;
|
package eu.univento.core.api.server;
|
||||||
|
|
||||||
import eu.univento.commons.server.ServerType;
|
import eu.univento.commons.server.ServerType;
|
||||||
import eu.univento.core.Core;
|
import lombok.Getter;
|
||||||
import eu.univento.core.commands.Build;
|
import lombok.Setter;
|
||||||
import eu.univento.core.listeners.Blocks;
|
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.GameMode;
|
import org.bukkit.GameMode;
|
||||||
import org.bukkit.plugin.PluginManager;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author joethei
|
* @author joethei
|
||||||
* @version 0.1
|
* @version 1.0
|
||||||
*/
|
*/
|
||||||
|
|
||||||
public class ServerSettings {
|
public class ServerSettings {
|
||||||
|
|
||||||
private static boolean build;
|
@Getter @Setter private static boolean lobby;
|
||||||
private static boolean lobby;
|
@Getter @Setter private static boolean debug;
|
||||||
private static boolean debug;
|
@Getter @Setter private static boolean mute;
|
||||||
private static boolean mute;
|
@Getter @Setter private static boolean game;
|
||||||
private static boolean game;
|
@Getter private static ServerType serverType;
|
||||||
private static ServerType serverType;
|
@Getter @Setter private static GameMode gameMode;
|
||||||
private static GameMode gameMode;
|
@Getter @Setter private static String gameState;
|
||||||
private static String gameState;
|
@Getter @Setter private static int maxPlayers;
|
||||||
|
|
||||||
public static ServerType getServerType() {
|
|
||||||
return serverType;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void setServerType(ServerType serverType) {
|
public static void setServerType(ServerType serverType) {
|
||||||
ServerSettings.serverType = serverType;
|
ServerSettings.serverType = serverType;
|
||||||
}
|
ServerType.setServerType(serverType);
|
||||||
|
|
||||||
public static GameMode getGameMode() {
|
|
||||||
return gameMode;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void setGameMode(GameMode gameMode) {
|
|
||||||
ServerSettings.gameMode = gameMode;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean isGame() {
|
|
||||||
return game;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void setGame(boolean game) {
|
|
||||||
ServerSettings.game = game;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean isBuild() {
|
|
||||||
return build;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void setBuild(boolean build) {
|
|
||||||
ServerSettings.build = build;
|
|
||||||
Core.getCommons().getLoggingHandler().getCore().info("Build ist " + build);
|
|
||||||
if(build) {
|
|
||||||
PluginManager pm = Bukkit.getPluginManager();
|
|
||||||
new Build(Core.getInstance(), "build", "Bau Modus an/ausschalten", "b");
|
|
||||||
pm.registerEvents(new Blocks(), Core.getInstance());
|
|
||||||
Core.getCommons().getLoggingHandler().getCore().info("Build Modus aktiviert");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean isLobby() {
|
|
||||||
return lobby;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void setLobby() {
|
|
||||||
ServerSettings.lobby = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean isDebug() {
|
|
||||||
return debug;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void setDebug() {
|
|
||||||
ServerSettings.debug = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean isMute() {
|
|
||||||
return mute;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void setMute(boolean mute) {
|
|
||||||
ServerSettings.mute = mute;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static String getGameState() {
|
|
||||||
return gameState;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void setGameState(String gameState) {
|
|
||||||
ServerSettings.gameState = gameState;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -6,6 +6,7 @@
|
||||||
package eu.univento.core.api.update;
|
package eu.univento.core.api.update;
|
||||||
|
|
||||||
import eu.univento.core.Core;
|
import eu.univento.core.Core;
|
||||||
|
import eu.univento.core.api.server.ServerSettings;
|
||||||
import org.apache.commons.io.FileUtils;
|
import org.apache.commons.io.FileUtils;
|
||||||
import org.gitlab.api.GitlabAPI;
|
import org.gitlab.api.GitlabAPI;
|
||||||
import org.gitlab.api.TokenType;
|
import org.gitlab.api.TokenType;
|
||||||
|
@ -47,7 +48,7 @@ public class PluginUpdater {
|
||||||
FileUtils.deleteQuietly(zip);
|
FileUtils.deleteQuietly(zip);
|
||||||
FileUtils.deleteDirectory(output);
|
FileUtils.deleteDirectory(output);
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
Core.getCommons().getLoggingHandler().getCore().error("Failed while trying to update plugin: " + name);
|
Core.getCommons().getLoggingHandler().log(ServerSettings.getServerType(), "Failed while trying to update plugin: " + name);
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,19 +5,7 @@
|
||||||
|
|
||||||
package eu.univento.core.api.world;
|
package eu.univento.core.api.world;
|
||||||
|
|
||||||
import org.apache.commons.io.FileUtils;
|
|
||||||
import org.apache.http.HttpEntity;
|
|
||||||
import org.apache.http.client.methods.CloseableHttpResponse;
|
|
||||||
import org.apache.http.client.methods.HttpGet;
|
|
||||||
import org.apache.http.impl.client.CloseableHttpClient;
|
|
||||||
import org.apache.http.impl.client.HttpClients;
|
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
import org.bukkit.WorldCreator;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
import java.io.File;
|
|
||||||
import java.io.IOException;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author joethei
|
* @author joethei
|
||||||
|
@ -31,43 +19,9 @@ public class WorldReset {
|
||||||
this.name = name;
|
this.name = name;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//TODO: add functionality
|
||||||
public World reset() {
|
public World reset() {
|
||||||
World world = Bukkit.getWorld(name);
|
return null;
|
||||||
if(world.getName().equals("world")) return null;
|
|
||||||
for(Player player : world.getPlayers())
|
|
||||||
player.teleport(Bukkit.getWorld("world").getSpawnLocation());
|
|
||||||
|
|
||||||
Bukkit.unloadWorld(world, true);
|
|
||||||
try {
|
|
||||||
File file = new File(name);
|
|
||||||
FileUtils.deleteDirectory(file);
|
|
||||||
|
|
||||||
CloseableHttpClient httpClient = HttpClients.createDefault();
|
|
||||||
|
|
||||||
HttpGet httpGet = new HttpGet("https://download.univento.eu/world" + name);
|
|
||||||
httpGet.addHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0");
|
|
||||||
httpGet.addHeader("Referer", "https://www.google.com");
|
|
||||||
|
|
||||||
try {
|
|
||||||
CloseableHttpResponse httpResponse = httpClient.execute(httpGet);
|
|
||||||
HttpEntity fileEntity = httpResponse.getEntity();
|
|
||||||
|
|
||||||
if (fileEntity != null) {
|
|
||||||
FileUtils.copyInputStreamToFile(fileEntity.getContent(), new File(name));
|
|
||||||
}
|
|
||||||
|
|
||||||
} catch (IOException e) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
httpGet.releaseConnection();
|
|
||||||
|
|
||||||
//FileUtils.copyURLToFile(new URL(""), file);
|
|
||||||
|
|
||||||
} catch (IOException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
return Bukkit.createWorld(new WorldCreator(name));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -1,80 +0,0 @@
|
||||||
package eu.univento.core.commands;
|
|
||||||
|
|
||||||
import eu.univento.commons.player.rank.Rank;
|
|
||||||
import eu.univento.core.Core;
|
|
||||||
import eu.univento.core.api.AutoCommand;
|
|
||||||
import eu.univento.core.api.player.CustomPlayer;
|
|
||||||
import eu.univento.core.api.server.ServerSettings;
|
|
||||||
import org.bukkit.GameMode;
|
|
||||||
import org.bukkit.command.CommandSender;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
import org.bukkit.inventory.ItemStack;
|
|
||||||
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* lets player build
|
|
||||||
* @author joethei
|
|
||||||
* @version 1.0
|
|
||||||
*/
|
|
||||||
public class Build extends AutoCommand<Core>{
|
|
||||||
|
|
||||||
/**
|
|
||||||
* player who can build
|
|
||||||
*/
|
|
||||||
private static final HashMap<CustomPlayer, ItemStack[]> players = new HashMap<>();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return player that can build
|
|
||||||
*/
|
|
||||||
public static HashMap<CustomPlayer, ItemStack[]> getPlayers() {
|
|
||||||
return players;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param plugin main class
|
|
||||||
* @param command command
|
|
||||||
* @param description describes the commons
|
|
||||||
* @param aliases aliases of commons
|
|
||||||
*/
|
|
||||||
public Build(Core plugin, String command, String description, String... aliases) {
|
|
||||||
super(plugin, command, description, aliases);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean execute(CommandSender sender, String label, String[] args) {
|
|
||||||
if(sender instanceof Player) {
|
|
||||||
CustomPlayer p = CustomPlayer.getPlayer(sender.getName());
|
|
||||||
//Messages msgs = new Messages(p);
|
|
||||||
if(p.getDatabasePlayer().isAllowed(Rank.Builder)) {
|
|
||||||
if(players.containsKey(p)) {
|
|
||||||
//p.sendMessage(msgs.PREFIX() + msgs.Core_BUILD_OFF());
|
|
||||||
|
|
||||||
ItemStack[] content = players.get(p);
|
|
||||||
p.getInventory().setContents(content);
|
|
||||||
players.remove(p);
|
|
||||||
p.setGameMode(ServerSettings.getGameMode());
|
|
||||||
}else {
|
|
||||||
players.put(p, p.getInventory().getContents());
|
|
||||||
//p.sendMessage(msgs.PREFIX() + msgs.Core_BUILD_ON());
|
|
||||||
p.getInventory().clear();
|
|
||||||
p.setGameMode(GameMode.CREATIVE);
|
|
||||||
}
|
|
||||||
}else {
|
|
||||||
//sender.sendMessage(msgs.NO_PERMS());
|
|
||||||
}
|
|
||||||
}else {
|
|
||||||
//sender.sendMessage(Messages.Console.NOT_A_PLAYER);
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<String> tabComplete(CommandSender sender, String label, String[] args) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
|
@ -0,0 +1,74 @@
|
||||||
|
package eu.univento.core.commands;
|
||||||
|
|
||||||
|
import eu.univento.commons.player.rank.Rank;
|
||||||
|
import eu.univento.core.api.command.Command;
|
||||||
|
import eu.univento.core.api.command.CommandArgs;
|
||||||
|
import eu.univento.core.api.command.Completer;
|
||||||
|
import eu.univento.core.api.player.CustomPlayer;
|
||||||
|
import eu.univento.core.api.server.ServerSettings;
|
||||||
|
import lombok.Getter;
|
||||||
|
import org.bukkit.GameMode;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author joethei
|
||||||
|
* @version 1.0
|
||||||
|
*/
|
||||||
|
public class BuilderCommands {
|
||||||
|
|
||||||
|
@Getter private static HashMap<CustomPlayer, ItemStack[]> buildPlayers = new HashMap<>();
|
||||||
|
|
||||||
|
@Command(name = "build", description = "set yourself into build mode", rank = Rank.JrBuilder, inGameOnly = true)
|
||||||
|
public void build(CommandArgs args) {
|
||||||
|
if(buildPlayers.containsKey(args.getPlayer())) {
|
||||||
|
args.getPlayer().getInventory().setContents(buildPlayers.get(args.getPlayer()));
|
||||||
|
buildPlayers.remove(args.getPlayer());
|
||||||
|
args.getPlayer().setGameMode(ServerSettings.getGameMode());
|
||||||
|
}else {
|
||||||
|
buildPlayers.put(args.getPlayer(), args.getPlayer().getInventory().getContents());
|
||||||
|
args.getPlayer().getInventory().clear();
|
||||||
|
args.getPlayer().setGameMode(GameMode.CREATIVE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Command(name = "gamemode", aliases = {"gm"}, description = "change your gamemode", rank = Rank.Builder, inGameOnly = true)
|
||||||
|
public void gamemode(CommandArgs args) {
|
||||||
|
if(args.length() == 1) {
|
||||||
|
args.getPlayer().setGameMode(getModeFromString(args.getArg(0)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Completer(name = "gamemode", aliases = {"gm"})
|
||||||
|
public List<String> gameModeCompletor(CommandArgs args) {
|
||||||
|
List<String> list = new ArrayList<>();
|
||||||
|
|
||||||
|
list.add("0");
|
||||||
|
list.add("1");
|
||||||
|
list.add("2");
|
||||||
|
list.add("3");
|
||||||
|
list.add("Survival");
|
||||||
|
list.add("Creative");
|
||||||
|
list.add("Adventure");
|
||||||
|
list.add("Spectator");
|
||||||
|
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
|
||||||
|
private GameMode getModeFromString(String string) {
|
||||||
|
switch(string) {
|
||||||
|
case "0" : return GameMode.SURVIVAL;
|
||||||
|
case "1" : return GameMode.CREATIVE;
|
||||||
|
case "2": return GameMode.ADVENTURE;
|
||||||
|
case "3" : return GameMode.SPECTATOR;
|
||||||
|
case "Survial" : return GameMode.SURVIVAL;
|
||||||
|
case "Creative" : return GameMode.CREATIVE;
|
||||||
|
case "Adventure" : return GameMode.ADVENTURE;
|
||||||
|
case "Spectator" : return GameMode.SPECTATOR;
|
||||||
|
default: return GameMode.SPECTATOR;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,51 +0,0 @@
|
||||||
package eu.univento.core.commands;
|
|
||||||
|
|
||||||
import eu.univento.commons.player.rank.Rank;
|
|
||||||
import eu.univento.core.Core;
|
|
||||||
import eu.univento.core.api.AutoCommand;
|
|
||||||
import eu.univento.core.api.player.CustomPlayer;
|
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.command.CommandSender;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author joethei
|
|
||||||
* @version 1.0
|
|
||||||
*/
|
|
||||||
public class ChatClear extends AutoCommand<Core> {
|
|
||||||
|
|
||||||
public ChatClear(Core plugin, String command, String description, String... aliases) {
|
|
||||||
super(plugin, command, description, aliases);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean execute(CommandSender sender, String label, String[] args) {
|
|
||||||
if(sender instanceof Player) {
|
|
||||||
CustomPlayer p = CustomPlayer.getPlayer(sender.getName());
|
|
||||||
if(p.getDatabasePlayer().isAllowed(Rank.Supporter)) {
|
|
||||||
for(int i = 0; i <= 100; i++) {
|
|
||||||
Bukkit.broadcastMessage(" ");
|
|
||||||
}
|
|
||||||
for(Player players : Bukkit.getOnlinePlayers()) {
|
|
||||||
CustomPlayer player = CustomPlayer.getPlayer(players);
|
|
||||||
if (player.getDatabasePlayer().isAllowed(Rank.Supporter)) {
|
|
||||||
//Messages messages = new Messages(player);
|
|
||||||
//player.sendMessage(messages.Core_CHAT_CLEARED(p));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}else {
|
|
||||||
//p.sendMessage(msgs.NO_PERMS());
|
|
||||||
}
|
|
||||||
}else {
|
|
||||||
//sender.sendMessage(Messages.Console.NOT_A_PLAYER);
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<String> tabComplete(CommandSender sender, String label, String[] args) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -0,0 +1,100 @@
|
||||||
|
package eu.univento.core.commands;
|
||||||
|
|
||||||
|
import eu.univento.commons.player.rank.Rank;
|
||||||
|
import eu.univento.core.Core;
|
||||||
|
import eu.univento.core.api.command.Command;
|
||||||
|
import eu.univento.core.api.command.CommandArgs;
|
||||||
|
import eu.univento.core.api.command.Completer;
|
||||||
|
import eu.univento.core.api.player.CustomPlayer;
|
||||||
|
import eu.univento.core.api.server.ServerSettings;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.GameMode;
|
||||||
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.craftbukkit.v1_11_R1.entity.CraftEntity;
|
||||||
|
import org.bukkit.entity.ArmorStand;
|
||||||
|
import org.bukkit.scheduler.BukkitRunnable;
|
||||||
|
|
||||||
|
import java.net.InetAddress;
|
||||||
|
import java.net.UnknownHostException;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author joethei
|
||||||
|
* @version 1.0
|
||||||
|
*/
|
||||||
|
public class DevCommands {
|
||||||
|
|
||||||
|
private ArrayList<CustomPlayer> trolledPlayers = new ArrayList<>();
|
||||||
|
|
||||||
|
@Command(name = "runas", description = "run commands as other players", usage = "runas", rank = Rank.SrDeveloper, inGameOnly = true)
|
||||||
|
public void runAs(CommandArgs args) {
|
||||||
|
if (args.length() >= 2) {
|
||||||
|
CustomPlayer t = CustomPlayer.getPlayer(args.getArg(0));
|
||||||
|
if (t != null) {
|
||||||
|
StringBuilder msg = new StringBuilder();
|
||||||
|
for (int i = 1; i < args.length(); i++) {
|
||||||
|
msg.append(args.getArg(i)).append(" ");
|
||||||
|
}
|
||||||
|
t.chat(msg.toString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Completer(name = "runas")
|
||||||
|
public List<String> runAsCompleter(CommandArgs args) {
|
||||||
|
return Core.getOnlinePlayers().stream().map(CustomPlayer::getDisplayName).collect(Collectors.toList());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Command(name = "systeminfo", description = "some infos about the system", usage = "/systeminfo", rank = Rank.JrDeveloper, inGameOnly = true)
|
||||||
|
public void systemInfo(CommandArgs args) {
|
||||||
|
CustomPlayer p = args.getPlayer();
|
||||||
|
Runtime run = Runtime.getRuntime();
|
||||||
|
p.sendMessage("§6§l===SystemInfo <" + Bukkit.getServerName() + ">===");
|
||||||
|
try {
|
||||||
|
p.sendMessage("§6Server: " + InetAddress.getLocalHost().getHostName());
|
||||||
|
} catch (UnknownHostException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
p.sendMessage("§6TPS: " + Bukkit.getTPS()[0]);
|
||||||
|
p.sendMessage("§6Spigot version: " + Bukkit.getVersion());
|
||||||
|
p.sendMessage("§6Java version: " + System.getProperty("java.version"));
|
||||||
|
p.sendMessage("§6used memory: " + (run.totalMemory() - run.freeMemory() / 1048576L) + " MB");
|
||||||
|
p.sendMessage("§6free memory: " + run.freeMemory() / 1048576L + " MB");
|
||||||
|
p.sendMessage("§6total memory: " + run.maxMemory() / 1048576L + " MB");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Command(name = "troll", description = "troll other players", usage = "/troll <Troll to execute> <player>", rank = Rank.SrDeveloper, inGameOnly = true)
|
||||||
|
public void troll(CommandArgs args) {
|
||||||
|
args.getPlayer().sendMessage("§eavailable trolls: flip");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Command(name = "troll.flip", description = "flip other players around", usage = "/troll flip <player>", rank = Rank.SrDeveloper, inGameOnly = true)
|
||||||
|
public void trollFlip(CommandArgs args) {
|
||||||
|
if (args.length() == 3) {
|
||||||
|
CustomPlayer t = CustomPlayer.getPlayer(args.getArg(2));
|
||||||
|
if (t != null && t != args.getPlayer()) {
|
||||||
|
if(trolledPlayers.contains(t)) {
|
||||||
|
t.getSpectatorTarget().remove();
|
||||||
|
t.setGameMode(ServerSettings.getGameMode());
|
||||||
|
trolledPlayers.remove(t);
|
||||||
|
}else {
|
||||||
|
trolledPlayers.add(t);
|
||||||
|
ArmorStand armorStand = t.getWorld().spawn(t.getLocation(), ArmorStand.class);
|
||||||
|
Location armorStandLocation = armorStand.getLocation();
|
||||||
|
t.setGameMode(GameMode.SPECTATOR);
|
||||||
|
t.setSpectatorTarget(armorStand);
|
||||||
|
new BukkitRunnable() {
|
||||||
|
public void run() {
|
||||||
|
armorStandLocation.setPitch(armorStandLocation.getPitch() + 0.5F);
|
||||||
|
armorStandLocation.setYaw(armorStandLocation.getYaw() - 0.5F);
|
||||||
|
((CraftEntity) armorStand).getHandle().setPositionRotation(armorStandLocation.getX(), armorStandLocation.getY(), armorStandLocation.getZ(), armorStandLocation.getYaw(), armorStandLocation.getPitch());
|
||||||
|
}
|
||||||
|
}.runTaskTimer(Core.getInstance(), 0, 5);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,70 +0,0 @@
|
||||||
package eu.univento.core.commands;
|
|
||||||
|
|
||||||
import eu.univento.core.Core;
|
|
||||||
import eu.univento.core.api.AutoCommand;
|
|
||||||
import eu.univento.core.api.player.CustomPlayer;
|
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.command.CommandSender;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.stream.Collectors;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* fixes players
|
|
||||||
* @author joethei
|
|
||||||
* @version 1.0
|
|
||||||
*/
|
|
||||||
public class Fix extends AutoCommand<Core>{
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param plugin main class
|
|
||||||
* @param command commons to execute
|
|
||||||
* @param description describes the commons
|
|
||||||
* @param aliases aliases of commons
|
|
||||||
*/
|
|
||||||
public Fix(Core plugin, String command, String description, String... aliases) {
|
|
||||||
super(plugin, command, description, aliases);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean execute(CommandSender sender, String label, String[] args) {
|
|
||||||
if(sender instanceof Player) {
|
|
||||||
CustomPlayer p = CustomPlayer.getPlayer(sender.getName());
|
|
||||||
//Messages msgs = new Messages(p);
|
|
||||||
if(args.length == 0) {
|
|
||||||
for(Player player : Bukkit.getOnlinePlayers()) {
|
|
||||||
player.hidePlayer(p);
|
|
||||||
player.showPlayer(p);
|
|
||||||
}
|
|
||||||
p.teleport(p.getLocation());
|
|
||||||
//p.sendMessage(msgs.PREFIX() + msgs.Core_FIX_OWN());
|
|
||||||
}
|
|
||||||
if(args.length == 1) {
|
|
||||||
if(Bukkit.getPlayer(args[0]) != null) {
|
|
||||||
CustomPlayer t = CustomPlayer.getPlayer(Bukkit.getPlayer(args[0]).getName());
|
|
||||||
//Messages tMsgs = new Messages(t);
|
|
||||||
if(t != p) {
|
|
||||||
p.hidePlayer(t);
|
|
||||||
p.showPlayer(t);
|
|
||||||
p.teleport(p.getLocation());
|
|
||||||
//p.sendMessage(msgs.Core_FIX_OTHER(t));
|
|
||||||
//t.sendMessage(tMsgs.Core_FIX_BY_OTHER(p));
|
|
||||||
}else {
|
|
||||||
p.chat("/fix");
|
|
||||||
}
|
|
||||||
}else {
|
|
||||||
//p.sendMessage(msgs.NOT_ONLINE(args[0]));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}else {
|
|
||||||
//sender.sendMessage(Messages.Console.NOT_A_PLAYER);
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<String> tabComplete(CommandSender sender, String label, String[] args) {
|
|
||||||
return Core.getOnlinePlayers().stream().map(CustomPlayer::getDisplayName).collect(Collectors.toList());
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,86 +0,0 @@
|
||||||
package eu.univento.core.commands;
|
|
||||||
|
|
||||||
import eu.univento.commons.player.rank.Rank;
|
|
||||||
import eu.univento.core.Core;
|
|
||||||
import eu.univento.core.api.AutoCommand;
|
|
||||||
import eu.univento.core.api.player.CustomPlayer;
|
|
||||||
import org.bukkit.command.CommandSender;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* changes game modes
|
|
||||||
* @author joethei
|
|
||||||
* @version 1.0
|
|
||||||
*/
|
|
||||||
public class GameMode extends AutoCommand<Core>{
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param plugin main class
|
|
||||||
* @param description command description
|
|
||||||
* @param command commons to execute
|
|
||||||
* @param aliases aliases of commons
|
|
||||||
*/
|
|
||||||
public GameMode(Core plugin, String command, String description, String... aliases) {
|
|
||||||
super(plugin, command, description, aliases);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean execute(CommandSender sender, String label, String[] args) {
|
|
||||||
if(sender instanceof Player) {
|
|
||||||
CustomPlayer p = CustomPlayer.getPlayer(sender.getName());
|
|
||||||
//Messages msgs = new Messages(p);
|
|
||||||
if(p.getDatabasePlayer().isAllowed(Rank.Builder)) {
|
|
||||||
if(args.length == 1) {
|
|
||||||
String mode = args[0];
|
|
||||||
p.setGameMode(getModeFromString(mode));
|
|
||||||
//p.sendMessage(msgs.Core_GM_CHANGED() + " auf " + p.getGameMode().name());
|
|
||||||
}if(args.length == 0){
|
|
||||||
//p.sendMessage(msgs.Core_GM_USAGE());
|
|
||||||
}
|
|
||||||
}else {
|
|
||||||
//p.sendMessage(msgs.NO_PERMS());
|
|
||||||
}
|
|
||||||
}else {
|
|
||||||
//sender.sendMessage(Messages.Console.NOT_A_PLAYER);
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<String> tabComplete(CommandSender sender, String label, String[] args) {
|
|
||||||
List<String> list = new ArrayList<>();
|
|
||||||
|
|
||||||
list.add("0");
|
|
||||||
list.add("1");
|
|
||||||
list.add("2");
|
|
||||||
list.add("3");
|
|
||||||
list.add("Survival");
|
|
||||||
list.add("Creative");
|
|
||||||
list.add("Adventure");
|
|
||||||
list.add("Spectator");
|
|
||||||
|
|
||||||
return list;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param string Mode
|
|
||||||
* @return GameMode
|
|
||||||
*/
|
|
||||||
private org.bukkit.GameMode getModeFromString(String string) {
|
|
||||||
switch(string) {
|
|
||||||
case "0" : return org.bukkit.GameMode.SURVIVAL;
|
|
||||||
case "1" : return org.bukkit.GameMode.CREATIVE;
|
|
||||||
case "2": return org.bukkit.GameMode.ADVENTURE;
|
|
||||||
case "3" : return org.bukkit.GameMode.SPECTATOR;
|
|
||||||
case "Survial" : return org.bukkit.GameMode.SURVIVAL;
|
|
||||||
case "Creative" : return org.bukkit.GameMode.CREATIVE;
|
|
||||||
case "Adventure" : return org.bukkit.GameMode.ADVENTURE;
|
|
||||||
case "Spectator" : return org.bukkit.GameMode.SPECTATOR;
|
|
||||||
default: return org.bukkit.GameMode.SPECTATOR;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,57 +0,0 @@
|
||||||
package eu.univento.core.commands;
|
|
||||||
|
|
||||||
import eu.univento.commons.player.rank.Rank;
|
|
||||||
import eu.univento.core.Core;
|
|
||||||
import eu.univento.core.api.AutoCommand;
|
|
||||||
import eu.univento.core.api.player.CustomPlayer;
|
|
||||||
import eu.univento.core.api.server.ServerSettings;
|
|
||||||
import org.bukkit.command.CommandSender;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* mutes the whole server
|
|
||||||
* @author joethei
|
|
||||||
* @version 1.0
|
|
||||||
*/
|
|
||||||
public class GlobalMute extends AutoCommand<Core>{
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param plugin main class
|
|
||||||
* @param command commons to execute
|
|
||||||
* @param description describes the commons
|
|
||||||
* @param aliases aliases of commons
|
|
||||||
*/
|
|
||||||
public GlobalMute(Core plugin, String command, String description, String... aliases) {
|
|
||||||
super(plugin, command, description, aliases);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean execute(CommandSender sender, String label, String[] args) {
|
|
||||||
if(sender instanceof Player) {
|
|
||||||
CustomPlayer p = CustomPlayer.getPlayer(sender.getName());
|
|
||||||
//Messages msgs = new Messages(p);
|
|
||||||
if(p.getDatabasePlayer().isAllowed(Rank.Supporter)) {
|
|
||||||
if(ServerSettings.isMute()) {
|
|
||||||
ServerSettings.setMute(false);
|
|
||||||
//p.sendMessage(msgs.Core_GLOBALMUTE_OFF());
|
|
||||||
}else {
|
|
||||||
ServerSettings.setMute(true);
|
|
||||||
//p.sendMessage(msgs.Core_GLOBALMUTE_ON());
|
|
||||||
}
|
|
||||||
}else {
|
|
||||||
//p.sendMessage(msgs.NO_PERMS());
|
|
||||||
}
|
|
||||||
}else {
|
|
||||||
//sender.sendMessage(Messages.Console.NOT_A_PLAYER);
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<String> tabComplete(CommandSender sender, String label, String[] args) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,76 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright (c) 2017 univento.eu - All rights reserved
|
|
||||||
* You are not allowed to use, distribute or modify this code
|
|
||||||
*/
|
|
||||||
|
|
||||||
package eu.univento.core.commands;
|
|
||||||
|
|
||||||
import eu.univento.commons.player.language.MessageConstant;
|
|
||||||
import eu.univento.commons.player.rank.Rank;
|
|
||||||
import eu.univento.commons.utils.Strings;
|
|
||||||
import eu.univento.core.Core;
|
|
||||||
import eu.univento.core.api.AutoCommand;
|
|
||||||
import eu.univento.core.api.hologram.HologramManager;
|
|
||||||
import eu.univento.core.api.player.CustomPlayer;
|
|
||||||
import org.bukkit.command.CommandSender;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author joethei
|
|
||||||
* @version 0.1
|
|
||||||
*/
|
|
||||||
public class Hologram extends AutoCommand<Core> {
|
|
||||||
|
|
||||||
public Hologram(Core plugin, String command, String description, String... aliases) {
|
|
||||||
super(plugin, command, description, aliases);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean execute(CommandSender sender, String label, String[] args) {
|
|
||||||
if(sender instanceof Player) {
|
|
||||||
CustomPlayer p = CustomPlayer.getPlayer(((Player) sender));
|
|
||||||
if (p.getDatabasePlayer().isAllowed(Rank.JrBuilder)) {
|
|
||||||
if (args.length == 0) {
|
|
||||||
p.sendMessage("/hologram add <Name> <Nachricht>");
|
|
||||||
p.sendMessage("/hologram remove <Name>");
|
|
||||||
p.sendMessage("/hologram list");
|
|
||||||
}
|
|
||||||
if (args.length == 1) {
|
|
||||||
if (args[0].equalsIgnoreCase("list")) {
|
|
||||||
HologramManager.getHolograms().forEach((s, hologram) -> p.sendMessage("§6" + s + hologram.getLocation().toString()));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (args.length == 2) {
|
|
||||||
if (args[0].equalsIgnoreCase("remove")) {
|
|
||||||
if (HologramManager.getHologram(args[1]) != null) {
|
|
||||||
HologramManager.getHologram(args[1]).destroy();
|
|
||||||
} else p.sendMessage("Dieses Hologram gibt es nicht");
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (args[0].equalsIgnoreCase("add")) {
|
|
||||||
if (HologramManager.getHologram(args[1]) != null) {
|
|
||||||
p.sendMessage("Dieses Hologram gibt es schon");
|
|
||||||
} else {
|
|
||||||
String name = args[1];
|
|
||||||
args = Strings.remove(args, "add");
|
|
||||||
args = Strings.remove(args, name);
|
|
||||||
new eu.univento.core.api.hologram.Hologram(name, args, p.getLocation());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
p.getDatabasePlayer().getLanguage().getMessage(MessageConstant.COMMAND_NO_PERMS);
|
|
||||||
}/*
|
|
||||||
}else sender.sendMessage(Messages.Console.NOT_A_PLAYER);
|
|
||||||
*/
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<String> tabComplete(CommandSender sender, String label, String[] args) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -0,0 +1,51 @@
|
||||||
|
package eu.univento.core.commands;
|
||||||
|
|
||||||
|
import eu.univento.commons.player.rank.Rank;
|
||||||
|
import eu.univento.commons.utils.Strings;
|
||||||
|
import eu.univento.core.api.command.Command;
|
||||||
|
import eu.univento.core.api.command.CommandArgs;
|
||||||
|
import eu.univento.core.api.hologram.HologramManager;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author joethei
|
||||||
|
* @version 1.0
|
||||||
|
*/
|
||||||
|
public class HologramCommands {
|
||||||
|
|
||||||
|
@Command(name = "hologram", description = "create awesome holograms", rank = Rank.Builder, inGameOnly = true)
|
||||||
|
public void hologram(CommandArgs args) {
|
||||||
|
if(args.length() == 0) {
|
||||||
|
args.getPlayer().sendMessage("/hologram add <Name> <Nachricht>");
|
||||||
|
args.getPlayer().sendMessage("/hologram remove <Name>");
|
||||||
|
args.getPlayer().sendMessage("/hologram list");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Command(name = "hologram.list", description = "lists holograms", rank = Rank.Builder, inGameOnly = true)
|
||||||
|
public void hologramList(CommandArgs args) {
|
||||||
|
HologramManager.getHolograms().forEach((s, hologram) -> args.getPlayer().sendMessage("§6" + s +" | " + hologram.getLocation().toString()));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Command(name = "hologram.add", description = "add holograms", rank = Rank.Builder, inGameOnly = true)
|
||||||
|
public void hologramAdd(CommandArgs args) {
|
||||||
|
if(args.length() > 2) {
|
||||||
|
if (HologramManager.getHologram(args.getArg(1)) != null) {
|
||||||
|
args.getPlayer().sendMessage("§cDieses Hologram gibt es schon");
|
||||||
|
} else {
|
||||||
|
String name = args.getArg(1);
|
||||||
|
String[] text = Strings.remove(args.getArgs(), "add");
|
||||||
|
text = Strings.remove(text, name);
|
||||||
|
new eu.univento.core.api.hologram.Hologram(name, text, args.getPlayer().getLocation()).showAll();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Command(name = "hologram.remove", description = "remove holograms", rank = Rank.Builder, inGameOnly = true)
|
||||||
|
public void hologramRemove(CommandArgs args) {
|
||||||
|
if(args.length() == 2) {
|
||||||
|
if (HologramManager.getHologram(args.getArg(1)) != null) {
|
||||||
|
HologramManager.getHologram(args.getArg(1)).destroy();
|
||||||
|
} else args.getPlayer().sendMessage("§cDieses Hologram gibt es nicht");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,46 @@
|
||||||
|
package eu.univento.core.commands;
|
||||||
|
|
||||||
|
import eu.univento.commons.player.rank.Rank;
|
||||||
|
import eu.univento.core.Core;
|
||||||
|
import eu.univento.core.api.command.Command;
|
||||||
|
import eu.univento.core.api.command.CommandArgs;
|
||||||
|
import eu.univento.core.api.player.CustomPlayer;
|
||||||
|
import eu.univento.core.api.server.ServerSettings;
|
||||||
|
import lombok.Getter;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author joethei
|
||||||
|
* @version 1.0
|
||||||
|
*/
|
||||||
|
public class ModCommands {
|
||||||
|
|
||||||
|
@Getter private static ArrayList<CustomPlayer> vanishedPlayers = new ArrayList<>();
|
||||||
|
|
||||||
|
@Command(name="chatclear", aliases = {"cc"}, description = "clears the chat", usage = "/clearchat", rank = Rank.JrModerator, inGameOnly = true)
|
||||||
|
public void chatClear(CommandArgs args) {
|
||||||
|
for(CustomPlayer player : Core.getOnlinePlayers()) {
|
||||||
|
if(!player.getDatabasePlayer().isAllowed(Rank.JrSupporter)) {
|
||||||
|
for(int i = 0; i <= 100; i++) player.sendMessage("");
|
||||||
|
}else player.sendMessage("§cDer Chat wurde von " + args.getPlayer().getDatabasePlayer().getRank().getColor() + args.getPlayer().getName() + " §cgeleert");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Command(name="vanish", aliases={"v"}, description = "hide yourself", usage = "/vanish", rank = Rank.JrModerator, inGameOnly = true)
|
||||||
|
public void vanish(CommandArgs args) {
|
||||||
|
if(vanishedPlayers.contains(args.getPlayer())) {
|
||||||
|
for(CustomPlayer player : Core.getOnlinePlayers()) player.showPlayer(args.getPlayer());
|
||||||
|
vanishedPlayers.remove(args.getPlayer());
|
||||||
|
}else {
|
||||||
|
for(CustomPlayer player : Core.getOnlinePlayers()) player.hidePlayer(args.getPlayer());
|
||||||
|
vanishedPlayers.add(args.getPlayer());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Command(name = "servermute", aliases = {"smute"}, description = "mute the entire server", usage = "/servermute", rank = Rank.SrModerator, inGameOnly = true)
|
||||||
|
public void serverMute(CommandArgs args) {
|
||||||
|
if(ServerSettings.isMute()) ServerSettings.setMute(false);
|
||||||
|
else ServerSettings.setMute(true);
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,65 +0,0 @@
|
||||||
package eu.univento.core.commands;
|
|
||||||
|
|
||||||
import eu.univento.commons.player.rank.Rank;
|
|
||||||
import eu.univento.core.Core;
|
|
||||||
import eu.univento.core.api.AutoCommand;
|
|
||||||
import eu.univento.core.api.player.CustomPlayer;
|
|
||||||
import eu.univento.core.api.player.NickName;
|
|
||||||
import org.bukkit.command.CommandSender;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* nick commons
|
|
||||||
* @author joethei
|
|
||||||
* @version 1.0
|
|
||||||
*/
|
|
||||||
public class Nick extends AutoCommand<Core>{
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param plugin main class
|
|
||||||
* @param command commons to execute
|
|
||||||
* @param description describes the commons
|
|
||||||
* @param aliases aliases of commons
|
|
||||||
*/
|
|
||||||
public Nick(Core plugin, String command, String description, String... aliases) {
|
|
||||||
super(plugin, command, description, aliases);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean execute(CommandSender sender, String label, String[] args) {
|
|
||||||
if(sender instanceof Player) {
|
|
||||||
CustomPlayer p = CustomPlayer.getPlayer(sender.getName());
|
|
||||||
//Messages msgs = new Messages(p);
|
|
||||||
if(p.getDatabasePlayer().isAllowed(Rank.VIP)) {
|
|
||||||
if(p.getDatabasePlayer().getSettings().isNicked()) {
|
|
||||||
p.getScoreboard().getTeam(p.getDatabasePlayer().getRank().getTeam()).removeEntry(p.getDisplayName());
|
|
||||||
p.getDatabasePlayer().getSettings().setNickStatus(false);
|
|
||||||
p.getScoreboard().getTeam(p.getDatabasePlayer().getRank().getTeam()).addEntry(p.getDisplayName());
|
|
||||||
//p.sendMessage(msgs.PREFIX() + msgs.Core_NICK_OFF());
|
|
||||||
p.removeNickName();
|
|
||||||
}else {
|
|
||||||
p.getScoreboard().getTeam(p.getDatabasePlayer().getRank().getTeam()).removeEntry(p.getDisplayName());
|
|
||||||
p.getDatabasePlayer().getSettings().setNickStatus(true);
|
|
||||||
p.getScoreboard().getTeam(p.getDatabasePlayer().getRank().getTeam()).addEntry(p.getDisplayName());
|
|
||||||
//p.sendMessage(msgs.PREFIX() + msgs.Core_NICK_ON());
|
|
||||||
String nick = NickName.getRandomNick();
|
|
||||||
p.setNickName(nick);
|
|
||||||
//Core.getDebugManager().sendOverlay("der Nick ist " + nick);
|
|
||||||
}
|
|
||||||
}else {
|
|
||||||
//p.sendMessage(msgs.NO_PERMS());
|
|
||||||
}
|
|
||||||
}else {
|
|
||||||
//sender.sendMessage(Messages.Console.NOT_A_PLAYER);
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<String> tabComplete(CommandSender sender, String label, String[] args) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -0,0 +1,47 @@
|
||||||
|
package eu.univento.core.commands;
|
||||||
|
|
||||||
|
import eu.univento.commons.player.language.MessageConstant;
|
||||||
|
import eu.univento.core.Core;
|
||||||
|
import eu.univento.core.api.command.Command;
|
||||||
|
import eu.univento.core.api.command.CommandArgs;
|
||||||
|
import eu.univento.core.api.command.Completer;
|
||||||
|
import eu.univento.core.api.player.CustomPlayer;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author joethei
|
||||||
|
* @version 1.0
|
||||||
|
*/
|
||||||
|
public class PlayerCommands {
|
||||||
|
|
||||||
|
@Command(name = "fix", usage = "/fix", inGameOnly = true)
|
||||||
|
public void fix(CommandArgs args) {
|
||||||
|
if(args.length() == 0) {
|
||||||
|
for(CustomPlayer player : Core.getOnlinePlayers()) {
|
||||||
|
player.hidePlayer(args.getPlayer());
|
||||||
|
player.showPlayer(args.getPlayer());
|
||||||
|
}
|
||||||
|
args.getPlayer().teleport(args.getPlayer().getLocation());
|
||||||
|
|
||||||
|
} if(args.length() == 1) {
|
||||||
|
CustomPlayer t = CustomPlayer.getPlayer(args.getArg(0));
|
||||||
|
if(t != null) {
|
||||||
|
if(t != args.getPlayer()) {
|
||||||
|
args.getPlayer().hidePlayer(t);
|
||||||
|
args.getPlayer().showPlayer(t);
|
||||||
|
t.teleport(t.getLocation());
|
||||||
|
}else args.getPlayer().chat("/fix");
|
||||||
|
|
||||||
|
}else args.getPlayer().sendMessage(args.getPlayer().getDatabasePlayer().getLanguage().getMessage(MessageConstant.COMMAND_NOT_ONLINE));
|
||||||
|
}else {
|
||||||
|
args.getPlayer().chat("/fix");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Completer(name = "fix")
|
||||||
|
public List<String> fixCompleter(CommandArgs args) {
|
||||||
|
return Core.getOnlinePlayers().stream().map(CustomPlayer::getDisplayName).collect(Collectors.toList());
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,69 +0,0 @@
|
||||||
package eu.univento.core.commands;
|
|
||||||
|
|
||||||
import eu.univento.commons.player.rank.Rank;
|
|
||||||
import eu.univento.core.Core;
|
|
||||||
import eu.univento.core.api.AutoCommand;
|
|
||||||
import eu.univento.core.api.player.CustomPlayer;
|
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.command.CommandSender;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.stream.Collectors;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* lets other player run commands
|
|
||||||
* @author joethei
|
|
||||||
* @version 1.0
|
|
||||||
*/
|
|
||||||
public class RunAs extends AutoCommand<Core>{
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param plugin main class
|
|
||||||
* @param command commons to execute
|
|
||||||
* @param description describes the commons
|
|
||||||
* @param aliases aliases of commons
|
|
||||||
*/
|
|
||||||
public RunAs(Core plugin, String command, String description, String... aliases) {
|
|
||||||
super(plugin, command, description, aliases);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean execute(CommandSender sender, String label, String[] args) {
|
|
||||||
if(sender instanceof Player) {
|
|
||||||
CustomPlayer p = CustomPlayer.getPlayer(sender.getName());
|
|
||||||
//Messages msgs = new Messages(p);
|
|
||||||
if(p.getDatabasePlayer().isAllowed(Rank.SrDeveloper)) {
|
|
||||||
if(args.length >= 2) {
|
|
||||||
CustomPlayer t = CustomPlayer.getPlayer(Bukkit.getPlayer(args[0]).getName());
|
|
||||||
if(t != null) {
|
|
||||||
StringBuilder msg = new StringBuilder();
|
|
||||||
for(int i = 1; i < args.length; i++) {
|
|
||||||
msg.append(args[i]).append(" ");
|
|
||||||
}
|
|
||||||
t.chat(msg.toString());
|
|
||||||
//p.sendMessage(msgs.Core_RUNAS_RUN(t));
|
|
||||||
return true;
|
|
||||||
}else {
|
|
||||||
//p.sendMessage(msgs.NOT_ONLINE(args[0]));
|
|
||||||
}
|
|
||||||
}else {
|
|
||||||
//p.sendMessage(msgs.Core_RUNAS_USAGE());
|
|
||||||
}
|
|
||||||
}else {
|
|
||||||
//p.sendMessage(msgs.NO_PERMS());
|
|
||||||
}
|
|
||||||
}else {
|
|
||||||
//sender.sendMessage(Messages.Console.NOT_A_PLAYER);
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<String> tabComplete(CommandSender sender, String label, String[] args) {
|
|
||||||
return Core.getOnlinePlayers().stream().map(CustomPlayer::getDisplayName).collect(Collectors.toList());
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,73 +0,0 @@
|
||||||
package eu.univento.core.commands;
|
|
||||||
|
|
||||||
import eu.univento.commons.player.rank.Rank;
|
|
||||||
import eu.univento.commons.server.TPS;
|
|
||||||
import eu.univento.core.Core;
|
|
||||||
import eu.univento.core.api.AutoCommand;
|
|
||||||
import eu.univento.core.api.player.CustomPlayer;
|
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.command.CommandSender;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
import java.net.InetAddress;
|
|
||||||
import java.net.UnknownHostException;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* prints infos about the server
|
|
||||||
* @author joethei
|
|
||||||
* @version 1.0
|
|
||||||
*/
|
|
||||||
public class SystemInfo extends AutoCommand<Core>{
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param plugin main class
|
|
||||||
* @param command commons to execute
|
|
||||||
* @param description describes the commons
|
|
||||||
* @param aliases aliases of commons
|
|
||||||
*/
|
|
||||||
|
|
||||||
public SystemInfo(Core plugin, String command, String description, String... aliases) {
|
|
||||||
super(plugin, command, description, aliases);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean execute(CommandSender sender, String label, String[] args) {
|
|
||||||
if(sender instanceof Player) {
|
|
||||||
CustomPlayer p = CustomPlayer.getPlayer(sender.getName());
|
|
||||||
//Messages msgs = new Messages(p);
|
|
||||||
if(p.getDatabasePlayer().isAllowed(Rank.Developer)) {
|
|
||||||
Runtime run = Runtime.getRuntime();
|
|
||||||
p.sendMessage("§6§l===SystemInfo <" + Bukkit.getServerName() + ">===");
|
|
||||||
try {
|
|
||||||
p.sendMessage("§6Server: " + InetAddress.getLocalHost().getHostName());
|
|
||||||
} catch (UnknownHostException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
p.sendMessage("§6TPS: " + TPS.getTPS());
|
|
||||||
p.sendMessage("§6Spigot version: " + Bukkit.getVersion());
|
|
||||||
p.sendMessage("§6Java version: " + System.getProperty("java.version"));
|
|
||||||
p.sendMessage("§6OS: " + System.getProperty("os.name"));
|
|
||||||
p.sendMessage("§6OS version: " + System.getProperty("os.version"));
|
|
||||||
p.sendMessage("§6OS architecture: " + System.getProperty("os.arch"));
|
|
||||||
p.sendMessage("§6User: " + System.getProperty("user.name"));
|
|
||||||
p.sendMessage("§6used memory: " + (run.totalMemory() - run.freeMemory() / 1048576L) + " MB");
|
|
||||||
p.sendMessage("§6free memory: " + run.freeMemory() / 1048576L + " MB");
|
|
||||||
p.sendMessage("§6total memory: " + run.maxMemory() / 1048576L + " MB");
|
|
||||||
p.sendMessage("§6avaiable cores: " + run.availableProcessors());
|
|
||||||
p.sendMessage("§6System: " + System.getenv("COMPUTERNAME"));
|
|
||||||
}else {
|
|
||||||
//p.sendMessage(msgs.NO_PERMS());
|
|
||||||
}
|
|
||||||
}else {
|
|
||||||
//sender.sendMessage(Messages.Console.NOT_A_PLAYER);
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<String> tabComplete(CommandSender sender, String label, String[] args) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,57 +0,0 @@
|
||||||
package eu.univento.core.commands;
|
|
||||||
|
|
||||||
import eu.univento.commons.player.rank.Rank;
|
|
||||||
import eu.univento.commons.player.language.MessageConstant;
|
|
||||||
import eu.univento.core.Core;
|
|
||||||
import eu.univento.core.api.AutoCommand;
|
|
||||||
import eu.univento.core.api.player.CustomPlayer;
|
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.command.CommandSender;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author joethei
|
|
||||||
* @version 0.1
|
|
||||||
*/
|
|
||||||
|
|
||||||
public class Timeout extends AutoCommand<Core> {
|
|
||||||
|
|
||||||
public Timeout(Core plugin, String command, String description, String... aliases) {
|
|
||||||
super(plugin, command, description, aliases);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean execute(CommandSender sender, String label, String[] args) {
|
|
||||||
if (sender instanceof Player) {
|
|
||||||
CustomPlayer p = CustomPlayer.getPlayer((Player) sender);
|
|
||||||
if (p.getDatabasePlayer().isAllowed(Rank.SrDeveloper)) {
|
|
||||||
if (args.length == 1) {
|
|
||||||
if (Bukkit.getPlayer(args[0]) != null) {
|
|
||||||
CustomPlayer t = CustomPlayer.getPlayer(args[0]);
|
|
||||||
if(Core.getTimeout().contains(p)) {
|
|
||||||
Core.getTimeout().remove(p);
|
|
||||||
}else{
|
|
||||||
Core.getTimeout().add(p);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
p.sendMessage(p.getDatabasePlayer().getLanguage().getMessage(MessageConstant.COMMAND_NOT_ONLINE));
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
p.sendMessage("Nicht genug Argumente");
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
p.sendMessage(p.getDatabasePlayer().getLanguage().getMessage(MessageConstant.COMMAND_NO_PERMS));
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
//sender.sendMessage(Messages.Console.NOT_A_PLAYER);
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<String> tabComplete(CommandSender sender, String label, String[] args) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -0,0 +1,26 @@
|
||||||
|
package eu.univento.core.commands;
|
||||||
|
|
||||||
|
import eu.univento.commons.player.rank.Rank;
|
||||||
|
import eu.univento.core.api.command.Command;
|
||||||
|
import eu.univento.core.api.command.CommandArgs;
|
||||||
|
import eu.univento.core.api.player.CustomPlayer;
|
||||||
|
import eu.univento.core.api.player.NickName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author joethei
|
||||||
|
* @version 1.0
|
||||||
|
*/
|
||||||
|
public class VIPCommands {
|
||||||
|
|
||||||
|
@Command(name = "nick", description = "nick yourself", usage = "/nick", rank = Rank.VIP, inGameOnly = true)
|
||||||
|
public void nick(CommandArgs args) {
|
||||||
|
CustomPlayer p = args.getPlayer();
|
||||||
|
if(p.getDatabasePlayer().getSettings().isNicked()) {
|
||||||
|
p.getDatabasePlayer().getSettings().setNickStatus(false);
|
||||||
|
p.removeNickName();
|
||||||
|
}else {
|
||||||
|
p.getDatabasePlayer().getSettings().setNickStatus(true);
|
||||||
|
p.setNickName(NickName.getRandomNick());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,77 +0,0 @@
|
||||||
package eu.univento.core.commands;
|
|
||||||
|
|
||||||
import eu.univento.commons.player.rank.Rank;
|
|
||||||
import eu.univento.core.Core;
|
|
||||||
import eu.univento.core.api.AutoCommand;
|
|
||||||
import eu.univento.core.api.player.CustomPlayer;
|
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.command.CommandSender;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* vanish players
|
|
||||||
* @author joethei
|
|
||||||
* @version 1.0
|
|
||||||
*/
|
|
||||||
|
|
||||||
public class Vanish extends AutoCommand<Core>{
|
|
||||||
|
|
||||||
/**
|
|
||||||
* contains vanished players
|
|
||||||
*/
|
|
||||||
private static final ArrayList<CustomPlayer> players = new ArrayList<>();
|
|
||||||
/**
|
|
||||||
* @return vanished players
|
|
||||||
*/
|
|
||||||
public static ArrayList<CustomPlayer> getPlayers() {
|
|
||||||
return players;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param plugin main class
|
|
||||||
* @param command commons to execute
|
|
||||||
* @param description describes the commons
|
|
||||||
* @param aliases aliases of commons
|
|
||||||
*/
|
|
||||||
public Vanish(Core plugin, String command, String description, String... aliases) {
|
|
||||||
super(plugin, command, description, aliases);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean execute(CommandSender sender, String label, String[] args) {
|
|
||||||
if(sender instanceof Player) {
|
|
||||||
CustomPlayer p = CustomPlayer.getPlayer(sender.getName());
|
|
||||||
//Messages msgs = new Messages(p);
|
|
||||||
if(p.getDatabasePlayer().isAllowed(Rank.JrSupporter)) {
|
|
||||||
if(players.contains(p)) {
|
|
||||||
for(Player players : Bukkit.getOnlinePlayers()) {
|
|
||||||
players.showPlayer(p);
|
|
||||||
}
|
|
||||||
players.remove(p);
|
|
||||||
//p.sendMessage(msgs.PREFIX() + msgs.Core_VANISH_OFF());
|
|
||||||
}else {
|
|
||||||
for(Player players : Bukkit.getOnlinePlayers()) {
|
|
||||||
players.hidePlayer(p);
|
|
||||||
}
|
|
||||||
players.add(p);
|
|
||||||
//p.sendMessage(msgs.PREFIX() + msgs.Core_VANISH_ON());
|
|
||||||
}
|
|
||||||
}else {
|
|
||||||
//p.sendMessage(msgs.NO_PERMS());
|
|
||||||
}
|
|
||||||
}else {
|
|
||||||
//sender.sendMessage(Messages.Console.NOT_A_PLAYER);
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<String> tabComplete(CommandSender sender, String label, String[] args) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,7 +1,7 @@
|
||||||
package eu.univento.core.listeners;
|
package eu.univento.core.listeners;
|
||||||
|
|
||||||
import eu.univento.core.api.player.CustomPlayer;
|
import eu.univento.core.api.player.CustomPlayer;
|
||||||
import eu.univento.core.commands.Build;
|
import eu.univento.core.commands.BuilderCommands;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.EventPriority;
|
import org.bukkit.event.EventPriority;
|
||||||
import org.bukkit.event.Listener;
|
import org.bukkit.event.Listener;
|
||||||
|
@ -24,7 +24,7 @@ public class Blocks implements Listener{
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void onBlockPlace(BlockPlaceEvent e) {
|
public void onBlockPlace(BlockPlaceEvent e) {
|
||||||
CustomPlayer p = CustomPlayer.getPlayer(e.getPlayer());
|
CustomPlayer p = CustomPlayer.getPlayer(e.getPlayer());
|
||||||
if(!Build.getPlayers().containsKey(p))
|
if(!BuilderCommands.getBuildPlayers().containsKey(p))
|
||||||
e.setCancelled(true);
|
e.setCancelled(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -35,7 +35,7 @@ public class Blocks implements Listener{
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void onBlockBreak(BlockBreakEvent e) {
|
public void onBlockBreak(BlockBreakEvent e) {
|
||||||
CustomPlayer p = CustomPlayer.getPlayer(e.getPlayer());
|
CustomPlayer p = CustomPlayer.getPlayer(e.getPlayer());
|
||||||
if(!Build.getPlayers().containsKey(p))
|
if(!BuilderCommands.getBuildPlayers().containsKey(p))
|
||||||
e.setCancelled(true);
|
e.setCancelled(true);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,24 +3,16 @@ package eu.univento.core.listeners;
|
||||||
import eu.univento.commons.player.rank.Rank;
|
import eu.univento.commons.player.rank.Rank;
|
||||||
import eu.univento.commons.player.warn.WarnReason;
|
import eu.univento.commons.player.warn.WarnReason;
|
||||||
import eu.univento.core.Core;
|
import eu.univento.core.Core;
|
||||||
import eu.univento.core.api.blocks.MiniBlock;
|
|
||||||
import eu.univento.core.api.customitems.swords.BestSwordEver;
|
|
||||||
import eu.univento.core.api.player.CustomPlayer;
|
import eu.univento.core.api.player.CustomPlayer;
|
||||||
import eu.univento.core.api.server.ServerSettings;
|
import eu.univento.core.api.server.ServerSettings;
|
||||||
import eu.univento.core.api.shop.ShopItem;
|
|
||||||
import eu.univento.core.api.shop.ShopMenu;
|
|
||||||
import eu.univento.core.api.shop.entity.ShopVillager;
|
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
import org.bukkit.Material;
|
|
||||||
import org.bukkit.Sound;
|
import org.bukkit.Sound;
|
||||||
import org.bukkit.entity.Villager;
|
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.Listener;
|
import org.bukkit.event.Listener;
|
||||||
import org.bukkit.event.player.AsyncPlayerChatEvent;
|
import org.bukkit.event.player.AsyncPlayerChatEvent;
|
||||||
import org.bukkit.event.player.PlayerJoinEvent;
|
import org.bukkit.event.player.PlayerJoinEvent;
|
||||||
import org.bukkit.event.player.PlayerMoveEvent;
|
import org.bukkit.event.player.PlayerMoveEvent;
|
||||||
import org.bukkit.event.player.PlayerQuitEvent;
|
import org.bukkit.event.player.PlayerQuitEvent;
|
||||||
import org.bukkit.inventory.ItemStack;
|
|
||||||
|
|
||||||
import java.util.LinkedHashMap;
|
import java.util.LinkedHashMap;
|
||||||
import java.util.LinkedList;
|
import java.util.LinkedList;
|
||||||
|
@ -44,23 +36,10 @@ public class Chat implements Listener {
|
||||||
public void onChat(AsyncPlayerChatEvent e) {
|
public void onChat(AsyncPlayerChatEvent e) {
|
||||||
CustomPlayer p = CustomPlayer.getPlayer(e.getPlayer().getName());
|
CustomPlayer p = CustomPlayer.getPlayer(e.getPlayer().getName());
|
||||||
String message = e.getMessage();
|
String message = e.getMessage();
|
||||||
|
|
||||||
if (p.getDatabasePlayer().isMuted()) {
|
if (p.getDatabasePlayer().isMuted()) {
|
||||||
e.setCancelled(true);
|
e.setCancelled(true);
|
||||||
}
|
}
|
||||||
//TODO: remove this, used for debugging
|
|
||||||
if (message.equalsIgnoreCase("bestswordever")) {
|
|
||||||
new BestSwordEver(p).addItem();
|
|
||||||
}
|
|
||||||
if (message.equalsIgnoreCase("shopvillager")) {
|
|
||||||
ShopMenu menu = new ShopMenu(Core.getInstance(), "Shop Villager", ShopItem.TestItem);
|
|
||||||
new ShopVillager(Core.getInstance(), "Shop Villager", p.getLocation(), Villager.Profession.LIBRARIAN, menu);
|
|
||||||
}
|
|
||||||
if (message.equalsIgnoreCase("miniblock")) {
|
|
||||||
new MiniBlock(p.getLocation(), new ItemStack(Material.GRASS), 1);
|
|
||||||
new MiniBlock(p.getEyeLocation(), new ItemStack(Material.DIAMOND_SWORD), 2);
|
|
||||||
new MiniBlock(p.getWorld().getSpawnLocation(), new ItemStack(Material.WOOL), 3);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ServerSettings.isMute()) {
|
if (ServerSettings.isMute()) {
|
||||||
if (!p.getDatabasePlayer().isAllowed(Rank.Sound)) {
|
if (!p.getDatabasePlayer().isAllowed(Rank.Sound)) {
|
||||||
e.setCancelled(true);
|
e.setCancelled(true);
|
||||||
|
|
|
@ -3,21 +3,23 @@ package eu.univento.core.listeners;
|
||||||
import eu.univento.core.api.player.CustomPlayer;
|
import eu.univento.core.api.player.CustomPlayer;
|
||||||
import eu.univento.core.api.player.SpectateManager;
|
import eu.univento.core.api.player.SpectateManager;
|
||||||
import eu.univento.core.api.server.ServerSettings;
|
import eu.univento.core.api.server.ServerSettings;
|
||||||
import eu.univento.core.commands.Vanish;
|
import eu.univento.core.commands.ModCommands;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.entity.Entity;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.entity.ExperienceOrb;
|
import org.bukkit.block.Block;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.block.BlockFace;
|
||||||
import org.bukkit.entity.Tameable;
|
import org.bukkit.entity.*;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.Listener;
|
import org.bukkit.event.Listener;
|
||||||
import org.bukkit.event.entity.EntityTargetEvent;
|
import org.bukkit.event.entity.EntityTargetEvent;
|
||||||
import org.bukkit.event.inventory.InventoryCloseEvent;
|
import org.bukkit.event.inventory.InventoryCloseEvent;
|
||||||
import org.bukkit.event.player.PlayerMoveEvent;
|
import org.bukkit.event.player.*;
|
||||||
import org.bukkit.event.player.PlayerTeleportEvent;
|
|
||||||
import org.bukkit.event.server.ServerListPingEvent;
|
import org.bukkit.event.server.ServerListPingEvent;
|
||||||
|
import org.bukkit.material.Stairs;
|
||||||
import org.bukkit.util.Vector;
|
import org.bukkit.util.Vector;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* some basic events
|
* some basic events
|
||||||
*
|
*
|
||||||
|
@ -27,6 +29,9 @@ import org.bukkit.util.Vector;
|
||||||
|
|
||||||
public class Events implements Listener {
|
public class Events implements Listener {
|
||||||
|
|
||||||
|
private HashMap<CustomPlayer, Location> seats = new HashMap<>();
|
||||||
|
private HashMap<CustomPlayer, ArmorStand> seatEntities = new HashMap<>();
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void onServerListPing(ServerListPingEvent e) {
|
public void onServerListPing(ServerListPingEvent e) {
|
||||||
e.setMotd(ServerSettings.getServerType().name() + ";" + (ServerSettings.isGame() ? ServerSettings.getGameState() : ""));
|
e.setMotd(ServerSettings.getServerType().name() + ";" + (ServerSettings.isGame() ? ServerSettings.getGameState() : ""));
|
||||||
|
@ -38,14 +43,54 @@ public class Events implements Listener {
|
||||||
p.setOpenInventory(false);
|
p.setOpenInventory(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
public void onPlayerInteract(PlayerInteractEvent e) {
|
||||||
|
CustomPlayer p = CustomPlayer.getPlayer(e.getPlayer());
|
||||||
|
if(e.getClickedBlock() == null) return;
|
||||||
|
if(e.getClickedBlock().getRelative(BlockFace.DOWN).getType() != Material.ANVIL) return;
|
||||||
|
if(e.getClickedBlock().getState().getData() instanceof Stairs) {
|
||||||
|
loadSeat(p, e.getClickedBlock());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void onMove(PlayerMoveEvent e) {
|
public void onMove(PlayerMoveEvent e) {
|
||||||
CustomPlayer p = CustomPlayer.getPlayer(e.getPlayer());
|
CustomPlayer p = CustomPlayer.getPlayer(e.getPlayer());
|
||||||
if (p.getLocation().getY() <= 0) {
|
if (p.getLocation().getY() <= 0) {
|
||||||
p.setVelocity(new Vector().setY(10.0D).multiply(1.0D));
|
p.setVelocity(new Vector().setY(10.0D).multiply(1.0D));
|
||||||
p.setGliding(true);
|
p.setGliding(true);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
if(e.getFrom().getY() != e.getTo().getY()) {
|
||||||
|
if(!p.isInsideVehicle() && seatEntities.containsKey(p)) {
|
||||||
|
if(seatEntities.get(p).isDead()) {
|
||||||
|
seatEntities.remove(p);
|
||||||
|
if(seats.get(p).getBlock().getState().getData() instanceof Stairs) loadSeat(p, seats.get(p).getBlock());
|
||||||
|
}else {
|
||||||
|
seatEntities.get(p).remove();
|
||||||
|
seatEntities.remove(p);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
public void onPlayerTeleport(PlayerTeleportEvent e) {
|
||||||
|
CustomPlayer p = CustomPlayer.getPlayer(e.getPlayer());
|
||||||
|
if(!p.isInsideVehicle() && seatEntities.containsKey(p)) {
|
||||||
|
seatEntities.get(p).remove();
|
||||||
|
seatEntities.remove(p);
|
||||||
|
seats.remove(p);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
public void onQuit(PlayerQuitEvent e) {
|
||||||
|
despawnSeat(CustomPlayer.getPlayer(e.getPlayer()));
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
public void onKick(PlayerKickEvent e) {
|
||||||
|
despawnSeat(CustomPlayer.getPlayer(e.getPlayer()));
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
|
@ -55,7 +100,7 @@ public class Events implements Listener {
|
||||||
final Entity target = e.getTarget();
|
final Entity target = e.getTarget();
|
||||||
if (!(target instanceof Player)) return;
|
if (!(target instanceof Player)) return;
|
||||||
CustomPlayer p = CustomPlayer.getPlayer((Player) target);
|
CustomPlayer p = CustomPlayer.getPlayer((Player) target);
|
||||||
if (Vanish.getPlayers().contains(p) || SpectateManager.contains(p)) {
|
if (ModCommands.getVanishedPlayers().contains(p) || SpectateManager.contains(p)) {
|
||||||
if (entity instanceof Tameable) {
|
if (entity instanceof Tameable) {
|
||||||
e.setTarget(null);
|
e.setTarget(null);
|
||||||
}
|
}
|
||||||
|
@ -91,4 +136,35 @@ public class Events implements Listener {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void loadSeat(CustomPlayer p, Block b) {
|
||||||
|
if(seats.containsKey(p) || seats.containsValue(b.getLocation())) return;
|
||||||
|
Location location = b.getLocation();
|
||||||
|
Stairs stairs = (Stairs) b.getState().getData();
|
||||||
|
if(stairs.getFacing() == null) return;
|
||||||
|
location.setDirection(new Vector(stairs.getFacing().getModX(), stairs.getFacing().getModY(), stairs.getFacing().getModZ()));
|
||||||
|
location.setX(location.getBlockX() + 0.5);
|
||||||
|
location.setY(location.getY() + 0.3);
|
||||||
|
location.setZ(location.getBlockZ() + 0.5);
|
||||||
|
ArmorStand stand = p.getWorld().spawn(location, ArmorStand.class);
|
||||||
|
stand.setVisible(false);
|
||||||
|
stand.setMarker(true);
|
||||||
|
stand.setSmall(true);
|
||||||
|
stand.setBasePlate(false);
|
||||||
|
stand.setGravity(false);
|
||||||
|
stand.setPassenger(p);
|
||||||
|
seats.put(p, b.getLocation());
|
||||||
|
seatEntities.put(p, stand);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void despawnSeat(CustomPlayer p) {
|
||||||
|
if (seats.containsKey(p) && seatEntities.containsKey(p)) {
|
||||||
|
seatEntities.get(p).eject();
|
||||||
|
if (seatEntities.get(p) != null) {
|
||||||
|
seatEntities.get(p).remove();
|
||||||
|
}
|
||||||
|
seatEntities.remove(p);
|
||||||
|
seats.remove(p);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -4,8 +4,8 @@ import eu.univento.commons.player.language.MessageConstant;
|
||||||
import eu.univento.core.Core;
|
import eu.univento.core.Core;
|
||||||
import eu.univento.core.api.player.*;
|
import eu.univento.core.api.player.*;
|
||||||
import eu.univento.core.api.server.ServerSettings;
|
import eu.univento.core.api.server.ServerSettings;
|
||||||
import eu.univento.core.commands.Build;
|
import eu.univento.core.commands.BuilderCommands;
|
||||||
import eu.univento.core.commands.Vanish;
|
import eu.univento.core.commands.ModCommands;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.EventPriority;
|
import org.bukkit.event.EventPriority;
|
||||||
|
@ -45,10 +45,7 @@ public class JoinQuit implements Listener {
|
||||||
CustomPlayer p = CustomPlayer.getPlayer(e.getPlayer());
|
CustomPlayer p = CustomPlayer.getPlayer(e.getPlayer());
|
||||||
p.getDatabasePlayer().load();
|
p.getDatabasePlayer().load();
|
||||||
for (CustomPlayer player : Core.getOnlinePlayers()) {
|
for (CustomPlayer player : Core.getOnlinePlayers()) {
|
||||||
if (Vanish.getPlayers().contains(player)) {
|
if (ModCommands.getVanishedPlayers().contains(player) || SpectateManager.contains(player)) {
|
||||||
p.hidePlayer(player);
|
|
||||||
}
|
|
||||||
if (SpectateManager.contains(player)) {
|
|
||||||
p.hidePlayer(player);
|
p.hidePlayer(player);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -75,16 +72,18 @@ public class JoinQuit implements Listener {
|
||||||
p.setGameMode(ServerSettings.getGameMode());
|
p.setGameMode(ServerSettings.getGameMode());
|
||||||
p.setScoreboard(Bukkit.getScoreboardManager().getNewScoreboard());
|
p.setScoreboard(Bukkit.getScoreboardManager().getNewScoreboard());
|
||||||
p.initScoreboard();
|
p.initScoreboard();
|
||||||
//p.sendTabHeaderAndFooter(p.getMessages().Core_TAB_TITLE() + Bukkit.getServerName(), p.getMessages().TAB_PREFIX());
|
|
||||||
p.getDatabasePlayer().getSettingsAsync().whenComplete((playerSettings, throwable) -> {
|
p.sendTabHeaderAndFooter("Nothing to see here", "hello");
|
||||||
if(playerSettings.isNicked() && !ServerSettings.isLobby()) {
|
|
||||||
p.setNickName(NickName.getRandomNick());
|
|
||||||
}
|
|
||||||
});
|
|
||||||
for (CustomPlayer player : Core.getOnlinePlayers()) {
|
for (CustomPlayer player : Core.getOnlinePlayers()) {
|
||||||
p.getDatabasePlayer().getRankAsync().whenComplete((rank, throwable) -> player.getScoreboard().getTeam(rank.getTeam()).addEntry(p.getDisplayName()));
|
p.getDatabasePlayer().getRankAsync().whenComplete((rank, throwable) -> player.getScoreboard().getTeam(rank.getTeam()).addEntry(p.getDisplayName()));
|
||||||
player.getDatabasePlayer().getRankAsync().whenComplete((rank, throwable) -> p.getScoreboard().getTeam(rank.getTeam()).addEntry(player.getDisplayName()));
|
player.getDatabasePlayer().getRankAsync().whenComplete((rank, throwable) -> p.getScoreboard().getTeam(rank.getTeam()).addEntry(player.getDisplayName()));
|
||||||
}
|
}
|
||||||
|
p.getDatabasePlayer().getSettingsAsync().whenComplete((playerSettings, throwable) -> {
|
||||||
|
if(playerSettings.isNicked() && !ServerSettings.isLobby()) {
|
||||||
|
p.setNickName(NickName.getRandomNick());
|
||||||
|
}
|
||||||
|
});
|
||||||
p.setCollidable(false);
|
p.setCollidable(false);
|
||||||
|
|
||||||
//p.setStoryResourcePack();
|
//p.setStoryResourcePack();
|
||||||
|
@ -116,8 +115,8 @@ public class JoinQuit implements Listener {
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void onQuit(PlayerQuitEvent e) {
|
public void onQuit(PlayerQuitEvent e) {
|
||||||
CustomPlayer p = CustomPlayer.getPlayer(e.getPlayer());
|
CustomPlayer p = CustomPlayer.getPlayer(e.getPlayer());
|
||||||
if (Build.getPlayers().containsKey(p))
|
if (BuilderCommands.getBuildPlayers().containsKey(p))
|
||||||
Build.getPlayers().remove(p);
|
BuilderCommands.getBuildPlayers().remove(p);
|
||||||
p.getDatabasePlayer().getSettingsAsync().whenComplete((playerSettings, throwable) -> {
|
p.getDatabasePlayer().getSettingsAsync().whenComplete((playerSettings, throwable) -> {
|
||||||
if(playerSettings.isNicked() && !ServerSettings.isLobby()) {
|
if(playerSettings.isNicked() && !ServerSettings.isLobby()) {
|
||||||
p.removeNickName();
|
p.removeNickName();
|
||||||
|
|
|
@ -1,6 +1,20 @@
|
||||||
package eu.univento.core.listeners;
|
package eu.univento.core.listeners;
|
||||||
|
|
||||||
|
import eu.univento.core.Core;
|
||||||
|
import eu.univento.core.api.npc.NPC;
|
||||||
|
import eu.univento.core.api.player.CustomPlayer;
|
||||||
|
import net.minecraft.server.v1_11_R1.PacketPlayOutAnimation;
|
||||||
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.Listener;
|
import org.bukkit.event.Listener;
|
||||||
|
import org.bukkit.event.block.Action;
|
||||||
|
import org.bukkit.event.player.PlayerInteractEvent;
|
||||||
|
import org.bukkit.event.player.PlayerJoinEvent;
|
||||||
|
import org.bukkit.event.player.PlayerKickEvent;
|
||||||
|
import org.bukkit.event.player.PlayerQuitEvent;
|
||||||
|
|
||||||
|
import java.util.Random;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author joethei
|
* @author joethei
|
||||||
|
@ -9,4 +23,48 @@ import org.bukkit.event.Listener;
|
||||||
|
|
||||||
public class NPCEvents implements Listener {
|
public class NPCEvents implements Listener {
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
public void onJoin(PlayerJoinEvent e) {
|
||||||
|
CustomPlayer p = CustomPlayer.getPlayer(e.getPlayer());
|
||||||
|
for(NPC npc : NPC.getNpcs()) p.sendPacket(npc.packet);
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
public void onPlayerInteract(PlayerInteractEvent e) {
|
||||||
|
CustomPlayer p = CustomPlayer.getPlayer(e.getPlayer());
|
||||||
|
if(e.getAction() == Action.LEFT_CLICK_AIR ||e.getAction() == Action.LEFT_CLICK_BLOCK) {
|
||||||
|
for(NPC npc : NPC.getNpcs()) {
|
||||||
|
if(npc.detect.equals(p)) {
|
||||||
|
PacketPlayOutAnimation animationPacket = new PacketPlayOutAnimation(npc.getBukkitEntity().getHandle(), 0);
|
||||||
|
for(CustomPlayer player : Core.getOnlinePlayers()) player.sendPacket(animationPacket);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(p.getItemInHand() != null && p.getItemInHand().getType() == Material.NETHER_STAR && (e.getAction() == Action.RIGHT_CLICK_AIR || e.getAction() == Action.RIGHT_CLICK_BLOCK)) {
|
||||||
|
for(NPC npc : NPC.getNpcs()) if(npc.detect.equals(p)) {
|
||||||
|
npc.remove();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Random random = new Random();
|
||||||
|
for(int i = 0; i <= 10; i++) {
|
||||||
|
NPC.spawn(p, p.getProfile(), new Location(p.getWorld(), p.getLocation().getX() + random.nextInt(10), p.getLocation().getY(), p.getLocation().getZ() - random.nextInt(10)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
public void onPlayerQuit(PlayerQuitEvent e) {
|
||||||
|
CustomPlayer p = CustomPlayer.getPlayer(e.getPlayer());
|
||||||
|
for(NPC npc : NPC.getNpcs()) {
|
||||||
|
if (npc.detect.equals(p)) npc.remove();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
public void onPlayerKick(PlayerKickEvent e) {
|
||||||
|
CustomPlayer p = CustomPlayer.getPlayer(e.getPlayer());
|
||||||
|
for(NPC npc : NPC.getNpcs()) {
|
||||||
|
if(npc.detect.equals(p)) npc.remove();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -3,6 +3,7 @@ package eu.univento.core.listeners;
|
||||||
import com.google.common.io.ByteArrayDataOutput;
|
import com.google.common.io.ByteArrayDataOutput;
|
||||||
import com.google.common.io.ByteStreams;
|
import com.google.common.io.ByteStreams;
|
||||||
import eu.univento.commons.player.warn.WarnReason;
|
import eu.univento.commons.player.warn.WarnReason;
|
||||||
|
import eu.univento.commons.server.ServerType;
|
||||||
import eu.univento.core.Core;
|
import eu.univento.core.Core;
|
||||||
import eu.univento.core.api.player.CustomPlayer;
|
import eu.univento.core.api.player.CustomPlayer;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
@ -39,7 +40,7 @@ public class PluginMessenger implements PluginMessageListener {
|
||||||
} catch (UnsupportedEncodingException e) {
|
} catch (UnsupportedEncodingException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
Core.getCommons().getLoggingHandler().getCore().info(p.getName() + " hat WDL installiert. Version : " + version);
|
Core.getCommons().getLoggingHandler().log(ServerType.getServerType(), p.getName() + " hat WDL installiert. Version : " + version);
|
||||||
p.sendMessage(p.getDatabasePlayer().getLanguage().getWord("Prefix") + p.getDatabasePlayer().getLanguage().getWord("Hack.WorldDownloader"));
|
p.sendMessage(p.getDatabasePlayer().getLanguage().getWord("Prefix") + p.getDatabasePlayer().getLanguage().getWord("Hack.WorldDownloader"));
|
||||||
}
|
}
|
||||||
if(channel.equals("WDL|CONTROL")) {
|
if(channel.equals("WDL|CONTROL")) {
|
||||||
|
|
|
@ -23,7 +23,7 @@ public class WeaponEvents implements Listener {
|
||||||
if(e.getAction() == Action.RIGHT_CLICK_AIR || e.getAction() == Action.RIGHT_CLICK_BLOCK) {
|
if(e.getAction() == Action.RIGHT_CLICK_AIR || e.getAction() == Action.RIGHT_CLICK_BLOCK) {
|
||||||
sword.primaryAttack();
|
sword.primaryAttack();
|
||||||
}
|
}
|
||||||
if(e.getAction() == Action.LEFT_CLICK_AIR ||e.getAction() == Action.LEFT_CLICK_BLOCK) {
|
if(e.getAction() == Action.LEFT_CLICK_AIR || e.getAction() == Action.LEFT_CLICK_BLOCK) {
|
||||||
sword.secondaryAttack();
|
sword.secondaryAttack();
|
||||||
}
|
}
|
||||||
if(e.getAction() == Action.RIGHT_CLICK_BLOCK || e.getAction() == Action.RIGHT_CLICK_AIR) {
|
if(e.getAction() == Action.RIGHT_CLICK_BLOCK || e.getAction() == Action.RIGHT_CLICK_AIR) {
|
||||||
|
|
|
@ -0,0 +1,245 @@
|
||||||
|
package eu.univento.core.listeners;
|
||||||
|
|
||||||
|
import eu.univento.core.Core;
|
||||||
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.event.EventHandler;
|
||||||
|
import org.bukkit.event.Listener;
|
||||||
|
import org.bukkit.event.block.Action;
|
||||||
|
import org.bukkit.event.block.BlockBreakEvent;
|
||||||
|
import org.bukkit.event.inventory.InventoryClickEvent;
|
||||||
|
import org.bukkit.event.inventory.InventoryCloseEvent;
|
||||||
|
import org.bukkit.event.inventory.InventoryDragEvent;
|
||||||
|
import org.bukkit.event.inventory.InventoryType;
|
||||||
|
import org.bukkit.event.player.PlayerInteractEvent;
|
||||||
|
import org.bukkit.event.player.PlayerKickEvent;
|
||||||
|
import org.bukkit.event.player.PlayerQuitEvent;
|
||||||
|
import org.bukkit.inventory.Inventory;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
import org.bukkit.scheduler.BukkitRunnable;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Phloxz
|
||||||
|
* @version 1.0
|
||||||
|
*/
|
||||||
|
public class WorkbenchEvents implements Listener {
|
||||||
|
private static Map<Location, List<Player>> workbenchList = new HashMap<>();
|
||||||
|
private static Map<Location, ItemStack[]> workbenchInventory = new HashMap<>();
|
||||||
|
|
||||||
|
@EventHandler(ignoreCancelled = true)
|
||||||
|
public void clickWorkbench(final PlayerInteractEvent e) {
|
||||||
|
final Player player = e.getPlayer();
|
||||||
|
if (e.getAction() == Action.RIGHT_CLICK_BLOCK && e.getClickedBlock().getType() == Material.WORKBENCH) {
|
||||||
|
if (player.getOpenInventory() != null) {
|
||||||
|
player.getOpenInventory().close();
|
||||||
|
}
|
||||||
|
final Location location = e.getClickedBlock().getLocation();
|
||||||
|
if (workbenchList.containsKey(location)) {
|
||||||
|
new BukkitRunnable() {
|
||||||
|
public void run() {
|
||||||
|
Inventory inventory = null;
|
||||||
|
ItemStack[] items = null;
|
||||||
|
if (workbenchList.get(location).size() <= 1) {
|
||||||
|
items = workbenchInventory.get(location);
|
||||||
|
} else {
|
||||||
|
final Player randomPlayer = workbenchList.get(location).get(0);
|
||||||
|
inventory = randomPlayer.getOpenInventory().getTopInventory();
|
||||||
|
}
|
||||||
|
if (inventory != null && inventory.getType() == InventoryType.WORKBENCH) {
|
||||||
|
workbenchInventory.remove(location);
|
||||||
|
}
|
||||||
|
for (int i = 0; i <= 9; ++i) {
|
||||||
|
if (inventory != null) {
|
||||||
|
if (player.getOpenInventory() != null && player.getOpenInventory().getTopInventory() != null && player.getOpenInventory().getTopInventory().getType() == InventoryType.WORKBENCH) {
|
||||||
|
player.getOpenInventory().getTopInventory().setItem(i, inventory.getItem(i));
|
||||||
|
}
|
||||||
|
} else if (items != null && items.length > i && items[i] != null && player.getOpenInventory() != null && player.getOpenInventory().getTopInventory() != null && player.getOpenInventory().getTopInventory().getType() == InventoryType.WORKBENCH) {
|
||||||
|
player.getOpenInventory().getTopInventory().setItem(i, items[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}.runTaskLater(Core.getInstance(), 2L);
|
||||||
|
workbenchList.get(location).add(player);
|
||||||
|
} else {
|
||||||
|
workbenchList.put(location, new ArrayList<>());
|
||||||
|
workbenchList.get(location).add(player);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
public void breakWorkbench(final BlockBreakEvent e) {
|
||||||
|
final Location location = e.getBlock().getLocation();
|
||||||
|
if (workbenchList.containsKey(location)) {
|
||||||
|
dropItems(location);
|
||||||
|
workbenchList.remove(location);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
public void clickWorkbench(final InventoryClickEvent e) {
|
||||||
|
if (e.getClickedInventory() == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (e.getInventory() == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (e.getClickedInventory().getType() == InventoryType.WORKBENCH && e.getSlot() >= 0 && e.getSlot() <= 9) {
|
||||||
|
final Player player = (Player) e.getWhoClicked();
|
||||||
|
Location location = null;
|
||||||
|
for (final Map.Entry<Location, List<Player>> list : workbenchList.entrySet()) {
|
||||||
|
for (final Player otherPlayer : list.getValue()) {
|
||||||
|
if (otherPlayer.getOpenInventory().getTopInventory().equals(e.getClickedInventory())) {
|
||||||
|
location = list.getKey();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (location != null) {
|
||||||
|
for (final Player otherPlayer2 : workbenchList.get(location)) {
|
||||||
|
new BukkitRunnable() {
|
||||||
|
public void run() {
|
||||||
|
for (int i = 0; i <= 9; ++i) {
|
||||||
|
if (otherPlayer2 != player) {
|
||||||
|
otherPlayer2.getOpenInventory().getTopInventory().setItem(i, player.getOpenInventory().getTopInventory().getItem(i));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}.runTaskLater(Core.getInstance(), 2L);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
public void dragEvent(final InventoryDragEvent e) {
|
||||||
|
if (e.getInventory() == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (e.getInventory().getType() == InventoryType.WORKBENCH) {
|
||||||
|
final Player player = (Player) e.getWhoClicked();
|
||||||
|
Location location = null;
|
||||||
|
for (final Map.Entry<Location, List<Player>> list : workbenchList.entrySet()) {
|
||||||
|
for (final Player otherPlayer : list.getValue()) {
|
||||||
|
if (otherPlayer.getOpenInventory().getTopInventory().equals(e.getInventory())) {
|
||||||
|
location = list.getKey();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (location != null) {
|
||||||
|
for (final Player otherPlayer2 : workbenchList.get(location)) {
|
||||||
|
new BukkitRunnable() {
|
||||||
|
public void run() {
|
||||||
|
for (int i = 0; i <= 9; ++i) {
|
||||||
|
if (otherPlayer2 != player) {
|
||||||
|
otherPlayer2.getOpenInventory().getTopInventory().setItem(i, player.getOpenInventory().getTopInventory().getItem(i));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}.runTaskLater(Core.getInstance(), 2L);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
public void closeWorkbench(final InventoryCloseEvent e) {
|
||||||
|
Location location = null;
|
||||||
|
for (final Map.Entry<Location, List<Player>> list : workbenchList.entrySet()) {
|
||||||
|
for (final Player otherPlayer : list.getValue()) {
|
||||||
|
if (otherPlayer.getOpenInventory().getTopInventory().equals(e.getInventory())) {
|
||||||
|
location = list.getKey();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (location != null) {
|
||||||
|
final Player player = (Player) e.getPlayer();
|
||||||
|
workbenchList.get(location).remove(player);
|
||||||
|
if (workbenchList.get(location).size() == 0) {
|
||||||
|
if (e.getInventory().getType() == InventoryType.WORKBENCH) {
|
||||||
|
workbenchInventory.put(location, e.getInventory().getContents());
|
||||||
|
e.getInventory().clear();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
e.getInventory().clear();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
public void quitWorkbench(final PlayerQuitEvent e) {
|
||||||
|
final Player player = e.getPlayer();
|
||||||
|
Location location = null;
|
||||||
|
for (final Map.Entry<Location, List<Player>> list : workbenchList.entrySet()) {
|
||||||
|
for (final Player otherPlayer : list.getValue()) {
|
||||||
|
if (otherPlayer.equals(player)) {
|
||||||
|
location = list.getKey();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (location != null) {
|
||||||
|
workbenchList.get(location).remove(player);
|
||||||
|
if (workbenchList.get(location).size() == 0 && player.getOpenInventory() != null && player.getOpenInventory().getTopInventory() != null && player.getOpenInventory().getTopInventory().getType() == InventoryType.WORKBENCH) {
|
||||||
|
workbenchInventory.put(location, player.getOpenInventory().getTopInventory().getContents());
|
||||||
|
player.getOpenInventory().getTopInventory().clear();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
public void kickWorkbench(final PlayerKickEvent e) {
|
||||||
|
final Player player = e.getPlayer();
|
||||||
|
Location location = null;
|
||||||
|
for (final Map.Entry<Location, List<Player>> list : workbenchList.entrySet()) {
|
||||||
|
for (final Player otherPlayer : list.getValue()) {
|
||||||
|
if (otherPlayer.equals(player)) {
|
||||||
|
location = list.getKey();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (location != null) {
|
||||||
|
workbenchList.get(location).remove(player);
|
||||||
|
if (workbenchList.get(location).size() == 0 && player.getOpenInventory() != null && player.getOpenInventory().getTopInventory() != null && player.getOpenInventory().getTopInventory().getType() == InventoryType.WORKBENCH) {
|
||||||
|
workbenchInventory.put(location, player.getOpenInventory().getTopInventory().getContents());
|
||||||
|
player.getOpenInventory().getTopInventory().clear();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void dropItems(final Location loc) {
|
||||||
|
if (loc != null) {
|
||||||
|
if (workbenchInventory.containsKey(loc)) {
|
||||||
|
int id = 0;
|
||||||
|
for (final ItemStack item : workbenchInventory.get(loc)) {
|
||||||
|
if (item != null && item.getType() != Material.AIR && id > 0) {
|
||||||
|
loc.getWorld().dropItemNaturally(loc, item);
|
||||||
|
}
|
||||||
|
++id;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
for (final Map.Entry<Location, List<Player>> entry : workbenchList.entrySet()) {
|
||||||
|
for (final Player player : entry.getValue()) {
|
||||||
|
if (player.getOpenInventory() != null && player.getOpenInventory().getTopInventory() != null && player.getOpenInventory().getTopInventory().getType() == InventoryType.WORKBENCH) {
|
||||||
|
player.closeInventory();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (final Map.Entry<Location, ItemStack[]> entry2 : workbenchInventory.entrySet()) {
|
||||||
|
final Location location = entry2.getKey();
|
||||||
|
int id2 = 0;
|
||||||
|
for (final ItemStack item2 : entry2.getValue()) {
|
||||||
|
if (item2 != null && item2.getType() != Material.AIR && id2 > 0) {
|
||||||
|
location.getWorld().dropItemNaturally(location, item2);
|
||||||
|
}
|
||||||
|
++id2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,32 @@
|
||||||
|
package eu.univento.core.listeners.cloud;
|
||||||
|
|
||||||
|
import eu.univento.commons.event.MessageEvent;
|
||||||
|
import eu.univento.commons.messaging.MessageHandler;
|
||||||
|
import eu.univento.commons.server.ServerType;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author joethei
|
||||||
|
* @version 1.0
|
||||||
|
*/
|
||||||
|
public class Servers {
|
||||||
|
|
||||||
|
public static void register() {
|
||||||
|
MessageHandler.registerListener("cloud.servers", new MessageEvent() {
|
||||||
|
@Override
|
||||||
|
public void onMessageReceived(String queue, String message) {
|
||||||
|
String[] split = message.split(Pattern.quote("|"));
|
||||||
|
if (split[1].equals("INFO") && split[2].equals(Bukkit.getServerName())) {
|
||||||
|
MessageHandler.sendMessage("cloud.servers", split[0] + "|" + Bukkit.getServerName() + "|" + ServerType.getServerType() + "|" + Bukkit.getOnlinePlayers().size());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onMessageSend(String queue, String message) {
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue