3
0
Mirror von https://github.com/ViaVersion/ViaVersion.git synchronisiert 2024-12-26 00:00:28 +01:00

Start work on ViaVersion 5.0.0

Bump Java target to 17, clean up using its new language features
Remove unnecessary checked exception throwing
Remove deprecated code
Dieser Commit ist enthalten in:
Nassim Jahnke 2021-08-28 16:50:52 +02:00
Ursprung 2d41eb52a6
Commit 75db1a7cdf
Es konnte kein GPG-Schlüssel zu dieser Signatur gefunden werden
GPG-Schlüssel-ID: EF6771C01F6EF02F
371 geänderte Dateien mit 1486 neuen und 5001 gelöschten Zeilen

Datei anzeigen

@ -73,6 +73,8 @@ Building
After cloning this repository, build the project with Gradle by running `./gradlew build` and take the created jar out After cloning this repository, build the project with Gradle by running `./gradlew build` and take the created jar out
of the `build/libs` directory. of the `build/libs` directory.
You need JDK 17 or newer to build ViaVersion.
Mapping Files Mapping Files
-------------- --------------

Datei anzeigen

@ -1,3 +0,0 @@
dependencies {
compileOnly(projects.viaversionApi)
}

Datei anzeigen

@ -1,101 +0,0 @@
/*
* This file is part of ViaVersion - https://github.com/ViaVersion/ViaVersion
* Copyright (C) 2016-2024 ViaVersion and contributors
*
* 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.
*/
package us.myles.ViaVersion.api;
import io.netty.buffer.ByteBuf;
import java.util.SortedSet;
import java.util.UUID;
import us.myles.ViaVersion.api.boss.BossBar;
import us.myles.ViaVersion.api.boss.BossColor;
import us.myles.ViaVersion.api.boss.BossStyle;
/**
* @deprecated may be removed at some point, use {@link com.viaversion.viaversion.api.Via}
*/
@Deprecated
public class Via<T> implements ViaAPI<T> {
private static final ViaAPI INSTANCE = new Via();
private Via() {
}
@Deprecated
public static ViaAPI getAPI() {
return INSTANCE;
}
@Override
public int getPlayerVersion(T player) {
return com.viaversion.viaversion.api.Via.getAPI().getPlayerVersion(player);
}
@Override
public int getPlayerVersion(UUID uuid) {
return com.viaversion.viaversion.api.Via.getAPI().getPlayerVersion(uuid);
}
@Override
public boolean isInjected(UUID playerUUID) {
return com.viaversion.viaversion.api.Via.getAPI().isInjected(playerUUID);
}
@Override
public String getVersion() {
return com.viaversion.viaversion.api.Via.getAPI().getVersion();
}
@Override
public void sendRawPacket(T player, ByteBuf packet) {
com.viaversion.viaversion.api.Via.getAPI().sendRawPacket(player, packet);
}
@Override
public void sendRawPacket(UUID uuid, ByteBuf packet) {
com.viaversion.viaversion.api.Via.getAPI().sendRawPacket(uuid, packet);
}
@Override
public BossBar createBossBar(String title, BossColor color, BossStyle style) {
return new BossBar(com.viaversion.viaversion.api.Via.getAPI().legacyAPI().createLegacyBossBar(title,
com.viaversion.viaversion.api.legacy.bossbar.BossColor.values()[color.ordinal()],
com.viaversion.viaversion.api.legacy.bossbar.BossStyle.values()[style.ordinal()]));
}
@Override
public BossBar createBossBar(String title, float health, BossColor color, BossStyle style) {
return new BossBar(com.viaversion.viaversion.api.Via.getAPI().legacyAPI().createLegacyBossBar(title, health,
com.viaversion.viaversion.api.legacy.bossbar.BossColor.values()[color.ordinal()],
com.viaversion.viaversion.api.legacy.bossbar.BossStyle.values()[style.ordinal()]));
}
@Override
public SortedSet<Integer> getSupportedVersions() {
return com.viaversion.viaversion.api.Via.getAPI().getSupportedVersions();
}
@Override
public SortedSet<Integer> getFullSupportedVersions() {
return com.viaversion.viaversion.api.Via.getAPI().getFullSupportedVersions();
}
}

Datei anzeigen

@ -1,62 +0,0 @@
/*
* This file is part of ViaVersion - https://github.com/ViaVersion/ViaVersion
* Copyright (C) 2016-2024 ViaVersion and contributors
*
* 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.
*/
package us.myles.ViaVersion.api;
import com.viaversion.viaversion.api.Via;
import io.netty.buffer.ByteBuf;
import java.util.SortedSet;
import java.util.UUID;
import us.myles.ViaVersion.api.boss.BossBar;
import us.myles.ViaVersion.api.boss.BossColor;
import us.myles.ViaVersion.api.boss.BossStyle;
/**
* @deprecated may be removed at some point, use {@link Via#getAPI()}
*/
@Deprecated
public interface ViaAPI<T> {
int getPlayerVersion(T player);
int getPlayerVersion(UUID uuid);
default boolean isPorted(UUID playerUUID) {
return isInjected(playerUUID);
}
boolean isInjected(UUID playerUUID);
String getVersion();
void sendRawPacket(T player, ByteBuf packet);
void sendRawPacket(UUID uuid, ByteBuf packet);
BossBar createBossBar(String title, BossColor color, BossStyle style);
BossBar createBossBar(String title, float health, BossColor color, BossStyle style);
SortedSet<Integer> getSupportedVersions();
SortedSet<Integer> getFullSupportedVersions();
}

Datei anzeigen

@ -1,133 +0,0 @@
/*
* This file is part of ViaVersion - https://github.com/ViaVersion/ViaVersion
* Copyright (C) 2016-2024 ViaVersion and contributors
*
* 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.
*/
package us.myles.ViaVersion.api.boss;
import java.util.Set;
import java.util.UUID;
@Deprecated
public class BossBar<T> {
private final com.viaversion.viaversion.api.legacy.bossbar.BossBar bossBar;
public BossBar(com.viaversion.viaversion.api.legacy.bossbar.BossBar bossBar) {
this.bossBar = bossBar;
}
public String getTitle() {
return bossBar.getTitle();
}
public BossBar setTitle(String title) {
bossBar.setTitle(title);
return this;
}
public float getHealth() {
return bossBar.getHealth();
}
public BossBar setHealth(float health) {
bossBar.setHealth(health);
return this;
}
public BossColor getColor() {
return BossColor.values()[bossBar.getColor().ordinal()];
}
public BossBar setColor(BossColor color) {
bossBar.setColor(com.viaversion.viaversion.api.legacy.bossbar.BossColor.values()[color.ordinal()]);
return this;
}
public BossStyle getStyle() {
return BossStyle.values()[bossBar.getStyle().ordinal()];
}
public BossBar setStyle(BossStyle style) {
bossBar.setStyle(com.viaversion.viaversion.api.legacy.bossbar.BossStyle.values()[style.ordinal()]);
return this;
}
@Deprecated
public BossBar addPlayer(T player) {
return this;
}
public BossBar addPlayer(UUID player) {
bossBar.addPlayer(player);
return this;
}
@Deprecated
public BossBar addPlayers(T... players) {
return this;
}
@Deprecated
public BossBar removePlayer(T player) {
return this;
}
public BossBar removePlayer(UUID uuid) {
bossBar.removePlayer(uuid);
return this;
}
public BossBar addFlag(BossFlag flag) {
bossBar.addFlag(com.viaversion.viaversion.api.legacy.bossbar.BossFlag.values()[flag.ordinal()]);
return this;
}
public BossBar removeFlag(BossFlag flag) {
bossBar.removeFlag(com.viaversion.viaversion.api.legacy.bossbar.BossFlag.values()[flag.ordinal()]);
return this;
}
public boolean hasFlag(BossFlag flag) {
return bossBar.hasFlag(com.viaversion.viaversion.api.legacy.bossbar.BossFlag.values()[flag.ordinal()]);
}
public Set<UUID> getPlayers() {
return bossBar.getPlayers();
}
public BossBar show() {
bossBar.show();
return this;
}
public BossBar hide() {
bossBar.hide();
return this;
}
public boolean isVisible() {
return bossBar.isVisible();
}
public UUID getId() {
return bossBar.getId();
}
}

Datei anzeigen

@ -1,45 +0,0 @@
/*
* This file is part of ViaVersion - https://github.com/ViaVersion/ViaVersion
* Copyright (C) 2016-2024 ViaVersion and contributors
*
* 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.
*/
package us.myles.ViaVersion.api.boss;
@Deprecated
public enum BossColor {
PINK(0),
BLUE(1),
RED(2),
GREEN(3),
YELLOW(4),
PURPLE(5),
WHITE(6);
private final int id;
BossColor(int id) {
this.id = id;
}
public int getId() {
return id;
}
}

Datei anzeigen

@ -1,40 +0,0 @@
/*
* This file is part of ViaVersion - https://github.com/ViaVersion/ViaVersion
* Copyright (C) 2016-2024 ViaVersion and contributors
*
* 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.
*/
package us.myles.ViaVersion.api.boss;
@Deprecated
public enum BossFlag {
DARKEN_SKY(1),
PLAY_BOSS_MUSIC(2);
private final int id;
BossFlag(int id) {
this.id = id;
}
public int getId() {
return id;
}
}

Datei anzeigen

@ -1,43 +0,0 @@
/*
* This file is part of ViaVersion - https://github.com/ViaVersion/ViaVersion
* Copyright (C) 2016-2024 ViaVersion and contributors
*
* 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.
*/
package us.myles.ViaVersion.api.boss;
@Deprecated
public enum BossStyle {
SOLID(0),
SEGMENTED_6(1),
SEGMENTED_10(2),
SEGMENTED_12(3),
SEGMENTED_20(4);
private final int id;
BossStyle(int id) {
this.id = id;
}
public int getId() {
return id;
}
}

Datei anzeigen

@ -1,33 +0,0 @@
/*
* This file is part of ViaVersion - https://github.com/ViaVersion/ViaVersion
* Copyright (C) 2016-2024 ViaVersion and contributors
*
* 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.
*/
package us.myles.ViaVersion.api.protocol;
/**
* @deprecated may be removed at some point, use {@link com.viaversion.viaversion.api.protocol.ProtocolManager}
*/
@Deprecated
public class ProtocolRegistry {
@Deprecated
public static int SERVER_PROTOCOL = -1;
}

Datei anzeigen

@ -1,255 +0,0 @@
/*
* This file is part of ViaVersion - https://github.com/ViaVersion/ViaVersion
* Copyright (C) 2016-2024 ViaVersion and contributors
*
* 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.
*/
package us.myles.ViaVersion.api.protocol;
import com.google.common.base.Preconditions;
import com.viaversion.viaversion.api.protocol.version.SubVersionRange;
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
import java.util.ArrayList;
import java.util.Collections;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
import org.checkerframework.checker.nullness.qual.NonNull;
import org.checkerframework.checker.nullness.qual.Nullable;
/**
* @deprecated will no longer be updated and may be removed at some point, use {@link com.viaversion.viaversion.api.protocol.version.ProtocolVersion}
*/
@Deprecated
public class ProtocolVersion {
private static final Int2ObjectMap<ProtocolVersion> versions = new Int2ObjectOpenHashMap<>();
private static final List<ProtocolVersion> versionList = new ArrayList<>();
public static final ProtocolVersion v1_4_6 = register(51, "1.4.6/7", new SubVersionRange("1.4", 6, 7));
public static final ProtocolVersion v1_5_1 = register(60, "1.5.1");
public static final ProtocolVersion v1_5_2 = register(61, "1.5.2");
public static final ProtocolVersion v_1_6_1 = register(73, "1.6.1");
public static final ProtocolVersion v_1_6_2 = register(74, "1.6.2");
public static final ProtocolVersion v_1_6_3 = register(77, "1.6.3");
public static final ProtocolVersion v_1_6_4 = register(78, "1.6.4");
public static final ProtocolVersion v1_7_1 = register(4, "1.7-1.7.5", new SubVersionRange("1.7", 0, 5));
public static final ProtocolVersion v1_7_6 = register(5, "1.7.6-1.7.10", new SubVersionRange("1.7", 6, 10));
public static final ProtocolVersion v1_8 = register(47, "1.8.x");
public static final ProtocolVersion v1_9 = register(107, "1.9");
public static final ProtocolVersion v1_9_1 = register(108, "1.9.1");
public static final ProtocolVersion v1_9_2 = register(109, "1.9.2");
public static final ProtocolVersion v1_9_3 = register(110, "1.9.3/1.9.4", new SubVersionRange("1.9", 3, 4));
public static final ProtocolVersion v1_10 = register(210, "1.10.x");
public static final ProtocolVersion v1_11 = register(315, "1.11");
public static final ProtocolVersion v1_11_1 = register(316, "1.11.1/1.11.2", new SubVersionRange("1.11", 1, 2));
public static final ProtocolVersion v1_12 = register(335, "1.12");
public static final ProtocolVersion v1_12_1 = register(338, "1.12.1");
public static final ProtocolVersion v1_12_2 = register(340, "1.12.2");
public static final ProtocolVersion v1_13 = register(393, "1.13");
public static final ProtocolVersion v1_13_1 = register(401, "1.13.1");
public static final ProtocolVersion v1_13_2 = register(404, "1.13.2");
public static final ProtocolVersion v1_14 = register(477, "1.14");
public static final ProtocolVersion v1_14_1 = register(480, "1.14.1");
public static final ProtocolVersion v1_14_2 = register(485, "1.14.2");
public static final ProtocolVersion v1_14_3 = register(490, "1.14.3");
public static final ProtocolVersion v1_14_4 = register(498, "1.14.4");
public static final ProtocolVersion v1_15 = register(573, "1.15");
public static final ProtocolVersion v1_15_1 = register(575, "1.15.1");
public static final ProtocolVersion v1_15_2 = register(578, "1.15.2");
public static final ProtocolVersion v1_16 = register(735, "1.16");
public static final ProtocolVersion v1_16_1 = register(736, "1.16.1");
public static final ProtocolVersion v1_16_2 = register(751, "1.16.2");
public static final ProtocolVersion v1_16_3 = register(753, "1.16.3");
public static final ProtocolVersion v1_16_4 = register(754, "1.16.4/1.16.5", new SubVersionRange("1.16", 4, 5));
public static final ProtocolVersion v1_17 = register(755, "1.17");
public static final ProtocolVersion v1_17_1 = register(756, "1.17.1");
public static final ProtocolVersion v1_18 = register(757, "1.18/1.18.1", new SubVersionRange("1.18", 0, 1));
public static final ProtocolVersion v1_18_2 = register(758, "1.18.2");
public static final ProtocolVersion v1_19 = register(759, "1.19");
public static final ProtocolVersion v1_19_1 = register(760, "1.19.1/1.19.2", new SubVersionRange("1.19", 1, 2));
public static final ProtocolVersion v1_19_3 = register(761, "1.19.3");
public static final ProtocolVersion v1_19_4 = register(762, "1.19.4");
public static final ProtocolVersion v1_20 = register(763, "1.20/1.20.1", new SubVersionRange("1.20", 0, 1));
public static final ProtocolVersion v1_20_2 = register(764, "1.20.2");
public static final ProtocolVersion v1_20_3 = register(765, "1.20.3/1.20.4", new SubVersionRange("1.20", 3, 4));
public static final ProtocolVersion v1_20_5 = register(766, "1.20.5");
public static final ProtocolVersion unknown = register(-1, "UNKNOWN");
public static ProtocolVersion register(int version, String name) {
return register(version, -1, name);
}
public static ProtocolVersion register(int version, int snapshotVersion, String name) {
return register(version, snapshotVersion, name, null);
}
public static ProtocolVersion register(int version, String name, @Nullable SubVersionRange versionRange) {
return register(version, -1, name, versionRange);
}
public static ProtocolVersion register(int version, int snapshotVersion, String name, @Nullable SubVersionRange versionRange) {
ProtocolVersion protocol = new ProtocolVersion(version, snapshotVersion, name, versionRange);
versionList.add(protocol);
versions.put(protocol.getVersion(), protocol);
if (protocol.isSnapshot()) {
versions.put(protocol.getFullSnapshotVersion(), protocol);
}
return protocol;
}
public static boolean isRegistered(int id) {
return versions.containsKey(id);
}
public static @NonNull ProtocolVersion getProtocol(int id) {
ProtocolVersion protocolVersion = versions.get(id);
if (protocolVersion != null) {
return protocolVersion;
} else {
return new ProtocolVersion(id, "Unknown (" + id + ")");
}
}
public static int getIndex(ProtocolVersion version) {
return versionList.indexOf(version);
}
public static List<ProtocolVersion> getProtocols() {
return Collections.unmodifiableList(new ArrayList<>(versions.values()));
}
public static @Nullable ProtocolVersion getClosest(String protocol) {
for (ProtocolVersion version : versions.values()) {
String name = version.getName();
if (name.equals(protocol)) {
return version;
}
if (version.isVersionWildcard()) {
// Test against the major version with and without a minor version
String majorVersion = name.substring(0, name.length() - 2);
if (majorVersion.equals(protocol) || (protocol.startsWith(name.substring(0, name.length() - 1)))) {
return version;
}
} else if (version.isRange()) {
if (version.getIncludedVersions().contains(protocol)) {
return version;
}
}
}
return null;
}
private final int version;
private final int snapshotVersion;
private final String name;
private final boolean versionWildcard;
private final Set<String> includedVersions;
public ProtocolVersion(int version, String name) {
this(version, -1, name, null);
}
public ProtocolVersion(int version, int snapshotVersion, String name, @Nullable SubVersionRange versionRange) {
this.version = version;
this.snapshotVersion = snapshotVersion;
this.name = name;
this.versionWildcard = name.endsWith(".x");
Preconditions.checkArgument(!versionWildcard || versionRange == null, "A version cannot be a wildcard and a range at the same time!");
if (versionRange != null) {
includedVersions = new LinkedHashSet<>();
for (int i = versionRange.rangeFrom(); i <= versionRange.rangeTo(); i++) {
if (i == 0) {
includedVersions.add(versionRange.baseVersion()); // Keep both the base version and with ".0" appended
}
includedVersions.add(versionRange.baseVersion() + "." + i);
}
} else {
includedVersions = Collections.singleton(name);
}
}
public int getVersion() {
return version;
}
public int getSnapshotVersion() {
Preconditions.checkArgument(isSnapshot());
return snapshotVersion;
}
public int getFullSnapshotVersion() {
Preconditions.checkArgument(isSnapshot());
return (1 << 30) | snapshotVersion; // Bit indicating snapshot versions
}
public int getOriginalVersion() {
return snapshotVersion == -1 ? version : ((1 << 30) | snapshotVersion);
}
public boolean isKnown() {
return version != -1;
}
public boolean isRange() {
return includedVersions.size() != 1;
}
public Set<String> getIncludedVersions() {
return Collections.unmodifiableSet(includedVersions);
}
public boolean isVersionWildcard() {
return versionWildcard;
}
public String getName() {
return name;
}
public boolean isSnapshot() {
return snapshotVersion != -1;
}
public int getId() {
return version;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
ProtocolVersion that = (ProtocolVersion) o;
return version == that.version;
}
@Override
public int hashCode() {
return version;
}
@Override
public String toString() {
return String.format("%s (%d)", this.name, this.version);
}
}

Datei anzeigen

