3
0
Mirror von https://github.com/GeyserMC/Geyser.git synchronisiert 2024-12-26 00:00:41 +01:00

Merge branch 'master' of https://github.com/GeyserMC/Geyser into mcprotocollibupdate

Dieser Commit ist enthalten in:
DoctorMacc 2020-06-20 17:50:00 -04:00
Commit 1015b830ce
11 geänderte Dateien mit 84 neuen und 26 gelöschten Zeilen

Datei anzeigen

@ -1,4 +1,4 @@
<img src="https://geysermc.org/img/geyserlogo.png" alt="Geyser" width="600"/> <img src="https://geysermc.org/img/geyser-1760-860.png" alt="Geyser" width="600"/>
[![forthebadge made-with-java](http://ForTheBadge.com/images/badges/made-with-java.svg)](https://java.com/) [![forthebadge made-with-java](http://ForTheBadge.com/images/badges/made-with-java.svg)](https://java.com/)

Datei anzeigen

@ -44,6 +44,7 @@ import us.myles.ViaVersion.api.Via;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.nio.file.Path;
import java.util.UUID; import java.util.UUID;
import java.util.logging.Level; import java.util.logging.Level;
@ -154,6 +155,11 @@ public class GeyserBukkitPlugin extends JavaPlugin implements GeyserBootstrap {
return this.geyserWorldManager; return this.geyserWorldManager;
} }
@Override
public Path getConfigFolder() {
return getDataFolder().toPath();
}
public boolean isCompatible(String version, String whichVersion) { public boolean isCompatible(String version, String whichVersion) {
int[] currentVersion = parseVersion(version); int[] currentVersion = parseVersion(version);
int[] otherVersion = parseVersion(whichVersion); int[] otherVersion = parseVersion(whichVersion);
@ -187,4 +193,5 @@ public class GeyserBukkitPlugin extends JavaPlugin implements GeyserBootstrap {
} }
return temp; return temp;
} }
} }

Datei anzeigen

@ -44,6 +44,7 @@ import org.geysermc.platform.bungeecord.command.GeyserBungeeCommandManager;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.net.InetSocketAddress; import java.net.InetSocketAddress;
import java.nio.file.Path;
import java.util.UUID; import java.util.UUID;
import java.util.logging.Level; import java.util.logging.Level;
@ -134,4 +135,9 @@ public class GeyserBungeePlugin extends Plugin implements GeyserBootstrap {
public IGeyserPingPassthrough getGeyserPingPassthrough() { public IGeyserPingPassthrough getGeyserPingPassthrough() {
return geyserBungeePingPassthrough; return geyserBungeePingPassthrough;
} }
@Override
public Path getConfigFolder() {
return getDataFolder().toPath();
}
} }

Datei anzeigen

