Skip to content

Commit

Permalink
Fixed bugs with Packets and event and errors
Browse files Browse the repository at this point in the history
  • Loading branch information
funkemunky committed Jan 19, 2019
1 parent c068dfd commit e6a6e3b
Show file tree
Hide file tree
Showing 20 changed files with 401 additions and 238 deletions.
429 changes: 212 additions & 217 deletions API/.idea/workspace.xml

Large diffs are not rendered by default.

Binary file modified API/out/artifacts/Atlas_jar/Atlas.jar
Binary file not shown.
Binary file modified API/out/production/Atlas/cc/funkemunky/api/Atlas.class
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file modified API/out/production/Atlas/cc/funkemunky/api/utils/MiscUtils.class
Binary file not shown.
4 changes: 4 additions & 0 deletions API/src/cc/funkemunky/api/Atlas.java
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,9 @@ public class Atlas extends JavaPlugin {
@ConfigSetting(path = "updater")
private boolean autoDownload = false;

@ConfigSetting(path = "init")
private boolean loadDependingPluginsOnStart = true;

public void onEnable() {
instance = this;
saveDefaultConfig();
Expand Down Expand Up @@ -124,6 +127,7 @@ public void initializeScanner(Class<?> mainClass, Plugin plugin) {
e.printStackTrace();
}
});

} catch (Exception e) {
e.printStackTrace();
}
Expand Down
17 changes: 17 additions & 0 deletions API/src/cc/funkemunky/api/commands/impl/args/ReloadArgument.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,15 @@
import cc.funkemunky.api.commands.FunkeArgument;
import cc.funkemunky.api.commands.FunkeCommand;
import cc.funkemunky.api.utils.Color;
import cc.funkemunky.api.utils.MiscUtils;
import com.google.common.collect.Lists;
import org.bukkit.Bukkit;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.plugin.Plugin;

import java.util.Arrays;
import java.util.List;

