FastAsyncWorldedit/forge1710/src/main/java/com/boydti/fawe/forge/FaweForge.java

218 lines
6.7 KiB
Java
Raw Normal View History

2016-04-23 22:41:07 +02:00
package com.boydti.fawe.forge;
import com.boydti.fawe.Fawe;
import com.boydti.fawe.IFawe;
2016-12-27 11:56:37 +01:00
import com.boydti.fawe.forge.v1710.ForgeQueue_All;
2016-04-23 22:41:07 +02:00
import com.boydti.fawe.object.FaweCommand;
import com.boydti.fawe.object.FawePlayer;
import com.boydti.fawe.object.FaweQueue;
2016-06-06 10:46:02 +02:00
import com.boydti.fawe.regions.FaweMaskManager;
import com.boydti.fawe.util.MainUtil;
2016-04-23 22:41:07 +02:00
import com.boydti.fawe.util.TaskManager;
import com.boydti.fawe.wrappers.WorldWrapper;
2016-09-19 05:49:52 +02:00
import com.sk89q.worldedit.EditSession;
2016-04-23 22:41:07 +02:00
import com.sk89q.worldedit.forge.ForgeWorld;
2018-10-25 11:04:12 +02:00
import com.sk89q.worldedit.internal.LocalWorldAdapter;
2016-04-23 22:41:07 +02:00
import com.sk89q.worldedit.world.World;
2016-07-23 00:57:15 +02:00
import cpw.mods.fml.common.FMLCommonHandler;
import cpw.mods.fml.common.ModMetadata;
2016-04-23 22:41:07 +02:00
import java.io.File;
2018-01-20 10:41:23 +01:00
import java.lang.reflect.Method;
2016-04-23 22:41:07 +02:00
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Collection;
2016-07-23 00:57:15 +02:00
import java.util.HashMap;
import java.util.Map;
2016-04-23 22:41:07 +02:00
import java.util.UUID;
import javax.management.InstanceAlreadyExistsException;
import net.minecraft.command.ServerCommandManager;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.server.MinecraftServer;
2017-07-12 05:51:28 +02:00
import net.minecraft.world.WorldServer;
import net.minecraftforge.common.DimensionManager;
2016-04-23 22:41:07 +02:00
import org.apache.logging.log4j.Logger;
public class FaweForge implements IFawe {
private final ForgeMain parent;
private final File directory;
private final Logger logger;
2016-07-23 00:57:15 +02:00
private final ModMetadata mod;
2016-04-23 22:41:07 +02:00
2016-07-23 00:57:15 +02:00
public FaweForge(ForgeMain plugin, Logger logger, ModMetadata mod, File directory) {
2016-04-23 22:41:07 +02:00
this.parent = plugin;
this.logger = logger;
this.directory = directory;
2016-07-23 00:57:15 +02:00
this.mod = mod;
2016-04-23 22:41:07 +02:00
try {
Fawe.set(this);
setupInjector();
2016-04-23 22:41:07 +02:00
} catch (InstanceAlreadyExistsException e) {
MainUtil.handleError(e);
2016-04-23 22:41:07 +02:00
}
}
public void setupInjector() {
try {
2016-12-26 08:42:33 +01:00
Fawe.setupInjector();
com.sk89q.worldedit.forge.ForgePlayer.inject();
} catch (Throwable e) {
Fawe.debug("Failed to inject WorldEdit classes.");
}
}
2016-04-23 22:41:07 +02:00
@Override
public void debug(String s) {
logger.error(s);
}
2017-08-15 11:43:17 +02:00
@Override
public boolean isOnlineMode() {
return MinecraftServer.getServer().isServerInOnlineMode();
}
@Override
public String getPlatformVersion() {
return MinecraftServer.getServer().getMinecraftVersion();
}
@Override
public int getPlayerCount() {
return MinecraftServer.getServer().getCurrentPlayerCount();
}
2016-04-23 22:41:07 +02:00
@Override
public File getDirectory() {
return directory;
}
2016-07-23 00:57:15 +02:00
private HashMap<String, FaweCommand> commands = new HashMap<>();
2016-04-23 22:41:07 +02:00
@Override
2016-07-23 00:57:15 +02:00
public void setupCommand(String label, FaweCommand cmd) {
this.commands.put(label, cmd);
}
public void insertCommands() {
for (Map.Entry<String, FaweCommand> entry : commands.entrySet()) {
ServerCommandManager scm = (ServerCommandManager) FMLCommonHandler.instance().getMinecraftServerInstance().getCommandManager();
scm.registerCommand(new ForgeCommand(entry.getKey(), entry.getValue()));
2016-04-23 22:41:07 +02:00
}
}
@Override
public FawePlayer wrap(Object obj) {
EntityPlayerMP player = null;
if (obj instanceof String) {
MinecraftServer server = MinecraftServer.getServer();
2016-06-06 10:46:02 +02:00
player = server.getConfigurationManager().func_152612_a((String) obj);
2016-04-23 22:41:07 +02:00
} else if (obj instanceof EntityPlayerMP) {
player = (EntityPlayerMP) obj;
}
if (player == null) {
return null;
}
FawePlayer existing = Fawe.get().getCachedPlayer(player.getCommandSenderName());
return existing != null ? existing : new ForgePlayer(player);
}
@Override
public void setupVault() {
// Do nothing
}
@Override
public TaskManager getTaskManager() {
return new ForgeTaskMan(512);
}
@Override
public String getWorldName(World world) {
if (world instanceof WorldWrapper) {
2016-10-29 12:46:36 +02:00
return getWorldName(((WorldWrapper) world).getParent());
2016-04-23 22:41:07 +02:00
}
2016-09-19 05:49:52 +02:00
else if (world instanceof EditSession) {
2016-10-29 12:46:36 +02:00
return getWorldName(((EditSession) world).getWorld());
2018-01-20 10:41:23 +01:00
} else if (world.getClass().getName().equals("com.sk89q.worldedit.bukkit.BukkitWorld")) {
try {
Class<?> classBukkitWorld = world.getClass();
Method methodGetWorld = classBukkitWorld.getDeclaredMethod("getWorld");
methodGetWorld.setAccessible(true);
Object craftWorld = methodGetWorld.invoke(world);
Class<? extends Object> classCraftWorld = craftWorld.getClass();
Method methodGetHandle = classCraftWorld.getDeclaredMethod("getHandle");
methodGetHandle.setAccessible(true);
Object nmsWorld = methodGetHandle.invoke(craftWorld);
return getWorldName((net.minecraft.world.World) nmsWorld);
} catch (Throwable e) {
e.printStackTrace();
return world.getName();
}
2018-10-25 11:04:12 +02:00
}else if (world instanceof LocalWorldAdapter){
return world.getName();
2016-09-19 05:49:52 +02:00
}
return getWorldName(((ForgeWorld) world).getWorld());
}
public String getWorldName(net.minecraft.world.World w) {
2017-07-12 05:51:28 +02:00
Integer[] ids = DimensionManager.getIDs();
WorldServer[] worlds = DimensionManager.getWorlds();
for (int i = 0; i < ids.length; i++) {
if (worlds[i] == w) {
return w.getWorldInfo().getWorldName() + ";" + ids[i];
}
}
return w.getWorldInfo().getWorldName() + ";" + w.provider.dimensionId;
2016-04-23 22:41:07 +02:00
}
@Override
2016-09-08 19:51:01 +02:00
public FaweQueue getNewQueue(World world, boolean dontCareIfFast) {
2016-04-23 22:41:07 +02:00
return new ForgeQueue_All(world);
}
@Override
public FaweQueue getNewQueue(String world, boolean dontCareIfFast) {
return new ForgeQueue_All(world);
}
2016-04-23 22:41:07 +02:00
@Override
public Collection<FaweMaskManager> getMaskManagers() {
return new ArrayList<>();
}
@Override
public void startMetrics() {
try {
2016-06-07 22:36:26 +02:00
ForgeMetrics metrics = new ForgeMetrics("FastAsyncWorldEdit", "3.5.1");
2016-04-23 22:41:07 +02:00
metrics.start();
} catch (Throwable e) {
debug("[FAWE] &cFailed to load up metrics.");
}
}
@Override
public String getPlatform() {
return "forge";
}
@Override
public UUID getUUID(String name) {
try {
return UUID.nameUUIDFromBytes(("OfflinePlayer:" + name).getBytes(StandardCharsets.UTF_8));
} catch (Throwable e) {
return null;
}
}
@Override
public String getName(UUID uuid) {
return uuid.toString();
}
@Override
public Object getBlocksHubApi() {
return null;
}
2016-04-23 22:41:07 +02:00
}