mirror of https://github.com/GeyserMC/Geyser.git
Clean up on legacy code that will no longer trigger
This commit is contained in:
parent
7f05ab9d22
commit
07c7b2f7f8
|
@ -60,7 +60,6 @@ import org.geysermc.geyser.ping.IGeyserPingPassthrough;
|
||||||
import org.geysermc.geyser.platform.spigot.command.GeyserBrigadierSupport;
|
import org.geysermc.geyser.platform.spigot.command.GeyserBrigadierSupport;
|
||||||
import org.geysermc.geyser.platform.spigot.command.GeyserSpigotCommandExecutor;
|
import org.geysermc.geyser.platform.spigot.command.GeyserSpigotCommandExecutor;
|
||||||
import org.geysermc.geyser.platform.spigot.command.GeyserSpigotCommandManager;
|
import org.geysermc.geyser.platform.spigot.command.GeyserSpigotCommandManager;
|
||||||
import org.geysermc.geyser.platform.spigot.command.SpigotCommandSource;
|
|
||||||
import org.geysermc.geyser.platform.spigot.world.GeyserPistonListener;
|
import org.geysermc.geyser.platform.spigot.world.GeyserPistonListener;
|
||||||
import org.geysermc.geyser.platform.spigot.world.GeyserSpigotBlockPlaceListener;
|
import org.geysermc.geyser.platform.spigot.world.GeyserSpigotBlockPlaceListener;
|
||||||
import org.geysermc.geyser.platform.spigot.world.manager.*;
|
import org.geysermc.geyser.platform.spigot.world.manager.*;
|
||||||
|
@ -269,14 +268,6 @@ public class GeyserSpigotPlugin extends JavaPlugin implements GeyserBootstrap {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Used to determine if Block.getBlockData() is present.
|
|
||||||
boolean isLegacy = !isCompatible(Bukkit.getServer().getVersion(), "1.13.0");
|
|
||||||
if (isLegacy)
|
|
||||||
geyserLogger.debug("Legacy version of Minecraft (1.12.2 or older) detected; falling back to ViaVersion for block state retrieval.");
|
|
||||||
|
|
||||||
boolean isPre1_12 = !isCompatible(Bukkit.getServer().getVersion(), "1.12.0");
|
|
||||||
// Set if we need to use a different method for getting a player's locale
|
|
||||||
SpigotCommandSource.setUseLegacyLocaleMethod(isPre1_12);
|
|
||||||
|
|
||||||
// We want to do this late in the server startup process to allow plugins such as ViaVersion and ProtocolLib
|
// We want to do this late in the server startup process to allow plugins such as ViaVersion and ProtocolLib
|
||||||
// To do their job injecting, then connect into *that*
|
// To do their job injecting, then connect into *that*
|
||||||
|
@ -289,13 +280,7 @@ public class GeyserSpigotPlugin extends JavaPlugin implements GeyserBootstrap {
|
||||||
String nmsVersion = name.substring(name.lastIndexOf('.') + 1);
|
String nmsVersion = name.substring(name.lastIndexOf('.') + 1);
|
||||||
SpigotAdapters.registerWorldAdapter(nmsVersion);
|
SpigotAdapters.registerWorldAdapter(nmsVersion);
|
||||||
if (isViaVersion && isViaVersionNeeded()) {
|
if (isViaVersion && isViaVersionNeeded()) {
|
||||||
if (isLegacy) {
|
this.geyserWorldManager = new GeyserSpigotLegacyNativeWorldManager(this);
|
||||||
// Pre-1.13
|
|
||||||
this.geyserWorldManager = new GeyserSpigot1_12NativeWorldManager(this);
|
|
||||||
} else {
|
|
||||||
// Post-1.13
|
|
||||||
this.geyserWorldManager = new GeyserSpigotLegacyNativeWorldManager(this);
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
// No ViaVersion
|
// No ViaVersion
|
||||||
this.geyserWorldManager = new GeyserSpigotNativeWorldManager(this);
|
this.geyserWorldManager = new GeyserSpigotNativeWorldManager(this);
|
||||||
|
@ -312,17 +297,8 @@ public class GeyserSpigotPlugin extends JavaPlugin implements GeyserBootstrap {
|
||||||
}
|
}
|
||||||
if (this.geyserWorldManager == null) {
|
if (this.geyserWorldManager == null) {
|
||||||
// No NMS adapter
|
// No NMS adapter
|
||||||
if (isLegacy && isViaVersion) {
|
this.geyserWorldManager = new GeyserSpigotWorldManager(this);
|
||||||
// Use ViaVersion for converting pre-1.13 block states
|
geyserLogger.debug("Using default world manager.");
|
||||||
this.geyserWorldManager = new GeyserSpigot1_12WorldManager(this);
|
|
||||||
} else if (isLegacy) {
|
|
||||||
// Not sure how this happens - without ViaVersion, we don't know any block states, so just assume everything is air
|
|
||||||
this.geyserWorldManager = new GeyserSpigotFallbackWorldManager(this);
|
|
||||||
} else {
|
|
||||||
// Post-1.13
|
|
||||||
this.geyserWorldManager = new GeyserSpigotWorldManager(this);
|
|
||||||
}
|
|
||||||
geyserLogger.debug("Using default world manager: " + this.geyserWorldManager.getClass());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
PluginCommand geyserCommand = this.getCommand("geyser");
|
PluginCommand geyserCommand = this.getCommand("geyser");
|
||||||
|
|
|
@ -29,31 +29,17 @@ import net.kyori.adventure.text.Component;
|
||||||
import net.kyori.adventure.text.serializer.bungeecord.BungeeComponentSerializer;
|
import net.kyori.adventure.text.serializer.bungeecord.BungeeComponentSerializer;
|
||||||
import org.bukkit.command.ConsoleCommandSender;
|
import org.bukkit.command.ConsoleCommandSender;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.geysermc.geyser.GeyserImpl;
|
|
||||||
import org.geysermc.geyser.command.GeyserCommandSource;
|
import org.geysermc.geyser.command.GeyserCommandSource;
|
||||||
import org.geysermc.geyser.platform.spigot.PaperAdventure;
|
import org.geysermc.geyser.platform.spigot.PaperAdventure;
|
||||||
import org.geysermc.geyser.text.GeyserLocale;
|
import org.geysermc.geyser.text.GeyserLocale;
|
||||||
|
|
||||||
import java.lang.reflect.InvocationTargetException;
|
|
||||||
import java.lang.reflect.Method;
|
|
||||||
|
|
||||||
public class SpigotCommandSource implements GeyserCommandSource {
|
public class SpigotCommandSource implements GeyserCommandSource {
|
||||||
|
|
||||||
/**
|
|
||||||
* Whether to use {@code Player.getLocale()} or {@code Player.spigot().getLocale()}, depending on version.
|
|
||||||
* 1.12 or greater should not use the legacy method.
|
|
||||||
*/
|
|
||||||
private static boolean USE_LEGACY_METHOD = false;
|
|
||||||
private static Method LOCALE_METHOD;
|
|
||||||
|
|
||||||
private final org.bukkit.command.CommandSender handle;
|
private final org.bukkit.command.CommandSender handle;
|
||||||
private final String locale;
|
|
||||||
|
|
||||||
public SpigotCommandSource(org.bukkit.command.CommandSender handle) {
|
public SpigotCommandSource(org.bukkit.command.CommandSender handle) {
|
||||||
this.handle = handle;
|
this.handle = handle;
|
||||||
this.locale = getSpigotLocale();
|
|
||||||
// Ensure even Java players' languages are loaded
|
// Ensure even Java players' languages are loaded
|
||||||
GeyserLocale.loadGeyserLocale(locale);
|
GeyserLocale.loadGeyserLocale(locale());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -84,50 +70,15 @@ public class SpigotCommandSource implements GeyserCommandSource {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String locale() {
|
public String locale() {
|
||||||
return locale;
|
if (this.handle instanceof Player player) {
|
||||||
|
return player.getLocale();
|
||||||
|
}
|
||||||
|
|
||||||
|
return GeyserLocale.getDefaultLocale();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean hasPermission(String permission) {
|
public boolean hasPermission(String permission) {
|
||||||
return handle.hasPermission(permission);
|
return handle.hasPermission(permission);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Set if we are on pre-1.12, and therefore {@code player.getLocale()} doesn't exist and we have to get
|
|
||||||
* {@code player.spigot().getLocale()}.
|
|
||||||
*
|
|
||||||
* @param useLegacyMethod if we are running pre-1.12 and therefore need to use reflection to get the player locale
|
|
||||||
*/
|
|
||||||
public static void setUseLegacyLocaleMethod(boolean useLegacyMethod) {
|
|
||||||
USE_LEGACY_METHOD = useLegacyMethod;
|
|
||||||
if (USE_LEGACY_METHOD) {
|
|
||||||
try {
|
|
||||||
//noinspection JavaReflectionMemberAccess - of course it doesn't exist; that's why we're doing it
|
|
||||||
LOCALE_METHOD = Player.Spigot.class.getMethod("getLocale");
|
|
||||||
} catch (NoSuchMethodException e) {
|
|
||||||
GeyserImpl.getInstance().getLogger().debug("Player.Spigot.getLocale() doesn't exist? Not a big deal but if you're seeing this please report it to the developers!");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* So we only have to do nasty reflection stuff once per command
|
|
||||||
*
|
|
||||||
* @return the locale of the Spigot player
|
|
||||||
*/
|
|
||||||
private String getSpigotLocale() {
|
|
||||||
if (handle instanceof Player player) {
|
|
||||||
if (USE_LEGACY_METHOD) {
|
|
||||||
try {
|
|
||||||
// sigh
|
|
||||||
// This was the only option on older Spigot instances and now it's gone
|
|
||||||
return (String) LOCALE_METHOD.invoke(player.spigot());
|
|
||||||
} catch (IllegalAccessException | InvocationTargetException ignored) {
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
return player.getLocale();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return GeyserLocale.getDefaultLocale();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -105,13 +105,10 @@ public class GeyserPistonListener implements Listener {
|
||||||
// Trying to grab the blocks from the world like other platforms would result in the moving piston block
|
// Trying to grab the blocks from the world like other platforms would result in the moving piston block
|
||||||
// being returned instead.
|
// being returned instead.
|
||||||
if (!blocksFilled) {
|
if (!blocksFilled) {
|
||||||
// Blocks currently require a player for 1.12, so let's just leech off one player to get all blocks
|
|
||||||
// and call it a day for the rest of the sessions (mostly to save on execution time)
|
|
||||||
List<Block> blocks = isExtend ? ((BlockPistonExtendEvent) event).getBlocks() : ((BlockPistonRetractEvent) event).getBlocks();
|
List<Block> blocks = isExtend ? ((BlockPistonExtendEvent) event).getBlocks() : ((BlockPistonRetractEvent) event).getBlocks();
|
||||||
for (Block block : blocks) {
|
for (Block block : blocks) {
|
||||||
Location attachedLocation = block.getLocation();
|
Location attachedLocation = block.getLocation();
|
||||||
int blockId = worldManager.getBlockNetworkId(player, block,
|
int blockId = worldManager.getBlockNetworkId(block);
|
||||||
attachedLocation.getBlockX(), attachedLocation.getBlockY(), attachedLocation.getBlockZ());
|
|
||||||
// Ignore blocks that will be destroyed
|
// Ignore blocks that will be destroyed
|
||||||
if (BlockStateValues.canPistonMoveBlock(blockId, isExtend)) {
|
if (BlockStateValues.canPistonMoveBlock(blockId, isExtend)) {
|
||||||
attachedBlocks.put(getVector(attachedLocation), blockId);
|
attachedBlocks.put(getVector(attachedLocation), blockId);
|
||||||
|
@ -120,7 +117,7 @@ public class GeyserPistonListener implements Listener {
|
||||||
blocksFilled = true;
|
blocksFilled = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
int pistonBlockId = worldManager.getBlockNetworkId(player, event.getBlock(), location.getBlockX(), location.getBlockY(), location.getBlockZ());
|
int pistonBlockId = worldManager.getBlockNetworkId(event.getBlock());
|
||||||
// event.getDirection() is unreliable
|
// event.getDirection() is unreliable
|
||||||
Direction orientation = BlockStateValues.getPistonOrientation(pistonBlockId);
|
Direction orientation = BlockStateValues.getPistonOrientation(pistonBlockId);
|
||||||
|
|
||||||
|
|
|
@ -1,61 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright (c) 2019-2022 GeyserMC. http://geysermc.org
|
|
||||||
*
|
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
* of this software and associated documentation files (the "Software"), to deal
|
|
||||||
* in the Software without restriction, including without limitation the rights
|
|
||||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
* copies of the Software, and to permit persons to whom the Software is
|
|
||||||
* furnished to do so, subject to the following conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be included in
|
|
||||||
* all copies or substantial portions of the Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
||||||
* THE SOFTWARE.
|
|
||||||
*
|
|
||||||
* @author GeyserMC
|
|
||||||
* @link https://github.com/GeyserMC/Geyser
|
|
||||||
*/
|
|
||||||
|
|
||||||
package org.geysermc.geyser.platform.spigot.world.manager;
|
|
||||||
|
|
||||||
import com.viaversion.viaversion.api.Via;
|
|
||||||
import com.viaversion.viaversion.protocols.protocol1_13to1_12_2.storage.BlockStorage;
|
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
import org.bukkit.plugin.Plugin;
|
|
||||||
import org.geysermc.geyser.adapters.spigot.SpigotAdapters;
|
|
||||||
import org.geysermc.geyser.adapters.spigot.SpigotWorldAdapter;
|
|
||||||
import org.geysermc.geyser.level.block.BlockStateValues;
|
|
||||||
import org.geysermc.geyser.session.GeyserSession;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Used with ViaVersion and pre-1.13.
|
|
||||||
*/
|
|
||||||
public class GeyserSpigot1_12NativeWorldManager extends GeyserSpigot1_12WorldManager {
|
|
||||||
private final SpigotWorldAdapter adapter;
|
|
||||||
|
|
||||||
public GeyserSpigot1_12NativeWorldManager(Plugin plugin) {
|
|
||||||
super(plugin);
|
|
||||||
this.adapter = SpigotAdapters.getWorldAdapter();
|
|
||||||
// Unlike post-1.13, we can't build up a cache of block states, because block entities need some special conversion
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getBlockAt(GeyserSession session, int x, int y, int z) {
|
|
||||||
Player player = Bukkit.getPlayer(session.getPlayerEntity().getUsername());
|
|
||||||
if (player == null) {
|
|
||||||
return BlockStateValues.JAVA_AIR_ID;
|
|
||||||
}
|
|
||||||
// Get block entity storage
|
|
||||||
BlockStorage storage = Via.getManager().getConnectionManager().getConnectedClient(player.getUniqueId()).get(BlockStorage.class);
|
|
||||||
int blockId = adapter.getBlockAt(player.getWorld(), x, y, z);
|
|
||||||
return getLegacyBlock(storage, blockId, x, y, z);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,125 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright (c) 2019-2022 GeyserMC. http://geysermc.org
|
|
||||||
*
|
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
* of this software and associated documentation files (the "Software"), to deal
|
|
||||||
* in the Software without restriction, including without limitation the rights
|
|
||||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
* copies of the Software, and to permit persons to whom the Software is
|
|
||||||
* furnished to do so, subject to the following conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be included in
|
|
||||||
* all copies or substantial portions of the Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
||||||
* THE SOFTWARE.
|
|
||||||
*
|
|
||||||
* @author GeyserMC
|
|
||||||
* @link https://github.com/GeyserMC/Geyser
|
|
||||||
*/
|
|
||||||
|
|
||||||
package org.geysermc.geyser.platform.spigot.world.manager;
|
|
||||||
|
|
||||||
import com.viaversion.viaversion.api.Via;
|
|
||||||
import com.viaversion.viaversion.api.data.MappingData;
|
|
||||||
import com.viaversion.viaversion.api.minecraft.Position;
|
|
||||||
import com.viaversion.viaversion.api.protocol.ProtocolPathEntry;
|
|
||||||
import com.viaversion.viaversion.api.protocol.version.ProtocolVersion;
|
|
||||||
import com.viaversion.viaversion.protocols.protocol1_13to1_12_2.Protocol1_13To1_12_2;
|
|
||||||
import com.viaversion.viaversion.protocols.protocol1_13to1_12_2.storage.BlockStorage;
|
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.block.Block;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
import org.bukkit.plugin.Plugin;
|
|
||||||
import org.geysermc.geyser.level.block.BlockStateValues;
|
|
||||||
import org.geysermc.geyser.session.GeyserSession;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Should be used when ViaVersion is present, no NMS adapter is being used, and we are pre-1.13.
|
|
||||||
*
|
|
||||||
* You need ViaVersion to connect to an older server with the Geyser-Spigot plugin.
|
|
||||||
*/
|
|
||||||
public class GeyserSpigot1_12WorldManager extends GeyserSpigotWorldManager {
|
|
||||||
/**
|
|
||||||
* Specific mapping data for 1.12 to 1.13. Used to convert the 1.12 block into the 1.13 block state.
|
|
||||||
* (Block IDs did not change between server versions until 1.13 and after)
|
|
||||||
*/
|
|
||||||
private final MappingData mappingData1_12to1_13;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The list of all protocols from the client's version to 1.13.
|
|
||||||
*/
|
|
||||||
private final List<ProtocolPathEntry> protocolList;
|
|
||||||
|
|
||||||
public GeyserSpigot1_12WorldManager(Plugin plugin) {
|
|
||||||
super(plugin);
|
|
||||||
this.mappingData1_12to1_13 = Via.getManager().getProtocolManager().getProtocol(Protocol1_13To1_12_2.class).getMappingData();
|
|
||||||
this.protocolList = Via.getManager().getProtocolManager().getProtocolPath(CLIENT_PROTOCOL_VERSION,
|
|
||||||
ProtocolVersion.v1_13.getVersion());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getBlockAt(GeyserSession session, int x, int y, int z) {
|
|
||||||
Player player = Bukkit.getPlayer(session.getPlayerEntity().getUsername());
|
|
||||||
if (player == null) {
|
|
||||||
return BlockStateValues.JAVA_AIR_ID;
|
|
||||||
}
|
|
||||||
if (!player.getWorld().isChunkLoaded(x >> 4, z >> 4)) {
|
|
||||||
// Prevent nasty async errors if a player is loading in
|
|
||||||
return BlockStateValues.JAVA_AIR_ID;
|
|
||||||
}
|
|
||||||
|
|
||||||
Block block = player.getWorld().getBlockAt(x, y, z);
|
|
||||||
return getBlockNetworkId(player, block, x, y, z);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
@SuppressWarnings("deprecation")
|
|
||||||
public int getBlockNetworkId(Player player, Block block, int x, int y, int z) {
|
|
||||||
// Get block entity storage
|
|
||||||
BlockStorage storage = Via.getManager().getConnectionManager().getConnectedClient(player.getUniqueId()).get(BlockStorage.class);
|
|
||||||
// Black magic that gets the old block state ID
|
|
||||||
int oldBlockId = (block.getType().getId() << 4) | (block.getData() & 0xF);
|
|
||||||
return getLegacyBlock(storage, oldBlockId, x, y, z);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* @param storage ViaVersion's block entity storage (used to fix block entity state differences)
|
|
||||||
* @param blockId the pre-1.13 block id
|
|
||||||
* @param x X coordinate of block
|
|
||||||
* @param y Y coordinate of block
|
|
||||||
* @param z Z coordinate of block
|
|
||||||
* @return the block state updated to the latest Minecraft version
|
|
||||||
*/
|
|
||||||
public int getLegacyBlock(BlockStorage storage, int blockId, int x, int y, int z) {
|
|
||||||
// Convert block state from old version (1.12.2) -> 1.13 -> 1.13.1 -> 1.14 -> 1.15 -> 1.16 -> 1.16.2
|
|
||||||
blockId = mappingData1_12to1_13.getNewBlockId(blockId);
|
|
||||||
// Translate block entity differences - some information was stored in block tags and not block states
|
|
||||||
if (storage.isWelcome(blockId)) { // No getOrDefault method
|
|
||||||
BlockStorage.ReplacementData data = storage.get(new Position(x, (short) y, z));
|
|
||||||
if (data != null && data.getReplacement() != -1) {
|
|
||||||
blockId = data.getReplacement();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for (int i = protocolList.size() - 1; i >= 0; i--) {
|
|
||||||
MappingData mappingData = protocolList.get(i).getProtocol().getMappingData();
|
|
||||||
if (mappingData != null) {
|
|
||||||
blockId = mappingData.getNewBlockStateId(blockId);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return blockId;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isLegacy() {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,56 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright (c) 2019-2022 GeyserMC. http://geysermc.org
|
|
||||||
*
|
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
* of this software and associated documentation files (the "Software"), to deal
|
|
||||||
* in the Software without restriction, including without limitation the rights
|
|
||||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
* copies of the Software, and to permit persons to whom the Software is
|
|
||||||
* furnished to do so, subject to the following conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be included in
|
|
||||||
* all copies or substantial portions of the Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
||||||
* THE SOFTWARE.
|
|
||||||
*
|
|
||||||
* @author GeyserMC
|
|
||||||
* @link https://github.com/GeyserMC/Geyser
|
|
||||||
*/
|
|
||||||
|
|
||||||
package org.geysermc.geyser.platform.spigot.world.manager;
|
|
||||||
|
|
||||||
import org.bukkit.plugin.Plugin;
|
|
||||||
import org.geysermc.geyser.level.block.BlockStateValues;
|
|
||||||
import org.geysermc.geyser.session.GeyserSession;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Should only be used when we know {@link GeyserSpigotWorldManager#getBlockAt(GeyserSession, int, int, int)}
|
|
||||||
* cannot be accurate. Typically, this is when ViaVersion is not installed but a client still manages to connect.
|
|
||||||
* If this occurs to you somehow, please let us know!!
|
|
||||||
*/
|
|
||||||
public class GeyserSpigotFallbackWorldManager extends GeyserSpigotWorldManager {
|
|
||||||
public GeyserSpigotFallbackWorldManager(Plugin plugin) {
|
|
||||||
super(plugin);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getBlockAt(GeyserSession session, int x, int y, int z) {
|
|
||||||
return BlockStateValues.JAVA_AIR_ID;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean hasOwnChunkCache() {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isLegacy() {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -33,7 +33,6 @@ import org.bukkit.Bukkit;
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
import org.bukkit.block.Lectern;
|
import org.bukkit.block.Lectern;
|
||||||
import org.bukkit.block.data.BlockData;
|
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
import org.bukkit.inventory.meta.BookMeta;
|
import org.bukkit.inventory.meta.BookMeta;
|
||||||
|
@ -41,7 +40,6 @@ import org.bukkit.plugin.Plugin;
|
||||||
import org.geysermc.geyser.level.GameRule;
|
import org.geysermc.geyser.level.GameRule;
|
||||||
import org.geysermc.geyser.level.GeyserWorldManager;
|
import org.geysermc.geyser.level.GeyserWorldManager;
|
||||||
import org.geysermc.geyser.level.block.BlockStateValues;
|
import org.geysermc.geyser.level.block.BlockStateValues;
|
||||||
import org.geysermc.geyser.network.GameProtocol;
|
|
||||||
import org.geysermc.geyser.registry.BlockRegistries;
|
import org.geysermc.geyser.registry.BlockRegistries;
|
||||||
import org.geysermc.geyser.session.GeyserSession;
|
import org.geysermc.geyser.session.GeyserSession;
|
||||||
import org.geysermc.geyser.translator.inventory.LecternInventoryTranslator;
|
import org.geysermc.geyser.translator.inventory.LecternInventoryTranslator;
|
||||||
|
@ -54,11 +52,6 @@ import java.util.List;
|
||||||
* The base world manager to use when there is no supported NMS revision
|
* The base world manager to use when there is no supported NMS revision
|
||||||
*/
|
*/
|
||||||
public class GeyserSpigotWorldManager extends GeyserWorldManager {
|
public class GeyserSpigotWorldManager extends GeyserWorldManager {
|
||||||
/**
|
|
||||||
* The current client protocol version for ViaVersion usage.
|
|
||||||
*/
|
|
||||||
protected static final int CLIENT_PROTOCOL_VERSION = GameProtocol.getJavaProtocolVersion();
|
|
||||||
|
|
||||||
private final Plugin plugin;
|
private final Plugin plugin;
|
||||||
|
|
||||||
public GeyserSpigotWorldManager(Plugin plugin) {
|
public GeyserSpigotWorldManager(Plugin plugin) {
|
||||||
|
@ -77,10 +70,10 @@ public class GeyserSpigotWorldManager extends GeyserWorldManager {
|
||||||
return BlockStateValues.JAVA_AIR_ID;
|
return BlockStateValues.JAVA_AIR_ID;
|
||||||
}
|
}
|
||||||
|
|
||||||
return getBlockNetworkId(bukkitPlayer, world.getBlockAt(x, y, z), x, y, z);
|
return getBlockNetworkId(world.getBlockAt(x, y, z));
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getBlockNetworkId(Player player, Block block, int x, int y, int z) {
|
public int getBlockNetworkId(Block block) {
|
||||||
return BlockRegistries.JAVA_IDENTIFIERS.getOrDefault(block.getBlockData().getAsString(), BlockStateValues.JAVA_AIR_ID);
|
return BlockRegistries.JAVA_IDENTIFIERS.getOrDefault(block.getBlockData().getAsString(), BlockStateValues.JAVA_AIR_ID);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -181,8 +174,6 @@ public class GeyserSpigotWorldManager extends GeyserWorldManager {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This must be set to true if we are pre-1.13, and {@link BlockData#getAsString() does not exist}.
|
|
||||||
*
|
|
||||||
* This should be set to true if we are post-1.13 but before the latest version, and we should convert the old block state id
|
* This should be set to true if we are post-1.13 but before the latest version, and we should convert the old block state id
|
||||||
* to the current one.
|
* to the current one.
|
||||||
*
|
*
|
||||||
|
|
Loading…
Reference in New Issue