@ -50,6 +50,7 @@ import org.spongepowered.api.plugin.Plugin;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.net.InetSocketAddress; import java.net.InetSocketAddress;
import java.nio.file.Path;
import java.util.UUID; import java.util.UUID;
@Plugin(id = "geyser", name = GeyserConnector.NAME + "-Sponge", version = GeyserConnector.VERSION, url = "https://geysermc.org", authors = "GeyserMC") @Plugin(id = "geyser", name = GeyserConnector.NAME + "-Sponge", version = GeyserConnector.VERSION, url = "https://geysermc.org", authors = "GeyserMC")
@ -147,6 +148,11 @@ public class GeyserSpongePlugin implements GeyserBootstrap {
return geyserSpongePingPassthrough; return geyserSpongePingPassthrough;
} }
@Override
public Path getConfigFolder() {
return configDir.toPath();
}
@Listener @Listener
public void onServerStart(GameStartedServerEvent event) { public void onServerStart(GameStartedServerEvent event) {
onEnable(); onEnable();

Datei anzeigen

@ -37,6 +37,8 @@ import org.geysermc.platform.standalone.command.GeyserCommandManager;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.UUID; import java.util.UUID;
public class GeyserStandaloneBootstrap implements GeyserBootstrap { public class GeyserStandaloneBootstrap implements GeyserBootstrap {
@ -100,4 +102,10 @@ public class GeyserStandaloneBootstrap implements GeyserBootstrap {
public IGeyserPingPassthrough getGeyserPingPassthrough() { public IGeyserPingPassthrough getGeyserPingPassthrough() {
return geyserPingPassthrough; return geyserPingPassthrough;
} }
@Override
public Path getConfigFolder() {
// Return the current working directory
return Paths.get(System.getProperty("user.dir"));
}
} }

Datei anzeigen

@ -34,6 +34,7 @@ import com.velocitypowered.api.event.proxy.ProxyShutdownEvent;
import com.velocitypowered.api.plugin.Plugin; import com.velocitypowered.api.plugin.Plugin;
import com.velocitypowered.api.proxy.ProxyServer; import com.velocitypowered.api.proxy.ProxyServer;
import lombok.Getter;
import org.geysermc.common.PlatformType; import org.geysermc.common.PlatformType;
import org.geysermc.connector.configuration.GeyserConfiguration; import org.geysermc.connector.configuration.GeyserConfiguration;
import org.geysermc.connector.GeyserConnector; import org.geysermc.connector.GeyserConnector;
@ -48,6 +49,8 @@ import org.slf4j.Logger;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.net.InetSocketAddress; import java.net.InetSocketAddress;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.UUID; import java.util.UUID;
@Plugin(id = "geyser", name = GeyserConnector.NAME + "-Velocity", version = GeyserConnector.VERSION, url = "https://geysermc.org", authors = "GeyserMC") @Plugin(id = "geyser", name = GeyserConnector.NAME + "-Velocity", version = GeyserConnector.VERSION, url = "https://geysermc.org", authors = "GeyserMC")
@ -69,14 +72,16 @@ public class GeyserVelocityPlugin implements GeyserBootstrap {
private GeyserConnector connector; private GeyserConnector connector;
@Getter
private final Path configFolder = Paths.get("plugins/" + GeyserConnector.NAME + "-Velocity/");
@Override @Override
public void onEnable() { public void onEnable() {
File configDir = new File("plugins/" + GeyserConnector.NAME + "-Velocity/");
try { try {
if (!configDir.exists()) if (!configFolder.toFile().exists())
configDir.mkdir(); //noinspection ResultOfMethodCallIgnored
File configFile = FileUtils.fileOrCopiedFromResource(new File(configDir, "config.yml"), "config.yml", (x) -> x.replaceAll("generateduuid", UUID.randomUUID().toString())); configFolder.toFile().mkdirs();
File configFile = FileUtils.fileOrCopiedFromResource(configFolder.resolve("config.yml").toFile(), "config.yml", (x) -> x.replaceAll("generateduuid", UUID.randomUUID().toString()));
this.geyserConfig = FileUtils.loadConfig(configFile, GeyserVelocityConfiguration.class); this.geyserConfig = FileUtils.loadConfig(configFile, GeyserVelocityConfiguration.class);
} catch (IOException ex) { } catch (IOException ex) {
logger.warn("Failed to read/create config.yml! Make sure it's up to date and/or readable+writable!", ex); logger.warn("Failed to read/create config.yml! Make sure it's up to date and/or readable+writable!", ex);
@ -101,7 +106,7 @@ public class GeyserVelocityPlugin implements GeyserBootstrap {
return; return;
} }
geyserConfig.loadFloodgate(this, proxyServer, configDir); geyserConfig.loadFloodgate(this, proxyServer, configFolder.toFile());
this.connector = GeyserConnector.start(PlatformType.VELOCITY, this); this.connector = GeyserConnector.start(PlatformType.VELOCITY, this);

Datei anzeigen

@ -31,6 +31,7 @@ import com.nukkitx.protocol.bedrock.BedrockPacketCodec;
import com.nukkitx.protocol.bedrock.BedrockServer; import com.nukkitx.protocol.bedrock.BedrockServer;
import com.nukkitx.protocol.bedrock.v390.Bedrock_v390; import com.nukkitx.protocol.bedrock.v390.Bedrock_v390;
import lombok.Getter; import lombok.Getter;
import lombok.Setter;
import org.geysermc.common.AuthType; import org.geysermc.common.AuthType;
import org.geysermc.common.PlatformType; import org.geysermc.common.PlatformType;
import org.geysermc.connector.bootstrap.GeyserBootstrap; import org.geysermc.connector.bootstrap.GeyserBootstrap;
@ -79,6 +80,7 @@ public class GeyserConnector {
private static GeyserConnector instance; private static GeyserConnector instance;
private RemoteServer remoteServer; private RemoteServer remoteServer;
@Setter
private AuthType authType; private AuthType authType;
private boolean shuttingDown = false; private boolean shuttingDown = false;

Datei anzeigen

@ -33,6 +33,8 @@ import org.geysermc.connector.command.CommandManager;
import org.geysermc.connector.network.translators.world.CachedChunkManager; import org.geysermc.connector.network.translators.world.CachedChunkManager;
import org.geysermc.connector.network.translators.world.WorldManager; import org.geysermc.connector.network.translators.world.WorldManager;
import java.nio.file.Path;
public interface GeyserBootstrap { public interface GeyserBootstrap {
CachedChunkManager DEFAULT_CHUNK_MANAGER = new CachedChunkManager(); CachedChunkManager DEFAULT_CHUNK_MANAGER = new CachedChunkManager();
@ -83,4 +85,11 @@ public interface GeyserBootstrap {
default WorldManager getWorldManager() { default WorldManager getWorldManager() {
return DEFAULT_CHUNK_MANAGER; return DEFAULT_CHUNK_MANAGER;
} }
/**
* Return the data folder where files get stored
*
* @return Path location of data folder
*/
Path getConfigFolder();
} }

Datei anzeigen

@ -26,6 +26,7 @@
package org.geysermc.connector.network.translators.bedrock; package org.geysermc.connector.network.translators.bedrock;
import com.nukkitx.protocol.bedrock.data.EntityData; import com.nukkitx.protocol.bedrock.data.EntityData;
import com.nukkitx.protocol.bedrock.data.EntityDataMap;
import com.nukkitx.protocol.bedrock.data.EntityFlag; import com.nukkitx.protocol.bedrock.data.EntityFlag;
import org.geysermc.connector.entity.Entity; import org.geysermc.connector.entity.Entity;
import org.geysermc.connector.network.session.GeyserSession; import org.geysermc.connector.network.session.GeyserSession;
@ -74,33 +75,43 @@ public class BedrockInteractTranslator extends PacketTranslator<InteractPacket>
Entity interactEntity = session.getEntityCache().getEntityByGeyserId(packet.getRuntimeEntityId()); Entity interactEntity = session.getEntityCache().getEntityByGeyserId(packet.getRuntimeEntityId());
if (interactEntity == null) if (interactEntity == null)
return; return;
EntityDataMap entityMetadata = interactEntity.getMetadata();
String interactiveTag; String interactiveTag;
switch (interactEntity.getEntityType()) { switch (interactEntity.getEntityType()) {
case PIG: case BOAT:
if (interactEntity.getMetadata().getFlags().getFlag(EntityFlag.SADDLED)) { interactiveTag = "action.interact.ride.boat";
interactiveTag = "action.interact.mount";
} else interactiveTag = "";
break; break;
case HORSE:
case SKELETON_HORSE:
case ZOMBIE_HORSE:
case DONKEY: case DONKEY:
case MULE: case HORSE:
case LLAMA: case LLAMA:
case MULE:
case SKELETON_HORSE:
case TRADER_LLAMA: case TRADER_LLAMA:
if (interactEntity.getMetadata().getFlags().getFlag(EntityFlag.TAMED)) { case ZOMBIE_HORSE:
if (entityMetadata.getFlags().getFlag(EntityFlag.TAMED)) {
interactiveTag = "action.interact.ride.horse"; interactiveTag = "action.interact.ride.horse";
} else { } else {
interactiveTag = "action.interact.mount"; interactiveTag = "action.interact.mount";
} }
break; break;
case BOAT:
interactiveTag = "action.interact.ride.boat";
break;
case MINECART: case MINECART:
interactiveTag = "action.interact.ride.minecart"; interactiveTag = "action.interact.ride.minecart";
break; break;
case PIG:
if (entityMetadata.getFlags().getFlag(EntityFlag.SADDLED)) {
interactiveTag = "action.interact.mount";
} else interactiveTag = "";
break;
case VILLAGER:
if (entityMetadata.getInt(EntityData.VARIANT) != 14 && entityMetadata.getInt(EntityData.VARIANT) != 0
&& entityMetadata.getFloat(EntityData.SCALE) >= 0.75f) { // Not a nitwit, has a profession and is not a baby
interactiveTag = "action.interact.trade";
} else interactiveTag = "";
break;
case WANDERING_TRADER:
interactiveTag = "action.interact.trade"; // Since you can always trade with a wandering villager, presumably.
break;
default: default:
return; // No need to process any further since there is no interactive tag return; // No need to process any further since there is no interactive tag
} }

Datei anzeigen

@ -33,6 +33,7 @@ import org.geysermc.connector.GeyserConnector;
import java.io.*; import java.io.*;
import java.nio.file.Files; import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths; import java.nio.file.Paths;
import java.util.*; import java.util.*;
import java.util.zip.ZipFile; import java.util.zip.ZipFile;
@ -49,7 +50,8 @@ public class LocaleUtils {
static { static {
// Create the locales folder // Create the locales folder
File localesFolder = new File("locales/"); File localesFolder = GeyserConnector.getInstance().getBootstrap().getConfigFolder().resolve("locales").toFile();
//noinspection ResultOfMethodCallIgnored
localesFolder.mkdir(); localesFolder.mkdir();
// Download the latest asset list and cache it // Download the latest asset list and cache it
@ -132,7 +134,7 @@ public class LocaleUtils {
* @param locale Locale to download * @param locale Locale to download
*/ */
private static void downloadLocale(String locale) { private static void downloadLocale(String locale) {
File localeFile = new File("locales/" + locale + ".json"); File localeFile = Paths.get(GeyserConnector.getInstance().getBootstrap().getConfigFolder().toString(),"locales",locale + ".json").toFile();
// Check if we have already downloaded the locale file // Check if we have already downloaded the locale file
if (localeFile.exists()) { if (localeFile.exists()) {
@ -149,7 +151,7 @@ public class LocaleUtils {
// Get the hash and download the locale // Get the hash and download the locale
String hash = ASSET_MAP.get("minecraft/lang/" + locale + ".json").getHash(); String hash = ASSET_MAP.get("minecraft/lang/" + locale + ".json").getHash();
WebUtils.downloadFile("http://resources.download.minecraft.net/" + hash.substring(0, 2) + "/" + hash, "locales/" + locale + ".json"); WebUtils.downloadFile("http://resources.download.minecraft.net/" + hash.substring(0, 2) + "/" + hash, localeFile.toString());
} }
/** /**
@ -205,10 +207,11 @@ public class LocaleUtils {
GeyserConnector.getInstance().getLogger().debug("Download URL: " + smallestURL); GeyserConnector.getInstance().getLogger().debug("Download URL: " + smallestURL);
// Download the smallest JAR (client or server) // Download the smallest JAR (client or server)
WebUtils.downloadFile(smallestURL, "tmp_locale.jar"); Path tmpFilePath = GeyserConnector.getInstance().getBootstrap().getConfigFolder().resolve("tmp_locale.jar");
WebUtils.downloadFile(smallestURL, tmpFilePath.toString());
// Load in the JAR as a zip and extract the file // Load in the JAR as a zip and extract the file
ZipFile localeJar = new ZipFile("tmp_locale.jar"); ZipFile localeJar = new ZipFile(tmpFilePath.toString());
InputStream inputStream = localeJar.getInputStream(localeJar.getEntry("assets/minecraft/lang/en_us.json")); InputStream inputStream = localeJar.getInputStream(localeJar.getEntry("assets/minecraft/lang/en_us.json"));
FileOutputStream outputStream = new FileOutputStream(localeFile); FileOutputStream outputStream = new FileOutputStream(localeFile);
@ -227,7 +230,7 @@ public class LocaleUtils {
localeJar.close(); localeJar.close();
// Delete the nolonger needed client/server jar // Delete the nolonger needed client/server jar
Files.delete(Paths.get("tmp_locale.jar")); Files.delete(tmpFilePath);
} catch (Exception e) { } catch (Exception e) {
throw new AssertionError("Unable to download and extract en_us locale!", e); throw new AssertionError("Unable to download and extract en_us locale!", e);
} }

Datei anzeigen

@ -8,7 +8,8 @@
# -------------------------------- # --------------------------------
bedrock: bedrock:
# The IP address that will listen for connections # The IP address that will listen for connections.
# There is no reason to change this unless you want to limit what IPs can connect to your server.
address: 0.0.0.0 address: 0.0.0.0
# The port that will listen for connections # The port that will listen for connections
port: 19132 port: 19132