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

Merge remote-tracking branch 'origin/master' into dev

Dieser Commit ist enthalten in:
Nassim Jahnke 2021-10-30 15:56:39 +02:00
Commit 0a19057606
Es konnte kein GPG-Schlüssel zu dieser Signatur gefunden werden
GPG-Schlüssel-ID: 6BE3B555EBC5982B
7 geänderte Dateien mit 52 neuen und 129 gelöschten Zeilen

Datei anzeigen

@ -64,7 +64,7 @@ public interface ViaAPI<T> {
* @return API version incremented with meaningful API changes * @return API version incremented with meaningful API changes
*/ */
default int apiVersion() { default int apiVersion() {
return 8; return 9;
} }
/** /**

Datei anzeigen

@ -1,61 +0,0 @@
/*
* This file is part of ViaVersion - https://github.com/ViaVersion/ViaVersion
* Copyright (C) 2016-2021 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.type.types.minecraft;
import com.viaversion.viaversion.api.minecraft.metadata.Metadata;
import com.viaversion.viaversion.api.type.Type;
import io.netty.buffer.ByteBuf;
import java.util.ArrayList;
import java.util.List;
public abstract class AbstractMetaListType extends MetaListTypeTemplate {
protected abstract Type<Metadata> getType();
@Override
public List<Metadata> read(final ByteBuf buffer) throws Exception {
final Type<Metadata> type = this.getType();
final List<Metadata> list = new ArrayList<>();
Metadata meta;
do {
meta = type.read(buffer);
if (meta != null) {
list.add(meta);
}
} while (meta != null);
return list;
}
@Override
public void write(final ByteBuf buffer, final List<Metadata> object) throws Exception {
final Type<Metadata> type = this.getType();
for (final Metadata metadata : object) {
type.write(buffer, metadata);
}
this.writeEnd(type, buffer);
}
protected abstract void writeEnd(final Type<Metadata> type, final ByteBuf buffer) throws Exception;
}

Datei anzeigen

@ -25,8 +25,12 @@ package com.viaversion.viaversion.api.type.types.minecraft;
import com.google.common.base.Preconditions; import com.google.common.base.Preconditions;
import com.viaversion.viaversion.api.minecraft.metadata.Metadata; import com.viaversion.viaversion.api.minecraft.metadata.Metadata;
import com.viaversion.viaversion.api.type.Type; import com.viaversion.viaversion.api.type.Type;
import io.netty.buffer.ByteBuf;
public final class MetaListType extends ModernMetaListType { import java.util.ArrayList;
import java.util.List;
public final class MetaListType extends MetaListTypeTemplate {
private final Type<Metadata> type; private final Type<Metadata> type;
public MetaListType(Type<Metadata> type) { public MetaListType(Type<Metadata> type) {
@ -35,7 +39,23 @@ public final class MetaListType extends ModernMetaListType {
} }
@Override @Override
protected Type<Metadata> getType() { public List<Metadata> read(final ByteBuf buffer) throws Exception {
return type; final List<Metadata> list = new ArrayList<>();
Metadata meta;
do {
meta = this.type.read(buffer);
if (meta != null) {
list.add(meta);
}
} while (meta != null);
return list;
}
@Override
public void write(final ByteBuf buffer, final List<Metadata> object) throws Exception {
for (final Metadata metadata : object) {
this.type.write(buffer, metadata);
}
this.type.write(buffer, null);
} }
} }

Datei anzeigen

@ -22,14 +22,31 @@
*/ */
package com.viaversion.viaversion.api.type.types.minecraft; package com.viaversion.viaversion.api.type.types.minecraft;
import com.viaversion.viaversion.api.minecraft.metadata.MetaType;
import com.viaversion.viaversion.api.minecraft.metadata.Metadata; import com.viaversion.viaversion.api.minecraft.metadata.Metadata;
import com.viaversion.viaversion.api.type.Type;
import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBuf;
public abstract class ModernMetaListType extends AbstractMetaListType { public abstract class OldMetaType extends MetaTypeTemplate {
private static final int END = 127;
@Override @Override
protected void writeEnd(final Type<Metadata> type, final ByteBuf buffer) throws Exception { public Metadata read(final ByteBuf buffer) throws Exception {
type.write(buffer, null); final byte index = buffer.readByte();
if (index == END) return null; // End of metadata
final MetaType type = this.getType((index & 224) >> 5);
return new Metadata(index & 31, type, type.type().read(buffer));
}
protected abstract MetaType getType(final int index);
@Override
public void write(final ByteBuf buffer, final Metadata object) throws Exception {
if (object == null) {
buffer.writeByte(END);
} else {
final int index = (object.metaType().typeId() << 5 | object.id() & 31) & 255;
buffer.writeByte(index);
object.metaType().type().write(buffer, object.getValue());
}
} }
} }

Datei anzeigen

@ -23,27 +23,13 @@
package com.viaversion.viaversion.api.type.types.version; package com.viaversion.viaversion.api.type.types.version;
import com.viaversion.viaversion.api.minecraft.metadata.Metadata; import com.viaversion.viaversion.api.minecraft.metadata.MetaType;
import com.viaversion.viaversion.api.minecraft.metadata.types.MetaType1_8; import com.viaversion.viaversion.api.minecraft.metadata.types.MetaType1_8;
import com.viaversion.viaversion.api.type.types.minecraft.MetaTypeTemplate; import com.viaversion.viaversion.api.type.types.minecraft.OldMetaType;
import io.netty.buffer.ByteBuf;
public class Metadata1_8Type extends MetaTypeTemplate {
public class Metadata1_8Type extends OldMetaType {
@Override @Override
public Metadata read(ByteBuf buffer) throws Exception { protected MetaType getType(int index) {
byte item = buffer.readByte(); return MetaType1_8.byId(index);
if (item == 127) return null; // end of metadata
int typeID = (item & 0xE0) >> 5;
MetaType1_8 type = MetaType1_8.byId(typeID);
int id = item & 0x1F;
return new Metadata(id, type, type.type().read(buffer));
}
@Override
public void write(ByteBuf buffer, Metadata meta) throws Exception {
byte item = (byte) (meta.metaType().typeId() << 5 | meta.id() & 0x1F);
buffer.writeByte(item);
meta.metaType().type().write(buffer, meta.getValue());
} }
} }

Datei anzeigen

@ -1,40 +0,0 @@
/*
* This file is part of ViaVersion - https://github.com/ViaVersion/ViaVersion
* Copyright (C) 2016-2021 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.type.types.version;
import com.viaversion.viaversion.api.minecraft.metadata.Metadata;
import com.viaversion.viaversion.api.type.Type;
import com.viaversion.viaversion.api.type.types.minecraft.AbstractMetaListType;
import io.netty.buffer.ByteBuf;
public class MetadataList1_8Type extends AbstractMetaListType {
@Override
protected Type<Metadata> getType() {
return Types1_8.METADATA;
}
@Override
protected void writeEnd(final Type<Metadata> type, final ByteBuf buffer) throws Exception {
buffer.writeByte(0x7f);
}
}

Datei anzeigen

@ -25,6 +25,7 @@ package com.viaversion.viaversion.api.type.types.version;
import com.viaversion.viaversion.api.minecraft.chunks.ChunkSection; import com.viaversion.viaversion.api.minecraft.chunks.ChunkSection;
import com.viaversion.viaversion.api.minecraft.metadata.Metadata; import com.viaversion.viaversion.api.minecraft.metadata.Metadata;
import com.viaversion.viaversion.api.type.Type; import com.viaversion.viaversion.api.type.Type;
import com.viaversion.viaversion.api.type.types.minecraft.MetaListType;
import java.util.List; import java.util.List;
@ -37,7 +38,7 @@ public class Types1_8 {
/** /**
* Metadata list type for 1.8 * Metadata list type for 1.8
*/ */
public static final Type<List<Metadata>> METADATA_LIST = new MetadataList1_8Type(); public static final Type<List<Metadata>> METADATA_LIST = new MetaListType(METADATA);
public static final Type<ChunkSection> CHUNK_SECTION = new ChunkSectionType1_8(); public static final Type<ChunkSection> CHUNK_SECTION = new ChunkSectionType1_8();
} }