public class ReloadArgument extends FunkeArgument {
public ReloadArgument(FunkeCommand command) {
Expand All @@ -15,6 +22,16 @@ public ReloadArgument(FunkeCommand command) {
@Override
public void onArgument(CommandSender sender, Command cmd, String[] args) {
Atlas.getInstance().reloadConfig();

List<Plugin> dependingPls = Lists.newArrayList();
Arrays.stream(Bukkit.getPluginManager().getPlugins()).filter(pl -> pl.getDescription().getDepend().contains("Atlas")).forEach(pl -> dependingPls.add(pl));

dependingPls.forEach(pl -> MiscUtils.unloadPlugin(pl.getName()));
MiscUtils.unloadPlugin("Atlas");
MiscUtils.loadPlugin("Atlas");

dependingPls.forEach(pl -> MiscUtils.loadPlugin(pl.getName()));

sender.sendMessage(Color.Green + "Successfully reloaded the Atlas configuration file!");
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,15 @@
import cc.funkemunky.api.event.system.Cancellable;
import cc.funkemunky.api.event.system.Event;
import lombok.Getter;
import lombok.Setter;
import org.bukkit.entity.Player;

@Getter
public class PacketRecieveEvent extends Event implements Cancellable {
private Player player;
@Setter
private Object packet;
@Setter
private boolean cancelled;
private String type;
private long timeStamp;
Expand All @@ -20,9 +23,4 @@ public PacketRecieveEvent(Player player, Object packet, String type) {

timeStamp = System.currentTimeMillis();
}

@Override
public void setCancelled(boolean cancelled) {
this.cancelled = cancelled;
}
}
6 changes: 1 addition & 5 deletions API/src/cc/funkemunky/api/event/custom/PacketSendEvent.java
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ public class PacketSendEvent extends Event implements Cancellable {
private Player player;
@Setter
private Object packet;
@Setter
private boolean cancelled;
private String type;
private long timeStamp;
Expand All @@ -22,9 +23,4 @@ public PacketSendEvent(Player player, Object packet, String type) {

timeStamp = System.currentTimeMillis();
}

@Override
public void setCancelled(boolean cancelled) {
this.cancelled = cancelled;
}
}
16 changes: 13 additions & 3 deletions API/src/cc/funkemunky/api/event/system/EventManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -45,11 +45,20 @@ public static void clearRegistered() {
registered.clear();
}

public static void callEvent(Event event) {
Atlas.getInstance().executeTask(() -> call(event));
public static Event callEvent(Event event) {
FutureTask<Event> futureTask = new FutureTask<>(() -> call(event));

Atlas.getInstance().getThreadPool().submit(futureTask);

try {
return futureTask.get();
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
return event;
}

private static void call(Event event) {
private static Event call(Event event) {
for (Listener listener : registered.keySet()) {
for (Method method : registered.get(listener)) {
if (method.getParameterTypes()[0] == event.getClass()) {
Expand All @@ -61,6 +70,7 @@ private static void call(Event event) {
}
}
}
return event;
}
}

Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import cc.funkemunky.api.event.system.EventManager;
import io.netty.channel.Channel;
import lombok.Getter;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;

public class TinyProtocolHandler {
Expand Down Expand Up @@ -52,7 +53,8 @@ public Object onPacketOutAsync(Player sender, Object packet) {
String packetName = name.substring(index + 1);

PacketSendEvent event = new PacketSendEvent(sender, packet, packetName);
EventManager.callEvent(event);

event = (PacketSendEvent) EventManager.callEvent(event);

return !event.isCancelled() ? event.getPacket() : null;
}
Expand All @@ -67,9 +69,9 @@ public Object onPacketInAsync(Player sender, Object packet) {

PacketRecieveEvent event = new PacketRecieveEvent(sender, packet, packetName);

EventManager.callEvent(event);
event = (PacketRecieveEvent) EventManager.callEvent(event);

return !event.isCancelled() ? packet : null;
return !event.isCancelled() ? event.getPacket() : null;
}
}

4 changes: 2 additions & 2 deletions API/src/cc/funkemunky/api/utils/ClassScanner.java
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ private static void scanPath(String file, Path path, Set<String> plugins) {
}
}

private static void scanDirectory(String file, Path dir, final Set<String> plugins) {
public static void scanDirectory(String file, Path dir, final Set<String> plugins) {
try {
Files.walkFileTree(dir, newHashSet(FileVisitOption.FOLLOW_LINKS), Integer.MAX_VALUE, new SimpleFileVisitor<Path>() {
@Override
Expand Down Expand Up @@ -128,7 +128,7 @@ private static void scanZip(String file, Path path, Set<String> plugins) {
}
}

public static String findPlugin(String file, InputStream in) throws IOException {
public static String findPlugin(String file, InputStream in) {
try {
ClassReader reader = new ClassReader(in);
ClassNode classNode = new ClassNode();
Expand Down
147 changes: 144 additions & 3 deletions API/src/cc/funkemunky/api/utils/MiscUtils.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,18 +3,22 @@
import cc.funkemunky.api.Atlas;
import cc.funkemunky.api.tinyprotocol.packet.out.WrappedPacketPlayOutWorldParticle;
import cc.funkemunky.api.tinyprotocol.packet.types.WrappedEnumParticle;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.command.PluginCommand;
import org.bukkit.command.SimpleCommandMap;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.plugin.*;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.util.Vector;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.io.File;
import java.lang.reflect.Field;
import java.util.*;

public class MiscUtils {

Expand Down Expand Up @@ -93,6 +97,98 @@ public static void createParticlesForBoundingBox(Player player, BoundingBox box,
}
}

public static String unloadPlugin(String pl) {
PluginManager pm = Bukkit.getServer().getPluginManager();
SimplePluginManager spm = (SimplePluginManager)pm;
SimpleCommandMap cmdMap = null;
List plugins = null;
Map names = null;
Map commands = null;
Map listeners = null;
boolean reloadlisteners = true;
if(spm != null) {
try {
Field tp = spm.getClass().getDeclaredField("plugins");
tp.setAccessible(true);
plugins = (List)tp.get(spm);
Field arr$ = spm.getClass().getDeclaredField("lookupNames");
arr$.setAccessible(true);
names = (Map)arr$.get(spm);

Field len$;
try {
len$ = spm.getClass().getDeclaredField("listeners");
len$.setAccessible(true);
listeners = (Map)len$.get(spm);
} catch (Exception var19) {
reloadlisteners = false;
}

len$ = spm.getClass().getDeclaredField("commandMap");
len$.setAccessible(true);
cmdMap = (SimpleCommandMap)len$.get(spm);
Field i$ = cmdMap.getClass().getDeclaredField("knownCommands");
i$.setAccessible(true);
commands = (Map)i$.get(cmdMap);
} catch (IllegalAccessException | NoSuchFieldException var20) {
return "Failed to unload plugin!";
}
}

String var21 = "";
Plugin[] var22 = Bukkit.getServer().getPluginManager().getPlugins();
int var23 = var22.length;

for(int var24 = 0; var24 < var23; ++var24) {
Plugin p = var22[var24];
if(p.getDescription().getName().equalsIgnoreCase(pl)) {
pm.disablePlugin(p);
var21 = var21 + p.getName() + " ";
if(plugins != null && plugins.contains(p)) {
plugins.remove(p);
}

if(names != null && names.containsKey(pl)) {
names.remove(pl);
}

Iterator it;
if(listeners != null && reloadlisteners) {
it = listeners.values().iterator();

while(it.hasNext()) {
SortedSet entry = (SortedSet)it.next();
Iterator c = entry.iterator();

while(c.hasNext()) {
RegisteredListener value = (RegisteredListener)c.next();
if(value.getPlugin() == p) {
c.remove();
}
}
}
}

if(cmdMap != null) {
it = commands.entrySet().iterator();

while(it.hasNext()) {
Map.Entry var25 = (Map.Entry) it.next();
if(var25.getValue() instanceof PluginCommand) {
PluginCommand var26 = (PluginCommand)var25.getValue();
if(var26.getPlugin() == p) {
var26.unregister(cmdMap);
it.remove();
}
}
}
}
}
}

return var21 + "has been unloaded and disabled!";
}

public static BoundingBox getEntityBoundingBox(LivingEntity entity) {
if (entityDimensions.containsKey(entity.getType())) {
Vector entityVector = entityDimensions.get(entity.getType());
Expand Down Expand Up @@ -126,6 +222,51 @@ public static ItemStack createItem(Material material, int amount, String name, S
return thing;
}

public static void loadPlugin(final String pl) {
Plugin targetPlugin = null;
String msg = "";
final File pluginDir = new File("plugins");
if (!pluginDir.isDirectory()) {
return;
}
File pluginFile = new File(pluginDir, pl + ".jar");
if (!pluginFile.isFile()) {
for (final File f : pluginDir.listFiles()) {
try {
if (f.getName().endsWith(".jar")) {
final PluginDescriptionFile pdf = Atlas.getInstance().getPluginLoader().getPluginDescription(f);
if (pdf.getName().equalsIgnoreCase(pl)) {
pluginFile = f;
msg = "(via search) ";
break;
}
}
}
catch (InvalidDescriptionException e2) {
return;
}
}
}
try {
Atlas.getInstance().getServer().getPluginManager().loadPlugin(pluginFile);
targetPlugin = getPlugin(pl);
Atlas.getInstance().getServer().getPluginManager().enablePlugin(targetPlugin);
}
catch (UnknownDependencyException | InvalidPluginException | InvalidDescriptionException e3) {
e3.printStackTrace();
}
}


private static Plugin getPlugin(final String p) {
for (final Plugin pl : Atlas.getInstance().getServer().getPluginManager().getPlugins()) {
if (pl.getDescription().getName().equalsIgnoreCase(p)) {
return pl;
}
}
return null;
}

public static void printToConsole(String string) {
Atlas.getInstance().getConsoleSender().sendMessage(Color.translate(string));
}
Expand Down

0 comments on commit e6a6e3b

Please sign in to comment.