@ -56,7 +56,7 @@ public interface ViaAPI<T> {
* @since 4.0.2 * @since 4.0.2
*/ */
default int majorVersion() { default int majorVersion() {
return 4; return 5;
} }
/** /**

Datei anzeigen

@ -26,21 +26,21 @@ import com.viaversion.viaversion.util.ChatColorUtil;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
public abstract class ViaSubCommand { public interface ViaSubCommand {
/** /**
* Subcommand name * Subcommand name
* *
* @return The commands name * @return The commands name
*/ */
public abstract String name(); String name();
/** /**
* subcommand description, this'll show in /viaversion list * subcommand description, this'll show in /viaversion list
* *
* @return The commands description * @return The commands description
*/ */
public abstract String description(); String description();
/** /**
* Usage example: * Usage example:
@ -48,7 +48,7 @@ public abstract class ViaSubCommand {
* *
* @return The commands usage * @return The commands usage
*/ */
public String usage() { default String usage() {
return name(); return name();
} }
@ -57,7 +57,7 @@ public abstract class ViaSubCommand {
* *
* @return The permission required to use the commands * @return The permission required to use the commands
*/ */
public String permission() { default String permission() {
return "viaversion.admin." + name(); return "viaversion.admin." + name();
} }
@ -68,7 +68,7 @@ public abstract class ViaSubCommand {
* @param args Arguments * @param args Arguments
* @return commands executed succesfully if false, show usage * @return commands executed succesfully if false, show usage
*/ */
public abstract boolean execute(ViaCommandSender sender, String[] args); boolean execute(ViaCommandSender sender, String[] args);
/** /**
* Yay, possibility to implement tab-completion * Yay, possibility to implement tab-completion
@ -77,7 +77,7 @@ public abstract class ViaSubCommand {
* @param args args * @param args args
* @return tab complete possibilities * @return tab complete possibilities
*/ */
public List<String> onTabComplete(ViaCommandSender sender, String[] args) { default List<String> onTabComplete(ViaCommandSender sender, String[] args) {
return Collections.emptyList(); return Collections.emptyList();
} }
@ -87,7 +87,7 @@ public abstract class ViaSubCommand {
* @param s string to replace * @param s string to replace
* @return output String * @return output String
*/ */
public static String color(String s) { static String color(String s) {
return ChatColorUtil.translateAlternateColorCodes(s); return ChatColorUtil.translateAlternateColorCodes(s);
} }
@ -98,7 +98,7 @@ public abstract class ViaSubCommand {
* @param message message * @param message message
* @param args objects to replace * @param args objects to replace
*/ */
public static void sendMessage(ViaCommandSender sender, String message, Object... args) { default void sendMessage(ViaCommandSender sender, String message, Object... args) {
sender.sendMessage(color(args == null ? message : String.format(message, args))); sender.sendMessage(color(args == null ? message : String.format(message, args)));
} }
} }

Datei anzeigen

@ -30,7 +30,7 @@ public interface ViaVersionCommand {
* Register your own subcommand inside ViaVersion * Register your own subcommand inside ViaVersion
* *
* @param command Your own SubCommand instance to handle it. * @param command Your own SubCommand instance to handle it.
* @throws Exception throws an exception when the subcommand already exists or if it's not valid, example: spacee * @throws IllegalArgumentException throws an exception when the subcommand already exists or if it's not valid, example: spacee
*/ */
void registerSubCommand(ViaSubCommand command); void registerSubCommand(ViaSubCommand command);

Datei anzeigen

@ -27,6 +27,7 @@ import com.viaversion.viaversion.api.connection.StorableObject;
import com.viaversion.viaversion.api.connection.UserConnection; import com.viaversion.viaversion.api.connection.UserConnection;
import com.viaversion.viaversion.api.minecraft.WorldIdentifiers; import com.viaversion.viaversion.api.minecraft.WorldIdentifiers;
import com.viaversion.viaversion.api.protocol.version.BlockedProtocolVersions; import com.viaversion.viaversion.api.protocol.version.BlockedProtocolVersions;
import org.checkerframework.checker.nullness.qual.Nullable;
public interface ViaVersionConfig extends Config { public interface ViaVersionConfig extends Config {

Datei anzeigen

@ -31,17 +31,6 @@ import org.checkerframework.checker.nullness.qual.Nullable;
public interface ProtocolInfo { public interface ProtocolInfo {
/**
* Returns the protocol state the user is currently in.
*
* @return protocol state
* @deprecated server and client can be in different states, use {@link #getClientState()} or {@link #getServerState()}
*/
@Deprecated/*(forRemoval = true)*/
default State getState() {
return this.getServerState();
}
/** /**
* Returns the protocol state the client is currently in. * Returns the protocol state the client is currently in.
* *
@ -153,12 +142,4 @@ public interface ProtocolInfo {
ProtocolPipeline getPipeline(); ProtocolPipeline getPipeline();
void setPipeline(ProtocolPipeline pipeline); void setPipeline(ProtocolPipeline pipeline);
}
/**
* Returns the user connection this info represents.
*
* @return user connection
*/
@Deprecated/*(forRemoval = true)*/
UserConnection getUser();
}

Datei anzeigen

@ -27,11 +27,11 @@ import com.viaversion.viaversion.api.data.entity.EntityTracker;
import com.viaversion.viaversion.api.protocol.Protocol; import com.viaversion.viaversion.api.protocol.Protocol;
import com.viaversion.viaversion.api.protocol.packet.PacketTracker; import com.viaversion.viaversion.api.protocol.packet.PacketTracker;
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper; import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
import com.viaversion.viaversion.exception.CancelException;
import com.viaversion.viaversion.exception.InformativeException; import com.viaversion.viaversion.exception.InformativeException;
import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBuf;
import io.netty.channel.Channel; import io.netty.channel.Channel;
import io.netty.channel.ChannelFuture; import io.netty.channel.ChannelFuture;
import io.netty.handler.codec.CodecException;
import java.util.Collection; import java.util.Collection;
import java.util.Map; import java.util.Map;
import java.util.UUID; import java.util.UUID;
@ -205,11 +205,10 @@ public interface UserConnection {
* *
* @param buf ByteBuf with packet id and packet contents * @param buf ByteBuf with packet id and packet contents
* @param cancelSupplier function called with original CancelException for generating the Exception when the packet is cancelled * @param cancelSupplier function called with original CancelException for generating the Exception when the packet is cancelled
* @throws CancelException if the packet should be cancelled * @throws CodecException if the packet should be cancelled (by netty)
* @throws InformativeException if packet transforming failed * @throws InformativeException if packet transforming failed
* @throws Exception if any other processing outside of transforming fails
*/ */
void transformClientbound(ByteBuf buf, Function<Throwable, Exception> cancelSupplier) throws Exception; void transformClientbound(ByteBuf buf, Function<Throwable, CodecException> cancelSupplier) throws InformativeException;
/** /**
* Transforms the serverbound packet contained in ByteBuf. * Transforms the serverbound packet contained in ByteBuf.
@ -217,11 +216,10 @@ public interface UserConnection {
* @param buf ByteBuf with packet id and packet contents * @param buf ByteBuf with packet id and packet contents
* @param cancelSupplier Function called with original CancelException for generating the Exception used when * @param cancelSupplier Function called with original CancelException for generating the Exception used when
* packet is cancelled * packet is cancelled
* @throws CancelException if the packet should be cancelled * @throws CodecException if the packet should be cancelled (by netty)
* @throws InformativeException if packet transforming failed * @throws InformativeException if packet transforming failed
* @throws Exception if any other processing outside of transforming fails
*/ */
void transformServerbound(ByteBuf buf, Function<Throwable, Exception> cancelSupplier) throws Exception; void transformServerbound(ByteBuf buf, Function<Throwable, CodecException> cancelSupplier) throws InformativeException;
/** /**
* Transforms the packet depending on whether the connection is clientside or not. * Transforms the packet depending on whether the connection is clientside or not.
@ -229,7 +227,7 @@ public interface UserConnection {
* @see #transformClientbound(ByteBuf, Function) * @see #transformClientbound(ByteBuf, Function)
* @see #transformServerbound(ByteBuf, Function) * @see #transformServerbound(ByteBuf, Function)
*/ */
default void transformOutgoing(ByteBuf buf, Function<Throwable, Exception> cancelSupplier) throws Exception { default void transformOutgoing(ByteBuf buf, Function<Throwable, CodecException> cancelSupplier) throws InformativeException {
if (isClientSide()) { if (isClientSide()) {
transformServerbound(buf, cancelSupplier); transformServerbound(buf, cancelSupplier);
} else { } else {
@ -243,7 +241,7 @@ public interface UserConnection {
* @see #transformClientbound(ByteBuf, Function) * @see #transformClientbound(ByteBuf, Function)
* @see #transformServerbound(ByteBuf, Function) * @see #transformServerbound(ByteBuf, Function)
*/ */
default void transformIncoming(ByteBuf buf, Function<Throwable, Exception> cancelSupplier) throws Exception { default void transformIncoming(ByteBuf buf, Function<Throwable, CodecException> cancelSupplier) throws InformativeException {
if (isClientSide()) { if (isClientSide()) {
transformClientbound(buf, cancelSupplier); transformClientbound(buf, cancelSupplier);
} else { } else {
@ -315,20 +313,6 @@ public interface UserConnection {
*/ */
boolean shouldApplyBlockProtocol(); boolean shouldApplyBlockProtocol();
/**
* Returns whether the packet limiter applies to this user.
*
* @return whether the packet limiter applies to this user
*/
boolean isPacketLimiterEnabled();
/**
* Sets the status of the packet limiter.
*
* @param packetLimiterEnabled whether the packet limiter should be enabled
*/
void setPacketLimiterEnabled(boolean packetLimiterEnabled);
/** /**
* Returns a newly generated uuid that will let a packet be passed through without * Returns a newly generated uuid that will let a packet be passed through without
* transformig its contents if used together with {@link PacketWrapper#PASSTHROUGH_ID}. * transformig its contents if used together with {@link PacketWrapper#PASSTHROUGH_ID}.

Datei anzeigen

@ -22,15 +22,7 @@
*/ */
package com.viaversion.viaversion.api.data; package com.viaversion.viaversion.api.data;
public class IdentityMappings implements Mappings { public record IdentityMappings(int size, int mappedSize) implements Mappings {
private final int size;
private final int mappedSize;
public IdentityMappings(final int size, final int mappedSize) {
this.size = size;
this.mappedSize = mappedSize;
}
@Override @Override
public int getNewId(final int id) { public int getNewId(final int id) {
@ -42,16 +34,6 @@ public class IdentityMappings implements Mappings {
throw new UnsupportedOperationException(); throw new UnsupportedOperationException();
} }
@Override
public int size() {
return size;
}
@Override
public int mappedSize() {
return mappedSize;
}
@Override @Override
public Mappings inverse() { public Mappings inverse() {
return new IdentityMappings(mappedSize, size); return new IdentityMappings(mappedSize, size);

Datei anzeigen

@ -29,7 +29,6 @@ import com.viaversion.viaversion.api.protocol.packet.PacketType;
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper; import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
import java.util.logging.Level; import java.util.logging.Level;
@Beta
public interface DebugHandler { public interface DebugHandler {
/** /**
@ -51,6 +50,7 @@ public interface DebugHandler {
* *
* @param packetTypeName packet type name * @param packetTypeName packet type name
*/ */
@Beta
void addPacketTypeNameToLog(String packetTypeName); void addPacketTypeNameToLog(String packetTypeName);
/** /**
@ -59,6 +59,7 @@ public interface DebugHandler {
* *
* @param packetType packet type * @param packetType packet type
*/ */
@Beta
void addPacketTypeToLog(PacketType packetType); void addPacketTypeToLog(PacketType packetType);
/** /**
@ -66,11 +67,13 @@ public interface DebugHandler {
* *
* @param packetTypeName packet type name * @param packetTypeName packet type name
*/ */
@Beta
boolean removePacketTypeNameToLog(String packetTypeName); boolean removePacketTypeNameToLog(String packetTypeName);
/** /**
* Resets packet type filters. * Resets packet type filters.
*/ */
@Beta
void clearPacketTypesToLog(); void clearPacketTypesToLog();
/** /**
@ -79,6 +82,7 @@ public interface DebugHandler {
* *
* @return whether packets should be logged after being transformed * @return whether packets should be logged after being transformed
*/ */
@Beta
boolean logPostPacketTransform(); boolean logPostPacketTransform();
/** /**
@ -86,6 +90,7 @@ public interface DebugHandler {
* *
* @param logPostPacketTransform whether packets should be logged after being transformed * @param logPostPacketTransform whether packets should be logged after being transformed
*/ */
@Beta
void setLogPostPacketTransform(boolean logPostPacketTransform); void setLogPostPacketTransform(boolean logPostPacketTransform);
/** /**
@ -98,6 +103,7 @@ public interface DebugHandler {
*/ */
boolean shouldLog(PacketWrapper wrapper, Direction direction); boolean shouldLog(PacketWrapper wrapper, Direction direction);
@Beta
default void enableAndLogIds(final PacketType... packetTypes) { default void enableAndLogIds(final PacketType... packetTypes) {
setEnabled(true); setEnabled(true);
for (final PacketType packetType : packetTypes) { for (final PacketType packetType : packetTypes) {

Datei anzeigen

@ -34,7 +34,6 @@ public enum BlockFace {
BOTTOM((byte) 0, (byte) -1, (byte) 0, EnumAxis.Y); BOTTOM((byte) 0, (byte) -1, (byte) 0, EnumAxis.Y);
public static final BlockFace[] HORIZONTAL = {NORTH, SOUTH, EAST, WEST}; public static final BlockFace[] HORIZONTAL = {NORTH, SOUTH, EAST, WEST};
private static final Map<BlockFace, BlockFace> opposites = new EnumMap<>(BlockFace.class); private static final Map<BlockFace, BlockFace> opposites = new EnumMap<>(BlockFace.class);
static { static {
@ -78,26 +77,6 @@ public enum BlockFace {
return axis; return axis;
} }
@Deprecated/*(forRemoval = true)*/
public byte getModX() {
return modX;
}
@Deprecated/*(forRemoval = true)*/
public byte getModY() {
return modY;
}
@Deprecated/*(forRemoval = true)*/
public byte getModZ() {
return modZ;
}
@Deprecated/*(forRemoval = true)*/
public EnumAxis getAxis() {
return axis;
}
public enum EnumAxis { public enum EnumAxis {
X, Y, Z X, Y, Z
} }

Datei anzeigen

@ -38,20 +38,11 @@ public enum Environment {
return id; return id;
} }
@Deprecated/*(forRemoval = true)*/
public int getId() {
return id;
}
public static Environment getEnvironmentById(int id) { public static Environment getEnvironmentById(int id) {
switch (id) { return switch (id) {
default: case 0 -> NORMAL;
case -1: case 1 -> END;
return NETHER; default -> NETHER; // -1 implicitly
case 0: };
return NORMAL;
case 1:
return END;
}
} }
} }

Datei anzeigen

@ -22,41 +22,5 @@
*/ */
package com.viaversion.viaversion.api.minecraft; package com.viaversion.viaversion.api.minecraft;
public class EulerAngle { public record EulerAngle(float x, float y, float z) {
private final float x;
private final float y;
private final float z;
public EulerAngle(final float x, final float y, final float z) {
this.x = x;
this.y = y;
this.z = z;
}
public float x() {
return x;
}
public float y() {
return y;
}
public float z() {
return z;
}
@Deprecated/*(forRemoval = true)*/
public float getX() {
return x;
}
@Deprecated/*(forRemoval = true)*/
public float getY() {
return y;
}
@Deprecated/*(forRemoval = true)*/
public float getZ() {
return z;
}
} }

Datei anzeigen

@ -25,51 +25,8 @@ package com.viaversion.viaversion.api.minecraft;
import java.util.UUID; import java.util.UUID;
import org.checkerframework.checker.nullness.qual.Nullable; import org.checkerframework.checker.nullness.qual.Nullable;
public final class GameProfile { public record GameProfile(@Nullable String name, @Nullable UUID id, Property[] properties) {
private final String name; public record Property(String name, String value, @Nullable String signature) {
private final UUID id;
private final Property[] properties;
public GameProfile(@Nullable final String name, @Nullable final UUID id, final Property[] properties) {
this.name = name;
this.id = id;
this.properties = properties;
}
public @Nullable String name() {
return name;
}
public @Nullable UUID id() {
return id;
}
public Property[] properties() {
return properties;
}
public static final class Property {
private final String name;
private final String value;
private final String signature;
public Property(final String name, final String value, @Nullable final String signature) {
this.name = name;
this.value = value;
this.signature = signature;
}
public String name() {
return name;
}
public String value() {
return value;
}
public @Nullable String signature() {
return signature;
}
} }
} }

Datei anzeigen

@ -37,11 +37,6 @@ public final class Particle implements IdHolder {
this.id = id; this.id = id;
} }
@Deprecated
public int getId() {
return id;
}
@Override @Override
public int id() { public int id() {
return id; return id;
@ -106,7 +101,7 @@ public final class Particle implements IdHolder {
this.value = value; this.value = value;
} }
public void write(final ByteBuf buf) throws Exception { public void write(final ByteBuf buf) {
type.write(buf, value); type.write(buf, value);
} }

Datei anzeigen

@ -24,20 +24,5 @@ package com.viaversion.viaversion.api.minecraft;
import java.util.UUID; import java.util.UUID;
public final class PlayerMessageSignature { public record PlayerMessageSignature(UUID uuid, byte[] signatureBytes) {
private final UUID uuid;
private final byte[] signatureBytes;
public PlayerMessageSignature(final UUID uuid, final byte[] signatureBytes) {
this.uuid = uuid;
this.signatureBytes = signatureBytes;
}
public UUID uuid() {
return uuid;
}
public byte[] signatureBytes() {
return signatureBytes;
}
} }

Datei anzeigen

@ -38,11 +38,6 @@ public class Position {
this(x, (int) y, z); this(x, (int) y, z);
} }
@Deprecated/*(forRemoval=true)*/
public Position(Position toCopy) {
this(toCopy.x(), toCopy.y(), toCopy.z());
}
public Position getRelative(BlockFace face) { public Position getRelative(BlockFace face) {
return new Position(x + face.modX(), (short) (y + face.modY()), z + face.modZ()); return new Position(x + face.modX(), (short) (y + face.modY()), z + face.modZ());
} }
@ -63,21 +58,6 @@ public class Position {
return new GlobalPosition(dimension, x, y, z); return new GlobalPosition(dimension, x, y, z);
} }
@Deprecated/*(forRemoval=true)*/
public int getX() {
return x;
}
@Deprecated/*(forRemoval=true)*/
public int getY() {
return y;
}
@Deprecated/*(forRemoval=true)*/
public int getZ() {
return z;
}
@Override @Override
public boolean equals(final Object o) { public boolean equals(final Object o) {
if (this == o) return true; if (this == o) return true;

Datei anzeigen

@ -22,26 +22,5 @@
*/ */
package com.viaversion.viaversion.api.minecraft; package com.viaversion.viaversion.api.minecraft;
public class Position3d { public record Position3d(double x, double y, double z) {
private final double x;
private final double y;
private final double z;
public Position3d(final double x, final double y, final double z) {
this.x = x;
this.y = y;
this.z = z;
}
public double x() {
return x;
}
public double y() {
return y;
}
public double z() {
return z;
}
} }

Datei anzeigen

@ -22,26 +22,5 @@
*/ */
package com.viaversion.viaversion.api.minecraft; package com.viaversion.viaversion.api.minecraft;
public final class ProfileKey { public record ProfileKey(long expiresAt, byte[] publicKey, byte[] keySignature) {
private final long expiresAt;
private final byte[] publicKey;
private final byte[] keySignature;
public ProfileKey(final long expiresAt, final byte[] publicKey, final byte[] keySignature) {
this.expiresAt = expiresAt;
this.publicKey = publicKey;
this.keySignature = keySignature;
}
public long expiresAt() {
return expiresAt;
}
public byte[] publicKey() {
return publicKey;
}
public byte[] keySignature() {
return keySignature;
}
} }

Datei anzeigen

@ -22,42 +22,5 @@
*/ */
package com.viaversion.viaversion.api.minecraft; package com.viaversion.viaversion.api.minecraft;
public final class Quaternion { public record Quaternion(float x, float y, float z, float w) {
private final float x;
private final float y;
private final float z;
private final float w;
public Quaternion(final float x, final float y, final float z, final float w) {
this.x = x;
this.y = y;
this.z = z;
this.w = w;
}
public float x() {
return x;
}
public float y() {
return y;
}
public float z() {
return z;
}
public float w() {
return w;
}
@Override
public String toString() {
return "Quaternion{" +
"x=" + x +
", y=" + y +
", z=" + z +
", w=" + w +
'}';
}
} }

Datei anzeigen

@ -25,22 +25,7 @@ package com.viaversion.viaversion.api.minecraft;
import com.github.steveice10.opennbt.tag.builtin.Tag; import com.github.steveice10.opennbt.tag.builtin.Tag;
import org.checkerframework.checker.nullness.qual.Nullable; import org.checkerframework.checker.nullness.qual.Nullable;
public final class RegistryEntry { public record RegistryEntry(String key, @Nullable Tag tag) {
private final String key;
private final Tag tag;
public RegistryEntry(String key, @Nullable Tag tag) {
this.key = key;
this.tag = tag;
}
public String key() {
return key;
}
public @Nullable Tag tag() {
return tag;
}
public RegistryEntry withKey(final String key) { public RegistryEntry withKey(final String key) {
return new RegistryEntry(key, tag != null ? tag.copy() : null); return new RegistryEntry(key, tag != null ? tag.copy() : null);

Datei anzeigen

@ -24,23 +24,7 @@ package com.viaversion.viaversion.api.minecraft;
import org.checkerframework.checker.nullness.qual.Nullable; import org.checkerframework.checker.nullness.qual.Nullable;
public final class SoundEvent { public record SoundEvent(String identifier, @Nullable Float fixedRange) {
private final String identifier;
private final Float fixedRange;
public SoundEvent(final String identifier, @Nullable final Float fixedRange) {
this.identifier = identifier;
this.fixedRange = fixedRange;
}
public String identifier() {
return identifier;
}
public @Nullable Float fixedRange() {
return fixedRange;
}
public SoundEvent withIdentifier(final String identifier) { public SoundEvent withIdentifier(final String identifier) {
return new SoundEvent(identifier, this.fixedRange); return new SoundEvent(identifier, this.fixedRange);

Datei anzeigen

@ -24,28 +24,21 @@ package com.viaversion.viaversion.api.minecraft;
import java.util.Arrays; import java.util.Arrays;
public final class TagData { public record TagData(String identifier, int[] entries) {
private final String identifier;
private final int[] entries;
public TagData(final String identifier, final int[] entries) { @Override
this.identifier = identifier; public boolean equals(final Object o) {
this.entries = entries; if (this == o) return true;
} if (o == null || getClass() != o.getClass()) return false;
final TagData tagData = (TagData) o;
public String identifier() { if (!identifier.equals(tagData.identifier)) return false;
return identifier; return Arrays.equals(entries, tagData.entries);
}
public int[] entries() {
return entries;
} }
@Override @Override
public String toString() { public int hashCode() {
return "TagData{" + int result = identifier.hashCode();
"identifier='" + identifier + '\'' + result = 31 * result + Arrays.hashCode(entries);
", entries=" + Arrays.toString(entries) + return result;
'}';
} }
} }

Datei anzeigen

@ -22,56 +22,5 @@
*/ */
package com.viaversion.viaversion.api.minecraft; package com.viaversion.viaversion.api.minecraft;
public class Vector { public record Vector(int blockX, int blockY, int blockZ) {
private int blockX;
private int blockY;
private int blockZ;
public Vector(int blockX, int blockY, int blockZ) {
this.blockX = blockX;
this.blockY = blockY;
this.blockZ = blockZ;
}
public int blockX() {
return blockX;
}
public int blockY() {
return blockY;
}
public int blockZ() {
return blockZ;
}
@Deprecated/*(forRemoval=true)*/
public int getBlockX() {
return blockX;
}
@Deprecated/*(forRemoval=true)*/
public int getBlockY() {
return blockY;
}
@Deprecated/*(forRemoval=true)*/
public int getBlockZ() {
return blockZ;
}
@Deprecated/*(forRemoval=true)*/
public void setBlockX(int blockX) {
this.blockX = blockX;
}
@Deprecated/*(forRemoval=true)*/
public void setBlockY(int blockY) {
this.blockY = blockY;
}
@Deprecated/*(forRemoval=true)*/
public void setBlockZ(int blockZ) {
this.blockZ = blockZ;
}
} }

Datei anzeigen

@ -22,26 +22,5 @@
*/ */
package com.viaversion.viaversion.api.minecraft; package com.viaversion.viaversion.api.minecraft;
public final class Vector3f { public record Vector3f(float x, float y, float z) {
private final float x;
private final float y;
private final float z;
public Vector3f(final float x, final float y, final float z) {
this.x = x;
this.y = y;
this.z = z;
}
public float x() {
return x;
}
public float y() {
return y;
}
public float z() {
return z;
}
} }

Datei anzeigen

@ -22,41 +22,5 @@
*/ */
package com.viaversion.viaversion.api.minecraft; package com.viaversion.viaversion.api.minecraft;
public class VillagerData { public record VillagerData(int type, int profession, int level) {
private final int type;
private final int profession;
private final int level;
public VillagerData(final int type, final int profession, final int level) {
this.type = type;
this.profession = profession;
this.level = level;
}
public int type() {
return type;
}
public int profession() {
return profession;
}
public int level() {
return level;
}
@Deprecated/*(forRemoval=true)*/
public int getType() {
return type;
}
@Deprecated/*(forRemoval=true)*/
public int getProfession() {
return profession;
}
@Deprecated/*(forRemoval=true)*/
public int getLevel() {
return level;
}
} }

Datei anzeigen

@ -24,34 +24,12 @@ package com.viaversion.viaversion.api.minecraft;
import com.viaversion.viaversion.api.connection.StorableObject; import com.viaversion.viaversion.api.connection.StorableObject;
public class WorldIdentifiers implements StorableObject { public record WorldIdentifiers(String overworld, String nether, String end) implements StorableObject {
public static final String OVERWORLD_DEFAULT = "minecraft:overworld"; public static final String OVERWORLD_DEFAULT = "minecraft:overworld";
public static final String NETHER_DEFAULT = "minecraft:the_nether"; public static final String NETHER_DEFAULT = "minecraft:the_nether";
public static final String END_DEFAULT = "minecraft:the_end"; public static final String END_DEFAULT = "minecraft:the_end";
private final String overworld;
private final String nether;
private final String end;
public WorldIdentifiers(String overworld) { public WorldIdentifiers(String overworld) {
this(overworld, NETHER_DEFAULT, END_DEFAULT); this(overworld, NETHER_DEFAULT, END_DEFAULT);
} }
public WorldIdentifiers(String overworld, String nether, String end) {
this.overworld = overworld;
this.nether = nether;
this.end = end;
}
public String overworld() {
return this.overworld;
}
public String nether() {
return this.nether;
}
public String end() {
return this.end;
}
} }

Datei anzeigen

@ -24,38 +24,7 @@ package com.viaversion.viaversion.api.minecraft.blockentity;
import com.github.steveice10.opennbt.tag.builtin.CompoundTag; import com.github.steveice10.opennbt.tag.builtin.CompoundTag;
public final class BlockEntityImpl implements BlockEntity { public record BlockEntityImpl(byte packedXZ, short y, int typeId, CompoundTag tag) implements BlockEntity {
private final byte packedXZ;
private final short y;
private final int typeId;
private final CompoundTag tag;
public BlockEntityImpl(final byte packedXZ, final short y, final int typeId, final CompoundTag tag) {
this.packedXZ = packedXZ;
this.y = y;
this.typeId = typeId;
this.tag = tag;
}
@Override
public byte packedXZ() {
return packedXZ;
}
@Override
public short y() {
return y;
}
@Override
public int typeId() {
return typeId;
}
@Override
public CompoundTag tag() {
return tag;
}
@Override @Override
public BlockEntity withTypeId(int typeId) { public BlockEntity withTypeId(int typeId) {

Datei anzeigen

@ -52,86 +52,6 @@ public interface ChunkSection {
return idx >> 4 & 0xF; return idx >> 4 & 0xF;
} }
@Deprecated/*(forRemoval = true)*/
default int getFlatBlock(int idx) {
return palette(PaletteType.BLOCKS).idAt(idx);
}
@Deprecated/*(forRemoval = true)*/
default int getFlatBlock(int x, int y, int z) {
return getFlatBlock(index(x, y, z));
}
@Deprecated/*(forRemoval = true)*/
default void setFlatBlock(int idx, int id) {
palette(PaletteType.BLOCKS).setIdAt(idx, id);
}
@Deprecated/*(forRemoval = true)*/
default void setFlatBlock(int x, int y, int z, int id) {
setFlatBlock(index(x, y, z), id);
}
@Deprecated/*(forRemoval = true)*/
default int getBlockWithoutData(int x, int y, int z) {
return getFlatBlock(x, y, z) >> 4;
}
@Deprecated/*(forRemoval = true)*/
default int getBlockData(int x, int y, int z) {
return getFlatBlock(x, y, z) & 0xF;
}
@Deprecated/*(forRemoval = true)*/
default void setBlockWithData(int x, int y, int z, int type, int data) {
setFlatBlock(index(x, y, z), type << 4 | (data & 0xF));
}
@Deprecated/*(forRemoval = true)*/
default void setBlockWithData(int idx, int type, int data) {
setFlatBlock(idx, type << 4 | (data & 0xF));
}
@Deprecated/*(forRemoval = true)*/
default void setPaletteIndex(int idx, int index) {
palette(PaletteType.BLOCKS).setPaletteIndexAt(idx, index);
}
@Deprecated/*(forRemoval = true)*/
default int getPaletteIndex(int idx) {
return palette(PaletteType.BLOCKS).paletteIndexAt(idx);
}
@Deprecated/*(forRemoval = true)*/
default int getPaletteSize() {
return palette(PaletteType.BLOCKS).size();
}
@Deprecated/*(forRemoval = true)*/
default int getPaletteEntry(int index) {
return palette(PaletteType.BLOCKS).idByIndex(index);
}
@Deprecated/*(forRemoval = true)*/
default void setPaletteEntry(int index, int id) {
palette(PaletteType.BLOCKS).setIdByIndex(index, id);
}
@Deprecated/*(forRemoval = true)*/
default void replacePaletteEntry(int oldId, int newId) {
palette(PaletteType.BLOCKS).replaceId(oldId, newId);
}
@Deprecated/*(forRemoval = true)*/
default void addPaletteEntry(int id) {
palette(PaletteType.BLOCKS).addId(id);
}
@Deprecated/*(forRemoval = true)*/
default void clearPalette() {
palette(PaletteType.BLOCKS).clear();
}
/** /**
* Returns the number of non-air blocks in this section. * Returns the number of non-air blocks in this section.
* *

Datei anzeigen

@ -45,7 +45,7 @@ final class FilledStructuredData<T> implements StructuredData<T> {
} }
@Override @Override
public void write(final ByteBuf buffer) throws Exception { public void write(final ByteBuf buffer) {
key.type().write(buffer, value); key.type().write(buffer, value);
} }

Datei anzeigen

@ -54,7 +54,7 @@ public interface StructuredData<T> extends IdHolder {
void setValue(final T value); void setValue(final T value);
void write(final ByteBuf buffer) throws Exception; void write(final ByteBuf buffer);
void setId(final int id); void setId(final int id);

Datei anzeigen

@ -51,7 +51,7 @@ import com.viaversion.viaversion.api.type.Type;
import com.viaversion.viaversion.api.type.types.version.Types1_20_5; import com.viaversion.viaversion.api.type.types.version.Types1_20_5;
import com.viaversion.viaversion.util.Unit; import com.viaversion.viaversion.util.Unit;
public final class StructuredDataKey<T> { public record StructuredDataKey<T>(String identifier, Type<T> type) {
public static final StructuredDataKey<CompoundTag> CUSTOM_DATA = new StructuredDataKey<>("custom_data", Type.COMPOUND_TAG); public static final StructuredDataKey<CompoundTag> CUSTOM_DATA = new StructuredDataKey<>("custom_data", Type.COMPOUND_TAG);
public static final StructuredDataKey<Integer> MAX_STACK_SIZE = new StructuredDataKey<>("max_stack_size", Type.VAR_INT); public static final StructuredDataKey<Integer> MAX_STACK_SIZE = new StructuredDataKey<>("max_stack_size", Type.VAR_INT);
@ -110,22 +110,6 @@ public final class StructuredDataKey<T> {
public static final StructuredDataKey<Tag> LOCK = new StructuredDataKey<>("lock", Type.TAG); public static final StructuredDataKey<Tag> LOCK = new StructuredDataKey<>("lock", Type.TAG);
public static final StructuredDataKey<CompoundTag> CONTAINER_LOOT = new StructuredDataKey<>("container_loot", Type.COMPOUND_TAG); public static final StructuredDataKey<CompoundTag> CONTAINER_LOOT = new StructuredDataKey<>("container_loot", Type.COMPOUND_TAG);
private final String identifier;
private final Type<T> type;
public StructuredDataKey(final String identifier, final Type<T> type) {
this.identifier = identifier;
this.type = type;
}
public Type<T> type() {
return type;
}
public String identifier() {
return identifier;
}
@Override @Override
public String toString() { public String toString() {
return "StructuredDataKey{" + return "StructuredDataKey{" +

Datei anzeigen

@ -38,7 +38,7 @@ public class EntityTypes1_10 {
else else
type = EntityType.findById(typeID); type = EntityType.findById(typeID);
if (!type.isPresent()) { if (type.isEmpty()) {
Via.getPlatform().getLogger().severe("Could not find 1.10 type id " + typeID + " isObject=" + isObject); Via.getPlatform().getLogger().severe("Could not find 1.10 type id " + typeID + " isObject=" + isObject);
return EntityType.ENTITY; // Fall back to the basic ENTITY return EntityType.ENTITY; // Fall back to the basic ENTITY
} }
@ -50,8 +50,8 @@ public class EntityTypes1_10 {
ENTITY(-1), ENTITY(-1),
DROPPED_ITEM(1, ENTITY), DROPPED_ITEM(1, ENTITY),
EXPERIENCE_ORB(2, ENTITY), EXPERIENCE_ORB(2, ENTITY),
LEASH_HITCH(8, ENTITY), // Actually entity hanging but it doesn't make a lot of difference for metadata LEASH_HITCH(8, ENTITY), // Actually entity hanging, but it doesn't make a lot of difference for metadata
PAINTING(9, ENTITY), // Actually entity hanging but it doesn't make a lot of difference for metadata PAINTING(9, ENTITY), // Actually entity hanging, but it doesn't make a lot of difference for metadata
ARROW(10, ENTITY), ARROW(10, ENTITY),
SNOWBALL(11, ENTITY), // Actually EntityProjectile SNOWBALL(11, ENTITY), // Actually EntityProjectile
FIREBALL(12, ENTITY), FIREBALL(12, ENTITY),
@ -242,10 +242,7 @@ public class EntityTypes1_10 {
public static Optional<EntityType> getPCEntity(int id) { public static Optional<EntityType> getPCEntity(int id) {
Optional<ObjectType> output = findById(id); Optional<ObjectType> output = findById(id);
return output.map(objectType -> objectType.type);
if (!output.isPresent())
return Optional.empty();
return Optional.of(output.get().type);
} }
} }
} }

Datei anzeigen

@ -38,7 +38,7 @@ public class EntityTypes1_11 {
else else
type = EntityType.findById(typeID); type = EntityType.findById(typeID);
if (!type.isPresent()) { if (type.isEmpty()) {
Via.getPlatform().getLogger().severe("Could not find 1.11 type id " + typeID + " isObject=" + isObject); Via.getPlatform().getLogger().severe("Could not find 1.11 type id " + typeID + " isObject=" + isObject);
return EntityType.ENTITY; // Fall back to the basic ENTITY return EntityType.ENTITY; // Fall back to the basic ENTITY
} }
@ -50,8 +50,8 @@ public class EntityTypes1_11 {
ENTITY(-1), ENTITY(-1),
DROPPED_ITEM(1, ENTITY), DROPPED_ITEM(1, ENTITY),
EXPERIENCE_ORB(2, ENTITY), EXPERIENCE_ORB(2, ENTITY),
LEASH_HITCH(8, ENTITY), // Actually entity hanging but it doesn't make a lot of difference for metadata LEASH_HITCH(8, ENTITY), // Actually entity hanging, but it doesn't make a lot of difference for metadata
PAINTING(9, ENTITY), // Actually entity hanging but it doesn't make a lot of difference for metadata PAINTING(9, ENTITY), // Actually entity hanging but, it doesn't make a lot of difference for metadata
ARROW(10, ENTITY), ARROW(10, ENTITY),
SNOWBALL(11, ENTITY), // Actually EntityProjectile SNOWBALL(11, ENTITY), // Actually EntityProjectile
FIREBALL(12, ENTITY), FIREBALL(12, ENTITY),
@ -272,10 +272,7 @@ public class EntityTypes1_11 {
public static Optional<EntityType> getPCEntity(int id) { public static Optional<EntityType> getPCEntity(int id) {
Optional<ObjectType> output = findById(id); Optional<ObjectType> output = findById(id);
return output.map(objectType -> objectType.type);
if (!output.isPresent())
return Optional.empty();
return Optional.of(output.get().type);
} }
} }
} }

Datei anzeigen

@ -39,7 +39,7 @@ public class EntityTypes1_12 {
else else
type = EntityType.findById(typeID); type = EntityType.findById(typeID);
if (!type.isPresent()) { if (type.isEmpty()) {
Via.getPlatform().getLogger().severe("Could not find 1.12 type id " + typeID + " isObject=" + isObject); Via.getPlatform().getLogger().severe("Could not find 1.12 type id " + typeID + " isObject=" + isObject);
return EntityType.ENTITY; // Fall back to the basic ENTITY return EntityType.ENTITY; // Fall back to the basic ENTITY
} }
@ -51,8 +51,8 @@ public class EntityTypes1_12 {
ENTITY(-1), ENTITY(-1),
DROPPED_ITEM(1, ENTITY), DROPPED_ITEM(1, ENTITY),
EXPERIENCE_ORB(2, ENTITY), EXPERIENCE_ORB(2, ENTITY),
LEASH_HITCH(8, ENTITY), // Actually entity hanging but it doesn't make a lot of difference for metadata LEASH_HITCH(8, ENTITY), // Actually entity hanging, but it doesn't make a lot of difference for metadata
PAINTING(9, ENTITY), // Actually entity hanging but it doesn't make a lot of difference for metadata PAINTING(9, ENTITY), // Actually entity hanging, but it doesn't make a lot of difference for metadata
ARROW(10, ENTITY), ARROW(10, ENTITY),
SNOWBALL(11, ENTITY), // Actually EntityProjectile SNOWBALL(11, ENTITY), // Actually EntityProjectile
FIREBALL(12, ENTITY), FIREBALL(12, ENTITY),
@ -276,10 +276,7 @@ public class EntityTypes1_12 {
public static Optional<EntityType> getPCEntity(int id) { public static Optional<EntityType> getPCEntity(int id) {
Optional<ObjectType> output = findById(id); Optional<ObjectType> output = findById(id);
return output.map(objectType -> objectType.type);
if (!output.isPresent())
return Optional.empty();
return Optional.of(output.get().type);
} }
} }
} }

Datei anzeigen

@ -37,7 +37,7 @@ public class EntityTypes1_13 {
else else
type = EntityType.findById(typeID); type = EntityType.findById(typeID);
if (!type.isPresent()) { if (type.isEmpty()) {
Via.getPlatform().getLogger().severe("Could not find 1.13 type id " + typeID + " isObject=" + isObject); Via.getPlatform().getLogger().severe("Could not find 1.13 type id " + typeID + " isObject=" + isObject);
return EntityType.ENTITY; // Fall back to the basic ENTITY return EntityType.ENTITY; // Fall back to the basic ENTITY
} }
@ -326,9 +326,7 @@ public class EntityTypes1_13 {
public static Optional<EntityType> getPCEntity(int id) { public static Optional<EntityType> getPCEntity(int id) {
Optional<ObjectType> output = findById(id); Optional<ObjectType> output = findById(id);
if (!output.isPresent()) return output.map(objectType -> objectType.type);
return Optional.empty();
return Optional.of(output.get().type);
} }
public static Optional<ObjectType> fromEntityType(EntityType type) { public static Optional<ObjectType> fromEntityType(EntityType type) {

Datei anzeigen

@ -66,7 +66,7 @@ public class DataItem implements Item {
@Override @Override
public void setAmount(int amount) { public void setAmount(int amount) {
if (amount > Byte.MAX_VALUE || amount < Byte.MIN_VALUE) { if (amount != (byte) amount) {
throw new IllegalArgumentException("Invalid item amount: " + amount); throw new IllegalArgumentException("Invalid item amount: " + amount);
} }
this.amount = (byte) amount; this.amount = (byte) amount;
@ -116,8 +116,8 @@ public class DataItem implements Item {
@Override @Override
public int hashCode() { public int hashCode() {
int result = identifier; int result = identifier;
result = 31 * result + (int) amount; result = 31 * result + amount;
result = 31 * result + (int) data; result = 31 * result + data;
result = 31 * result + (tag != null ? tag.hashCode() : 0); result = 31 * result + (tag != null ? tag.hashCode() : 0);
return result; return result;
} }

Datei anzeigen

@ -25,36 +25,21 @@ package com.viaversion.viaversion.api.minecraft.item.data;
import com.viaversion.viaversion.api.type.Type; import com.viaversion.viaversion.api.type.Type;
import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBuf;
public final class AdventureModePredicate { public record AdventureModePredicate(BlockPredicate[] predicates, boolean showInTooltip) {
public static final Type<AdventureModePredicate> TYPE = new Type<AdventureModePredicate>(AdventureModePredicate.class) { public static final Type<AdventureModePredicate> TYPE = new Type<>(AdventureModePredicate.class) {
@Override @Override
public AdventureModePredicate read(final ByteBuf buffer) throws Exception { public AdventureModePredicate read(final ByteBuf buffer) {
final BlockPredicate[] predicates = BlockPredicate.ARRAY_TYPE.read(buffer); final BlockPredicate[] predicates = BlockPredicate.ARRAY_TYPE.read(buffer);
final boolean showInTooltip = buffer.readBoolean(); final boolean showInTooltip = buffer.readBoolean();
return new AdventureModePredicate(predicates, showInTooltip); return new AdventureModePredicate(predicates, showInTooltip);
} }
@Override @Override
public void write(final ByteBuf buffer, final AdventureModePredicate value) throws Exception { public void write(final ByteBuf buffer, final AdventureModePredicate value) {
BlockPredicate.ARRAY_TYPE.write(buffer, value.predicates); BlockPredicate.ARRAY_TYPE.write(buffer, value.predicates);
buffer.writeBoolean(value.showInTooltip); buffer.writeBoolean(value.showInTooltip);
} }
}; };
private final BlockPredicate[] predicates;
private final boolean showInTooltip;
public AdventureModePredicate(final BlockPredicate[] predicates, final boolean showInTooltip) {
this.predicates = predicates;
this.showInTooltip = showInTooltip;
}
public BlockPredicate[] predicates() {
return predicates;
}
public boolean showInTooltip() {
return showInTooltip;
}
} }

Datei anzeigen

@ -26,11 +26,11 @@ import com.viaversion.viaversion.api.minecraft.Holder;
import com.viaversion.viaversion.api.type.Type; import com.viaversion.viaversion.api.type.Type;
import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBuf;
public final class ArmorTrim { public record ArmorTrim(Holder<ArmorTrimMaterial> material, Holder<ArmorTrimPattern> pattern, boolean showInTooltip) {
public static final Type<ArmorTrim> TYPE = new Type<ArmorTrim>(ArmorTrim.class) { public static final Type<ArmorTrim> TYPE = new Type<>(ArmorTrim.class) {
@Override @Override
public ArmorTrim read(final ByteBuf buffer) throws Exception { public ArmorTrim read(final ByteBuf buffer) {
final Holder<ArmorTrimMaterial> material = ArmorTrimMaterial.TYPE.read(buffer); final Holder<ArmorTrimMaterial> material = ArmorTrimMaterial.TYPE.read(buffer);
final Holder<ArmorTrimPattern> pattern = ArmorTrimPattern.TYPE.read(buffer); final Holder<ArmorTrimPattern> pattern = ArmorTrimPattern.TYPE.read(buffer);
final boolean showInTooltip = buffer.readBoolean(); final boolean showInTooltip = buffer.readBoolean();
@ -38,32 +38,11 @@ public final class ArmorTrim {
} }
@Override @Override
public void write(final ByteBuf buffer, final ArmorTrim value) throws Exception { public void write(final ByteBuf buffer, final ArmorTrim value) {
ArmorTrimMaterial.TYPE.write(buffer, value.material); ArmorTrimMaterial.TYPE.write(buffer, value.material);
ArmorTrimPattern.TYPE.write(buffer, value.pattern); ArmorTrimPattern.TYPE.write(buffer, value.pattern);
buffer.writeBoolean(value.showInTooltip); buffer.writeBoolean(value.showInTooltip);
} }
}; };
private final Holder<ArmorTrimMaterial> material;
private final Holder<ArmorTrimPattern> pattern;
private final boolean showInTooltip;
public ArmorTrim(final Holder<ArmorTrimMaterial> material, final Holder<ArmorTrimPattern> pattern, final boolean showInTooltip) {
this.material = material;
this.pattern = pattern;
this.showInTooltip = showInTooltip;
}
public Holder<ArmorTrimMaterial> material() {
return material;
}
public Holder<ArmorTrimPattern> pattern() {
return pattern;
}
public boolean showInTooltip() {
return showInTooltip;
}
} }

Datei anzeigen

@ -29,11 +29,12 @@ import io.netty.buffer.ByteBuf;
import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
public final class ArmorTrimMaterial { public record ArmorTrimMaterial(String assetName, int itemId, float itemModelIndex,
Int2ObjectMap<String> overrideArmorMaterials, Tag description) {
public static final HolderType<ArmorTrimMaterial> TYPE = new HolderType<ArmorTrimMaterial>() { public static final HolderType<ArmorTrimMaterial> TYPE = new HolderType<>() {
@Override @Override
public ArmorTrimMaterial readDirect(final ByteBuf buffer) throws Exception { public ArmorTrimMaterial readDirect(final ByteBuf buffer) {
final String assetName = Type.STRING.read(buffer); final String assetName = Type.STRING.read(buffer);
final int item = Type.VAR_INT.readPrimitive(buffer); final int item = Type.VAR_INT.readPrimitive(buffer);
final float itemModelIndex = buffer.readFloat(); final float itemModelIndex = buffer.readFloat();
@ -51,7 +52,7 @@ public final class ArmorTrimMaterial {
} }
@Override @Override
public void writeDirect(final ByteBuf buffer, final ArmorTrimMaterial value) throws Exception { public void writeDirect(final ByteBuf buffer, final ArmorTrimMaterial value) {
Type.STRING.write(buffer, value.assetName()); Type.STRING.write(buffer, value.assetName());
Type.VAR_INT.writePrimitive(buffer, value.itemId()); Type.VAR_INT.writePrimitive(buffer, value.itemId());
buffer.writeFloat(value.itemModelIndex()); buffer.writeFloat(value.itemModelIndex());
@ -66,37 +67,4 @@ public final class ArmorTrimMaterial {
} }
}; };
private final String assetName;
private final int itemId;
private final float itemModelIndex;
private final Int2ObjectMap<String> overrideArmorMaterials;
private final Tag description;
public ArmorTrimMaterial(final String assetName, final int itemId, final float itemModelIndex, final Int2ObjectMap<String> overrideArmorMaterials, final Tag description) {
this.assetName = assetName;
this.itemId = itemId;
this.itemModelIndex = itemModelIndex;
this.overrideArmorMaterials = overrideArmorMaterials;
this.description = description;
}
public String assetName() {
return assetName;
}
public int itemId() {
return itemId;
}
public float itemModelIndex() {
return itemModelIndex;
}
public Int2ObjectMap<String> overrideArmorMaterials() {
return overrideArmorMaterials;
}
public Tag description() {
return description;
}
} }

Datei anzeigen

@ -27,11 +27,11 @@ import com.viaversion.viaversion.api.type.Type;
import com.viaversion.viaversion.api.type.types.misc.HolderType; import com.viaversion.viaversion.api.type.types.misc.HolderType;
import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBuf;
public final class ArmorTrimPattern { public record ArmorTrimPattern(String assetName, int itemId, Tag description, boolean decal) {
public static final HolderType<ArmorTrimPattern> TYPE = new HolderType<ArmorTrimPattern>() { public static final HolderType<ArmorTrimPattern> TYPE = new HolderType<>() {
@Override @Override
public ArmorTrimPattern readDirect(final ByteBuf buffer) throws Exception { public ArmorTrimPattern readDirect(final ByteBuf buffer) {
final String assetName = Type.STRING.read(buffer); final String assetName = Type.STRING.read(buffer);
final int itemId = Type.VAR_INT.readPrimitive(buffer); final int itemId = Type.VAR_INT.readPrimitive(buffer);
final Tag description = Type.TAG.read(buffer); final Tag description = Type.TAG.read(buffer);
@ -40,7 +40,7 @@ public final class ArmorTrimPattern {
} }
@Override @Override
public void writeDirect(final ByteBuf buffer, final ArmorTrimPattern value) throws Exception { public void writeDirect(final ByteBuf buffer, final ArmorTrimPattern value) {
Type.STRING.write(buffer, value.assetName()); Type.STRING.write(buffer, value.assetName());
Type.VAR_INT.writePrimitive(buffer, value.itemId()); Type.VAR_INT.writePrimitive(buffer, value.itemId());
Type.TAG.write(buffer, value.description()); Type.TAG.write(buffer, value.description());
@ -48,31 +48,4 @@ public final class ArmorTrimPattern {
} }
}; };
private final String assetName;
private final int itemId;
private final Tag description;
private final boolean decal;
public ArmorTrimPattern(final String assetName, final int itemId, final Tag description, final boolean decal) {
this.assetName = assetName;
this.itemId = itemId;
this.description = description;
this.decal = decal;
}
public String assetName() {
return assetName;
}
public int itemId() {
return itemId;
}
public Tag description() {
return description;
}
public boolean decal() {
return decal;
}
} }

Datei anzeigen

@ -26,11 +26,11 @@ import com.viaversion.viaversion.api.type.Type;
import com.viaversion.viaversion.api.type.types.ArrayType; import com.viaversion.viaversion.api.type.types.ArrayType;
import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBuf;
public final class AttributeModifier { public record AttributeModifier(int attribute, ModifierData modifier, int slotType) {
public static final Type<AttributeModifier> TYPE = new Type<AttributeModifier>(AttributeModifier.class) { public static final Type<AttributeModifier> TYPE = new Type<>(AttributeModifier.class) {
@Override @Override
public AttributeModifier read(final ByteBuf buffer) throws Exception { public AttributeModifier read(final ByteBuf buffer) {
final int attribute = Type.VAR_INT.readPrimitive(buffer); final int attribute = Type.VAR_INT.readPrimitive(buffer);
final ModifierData modifier = ModifierData.TYPE.read(buffer); final ModifierData modifier = ModifierData.TYPE.read(buffer);
final int slot = Type.VAR_INT.readPrimitive(buffer); final int slot = Type.VAR_INT.readPrimitive(buffer);
@ -38,7 +38,7 @@ public final class AttributeModifier {
} }
@Override @Override
public void write(final ByteBuf buffer, final AttributeModifier value) throws Exception { public void write(final ByteBuf buffer, final AttributeModifier value) {
Type.VAR_INT.writePrimitive(buffer, value.attribute); Type.VAR_INT.writePrimitive(buffer, value.attribute);
ModifierData.TYPE.write(buffer, value.modifier); ModifierData.TYPE.write(buffer, value.modifier);
Type.VAR_INT.writePrimitive(buffer, value.slotType); Type.VAR_INT.writePrimitive(buffer, value.slotType);
@ -46,25 +46,4 @@ public final class AttributeModifier {
}; };
public static final Type<AttributeModifier[]> ARRAY_TYPE = new ArrayType<>(TYPE); public static final Type<AttributeModifier[]> ARRAY_TYPE = new ArrayType<>(TYPE);
private final int attribute;
private final ModifierData modifier;
private final int slotType;
public AttributeModifier(final int attribute, final ModifierData modifier, final int slotType) {
this.attribute = attribute;
this.modifier = modifier;
this.slotType = slotType;
}
public int attribute() {
return attribute;
}
public ModifierData modifier() {
return modifier;
}
public int slotType() {
return slotType;
}
} }

Datei anzeigen

@ -25,36 +25,21 @@ package com.viaversion.viaversion.api.minecraft.item.data;
import com.viaversion.viaversion.api.type.Type; import com.viaversion.viaversion.api.type.Type;
import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBuf;
public final class AttributeModifiers { public record AttributeModifiers(AttributeModifier[] modifiers, boolean showInTooltip) {
public static final Type<AttributeModifiers> TYPE = new Type<AttributeModifiers>(AttributeModifiers.class) { public static final Type<AttributeModifiers> TYPE = new Type<>(AttributeModifiers.class) {
@Override @Override
public AttributeModifiers read(final ByteBuf buffer) throws Exception { public AttributeModifiers read(final ByteBuf buffer) {
final AttributeModifier[] modifiers = AttributeModifier.ARRAY_TYPE.read(buffer); final AttributeModifier[] modifiers = AttributeModifier.ARRAY_TYPE.read(buffer);
final boolean showInTooltip = buffer.readBoolean(); final boolean showInTooltip = buffer.readBoolean();
return new AttributeModifiers(modifiers, showInTooltip); return new AttributeModifiers(modifiers, showInTooltip);
} }
@Override @Override
public void write(final ByteBuf buffer, final AttributeModifiers value) throws Exception { public void write(final ByteBuf buffer, final AttributeModifiers value) {
AttributeModifier.ARRAY_TYPE.write(buffer, value.modifiers()); AttributeModifier.ARRAY_TYPE.write(buffer, value.modifiers());
buffer.writeBoolean(value.showInTooltip()); buffer.writeBoolean(value.showInTooltip());
} }
}; };
private final AttributeModifier[] modifiers;
private final boolean showInTooltip;
public AttributeModifiers(final AttributeModifier[] modifiers, final boolean showInTooltip) {
this.modifiers = modifiers;
this.showInTooltip = showInTooltip;
}
public AttributeModifier[] modifiers() {
return modifiers;
}
public boolean showInTooltip() {
return showInTooltip;
}
} }

Datei anzeigen

@ -26,36 +26,21 @@ import com.viaversion.viaversion.api.type.Type;
import com.viaversion.viaversion.api.type.types.misc.HolderType; import com.viaversion.viaversion.api.type.types.misc.HolderType;
import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBuf;
public final class BannerPattern { public record BannerPattern(String assetId, String translationKey) {
public static final HolderType<BannerPattern> TYPE = new HolderType<BannerPattern>() { public static final HolderType<BannerPattern> TYPE = new HolderType<>() {
@Override @Override
public BannerPattern readDirect(final ByteBuf buffer) throws Exception { public BannerPattern readDirect(final ByteBuf buffer) {
final String assetId = Type.STRING.read(buffer); final String assetId = Type.STRING.read(buffer);
final String translationKey = Type.STRING.read(buffer); final String translationKey = Type.STRING.read(buffer);
return new BannerPattern(assetId, translationKey); return new BannerPattern(assetId, translationKey);
} }
@Override @Override
public void writeDirect(final ByteBuf buffer, final BannerPattern value) throws Exception { public void writeDirect(final ByteBuf buffer, final BannerPattern value) {
Type.STRING.write(buffer, value.assetId); Type.STRING.write(buffer, value.assetId);
Type.STRING.write(buffer, value.translationKey); Type.STRING.write(buffer, value.translationKey);
} }
}; };
private final String assetId;
private final String translationKey;
public BannerPattern(final String assetId, final String translationKey) {
this.assetId = assetId;
this.translationKey = translationKey;
}
public String assetId() {
return assetId;
}
public String translationKey() {
return translationKey;
}
} }

Datei anzeigen

@ -27,37 +27,22 @@ import com.viaversion.viaversion.api.type.Type;
import com.viaversion.viaversion.api.type.types.ArrayType; import com.viaversion.viaversion.api.type.types.ArrayType;
import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBuf;
public final class BannerPatternLayer { public record BannerPatternLayer(Holder<BannerPattern> pattern, int dyeColor) {
public static final Type<BannerPatternLayer> TYPE = new Type<BannerPatternLayer>(BannerPatternLayer.class) { public static final Type<BannerPatternLayer> TYPE = new Type<>(BannerPatternLayer.class) {
@Override @Override
public BannerPatternLayer read(final ByteBuf buffer) throws Exception { public BannerPatternLayer read(final ByteBuf buffer) {
final Holder<BannerPattern> pattern = BannerPattern.TYPE.read(buffer); final Holder<BannerPattern> pattern = BannerPattern.TYPE.read(buffer);
final int color = Type.VAR_INT.readPrimitive(buffer); final int color = Type.VAR_INT.readPrimitive(buffer);
return new BannerPatternLayer(pattern, color); return new BannerPatternLayer(pattern, color);
} }
@Override @Override
public void write(final ByteBuf buffer, final BannerPatternLayer value) throws Exception { public void write(final ByteBuf buffer, final BannerPatternLayer value) {
BannerPattern.TYPE.write(buffer, value.pattern); BannerPattern.TYPE.write(buffer, value.pattern);
Type.VAR_INT.writePrimitive(buffer, value.dyeColor); Type.VAR_INT.writePrimitive(buffer, value.dyeColor);
} }
}; };
public static final Type<BannerPatternLayer[]> ARRAY_TYPE = new ArrayType<>(TYPE); public static final Type<BannerPatternLayer[]> ARRAY_TYPE = new ArrayType<>(TYPE);
private final Holder<BannerPattern> pattern;
private final int dyeColor;
public BannerPatternLayer(final Holder<BannerPattern> pattern, final int dyeColor) {
this.pattern = pattern;
this.dyeColor = dyeColor;
}
public Holder<BannerPattern> pattern() {
return pattern;
}
public int dyeColor() {
return dyeColor;
}
} }

Datei anzeigen

@ -27,11 +27,11 @@ import com.viaversion.viaversion.api.type.Type;
import com.viaversion.viaversion.api.type.types.ArrayType; import com.viaversion.viaversion.api.type.types.ArrayType;
import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBuf;
public final class Bee { public record Bee(CompoundTag entityData, int ticksInHive, int minTicksInHive) {
public static final Type<Bee> TYPE = new Type<Bee>(Bee.class) { public static final Type<Bee> TYPE = new Type<>(Bee.class) {
@Override @Override
public Bee read(final ByteBuf buffer) throws Exception { public Bee read(final ByteBuf buffer) {
final CompoundTag entityData = Type.COMPOUND_TAG.read(buffer); final CompoundTag entityData = Type.COMPOUND_TAG.read(buffer);
final int ticksInHive = Type.VAR_INT.readPrimitive(buffer); final int ticksInHive = Type.VAR_INT.readPrimitive(buffer);
final int minTicksInHive = Type.VAR_INT.readPrimitive(buffer); final int minTicksInHive = Type.VAR_INT.readPrimitive(buffer);
@ -39,7 +39,7 @@ public final class Bee {
} }
@Override @Override
public void write(final ByteBuf buffer, final Bee value) throws Exception { public void write(final ByteBuf buffer, final Bee value) {
Type.COMPOUND_TAG.write(buffer, value.entityData); Type.COMPOUND_TAG.write(buffer, value.entityData);
Type.VAR_INT.writePrimitive(buffer, value.ticksInHive); Type.VAR_INT.writePrimitive(buffer, value.ticksInHive);
Type.VAR_INT.writePrimitive(buffer, value.minTicksInHive); Type.VAR_INT.writePrimitive(buffer, value.minTicksInHive);
@ -47,25 +47,4 @@ public final class Bee {
}; };
public static final Type<Bee[]> ARRAY_TYPE = new ArrayType<>(TYPE); public static final Type<Bee[]> ARRAY_TYPE = new ArrayType<>(TYPE);
private final CompoundTag entityData;
private final int ticksInHive;
private final int minTicksInHive;
public Bee(CompoundTag entityData, int ticksInHive, int minTicksInHive) {
this.entityData = entityData;
this.ticksInHive = ticksInHive;
this.minTicksInHive = minTicksInHive;
}
public CompoundTag entityData() {
return entityData;
}
public int ticksInHive() {
return ticksInHive;
}
public int minTicksInHive() {
return minTicksInHive;
}
} }

Datei anzeigen

@ -29,11 +29,12 @@ import com.viaversion.viaversion.api.type.types.ArrayType;
import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBuf;
import org.checkerframework.checker.nullness.qual.Nullable; import org.checkerframework.checker.nullness.qual.Nullable;
public final class BlockPredicate { public record BlockPredicate(@Nullable HolderSet holderSet, StatePropertyMatcher @Nullable [] propertyMatchers,
@Nullable CompoundTag tag) {
public static final Type<BlockPredicate> TYPE = new Type<BlockPredicate>(BlockPredicate.class) { public static final Type<BlockPredicate> TYPE = new Type<>(BlockPredicate.class) {
@Override @Override
public BlockPredicate read(final ByteBuf buffer) throws Exception { public BlockPredicate read(final ByteBuf buffer) {
final HolderSet holders = Type.OPTIONAL_HOLDER_SET.read(buffer); final HolderSet holders = Type.OPTIONAL_HOLDER_SET.read(buffer);
final StatePropertyMatcher[] propertyMatchers = buffer.readBoolean() ? StatePropertyMatcher.ARRAY_TYPE.read(buffer) : null; final StatePropertyMatcher[] propertyMatchers = buffer.readBoolean() ? StatePropertyMatcher.ARRAY_TYPE.read(buffer) : null;
final CompoundTag tag = Type.OPTIONAL_COMPOUND_TAG.read(buffer); final CompoundTag tag = Type.OPTIONAL_COMPOUND_TAG.read(buffer);
@ -41,7 +42,7 @@ public final class BlockPredicate {
} }
@Override @Override
public void write(final ByteBuf buffer, final BlockPredicate value) throws Exception { public void write(final ByteBuf buffer, final BlockPredicate value) {
Type.OPTIONAL_HOLDER_SET.write(buffer, value.holderSet); Type.OPTIONAL_HOLDER_SET.write(buffer, value.holderSet);
buffer.writeBoolean(value.propertyMatchers != null); buffer.writeBoolean(value.propertyMatchers != null);
@ -54,25 +55,4 @@ public final class BlockPredicate {
}; };
public static final Type<BlockPredicate[]> ARRAY_TYPE = new ArrayType<>(TYPE); public static final Type<BlockPredicate[]> ARRAY_TYPE = new ArrayType<>(TYPE);
private final HolderSet holderSet;
private final StatePropertyMatcher[] propertyMatchers;
private final CompoundTag tag;
public BlockPredicate(@Nullable final HolderSet holderSet, final StatePropertyMatcher @Nullable [] propertyMatchers, @Nullable final CompoundTag tag) {
this.holderSet = holderSet;
this.propertyMatchers = propertyMatchers;
this.tag = tag;
}
public @Nullable HolderSet holderSet() {
return holderSet;
}
public StatePropertyMatcher @Nullable [] propertyMatchers() {
return propertyMatchers;
}
public @Nullable CompoundTag tag() {
return tag;
}
} }

Datei anzeigen

@ -27,11 +27,11 @@ import io.netty.buffer.ByteBuf;
import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap;
import java.util.Map; import java.util.Map;
public final class BlockStateProperties { public record BlockStateProperties(Map<String, String> properties) {
public static final Type<BlockStateProperties> TYPE = new Type<BlockStateProperties>(BlockStateProperties.class) { public static final Type<BlockStateProperties> TYPE = new Type<>(BlockStateProperties.class) {
@Override @Override
public BlockStateProperties read(final ByteBuf buffer) throws Exception { public BlockStateProperties read(final ByteBuf buffer) {
final int size = Type.VAR_INT.readPrimitive(buffer); final int size = Type.VAR_INT.readPrimitive(buffer);
final Map<String, String> properties = new Object2ObjectOpenHashMap<>(size); final Map<String, String> properties = new Object2ObjectOpenHashMap<>(size);
for (int i = 0; i < size; i++) { for (int i = 0; i < size; i++) {
@ -41,7 +41,7 @@ public final class BlockStateProperties {
} }
@Override @Override
public void write(final ByteBuf buffer, final BlockStateProperties value) throws Exception { public void write(final ByteBuf buffer, final BlockStateProperties value) {
Type.VAR_INT.writePrimitive(buffer, value.properties.size()); Type.VAR_INT.writePrimitive(buffer, value.properties.size());
for (final Map.Entry<String, String> entry : value.properties.entrySet()) { for (final Map.Entry<String, String> entry : value.properties.entrySet()) {
Type.STRING.write(buffer, entry.getKey()); Type.STRING.write(buffer, entry.getKey());
@ -50,13 +50,4 @@ public final class BlockStateProperties {
} }
}; };
private final Map<String, String> properties;
public BlockStateProperties(final Map<String, String> properties) {
this.properties = properties;
}
public Map<String, String> properties() {
return properties;
}
} }

Datei anzeigen

@ -25,9 +25,9 @@ package com.viaversion.viaversion.api.minecraft.item.data;
import com.viaversion.viaversion.api.type.Type; import com.viaversion.viaversion.api.type.Type;
import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBuf;
public final class DyedColor { public record DyedColor(int rgb, boolean showInTooltip) {
public static final Type<DyedColor> TYPE = new Type<DyedColor>(DyedColor.class) { public static final Type<DyedColor> TYPE = new Type<>(DyedColor.class) {
@Override @Override
public DyedColor read(final ByteBuf buffer) { public DyedColor read(final ByteBuf buffer) {
final int rgb = buffer.readInt(); final int rgb = buffer.readInt();
@ -42,19 +42,4 @@ public final class DyedColor {
} }
}; };
private final int rgb;
private final boolean showInTooltip;
public DyedColor(final int rgb, final boolean showInTooltip) {
this.rgb = rgb;
this.showInTooltip = showInTooltip;
}
public int rgb() {
return this.rgb;
}
public boolean showInTooltip() {
return this.showInTooltip;
}
} }

Datei anzeigen

@ -27,9 +27,9 @@ import io.netty.buffer.ByteBuf;
import it.unimi.dsi.fastutil.ints.Int2IntMap; import it.unimi.dsi.fastutil.ints.Int2IntMap;
import it.unimi.dsi.fastutil.ints.Int2IntOpenHashMap; import it.unimi.dsi.fastutil.ints.Int2IntOpenHashMap;
public final class Enchantments { public record Enchantments(Int2IntMap enchantments, boolean showInTooltip) {
public static final Type<Enchantments> TYPE = new Type<Enchantments>(Enchantments.class) { public static final Type<Enchantments> TYPE = new Type<>(Enchantments.class) {
@Override @Override
public Enchantments read(final ByteBuf buffer) { public Enchantments read(final ByteBuf buffer) {
final Int2IntMap enchantments = new Int2IntOpenHashMap(); final Int2IntMap enchantments = new Int2IntOpenHashMap();
@ -54,30 +54,14 @@ public final class Enchantments {
} }
}; };
private final Int2IntMap enchantments;
private final boolean showInTooltip;
public Enchantments(final Int2IntMap enchantments, final boolean showInTooltip) {
this.enchantments = enchantments;
this.showInTooltip = showInTooltip;
}
public Enchantments(final boolean showInTooltip) { public Enchantments(final boolean showInTooltip) {
this(new Int2IntOpenHashMap(), showInTooltip); this(new Int2IntOpenHashMap(), showInTooltip);
} }
public Int2IntMap enchantments() {
return enchantments;
}
public int size() { public int size() {
return enchantments.size(); return enchantments.size();
} }
public boolean showInTooltip() {
return showInTooltip;
}
public void add(final int id, final int level) { public void add(final int id, final int level) {
enchantments.put(id, level); enchantments.put(id, level);
} }

Datei anzeigen

@ -62,14 +62,14 @@ public abstract class Filterable<T> {
} }
@Override @Override
public F read(final ByteBuf buffer) throws Exception { public F read(final ByteBuf buffer) {
final T raw = elementType.read(buffer); final T raw = elementType.read(buffer);
final T filtered = optionalElementType.read(buffer); final T filtered = optionalElementType.read(buffer);
return create(raw, filtered); return create(raw, filtered);
} }
@Override @Override
public void write(final ByteBuf buffer, final F value) throws Exception { public void write(final ByteBuf buffer, final F value) {
elementType.write(buffer, value.raw()); elementType.write(buffer, value.raw());
optionalElementType.write(buffer, value.filtered()); optionalElementType.write(buffer, value.filtered());
} }

Datei anzeigen

@ -29,7 +29,7 @@ import org.checkerframework.checker.nullness.qual.Nullable;
public final class FilterableComponent extends Filterable<Tag> { public final class FilterableComponent extends Filterable<Tag> {
public static final Type<FilterableComponent> TYPE = new FilterableType<Tag, FilterableComponent>(Type.TAG, Type.OPTIONAL_TAG, FilterableComponent.class) { public static final Type<FilterableComponent> TYPE = new FilterableType<>(Type.TAG, Type.OPTIONAL_TAG, FilterableComponent.class) {
@Override @Override
protected FilterableComponent create(final Tag raw, final Tag filtered) { protected FilterableComponent create(final Tag raw, final Tag filtered) {
return new FilterableComponent(raw, filtered); return new FilterableComponent(raw, filtered);

Datei anzeigen

@ -28,7 +28,7 @@ import org.checkerframework.checker.nullness.qual.Nullable;
public final class FilterableString extends Filterable<String> { public final class FilterableString extends Filterable<String> {
public static final Type<FilterableString> TYPE = new FilterableType<String, FilterableString>(Type.STRING, Type.OPTIONAL_STRING, FilterableString.class) { public static final Type<FilterableString> TYPE = new FilterableType<>(Type.STRING, Type.OPTIONAL_STRING, FilterableString.class) {
@Override @Override
protected FilterableString create(final String raw, final String filtered) { protected FilterableString create(final String raw, final String filtered) {
return new FilterableString(raw, filtered); return new FilterableString(raw, filtered);

Datei anzeigen

@ -26,10 +26,10 @@ import com.viaversion.viaversion.api.type.Type;
import com.viaversion.viaversion.api.type.types.ArrayType; import com.viaversion.viaversion.api.type.types.ArrayType;
import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBuf;
public final class FireworkExplosion { public record FireworkExplosion(int shape, int[] colors, int[] fadeColors, boolean hasTrail, boolean hasTwinkle) {
public static final Type<FireworkExplosion> TYPE = new Type<FireworkExplosion>(FireworkExplosion.class) { public static final Type<FireworkExplosion> TYPE = new Type<>(FireworkExplosion.class) {
@Override @Override
public FireworkExplosion read(final ByteBuf buffer) throws Exception { public FireworkExplosion read(final ByteBuf buffer) {
final int shape = Type.VAR_INT.readPrimitive(buffer); final int shape = Type.VAR_INT.readPrimitive(buffer);
final int[] colors = Type.INT_ARRAY_PRIMITIVE.read(buffer); final int[] colors = Type.INT_ARRAY_PRIMITIVE.read(buffer);
final int[] fadeColors = Type.INT_ARRAY_PRIMITIVE.read(buffer); final int[] fadeColors = Type.INT_ARRAY_PRIMITIVE.read(buffer);
@ -39,7 +39,7 @@ public final class FireworkExplosion {
} }
@Override @Override
public void write(final ByteBuf buffer, final FireworkExplosion value) throws Exception { public void write(final ByteBuf buffer, final FireworkExplosion value) {
Type.VAR_INT.writePrimitive(buffer, value.shape); Type.VAR_INT.writePrimitive(buffer, value.shape);
Type.INT_ARRAY_PRIMITIVE.write(buffer, value.colors); Type.INT_ARRAY_PRIMITIVE.write(buffer, value.colors);
Type.INT_ARRAY_PRIMITIVE.write(buffer, value.fadeColors); Type.INT_ARRAY_PRIMITIVE.write(buffer, value.fadeColors);
@ -49,37 +49,4 @@ public final class FireworkExplosion {
}; };
public static final Type<FireworkExplosion[]> ARRAY_TYPE = new ArrayType<>(TYPE); public static final Type<FireworkExplosion[]> ARRAY_TYPE = new ArrayType<>(TYPE);
private final int shape;
private final int[] colors;
private final int[] fadeColors;
private final boolean hasTrail;
private final boolean hasTwinkle;
public FireworkExplosion(final int shape, final int[] colors, final int[] fadeColors, final boolean hasTrail, final boolean hasTwinkle) {
this.shape = shape;
this.colors = colors;
this.fadeColors = fadeColors;
this.hasTrail = hasTrail;
this.hasTwinkle = hasTwinkle;
}
public int shape() {
return shape;
}
public int[] colors() {
return colors;
}
public int[] fadeColors() {
return fadeColors;
}
public boolean hasTrail() {
return hasTrail;
}
public boolean hasTwinkle() {
return hasTwinkle;
}
} }

Datei anzeigen

@ -25,36 +25,21 @@ package com.viaversion.viaversion.api.minecraft.item.data;
import com.viaversion.viaversion.api.type.Type; import com.viaversion.viaversion.api.type.Type;
import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBuf;
public final class Fireworks { public record Fireworks(int flightDuration, FireworkExplosion[] explosions) {
public static final Type<Fireworks> TYPE = new Type<Fireworks>(Fireworks.class) { public static final Type<Fireworks> TYPE = new Type<>(Fireworks.class) {
@Override @Override
public Fireworks read(final ByteBuf buffer) throws Exception { public Fireworks read(final ByteBuf buffer) {
final int flightDuration = Type.VAR_INT.readPrimitive(buffer); final int flightDuration = Type.VAR_INT.readPrimitive(buffer);
final FireworkExplosion[] explosions = FireworkExplosion.ARRAY_TYPE.read(buffer); final FireworkExplosion[] explosions = FireworkExplosion.ARRAY_TYPE.read(buffer);
return new Fireworks(flightDuration, explosions); return new Fireworks(flightDuration, explosions);
} }
@Override @Override
public void write(final ByteBuf buffer, final Fireworks value) throws Exception { public void write(final ByteBuf buffer, final Fireworks value) {
Type.VAR_INT.writePrimitive(buffer, value.flightDuration); Type.VAR_INT.writePrimitive(buffer, value.flightDuration);
FireworkExplosion.ARRAY_TYPE.write(buffer, value.explosions); FireworkExplosion.ARRAY_TYPE.write(buffer, value.explosions);
} }
}; };
private final FireworkExplosion[] explosions;
private final int flightDuration;
public Fireworks(final int flightDuration, final FireworkExplosion[] explosions) {
this.flightDuration = flightDuration;
this.explosions = explosions;
}
public int flightDuration() {
return flightDuration;
}
public FireworkExplosion[] explosions() {
return explosions;
}
} }

Datei anzeigen

@ -26,37 +26,22 @@ import com.viaversion.viaversion.api.type.Type;
import com.viaversion.viaversion.api.type.types.ArrayType; import com.viaversion.viaversion.api.type.types.ArrayType;
import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBuf;
public final class FoodEffect { public record FoodEffect(PotionEffect effect, float probability) {
public static final Type<FoodEffect> TYPE = new Type<FoodEffect>(FoodEffect.class) { public static final Type<FoodEffect> TYPE = new Type<>(FoodEffect.class) {
@Override @Override
public FoodEffect read(final ByteBuf buffer) throws Exception { public FoodEffect read(final ByteBuf buffer) {
final PotionEffect effect = PotionEffect.TYPE.read(buffer); final PotionEffect effect = PotionEffect.TYPE.read(buffer);
final float probability = buffer.readFloat(); final float probability = buffer.readFloat();
return new FoodEffect(effect, probability); return new FoodEffect(effect, probability);
} }
@Override @Override
public void write(final ByteBuf buffer, final FoodEffect value) throws Exception { public void write(final ByteBuf buffer, final FoodEffect value) {
PotionEffect.TYPE.write(buffer, value.effect); PotionEffect.TYPE.write(buffer, value.effect);
buffer.writeFloat(value.probability); buffer.writeFloat(value.probability);
} }
}; };
public static final Type<FoodEffect[]> ARRAY_TYPE = new ArrayType<>(TYPE); public static final Type<FoodEffect[]> ARRAY_TYPE = new ArrayType<>(TYPE);
private final PotionEffect effect;
private final float probability;
public FoodEffect(final PotionEffect effect, final float probability) {
this.effect = effect;
this.probability = probability;
}
public PotionEffect effect() {
return effect;
}
public float probability() {
return probability;
}
} }

Datei anzeigen

@ -25,11 +25,12 @@ package com.viaversion.viaversion.api.minecraft.item.data;
import com.viaversion.viaversion.api.type.Type; import com.viaversion.viaversion.api.type.Type;
import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBuf;
public final class FoodProperties { public record FoodProperties(int nutrition, float saturationModifier, boolean canAlwaysEat, float eatSeconds,
FoodEffect[] possibleEffects) {
public static final Type<FoodProperties> TYPE = new Type<FoodProperties>(FoodProperties.class) { public static final Type<FoodProperties> TYPE = new Type<>(FoodProperties.class) {
@Override @Override
public FoodProperties read(final ByteBuf buffer) throws Exception { public FoodProperties read(final ByteBuf buffer) {
final int nutrition = Type.VAR_INT.readPrimitive(buffer); final int nutrition = Type.VAR_INT.readPrimitive(buffer);
final float saturationModifier = buffer.readFloat(); final float saturationModifier = buffer.readFloat();
final boolean canAlwaysEat = buffer.readBoolean(); final boolean canAlwaysEat = buffer.readBoolean();
@ -39,7 +40,7 @@ public final class FoodProperties {
} }
@Override @Override
public void write(final ByteBuf buffer, final FoodProperties value) throws Exception { public void write(final ByteBuf buffer, final FoodProperties value) {
Type.VAR_INT.writePrimitive(buffer, value.nutrition); Type.VAR_INT.writePrimitive(buffer, value.nutrition);
buffer.writeFloat(value.saturationModifier); buffer.writeFloat(value.saturationModifier);
buffer.writeBoolean(value.canAlwaysEat); buffer.writeBoolean(value.canAlwaysEat);
@ -48,37 +49,4 @@ public final class FoodProperties {
} }
}; };
private final int nutrition;
private final float saturationModifier;
private final boolean canAlwaysEat;
private final float eatSeconds;
private final FoodEffect[] possibleEffects;
public FoodProperties(final int nutrition, final float saturationModifier, final boolean canAlwaysEat, final float eatSeconds, final FoodEffect[] possibleEffects) {
this.nutrition = nutrition;
this.saturationModifier = saturationModifier;
this.canAlwaysEat = canAlwaysEat;
this.eatSeconds = eatSeconds;
this.possibleEffects = possibleEffects;
}
public int nutrition() {
return nutrition;
}
public float saturationModifier() {
return saturationModifier;
}
public boolean canAlwaysEat() {
return canAlwaysEat;
}
public float eatSeconds() {
return eatSeconds;
}
public FoodEffect[] possibleEffects() {
return possibleEffects;
}
} }

Datei anzeigen

@ -28,11 +28,11 @@ import com.viaversion.viaversion.api.type.Type;
import com.viaversion.viaversion.api.type.types.misc.HolderType; import com.viaversion.viaversion.api.type.types.misc.HolderType;
import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBuf;
public final class Instrument { public record Instrument(Holder<SoundEvent> soundEvent, int useDuration, float range) {
public static final HolderType<Instrument> TYPE = new HolderType<Instrument>() { public static final HolderType<Instrument> TYPE = new HolderType<>() {
@Override @Override
public Instrument readDirect(final ByteBuf buffer) throws Exception { public Instrument readDirect(final ByteBuf buffer) {
final Holder<SoundEvent> soundEvent = Type.SOUND_EVENT.read(buffer); final Holder<SoundEvent> soundEvent = Type.SOUND_EVENT.read(buffer);
final int useDuration = Type.VAR_INT.readPrimitive(buffer); final int useDuration = Type.VAR_INT.readPrimitive(buffer);
final float range = buffer.readFloat(); final float range = buffer.readFloat();
@ -40,32 +40,11 @@ public final class Instrument {
} }
@Override @Override
public void writeDirect(final ByteBuf buffer, final Instrument value) throws Exception { public void writeDirect(final ByteBuf buffer, final Instrument value) {
Type.SOUND_EVENT.write(buffer, value.soundEvent()); Type.SOUND_EVENT.write(buffer, value.soundEvent());
Type.VAR_INT.writePrimitive(buffer, value.useDuration()); Type.VAR_INT.writePrimitive(buffer, value.useDuration());
buffer.writeFloat(value.range()); buffer.writeFloat(value.range());
} }
}; };
private final Holder<SoundEvent> soundEvent;
private final int useDuration;
private final float range;
public Instrument(final Holder<SoundEvent> soundEvent, final int useDuration, final float range) {
this.soundEvent = soundEvent;
this.useDuration = useDuration;
this.range = range;
}
public Holder<SoundEvent> soundEvent() {
return soundEvent;
}
public int useDuration() {
return useDuration;
}
public float range() {
return range;
}
} }

Datei anzeigen

@ -27,36 +27,21 @@ import com.viaversion.viaversion.api.type.Type;
import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBuf;
import org.checkerframework.checker.nullness.qual.Nullable; import org.checkerframework.checker.nullness.qual.Nullable;
public final class LodestoneTracker { public record LodestoneTracker(@Nullable GlobalPosition position, boolean tracked) {
public static final Type<LodestoneTracker> TYPE = new Type<LodestoneTracker>(LodestoneTracker.class) { public static final Type<LodestoneTracker> TYPE = new Type<>(LodestoneTracker.class) {
@Override @Override
public LodestoneTracker read(final ByteBuf buffer) throws Exception { public LodestoneTracker read(final ByteBuf buffer) {
final GlobalPosition position = Type.OPTIONAL_GLOBAL_POSITION.read(buffer); final GlobalPosition position = Type.OPTIONAL_GLOBAL_POSITION.read(buffer);
final boolean tracked = buffer.readBoolean(); final boolean tracked = buffer.readBoolean();
return new LodestoneTracker(position, tracked); return new LodestoneTracker(position, tracked);
} }
@Override @Override
public void write(final ByteBuf buffer, final LodestoneTracker value) throws Exception { public void write(final ByteBuf buffer, final LodestoneTracker value) {
Type.OPTIONAL_GLOBAL_POSITION.write(buffer, value.position); Type.OPTIONAL_GLOBAL_POSITION.write(buffer, value.position);
buffer.writeBoolean(value.tracked); buffer.writeBoolean(value.tracked);
} }
}; };
private final GlobalPosition position;
private final boolean tracked;
public LodestoneTracker(@Nullable final GlobalPosition position, final boolean tracked) {
this.position = position;
this.tracked = tracked;
}
public @Nullable GlobalPosition pos() {
return this.position;
}
public boolean tracked() {
return this.tracked;
}
} }

Datei anzeigen

@ -25,11 +25,11 @@ package com.viaversion.viaversion.api.minecraft.item.data;
import com.viaversion.viaversion.api.type.Type; import com.viaversion.viaversion.api.type.Type;
import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBuf;
public final class MapDecoration { public record MapDecoration(String type, double x, double z, float rotation) {
public static final Type<MapDecoration> TYPE = new Type<MapDecoration>(MapDecoration.class) { public static final Type<MapDecoration> TYPE = new Type<>(MapDecoration.class) {
@Override @Override
public MapDecoration read(final ByteBuf buffer) throws Exception { public MapDecoration read(final ByteBuf buffer) {
final String type = Type.STRING.read(buffer); final String type = Type.STRING.read(buffer);
final double x = Type.DOUBLE.readPrimitive(buffer); final double x = Type.DOUBLE.readPrimitive(buffer);
final double z = Type.DOUBLE.readPrimitive(buffer); final double z = Type.DOUBLE.readPrimitive(buffer);
@ -38,40 +38,11 @@ public final class MapDecoration {
} }
@Override @Override
public void write(final ByteBuf buffer, final MapDecoration value) throws Exception { public void write(final ByteBuf buffer, final MapDecoration value) {
Type.STRING.write(buffer, value.type); Type.STRING.write(buffer, value.type);
buffer.writeDouble(value.x); buffer.writeDouble(value.x);
buffer.writeDouble(value.z); buffer.writeDouble(value.z);
buffer.writeFloat(value.rotation); buffer.writeFloat(value.rotation);
} }
}; };
private final String type;
private final double x;
private final double z;
private final float rotation;
public MapDecoration(final String type, final double x, final double z, final float rotation) {
this.type = type;
this.x = x;
this.z = z;
this.rotation = rotation;
}
public String type() {
return type;
}
public double x() {
return x;
}
public double z() {
return z;
}
public float rotation() {
return rotation;
}
} }

Datei anzeigen

@ -28,11 +28,11 @@ import it.unimi.dsi.fastutil.objects.Object2ObjectMap;
import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap;
import java.util.Map; import java.util.Map;
public final class MapDecorations { public record MapDecorations(Map<String, MapDecoration> decorations) {
public static final Type<MapDecorations> TYPE = new Type<MapDecorations>(MapDecorations.class) { public static final Type<MapDecorations> TYPE = new Type<>(MapDecorations.class) {
@Override @Override
public MapDecorations read(final ByteBuf buffer) throws Exception { public MapDecorations read(final ByteBuf buffer) {
final Object2ObjectMap<String, MapDecoration> decorations = new Object2ObjectOpenHashMap<>(); final Object2ObjectMap<String, MapDecoration> decorations = new Object2ObjectOpenHashMap<>();
final int size = Type.VAR_INT.readPrimitive(buffer); final int size = Type.VAR_INT.readPrimitive(buffer);
for (int i = 0; i < size; i++) { for (int i = 0; i < size; i++) {
@ -44,7 +44,7 @@ public final class MapDecorations {
} }
@Override @Override
public void write(final ByteBuf buffer, final MapDecorations value) throws Exception { public void write(final ByteBuf buffer, final MapDecorations value) {
Type.VAR_INT.writePrimitive(buffer, value.decorations.size()); Type.VAR_INT.writePrimitive(buffer, value.decorations.size());
for (final Map.Entry<String, MapDecoration> entry : value.decorations.entrySet()) { for (final Map.Entry<String, MapDecoration> entry : value.decorations.entrySet()) {
Type.STRING.write(buffer, entry.getKey()); Type.STRING.write(buffer, entry.getKey());
@ -52,14 +52,4 @@ public final class MapDecorations {
} }
} }
}; };
private final Map<String, MapDecoration> decorations;
public MapDecorations(final Map<String, MapDecoration> decorations) {
this.decorations = decorations;
}
public Map<String, MapDecoration> decorations() {
return decorations;
}
} }

Datei anzeigen

@ -26,11 +26,11 @@ import com.viaversion.viaversion.api.type.Type;
import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBuf;
import java.util.UUID; import java.util.UUID;
public final class ModifierData { public record ModifierData(UUID uuid, String name, double amount, int operation) {
public static final Type<ModifierData> TYPE = new Type<ModifierData>(ModifierData.class) { public static final Type<ModifierData> TYPE = new Type<>(ModifierData.class) {
@Override @Override
public ModifierData read(final ByteBuf buffer) throws Exception { public ModifierData read(final ByteBuf buffer) {
final UUID uuid = Type.UUID.read(buffer); final UUID uuid = Type.UUID.read(buffer);
final String name = Type.STRING.read(buffer); final String name = Type.STRING.read(buffer);
final double amount = buffer.readDouble(); final double amount = buffer.readDouble();
@ -39,7 +39,7 @@ public final class ModifierData {
} }
@Override @Override
public void write(final ByteBuf buffer, final ModifierData value) throws Exception { public void write(final ByteBuf buffer, final ModifierData value) {
Type.UUID.write(buffer, value.uuid); Type.UUID.write(buffer, value.uuid);
Type.STRING.write(buffer, value.name); Type.STRING.write(buffer, value.name);
buffer.writeDouble(value.amount); buffer.writeDouble(value.amount);
@ -47,31 +47,4 @@ public final class ModifierData {
} }
}; };
private final UUID uuid;
private final String name;
private final double amount;
private final int operation;
public ModifierData(final UUID uuid, final String name, final double amount, final int operation) {
this.uuid = uuid;
this.name = name;
this.amount = amount;
this.operation = operation;
}
public UUID uuid() {
return uuid;
}
public String name() {
return name;
}
public double amount() {
return amount;
}
public int operation() {
return operation;
}
} }

Datei anzeigen

@ -27,14 +27,14 @@ import io.netty.buffer.ByteBuf;
public final class PotDecorations { public final class PotDecorations {
public static final Type<PotDecorations> TYPE = new Type<PotDecorations>(PotDecorations.class) { public static final Type<PotDecorations> TYPE = new Type<>(PotDecorations.class) {
@Override @Override
public PotDecorations read(final ByteBuf buffer) throws Exception { public PotDecorations read(final ByteBuf buffer) {
return new PotDecorations(Type.VAR_INT_ARRAY_PRIMITIVE.read(buffer)); return new PotDecorations(Type.VAR_INT_ARRAY_PRIMITIVE.read(buffer));
} }
@Override @Override
public void write(final ByteBuf buffer, final PotDecorations value) throws Exception { public void write(final ByteBuf buffer, final PotDecorations value) {
Type.VAR_INT_ARRAY_PRIMITIVE.write(buffer, value.itemIds()); Type.VAR_INT_ARRAY_PRIMITIVE.write(buffer, value.itemIds());
} }
}; };

Datei anzeigen

@ -26,11 +26,11 @@ import com.viaversion.viaversion.api.type.Type;
import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBuf;
import org.checkerframework.checker.nullness.qual.Nullable; import org.checkerframework.checker.nullness.qual.Nullable;
public final class PotionContents { public record PotionContents(@Nullable Integer potion, @Nullable Integer customColor, PotionEffect[] customEffects) {
public static final Type<PotionContents> TYPE = new Type<PotionContents>(PotionContents.class) { public static final Type<PotionContents> TYPE = new Type<>(PotionContents.class) {
@Override @Override
public PotionContents read(final ByteBuf buffer) throws Exception { public PotionContents read(final ByteBuf buffer) {
final Integer potion = buffer.readBoolean() ? Type.VAR_INT.readPrimitive(buffer) : null; final Integer potion = buffer.readBoolean() ? Type.VAR_INT.readPrimitive(buffer) : null;
final Integer customColor = buffer.readBoolean() ? buffer.readInt() : null; final Integer customColor = buffer.readBoolean() ? buffer.readInt() : null;
final PotionEffect[] customEffects = PotionEffect.ARRAY_TYPE.read(buffer); final PotionEffect[] customEffects = PotionEffect.ARRAY_TYPE.read(buffer);
@ -38,7 +38,7 @@ public final class PotionContents {
} }
@Override @Override
public void write(final ByteBuf buffer, final PotionContents value) throws Exception { public void write(final ByteBuf buffer, final PotionContents value) {
buffer.writeBoolean(value.potion != null); buffer.writeBoolean(value.potion != null);
if (value.potion != null) { if (value.potion != null) {
Type.VAR_INT.writePrimitive(buffer, value.potion); Type.VAR_INT.writePrimitive(buffer, value.potion);
@ -52,26 +52,4 @@ public final class PotionContents {
PotionEffect.ARRAY_TYPE.write(buffer, value.customEffects); PotionEffect.ARRAY_TYPE.write(buffer, value.customEffects);
} }
}; };
private final Integer potion;
private final Integer customColor;
private final PotionEffect[] customEffects;
public PotionContents(@Nullable final Integer potion, @Nullable final Integer customColor, final PotionEffect[] customEffects) {
this.potion = potion;
this.customColor = customColor;
this.customEffects = customEffects;
}
public @Nullable Integer potion() {
return potion;
}
public @Nullable Integer customColor() {
return customColor;
}
public PotionEffect[] customEffects() {
return customEffects;
}
} }

Datei anzeigen

@ -26,37 +26,22 @@ import com.viaversion.viaversion.api.type.Type;
import com.viaversion.viaversion.api.type.types.ArrayType; import com.viaversion.viaversion.api.type.types.ArrayType;
import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBuf;
public final class PotionEffect { public record PotionEffect(int effect, PotionEffectData effectData) {
public static final Type<PotionEffect> TYPE = new Type<PotionEffect>(PotionEffect.class) { public static final Type<PotionEffect> TYPE = new Type<>(PotionEffect.class) {
@Override @Override
public PotionEffect read(final ByteBuf buffer) throws Exception { public PotionEffect read(final ByteBuf buffer) {
final int effect = Type.VAR_INT.readPrimitive(buffer); final int effect = Type.VAR_INT.readPrimitive(buffer);
final PotionEffectData effectData = PotionEffectData.TYPE.read(buffer); final PotionEffectData effectData = PotionEffectData.TYPE.read(buffer);
return new PotionEffect(effect, effectData); return new PotionEffect(effect, effectData);
} }
@Override @Override
public void write(final ByteBuf buffer, final PotionEffect value) throws Exception { public void write(final ByteBuf buffer, final PotionEffect value) {
Type.VAR_INT.writePrimitive(buffer, value.effect); Type.VAR_INT.writePrimitive(buffer, value.effect);
PotionEffectData.TYPE.write(buffer, value.effectData); PotionEffectData.TYPE.write(buffer, value.effectData);
} }
}; };
public static final Type<PotionEffect[]> ARRAY_TYPE = new ArrayType<>(TYPE); public static final Type<PotionEffect[]> ARRAY_TYPE = new ArrayType<>(TYPE);
private final int effect;
private final PotionEffectData effectData;
public PotionEffect(final int effect, final PotionEffectData effectData) {
this.effect = effect;
this.effectData = effectData;
}
public int effect() {
return effect;
}
public PotionEffectData effectData() {
return effectData;
}
} }

Datei anzeigen

@ -27,11 +27,12 @@ import com.viaversion.viaversion.api.type.Type;
import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBuf;
import org.checkerframework.checker.nullness.qual.Nullable; import org.checkerframework.checker.nullness.qual.Nullable;
public final class PotionEffectData { public record PotionEffectData(int amplifier, int duration, boolean ambient, boolean showParticles,
boolean showIcon, @Nullable PotionEffectData hiddenEffect) {
public static final Type<PotionEffectData> TYPE = new Type<PotionEffectData>(PotionEffectData.class) { public static final Type<PotionEffectData> TYPE = new Type<>(PotionEffectData.class) {
@Override @Override
public PotionEffectData read(final ByteBuf buffer) throws Exception { public PotionEffectData read(final ByteBuf buffer) {
final int amplifier = Type.VAR_INT.readPrimitive(buffer); final int amplifier = Type.VAR_INT.readPrimitive(buffer);
final int duration = Type.VAR_INT.readPrimitive(buffer); final int duration = Type.VAR_INT.readPrimitive(buffer);
final boolean ambient = buffer.readBoolean(); final boolean ambient = buffer.readBoolean();
@ -42,7 +43,7 @@ public final class PotionEffectData {
} }
@Override @Override
public void write(final ByteBuf buffer, final PotionEffectData value) throws Exception { public void write(final ByteBuf buffer, final PotionEffectData value) {
Type.VAR_INT.writePrimitive(buffer, value.amplifier); Type.VAR_INT.writePrimitive(buffer, value.amplifier);
Type.VAR_INT.writePrimitive(buffer, value.duration); Type.VAR_INT.writePrimitive(buffer, value.duration);
buffer.writeBoolean(value.ambient); buffer.writeBoolean(value.ambient);
@ -51,47 +52,6 @@ public final class PotionEffectData {
OPTIONAL_TYPE.write(buffer, value.hiddenEffect); OPTIONAL_TYPE.write(buffer, value.hiddenEffect);
} }
}; };
public static final Type<PotionEffectData> OPTIONAL_TYPE = new OptionalType<PotionEffectData>(TYPE) { public static final Type<PotionEffectData> OPTIONAL_TYPE = new OptionalType<>(TYPE) {
}; };
private final int amplifier;
private final int duration;
private final boolean ambient;
private final boolean showParticles;
private final boolean showIcon;
private final PotionEffectData hiddenEffect;
public PotionEffectData(final int amplifier, final int duration, final boolean ambient, final boolean showParticles,
final boolean showIcon, @Nullable final PotionEffectData hiddenEffect) {
this.amplifier = amplifier;
this.duration = duration;
this.ambient = ambient;
this.showParticles = showParticles;
this.showIcon = showIcon;
this.hiddenEffect = hiddenEffect;
}
public int amplifier() {
return amplifier;
}
public int duration() {
return duration;
}
public boolean ambient() {
return ambient;
}
public boolean showParticles() {
return showParticles;
}
public boolean showIcon() {
return showIcon;
}
public @Nullable PotionEffectData hiddenEffect() {
return hiddenEffect;
}
} }

Datei anzeigen

@ -28,12 +28,12 @@ import com.viaversion.viaversion.util.Either;
import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBuf;
import org.checkerframework.checker.nullness.qual.Nullable; import org.checkerframework.checker.nullness.qual.Nullable;
public final class StatePropertyMatcher { public record StatePropertyMatcher(String name, Either<String, RangedMatcher> matcher) {
// TODO Abstract Either reading // TODO Abstract Either reading
public static final Type<StatePropertyMatcher> TYPE = new Type<StatePropertyMatcher>(StatePropertyMatcher.class) { public static final Type<StatePropertyMatcher> TYPE = new Type<>(StatePropertyMatcher.class) {
@Override @Override
public StatePropertyMatcher read(final ByteBuf buffer) throws Exception { public StatePropertyMatcher read(final ByteBuf buffer) {
final String name = Type.STRING.read(buffer); final String name = Type.STRING.read(buffer);
if (buffer.readBoolean()) { if (buffer.readBoolean()) {
final String value = Type.STRING.read(buffer); final String value = Type.STRING.read(buffer);
@ -46,7 +46,7 @@ public final class StatePropertyMatcher {
} }
@Override @Override
public void write(final ByteBuf buffer, final StatePropertyMatcher value) throws Exception { public void write(final ByteBuf buffer, final StatePropertyMatcher value) {
Type.STRING.write(buffer, value.name); Type.STRING.write(buffer, value.name);
if (value.matcher.isLeft()) { if (value.matcher.isLeft()) {
buffer.writeBoolean(true); buffer.writeBoolean(true);
@ -60,37 +60,6 @@ public final class StatePropertyMatcher {
}; };
public static final Type<StatePropertyMatcher[]> ARRAY_TYPE = new ArrayType<>(TYPE); public static final Type<StatePropertyMatcher[]> ARRAY_TYPE = new ArrayType<>(TYPE);
private final String name; public record RangedMatcher(@Nullable String minValue, @Nullable String maxValue) {
private final Either<String, RangedMatcher> matcher;
public StatePropertyMatcher(final String name, final Either<String, RangedMatcher> matcher) {
this.name = name;
this.matcher = matcher;
}
public String name() {
return name;
}
public Either<String, RangedMatcher> matcher() {
return matcher;
}
public static final class RangedMatcher {
private final String minValue;
private final String maxValue;
public RangedMatcher(@Nullable final String minValue, @Nullable final String maxValue) {
this.minValue = minValue;
this.maxValue = maxValue;
}
public @Nullable String minValue() {
return minValue;
}
public @Nullable String maxValue() {
return maxValue;
}
} }
} }

Datei anzeigen

@ -26,9 +26,9 @@ import com.viaversion.viaversion.api.type.Type;
import com.viaversion.viaversion.api.type.types.ArrayType; import com.viaversion.viaversion.api.type.types.ArrayType;
import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBuf;
public final class SuspiciousStewEffect { public record SuspiciousStewEffect(int mobEffect, int duration) {
public static final Type<SuspiciousStewEffect> TYPE = new Type<SuspiciousStewEffect>(SuspiciousStewEffect.class) { public static final Type<SuspiciousStewEffect> TYPE = new Type<>(SuspiciousStewEffect.class) {
@Override @Override
public SuspiciousStewEffect read(final ByteBuf buffer) { public SuspiciousStewEffect read(final ByteBuf buffer) {
final int effect = Type.VAR_INT.readPrimitive(buffer); final int effect = Type.VAR_INT.readPrimitive(buffer);
@ -38,25 +38,10 @@ public final class SuspiciousStewEffect {
@Override @Override
public void write(final ByteBuf buffer, final SuspiciousStewEffect value) { public void write(final ByteBuf buffer, final SuspiciousStewEffect value) {
Type.VAR_INT.writePrimitive(buffer, value.effect); Type.VAR_INT.writePrimitive(buffer, value.mobEffect);
Type.VAR_INT.writePrimitive(buffer, value.duration); Type.VAR_INT.writePrimitive(buffer, value.duration);
} }
}; };
public static final Type<SuspiciousStewEffect[]> ARRAY_TYPE = new ArrayType<>(TYPE); public static final Type<SuspiciousStewEffect[]> ARRAY_TYPE = new ArrayType<>(TYPE);
private final int effect;
private final int duration;
public SuspiciousStewEffect(final int effect, final int duration) {
this.effect = effect;
this.duration = duration;
}
public int mobEffect() {
return effect;
}
public int duration() {
return duration;
}
} }

Datei anzeigen

@ -25,11 +25,11 @@ package com.viaversion.viaversion.api.minecraft.item.data;
import com.viaversion.viaversion.api.type.Type; import com.viaversion.viaversion.api.type.Type;
import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBuf;
public final class ToolProperties { public record ToolProperties(ToolRule[] rules, float defaultMiningSpeed, int damagePerBlock) {
public static final Type<ToolProperties> TYPE = new Type<ToolProperties>(ToolProperties.class) { public static final Type<ToolProperties> TYPE = new Type<>(ToolProperties.class) {
@Override @Override
public ToolProperties read(final ByteBuf buffer) throws Exception { public ToolProperties read(final ByteBuf buffer) {
final ToolRule[] rules = ToolRule.ARRAY_TYPE.read(buffer); final ToolRule[] rules = ToolRule.ARRAY_TYPE.read(buffer);
final float defaultMiningSpeed = buffer.readFloat(); final float defaultMiningSpeed = buffer.readFloat();
final int damagePerBlock = Type.VAR_INT.readPrimitive(buffer); final int damagePerBlock = Type.VAR_INT.readPrimitive(buffer);
@ -37,32 +37,11 @@ public final class ToolProperties {
} }
@Override @Override
public void write(final ByteBuf buffer, final ToolProperties value) throws Exception { public void write(final ByteBuf buffer, final ToolProperties value) {
ToolRule.ARRAY_TYPE.write(buffer, value.rules()); ToolRule.ARRAY_TYPE.write(buffer, value.rules());
buffer.writeFloat(value.defaultMiningSpeed()); buffer.writeFloat(value.defaultMiningSpeed());
Type.VAR_INT.writePrimitive(buffer, value.damagePerBlock()); Type.VAR_INT.writePrimitive(buffer, value.damagePerBlock());
} }
}; };
private final ToolRule[] rules;
private final float defaultMiningSpeed;
private final int damagePerBlock;
public ToolProperties(final ToolRule[] rules, final float defaultMiningSpeed, final int damagePerBlock) {
this.rules = rules;
this.defaultMiningSpeed = defaultMiningSpeed;
this.damagePerBlock = damagePerBlock;
}
public ToolRule[] rules() {
return rules;
}
public float defaultMiningSpeed() {
return defaultMiningSpeed;
}
public int damagePerBlock() {
return damagePerBlock;
}
} }

Datei anzeigen

@ -28,11 +28,11 @@ import com.viaversion.viaversion.api.type.types.ArrayType;
import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBuf;
import org.checkerframework.checker.nullness.qual.Nullable; import org.checkerframework.checker.nullness.qual.Nullable;
public final class ToolRule { public record ToolRule(HolderSet blocks, @Nullable Float speed, @Nullable Boolean correctForDrops) {
public static final Type<ToolRule> TYPE = new Type<ToolRule>(ToolRule.class) { public static final Type<ToolRule> TYPE = new Type<>(ToolRule.class) {
@Override @Override
public ToolRule read(final ByteBuf buffer) throws Exception { public ToolRule read(final ByteBuf buffer) {
final HolderSet blocks = Type.HOLDER_SET.read(buffer); final HolderSet blocks = Type.HOLDER_SET.read(buffer);
final Float speed = Type.OPTIONAL_FLOAT.read(buffer); final Float speed = Type.OPTIONAL_FLOAT.read(buffer);
final Boolean correctForDrops = Type.OPTIONAL_BOOLEAN.read(buffer); final Boolean correctForDrops = Type.OPTIONAL_BOOLEAN.read(buffer);
@ -40,7 +40,7 @@ public final class ToolRule {
} }
@Override @Override
public void write(final ByteBuf buffer, final ToolRule value) throws Exception { public void write(final ByteBuf buffer, final ToolRule value) {
Type.HOLDER_SET.write(buffer, value.blocks); Type.HOLDER_SET.write(buffer, value.blocks);
Type.OPTIONAL_FLOAT.write(buffer, value.speed); Type.OPTIONAL_FLOAT.write(buffer, value.speed);
Type.OPTIONAL_BOOLEAN.write(buffer, value.correctForDrops); Type.OPTIONAL_BOOLEAN.write(buffer, value.correctForDrops);
@ -48,25 +48,4 @@ public final class ToolRule {
}; };
public static final Type<ToolRule[]> ARRAY_TYPE = new ArrayType<>(TYPE); public static final Type<ToolRule[]> ARRAY_TYPE = new ArrayType<>(TYPE);
private final HolderSet blocks;
private final Float speed;
private final Boolean correctForDrops;
public ToolRule(final HolderSet blocks, @Nullable final Float speed, @Nullable final Boolean correctForDrops) {
this.blocks = blocks;
this.speed = speed;
this.correctForDrops = correctForDrops;
}
public HolderSet blocks() {
return blocks;
}
public @Nullable Float speed() {
return speed;
}
public @Nullable Boolean correctForDrops() {
return correctForDrops;
}
} }

Datei anzeigen

@ -25,9 +25,9 @@ package com.viaversion.viaversion.api.minecraft.item.data;
import com.viaversion.viaversion.api.type.Type; import com.viaversion.viaversion.api.type.Type;
import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBuf;
public final class Unbreakable { public record Unbreakable(boolean showInTooltip) {
public static final Type<Unbreakable> TYPE = new Type<Unbreakable>(Unbreakable.class) { public static final Type<Unbreakable> TYPE = new Type<>(Unbreakable.class) {
@Override @Override
public Unbreakable read(final ByteBuf buffer) { public Unbreakable read(final ByteBuf buffer) {
return new Unbreakable(buffer.readBoolean()); return new Unbreakable(buffer.readBoolean());
@ -39,13 +39,4 @@ public final class Unbreakable {
} }
}; };
private final boolean showInTooltip;
public Unbreakable(final boolean showInTooltip) {
this.showInTooltip = showInTooltip;
}
public boolean showInTooltip() {
return showInTooltip;
}
} }

Datei anzeigen

@ -25,11 +25,12 @@ package com.viaversion.viaversion.api.minecraft.item.data;
import com.viaversion.viaversion.api.type.Type; import com.viaversion.viaversion.api.type.Type;
import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBuf;
public final class WrittenBook { public record WrittenBook(FilterableString title, String author, int generation, FilterableComponent[] pages,
boolean resolved) {
public static final Type<WrittenBook> TYPE = new Type<WrittenBook>(WrittenBook.class) { public static final Type<WrittenBook> TYPE = new Type<>(WrittenBook.class) {
@Override @Override
public WrittenBook read(final ByteBuf buffer) throws Exception { public WrittenBook read(final ByteBuf buffer) {
final FilterableString title = FilterableString.TYPE.read(buffer); final FilterableString title = FilterableString.TYPE.read(buffer);
final String author = Type.STRING.read(buffer); final String author = Type.STRING.read(buffer);
final int generation = Type.VAR_INT.readPrimitive(buffer); final int generation = Type.VAR_INT.readPrimitive(buffer);
@ -39,7 +40,7 @@ public final class WrittenBook {
} }
@Override @Override
public void write(final ByteBuf buffer, final WrittenBook value) throws Exception { public void write(final ByteBuf buffer, final WrittenBook value) {
FilterableString.TYPE.write(buffer, value.title); FilterableString.TYPE.write(buffer, value.title);
Type.STRING.write(buffer, value.author); Type.STRING.write(buffer, value.author);
Type.VAR_INT.writePrimitive(buffer, value.generation); Type.VAR_INT.writePrimitive(buffer, value.generation);
@ -48,37 +49,4 @@ public final class WrittenBook {
} }
}; };
private final FilterableString title;
private final String author;
private final int generation;
private final FilterableComponent[] pages;
private final boolean resolved;
public WrittenBook(final FilterableString title, final String author, final int generation, final FilterableComponent[] pages, final boolean resolved) {
this.title = title;
this.author = author;
this.generation = generation;
this.pages = pages;
this.resolved = resolved;
}
public FilterableString title() {
return title;
}
public String author() {
return author;
}
public int generation() {
return generation;
}
public FilterableComponent[] pages() {
return pages;
}
public boolean resolved() {
return resolved;
}
} }

Datei anzeigen

@ -22,22 +22,11 @@
*/ */
package com.viaversion.viaversion.api.platform; package com.viaversion.viaversion.api.platform;
import org.checkerframework.checker.nullness.qual.Nullable;
/** /**
* @param <T> task type * @param <T> task type
*/ */
public interface PlatformTask<T> { public interface PlatformTask<T> {
/**
* Returns the actual object represented by this task/task id.
* Null if task cannot be instantly tracked.
*
* @return platform based object, or null if not tracked/cancellable
*/
@Deprecated/*(forRemoval = true)*/
@Nullable T getObject();
/** /**
* Cancels the task. * Cancels the task.
* *

Datei anzeigen

@ -181,11 +181,6 @@ public interface ViaPlatform<T> {
*/ */
ViaVersionConfig getConf(); ViaVersionConfig getConf();
@Deprecated/*(forRemoval = true)*/
default ConfigurationProvider getConfigurationProvider() {
return Via.getManager().getConfigurationProvider();
}
/** /**
* Get ViaVersions's data folder. * Get ViaVersions's data folder.
* *

Datei anzeigen

@ -383,7 +383,7 @@ public abstract class AbstractProtocol<CU extends ClientboundPacketType, CM exte
} }
@Override @Override
public void transform(Direction direction, State state, PacketWrapper packetWrapper) throws Exception { public void transform(Direction direction, State state, PacketWrapper packetWrapper) throws InformativeException, CancelException {
PacketMappings mappings = direction == Direction.CLIENTBOUND ? clientboundMappings : serverboundMappings; PacketMappings mappings = direction == Direction.CLIENTBOUND ? clientboundMappings : serverboundMappings;
int unmappedId = packetWrapper.getId(); int unmappedId = packetWrapper.getId();
PacketMapping packetMapping = mappings.mappedPacket(state, unmappedId); PacketMapping packetMapping = mappings.mappedPacket(state, unmappedId);
@ -397,8 +397,6 @@ public abstract class AbstractProtocol<CU extends ClientboundPacketType, CM exte
if (handler != null) { if (handler != null) {
try { try {
handler.handle(packetWrapper); handler.handle(packetWrapper);
} catch (CancelException e) {
throw e; // Pass through CancelExceptions
} catch (InformativeException e) { } catch (InformativeException e) {
e.addSource(handler.getClass()); e.addSource(handler.getClass());
printRemapError(direction, state, unmappedId, packetWrapper.getId(), e); printRemapError(direction, state, unmappedId, packetWrapper.getId(), e);

Datei anzeigen

@ -33,11 +33,12 @@ import com.viaversion.viaversion.api.protocol.packet.ServerboundPacketType;
import com.viaversion.viaversion.api.protocol.packet.State; import com.viaversion.viaversion.api.protocol.packet.State;
import com.viaversion.viaversion.api.protocol.packet.provider.PacketTypesProvider; import com.viaversion.viaversion.api.protocol.packet.provider.PacketTypesProvider;
import com.viaversion.viaversion.api.protocol.remapper.PacketHandler; import com.viaversion.viaversion.api.protocol.remapper.PacketHandler;
import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper;
import com.viaversion.viaversion.api.rewriter.EntityRewriter; import com.viaversion.viaversion.api.rewriter.EntityRewriter;
import com.viaversion.viaversion.api.rewriter.ItemRewriter; import com.viaversion.viaversion.api.rewriter.ItemRewriter;
import com.viaversion.viaversion.api.rewriter.TagRewriter; import com.viaversion.viaversion.api.rewriter.TagRewriter;
import com.viaversion.viaversion.api.type.Type; import com.viaversion.viaversion.api.type.Type;
import com.viaversion.viaversion.exception.CancelException;
import com.viaversion.viaversion.exception.InformativeException;
import org.checkerframework.checker.nullness.qual.Nullable; import org.checkerframework.checker.nullness.qual.Nullable;
/** /**
@ -62,11 +63,6 @@ public interface Protocol<CU extends ClientboundPacketType, CM extends Clientbou
registerServerbound(state, packetType.getId(), packetType.getId(), handler, false); registerServerbound(state, packetType.getId(), packetType.getId(), handler, false);
} }
@Deprecated/*(forRemoval = true)*/
default void registerServerbound(State state, int unmappedPacketId, int mappedPacketId) {
registerServerbound(state, unmappedPacketId, mappedPacketId, (PacketHandler) null);
}
default void registerServerbound(State state, int unmappedPacketId, int mappedPacketId, @Nullable PacketHandler handler) { default void registerServerbound(State state, int unmappedPacketId, int mappedPacketId, @Nullable PacketHandler handler) {
registerServerbound(state, unmappedPacketId, mappedPacketId, handler, false); registerServerbound(state, unmappedPacketId, mappedPacketId, handler, false);
} }
@ -85,11 +81,6 @@ public interface Protocol<CU extends ClientboundPacketType, CM extends Clientbou
void cancelServerbound(State state, int mappedPacketId); void cancelServerbound(State state, int mappedPacketId);
@Deprecated/*(forRemoval = true)*/
default void registerClientbound(State state, int unmappedPacketId, int mappedPacketId) {
registerClientbound(state, unmappedPacketId, mappedPacketId, (PacketHandler) null);
}
default void registerClientbound(State state, int unmappedPacketId, int mappedPacketId, @Nullable PacketHandler handler) { default void registerClientbound(State state, int unmappedPacketId, int mappedPacketId, @Nullable PacketHandler handler) {
registerClientbound(state, unmappedPacketId, mappedPacketId, handler, false); registerClientbound(state, unmappedPacketId, mappedPacketId, handler, false);
} }
@ -126,7 +117,7 @@ public interface Protocol<CU extends ClientboundPacketType, CM extends Clientbou
* @param mappedPacketType clientbound packet type after transforming for the client * @param mappedPacketType clientbound packet type after transforming for the client
*/ */
default void registerClientbound(CU packetType, @Nullable CM mappedPacketType) { default void registerClientbound(CU packetType, @Nullable CM mappedPacketType) {
registerClientbound(packetType, mappedPacketType, (PacketHandler) null); registerClientbound(packetType, mappedPacketType, null);
} }
/** /**
@ -165,7 +156,7 @@ public interface Protocol<CU extends ClientboundPacketType, CM extends Clientbou
* @param mappedPacketType serverbound packet type after transforming for the client * @param mappedPacketType serverbound packet type after transforming for the client
*/ */
default void registerServerbound(SU packetType, @Nullable SM mappedPacketType) { default void registerServerbound(SU packetType, @Nullable SM mappedPacketType) {
registerServerbound(packetType, mappedPacketType, (PacketHandler) null); registerServerbound(packetType, mappedPacketType, null);
} }
/** /**
@ -270,9 +261,8 @@ public interface Protocol<CU extends ClientboundPacketType, CM extends Clientbou
* @param direction The direction the packet is going in * @param direction The direction the packet is going in
* @param state The current protocol state * @param state The current protocol state
* @param packetWrapper The packet wrapper to transform * @param packetWrapper The packet wrapper to transform
* @throws Exception Throws exception if it fails to transform
*/ */
void transform(Direction direction, State state, PacketWrapper packetWrapper) throws Exception; void transform(Direction direction, State state, PacketWrapper packetWrapper) throws InformativeException, CancelException;
/** /**
* Returns a packet type provider for this protocol to get packet types by id. * Returns a packet type provider for this protocol to get packet types by id.
@ -392,72 +382,4 @@ public interface Protocol<CU extends ClientboundPacketType, CM extends Clientbou
default boolean isBaseProtocol() { default boolean isBaseProtocol() {
return false; return false;
} }
// ---------------------------------------------------------
/**
* @deprecated use {@link #cancelServerbound(State, int)}
*/
@Deprecated/*(forRemoval = true)*/
default void cancelServerbound(State state, int unmappedPacketId, int mappedPacketId) {
cancelServerbound(state, unmappedPacketId);
}
/**
* @deprecated use {@link #cancelClientbound(State, int)}
*/
@Deprecated/*(forRemoval = true)*/
default void cancelClientbound(State state, int unmappedPacketId, int mappedPacketId) {
cancelClientbound(state, unmappedPacketId);
}
@Deprecated/*(forRemoval = true)*/
default void registerClientbound(State state, int unmappedPacketId, int mappedPacketId, PacketRemapper packetRemapper) {
registerClientbound(state, unmappedPacketId, mappedPacketId, packetRemapper.asPacketHandler(), false);
}
@Deprecated/*(forRemoval = true)*/
default void registerClientbound(State state, int unmappedPacketId, int mappedPacketId, PacketRemapper packetRemapper, boolean override) {
registerClientbound(state, unmappedPacketId, mappedPacketId, packetRemapper.asPacketHandler(), override);
}
@Deprecated/*(forRemoval = true)*/
default void registerClientbound(CU packetType, @Nullable PacketRemapper packetRemapper) {
registerClientbound(packetType, packetRemapper.asPacketHandler());
}
@Deprecated/*(forRemoval = true)*/
default void registerClientbound(CU packetType, @Nullable CM mappedPacketType, @Nullable PacketRemapper packetRemapper) {
registerClientbound(packetType, mappedPacketType, packetRemapper.asPacketHandler(), false);
}
@Deprecated/*(forRemoval = true)*/
default void registerClientbound(CU packetType, @Nullable CM mappedPacketType, @Nullable PacketRemapper packetRemapper, boolean override) {
registerClientbound(packetType, mappedPacketType, packetRemapper.asPacketHandler(), override);
}
@Deprecated/*(forRemoval = true)*/
default void registerServerbound(State state, int unmappedPacketId, int mappedPacketId, PacketRemapper packetRemapper) {
registerServerbound(state, unmappedPacketId, mappedPacketId, packetRemapper.asPacketHandler(), false);
}
@Deprecated/*(forRemoval = true)*/
default void registerServerbound(State state, int unmappedPacketId, int mappedPacketId, PacketRemapper packetRemapper, boolean override) {
registerServerbound(state, unmappedPacketId, mappedPacketId, packetRemapper.asPacketHandler(), override);
}
@Deprecated/*(forRemoval = true)*/
default void registerServerbound(SU packetType, @Nullable PacketRemapper packetRemapper) {
registerServerbound(packetType, packetRemapper.asPacketHandler());
}
@Deprecated/*(forRemoval = true)*/
default void registerServerbound(SU packetType, @Nullable SM mappedPacketType, @Nullable PacketRemapper packetRemapper) {
registerServerbound(packetType, mappedPacketType, packetRemapper.asPacketHandler(), false);
}
@Deprecated/*(forRemoval = true)*/
default void registerServerbound(SU packetType, @Nullable SM mappedPacketType, @Nullable PacketRemapper packetRemapper, boolean override) {
registerServerbound(packetType, mappedPacketType, packetRemapper.asPacketHandler(), override);
}
} }

Datei anzeigen

@ -92,7 +92,7 @@ public interface ProtocolManager {
/** /**
* @deprecated use Protocol#isBaseProtocol() * @deprecated use Protocol#isBaseProtocol()
*/ */
@Deprecated/*(forRemoval = true)*/ @Deprecated(forRemoval = true)
default boolean isBaseProtocol(Protocol protocol) { default boolean isBaseProtocol(Protocol protocol) {
return protocol.isBaseProtocol(); return protocol.isBaseProtocol();
} }
@ -180,7 +180,6 @@ public interface ProtocolManager {
* If set to -1, no distance checks will be applied (12010 is ok). * If set to -1, no distance checks will be applied (12010 is ok).
* *
* @param maxPathDeltaIncrease the max delta the path calculation allows the distance to the target protocol version to increase * @param maxPathDeltaIncrease the max delta the path calculation allows the distance to the target protocol version to increase
* @see #onlyCheckLoweringPathEntries()
*/ */
void setMaxPathDeltaIncrease(int maxPathDeltaIncrease); void setMaxPathDeltaIncrease(int maxPathDeltaIncrease);
@ -207,16 +206,6 @@ public interface ProtocolManager {
*/ */
int getMaxPathDeltaIncrease(); int getMaxPathDeltaIncrease();
@Deprecated/*(forRemoval = true)*/
default void setOnlyCheckLoweringPathEntries(final boolean onlyCheckLoweringPathEntries) {
setMaxPathDeltaIncrease(onlyCheckLoweringPathEntries ? 0 : -1);
}
@Deprecated/*(forRemoval = true)*/
default boolean onlyCheckLoweringPathEntries() {
return getMaxPathDeltaIncrease() != -1;
}
/** /**
* Returns the maximum protocol path size applied to {@link #getProtocolPath(ProtocolVersion, ProtocolVersion)}. * Returns the maximum protocol path size applied to {@link #getProtocolPath(ProtocolVersion, ProtocolVersion)}.
* *
@ -251,7 +240,7 @@ public interface ProtocolManager {
* *
* @param protocolClass protocol class * @param protocolClass protocol class
*/ */
void completeMappingDataLoading(Class<? extends Protocol> protocolClass) throws Exception; void completeMappingDataLoading(Class<? extends Protocol> protocolClass);
/** /**
* Shuts down the executor and uncaches mappings if all futures have been completed. * Shuts down the executor and uncaches mappings if all futures have been completed.

Datei anzeigen

@ -25,7 +25,7 @@ package com.viaversion.viaversion.api.protocol.packet;
/** /**
* Interface to be implemented by server outgoing packet types. * Interface to be implemented by server outgoing packet types.
*/ */
public interface ClientboundPacketType extends PacketType { public non-sealed interface ClientboundPacketType extends PacketType {
@Override @Override
default Direction direction() { default Direction direction() {

Datei anzeigen

@ -28,6 +28,7 @@ import com.viaversion.viaversion.api.connection.UserConnection;
public class PacketTracker { public class PacketTracker {
private final UserConnection connection; private final UserConnection connection;
private boolean packetLimiterEnabled = true;
private long sentPackets; private long sentPackets;
private long receivedPackets; private long receivedPackets;
// Used for tracking pps // Used for tracking pps
@ -162,4 +163,12 @@ public class PacketTracker {
public void setWarnings(int warnings) { public void setWarnings(int warnings) {
this.warnings = warnings; this.warnings = warnings;
} }
public boolean isPacketLimiterEnabled() {
return packetLimiterEnabled;
}
public void setPacketLimiterEnabled(boolean packetLimiterEnabled) {
this.packetLimiterEnabled = packetLimiterEnabled;
}
} }

Datei anzeigen

@ -28,7 +28,7 @@ package com.viaversion.viaversion.api.protocol.packet;
* @see ClientboundPacketType * @see ClientboundPacketType
* @see ServerboundPacketType * @see ServerboundPacketType
*/ */
public interface PacketType { public sealed interface PacketType permits ClientboundPacketType, ServerboundPacketType {
/** /**
* Returns the packet id for the implemented protocol. * Returns the packet id for the implemented protocol.

Datei anzeigen

@ -27,6 +27,7 @@ import com.viaversion.viaversion.api.connection.UserConnection;
import com.viaversion.viaversion.api.protocol.Protocol; import com.viaversion.viaversion.api.protocol.Protocol;
import com.viaversion.viaversion.api.protocol.remapper.PacketHandler; import com.viaversion.viaversion.api.protocol.remapper.PacketHandler;
import com.viaversion.viaversion.api.type.Type; import com.viaversion.viaversion.api.type.Type;
import com.viaversion.viaversion.exception.CancelException;
import com.viaversion.viaversion.exception.InformativeException; import com.viaversion.viaversion.exception.InformativeException;
import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelFuture; import io.netty.channel.ChannelFuture;
@ -83,7 +84,7 @@ public interface PacketWrapper {
* @return The requested type or throws ArrayIndexOutOfBounds * @return The requested type or throws ArrayIndexOutOfBounds
* @throws InformativeException If it fails to find it, an exception will be thrown. * @throws InformativeException If it fails to find it, an exception will be thrown.
*/ */
<T> T get(Type<T> type, int index) throws Exception; <T> T get(Type<T> type, int index) throws InformativeException;
/** /**
* Check if a type is at an index * Check if a type is at an index
@ -113,7 +114,7 @@ public interface PacketWrapper {
* @param value The value of the part you wish to set it to. * @param value The value of the part you wish to set it to.
* @throws InformativeException If it fails to set it, an exception will be thrown. * @throws InformativeException If it fails to set it, an exception will be thrown.
*/ */
<T> void set(Type<T> type, int index, T value) throws Exception; <T> void set(Type<T> type, int index, @Nullable T value) throws InformativeException;
/** /**
* Read a type from the input. * Read a type from the input.
@ -123,7 +124,7 @@ public interface PacketWrapper {
* @return The requested type * @return The requested type
* @throws InformativeException If it fails to read * @throws InformativeException If it fails to read
*/ */
<T> T read(Type<T> type) throws Exception; <T> T read(Type<T> type) throws InformativeException;
/** /**
* Write a type to the output. * Write a type to the output.
@ -132,7 +133,7 @@ public interface PacketWrapper {
* @param <T> The return type of the type you wish to write. * @param <T> The return type of the type you wish to write.
* @param value The value of the type to write. * @param value The value of the type to write.
*/ */
<T> void write(Type<T> type, T value); <T> void write(Type<T> type, @Nullable T value);
/** /**
* Take a value from the input and write to the output. * Take a value from the input and write to the output.
@ -140,16 +141,16 @@ public interface PacketWrapper {
* @param type The type to read and write. * @param type The type to read and write.
* @param <T> The return type of the type you wish to pass through. * @param <T> The return type of the type you wish to pass through.
* @return The type which was read/written. * @return The type which was read/written.
* @throws Exception If it failed to read or write * @throws InformativeException If it failed to read or write
*/ */
<T> T passthrough(Type<T> type) throws Exception; <T> T passthrough(Type<T> type) throws InformativeException;
/** /**
* Take all the inputs and write them to the output. * Take all the inputs and write them to the output.
* *
* @throws Exception If it failed to read or write * @throws InformativeException If it failed to read or write
*/ */
void passthroughAll() throws Exception; void passthroughAll() throws InformativeException;
/** /**
* Write the current output to a buffer. * Write the current output to a buffer.
@ -157,7 +158,7 @@ public interface PacketWrapper {
* @param buffer The buffer to write to. * @param buffer The buffer to write to.
* @throws InformativeException Throws an exception if it fails to write a value. * @throws InformativeException Throws an exception if it fails to write a value.
*/ */
void writeToBuffer(ByteBuf buffer) throws Exception; void writeToBuffer(ByteBuf buffer) throws InformativeException;
/** /**
* Clear the input buffer / readable objects * Clear the input buffer / readable objects
@ -173,9 +174,9 @@ public interface PacketWrapper {
* Send this packet to the connection on the current thread, skipping the current protocol. * Send this packet to the connection on the current thread, skipping the current protocol.
* *
* @param protocol protocol to be sent through * @param protocol protocol to be sent through
* @throws Exception if it fails to write * @throws InformativeException if it fails to write
*/ */
default void send(Class<? extends Protocol> protocol) throws Exception { default void send(Class<? extends Protocol> protocol) throws InformativeException {
send(protocol, true); send(protocol, true);
} }
@ -184,17 +185,17 @@ public interface PacketWrapper {
* *
* @param protocol protocol to be sent through * @param protocol protocol to be sent through
* @param skipCurrentPipeline whether transformation of the current protocol should be skipped * @param skipCurrentPipeline whether transformation of the current protocol should be skipped
* @throws Exception if it fails to write * @throws InformativeException if it fails to write
*/ */
void send(Class<? extends Protocol> protocol, boolean skipCurrentPipeline) throws Exception; void send(Class<? extends Protocol> protocol, boolean skipCurrentPipeline) throws InformativeException;
/** /**
* Send this packet to the connection, submitted to netty's event loop and skipping the current protocol. * Send this packet to the connection, submitted to netty's event loop and skipping the current protocol.
* *
* @param protocol protocol to be sent through * @param protocol protocol to be sent through
* @throws Exception if it fails to write * @throws InformativeException if it fails to write
*/ */
default void scheduleSend(Class<? extends Protocol> protocol) throws Exception { default void scheduleSend(Class<? extends Protocol> protocol) throws InformativeException {
scheduleSend(protocol, true); scheduleSend(protocol, true);
} }
@ -203,45 +204,33 @@ public interface PacketWrapper {
* *
* @param protocol protocol to be sent through * @param protocol protocol to be sent through
* @param skipCurrentPipeline whether transformation of the current protocol should be skipped * @param skipCurrentPipeline whether transformation of the current protocol should be skipped
* @throws Exception if it fails to write
*/ */
void scheduleSend(Class<? extends Protocol> protocol, boolean skipCurrentPipeline) throws Exception; void scheduleSend(Class<? extends Protocol> protocol, boolean skipCurrentPipeline) throws InformativeException;
/** /**
* Send this packet to the associated user. * Sends this packet to the associated user.
* Be careful not to send packets twice. * The ChannelFuture fails exceptionally if the packet is cancelled during construction.
* (Sends it after current)
* Also returns the packets ChannelFuture
* *
* @param protocolClass the protocol class to start from in the pipeline * @param protocolClass the protocol class to start from in the pipeline
* @return new ChannelFuture for the write operation * @return new ChannelFuture for the write operation
* @throws Exception if it fails to write
*/ */
ChannelFuture sendFuture(Class<? extends Protocol> protocolClass) throws Exception; ChannelFuture sendFuture(Class<? extends Protocol> protocolClass) throws InformativeException;
/**
* @deprecated misleading; use {@link #sendRaw()}. This method will be removed in 5.0.0
*/
@Deprecated/*(forRemoval = true)*/
default void send() throws Exception {
sendRaw();
}
/** /**
* Sends this packet to the connection. * Sends this packet to the connection.
* <b>Unlike {@link #send(Class)}, this method does not handle the pipeline with packet id and data changes.</b> * <b>Unlike {@link #send(Class)}, this method does not handle the pipeline with packet id and data changes.</b>
* *
* @throws Exception if it fails to write * @throws InformativeException if it fails to write
*/ */
void sendRaw() throws Exception; void sendRaw() throws InformativeException;
/** /**
* Sends this packet to the associated user, submitted to netty's event loop. * Sends this packet to the associated user, submitted to netty's event loop.
* <b>Unlike {@link #send(Class)}, this method does not handle the pipeline with packet id and data changes.</b> * <b>Unlike {@link #send(Class)}, this method does not handle the pipeline with packet id and data changes.</b>
* *
* @throws Exception if it fails to write * @throws InformativeException if it fails to write
*/ */
void scheduleSendRaw() throws Exception; void scheduleSendRaw() throws InformativeException;
/** /**
* Creates a new packet for the target of this packet. * Creates a new packet for the target of this packet.
@ -259,9 +248,8 @@ public interface PacketWrapper {
* @param packetType packet type of the new packet * @param packetType packet type of the new packet
* @param handler handler to write to the packet * @param handler handler to write to the packet
* @return newly created packet wrapper * @return newly created packet wrapper
* @throws Exception if it failed to write the values from the ValueCreator
*/ */
default PacketWrapper create(PacketType packetType, PacketHandler handler) throws Exception { default PacketWrapper create(PacketType packetType, PacketHandler handler) throws InformativeException {
return create(packetType.getId(), handler); return create(packetType.getId(), handler);
} }
@ -279,9 +267,8 @@ public interface PacketWrapper {
* @param packetId id of the packet * @param packetId id of the packet
* @param handler handler to write to the packet * @param handler handler to write to the packet
* @return newly created packet wrapper * @return newly created packet wrapper
* @throws Exception if it failed to write the values from the ValueCreator
*/ */
PacketWrapper create(int packetId, PacketHandler handler) throws Exception; PacketWrapper create(int packetId, PacketHandler handler) throws InformativeException;
/** /**
* Applies a pipeline from an index to the wrapper. * Applies a pipeline from an index to the wrapper.
@ -289,23 +276,8 @@ public interface PacketWrapper {
* @param direction protocol direction * @param direction protocol direction
* @param state protocol state * @param state protocol state
* @param pipeline protocol pipeline * @param pipeline protocol pipeline
* @throws Exception If it fails to transform a packet, exception will be thrown
*/ */
void apply(Direction direction, State state, List<Protocol> pipeline) throws Exception; void apply(Direction direction, State state, List<Protocol> pipeline) throws InformativeException, CancelException;
/**
* @deprecated use {@link #apply(Direction, State, List)}
*/
@Deprecated
PacketWrapper apply(Direction direction, State state, int index, List<Protocol> pipeline, boolean reverse) throws Exception;
/**
* @deprecated use {@link #apply(Direction, State, List)}
*/
@Deprecated
default PacketWrapper apply(Direction direction, State state, int index, List<Protocol> pipeline) throws Exception {
return apply(direction, state, index, pipeline, false);
}
/** /**
* Check if this packet is cancelled. * Check if this packet is cancelled.
@ -340,41 +312,29 @@ public interface PacketWrapper {
*/ */
void resetReader(); void resetReader();
/**
* Send the current packet to the server.
* (Ensure the ID is suitable for viaversion)
*
* @throws Exception If it failed to write
* @deprecated misleading; use {@link #sendToServerRaw()}. This method will be removed in 5.0.0
*/
@Deprecated/*(forRemoval = true)*/
default void sendToServer() throws Exception {
sendToServerRaw();
}
/** /**
* Sends this packet to the server. * Sends this packet to the server.
* <b>Unlike {@link #sendToServer(Class)}, this method does not handle the pipeline with packet id and data changes.</b> * <b>Unlike {@link #sendToServer(Class)}, this method does not handle the pipeline with packet id and data changes.</b>
* *
* @throws Exception if it fails to write * @throws InformativeException if it fails to write
*/ */
void sendToServerRaw() throws Exception; void sendToServerRaw() throws InformativeException;
/** /**
* Sends this packet to the server, submitted to netty's event loop. * Sends this packet to the server, submitted to netty's event loop.
* <b>Unlike {@link #sendToServer(Class)}, this method does not handle the pipeline with packet id and data changes.</b> * <b>Unlike {@link #sendToServer(Class)}, this method does not handle the pipeline with packet id and data changes.</b>
* *
* @throws Exception if it fails to write * @throws InformativeException if it fails to write
*/ */
void scheduleSendToServerRaw() throws Exception; void scheduleSendToServerRaw() throws InformativeException;
/** /**
* Send this packet to the server on the current thread, skipping the current protocol. * Send this packet to the server on the current thread, skipping the current protocol.
* *
* @param protocol protocol to be sent through * @param protocol protocol to be sent through
* @throws Exception if it fails to write * @throws InformativeException if it fails to write
*/ */
default void sendToServer(Class<? extends Protocol> protocol) throws Exception { default void sendToServer(Class<? extends Protocol> protocol) throws InformativeException {
sendToServer(protocol, true); sendToServer(protocol, true);
} }
@ -383,17 +343,17 @@ public interface PacketWrapper {
* *
* @param protocol protocol to be sent through * @param protocol protocol to be sent through
* @param skipCurrentPipeline whether transformation of the current protocol should be skipped * @param skipCurrentPipeline whether transformation of the current protocol should be skipped
* @throws Exception if it fails to write * @throws InformativeException if it fails to write
*/ */
void sendToServer(Class<? extends Protocol> protocol, boolean skipCurrentPipeline) throws Exception; void sendToServer(Class<? extends Protocol> protocol, boolean skipCurrentPipeline) throws InformativeException;
/** /**
* Send this packet to the server, submitted to netty's event loop and skipping the current protocol. * Send this packet to the server, submitted to netty's event loop and skipping the current protocol.
* *
* @param protocol protocol to be sent through * @param protocol protocol to be sent through
* @throws Exception if it fails to write * @throws InformativeException if it fails to write
*/ */
default void scheduleSendToServer(Class<? extends Protocol> protocol) throws Exception { default void scheduleSendToServer(Class<? extends Protocol> protocol) throws InformativeException {
scheduleSendToServer(protocol, true); scheduleSendToServer(protocol, true);
} }
@ -402,13 +362,12 @@ public interface PacketWrapper {
* *
* @param protocol protocol to be sent through * @param protocol protocol to be sent through
* @param skipCurrentPipeline whether transformation of the current protocol should be skipped * @param skipCurrentPipeline whether transformation of the current protocol should be skipped
* @throws Exception if it fails to write * @throws InformativeException if it fails to write
*/ */
void scheduleSendToServer(Class<? extends Protocol> protocol, boolean skipCurrentPipeline) throws Exception; void scheduleSendToServer(Class<? extends Protocol> protocol, boolean skipCurrentPipeline) throws InformativeException;
/** /**
* Returns the packet type. * Returns the packet type, or null if not transformed or manually unset.
* Currently only non-null for manually constructed packets before transformation.
* *
* @return packet type if set * @return packet type if set
*/ */
@ -429,17 +388,6 @@ public interface PacketWrapper {
*/ */
int getId(); int getId();
/**
* Sets the packet type.
*
* @param packetType packet type
* @deprecated use {@link #setPacketType(PacketType)}. This method will be removed in 5.0.0
*/
@Deprecated/*(forRemoval = true)*/
default void setId(PacketType packetType) {
setPacketType(packetType);
}
/** /**
* Sets the packet id. If set to -1, it will not be written to the buffer with {@link #writeToBuffer(ByteBuf)}. * Sets the packet id. If set to -1, it will not be written to the buffer with {@link #writeToBuffer(ByteBuf)}.
* *

Datei anzeigen

@ -25,7 +25,7 @@ package com.viaversion.viaversion.api.protocol.packet;
/** /**
* Interface to be implemented by server incoming packet types. * Interface to be implemented by server incoming packet types.
*/ */
public interface ServerboundPacketType extends PacketType { public non-sealed interface ServerboundPacketType extends PacketType {
@Override @Override
default Direction direction() { default Direction direction() {

Datei anzeigen

@ -24,6 +24,7 @@ package com.viaversion.viaversion.api.protocol.packet;
import com.viaversion.viaversion.api.connection.ProtocolInfo; import com.viaversion.viaversion.api.connection.ProtocolInfo;
import com.viaversion.viaversion.api.connection.UserConnection; import com.viaversion.viaversion.api.connection.UserConnection;
import com.viaversion.viaversion.exception.InformativeException;
import java.util.function.Consumer; import java.util.function.Consumer;
import org.checkerframework.checker.nullness.qual.Nullable; import org.checkerframework.checker.nullness.qual.Nullable;
@ -43,19 +44,19 @@ public interface VersionedPacketTransformer<C extends ClientboundPacketType, S e
* @throws IllegalArgumentException if the packet type is not of the expected clientbound or serverbound packets class * @throws IllegalArgumentException if the packet type is not of the expected clientbound or serverbound packets class
* @throws IllegalArgumentException if {@link PacketWrapper#user()} returns null * @throws IllegalArgumentException if {@link PacketWrapper#user()} returns null
* @throws RuntimeException if no path from the input version to the required client version exists * @throws RuntimeException if no path from the input version to the required client version exists
* @throws Exception if an error occurred while transforming or sending the packet * @throws InformativeException if an error occurred while transforming or sending the packet
*/ */
boolean send(PacketWrapper packet) throws Exception; boolean send(PacketWrapper packet) throws InformativeException;
/** /**
* @see #send(PacketWrapper) * @see #send(PacketWrapper)
*/ */
boolean send(UserConnection connection, C packetType, Consumer<PacketWrapper> packetWriter) throws Exception; boolean send(UserConnection connection, C packetType, Consumer<PacketWrapper> packetWriter) throws InformativeException;
/** /**
* @see #send(PacketWrapper) * @see #send(PacketWrapper)
*/ */
boolean send(UserConnection connection, S packetType, Consumer<PacketWrapper> packetWriter) throws Exception; boolean send(UserConnection connection, S packetType, Consumer<PacketWrapper> packetWriter) throws InformativeException;
/** /**
* Sends a packet to the user or server, depending on the packet type given by {@link PacketWrapper#getPacketType()}, submitted to the netty event loop. * Sends a packet to the user or server, depending on the packet type given by {@link PacketWrapper#getPacketType()}, submitted to the netty event loop.
@ -66,19 +67,19 @@ public interface VersionedPacketTransformer<C extends ClientboundPacketType, S e
* @throws IllegalArgumentException if the packet type is not of the expected clientbound or serverbound packets class * @throws IllegalArgumentException if the packet type is not of the expected clientbound or serverbound packets class
* @throws IllegalArgumentException if {@link PacketWrapper#user()} returns null * @throws IllegalArgumentException if {@link PacketWrapper#user()} returns null
* @throws RuntimeException if no path from the input version to the required client version exists * @throws RuntimeException if no path from the input version to the required client version exists
* @throws Exception if an error occurred while transforming or sending the packet * @throws InformativeException if an error occurred while transforming or sending the packet
*/ */
boolean scheduleSend(PacketWrapper packet) throws Exception; boolean scheduleSend(PacketWrapper packet) throws InformativeException;
/** /**
* @see #scheduleSend(PacketWrapper) * @see #scheduleSend(PacketWrapper)
*/ */
boolean scheduleSend(UserConnection connection, C packetType, Consumer<PacketWrapper> packetWriter) throws Exception; boolean scheduleSend(UserConnection connection, C packetType, Consumer<PacketWrapper> packetWriter) throws InformativeException;
/** /**
* @see #scheduleSend(PacketWrapper) * @see #scheduleSend(PacketWrapper)
*/ */
boolean scheduleSend(UserConnection connection, S packetType, Consumer<PacketWrapper> packetWriter) throws Exception; boolean scheduleSend(UserConnection connection, S packetType, Consumer<PacketWrapper> packetWriter) throws InformativeException;
/** /**
* Transforms a packet to the protocol version of the given connection or server, or null if cancelled at some point. * Transforms a packet to the protocol version of the given connection or server, or null if cancelled at some point.
@ -89,17 +90,17 @@ public interface VersionedPacketTransformer<C extends ClientboundPacketType, S e
* @throws IllegalArgumentException if the packet type is not of the expected clientbound or serverbound packets class * @throws IllegalArgumentException if the packet type is not of the expected clientbound or serverbound packets class
* @throws IllegalArgumentException if {@link PacketWrapper#user()} returns null * @throws IllegalArgumentException if {@link PacketWrapper#user()} returns null
* @throws RuntimeException if no path from the input version to the required client version exists * @throws RuntimeException if no path from the input version to the required client version exists
* @throws Exception if an error occurred while transforming the packet * @throws InformativeException if an error occurred while transforming the packet
*/ */
@Nullable PacketWrapper transform(PacketWrapper packet) throws Exception; @Nullable PacketWrapper transform(PacketWrapper packet) throws InformativeException;
/** /**
* @see #transform(PacketWrapper) * @see #transform(PacketWrapper)
*/ */
@Nullable PacketWrapper transform(UserConnection connection, C packetType, Consumer<PacketWrapper> packetWriter) throws Exception; @Nullable PacketWrapper transform(UserConnection connection, C packetType, Consumer<PacketWrapper> packetWriter) throws InformativeException;
/** /**
* @see #transform(PacketWrapper) * @see #transform(PacketWrapper)
*/ */
@Nullable PacketWrapper transform(UserConnection connection, S packetType, Consumer<PacketWrapper> packetWriter) throws Exception; @Nullable PacketWrapper transform(UserConnection connection, S packetType, Consumer<PacketWrapper> packetWriter) throws InformativeException;
} }

Datei anzeigen

@ -27,41 +27,10 @@ import com.viaversion.viaversion.api.protocol.packet.ServerboundPacketType;
import com.viaversion.viaversion.api.protocol.packet.State; import com.viaversion.viaversion.api.protocol.packet.State;
import java.util.Map; import java.util.Map;
public final class SimplePacketTypesProvider<CU extends ClientboundPacketType, CM extends ClientboundPacketType, SM extends ServerboundPacketType, SU extends ServerboundPacketType> implements PacketTypesProvider<CU, CM, SM, SU> { public record SimplePacketTypesProvider<CU extends ClientboundPacketType, CM extends ClientboundPacketType, SM extends ServerboundPacketType, SU extends ServerboundPacketType>(
private final Map<State, PacketTypeMap<CU>> unmappedClientboundPacketTypes; Map<State, PacketTypeMap<CU>> unmappedClientboundPacketTypes,
private final Map<State, PacketTypeMap<CM>> mappedClientboundPacketTypes; Map<State, PacketTypeMap<CM>> mappedClientboundPacketTypes,
private final Map<State, PacketTypeMap<SM>> mappedServerboundPacketTypes; Map<State, PacketTypeMap<SM>> mappedServerboundPacketTypes,
private final Map<State, PacketTypeMap<SU>> unmappedServerboundPacketTypes; Map<State, PacketTypeMap<SU>> unmappedServerboundPacketTypes
) implements PacketTypesProvider<CU, CM, SM, SU> {
public SimplePacketTypesProvider(
Map<State, PacketTypeMap<CU>> unmappedClientboundPacketTypes,
Map<State, PacketTypeMap<CM>> mappedClientboundPacketTypes,
Map<State, PacketTypeMap<SM>> mappedServerboundPacketTypes,
Map<State, PacketTypeMap<SU>> unmappedServerboundPacketTypes
) {
this.unmappedClientboundPacketTypes = unmappedClientboundPacketTypes;
this.mappedClientboundPacketTypes = mappedClientboundPacketTypes;
this.mappedServerboundPacketTypes = mappedServerboundPacketTypes;
this.unmappedServerboundPacketTypes = unmappedServerboundPacketTypes;
}
@Override
public Map<State, PacketTypeMap<CU>> unmappedClientboundPacketTypes() {
return unmappedClientboundPacketTypes;
}
@Override
public Map<State, PacketTypeMap<CM>> mappedClientboundPacketTypes() {
return mappedClientboundPacketTypes;
}
@Override
public Map<State, PacketTypeMap<SM>> mappedServerboundPacketTypes() {
return mappedServerboundPacketTypes;
}
@Override
public Map<State, PacketTypeMap<SU>> unmappedServerboundPacketTypes() {
return unmappedServerboundPacketTypes;
}
} }

Datei anzeigen

@ -23,6 +23,7 @@
package com.viaversion.viaversion.api.protocol.remapper; package com.viaversion.viaversion.api.protocol.remapper;
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper; import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
import com.viaversion.viaversion.exception.InformativeException;
@FunctionalInterface @FunctionalInterface
public interface PacketHandler { public interface PacketHandler {
@ -31,9 +32,8 @@ public interface PacketHandler {
* Handles a packet. * Handles a packet.
* *
* @param wrapper packet wrapper * @param wrapper packet wrapper
* @throws Exception if an error occurs during the packet handling
*/ */
void handle(PacketWrapper wrapper) throws Exception; void handle(PacketWrapper wrapper) throws InformativeException;
/** /**
* Returns a new packet handler that runs the provided handler after this one. * Returns a new packet handler that runs the provided handler after this one.

Datei anzeigen

@ -25,6 +25,7 @@ package com.viaversion.viaversion.api.protocol.remapper;
import com.viaversion.viaversion.api.Via; import com.viaversion.viaversion.api.Via;
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper; import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
import com.viaversion.viaversion.api.type.Type; import com.viaversion.viaversion.api.type.Type;
import com.viaversion.viaversion.exception.InformativeException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.function.Function; import java.util.function.Function;
@ -76,7 +77,7 @@ public abstract class PacketHandlers implements PacketHandler {
* @param transformer transformer to produce the new type * @param transformer transformer to produce the new type
*/ */
public <T1, T2> void map(Type<T1> oldType, Type<T2> newType, Function<T1, T2> transformer) { public <T1, T2> void map(Type<T1> oldType, Type<T2> newType, Function<T1, T2> transformer) {
map(oldType, new ValueTransformer<T1, T2>(newType) { map(oldType, new ValueTransformer<>(newType) {
@Override @Override
public T2 transform(PacketWrapper wrapper, T1 inputValue) { public T2 transform(PacketWrapper wrapper, T1 inputValue) {
return transformer.apply(inputValue); return transformer.apply(inputValue);
@ -173,7 +174,7 @@ public abstract class PacketHandlers implements PacketHandler {
protected abstract void register(); protected abstract void register();
@Override @Override
public final void handle(PacketWrapper wrapper) throws Exception { public final void handle(PacketWrapper wrapper) throws InformativeException {
for (PacketHandler handler : packetHandlers) { for (PacketHandler handler : packetHandlers) {
handler.handle(wrapper); handler.handle(wrapper);
} }

Datei anzeigen

@ -1,181 +0,0 @@
/*
* This file is part of ViaVersion - https://github.com/ViaVersion/ViaVersion
* Copyright (C) 2016-2024 ViaVersion and contributors
*
* 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.
*/
package com.viaversion.viaversion.api.protocol.remapper;
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
import com.viaversion.viaversion.api.type.Type;
import com.viaversion.viaversion.exception.CancelException;
import com.viaversion.viaversion.exception.InformativeException;
import java.util.ArrayList;
import java.util.List;
import java.util.function.Function;
/**
* @deprecated use {@link PacketHandlers} or directly implement {@link PacketHandler}
*/
@Deprecated/*(forRemoval = true)*/
public abstract class PacketRemapper {
private final List<PacketHandler> valueRemappers = new ArrayList<>();
protected PacketRemapper() {
registerMap();
}
/**
* Reads and writes the given type.
*
* @param type type to map
*/
public void map(Type type) {
handler(wrapper -> wrapper.write(type, wrapper.read(type)));
}
/**
* Reads the first given type and writes the second given type.
*
* @param oldType old type
* @param newType new type
*/
public void map(Type oldType, Type newType) {
handler(wrapper -> wrapper.write(newType, wrapper.read(oldType)));
}
/**
* Maps a type from an old type to a transformed new type.
*
* @param <T1> old value type
* @param <T2> new value type
* @param oldType old type
* @param newType new type
* @param transformer transformer to produce the new type
*/
public <T1, T2> void map(Type<T1> oldType, Type<T2> newType, Function<T1, T2> transformer) {
map(oldType, new ValueTransformer<T1, T2>(newType) {
@Override
public T2 transform(PacketWrapper wrapper, T1 inputValue) throws Exception {
return transformer.apply(inputValue);
}
});
}
/**
* Maps a type from an old type to a transformed new type based on their input type.
*
* @param <T1> old value type
* @param <T2> new value type
* @param transformer transformer to produce the new type
*/
public <T1, T2> void map(ValueTransformer<T1, T2> transformer) {
if (transformer.getInputType() == null) {
throw new IllegalArgumentException("Use map(Type<T1>, ValueTransformer<T1, T2>) for value transformers without specified input type!");
}
map(transformer.getInputType(), transformer);
}
/**
* Maps a type from an old type to a transformed new type.
*
* @param <T1> old value type
* @param <T2> new value type
* @param oldType old type
* @param transformer transformer to produce the new type
*/
public <T1, T2> void map(Type<T1> oldType, ValueTransformer<T1, T2> transformer) {
map(new TypeRemapper<>(oldType), transformer);
}
/**
* Maps a type using a basic ValueReader to a ValueWriter.
*
* @param inputReader reader to read with
* @param outputWriter writer to write with
* @param <T> read/write type
*/
public <T> void map(ValueReader<T> inputReader, ValueWriter<T> outputWriter) {
handler(wrapper -> outputWriter.write(wrapper, inputReader.read(wrapper)));
}
/**
* Adds a packet handler.
*
* @param handler packet handler
*/
public void handler(PacketHandler handler) {
valueRemappers.add(handler);
}
/**
* Writes a value.
*
* @param type type to write
* @param value value to write
*/
public <T> void create(Type<T> type, T value) {
handler(wrapper -> wrapper.write(type, value));
}
/**
* Reads (and thus removes) the given type.
*
* @param type type to read
*/
public void read(Type type) {
handler(wrapper -> wrapper.read(type));
}
/**
* Registers the handlers for this packet.
*/
public abstract void registerMap();
public PacketHandler asPacketHandler() {
return PacketHandlers.fromRemapper(this.valueRemappers);
}
/**
* Processes a packet wrapper.
*
* @param packetWrapper packet wrapper to remap
* @throws InformativeException if packet reading or writing fails
* @throws CancelException if the packet should be cancelled
*/
@Deprecated
public void remap(PacketWrapper packetWrapper) throws Exception {
try {
for (PacketHandler handler : valueRemappers) {
handler.handle(packetWrapper);
}
} catch (CancelException e) {
// Pass through CancelExceptions
throw e;
} catch (InformativeException e) {
e.addSource(this.getClass());
throw e;
} catch (Exception e) {
// Wrap other exceptions during packet handling
InformativeException ex = new InformativeException(e);
ex.addSource(this.getClass());
throw ex;
}
}
}

Datei anzeigen

@ -24,21 +24,17 @@ package com.viaversion.viaversion.api.protocol.remapper;
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper; import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
import com.viaversion.viaversion.api.type.Type; import com.viaversion.viaversion.api.type.Type;
import com.viaversion.viaversion.exception.InformativeException;
public class TypeRemapper<T> implements ValueReader<T>, ValueWriter<T> { public record TypeRemapper<T>(Type<T> type) implements ValueReader<T>, ValueWriter<T> {
private final Type<T> type;
public TypeRemapper(Type<T> type) {
this.type = type;
}
@Override @Override
public T read(PacketWrapper wrapper) throws Exception { public T read(PacketWrapper wrapper) throws InformativeException {
return wrapper.read(type); return wrapper.read(type);
} }
@Override @Override
public void write(PacketWrapper output, T inputValue) { public void write(PacketWrapper output, T inputValue) throws InformativeException {
output.write(type, inputValue); output.write(type, inputValue);
} }
} }

Datei anzeigen

@ -23,6 +23,7 @@
package com.viaversion.viaversion.api.protocol.remapper; package com.viaversion.viaversion.api.protocol.remapper;
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper; import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
import com.viaversion.viaversion.exception.InformativeException;
@FunctionalInterface @FunctionalInterface
public interface ValueReader<T> { public interface ValueReader<T> {
@ -32,7 +33,6 @@ public interface ValueReader<T> {
* *
* @param wrapper The wrapper to read from * @param wrapper The wrapper to read from
* @return Returns the desired type * @return Returns the desired type
* @throws Exception Throws exception if it fails to read
*/ */
T read(PacketWrapper wrapper) throws Exception; T read(PacketWrapper wrapper) throws InformativeException;
} }

Datei anzeigen

@ -46,12 +46,11 @@ public abstract class ValueTransformer<T1, T2> implements ValueWriter<T1> {
* @param wrapper The current packet * @param wrapper The current packet
* @param inputValue The input value * @param inputValue The input value
* @return The value to write to the wrapper * @return The value to write to the wrapper
* @throws Exception Throws exception if it fails to transform a value
*/ */
public abstract T2 transform(PacketWrapper wrapper, T1 inputValue) throws Exception; public abstract T2 transform(PacketWrapper wrapper, T1 inputValue) throws InformativeException;
@Override @Override
public void write(PacketWrapper writer, T1 inputValue) throws Exception { public void write(PacketWrapper writer, T1 inputValue) throws InformativeException {
try { try {
writer.write(outputType, transform(writer, inputValue)); writer.write(outputType, transform(writer, inputValue));
} catch (InformativeException e) { } catch (InformativeException e) {

Datei anzeigen

@ -23,6 +23,7 @@
package com.viaversion.viaversion.api.protocol.remapper; package com.viaversion.viaversion.api.protocol.remapper;
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper; import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
import com.viaversion.viaversion.exception.InformativeException;
@FunctionalInterface @FunctionalInterface
public interface ValueWriter<T> { public interface ValueWriter<T> {
@ -32,7 +33,6 @@ public interface ValueWriter<T> {
* *
* @param wrapper The packet wrapper to write to * @param wrapper The packet wrapper to write to
* @param inputValue The value to write * @param inputValue The value to write
* @throws Exception Throws exception if it fails to write
*/ */
void write(PacketWrapper wrapper, T inputValue) throws Exception; void write(PacketWrapper wrapper, T inputValue) throws InformativeException;
} }

Datei anzeigen

@ -43,7 +43,7 @@ public class ProtocolVersion implements Comparable<ProtocolVersion> {
private static final List<ProtocolVersion> VERSION_LIST = new ArrayList<>(); private static final List<ProtocolVersion> VERSION_LIST = new ArrayList<>();
public static final ProtocolVersion v1_7_2 = register(4, "1.7.2-1.7.5", new SubVersionRange("1.7", 2, 5)); public static final ProtocolVersion v1_7_2 = register(4, "1.7.2-1.7.5", new SubVersionRange("1.7", 2, 5));
@Deprecated/*(forRemoval=true)*/ public static final ProtocolVersion v1_7_1 = v1_7_2; @Deprecated(forRemoval=true) public static final ProtocolVersion v1_7_1 = v1_7_2;
public static final ProtocolVersion v1_7_6 = register(5, "1.7.6-1.7.10", new SubVersionRange("1.7", 6, 10)); public static final ProtocolVersion v1_7_6 = register(5, "1.7.6-1.7.10", new SubVersionRange("1.7", 6, 10));
public static final ProtocolVersion v1_8 = register(47, "1.8.x", new SubVersionRange("1.8", 0, 9)); public static final ProtocolVersion v1_8 = register(47, "1.8.x", new SubVersionRange("1.8", 0, 9));
public static final ProtocolVersion v1_9 = register(107, "1.9"); public static final ProtocolVersion v1_9 = register(107, "1.9");
@ -163,7 +163,7 @@ public class ProtocolVersion implements Comparable<ProtocolVersion> {
* @return internal index of the stored protocol version * @return internal index of the stored protocol version
* @deprecated comparison should be done via the comparison methods * @deprecated comparison should be done via the comparison methods
*/ */
@Deprecated/*(forRemoval = true)*/ @Deprecated(forRemoval = true)
public static int getIndex(ProtocolVersion version) { public static int getIndex(ProtocolVersion version) {
return VERSION_LIST.indexOf(version); return VERSION_LIST.indexOf(version);
} }
@ -201,20 +201,6 @@ public class ProtocolVersion implements Comparable<ProtocolVersion> {
private final String name; private final String name;
private final Set<String> includedVersions; private final Set<String> includedVersions;
/**
* @param version protocol version
* @param name version name
*/
@Deprecated/*(forRemoval = true)*/
public ProtocolVersion(int version, String name) {
this(version, -1, name, null);
}
@Deprecated/*(forRemoval = true)*/
public ProtocolVersion(int version, int snapshotVersion, String name, @Nullable SubVersionRange versionRange) {
this(VersionType.RELEASE, version, snapshotVersion, name, versionRange);
}
/** /**
* Constructs a new ProtocolVersion instance. * Constructs a new ProtocolVersion instance.
* *

Einige Dateien werden nicht angezeigt, da zu viele Dateien in diesem Diff geändert wurden Mehr anzeigen