3
0
Mirror von https://github.com/ViaVersion/ViaBackwards.git synchronisiert 2024-07-10 09:18:04 +02:00

Update EntityTracker/meta rewriter

Dieser Commit ist enthalten in:
KennyTV 2021-05-25 12:25:39 +02:00
Ursprung 1201c2979b
Commit a789e2ff7b
Es konnte kein GPG-Schlüssel zu dieser Signatur gefunden werden
GPG-Schlüssel-ID: 6BE3B555EBC5982B
55 geänderte Dateien mit 689 neuen und 1580 gelöschten Zeilen

Datei anzeigen

@ -18,9 +18,9 @@
package com.viaversion.viabackwards.api; package com.viaversion.viabackwards.api;
import com.viaversion.viabackwards.api.data.BackwardsMappings; import com.viaversion.viabackwards.api.data.BackwardsMappings;
import com.viaversion.viabackwards.api.entities.storage.EntityTracker; import com.viaversion.viabackwards.api.rewriters.ItemRewriterBase;
import com.viaversion.viabackwards.api.rewriters.TranslatableRewriter;
import com.viaversion.viaversion.api.Via; import com.viaversion.viaversion.api.Via;
import com.viaversion.viaversion.api.connection.UserConnection;
import com.viaversion.viaversion.api.protocol.AbstractProtocol; import com.viaversion.viaversion.api.protocol.AbstractProtocol;
import com.viaversion.viaversion.api.protocol.Protocol; import com.viaversion.viaversion.api.protocol.Protocol;
import com.viaversion.viaversion.api.protocol.packet.ClientboundPacketType; import com.viaversion.viaversion.api.protocol.packet.ClientboundPacketType;
@ -45,23 +45,22 @@ public abstract class BackwardsProtocol<C1 extends ClientboundPacketType, C2 ext
Via.getManager().getProtocolManager().addMappingLoaderFuture(getClass(), protocolClass, runnable); Via.getManager().getProtocolManager().addMappingLoaderFuture(getClass(), protocolClass, runnable);
} }
protected void initEntityTracker(UserConnection user) {
EntityTracker entityTracker = user.get(EntityTracker.class);
if (entityTracker == null) {
user.put(entityTracker = new EntityTracker(user));
}
entityTracker.initProtocol(this);
}
@Override @Override
public boolean hasMappingDataToLoad() { public boolean hasMappingDataToLoad() {
// Manually load them later, since they depend on VV's mappings // Manually load them later, since they depend on VV's mappings
return false; return false;
} }
public @Nullable ItemRewriterBase getBlockItemPackets() {
return null;
}
public @Nullable TranslatableRewriter getTranslatableRewriter() {
return null;
}
@Override @Override
public BackwardsMappings getMappingData() { public @Nullable BackwardsMappings getMappingData() {
return null; return null;
} }
} }

Datei anzeigen

@ -1,27 +0,0 @@
/*
* This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards
* Copyright (C) 2016-2021 ViaVersion and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.viaversion.viabackwards.api.entities.meta;
import com.viaversion.viabackwards.api.exceptions.RemovedValueException;
import com.viaversion.viaversion.api.minecraft.metadata.Metadata;
public interface MetaHandler {
Metadata handle(MetaHandlerEvent e) throws RemovedValueException;
}

Datei anzeigen

@ -1,93 +0,0 @@
/*
* This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards
* Copyright (C) 2016-2021 ViaVersion and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.viaversion.viabackwards.api.entities.meta;
import com.viaversion.viabackwards.api.entities.storage.EntityTracker;
import com.viaversion.viabackwards.api.entities.storage.MetaStorage;
import com.viaversion.viaversion.api.connection.UserConnection;
import com.viaversion.viaversion.api.minecraft.metadata.Metadata;
import org.checkerframework.checker.nullness.qual.Nullable;
import java.util.ArrayList;
import java.util.List;
public class MetaHandlerEvent {
private final UserConnection user;
private final EntityTracker.StoredEntity entity;
private final int index;
private final Metadata data;
private final MetaStorage storage;
private List<Metadata> extraData;
public MetaHandlerEvent(UserConnection user, EntityTracker.StoredEntity entity, int index, Metadata data, MetaStorage storage) {
this.user = user;
this.entity = entity;
this.index = index;
this.data = data;
this.storage = storage;
}
public boolean hasData() {
return data != null;
}
public Metadata getMetaByIndex(int index) {
for (Metadata meta : storage.getMetaDataList()) {
if (index == meta.getId()) {
return meta;
}
}
return null;
}
public void clearExtraData() {
extraData = null;
}
public void createMeta(Metadata metadata) {
(extraData != null ? extraData : (extraData = new ArrayList<>())).add(metadata);
}
public UserConnection getUser() {
return user;
}
public EntityTracker.StoredEntity getEntity() {
return entity;
}
public int getIndex() {
return index;
}
public Metadata getData() {
return data;
}
public MetaStorage getStorage() {
return storage;
}
/**
* May be null, use {@link #createMeta(Metadata)} for adding metadata.
*/
public @Nullable List<Metadata> getExtraData() {
return extraData;
}
}

Datei anzeigen

@ -1,125 +0,0 @@
/*
* This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards
* Copyright (C) 2016-2021 ViaVersion and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.viaversion.viabackwards.api.entities.meta;
import com.viaversion.viabackwards.api.exceptions.RemovedValueException;
import com.viaversion.viaversion.api.minecraft.entities.EntityType;
import com.viaversion.viaversion.api.minecraft.metadata.Metadata;
import org.checkerframework.checker.nullness.qual.Nullable;
public class MetaHandlerSettings {
private EntityType filterType;
private boolean filterFamily;
private int filterIndex = -1;
private MetaHandler handler;
public MetaHandlerSettings filter(EntityType type) {
return filter(type, filterFamily, filterIndex);
}
public MetaHandlerSettings filter(EntityType type, boolean filterFamily) {
return filter(type, filterFamily, filterIndex);
}
public MetaHandlerSettings filter(int index) {
return filter(filterType, filterFamily, index);
}
public MetaHandlerSettings filter(EntityType type, int index) {
return filter(type, filterFamily, index);
}
public MetaHandlerSettings filter(EntityType type, boolean filterFamily, int index) {
this.filterType = type;
this.filterFamily = filterFamily;
this.filterIndex = index;
return this;
}
public void handle(@Nullable MetaHandler handler) {
this.handler = handler;
}
public void handleIndexChange(final int newIndex) {
handle(e -> {
Metadata data = e.getData();
data.setId(newIndex);
return data;
});
}
public void removed() {
handle(e -> {
throw RemovedValueException.EX;
});
}
public boolean hasHandler() {
return handler != null;
}
public boolean hasType() {
return filterType != null;
}
public boolean hasIndex() {
return filterIndex > -1;
}
public boolean isFilterFamily() {
return filterFamily;
}
/**
* Returns true if the metadata should be handled by this object.
*
* @param type entity type
* @param metadata metadata
* @return true if gucci
*/
public boolean isGucci(EntityType type, Metadata metadata) {
if (!hasHandler()) return false;
if (hasType() && (filterFamily ? !type.isOrHasParent(filterType) : !filterType.is(type))) {
return false;
}
return !hasIndex() || metadata.getId() == filterIndex;
}
public EntityType getFilterType() {
return filterType;
}
public int getFilterIndex() {
return filterIndex;
}
public @Nullable MetaHandler getHandler() {
return handler;
}
@Override
public String toString() {
return "MetaHandlerSettings{" +
"filterType=" + filterType +
", filterFamily=" + filterFamily +
", filterIndex=" + filterIndex +
", handler=" + handler +
'}';
}
}

Datei anzeigen

@ -51,30 +51,30 @@ public class EntityData {
return this.defaultMeta != null; return this.defaultMeta != null;
} }
public int getId() { public int typeId() {
return id; return id;
} }
/** /**
* @return custom mobname, can be either a String or a JsonElement * @return custom mobname, can be either a String or a JsonElement
*/ */
public @Nullable Object getMobName() { public @Nullable Object mobName() {
return mobName; return mobName;
} }
public int getReplacementId() { public int replacementId() {
return replacementId; return replacementId;
} }
public @Nullable MetaCreator getDefaultMeta() { public @Nullable MetaCreator defaultMeta() {
return defaultMeta; return defaultMeta;
} }
public boolean isObject() { public boolean isObjectType() {
return false; return false;
} }
public int getObjectData() { public int objectData() {
return -1; return -1;
} }
@ -91,6 +91,6 @@ public class EntityData {
@FunctionalInterface @FunctionalInterface
public interface MetaCreator { public interface MetaCreator {
void createMeta(MetaStorage storage); void createMeta(WrappedMetadata storage);
} }
} }

Datei anzeigen

@ -28,12 +28,12 @@ public class EntityObjectData extends EntityData {
} }
@Override @Override
public boolean isObject() { public boolean isObjectType() {
return isObject; return isObject;
} }
@Override @Override
public int getObjectData() { public int objectData() {
return objectData; return objectData;
} }
} }

Datei anzeigen

@ -21,6 +21,7 @@ import com.viaversion.viabackwards.ViaBackwards;
import com.viaversion.viabackwards.api.rewriters.EntityRewriterBase; import com.viaversion.viabackwards.api.rewriters.EntityRewriterBase;
import com.viaversion.viaversion.api.Via; import com.viaversion.viaversion.api.Via;
import com.viaversion.viaversion.api.connection.UserConnection; import com.viaversion.viaversion.api.connection.UserConnection;
import com.viaversion.viaversion.api.data.entity.StoredEntityData;
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;
@ -29,12 +30,12 @@ import java.util.function.Supplier;
public class EntityPositionHandler { public class EntityPositionHandler {
public static final double RELATIVE_MOVE_FACTOR = 32 * 128; public static final double RELATIVE_MOVE_FACTOR = 32 * 128;
private final EntityRewriterBase<?> entityRewriter; private final EntityRewriterBase entityRewriter;
private final Class<? extends EntityPositionStorage> storageClass; private final Class<? extends EntityPositionStorage> storageClass;
private final Supplier<? extends EntityPositionStorage> storageSupplier; private final Supplier<? extends EntityPositionStorage> storageSupplier;
private boolean warnedForMissingEntity; private boolean warnedForMissingEntity;
public EntityPositionHandler(EntityRewriterBase<?> entityRewriter, public EntityPositionHandler(EntityRewriterBase entityRewriter,
Class<? extends EntityPositionStorage> storageClass, Supplier<? extends EntityPositionStorage> storageSupplier) { Class<? extends EntityPositionStorage> storageClass, Supplier<? extends EntityPositionStorage> storageSupplier) {
this.entityRewriter = entityRewriter; this.entityRewriter = entityRewriter;
this.storageClass = storageClass; this.storageClass = storageClass;
@ -48,7 +49,7 @@ public class EntityPositionHandler {
public void cacheEntityPosition(PacketWrapper wrapper, double x, double y, double z, boolean create, boolean relative) throws Exception { public void cacheEntityPosition(PacketWrapper wrapper, double x, double y, double z, boolean create, boolean relative) throws Exception {
int entityId = wrapper.get(Type.VAR_INT, 0); int entityId = wrapper.get(Type.VAR_INT, 0);
EntityTracker.StoredEntity storedEntity = entityRewriter.getEntityTracker(wrapper.user()).getEntity(entityId); StoredEntityData storedEntity = entityRewriter.tracker(wrapper.user()).entityData(entityId);
if (storedEntity == null) { if (storedEntity == null) {
if (Via.getManager().isDebug()) { // There is too many plugins violating this out there, and reading seems to be hard! :> if (Via.getManager().isDebug()) { // There is too many plugins violating this out there, and reading seems to be hard! :>
ViaBackwards.getPlatform().getLogger().warning("Stored entity with id " + entityId + " missing at position: " + x + " - " + y + " - " + z + " in " + storageClass.getSimpleName()); ViaBackwards.getPlatform().getLogger().warning("Stored entity with id " + entityId + " missing at position: " + x + " - " + y + " - " + z + " in " + storageClass.getSimpleName());
@ -73,7 +74,7 @@ public class EntityPositionHandler {
} }
public EntityPositionStorage getStorage(UserConnection user, int entityId) { public EntityPositionStorage getStorage(UserConnection user, int entityId) {
EntityTracker.StoredEntity storedEntity = user.get(EntityTracker.class).get(entityRewriter.getProtocol()).getEntity(entityId); StoredEntityData storedEntity = entityRewriter.tracker(user).entityData(entityId);
EntityPositionStorage entityStorage; EntityPositionStorage entityStorage;
if (storedEntity == null || (entityStorage = storedEntity.get(EntityPositionStorage.class)) == null) { if (storedEntity == null || (entityStorage = storedEntity.get(EntityPositionStorage.class)) == null) {
ViaBackwards.getPlatform().getLogger().warning("Untracked entity with id " + entityId + " in " + storageClass.getSimpleName()); ViaBackwards.getPlatform().getLogger().warning("Untracked entity with id " + entityId + " in " + storageClass.getSimpleName());

Datei anzeigen

@ -17,7 +17,7 @@
*/ */
package com.viaversion.viabackwards.api.entities.storage; package com.viaversion.viabackwards.api.entities.storage;
public abstract class EntityPositionStorage implements EntityStorage { public abstract class EntityPositionStorage {
private double x; private double x;
private double y; private double y;
private double z; private double z;

Datei anzeigen

@ -1,22 +0,0 @@
/*
* This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards
* Copyright (C) 2016-2021 ViaVersion and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.viaversion.viabackwards.api.entities.storage;
public interface EntityStorage {
}

Datei anzeigen

@ -1,158 +0,0 @@
/*
* This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards
* Copyright (C) 2016-2021 ViaVersion and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.viaversion.viabackwards.api.entities.storage;
import com.viaversion.viabackwards.api.BackwardsProtocol;
import com.viaversion.viaversion.api.connection.StoredObject;
import com.viaversion.viaversion.api.connection.UserConnection;
import com.viaversion.viaversion.api.minecraft.entities.EntityType;
import org.checkerframework.checker.nullness.qual.Nullable;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
public class EntityTracker extends StoredObject {
private final Map<BackwardsProtocol, ProtocolEntityTracker> trackers = new HashMap<>();
private int currentWorldSectionHeight = 16;
private int currentMinY;
public EntityTracker(UserConnection user) {
super(user);
}
public void initProtocol(BackwardsProtocol protocol) {
trackers.put(protocol, new ProtocolEntityTracker());
}
public @Nullable ProtocolEntityTracker get(BackwardsProtocol protocol) {
return trackers.get(protocol);
}
public Map<BackwardsProtocol, ProtocolEntityTracker> getTrackers() {
return trackers;
}
/**
* @return amount of chunk sections of the current world (block height / 16)
*/
public int getCurrentWorldSectionHeight() {
return currentWorldSectionHeight;
}
public void setCurrentWorldSectionHeight(int currentWorldSectionHeight) {
this.currentWorldSectionHeight = currentWorldSectionHeight;
}
/**
* @return absolute minimum y coordinate of the current world
*/
public int getCurrentMinY() {
return currentMinY;
}
public void setCurrentMinY(int currentMinY) {
this.currentMinY = currentMinY;
}
public static class ProtocolEntityTracker {
private final Map<Integer, StoredEntity> entityMap = new ConcurrentHashMap<>();
public void trackEntityType(int id, EntityType type) {
entityMap.putIfAbsent(id, new StoredEntity(id, type));
}
public void removeEntity(int id) {
entityMap.remove(id);
}
@Nullable
public EntityType getEntityType(int id) {
StoredEntity storedEntity = entityMap.get(id);
return storedEntity != null ? storedEntity.getType() : null;
}
@Nullable
public StoredEntity getEntity(int id) {
return entityMap.get(id);
}
}
public static final class StoredEntity {
private final int entityId;
private final EntityType type;
private Map<Class<? extends EntityStorage>, EntityStorage> storedObjects;
private StoredEntity(final int entityId, final EntityType type) {
this.entityId = entityId;
this.type = type;
}
/**
* Get an object from the storage
*
* @param objectClass The class of the object to get
* @param <T> The type of the class you want to get.
* @return The requested object
*/
@Nullable
public <T extends EntityStorage> T get(Class<T> objectClass) {
return storedObjects != null ? (T) storedObjects.get(objectClass) : null;
}
/**
* Check if the storage has an object
*
* @param objectClass The object class to check
* @return True if the object is in the storage
*/
public boolean has(Class<? extends EntityStorage> objectClass) {
return storedObjects != null && storedObjects.containsKey(objectClass);
}
/**
* Put an object into the stored objects based on class
*
* @param object The object to store.
*/
public void put(EntityStorage object) {
if (storedObjects == null) {
storedObjects = new ConcurrentHashMap<>();
}
storedObjects.put(object.getClass(), object);
}
public int getEntityId() {
return entityId;
}
public EntityType getType() {
return type;
}
@Override
public String toString() {
return "StoredEntity{" +
"entityId=" + entityId +
", type=" + type +
", storedObjects=" + storedObjects +
'}';
}
}
}

Datei anzeigen

@ -23,48 +23,44 @@ import org.checkerframework.checker.nullness.qual.Nullable;
import java.util.List; import java.util.List;
public class MetaStorage { public final class WrappedMetadata {
private List<Metadata> metaDataList; private final List<Metadata> metadataList;
public MetaStorage(List<Metadata> metaDataList) { public WrappedMetadata(List<Metadata> metadataList) {
this.metaDataList = metaDataList; this.metadataList = metadataList;
} }
public boolean has(Metadata data) { public boolean has(Metadata data) {
return this.metaDataList.contains(data); return this.metadataList.contains(data);
} }
public void delete(Metadata data) { public void remove(Metadata data) {
this.metaDataList.remove(data); this.metadataList.remove(data);
} }
public void delete(int index) { public void remove(int index) {
metaDataList.removeIf(meta -> meta.getId() == index); metadataList.removeIf(meta -> meta.id() == index);
} }
public void add(Metadata data) { public void add(Metadata data) {
this.metaDataList.add(data); this.metadataList.add(data);
} }
public @Nullable Metadata get(int index) { public @Nullable Metadata get(int index) {
for (Metadata meta : this.metaDataList) { for (Metadata meta : this.metadataList) {
if (index == meta.getId()) { if (index == meta.id()) {
return meta; return meta;
} }
} }
return null; return null;
} }
public List<Metadata> getMetaDataList() { public List<Metadata> metadataList() {
return metaDataList; return metadataList;
}
public void setMetaDataList(List<Metadata> metaDataList) {
this.metaDataList = metaDataList;
} }
@Override @Override
public String toString() { public String toString() {
return "MetaStorage{" + "metaDataList=" + metaDataList + '}'; return "MetaStorage{" + "metaDataList=" + metadataList + '}';
} }
} }

Datei anzeigen

@ -18,11 +18,8 @@
package com.viaversion.viabackwards.api.rewriters; package com.viaversion.viabackwards.api.rewriters;
import com.viaversion.viabackwards.api.BackwardsProtocol; import com.viaversion.viabackwards.api.BackwardsProtocol;
import com.viaversion.viabackwards.api.entities.storage.EntityData;
import com.viaversion.viabackwards.api.entities.storage.MetaStorage;
import com.viaversion.viaversion.api.minecraft.entities.EntityType; import com.viaversion.viaversion.api.minecraft.entities.EntityType;
import com.viaversion.viaversion.api.minecraft.metadata.MetaType; import com.viaversion.viaversion.api.minecraft.metadata.MetaType;
import com.viaversion.viaversion.api.minecraft.metadata.Metadata;
import com.viaversion.viaversion.api.minecraft.metadata.types.MetaType1_14; import com.viaversion.viaversion.api.minecraft.metadata.types.MetaType1_14;
import com.viaversion.viaversion.api.protocol.packet.ClientboundPacketType; import com.viaversion.viaversion.api.protocol.packet.ClientboundPacketType;
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper; import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
@ -30,8 +27,6 @@ import com.viaversion.viaversion.api.protocol.remapper.PacketHandler;
import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper; import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper;
import com.viaversion.viaversion.api.type.Type; import com.viaversion.viaversion.api.type.Type;
import java.util.List;
public abstract class EntityRewriter<T extends BackwardsProtocol> extends EntityRewriterBase<T> { public abstract class EntityRewriter<T extends BackwardsProtocol> extends EntityRewriterBase<T> {
protected EntityRewriter(T protocol) { protected EntityRewriter(T protocol) {
@ -42,7 +37,8 @@ public abstract class EntityRewriter<T extends BackwardsProtocol> extends Entity
super(protocol, displayType, 2, displayVisibilityType, 3); super(protocol, displayType, 2, displayVisibilityType, 3);
} }
public void registerSpawnTrackerWithData(ClientboundPacketType packetType, EntityType fallingBlockType) { @Override
public void registerTrackerWithData(ClientboundPacketType packetType, EntityType fallingBlockType) {
protocol.registerClientbound(packetType, new PacketRemapper() { protocol.registerClientbound(packetType, new PacketRemapper() {
@Override @Override
public void registerMap() { public void registerMap() {
@ -55,13 +51,14 @@ public abstract class EntityRewriter<T extends BackwardsProtocol> extends Entity
map(Type.BYTE); // 6 - Pitch map(Type.BYTE); // 6 - Pitch
map(Type.BYTE); // 7 - Yaw map(Type.BYTE); // 7 - Yaw
map(Type.INT); // 8 - Data map(Type.INT); // 8 - Data
handler(getSpawnTracketWithDataHandler(fallingBlockType)); handler(getSpawnTrackerWithDataHandler(fallingBlockType));
} }
}); });
} }
public PacketHandler getSpawnTracketWithDataHandler(EntityType fallingBlockType) { public PacketHandler getSpawnTrackerWithDataHandler(EntityType fallingBlockType) {
return wrapper -> { return wrapper -> {
// Check against the UNMAPPED entity type
EntityType entityType = setOldEntityId(wrapper); EntityType entityType = setOldEntityId(wrapper);
if (entityType == fallingBlockType) { if (entityType == fallingBlockType) {
int blockState = wrapper.get(Type.INT, 0); int blockState = wrapper.get(Type.INT, 0);
@ -84,52 +81,14 @@ public abstract class EntityRewriter<T extends BackwardsProtocol> extends Entity
private EntityType setOldEntityId(PacketWrapper wrapper) throws Exception { private EntityType setOldEntityId(PacketWrapper wrapper) throws Exception {
int typeId = wrapper.get(Type.VAR_INT, 1); int typeId = wrapper.get(Type.VAR_INT, 1);
EntityType entityType = getTypeFromId(typeId); EntityType entityType = typeFromId(typeId);
addTrackedEntity(wrapper, wrapper.get(Type.VAR_INT, 0), entityType); tracker(wrapper.user()).addEntity(wrapper.get(Type.VAR_INT, 0), entityType);
int oldTypeId = getOldEntityId(entityType.getId()); int mappedTypeId = newEntityId(entityType.getId());
if (typeId != oldTypeId) { if (typeId != mappedTypeId) {
wrapper.set(Type.VAR_INT, 1, oldTypeId); wrapper.set(Type.VAR_INT, 1, mappedTypeId);
} }
return entityType; return entityType;
} }
/**
* Helper method to handle a metadata list packet and its full initial meta rewrite.
*/
protected void registerMetadataRewriter(ClientboundPacketType packetType, Type<List<Metadata>> oldMetaType, Type<List<Metadata>> newMetaType) {
getProtocol().registerClientbound(packetType, new PacketRemapper() {
@Override
public void registerMap() {
map(Type.VAR_INT); // 0 - Entity ID
if (oldMetaType != null) {
map(oldMetaType, newMetaType);
} else {
map(newMetaType);
}
handler(wrapper -> {
int entityId = wrapper.get(Type.VAR_INT, 0);
EntityType type = getEntityType(wrapper.user(), entityId);
MetaStorage storage = new MetaStorage(wrapper.get(newMetaType, 0));
handleMeta(wrapper.user(), entityId, storage);
EntityData entityData = getEntityData(type);
//TODO only do this once for a first meta packet?
if (entityData != null) {
if (entityData.hasBaseMeta()) {
entityData.getDefaultMeta().createMeta(storage);
}
}
wrapper.set(newMetaType, 0, storage.getMetaDataList());
});
}
});
}
protected void registerMetadataRewriter(ClientboundPacketType packetType, Type<List<Metadata>> metaType) {
registerMetadataRewriter(packetType, null, metaType);
}
} }

Datei anzeigen

@ -20,97 +20,120 @@ package com.viaversion.viabackwards.api.rewriters;
import com.google.common.base.Preconditions; import com.google.common.base.Preconditions;
import com.viaversion.viabackwards.ViaBackwards; import com.viaversion.viabackwards.ViaBackwards;
import com.viaversion.viabackwards.api.BackwardsProtocol; import com.viaversion.viabackwards.api.BackwardsProtocol;
import com.viaversion.viabackwards.api.entities.meta.MetaHandlerEvent;
import com.viaversion.viabackwards.api.entities.meta.MetaHandlerSettings;
import com.viaversion.viabackwards.api.entities.storage.EntityData; import com.viaversion.viabackwards.api.entities.storage.EntityData;
import com.viaversion.viabackwards.api.entities.storage.EntityTracker; import com.viaversion.viabackwards.api.entities.storage.WrappedMetadata;
import com.viaversion.viabackwards.api.entities.storage.MetaStorage;
import com.viaversion.viabackwards.api.exceptions.RemovedValueException;
import com.viaversion.viaversion.api.Via;
import com.viaversion.viaversion.api.connection.UserConnection; import com.viaversion.viaversion.api.connection.UserConnection;
import com.viaversion.viaversion.api.data.ParticleMappings; import com.viaversion.viaversion.api.data.entity.StoredEntityData;
import com.viaversion.viaversion.api.minecraft.entities.EntityType; import com.viaversion.viaversion.api.minecraft.entities.EntityType;
import com.viaversion.viaversion.api.minecraft.metadata.MetaType; 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.protocol.packet.ClientboundPacketType;
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
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.type.Type; import com.viaversion.viaversion.api.type.Type;
import com.viaversion.viaversion.api.type.types.Particle;
import com.viaversion.viaversion.exception.CancelException;
import com.viaversion.viaversion.libs.fastutil.ints.Int2IntMap;
import com.viaversion.viaversion.libs.fastutil.ints.Int2IntOpenHashMap; import com.viaversion.viaversion.libs.fastutil.ints.Int2IntOpenHashMap;
import com.viaversion.viaversion.libs.opennbt.tag.builtin.CompoundTag; import com.viaversion.viaversion.libs.fastutil.ints.Int2ObjectMap;
import com.viaversion.viaversion.libs.opennbt.tag.builtin.IntTag; import com.viaversion.viaversion.libs.fastutil.ints.Int2ObjectOpenHashMap;
import com.viaversion.viaversion.libs.opennbt.tag.builtin.Tag; import com.viaversion.viaversion.libs.gson.JsonElement;
import com.viaversion.viaversion.protocols.protocol1_9_3to1_9_1_2.storage.ClientWorld; import com.viaversion.viaversion.protocols.protocol1_9_3to1_9_1_2.storage.ClientWorld;
import com.viaversion.viaversion.rewriter.EntityRewriter;
import com.viaversion.viaversion.rewriter.meta.MetaHandlerEvent;
import org.checkerframework.checker.nullness.qual.Nullable; import org.checkerframework.checker.nullness.qual.Nullable;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.logging.Logger;
import java.util.stream.Collectors;
/** /**
* Entity rewriter base class. * Entity rewriter base class.
* *
* @see EntityRewriter * @see com.viaversion.viabackwards.api.rewriters.EntityRewriter
* @see LegacyEntityRewriter * @see LegacyEntityRewriter
*/ */
public abstract class EntityRewriterBase<T extends BackwardsProtocol> extends Rewriter<T> { public abstract class EntityRewriterBase<T extends BackwardsProtocol> extends EntityRewriter<T> {
private final Map<EntityType, EntityData> entityTypes = new HashMap<>(); private final Int2ObjectMap<EntityData> entityDataMappings = new Int2ObjectOpenHashMap<>();
private final List<MetaHandlerSettings> metaHandlers = new ArrayList<>();
private final MetaType displayNameMetaType; private final MetaType displayNameMetaType;
private final MetaType displayVisibilityMetaType; private final MetaType displayVisibilityMetaType;
private final int displayNameIndex; private final int displayNameIndex;
private final int displayVisibilityIndex; private final int displayVisibilityIndex;
protected Int2IntMap typeMapping;
EntityRewriterBase(T protocol, MetaType displayNameMetaType, int displayNameIndex, EntityRewriterBase(T protocol, MetaType displayNameMetaType, int displayNameIndex,
MetaType displayVisibilityMetaType, int displayVisibilityIndex) { MetaType displayVisibilityMetaType, int displayVisibilityIndex) {
super(protocol); super(protocol, false);
this.displayNameMetaType = displayNameMetaType; this.displayNameMetaType = displayNameMetaType;
this.displayNameIndex = displayNameIndex; this.displayNameIndex = displayNameIndex;
this.displayVisibilityMetaType = displayVisibilityMetaType; this.displayVisibilityMetaType = displayVisibilityMetaType;
this.displayVisibilityIndex = displayVisibilityIndex; this.displayVisibilityIndex = displayVisibilityIndex;
} }
protected EntityType getEntityType(UserConnection connection, int id) { @Override
return getEntityTracker(connection).getEntityType(id); public void handleMetadata(int entityId, List<Metadata> metadataList, UserConnection connection) {
super.handleMetadata(entityId, metadataList, connection);
EntityType type = tracker(connection).entityType(entityId);
if (type == null) return;
EntityData entityData = entityDataForType(type);
// Set the mapped entity name if there is no custom name set already
Metadata meta = getMeta(displayNameIndex, metadataList);
if (meta != null && entityData != null && entityData.mobName() != null
&& (meta.getValue() == null || meta.getValue().toString().isEmpty())
&& meta.metaType().typeId() == displayNameMetaType.typeId()) {
meta.setValue(entityData.mobName());
if (ViaBackwards.getConfig().alwaysShowOriginalMobName()) {
removeMeta(displayVisibilityIndex, metadataList);
metadataList.add(new Metadata(displayVisibilityIndex, displayVisibilityMetaType, true));
}
}
// Add any other extra meta for mapped entities
if (entityData != null) {
//TODO only do this once for a first meta packet?
if (entityData != null && entityData.hasBaseMeta()) {
entityData.defaultMeta().createMeta(new WrappedMetadata(metadataList));
}
}
} }
protected void addTrackedEntity(PacketWrapper wrapper, int entityId, EntityType type) throws Exception { protected @Nullable Metadata getMeta(int metaIndex, List<Metadata> metadataList) {
getEntityTracker(wrapper.user()).trackEntityType(entityId, type); for (Metadata metadata : metadataList) {
if (metadata.id() == metaIndex) {
return metadata;
}
}
return null;
}
protected void removeMeta(int metaIndex, List<Metadata> metadataList) {
metadataList.removeIf(meta -> meta.id() == metaIndex);
} }
protected boolean hasData(EntityType type) { protected boolean hasData(EntityType type) {
return entityTypes.containsKey(type); return entityDataMappings.containsKey(type.getId());
} }
protected @Nullable EntityData getEntityData(EntityType type) { protected @Nullable EntityData entityDataForType(EntityType type) {
return entityTypes.get(type); return entityDataMappings.get(type.getId());
}
protected @Nullable StoredEntityData storedEntityData(MetaHandlerEvent event) {
return tracker(event.user()).entityData(event.entityId());
} }
/** /**
* Note that both types should be of the SAME version. * Maps an entity type to another with extra data.
* Note that both types should be of the same version.
* *
* @param oldType old type of the higher version * @param type entity type
* @param replacement new type of the higher version * @param mappedType mapped entity type
* @return created entity data * @return created entity data
* @see #mapEntityDirect(EntityType, EntityType) for id only rewriting * @see #mapEntityType(EntityType, EntityType) for id only rewriting
*/ */
protected EntityData mapEntity(EntityType oldType, EntityType replacement) { protected EntityData mapEntityTypeWithData(EntityType type, EntityType mappedType) {
Preconditions.checkArgument(oldType.getClass() == replacement.getClass()); Preconditions.checkArgument(type.getClass() == mappedType.getClass());
// Already rewrite the id here // Already rewrite the id here
int mappedReplacementId = getOldEntityId(replacement.getId()); int mappedReplacementId = newEntityId(mappedType.getId());
EntityData data = new EntityData(oldType.getId(), mappedReplacementId); EntityData data = new EntityData(type.getId(), mappedReplacementId);
mapEntityDirect(oldType.getId(), mappedReplacementId); mapEntityType(type.getId(), mappedReplacementId);
entityTypes.put(oldType, data); entityDataMappings.put(type.getId(), data);
return data; return data;
} }
@ -119,167 +142,40 @@ public abstract class EntityRewriterBase<T extends BackwardsProtocol> extends Re
* *
* @param oldTypes entity types of the higher version * @param oldTypes entity types of the higher version
* @param newTypeClass entity types enum class of the lower version * @param newTypeClass entity types enum class of the lower version
* @param <T> new type class * @param <E> new enum type
*/ */
public <T extends Enum<T> & EntityType> void mapTypes(EntityType[] oldTypes, Class<T> newTypeClass) { @Override
if (typeMapping == null) { public <E extends Enum<E> & EntityType> void mapTypes(EntityType[] oldTypes, Class<E> newTypeClass) {
typeMapping = new Int2IntOpenHashMap(oldTypes.length, 1F); if (typeMappings == null) {
typeMapping.defaultReturnValue(-1); typeMappings = new Int2IntOpenHashMap(oldTypes.length, 1F);
typeMappings.defaultReturnValue(-1);
} }
for (EntityType oldType : oldTypes) { for (EntityType oldType : oldTypes) {
try { try {
T newType = Enum.valueOf(newTypeClass, oldType.name()); E newType = Enum.valueOf(newTypeClass, oldType.name());
typeMapping.put(oldType.getId(), newType.getId()); typeMappings.put(oldType.getId(), newType.getId());
} catch (IllegalArgumentException ignored) { } catch (IllegalArgumentException ignored) {
// Don't warn
} }
} }
} }
/** public void registerMetaTypeHandler(@Nullable MetaType itemType, @Nullable MetaType blockType, @Nullable MetaType particleType, @Nullable MetaType optChatType) {
* Directly maps the entity without any other rewriting. filter().handler((event, meta) -> {
* MetaType type = meta.metaType();
* @param oldType type of the higher version if (itemType != null && type == itemType) {
* @param newType type of the lower version protocol.getBlockItemPackets().handleItemToClient(meta.value());
* @see #mapEntity(EntityType, EntityType) for mapping with data } else if (blockType != null && type == blockType) {
*/ int data = meta.value();
public void mapEntityDirect(EntityType oldType, EntityType newType) { meta.setValue(protocol.getMappingData().getNewBlockStateId(data));
Preconditions.checkArgument(oldType.getClass() != newType.getClass()); } else if (particleType != null && type == particleType) {
mapEntityDirect(oldType.getId(), newType.getId()); rewriteParticle(meta.value());
} } else if (optChatType != null && type == optChatType) {
JsonElement text = meta.value();
private void mapEntityDirect(int oldType, int newType) { if (text != null) {
if (typeMapping == null) { protocol.getTranslatableRewriter().processText(text);
typeMapping = new Int2IntOpenHashMap();
typeMapping.defaultReturnValue(-1);
}
typeMapping.put(oldType, newType);
}
public MetaHandlerSettings registerMetaHandler() {
MetaHandlerSettings settings = new MetaHandlerSettings();
metaHandlers.add(settings);
return settings;
}
protected MetaStorage handleMeta(UserConnection user, int entityId, MetaStorage storage) throws Exception {
EntityTracker.StoredEntity storedEntity = getEntityTracker(user).getEntity(entityId);
if (storedEntity == null) {
if (!Via.getConfig().isSuppressMetadataErrors()) {
ViaBackwards.getPlatform().getLogger().warning("Metadata for entity id: " + entityId + " not sent because the entity doesn't exist. " + storage);
}
throw CancelException.CACHED;
}
EntityType type = storedEntity.getType();
for (MetaHandlerSettings settings : metaHandlers) {
List<Metadata> newData = new ArrayList<>();
for (Metadata meta : storage.getMetaDataList()) {
MetaHandlerEvent event = null;
try {
Metadata modifiedMeta = meta;
if (settings.isGucci(type, meta)) {
event = new MetaHandlerEvent(user, storedEntity, meta.getId(), meta, storage);
modifiedMeta = settings.getHandler().handle(event);
if (event.getExtraData() != null) {
newData.addAll(event.getExtraData());
event.clearExtraData();
}
}
if (modifiedMeta == null) {
throw RemovedValueException.EX;
}
newData.add(modifiedMeta);
} catch (RemovedValueException e) {
// Add the additionally created data here in case of an interruption
if (event != null && event.getExtraData() != null) {
newData.addAll(event.getExtraData());
}
} catch (Exception e) {
Logger log = ViaBackwards.getPlatform().getLogger();
log.warning("Unable to handle metadata " + meta + " for entity type " + type);
log.warning(storage.getMetaDataList().stream().sorted(Comparator.comparingInt(Metadata::getId))
.map(Metadata::toString).collect(Collectors.joining("\n", "Full metadata list: ", "")));
e.printStackTrace();
} }
} }
storage.setMetaDataList(newData);
}
// Handle Entity Name
Metadata data = storage.get(displayNameIndex);
if (data != null) {
EntityData entityData = getEntityData(type);
// Set the name if there is no custom name set already
if (entityData != null && entityData.getMobName() != null
&& (data.getValue() == null || data.getValue().toString().isEmpty())
&& data.getMetaType().getTypeID() == displayNameMetaType.getTypeID()) {
data.setValue(entityData.getMobName());
if (ViaBackwards.getConfig().alwaysShowOriginalMobName()) {
storage.delete(displayVisibilityIndex);
storage.add(new Metadata(displayVisibilityIndex, displayVisibilityMetaType, true));
}
}
}
return storage;
}
/**
* Helper method to handle player, painting, or xp orb trackers without meta changes.
*/
protected void registerExtraTracker(ClientboundPacketType packetType, EntityType entityType, Type intType) {
getProtocol().registerClientbound(packetType, new PacketRemapper() {
@Override
public void registerMap() {
map(intType); // 0 - Entity id
handler(wrapper -> addTrackedEntity(wrapper, (int) wrapper.get(intType, 0), entityType));
}
});
}
protected void registerExtraTracker(ClientboundPacketType packetType, EntityType entityType) {
registerExtraTracker(packetType, entityType, Type.VAR_INT);
}
/**
* Sub 1.17 method for entity remove packets.
*
* @param packetType remove entities packet type
*/
protected void registerEntityDestroy(ClientboundPacketType packetType) {
getProtocol().registerClientbound(packetType, new PacketRemapper() {
@Override
public void registerMap() {
map(Type.VAR_INT_ARRAY_PRIMITIVE); // 0 - Entity ids
handler(wrapper -> {
EntityTracker.ProtocolEntityTracker tracker = getEntityTracker(wrapper.user());
for (int entity : wrapper.get(Type.VAR_INT_ARRAY_PRIMITIVE, 0)) {
tracker.removeEntity(entity);
}
});
}
});
}
/**
* 1.17+ method for entity remove packets.
*
* @param packetType remove entities packet type
*/
protected void registerRemoveEntity(ClientboundPacketType packetType) {
protocol.registerClientbound(packetType, new PacketRemapper() {
@Override
public void registerMap() {
map(Type.VAR_INT); // 0 - Entity ids
handler(wrapper -> {
int entity = wrapper.get(Type.VAR_INT, 0);
getEntityTracker(wrapper.user()).removeEntity(entity);
});
}
}); });
} }
@ -287,7 +183,7 @@ public abstract class EntityRewriterBase<T extends BackwardsProtocol> extends Re
protected PacketHandler getTrackerHandler(Type intType, int typeIndex) { protected PacketHandler getTrackerHandler(Type intType, int typeIndex) {
return wrapper -> { return wrapper -> {
Number id = (Number) wrapper.get(intType, typeIndex); Number id = (Number) wrapper.get(intType, typeIndex);
addTrackedEntity(wrapper, wrapper.get(Type.VAR_INT, 0), getTypeFromId(id.intValue())); tracker(wrapper.user()).addEntity(wrapper.get(Type.VAR_INT, 0), typeFromId(id.intValue()));
}; };
} }
@ -296,29 +192,7 @@ public abstract class EntityRewriterBase<T extends BackwardsProtocol> extends Re
} }
protected PacketHandler getTrackerHandler(EntityType entityType, Type intType) { protected PacketHandler getTrackerHandler(EntityType entityType, Type intType) {
return wrapper -> addTrackedEntity(wrapper, (int) wrapper.get(intType, 0), entityType); return wrapper -> tracker(wrapper.user()).addEntity((int) wrapper.get(intType, 0), entityType);
}
protected PacketHandler getWorldDataTracker(int nbtIndex) {
return wrapper -> {
EntityTracker tracker = wrapper.user().get(EntityTracker.class);
CompoundTag registryData = wrapper.get(Type.NBT, nbtIndex);
Tag height = registryData.get("height");
if (height instanceof IntTag) {
int blockHeight = ((IntTag) height).asInt();
tracker.setCurrentWorldSectionHeight(blockHeight >> 4);
} else {
ViaBackwards.getPlatform().getLogger().warning("Height missing in dimension data: " + registryData);
}
Tag minY = registryData.get("min_y");
if (minY instanceof IntTag) {
tracker.setCurrentMinY(((IntTag) minY).asInt());
} else {
ViaBackwards.getPlatform().getLogger().warning("Min Y missing in dimension data: " + registryData);
}
};
} }
protected PacketHandler getDimensionHandler(int index) { protected PacketHandler getDimensionHandler(int index) {
@ -328,28 +202,4 @@ public abstract class EntityRewriterBase<T extends BackwardsProtocol> extends Re
clientWorld.setEnvironment(dimensionId); clientWorld.setEnvironment(dimensionId);
}; };
} }
public EntityTracker.ProtocolEntityTracker getEntityTracker(UserConnection user) {
return user.get(EntityTracker.class).get(getProtocol());
}
protected void rewriteParticle(Particle particle) {
ParticleMappings mappings = protocol.getMappingData().getParticleMappings();
int id = particle.getId();
if (id == mappings.getBlockId() || id == mappings.getFallingDustId()) {
Particle.ParticleData data = particle.getArguments().get(0);
data.setValue(protocol.getMappingData().getNewBlockStateId(data.get()));
} else if (id == mappings.getItemId()) {
Particle.ParticleData data = particle.getArguments().get(0);
data.setValue(protocol.getMappingData().getNewItemId(data.get()));
}
particle.setId(protocol.getMappingData().getNewParticleId(id));
}
protected abstract EntityType getTypeFromId(int typeId);
public int getOldEntityId(int newId) {
return typeMapping != null ? typeMapping.getOrDefault(newId, newId) : newId;
}
} }

Datei anzeigen

@ -23,9 +23,10 @@ import com.viaversion.viaversion.libs.opennbt.tag.builtin.CompoundTag;
import com.viaversion.viaversion.libs.opennbt.tag.builtin.ListTag; import com.viaversion.viaversion.libs.opennbt.tag.builtin.ListTag;
import com.viaversion.viaversion.libs.opennbt.tag.builtin.StringTag; import com.viaversion.viaversion.libs.opennbt.tag.builtin.StringTag;
import com.viaversion.viaversion.libs.opennbt.tag.builtin.Tag; import com.viaversion.viaversion.libs.opennbt.tag.builtin.Tag;
import com.viaversion.viaversion.rewriter.RewriterBase;
import org.checkerframework.checker.nullness.qual.Nullable; import org.checkerframework.checker.nullness.qual.Nullable;
public abstract class ItemRewriterBase<T extends BackwardsProtocol> extends Rewriter<T> { public abstract class ItemRewriterBase<T extends BackwardsProtocol> extends RewriterBase<T> {
protected final String nbtTagName; protected final String nbtTagName;
protected final boolean jsonNameFormat; protected final boolean jsonNameFormat;

Datei anzeigen

@ -21,13 +21,14 @@ import com.viaversion.viabackwards.ViaBackwards;
import com.viaversion.viabackwards.api.BackwardsProtocol; import com.viaversion.viabackwards.api.BackwardsProtocol;
import com.viaversion.viabackwards.api.entities.storage.EntityData; import com.viaversion.viabackwards.api.entities.storage.EntityData;
import com.viaversion.viabackwards.api.entities.storage.EntityObjectData; import com.viaversion.viabackwards.api.entities.storage.EntityObjectData;
import com.viaversion.viabackwards.api.entities.storage.MetaStorage; import com.viaversion.viabackwards.api.entities.storage.WrappedMetadata;
import com.viaversion.viaversion.api.minecraft.entities.EntityType; import com.viaversion.viaversion.api.minecraft.entities.EntityType;
import com.viaversion.viaversion.api.minecraft.entities.ObjectType; import com.viaversion.viaversion.api.minecraft.entities.ObjectType;
import com.viaversion.viaversion.api.minecraft.metadata.MetaType; 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.minecraft.metadata.types.MetaType1_9; import com.viaversion.viaversion.api.minecraft.metadata.types.MetaType1_9;
import com.viaversion.viaversion.api.protocol.packet.ClientboundPacketType; import com.viaversion.viaversion.api.protocol.packet.ClientboundPacketType;
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
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.protocol.remapper.PacketRemapper;
import com.viaversion.viaversion.api.type.Type; import com.viaversion.viaversion.api.type.Type;
@ -83,14 +84,15 @@ public abstract class LegacyEntityRewriter<T extends BackwardsProtocol> extends
handler(wrapper -> { handler(wrapper -> {
ClientWorld clientChunks = wrapper.user().get(ClientWorld.class); ClientWorld clientChunks = wrapper.user().get(ClientWorld.class);
clientChunks.setEnvironment(wrapper.get(Type.INT, 1)); clientChunks.setEnvironment(wrapper.get(Type.INT, 1));
getEntityTracker(wrapper.user()).trackEntityType(wrapper.get(Type.INT, 0), playerType); addTrackedEntity(wrapper, wrapper.get(Type.INT, 0), playerType);
}); });
} }
}); });
} }
protected void registerMetadataRewriter(ClientboundPacketType packetType, Type<List<Metadata>> oldMetaType, Type<List<Metadata>> newMetaType) { @Override
getProtocol().registerClientbound(packetType, new PacketRemapper() { public void registerMetadataRewriter(ClientboundPacketType packetType, Type<List<Metadata>> oldMetaType, Type<List<Metadata>> newMetaType) {
protocol.registerClientbound(packetType, new PacketRemapper() {
@Override @Override
public void registerMap() { public void registerMap() {
map(Type.VAR_INT); // 0 - Entity ID map(Type.VAR_INT); // 0 - Entity ID
@ -101,35 +103,32 @@ public abstract class LegacyEntityRewriter<T extends BackwardsProtocol> extends
} }
handler(wrapper -> { handler(wrapper -> {
List<Metadata> metadata = wrapper.get(newMetaType, 0); List<Metadata> metadata = wrapper.get(newMetaType, 0);
wrapper.set(newMetaType, 0, handleMetadata(wrapper.get(Type.VAR_INT, 0), metadata, wrapper.user());
handleMeta(wrapper.user(), wrapper.get(Type.VAR_INT, 0), new MetaStorage(metadata)).getMetaDataList());
}); });
} }
}); });
} }
protected void registerMetadataRewriter(ClientboundPacketType packetType, Type<List<Metadata>> metaType) { @Override
public void registerMetadataRewriter(ClientboundPacketType packetType, Type<List<Metadata>> metaType) {
registerMetadataRewriter(packetType, null, metaType); registerMetadataRewriter(packetType, null, metaType);
} }
protected PacketHandler getMobSpawnRewriter(Type<List<Metadata>> metaType) { protected PacketHandler getMobSpawnRewriter(Type<List<Metadata>> metaType) {
return wrapper -> { return wrapper -> {
int entityId = wrapper.get(Type.VAR_INT, 0); int entityId = wrapper.get(Type.VAR_INT, 0);
EntityType type = getEntityType(wrapper.user(), entityId); EntityType type = tracker(wrapper.user()).entityType(entityId);
MetaStorage storage = new MetaStorage(wrapper.get(metaType, 0)); List<Metadata> metadata = wrapper.get(metaType, 0);
handleMeta(wrapper.user(), entityId, storage); handleMetadata(entityId, metadata, wrapper.user());
EntityData entityData = getEntityData(type); EntityData entityData = entityDataForType(type);
if (entityData != null) { if (entityData != null) {
wrapper.set(Type.VAR_INT, 1, entityData.getReplacementId()); wrapper.set(Type.VAR_INT, 1, entityData.replacementId());
if (entityData.hasBaseMeta()) { if (entityData.hasBaseMeta()) {
entityData.getDefaultMeta().createMeta(storage); entityData.defaultMeta().createMeta(new WrappedMetadata(metadata));
} }
} }
// Rewrite Metadata
wrapper.set(metaType, 0, storage.getMetaDataList());
}; };
} }
@ -140,10 +139,8 @@ public abstract class LegacyEntityRewriter<T extends BackwardsProtocol> extends
protected PacketHandler getTrackerAndMetaHandler(Type<List<Metadata>> metaType, EntityType entityType) { protected PacketHandler getTrackerAndMetaHandler(Type<List<Metadata>> metaType, EntityType entityType) {
return wrapper -> { return wrapper -> {
addTrackedEntity(wrapper, wrapper.get(Type.VAR_INT, 0), entityType); addTrackedEntity(wrapper, wrapper.get(Type.VAR_INT, 0), entityType);
List<Metadata> metadata = wrapper.get(metaType, 0);
List<Metadata> metaDataList = handleMeta(wrapper.user(), wrapper.get(Type.VAR_INT, 0), handleMetadata(wrapper.get(Type.VAR_INT, 0), metadata, wrapper.user());
new MetaStorage(wrapper.get(metaType, 0))).getMetaDataList();
wrapper.set(metaType, 0, metaDataList);
}; };
} }
@ -157,15 +154,20 @@ public abstract class LegacyEntityRewriter<T extends BackwardsProtocol> extends
EntityData data = getObjectData(type); EntityData data = getObjectData(type);
if (data != null) { if (data != null) {
wrapper.set(Type.BYTE, 0, (byte) data.getReplacementId()); wrapper.set(Type.BYTE, 0, (byte) data.replacementId());
if (data.getObjectData() != -1) { if (data.objectData() != -1) {
wrapper.set(Type.INT, 0, data.getObjectData()); wrapper.set(Type.INT, 0, data.objectData());
} }
} }
}; };
} }
protected EntityType getObjectTypeFromId(int typeId) { protected EntityType getObjectTypeFromId(int typeId) {
return getTypeFromId(typeId); return typeFromId(typeId);
}
@Deprecated
protected void addTrackedEntity(PacketWrapper wrapper, int entityId, EntityType type) throws Exception {
tracker(wrapper.user()).addEntity(entityId, type);
} }
} }

Datei anzeigen

@ -21,9 +21,10 @@ package com.viaversion.viabackwards.api.rewriters;
import com.viaversion.viabackwards.api.BackwardsProtocol; import com.viaversion.viabackwards.api.BackwardsProtocol;
import com.viaversion.viaversion.libs.fastutil.ints.Int2ObjectMap; import com.viaversion.viaversion.libs.fastutil.ints.Int2ObjectMap;
import com.viaversion.viaversion.libs.fastutil.ints.Int2ObjectOpenHashMap; import com.viaversion.viaversion.libs.fastutil.ints.Int2ObjectOpenHashMap;
import com.viaversion.viaversion.rewriter.RewriterBase;
@Deprecated @Deprecated
public abstract class LegacySoundRewriter<T extends BackwardsProtocol> extends Rewriter<T> { public abstract class LegacySoundRewriter<T extends BackwardsProtocol> extends RewriterBase<T> {
protected final Int2ObjectMap<SoundData> soundRewrites = new Int2ObjectOpenHashMap<>(64); protected final Int2ObjectMap<SoundData> soundRewrites = new Int2ObjectOpenHashMap<>(64);
protected LegacySoundRewriter(T protocol) { protected LegacySoundRewriter(T protocol) {

Datei anzeigen

@ -1,52 +0,0 @@
/*
* This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards
* Copyright (C) 2016-2021 ViaVersion and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.viaversion.viabackwards.api.rewriters;
import com.viaversion.viabackwards.api.BackwardsProtocol;
public abstract class Rewriter<T extends BackwardsProtocol> {
protected final T protocol;
protected Rewriter(final T protocol) {
this.protocol = protocol;
}
/**
* Register everything.
*/
public void register() {
registerPackets();
registerRewrites();
}
/**
* Register packet listeners.
*/
protected abstract void registerPackets();
/**
* Register rewrites.
*/
protected void registerRewrites() {
}
public T getProtocol() {
return protocol;
}
}

Datei anzeigen

@ -26,6 +26,8 @@ import com.viaversion.viabackwards.protocol.protocol1_10to1_11.packets.EntityPac
import com.viaversion.viabackwards.protocol.protocol1_10to1_11.packets.PlayerPackets1_11; import com.viaversion.viabackwards.protocol.protocol1_10to1_11.packets.PlayerPackets1_11;
import com.viaversion.viabackwards.protocol.protocol1_10to1_11.storage.WindowTracker; import com.viaversion.viabackwards.protocol.protocol1_10to1_11.storage.WindowTracker;
import com.viaversion.viaversion.api.connection.UserConnection; import com.viaversion.viaversion.api.connection.UserConnection;
import com.viaversion.viaversion.api.minecraft.entities.Entity1_11Types;
import com.viaversion.viaversion.data.entity.EntityTrackerBase;
import com.viaversion.viaversion.protocols.protocol1_9_3to1_9_1_2.ClientboundPackets1_9_3; import com.viaversion.viaversion.protocols.protocol1_9_3to1_9_1_2.ClientboundPackets1_9_3;
import com.viaversion.viaversion.protocols.protocol1_9_3to1_9_1_2.ServerboundPackets1_9_3; import com.viaversion.viaversion.protocols.protocol1_9_3to1_9_1_2.ServerboundPackets1_9_3;
import com.viaversion.viaversion.protocols.protocol1_9_3to1_9_1_2.storage.ClientWorld; import com.viaversion.viaversion.protocols.protocol1_9_3to1_9_1_2.storage.ClientWorld;
@ -58,7 +60,7 @@ public class Protocol1_10To1_11 extends BackwardsProtocol<ClientboundPackets1_9_
user.put(new ClientWorld(user)); user.put(new ClientWorld(user));
} }
initEntityTracker(user); user.addEntityTracker(this.getClass(), new EntityTrackerBase(user, Entity1_11Types.EntityType.PLAYER, true));
if (!user.has(WindowTracker.class)) { if (!user.has(WindowTracker.class)) {
user.put(new WindowTracker(user)); user.put(new WindowTracker(user));

Datei anzeigen

@ -19,18 +19,18 @@
package com.viaversion.viabackwards.protocol.protocol1_10to1_11.packets; package com.viaversion.viabackwards.protocol.protocol1_10to1_11.packets;
import com.viaversion.viabackwards.api.data.MappedLegacyBlockItem; import com.viaversion.viabackwards.api.data.MappedLegacyBlockItem;
import com.viaversion.viabackwards.api.entities.storage.EntityTracker;
import com.viaversion.viabackwards.api.rewriters.LegacyBlockItemRewriter; import com.viaversion.viabackwards.api.rewriters.LegacyBlockItemRewriter;
import com.viaversion.viabackwards.api.rewriters.LegacyEnchantmentRewriter; import com.viaversion.viabackwards.api.rewriters.LegacyEnchantmentRewriter;
import com.viaversion.viabackwards.protocol.protocol1_10to1_11.Protocol1_10To1_11; import com.viaversion.viabackwards.protocol.protocol1_10to1_11.Protocol1_10To1_11;
import com.viaversion.viabackwards.protocol.protocol1_10to1_11.storage.ChestedHorseStorage; import com.viaversion.viabackwards.protocol.protocol1_10to1_11.storage.ChestedHorseStorage;
import com.viaversion.viabackwards.protocol.protocol1_10to1_11.storage.WindowTracker; import com.viaversion.viabackwards.protocol.protocol1_10to1_11.storage.WindowTracker;
import com.viaversion.viaversion.api.connection.UserConnection; import com.viaversion.viaversion.api.connection.UserConnection;
import com.viaversion.viaversion.api.data.entity.EntityTracker;
import com.viaversion.viaversion.api.data.entity.StoredEntityData;
import com.viaversion.viaversion.api.minecraft.BlockChangeRecord; import com.viaversion.viaversion.api.minecraft.BlockChangeRecord;
import com.viaversion.viaversion.api.minecraft.chunks.Chunk; import com.viaversion.viaversion.api.minecraft.chunks.Chunk;
import com.viaversion.viaversion.api.minecraft.entities.Entity1_11Types; import com.viaversion.viaversion.api.minecraft.entities.Entity1_11Types;
import com.viaversion.viaversion.api.minecraft.item.Item; import com.viaversion.viaversion.api.minecraft.item.Item;
import com.viaversion.viaversion.api.minecraft.metadata.Metadata;
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper; import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
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.protocol.remapper.PacketRemapper;
@ -335,13 +335,9 @@ public class BlockItemPackets1_11 extends LegacyBlockItemRewriter<Protocol1_10To
} }
}); });
protocol.getEntityPackets().registerMetaHandler().handle(e -> { protocol.getEntityPackets().filter().handler((event, meta) -> {
Metadata data = e.getData(); if (meta.metaType().type().equals(Type.ITEM)) // Is Item
meta.setValue(handleItemToClient((Item) meta.getValue()));
if (data.getMetaType().getType().equals(Type.ITEM)) // Is Item
data.setValue(handleItemToClient((Item) data.getValue()));
return data;
}); });
} }
@ -404,9 +400,9 @@ public class BlockItemPackets1_11 extends LegacyBlockItemRewriter<Protocol1_10To
private boolean isLlama(UserConnection user) { private boolean isLlama(UserConnection user) {
WindowTracker tracker = user.get(WindowTracker.class); WindowTracker tracker = user.get(WindowTracker.class);
if (tracker.getInventory() != null && tracker.getInventory().equals("EntityHorse")) { if (tracker.getInventory() != null && tracker.getInventory().equals("EntityHorse")) {
EntityTracker.ProtocolEntityTracker entTracker = user.get(EntityTracker.class).get(getProtocol()); EntityTracker entTracker = user.getEntityTracker(Protocol1_10To1_11.class);
EntityTracker.StoredEntity storedEntity = entTracker.getEntity(tracker.getEntityId()); StoredEntityData entityData = entTracker.entityData(tracker.getEntityId());
return storedEntity != null && storedEntity.getType().is(Entity1_11Types.EntityType.LIAMA); return entityData != null && entityData.type().is(Entity1_11Types.EntityType.LIAMA);
} }
return false; return false;
} }
@ -414,10 +410,10 @@ public class BlockItemPackets1_11 extends LegacyBlockItemRewriter<Protocol1_10To
private Optional<ChestedHorseStorage> getChestedHorse(UserConnection user) { private Optional<ChestedHorseStorage> getChestedHorse(UserConnection user) {
WindowTracker tracker = user.get(WindowTracker.class); WindowTracker tracker = user.get(WindowTracker.class);
if (tracker.getInventory() != null && tracker.getInventory().equals("EntityHorse")) { if (tracker.getInventory() != null && tracker.getInventory().equals("EntityHorse")) {
EntityTracker.ProtocolEntityTracker entTracker = user.get(EntityTracker.class).get(getProtocol()); EntityTracker entTracker = user.getEntityTracker(Protocol1_10To1_11.class);
EntityTracker.StoredEntity storedEntity = entTracker.getEntity(tracker.getEntityId()); StoredEntityData entityData = entTracker.entityData(tracker.getEntityId());
if (storedEntity != null) if (entityData != null)
return Optional.of(storedEntity.get(ChestedHorseStorage.class)); return Optional.of(entityData.get(ChestedHorseStorage.class));
} }
return Optional.empty(); return Optional.empty();
} }

Datei anzeigen

@ -19,13 +19,13 @@
package com.viaversion.viabackwards.protocol.protocol1_10to1_11.packets; package com.viaversion.viabackwards.protocol.protocol1_10to1_11.packets;
import com.viaversion.viabackwards.api.entities.storage.EntityData; import com.viaversion.viabackwards.api.entities.storage.EntityData;
import com.viaversion.viabackwards.api.entities.storage.MetaStorage; import com.viaversion.viabackwards.api.entities.storage.WrappedMetadata;
import com.viaversion.viabackwards.api.exceptions.RemovedValueException;
import com.viaversion.viabackwards.api.rewriters.LegacyEntityRewriter; import com.viaversion.viabackwards.api.rewriters.LegacyEntityRewriter;
import com.viaversion.viabackwards.protocol.protocol1_10to1_11.PotionSplashHandler; import com.viaversion.viabackwards.protocol.protocol1_10to1_11.PotionSplashHandler;
import com.viaversion.viabackwards.protocol.protocol1_10to1_11.Protocol1_10To1_11; import com.viaversion.viabackwards.protocol.protocol1_10to1_11.Protocol1_10To1_11;
import com.viaversion.viabackwards.protocol.protocol1_10to1_11.storage.ChestedHorseStorage; import com.viaversion.viabackwards.protocol.protocol1_10to1_11.storage.ChestedHorseStorage;
import com.viaversion.viabackwards.utils.Block; import com.viaversion.viabackwards.utils.Block;
import com.viaversion.viaversion.api.data.entity.StoredEntityData;
import com.viaversion.viaversion.api.minecraft.entities.Entity1_11Types; import com.viaversion.viaversion.api.minecraft.entities.Entity1_11Types;
import com.viaversion.viaversion.api.minecraft.entities.Entity1_12Types; import com.viaversion.viaversion.api.minecraft.entities.Entity1_12Types;
import com.viaversion.viaversion.api.minecraft.entities.EntityType; import com.viaversion.viaversion.api.minecraft.entities.EntityType;
@ -38,6 +38,7 @@ import com.viaversion.viaversion.api.type.Type;
import com.viaversion.viaversion.api.type.types.version.Types1_9; import com.viaversion.viaversion.api.type.types.version.Types1_9;
import com.viaversion.viaversion.protocols.protocol1_9_3to1_9_1_2.ClientboundPackets1_9_3; import com.viaversion.viaversion.protocols.protocol1_9_3to1_9_1_2.ClientboundPackets1_9_3;
import java.util.List;
import java.util.Optional; import java.util.Optional;
public class EntityPackets1_11 extends LegacyEntityRewriter<Protocol1_10To1_11> { public class EntityPackets1_11 extends LegacyEntityRewriter<Protocol1_10To1_11> {
@ -98,7 +99,7 @@ public class EntityPackets1_11 extends LegacyEntityRewriter<Protocol1_10To1_11>
int objType = objectData & 4095; int objType = objectData & 4095;
int data = objectData >> 12 & 15; int data = objectData >> 12 & 15;
Block block = getProtocol().getBlockItemPackets().handleBlock(objType, data); Block block = protocol.getBlockItemPackets().handleBlock(objType, data);
if (block == null) if (block == null)
return; return;
@ -109,8 +110,8 @@ public class EntityPackets1_11 extends LegacyEntityRewriter<Protocol1_10To1_11>
} }
}); });
registerExtraTracker(ClientboundPackets1_9_3.SPAWN_EXPERIENCE_ORB, Entity1_11Types.EntityType.EXPERIENCE_ORB); registerTracker(ClientboundPackets1_9_3.SPAWN_EXPERIENCE_ORB, Entity1_11Types.EntityType.EXPERIENCE_ORB);
registerExtraTracker(ClientboundPackets1_9_3.SPAWN_GLOBAL_ENTITY, Entity1_11Types.EntityType.WEATHER); registerTracker(ClientboundPackets1_9_3.SPAWN_GLOBAL_ENTITY, Entity1_11Types.EntityType.WEATHER);
protocol.registerClientbound(ClientboundPackets1_9_3.SPAWN_MOB, new PacketRemapper() { protocol.registerClientbound(ClientboundPackets1_9_3.SPAWN_MOB, new PacketRemapper() {
@Override @Override
@ -137,35 +138,24 @@ public class EntityPackets1_11 extends LegacyEntityRewriter<Protocol1_10To1_11>
@Override @Override
public void handle(PacketWrapper wrapper) throws Exception { public void handle(PacketWrapper wrapper) throws Exception {
int entityId = wrapper.get(Type.VAR_INT, 0); int entityId = wrapper.get(Type.VAR_INT, 0);
EntityType type = getEntityType(wrapper.user(), entityId); EntityType type = tracker(wrapper.user()).entityType(entityId);
MetaStorage storage = new MetaStorage(wrapper.get(Types1_9.METADATA_LIST, 0)); List<Metadata> list = wrapper.get(Types1_9.METADATA_LIST, 0);
handleMeta( handleMetadata(wrapper.get(Type.VAR_INT, 0), list, wrapper.user());
wrapper.user(),
wrapper.get(Type.VAR_INT, 0),
storage
);
EntityData entityData = getEntityData(type); EntityData entityData = entityDataForType(type);
if (entityData != null) { if (entityData != null) {
wrapper.set(Type.UNSIGNED_BYTE, 0, (short) entityData.getReplacementId()); wrapper.set(Type.UNSIGNED_BYTE, 0, (short) entityData.replacementId());
if (entityData.hasBaseMeta()) { if (entityData.hasBaseMeta()) {
entityData.getDefaultMeta().createMeta(storage); entityData.defaultMeta().createMeta(new WrappedMetadata(list));
} }
} }
// Rewrite Metadata
wrapper.set(
Types1_9.METADATA_LIST,
0,
storage.getMetaDataList()
);
} }
}); });
} }
}); });
registerExtraTracker(ClientboundPackets1_9_3.SPAWN_PAINTING, Entity1_11Types.EntityType.PAINTING); registerTracker(ClientboundPackets1_9_3.SPAWN_PAINTING, Entity1_11Types.EntityType.PAINTING);
registerJoinGame(ClientboundPackets1_9_3.JOIN_GAME, Entity1_11Types.EntityType.PLAYER); registerJoinGame(ClientboundPackets1_9_3.JOIN_GAME, Entity1_11Types.EntityType.PLAYER);
registerRespawn(ClientboundPackets1_9_3.RESPAWN); registerRespawn(ClientboundPackets1_9_3.RESPAWN);
@ -185,7 +175,7 @@ public class EntityPackets1_11 extends LegacyEntityRewriter<Protocol1_10To1_11>
} }
}); });
registerEntityDestroy(ClientboundPackets1_9_3.DESTROY_ENTITIES); registerRemoveEntities(ClientboundPackets1_9_3.DESTROY_ENTITIES);
registerMetadataRewriter(ClientboundPackets1_9_3.ENTITY_METADATA, Types1_9.METADATA_LIST); registerMetadataRewriter(ClientboundPackets1_9_3.ENTITY_METADATA, Types1_9.METADATA_LIST);
protocol.registerClientbound(ClientboundPackets1_9_3.ENTITY_STATUS, new PacketRemapper() { protocol.registerClientbound(ClientboundPackets1_9_3.ENTITY_STATUS, new PacketRemapper() {
@ -214,99 +204,86 @@ public class EntityPackets1_11 extends LegacyEntityRewriter<Protocol1_10To1_11>
@Override @Override
protected void registerRewrites() { protected void registerRewrites() {
// Guardian // Guardian
mapEntity(Entity1_11Types.EntityType.ELDER_GUARDIAN, Entity1_11Types.EntityType.GUARDIAN); mapEntityTypeWithData(Entity1_11Types.EntityType.ELDER_GUARDIAN, Entity1_11Types.EntityType.GUARDIAN);
// Skeletons // Skeletons
mapEntity(Entity1_11Types.EntityType.WITHER_SKELETON, Entity1_11Types.EntityType.SKELETON).mobName("Wither Skeleton").spawnMetadata(storage -> storage.add(getSkeletonTypeMeta(1))); mapEntityTypeWithData(Entity1_11Types.EntityType.WITHER_SKELETON, Entity1_11Types.EntityType.SKELETON).mobName("Wither Skeleton").spawnMetadata(storage -> storage.add(getSkeletonTypeMeta(1)));
mapEntity(Entity1_11Types.EntityType.STRAY, Entity1_11Types.EntityType.SKELETON).mobName("Stray").spawnMetadata(storage -> storage.add(getSkeletonTypeMeta(2))); mapEntityTypeWithData(Entity1_11Types.EntityType.STRAY, Entity1_11Types.EntityType.SKELETON).mobName("Stray").spawnMetadata(storage -> storage.add(getSkeletonTypeMeta(2)));
// Zombies // Zombies
mapEntity(Entity1_11Types.EntityType.HUSK, Entity1_11Types.EntityType.ZOMBIE).mobName("Husk").spawnMetadata(storage -> handleZombieType(storage, 6)); mapEntityTypeWithData(Entity1_11Types.EntityType.HUSK, Entity1_11Types.EntityType.ZOMBIE).mobName("Husk").spawnMetadata(storage -> handleZombieType(storage, 6));
mapEntity(Entity1_11Types.EntityType.ZOMBIE_VILLAGER, Entity1_11Types.EntityType.ZOMBIE).spawnMetadata(storage -> handleZombieType(storage, 1)); mapEntityTypeWithData(Entity1_11Types.EntityType.ZOMBIE_VILLAGER, Entity1_11Types.EntityType.ZOMBIE).spawnMetadata(storage -> handleZombieType(storage, 1));
// Horses // Horses
mapEntity(Entity1_11Types.EntityType.HORSE, Entity1_11Types.EntityType.HORSE).spawnMetadata(storage -> storage.add(getHorseMetaType(0))); // Nob able to ride the horse without having the MetaType sent. mapEntityTypeWithData(Entity1_11Types.EntityType.HORSE, Entity1_11Types.EntityType.HORSE).spawnMetadata(storage -> storage.add(getHorseMetaType(0))); // Nob able to ride the horse without having the MetaType sent.
mapEntity(Entity1_11Types.EntityType.DONKEY, Entity1_11Types.EntityType.HORSE).spawnMetadata(storage -> storage.add(getHorseMetaType(1))); mapEntityTypeWithData(Entity1_11Types.EntityType.DONKEY, Entity1_11Types.EntityType.HORSE).spawnMetadata(storage -> storage.add(getHorseMetaType(1)));
mapEntity(Entity1_11Types.EntityType.MULE, Entity1_11Types.EntityType.HORSE).spawnMetadata(storage -> storage.add(getHorseMetaType(2))); mapEntityTypeWithData(Entity1_11Types.EntityType.MULE, Entity1_11Types.EntityType.HORSE).spawnMetadata(storage -> storage.add(getHorseMetaType(2)));
mapEntity(Entity1_11Types.EntityType.SKELETON_HORSE, Entity1_11Types.EntityType.HORSE).spawnMetadata(storage -> storage.add(getHorseMetaType(4))); mapEntityTypeWithData(Entity1_11Types.EntityType.SKELETON_HORSE, Entity1_11Types.EntityType.HORSE).spawnMetadata(storage -> storage.add(getHorseMetaType(4)));
mapEntity(Entity1_11Types.EntityType.ZOMBIE_HORSE, Entity1_11Types.EntityType.HORSE).spawnMetadata(storage -> storage.add(getHorseMetaType(3))); mapEntityTypeWithData(Entity1_11Types.EntityType.ZOMBIE_HORSE, Entity1_11Types.EntityType.HORSE).spawnMetadata(storage -> storage.add(getHorseMetaType(3)));
// New mobs // New mobs
mapEntity(Entity1_11Types.EntityType.EVOCATION_FANGS, Entity1_11Types.EntityType.SHULKER); mapEntityTypeWithData(Entity1_11Types.EntityType.EVOCATION_FANGS, Entity1_11Types.EntityType.SHULKER);
mapEntity(Entity1_11Types.EntityType.EVOCATION_ILLAGER, Entity1_11Types.EntityType.VILLAGER).mobName("Evoker"); mapEntityTypeWithData(Entity1_11Types.EntityType.EVOCATION_ILLAGER, Entity1_11Types.EntityType.VILLAGER).mobName("Evoker");
mapEntity(Entity1_11Types.EntityType.VEX, Entity1_11Types.EntityType.BAT).mobName("Vex"); mapEntityTypeWithData(Entity1_11Types.EntityType.VEX, Entity1_11Types.EntityType.BAT).mobName("Vex");
mapEntity(Entity1_11Types.EntityType.VINDICATION_ILLAGER, Entity1_11Types.EntityType.VILLAGER).mobName("Vindicator").spawnMetadata(storage -> storage.add(new Metadata(13, MetaType1_9.VarInt, 4))); // Base Profession mapEntityTypeWithData(Entity1_11Types.EntityType.VINDICATION_ILLAGER, Entity1_11Types.EntityType.VILLAGER).mobName("Vindicator").spawnMetadata(storage -> storage.add(new Metadata(13, MetaType1_9.VarInt, 4))); // Base Profession
mapEntity(Entity1_11Types.EntityType.LIAMA, Entity1_11Types.EntityType.HORSE).mobName("Llama").spawnMetadata(storage -> storage.add(getHorseMetaType(1))); mapEntityTypeWithData(Entity1_11Types.EntityType.LIAMA, Entity1_11Types.EntityType.HORSE).mobName("Llama").spawnMetadata(storage -> storage.add(getHorseMetaType(1)));
mapEntity(Entity1_11Types.EntityType.LIAMA_SPIT, Entity1_11Types.EntityType.SNOWBALL); mapEntityTypeWithData(Entity1_11Types.EntityType.LIAMA_SPIT, Entity1_11Types.EntityType.SNOWBALL);
mapObjectType(Entity1_11Types.ObjectType.LIAMA_SPIT, Entity1_11Types.ObjectType.SNOWBALL, -1); mapObjectType(Entity1_11Types.ObjectType.LIAMA_SPIT, Entity1_11Types.ObjectType.SNOWBALL, -1);
// Replace with endertorchthingies // Replace with endertorchthingies
mapObjectType(Entity1_11Types.ObjectType.EVOCATION_FANGS, Entity1_11Types.ObjectType.FALLING_BLOCK, 198 | 1 << 12); mapObjectType(Entity1_11Types.ObjectType.EVOCATION_FANGS, Entity1_11Types.ObjectType.FALLING_BLOCK, 198 | 1 << 12);
// Handle ElderGuardian & target metadata // Handle ElderGuardian & target metadata
registerMetaHandler().filter(Entity1_11Types.EntityType.GUARDIAN, true, 12).handle(e -> { filter().filterFamily(Entity1_11Types.EntityType.GUARDIAN).index(12).handler((event, meta) -> {
Metadata data = e.getData(); boolean b = (boolean) meta.getValue();
boolean b = (boolean) data.getValue();
int bitmask = b ? 0x02 : 0; int bitmask = b ? 0x02 : 0;
if (e.getEntity().getType().is(Entity1_11Types.EntityType.ELDER_GUARDIAN)) if (event.entityType() == Entity1_11Types.EntityType.ELDER_GUARDIAN) {
bitmask |= 0x04; bitmask |= 0x04;
}
data.setMetaType(MetaType1_9.Byte); meta.setMetaType(MetaType1_9.Byte);
data.setValue((byte) bitmask); meta.setValue((byte) bitmask);
return data;
}); });
// Handle skeleton swing // Handle skeleton swing
registerMetaHandler().filter(Entity1_11Types.EntityType.ABSTRACT_SKELETON, true, 12).handleIndexChange(13); filter().filterFamily(Entity1_11Types.EntityType.ABSTRACT_SKELETON).index(12).toIndex(13);
/* /*
ZOMBIE CHANGES ZOMBIE CHANGES
*/ */
registerMetaHandler().filter(Entity1_11Types.EntityType.ZOMBIE, true).handle(e -> { filter().filterFamily(Entity1_11Types.EntityType.ZOMBIE).handler((event, meta) -> {
Metadata data = e.getData(); switch (meta.id()) {
switch (data.getId()) {
case 13: case 13:
throw RemovedValueException.EX; event.cancel();
return;
case 14: case 14:
data.setId(15); event.setIndex(15);
break; break;
case 15: case 15:
data.setId(14); event.setIndex(14);
break; break;
// Profession // Profession
case 16: case 16:
data.setId(13); event.setIndex(13);
data.setValue(1 + (int) data.getValue()); meta.setValue(1 + (int) meta.getValue());
break; break;
} }
return data;
}); });
// Handle Evocation Illager // Handle Evocation Illager
registerMetaHandler().filter(Entity1_11Types.EntityType.EVOCATION_ILLAGER, 12).handle(e -> { filter().type(Entity1_11Types.EntityType.EVOCATION_ILLAGER).index(12).handler((event, meta) -> {
Metadata data = e.getData(); event.setIndex(13);
data.setId(13); meta.setMetaType(MetaType1_9.VarInt);
data.setMetaType(MetaType1_9.VarInt); meta.setValue(((Byte) meta.getValue()).intValue()); // Change the profession for the states
data.setValue(((Byte) data.getValue()).intValue()); // Change the profession for the states
return data;
}); });
// Handle Vex (Remove this field completely since the position is not updated correctly when idling for bats. Sad ): // Handle Vex (Remove this field completely since the position is not updated correctly when idling for bats. Sad ):
registerMetaHandler().filter(Entity1_11Types.EntityType.VEX, 12).handle(e -> { filter().type(Entity1_11Types.EntityType.VEX).index(12).handler((event, meta) -> {
Metadata data = e.getData(); meta.setValue((byte) 0x00);
data.setValue((byte) 0x00);
return data;
}); });
// Handle VindicationIllager // Handle VindicationIllager
registerMetaHandler().filter(Entity1_11Types.EntityType.VINDICATION_ILLAGER, 12).handle(e -> { filter().type(Entity1_11Types.EntityType.VINDICATION_ILLAGER).index(12).handler((event, meta) -> {
Metadata data = e.getData(); event.setIndex(13);
data.setId(13); meta.setMetaType(MetaType1_9.VarInt);
data.setMetaType(MetaType1_9.VarInt); meta.setValue(((Number) meta.getValue()).intValue() == 1 ? 2 : 4);
data.setValue(((Number) data.getValue()).intValue() == 1 ? 2 : 4);
return data;
}); });
/* /*
@ -314,72 +291,70 @@ public class EntityPackets1_11 extends LegacyEntityRewriter<Protocol1_10To1_11>
*/ */
// Handle horse flags // Handle horse flags
registerMetaHandler().filter(Entity1_11Types.EntityType.ABSTRACT_HORSE, true, 13).handle(e -> { filter().filterFamily(Entity1_11Types.EntityType.ABSTRACT_HORSE).index(13).handler((event, meta) -> {
Metadata data = e.getData(); StoredEntityData data = storedEntityData(event);
byte b = (byte) data.getValue(); byte b = (byte) meta.getValue();
if (e.getEntity().has(ChestedHorseStorage.class) && if (data.has(ChestedHorseStorage.class) && data.get(ChestedHorseStorage.class).isChested()) {
e.getEntity().get(ChestedHorseStorage.class).isChested()) {
b |= 0x08; // Chested b |= 0x08; // Chested
data.setValue(b); meta.setValue(b);
} }
return data;
}); });
// Create chested horse storage // Create chested horse storage
registerMetaHandler().filter(Entity1_11Types.EntityType.CHESTED_HORSE, true).handle(e -> { filter().filterFamily(Entity1_11Types.EntityType.CHESTED_HORSE).handler((event, meta) -> {
if (!e.getEntity().has(ChestedHorseStorage.class)) StoredEntityData data = storedEntityData(event);
e.getEntity().put(new ChestedHorseStorage()); if (!data.has(ChestedHorseStorage.class)) {
return e.getData(); data.put(new ChestedHorseStorage());
}
}); });
// Handle horse armor // Handle horse armor
registerMetaHandler().filter(Entity1_11Types.EntityType.HORSE, 16).handleIndexChange(17); filter().type(Entity1_11Types.EntityType.HORSE).index(16).toIndex(17);
// Handle chested horse // Handle chested horse
registerMetaHandler().filter(Entity1_11Types.EntityType.CHESTED_HORSE, true, 15).handle(e -> { filter().filterFamily(Entity1_11Types.EntityType.CHESTED_HORSE).index(15).handler((event, meta) -> {
ChestedHorseStorage storage = e.getEntity().get(ChestedHorseStorage.class); StoredEntityData data = storedEntityData(event);
boolean b = (boolean) e.getData().getValue(); ChestedHorseStorage storage = data.get(ChestedHorseStorage.class);
boolean b = (boolean) meta.getValue();
storage.setChested(b); storage.setChested(b);
event.cancel();
throw RemovedValueException.EX;
}); });
// Get rid of Liama metadata // Get rid of Liama metadata
registerMetaHandler().filter(Entity1_11Types.EntityType.LIAMA).handle(e -> { filter().type(Entity1_11Types.EntityType.LIAMA).handler((event, meta) -> {
Metadata data = e.getData(); StoredEntityData data = storedEntityData(event);
ChestedHorseStorage storage = e.getEntity().get(ChestedHorseStorage.class); ChestedHorseStorage storage = data.get(ChestedHorseStorage.class);
int index = e.getIndex(); int index = event.index();
// Store them for later (: // Store them for later (:
switch (index) { switch (index) {
case 16: case 16:
storage.setLiamaStrength((int) data.getValue()); storage.setLiamaStrength((int) meta.getValue());
throw RemovedValueException.EX; event.cancel();
break;
case 17: case 17:
storage.setLiamaCarpetColor((int) data.getValue()); storage.setLiamaCarpetColor((int) meta.getValue());
throw RemovedValueException.EX; event.cancel();
break;
case 18: case 18:
storage.setLiamaVariant((int) data.getValue()); storage.setLiamaVariant((int) meta.getValue());
throw RemovedValueException.EX; event.cancel();
break;
} }
return e.getData();
}); });
// Handle Horse (Correct owner) // Handle Horse (Correct owner)
registerMetaHandler().filter(Entity1_11Types.EntityType.ABSTRACT_HORSE, true, 14).handleIndexChange(16); filter().filterFamily(Entity1_11Types.EntityType.ABSTRACT_HORSE).index(14).toIndex(16);
// Handle villager - Change non-existing profession // Handle villager - Change non-existing profession
registerMetaHandler().filter(Entity1_11Types.EntityType.VILLAGER, 13).handle(e -> { filter().type(Entity1_11Types.EntityType.VILLAGER).index(13).handler((event, meta) -> {
Metadata data = e.getData(); if ((int) meta.getValue() == 5) {
if ((int) data.getValue() == 5) meta.setValue(0);
data.setValue(0); }
return data;
}); });
// handle new Shulker color meta // handle new Shulker color meta
registerMetaHandler().filter(Entity1_11Types.EntityType.SHULKER, 15).removed(); filter().type(Entity1_11Types.EntityType.SHULKER).cancel(15);
} }
/* /*
@ -401,7 +376,7 @@ public class EntityPackets1_11 extends LegacyEntityRewriter<Protocol1_10To1_11>
return new Metadata(13, MetaType1_9.VarInt, type); return new Metadata(13, MetaType1_9.VarInt, type);
} }
private void handleZombieType(MetaStorage storage, int type) { private void handleZombieType(WrappedMetadata storage, int type) {
Metadata meta = storage.get(13); Metadata meta = storage.get(13);
if (meta == null) { if (meta == null) {
storage.add(getZombieTypeMeta(type)); storage.add(getZombieTypeMeta(type));
@ -420,7 +395,7 @@ public class EntityPackets1_11 extends LegacyEntityRewriter<Protocol1_10To1_11>
} }
@Override @Override
protected EntityType getTypeFromId(int typeId) { public EntityType typeFromId(int typeId) {
return Entity1_11Types.getTypeFromId(typeId, false); return Entity1_11Types.getTypeFromId(typeId, false);
} }

Datei anzeigen

@ -18,9 +18,7 @@
package com.viaversion.viabackwards.protocol.protocol1_10to1_11.storage; package com.viaversion.viabackwards.protocol.protocol1_10to1_11.storage;
import com.viaversion.viabackwards.api.entities.storage.EntityStorage; public class ChestedHorseStorage {
public class ChestedHorseStorage implements EntityStorage {
private boolean chested; private boolean chested;
private int liamaStrength; private int liamaStrength;
private int liamaCarpetColor = -1; private int liamaCarpetColor = -1;

Datei anzeigen

@ -25,8 +25,10 @@ import com.viaversion.viabackwards.protocol.protocol1_11_1to1_12.packets.ChatPac
import com.viaversion.viabackwards.protocol.protocol1_11_1to1_12.packets.EntityPackets1_12; import com.viaversion.viabackwards.protocol.protocol1_11_1to1_12.packets.EntityPackets1_12;
import com.viaversion.viabackwards.protocol.protocol1_11_1to1_12.packets.SoundPackets1_12; import com.viaversion.viabackwards.protocol.protocol1_11_1to1_12.packets.SoundPackets1_12;
import com.viaversion.viaversion.api.connection.UserConnection; import com.viaversion.viaversion.api.connection.UserConnection;
import com.viaversion.viaversion.api.minecraft.entities.Entity1_12Types;
import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper; import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper;
import com.viaversion.viaversion.api.type.Type; import com.viaversion.viaversion.api.type.Type;
import com.viaversion.viaversion.data.entity.EntityTrackerBase;
import com.viaversion.viaversion.libs.gson.JsonElement; import com.viaversion.viaversion.libs.gson.JsonElement;
import com.viaversion.viaversion.protocols.protocol1_12to1_11_1.ClientboundPackets1_12; import com.viaversion.viaversion.protocols.protocol1_12to1_11_1.ClientboundPackets1_12;
import com.viaversion.viaversion.protocols.protocol1_12to1_11_1.ServerboundPackets1_12; import com.viaversion.viaversion.protocols.protocol1_12to1_11_1.ServerboundPackets1_12;
@ -76,7 +78,7 @@ public class Protocol1_11_1To1_12 extends BackwardsProtocol<ClientboundPackets1_
user.put(new ClientWorld(user)); user.put(new ClientWorld(user));
} }
initEntityTracker(user); user.addEntityTracker(this.getClass(), new EntityTrackerBase(user, Entity1_12Types.EntityType.PLAYER, true));
user.put(new ShoulderTracker(user)); user.put(new ShoulderTracker(user));
} }

Datei anzeigen

@ -18,10 +18,7 @@
package com.viaversion.viabackwards.protocol.protocol1_11_1to1_12.data; package com.viaversion.viabackwards.protocol.protocol1_11_1to1_12.data;
public class ParrotStorage {
import com.viaversion.viabackwards.api.entities.storage.EntityStorage;
public class ParrotStorage implements EntityStorage {
private boolean tamed = true; private boolean tamed = true;
private boolean sitting = true; private boolean sitting = true;

Datei anzeigen

@ -24,7 +24,6 @@ import com.viaversion.viabackwards.protocol.protocol1_11_1to1_12.data.MapColorMa
import com.viaversion.viaversion.api.minecraft.BlockChangeRecord; import com.viaversion.viaversion.api.minecraft.BlockChangeRecord;
import com.viaversion.viaversion.api.minecraft.chunks.Chunk; import com.viaversion.viaversion.api.minecraft.chunks.Chunk;
import com.viaversion.viaversion.api.minecraft.item.Item; import com.viaversion.viaversion.api.minecraft.item.Item;
import com.viaversion.viaversion.api.minecraft.metadata.Metadata;
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper; import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
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.protocol.remapper.PacketRemapper;
@ -236,13 +235,9 @@ public class BlockItemPackets1_12 extends LegacyBlockItemRewriter<Protocol1_11_1
} }
}); });
protocol.getEntityPackets().registerMetaHandler().handle(e -> { protocol.getEntityPackets().filter().handler((event, meta) -> {
Metadata data = e.getData(); if (meta.metaType().type().equals(Type.ITEM)) // Is Item
meta.setValue(handleItemToClient((Item) meta.getValue()));
if (data.getMetaType().getType().equals(Type.ITEM)) // Is Item
data.setValue(handleItemToClient((Item) data.getValue()));
return data;
}); });
protocol.registerServerbound(ServerboundPackets1_9_3.CLIENT_STATUS, new PacketRemapper() { protocol.registerServerbound(ServerboundPackets1_9_3.CLIENT_STATUS, new PacketRemapper() {

Datei anzeigen

@ -18,7 +18,6 @@
package com.viaversion.viabackwards.protocol.protocol1_11_1to1_12.packets; package com.viaversion.viabackwards.protocol.protocol1_11_1to1_12.packets;
import com.viaversion.viabackwards.api.rewriters.Rewriter;
import com.viaversion.viabackwards.protocol.protocol1_11_1to1_12.Protocol1_11_1To1_12; import com.viaversion.viabackwards.protocol.protocol1_11_1to1_12.Protocol1_11_1To1_12;
import com.viaversion.viabackwards.protocol.protocol1_11_1to1_12.data.AdvancementTranslations; import com.viaversion.viabackwards.protocol.protocol1_11_1to1_12.data.AdvancementTranslations;
import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper; import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper;
@ -27,8 +26,9 @@ import com.viaversion.viaversion.libs.gson.JsonElement;
import com.viaversion.viaversion.libs.gson.JsonObject; import com.viaversion.viaversion.libs.gson.JsonObject;
import com.viaversion.viaversion.protocols.protocol1_12to1_11_1.ClientboundPackets1_12; import com.viaversion.viaversion.protocols.protocol1_12to1_11_1.ClientboundPackets1_12;
import com.viaversion.viaversion.rewriter.ComponentRewriter; import com.viaversion.viaversion.rewriter.ComponentRewriter;
import com.viaversion.viaversion.rewriter.RewriterBase;
public class ChatPackets1_12 extends Rewriter<Protocol1_11_1To1_12> { public class ChatPackets1_12 extends RewriterBase<Protocol1_11_1To1_12> {
private final ComponentRewriter componentRewriter = new ComponentRewriter() { private final ComponentRewriter componentRewriter = new ComponentRewriter() {
@Override @Override

Datei anzeigen

@ -18,12 +18,12 @@
package com.viaversion.viabackwards.protocol.protocol1_11_1to1_12.packets; package com.viaversion.viabackwards.protocol.protocol1_11_1to1_12.packets;
import com.viaversion.viabackwards.api.exceptions.RemovedValueException;
import com.viaversion.viabackwards.api.rewriters.LegacyEntityRewriter; import com.viaversion.viabackwards.api.rewriters.LegacyEntityRewriter;
import com.viaversion.viabackwards.protocol.protocol1_11_1to1_12.Protocol1_11_1To1_12; import com.viaversion.viabackwards.protocol.protocol1_11_1to1_12.Protocol1_11_1To1_12;
import com.viaversion.viabackwards.protocol.protocol1_11_1to1_12.data.ParrotStorage; import com.viaversion.viabackwards.protocol.protocol1_11_1to1_12.data.ParrotStorage;
import com.viaversion.viabackwards.protocol.protocol1_11_1to1_12.data.ShoulderTracker; import com.viaversion.viabackwards.protocol.protocol1_11_1to1_12.data.ShoulderTracker;
import com.viaversion.viabackwards.utils.Block; import com.viaversion.viabackwards.utils.Block;
import com.viaversion.viaversion.api.data.entity.StoredEntityData;
import com.viaversion.viaversion.api.minecraft.entities.Entity1_12Types; import com.viaversion.viaversion.api.minecraft.entities.Entity1_12Types;
import com.viaversion.viaversion.api.minecraft.entities.EntityType; import com.viaversion.viaversion.api.minecraft.entities.EntityType;
import com.viaversion.viaversion.api.minecraft.metadata.Metadata; import com.viaversion.viaversion.api.minecraft.metadata.Metadata;
@ -73,7 +73,7 @@ public class EntityPackets1_12 extends LegacyEntityRewriter<Protocol1_11_1To1_12
int objType = objectData & 4095; int objType = objectData & 4095;
int data = objectData >> 12 & 15; int data = objectData >> 12 & 15;
Block block = getProtocol().getBlockItemPackets().handleBlock(objType, data); Block block = protocol.getBlockItemPackets().handleBlock(objType, data);
if (block == null) { if (block == null) {
return; return;
} }
@ -85,8 +85,8 @@ public class EntityPackets1_12 extends LegacyEntityRewriter<Protocol1_11_1To1_12
} }
}); });
registerExtraTracker(ClientboundPackets1_12.SPAWN_EXPERIENCE_ORB, Entity1_12Types.EntityType.EXPERIENCE_ORB); registerTracker(ClientboundPackets1_12.SPAWN_EXPERIENCE_ORB, Entity1_12Types.EntityType.EXPERIENCE_ORB);
registerExtraTracker(ClientboundPackets1_12.SPAWN_GLOBAL_ENTITY, Entity1_12Types.EntityType.WEATHER); registerTracker(ClientboundPackets1_12.SPAWN_GLOBAL_ENTITY, Entity1_12Types.EntityType.WEATHER);
protocol.registerClientbound(ClientboundPackets1_12.SPAWN_MOB, new PacketRemapper() { protocol.registerClientbound(ClientboundPackets1_12.SPAWN_MOB, new PacketRemapper() {
@Override @Override
@ -113,7 +113,7 @@ public class EntityPackets1_12 extends LegacyEntityRewriter<Protocol1_11_1To1_12
} }
}); });
registerExtraTracker(ClientboundPackets1_12.SPAWN_PAINTING, Entity1_12Types.EntityType.PAINTING); registerTracker(ClientboundPackets1_12.SPAWN_PAINTING, Entity1_12Types.EntityType.PAINTING);
protocol.registerClientbound(ClientboundPackets1_12.SPAWN_PLAYER, new PacketRemapper() { protocol.registerClientbound(ClientboundPackets1_12.SPAWN_PLAYER, new PacketRemapper() {
@Override @Override
@ -167,7 +167,7 @@ public class EntityPackets1_12 extends LegacyEntityRewriter<Protocol1_11_1To1_12
}); });
registerRespawn(ClientboundPackets1_12.RESPAWN); registerRespawn(ClientboundPackets1_12.RESPAWN);
registerEntityDestroy(ClientboundPackets1_12.DESTROY_ENTITIES); registerRemoveEntities(ClientboundPackets1_12.DESTROY_ENTITIES);
registerMetadataRewriter(ClientboundPackets1_12.ENTITY_METADATA, Types1_12.METADATA_LIST); registerMetadataRewriter(ClientboundPackets1_12.ENTITY_METADATA, Types1_12.METADATA_LIST);
protocol.registerClientbound(ClientboundPackets1_12.ENTITY_PROPERTIES, new PacketRemapper() { protocol.registerClientbound(ClientboundPackets1_12.ENTITY_PROPERTIES, new PacketRemapper() {
@ -212,36 +212,37 @@ public class EntityPackets1_12 extends LegacyEntityRewriter<Protocol1_11_1To1_12
@Override @Override
protected void registerRewrites() { protected void registerRewrites() {
mapEntity(Entity1_12Types.EntityType.PARROT, Entity1_12Types.EntityType.BAT).mobName("Parrot").spawnMetadata(storage -> storage.add(new Metadata(12, MetaType1_12.Byte, (byte) 0x00))); mapEntityTypeWithData(Entity1_12Types.EntityType.PARROT, Entity1_12Types.EntityType.BAT).mobName("Parrot").spawnMetadata(storage -> storage.add(new Metadata(12, MetaType1_12.Byte, (byte) 0x00)));
mapEntity(Entity1_12Types.EntityType.ILLUSION_ILLAGER, Entity1_12Types.EntityType.EVOCATION_ILLAGER).mobName("Illusioner"); mapEntityTypeWithData(Entity1_12Types.EntityType.ILLUSION_ILLAGER, Entity1_12Types.EntityType.EVOCATION_ILLAGER).mobName("Illusioner");
// Handle Illager // Handle Illager
registerMetaHandler().filter(Entity1_12Types.EntityType.EVOCATION_ILLAGER, true, 12).removed(); filter().filterFamily(Entity1_12Types.EntityType.EVOCATION_ILLAGER).cancel(12);
registerMetaHandler().filter(Entity1_12Types.EntityType.EVOCATION_ILLAGER, true, 13).handleIndexChange(12); filter().filterFamily(Entity1_12Types.EntityType.EVOCATION_ILLAGER).index(13).toIndex(12);
registerMetaHandler().filter(Entity1_12Types.EntityType.ILLUSION_ILLAGER, 0).handle(e -> { filter().type(Entity1_12Types.EntityType.ILLUSION_ILLAGER).index(0).handler((event, meta) -> {
byte mask = (byte) e.getData().getValue(); byte mask = (byte) meta.getValue();
if ((mask & 0x20) == 0x20) if ((mask & 0x20) == 0x20) {
mask &= ~0x20; mask &= ~0x20;
}
e.getData().setValue(mask); meta.setValue(mask);
return e.getData();
}); });
// Create Parrot storage // Create Parrot storage
registerMetaHandler().filter(Entity1_12Types.EntityType.PARROT, true).handle(e -> { filter().filterFamily(Entity1_12Types.EntityType.PARROT).handler((event, meta) -> {
if (!e.getEntity().has(ParrotStorage.class)) StoredEntityData data = storedEntityData(event);
e.getEntity().put(new ParrotStorage()); if (!data.has(ParrotStorage.class)) {
return e.getData(); data.put(new ParrotStorage());
}
}); });
// Parrot remove animal metadata // Parrot remove animal metadata
registerMetaHandler().filter(Entity1_12Types.EntityType.PARROT, 12).removed(); // Is baby filter().type(Entity1_12Types.EntityType.PARROT).cancel(12); // Is baby
registerMetaHandler().filter(Entity1_12Types.EntityType.PARROT, 13).handle(e -> { filter().type(Entity1_12Types.EntityType.PARROT).index(13).handler((event, meta) -> {
Metadata data = e.getData(); StoredEntityData data = storedEntityData(event);
ParrotStorage storage = e.getEntity().get(ParrotStorage.class); ParrotStorage storage = data.get(ParrotStorage.class);
boolean isSitting = (((byte) data.getValue()) & 0x01) == 0x01; boolean isSitting = (((byte) meta.getValue()) & 0x01) == 0x01;
boolean isTamed = (((byte) data.getValue()) & 0x04) == 0x04; boolean isTamed = (((byte) meta.getValue()) & 0x04) == 0x04;
if (!storage.isTamed() && isTamed) { if (!storage.isTamed() && isTamed) {
// TODO do something to let the user know it's done // TODO do something to let the user know it's done
@ -250,30 +251,29 @@ public class EntityPackets1_12 extends LegacyEntityRewriter<Protocol1_11_1To1_12
storage.setTamed(isTamed); storage.setTamed(isTamed);
if (isSitting) { if (isSitting) {
data.setId(12); event.setIndex(12);
data.setValue((byte) 0x01); meta.setValue((byte) 0x01);
storage.setSitting(true); storage.setSitting(true);
} else if (storage.isSitting()) { } else if (storage.isSitting()) {
data.setId(12); event.setIndex(12);
data.setValue((byte) 0x00); meta.setValue((byte) 0x00);
storage.setSitting(false); storage.setSitting(false);
} else } else {
throw RemovedValueException.EX; event.cancel();
}
return data;
}); // Flags (Is sitting etc, might be useful in the future }); // Flags (Is sitting etc, might be useful in the future
registerMetaHandler().filter(Entity1_12Types.EntityType.PARROT, 14).removed(); // Owner filter().type(Entity1_12Types.EntityType.PARROT).cancel(14); // Owner
registerMetaHandler().filter(Entity1_12Types.EntityType.PARROT, 15).removed(); // Variant filter().type(Entity1_12Types.EntityType.PARROT).cancel(15); // Variant
// Left shoulder entity data // Left shoulder entity data
registerMetaHandler().filter(Entity1_12Types.EntityType.PLAYER, 15).handle(e -> { filter().type(Entity1_12Types.EntityType.PLAYER).index(15).handler((event, meta) -> {
CompoundTag tag = (CompoundTag) e.getData().getValue(); CompoundTag tag = (CompoundTag) meta.getValue();
ShoulderTracker tracker = e.getUser().get(ShoulderTracker.class); ShoulderTracker tracker = event.user().get(ShoulderTracker.class);
if (tag.isEmpty() && tracker.getLeftShoulder() != null) { if (tag.isEmpty() && tracker.getLeftShoulder() != null) {
tracker.setLeftShoulder(null); tracker.setLeftShoulder(null);
tracker.update(); tracker.update();
} else if (tag.contains("id") && e.getEntity().getEntityId() == tracker.getEntityId()) { } else if (tag.contains("id") && event.entityId() == tracker.getEntityId()) {
String id = (String) tag.get("id").getValue(); String id = (String) tag.get("id").getValue();
if (tracker.getLeftShoulder() == null || !tracker.getLeftShoulder().equals(id)) { if (tracker.getLeftShoulder() == null || !tracker.getLeftShoulder().equals(id)) {
tracker.setLeftShoulder(id); tracker.setLeftShoulder(id);
@ -281,18 +281,18 @@ public class EntityPackets1_12 extends LegacyEntityRewriter<Protocol1_11_1To1_12
} }
} }
throw RemovedValueException.EX; event.cancel();
}); });
// Right shoulder entity data // Right shoulder entity data
registerMetaHandler().filter(Entity1_12Types.EntityType.PLAYER, 16).handle(e -> { filter().type(Entity1_12Types.EntityType.PLAYER).index(16).handler((event, meta) -> {
CompoundTag tag = (CompoundTag) e.getData().getValue(); CompoundTag tag = (CompoundTag) event.meta().getValue();
ShoulderTracker tracker = e.getUser().get(ShoulderTracker.class); ShoulderTracker tracker = event.user().get(ShoulderTracker.class);
if (tag.isEmpty() && tracker.getRightShoulder() != null) { if (tag.isEmpty() && tracker.getRightShoulder() != null) {
tracker.setRightShoulder(null); tracker.setRightShoulder(null);
tracker.update(); tracker.update();
} else if (tag.contains("id") && e.getEntity().getEntityId() == tracker.getEntityId()) { } else if (tag.contains("id") && event.entityId() == tracker.getEntityId()) {
String id = (String) tag.get("id").getValue(); String id = (String) tag.get("id").getValue();
if (tracker.getRightShoulder() == null || !tracker.getRightShoulder().equals(id)) { if (tracker.getRightShoulder() == null || !tracker.getRightShoulder().equals(id)) {
tracker.setRightShoulder(id); tracker.setRightShoulder(id);
@ -300,12 +300,12 @@ public class EntityPackets1_12 extends LegacyEntityRewriter<Protocol1_11_1To1_12
} }
} }
throw RemovedValueException.EX; event.cancel();
}); });
} }
@Override @Override
protected EntityType getTypeFromId(int typeId) { public EntityType typeFromId(int typeId) {
return Entity1_12Types.getTypeFromId(typeId, false); return Entity1_12Types.getTypeFromId(typeId, false);
} }

Datei anzeigen

@ -22,6 +22,8 @@ import com.viaversion.viabackwards.api.BackwardsProtocol;
import com.viaversion.viabackwards.protocol.protocol1_11to1_11_1.packets.EntityPackets1_11_1; import com.viaversion.viabackwards.protocol.protocol1_11to1_11_1.packets.EntityPackets1_11_1;
import com.viaversion.viabackwards.protocol.protocol1_11to1_11_1.packets.ItemPackets1_11_1; import com.viaversion.viabackwards.protocol.protocol1_11to1_11_1.packets.ItemPackets1_11_1;
import com.viaversion.viaversion.api.connection.UserConnection; import com.viaversion.viaversion.api.connection.UserConnection;
import com.viaversion.viaversion.api.minecraft.entities.Entity1_11Types;
import com.viaversion.viaversion.data.entity.EntityTrackerBase;
import com.viaversion.viaversion.protocols.protocol1_9_3to1_9_1_2.ClientboundPackets1_9_3; import com.viaversion.viaversion.protocols.protocol1_9_3to1_9_1_2.ClientboundPackets1_9_3;
import com.viaversion.viaversion.protocols.protocol1_9_3to1_9_1_2.ServerboundPackets1_9_3; import com.viaversion.viaversion.protocols.protocol1_9_3to1_9_1_2.ServerboundPackets1_9_3;
import com.viaversion.viaversion.protocols.protocol1_9_3to1_9_1_2.storage.ClientWorld; import com.viaversion.viaversion.protocols.protocol1_9_3to1_9_1_2.storage.ClientWorld;
@ -47,7 +49,7 @@ public class Protocol1_11To1_11_1 extends BackwardsProtocol<ClientboundPackets1_
user.put(new ClientWorld(user)); user.put(new ClientWorld(user));
} }
initEntityTracker(user); user.addEntityTracker(this.getClass(), new EntityTrackerBase(user, Entity1_11Types.EntityType.PLAYER));
} }
public EntityPackets1_11_1 getEntityPackets() { public EntityPackets1_11_1 getEntityPackets() {

Datei anzeigen

@ -54,8 +54,8 @@ public class EntityPackets1_11_1 extends LegacyEntityRewriter<Protocol1_11To1_11
} }
}); });
registerExtraTracker(ClientboundPackets1_9_3.SPAWN_EXPERIENCE_ORB, Entity1_11Types.EntityType.EXPERIENCE_ORB); registerTracker(ClientboundPackets1_9_3.SPAWN_EXPERIENCE_ORB, Entity1_11Types.EntityType.EXPERIENCE_ORB);
registerExtraTracker(ClientboundPackets1_9_3.SPAWN_GLOBAL_ENTITY, Entity1_11Types.EntityType.WEATHER); registerTracker(ClientboundPackets1_9_3.SPAWN_GLOBAL_ENTITY, Entity1_11Types.EntityType.WEATHER);
protocol.registerClientbound(ClientboundPackets1_9_3.SPAWN_MOB, new PacketRemapper() { protocol.registerClientbound(ClientboundPackets1_9_3.SPAWN_MOB, new PacketRemapper() {
@Override @Override
@ -82,7 +82,7 @@ public class EntityPackets1_11_1 extends LegacyEntityRewriter<Protocol1_11To1_11
} }
}); });
registerExtraTracker(ClientboundPackets1_9_3.SPAWN_PAINTING, Entity1_11Types.EntityType.PAINTING); registerTracker(ClientboundPackets1_9_3.SPAWN_PAINTING, Entity1_11Types.EntityType.PAINTING);
registerJoinGame(ClientboundPackets1_9_3.JOIN_GAME, Entity1_11Types.EntityType.PLAYER); registerJoinGame(ClientboundPackets1_9_3.JOIN_GAME, Entity1_11Types.EntityType.PLAYER);
registerRespawn(ClientboundPackets1_9_3.RESPAWN); registerRespawn(ClientboundPackets1_9_3.RESPAWN);
@ -102,21 +102,21 @@ public class EntityPackets1_11_1 extends LegacyEntityRewriter<Protocol1_11To1_11
} }
}); });
registerEntityDestroy(ClientboundPackets1_9_3.DESTROY_ENTITIES); registerRemoveEntities(ClientboundPackets1_9_3.DESTROY_ENTITIES);
registerMetadataRewriter(ClientboundPackets1_9_3.ENTITY_METADATA, Types1_9.METADATA_LIST); registerMetadataRewriter(ClientboundPackets1_9_3.ENTITY_METADATA, Types1_9.METADATA_LIST);
} }
@Override @Override
protected void registerRewrites() { protected void registerRewrites() {
// Handle non-existing firework metadata (index 7 entity id for boosting) // Handle non-existing firework metadata (index 7 entity id for boosting)
registerMetaHandler().filter(Entity1_11Types.EntityType.FIREWORK, 7).removed(); filter().type(Entity1_11Types.EntityType.FIREWORK).cancel(7);
// Handle non-existing pig metadata (index 14 - boost time) // Handle non-existing pig metadata (index 14 - boost time)
registerMetaHandler().filter(Entity1_11Types.EntityType.PIG, 14).removed(); filter().type(Entity1_11Types.EntityType.PIG).cancel(14);
} }
@Override @Override
protected EntityType getTypeFromId(int typeId) { public EntityType typeFromId(int typeId) {
return Entity1_11Types.getTypeFromId(typeId, false); return Entity1_11Types.getTypeFromId(typeId, false);
} }

Datei anzeigen

@ -22,7 +22,6 @@ import com.viaversion.viabackwards.api.rewriters.LegacyBlockItemRewriter;
import com.viaversion.viabackwards.api.rewriters.LegacyEnchantmentRewriter; import com.viaversion.viabackwards.api.rewriters.LegacyEnchantmentRewriter;
import com.viaversion.viabackwards.protocol.protocol1_11to1_11_1.Protocol1_11To1_11_1; import com.viaversion.viabackwards.protocol.protocol1_11to1_11_1.Protocol1_11To1_11_1;
import com.viaversion.viaversion.api.minecraft.item.Item; import com.viaversion.viaversion.api.minecraft.item.Item;
import com.viaversion.viaversion.api.minecraft.metadata.Metadata;
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper; import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
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.protocol.remapper.PacketRemapper;
@ -85,14 +84,10 @@ public class ItemPackets1_11_1 extends LegacyBlockItemRewriter<Protocol1_11To1_1
itemRewriter.registerCreativeInvAction(ServerboundPackets1_9_3.CREATIVE_INVENTORY_ACTION, Type.ITEM); itemRewriter.registerCreativeInvAction(ServerboundPackets1_9_3.CREATIVE_INVENTORY_ACTION, Type.ITEM);
// Handle item metadata // Handle item metadata
protocol.getEntityPackets().registerMetaHandler().handle(e -> { protocol.getEntityPackets().filter().handler((event, meta) -> {
Metadata data = e.getData(); if (meta.metaType().type().equals(Type.ITEM)) { // Is Item
meta.setValue(handleItemToClient((Item) meta.getValue()));
if (data.getMetaType().getType().equals(Type.ITEM)) { // Is Item
data.setValue(handleItemToClient((Item) data.getValue()));
} }
return data;
}); });
} }

Datei anzeigen

@ -33,6 +33,8 @@ import com.viaversion.viabackwards.protocol.protocol1_12_2to1_13.storage.PlayerP
import com.viaversion.viabackwards.protocol.protocol1_12_2to1_13.storage.TabCompleteStorage; import com.viaversion.viabackwards.protocol.protocol1_12_2to1_13.storage.TabCompleteStorage;
import com.viaversion.viaversion.api.Via; import com.viaversion.viaversion.api.Via;
import com.viaversion.viaversion.api.connection.UserConnection; import com.viaversion.viaversion.api.connection.UserConnection;
import com.viaversion.viaversion.api.minecraft.entities.Entity1_13Types;
import com.viaversion.viaversion.data.entity.EntityTrackerBase;
import com.viaversion.viaversion.libs.gson.JsonObject; import com.viaversion.viaversion.libs.gson.JsonObject;
import com.viaversion.viaversion.protocols.protocol1_12_1to1_12.ClientboundPackets1_12_1; import com.viaversion.viaversion.protocols.protocol1_12_1to1_12.ClientboundPackets1_12_1;
import com.viaversion.viaversion.protocols.protocol1_12_1to1_12.ServerboundPackets1_12_1; import com.viaversion.viaversion.protocols.protocol1_12_1to1_12.ServerboundPackets1_12_1;
@ -99,7 +101,7 @@ public class Protocol1_12_2To1_13 extends BackwardsProtocol<ClientboundPackets1_
user.put(new ClientWorld(user)); user.put(new ClientWorld(user));
} }
initEntityTracker(user); user.addEntityTracker(this.getClass(), new EntityTrackerBase(user, Entity1_13Types.EntityType.PLAYER));
// Register Block Storage // Register Block Storage
if (!user.has(BackwardsBlockStorage.class)) { if (!user.has(BackwardsBlockStorage.class)) {

Datei anzeigen

@ -19,7 +19,6 @@ package com.viaversion.viabackwards.protocol.protocol1_12_2to1_13.packets;
import com.viaversion.viabackwards.ViaBackwards; import com.viaversion.viabackwards.ViaBackwards;
import com.viaversion.viabackwards.api.entities.storage.EntityPositionHandler; import com.viaversion.viabackwards.api.entities.storage.EntityPositionHandler;
import com.viaversion.viabackwards.api.exceptions.RemovedValueException;
import com.viaversion.viabackwards.api.rewriters.LegacyEntityRewriter; import com.viaversion.viabackwards.api.rewriters.LegacyEntityRewriter;
import com.viaversion.viabackwards.protocol.protocol1_12_2to1_13.Protocol1_12_2To1_13; import com.viaversion.viabackwards.protocol.protocol1_12_2to1_13.Protocol1_12_2To1_13;
import com.viaversion.viabackwards.protocol.protocol1_12_2to1_13.data.EntityTypeMapping; import com.viaversion.viabackwards.protocol.protocol1_12_2to1_13.data.EntityTypeMapping;
@ -131,8 +130,8 @@ public class EntityPackets1_13 extends LegacyEntityRewriter<Protocol1_12_2To1_13
} }
}); });
registerExtraTracker(ClientboundPackets1_13.SPAWN_EXPERIENCE_ORB, Entity1_13Types.EntityType.EXPERIENCE_ORB); registerTracker(ClientboundPackets1_13.SPAWN_EXPERIENCE_ORB, Entity1_13Types.EntityType.EXPERIENCE_ORB);
registerExtraTracker(ClientboundPackets1_13.SPAWN_GLOBAL_ENTITY, Entity1_13Types.EntityType.LIGHTNING_BOLT); registerTracker(ClientboundPackets1_13.SPAWN_GLOBAL_ENTITY, Entity1_13Types.EntityType.LIGHTNING_BOLT);
protocol.registerClientbound(ClientboundPackets1_13.SPAWN_MOB, new PacketRemapper() { protocol.registerClientbound(ClientboundPackets1_13.SPAWN_MOB, new PacketRemapper() {
@Override @Override
@ -156,7 +155,7 @@ public class EntityPackets1_13 extends LegacyEntityRewriter<Protocol1_12_2To1_13
public void handle(PacketWrapper wrapper) throws Exception { public void handle(PacketWrapper wrapper) throws Exception {
int type = wrapper.get(Type.VAR_INT, 1); int type = wrapper.get(Type.VAR_INT, 1);
EntityType entityType = Entity1_13Types.getTypeFromId(type, false); EntityType entityType = Entity1_13Types.getTypeFromId(type, false);
addTrackedEntity(wrapper, wrapper.get(Type.VAR_INT, 0), entityType); tracker(wrapper.user()).addEntity(wrapper.get(Type.VAR_INT, 0), entityType);
int oldId = EntityTypeMapping.getOldId(type); int oldId = EntityTypeMapping.getOldId(type);
if (oldId == -1) { if (oldId == -1) {
@ -220,7 +219,7 @@ public class EntityPackets1_13 extends LegacyEntityRewriter<Protocol1_12_2To1_13
} }
}); });
registerEntityDestroy(ClientboundPackets1_13.DESTROY_ENTITIES); registerRemoveEntities(ClientboundPackets1_13.DESTROY_ENTITIES);
registerMetadataRewriter(ClientboundPackets1_13.ENTITY_METADATA, Types1_13.METADATA_LIST, Types1_12.METADATA_LIST); registerMetadataRewriter(ClientboundPackets1_13.ENTITY_METADATA, Types1_13.METADATA_LIST, Types1_12.METADATA_LIST);
// Face Player (new packet) // Face Player (new packet)
@ -281,30 +280,29 @@ public class EntityPackets1_13 extends LegacyEntityRewriter<Protocol1_12_2To1_13
@Override @Override
protected void registerRewrites() { protected void registerRewrites() {
// Rewrite new Entity 'drowned' // Rewrite new Entity 'drowned'
mapEntity(Entity1_13Types.EntityType.DROWNED, Entity1_13Types.EntityType.ZOMBIE_VILLAGER).mobName("Drowned"); mapEntityTypeWithData(Entity1_13Types.EntityType.DROWNED, Entity1_13Types.EntityType.ZOMBIE_VILLAGER).mobName("Drowned");
// Fishy // Fishy
mapEntity(Entity1_13Types.EntityType.COD, Entity1_13Types.EntityType.SQUID).mobName("Cod"); mapEntityTypeWithData(Entity1_13Types.EntityType.COD, Entity1_13Types.EntityType.SQUID).mobName("Cod");
mapEntity(Entity1_13Types.EntityType.SALMON, Entity1_13Types.EntityType.SQUID).mobName("Salmon"); mapEntityTypeWithData(Entity1_13Types.EntityType.SALMON, Entity1_13Types.EntityType.SQUID).mobName("Salmon");
mapEntity(Entity1_13Types.EntityType.PUFFERFISH, Entity1_13Types.EntityType.SQUID).mobName("Puffer Fish"); mapEntityTypeWithData(Entity1_13Types.EntityType.PUFFERFISH, Entity1_13Types.EntityType.SQUID).mobName("Puffer Fish");
mapEntity(Entity1_13Types.EntityType.TROPICAL_FISH, Entity1_13Types.EntityType.SQUID).mobName("Tropical Fish"); mapEntityTypeWithData(Entity1_13Types.EntityType.TROPICAL_FISH, Entity1_13Types.EntityType.SQUID).mobName("Tropical Fish");
// Phantom // Phantom
mapEntity(Entity1_13Types.EntityType.PHANTOM, Entity1_13Types.EntityType.PARROT).mobName("Phantom").spawnMetadata(storage -> { mapEntityTypeWithData(Entity1_13Types.EntityType.PHANTOM, Entity1_13Types.EntityType.PARROT).mobName("Phantom").spawnMetadata(storage -> {
// The phantom is grey/blue so let's do yellow/blue // The phantom is grey/blue so let's do yellow/blue
storage.add(new Metadata(15, MetaType1_12.VarInt, 3)); storage.add(new Metadata(15, MetaType1_12.VarInt, 3));
}); });
// Dolphin // Dolphin
mapEntity(Entity1_13Types.EntityType.DOLPHIN, Entity1_13Types.EntityType.SQUID).mobName("Dolphin"); mapEntityTypeWithData(Entity1_13Types.EntityType.DOLPHIN, Entity1_13Types.EntityType.SQUID).mobName("Dolphin");
// Turtle // Turtle
mapEntity(Entity1_13Types.EntityType.TURTLE, Entity1_13Types.EntityType.OCELOT).mobName("Turtle"); mapEntityTypeWithData(Entity1_13Types.EntityType.TURTLE, Entity1_13Types.EntityType.OCELOT).mobName("Turtle");
// Rewrite Meta types // Rewrite Meta types
registerMetaHandler().handle(e -> { filter().handler((event, meta) -> {
Metadata meta = e.getData(); int typeId = meta.metaType().typeId();
int typeId = meta.getMetaType().getTypeID();
// Rewrite optional chat to chat // Rewrite optional chat to chat
if (typeId == 5) { if (typeId == 5) {
@ -334,63 +332,49 @@ public class EntityPackets1_13 extends LegacyEntityRewriter<Protocol1_12_2To1_13
)); ));
} }
return meta;
}); });
// Rewrite Custom Name from Chat to String // Rewrite Custom Name from Chat to String
registerMetaHandler().filter(Entity1_13Types.EntityType.ENTITY, true, 2).handle(e -> { filter().filterFamily(Entity1_13Types.EntityType.ENTITY).index(2).handler((event, meta) -> {
Metadata meta = e.getData();
String value = meta.getValue().toString(); String value = meta.getValue().toString();
if (value.isEmpty()) return meta; if (!value.isEmpty()) {
meta.setValue(ChatRewriter.jsonToLegacyText(value)); meta.setValue(ChatRewriter.jsonToLegacyText(value));
return meta; }
}); });
// Handle zombie metadata // Handle zombie metadata
registerMetaHandler().filter(Entity1_13Types.EntityType.ZOMBIE, true, 15).removed(); filter().filterFamily(Entity1_13Types.EntityType.ZOMBIE).removeIndex(15);
registerMetaHandler().filter(Entity1_13Types.EntityType.ZOMBIE, true).handle(e -> {
Metadata meta = e.getData();
if (meta.getId() > 15) {
meta.setId(meta.getId() - 1);
}
return meta;
});
// Handle turtle metadata (Remove them all for now) // Handle turtle metadata (Remove them all for now)
registerMetaHandler().filter(Entity1_13Types.EntityType.TURTLE, 13).removed(); // Home pos filter().type(Entity1_13Types.EntityType.TURTLE).cancel(13); // Home pos
registerMetaHandler().filter(Entity1_13Types.EntityType.TURTLE, 14).removed(); // Has egg filter().type(Entity1_13Types.EntityType.TURTLE).cancel(14); // Has egg
registerMetaHandler().filter(Entity1_13Types.EntityType.TURTLE, 15).removed(); // Laying egg filter().type(Entity1_13Types.EntityType.TURTLE).cancel(15); // Laying egg
registerMetaHandler().filter(Entity1_13Types.EntityType.TURTLE, 16).removed(); // Travel pos filter().type(Entity1_13Types.EntityType.TURTLE).cancel(16); // Travel pos
registerMetaHandler().filter(Entity1_13Types.EntityType.TURTLE, 17).removed(); // Going home filter().type(Entity1_13Types.EntityType.TURTLE).cancel(17); // Going home
registerMetaHandler().filter(Entity1_13Types.EntityType.TURTLE, 18).removed(); // Traveling filter().type(Entity1_13Types.EntityType.TURTLE).cancel(18); // Traveling
// Remove additional fish meta // Remove additional fish meta
registerMetaHandler().filter(Entity1_13Types.EntityType.ABSTRACT_FISHES, true, 12).removed(); filter().filterFamily(Entity1_13Types.EntityType.ABSTRACT_FISHES).cancel(12);
registerMetaHandler().filter(Entity1_13Types.EntityType.ABSTRACT_FISHES, true, 13).removed(); filter().filterFamily(Entity1_13Types.EntityType.ABSTRACT_FISHES).cancel(13);
// Remove phantom size // Remove phantom size
registerMetaHandler().filter(Entity1_13Types.EntityType.PHANTOM, 12).removed(); filter().type(Entity1_13Types.EntityType.PHANTOM).cancel(12);
// Remove boat splash timer // Remove boat splash timer
registerMetaHandler().filter(Entity1_13Types.EntityType.BOAT, 12).removed(); filter().type(Entity1_13Types.EntityType.BOAT).cancel(12);
// Remove Trident special loyalty level // Remove Trident special loyalty level
registerMetaHandler().filter(Entity1_13Types.EntityType.TRIDENT, 7).removed(); filter().type(Entity1_13Types.EntityType.TRIDENT).cancel(7);
// Handle new wolf colors // Handle new wolf colors
registerMetaHandler().filter(Entity1_13Types.EntityType.WOLF, 17).handle(e -> { filter().type(Entity1_13Types.EntityType.WOLF).index(17).handler((event, meta) -> {
Metadata meta = e.getData();
meta.setValue(15 - (int) meta.getValue()); meta.setValue(15 - (int) meta.getValue());
return meta;
}); });
// Rewrite AreaEffectCloud // Rewrite AreaEffectCloud
registerMetaHandler().filter(Entity1_13Types.EntityType.AREA_EFFECT_CLOUD, 9).handle(e -> { filter().type(Entity1_13Types.EntityType.AREA_EFFECT_CLOUD).index(9).handler((event, meta) -> {
Metadata meta = e.getData();
Particle particle = (Particle) meta.getValue(); Particle particle = (Particle) meta.getValue();
ParticleMapping.ParticleData data = ParticleMapping.getMapping(particle.getId()); ParticleMapping.ParticleData data = ParticleMapping.getMapping(particle.getId());
@ -408,16 +392,16 @@ public class EntityPackets1_13 extends LegacyEntityRewriter<Protocol1_12_2To1_13
secondArg = particleArgs.length == 2 ? particleArgs[1] : 0; secondArg = particleArgs.length == 2 ? particleArgs[1] : 0;
} }
e.createMeta(new Metadata(9, MetaType1_12.VarInt, data.getHistoryId())); event.createExtraMeta(new Metadata(9, MetaType1_12.VarInt, data.getHistoryId()));
e.createMeta(new Metadata(10, MetaType1_12.VarInt, firstArg)); event.createExtraMeta(new Metadata(10, MetaType1_12.VarInt, firstArg));
e.createMeta(new Metadata(11, MetaType1_12.VarInt, secondArg)); event.createExtraMeta(new Metadata(11, MetaType1_12.VarInt, secondArg));
throw RemovedValueException.EX; event.cancel();
}); });
} }
@Override @Override
protected EntityType getTypeFromId(int typeId) { public EntityType typeFromId(int typeId) {
return Entity1_13Types.getTypeFromId(typeId, false); return Entity1_13Types.getTypeFromId(typeId, false);
} }
@ -427,7 +411,7 @@ public class EntityPackets1_13 extends LegacyEntityRewriter<Protocol1_12_2To1_13
} }
@Override @Override
public int getOldEntityId(final int newId) { public int newEntityId(final int newId) {
return EntityTypeMapping.getOldId(newId); return EntityTypeMapping.getOldId(newId);
} }
} }

Datei anzeigen

@ -19,7 +19,6 @@ package com.viaversion.viabackwards.protocol.protocol1_12_2to1_13.packets;
import com.google.common.base.Joiner; import com.google.common.base.Joiner;
import com.viaversion.viabackwards.ViaBackwards; import com.viaversion.viabackwards.ViaBackwards;
import com.viaversion.viabackwards.api.rewriters.Rewriter;
import com.viaversion.viabackwards.protocol.protocol1_12_2to1_13.Protocol1_12_2To1_13; import com.viaversion.viabackwards.protocol.protocol1_12_2to1_13.Protocol1_12_2To1_13;
import com.viaversion.viabackwards.protocol.protocol1_12_2to1_13.data.ParticleMapping; import com.viaversion.viabackwards.protocol.protocol1_12_2to1_13.data.ParticleMapping;
import com.viaversion.viabackwards.protocol.protocol1_12_2to1_13.storage.TabCompleteStorage; import com.viaversion.viabackwards.protocol.protocol1_12_2to1_13.storage.TabCompleteStorage;
@ -40,6 +39,7 @@ import com.viaversion.viaversion.protocols.protocol1_13to1_12_2.ChatRewriter;
import com.viaversion.viaversion.protocols.protocol1_13to1_12_2.ClientboundPackets1_13; import com.viaversion.viaversion.protocols.protocol1_13to1_12_2.ClientboundPackets1_13;
import com.viaversion.viaversion.protocols.protocol1_13to1_12_2.packets.InventoryPackets; import com.viaversion.viaversion.protocols.protocol1_13to1_12_2.packets.InventoryPackets;
import com.viaversion.viaversion.rewriter.CommandRewriter; import com.viaversion.viaversion.rewriter.CommandRewriter;
import com.viaversion.viaversion.rewriter.RewriterBase;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.util.ArrayList; import java.util.ArrayList;
@ -47,7 +47,7 @@ import java.util.List;
import java.util.UUID; import java.util.UUID;
import java.util.concurrent.ThreadLocalRandom; import java.util.concurrent.ThreadLocalRandom;
public class PlayerPacket1_13 extends Rewriter<Protocol1_12_2To1_13> { public class PlayerPacket1_13 extends RewriterBase<Protocol1_12_2To1_13> {
private final CommandRewriter commandRewriter = new CommandRewriter(protocol) { private final CommandRewriter commandRewriter = new CommandRewriter(protocol) {
}; };
@ -93,16 +93,16 @@ public class PlayerPacket1_13 extends Rewriter<Protocol1_12_2To1_13> {
for (int i = 0; i < size; i++) { for (int i = 0; i < size; i++) {
//Input Item //Input Item
Item input = wrapper.read(Type.FLAT_ITEM); Item input = wrapper.read(Type.FLAT_ITEM);
wrapper.write(Type.ITEM, getProtocol().getBlockItemPackets().handleItemToClient(input)); wrapper.write(Type.ITEM, protocol.getBlockItemPackets().handleItemToClient(input));
//Output Item //Output Item
Item output = wrapper.read(Type.FLAT_ITEM); Item output = wrapper.read(Type.FLAT_ITEM);
wrapper.write(Type.ITEM, getProtocol().getBlockItemPackets().handleItemToClient(output)); wrapper.write(Type.ITEM, protocol.getBlockItemPackets().handleItemToClient(output));
boolean secondItem = wrapper.passthrough(Type.BOOLEAN); //Has second item boolean secondItem = wrapper.passthrough(Type.BOOLEAN); //Has second item
if (secondItem) { if (secondItem) {
//Second Item //Second Item
Item second = wrapper.read(Type.FLAT_ITEM); Item second = wrapper.read(Type.FLAT_ITEM);
wrapper.write(Type.ITEM, getProtocol().getBlockItemPackets().handleItemToClient(second)); wrapper.write(Type.ITEM, protocol.getBlockItemPackets().handleItemToClient(second));
} }
wrapper.passthrough(Type.BOOLEAN); //Trade disabled wrapper.passthrough(Type.BOOLEAN); //Trade disabled
@ -448,7 +448,7 @@ public class PlayerPacket1_13 extends Rewriter<Protocol1_12_2To1_13> {
case "MC|BEdit": case "MC|BEdit":
wrapper.setId(0x0B); wrapper.setId(0x0B);
Item book = wrapper.read(Type.ITEM); Item book = wrapper.read(Type.ITEM);
wrapper.write(Type.FLAT_ITEM, getProtocol().getBlockItemPackets().handleItemToServer(book)); wrapper.write(Type.FLAT_ITEM, protocol.getBlockItemPackets().handleItemToServer(book));
boolean signing = channel.equals("MC|BSign"); boolean signing = channel.equals("MC|BSign");
wrapper.write(Type.BOOLEAN, signing); wrapper.write(Type.BOOLEAN, signing);
break; break;

Datei anzeigen

@ -18,7 +18,6 @@
package com.viaversion.viabackwards.protocol.protocol1_12_2to1_13.packets; package com.viaversion.viabackwards.protocol.protocol1_12_2to1_13.packets;
import com.viaversion.viabackwards.ViaBackwards; import com.viaversion.viabackwards.ViaBackwards;
import com.viaversion.viabackwards.api.rewriters.Rewriter;
import com.viaversion.viabackwards.protocol.protocol1_12_2to1_13.Protocol1_12_2To1_13; import com.viaversion.viabackwards.protocol.protocol1_12_2to1_13.Protocol1_12_2To1_13;
import com.viaversion.viabackwards.protocol.protocol1_12_2to1_13.data.NamedSoundMapping; import com.viaversion.viabackwards.protocol.protocol1_12_2to1_13.data.NamedSoundMapping;
import com.viaversion.viaversion.api.Via; import com.viaversion.viaversion.api.Via;
@ -26,8 +25,9 @@ import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper;
import com.viaversion.viaversion.api.type.Type; import com.viaversion.viaversion.api.type.Type;
import com.viaversion.viaversion.protocols.protocol1_12_1to1_12.ClientboundPackets1_12_1; import com.viaversion.viaversion.protocols.protocol1_12_1to1_12.ClientboundPackets1_12_1;
import com.viaversion.viaversion.protocols.protocol1_13to1_12_2.ClientboundPackets1_13; import com.viaversion.viaversion.protocols.protocol1_13to1_12_2.ClientboundPackets1_13;
import com.viaversion.viaversion.rewriter.RewriterBase;
public class SoundPackets1_13 extends Rewriter<Protocol1_12_2To1_13> { public class SoundPackets1_13 extends RewriterBase<Protocol1_12_2To1_13> {
private static final String[] SOUND_SOURCES = {"master", "music", "record", "weather", "block", "hostile", "neutral", "player", "ambient", "voice"}; private static final String[] SOUND_SOURCES = {"master", "music", "record", "weather", "block", "hostile", "neutral", "player", "ambient", "voice"};
public SoundPackets1_13(Protocol1_12_2To1_13 protocol) { public SoundPackets1_13(Protocol1_12_2To1_13 protocol) {

Datei anzeigen

@ -54,7 +54,7 @@ public class EntityPackets1_13_2 {
@Override @Override
public void handle(PacketWrapper wrapper) throws Exception { public void handle(PacketWrapper wrapper) throws Exception {
for (Metadata metadata : wrapper.get(Types1_13.METADATA_LIST, 0)) { for (Metadata metadata : wrapper.get(Types1_13.METADATA_LIST, 0)) {
if (metadata.getMetaType() == MetaType1_13_2.Slot) { if (metadata.metaType() == MetaType1_13_2.Slot) {
metadata.setMetaType(MetaType1_13.Slot); metadata.setMetaType(MetaType1_13.Slot);
} }
} }
@ -79,7 +79,7 @@ public class EntityPackets1_13_2 {
@Override @Override
public void handle(PacketWrapper wrapper) throws Exception { public void handle(PacketWrapper wrapper) throws Exception {
for (Metadata metadata : wrapper.get(Types1_13.METADATA_LIST, 0)) { for (Metadata metadata : wrapper.get(Types1_13.METADATA_LIST, 0)) {
if (metadata.getMetaType() == MetaType1_13_2.Slot) { if (metadata.metaType() == MetaType1_13_2.Slot) {
metadata.setMetaType(MetaType1_13.Slot); metadata.setMetaType(MetaType1_13.Slot);
} }
} }
@ -98,7 +98,7 @@ public class EntityPackets1_13_2 {
@Override @Override
public void handle(PacketWrapper wrapper) throws Exception { public void handle(PacketWrapper wrapper) throws Exception {
for (Metadata metadata : wrapper.get(Types1_13.METADATA_LIST, 0)) { for (Metadata metadata : wrapper.get(Types1_13.METADATA_LIST, 0)) {
if (metadata.getMetaType() == MetaType1_13_2.Slot) { if (metadata.metaType() == MetaType1_13_2.Slot) {
metadata.setMetaType(MetaType1_13.Slot); metadata.setMetaType(MetaType1_13.Slot);
} }
} }

Datei anzeigen

@ -27,10 +27,12 @@ import com.viaversion.viabackwards.protocol.protocol1_13_2to1_14.packets.PlayerP
import com.viaversion.viabackwards.protocol.protocol1_13_2to1_14.packets.SoundPackets1_14; import com.viaversion.viabackwards.protocol.protocol1_13_2to1_14.packets.SoundPackets1_14;
import com.viaversion.viabackwards.protocol.protocol1_13_2to1_14.storage.ChunkLightStorage; import com.viaversion.viabackwards.protocol.protocol1_13_2to1_14.storage.ChunkLightStorage;
import com.viaversion.viaversion.api.connection.UserConnection; import com.viaversion.viaversion.api.connection.UserConnection;
import com.viaversion.viaversion.api.minecraft.entities.Entity1_14Types;
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper; import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
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.protocol.remapper.PacketRemapper;
import com.viaversion.viaversion.api.type.Type; import com.viaversion.viaversion.api.type.Type;
import com.viaversion.viaversion.data.entity.EntityTrackerBase;
import com.viaversion.viaversion.protocols.protocol1_13to1_12_2.ClientboundPackets1_13; import com.viaversion.viaversion.protocols.protocol1_13to1_12_2.ClientboundPackets1_13;
import com.viaversion.viaversion.protocols.protocol1_13to1_12_2.ServerboundPackets1_13; import com.viaversion.viaversion.protocols.protocol1_13to1_12_2.ServerboundPackets1_13;
import com.viaversion.viaversion.protocols.protocol1_14to1_13_2.ClientboundPackets1_14; import com.viaversion.viaversion.protocols.protocol1_14to1_13_2.ClientboundPackets1_14;
@ -71,7 +73,7 @@ public class Protocol1_13_2To1_14 extends BackwardsProtocol<ClientboundPackets1_
new PlayerPackets1_14(this).register(); new PlayerPackets1_14(this).register();
new SoundPackets1_14(this).register(); new SoundPackets1_14(this).register();
new StatisticsRewriter(this, entityPackets::getOldEntityId).register(ClientboundPackets1_14.STATISTICS); new StatisticsRewriter(this, entityPackets::newEntityId).register(ClientboundPackets1_14.STATISTICS);
cancelClientbound(ClientboundPackets1_14.UPDATE_VIEW_POSITION); cancelClientbound(ClientboundPackets1_14.UPDATE_VIEW_POSITION);
cancelClientbound(ClientboundPackets1_14.UPDATE_VIEW_DISTANCE); cancelClientbound(ClientboundPackets1_14.UPDATE_VIEW_DISTANCE);
@ -187,7 +189,7 @@ public class Protocol1_13_2To1_14 extends BackwardsProtocol<ClientboundPackets1_
user.put(new ClientWorld(user)); user.put(new ClientWorld(user));
} }
initEntityTracker(user); user.addEntityTracker(this.getClass(), new EntityTrackerBase(user, Entity1_14Types.PLAYER, true));
if (!user.has(ChunkLightStorage.class)) { if (!user.has(ChunkLightStorage.class)) {
user.put(new ChunkLightStorage(user)); user.put(new ChunkLightStorage(user));

Datei anzeigen

@ -19,7 +19,6 @@ package com.viaversion.viabackwards.protocol.protocol1_13_2to1_14.packets;
import com.google.common.collect.ImmutableSet; import com.google.common.collect.ImmutableSet;
import com.viaversion.viabackwards.ViaBackwards; import com.viaversion.viabackwards.ViaBackwards;
import com.viaversion.viabackwards.api.entities.storage.EntityTracker;
import com.viaversion.viabackwards.api.rewriters.EnchantmentRewriter; import com.viaversion.viabackwards.api.rewriters.EnchantmentRewriter;
import com.viaversion.viabackwards.api.rewriters.TranslatableRewriter; import com.viaversion.viabackwards.api.rewriters.TranslatableRewriter;
import com.viaversion.viabackwards.protocol.protocol1_13_2to1_14.Protocol1_13_2To1_14; import com.viaversion.viabackwards.protocol.protocol1_13_2to1_14.Protocol1_13_2To1_14;
@ -276,7 +275,7 @@ public class BlockItemPackets1_14 extends com.viaversion.viabackwards.api.rewrit
@Override @Override
public void handle(PacketWrapper wrapper) throws Exception { public void handle(PacketWrapper wrapper) throws Exception {
int entityId = wrapper.get(Type.VAR_INT, 0); int entityId = wrapper.get(Type.VAR_INT, 0);
EntityType entityType = wrapper.user().get(EntityTracker.class).get(getProtocol()).getEntityType(entityId); EntityType entityType = wrapper.user().getEntityTracker(Protocol1_13_2To1_14.class).entityType(entityId);
if (entityType == null) return; if (entityType == null) return;
if (entityType.isOrHasParent(Entity1_14Types.ABSTRACT_HORSE)) { if (entityType.isOrHasParent(Entity1_14Types.ABSTRACT_HORSE)) {

Datei anzeigen

@ -18,15 +18,13 @@
package com.viaversion.viabackwards.protocol.protocol1_13_2to1_14.packets; package com.viaversion.viabackwards.protocol.protocol1_13_2to1_14.packets;
import com.viaversion.viabackwards.ViaBackwards; import com.viaversion.viabackwards.ViaBackwards;
import com.viaversion.viabackwards.api.entities.meta.MetaHandler;
import com.viaversion.viabackwards.api.entities.storage.EntityData; import com.viaversion.viabackwards.api.entities.storage.EntityData;
import com.viaversion.viabackwards.api.entities.storage.EntityPositionHandler; import com.viaversion.viabackwards.api.entities.storage.EntityPositionHandler;
import com.viaversion.viabackwards.api.entities.storage.EntityTracker;
import com.viaversion.viabackwards.api.exceptions.RemovedValueException;
import com.viaversion.viabackwards.api.rewriters.LegacyEntityRewriter; import com.viaversion.viabackwards.api.rewriters.LegacyEntityRewriter;
import com.viaversion.viabackwards.protocol.protocol1_13_2to1_14.Protocol1_13_2To1_14; import com.viaversion.viabackwards.protocol.protocol1_13_2to1_14.Protocol1_13_2To1_14;
import com.viaversion.viabackwards.protocol.protocol1_13_2to1_14.storage.ChunkLightStorage; import com.viaversion.viabackwards.protocol.protocol1_13_2to1_14.storage.ChunkLightStorage;
import com.viaversion.viabackwards.protocol.protocol1_13_2to1_14.storage.EntityPositionStorage1_14; import com.viaversion.viabackwards.protocol.protocol1_13_2to1_14.storage.EntityPositionStorage1_14;
import com.viaversion.viaversion.api.data.entity.EntityTracker;
import com.viaversion.viaversion.api.minecraft.Position; import com.viaversion.viaversion.api.minecraft.Position;
import com.viaversion.viaversion.api.minecraft.VillagerData; import com.viaversion.viaversion.api.minecraft.VillagerData;
import com.viaversion.viaversion.api.minecraft.entities.Entity1_13Types; import com.viaversion.viaversion.api.minecraft.entities.Entity1_13Types;
@ -43,8 +41,10 @@ import com.viaversion.viaversion.api.type.Type;
import com.viaversion.viaversion.api.type.types.Particle; import com.viaversion.viaversion.api.type.types.Particle;
import com.viaversion.viaversion.api.type.types.version.Types1_13_2; import com.viaversion.viaversion.api.type.types.version.Types1_13_2;
import com.viaversion.viaversion.api.type.types.version.Types1_14; import com.viaversion.viaversion.api.type.types.version.Types1_14;
import com.viaversion.viaversion.protocols.protocol1_13to1_12_2.ClientboundPackets1_13;
import com.viaversion.viaversion.protocols.protocol1_14to1_13_2.ClientboundPackets1_14; import com.viaversion.viaversion.protocols.protocol1_14to1_13_2.ClientboundPackets1_14;
import com.viaversion.viaversion.protocols.protocol1_9_3to1_9_1_2.storage.ClientWorld; import com.viaversion.viaversion.protocols.protocol1_9_3to1_9_1_2.storage.ClientWorld;
import com.viaversion.viaversion.rewriter.meta.MetaHandler;
public class EntityPackets1_14 extends LegacyEntityRewriter<Protocol1_13_2To1_14> { public class EntityPackets1_14 extends LegacyEntityRewriter<Protocol1_13_2To1_14> {
@ -54,6 +54,7 @@ public class EntityPackets1_14 extends LegacyEntityRewriter<Protocol1_13_2To1_14
super(protocol, MetaType1_13_2.OptChat, MetaType1_13_2.Boolean); super(protocol, MetaType1_13_2.OptChat, MetaType1_13_2.Boolean);
} }
//TODO work the method into this class alone
@Override @Override
protected void addTrackedEntity(PacketWrapper wrapper, int entityId, EntityType type) throws Exception { protected void addTrackedEntity(PacketWrapper wrapper, int entityId, EntityType type) throws Exception {
super.addTrackedEntity(wrapper, entityId, type); super.addTrackedEntity(wrapper, entityId, type);
@ -62,7 +63,7 @@ public class EntityPackets1_14 extends LegacyEntityRewriter<Protocol1_13_2To1_14
if (type == Entity1_14Types.PAINTING) { if (type == Entity1_14Types.PAINTING) {
final Position position = wrapper.get(Type.POSITION, 0); final Position position = wrapper.get(Type.POSITION, 0);
positionHandler.cacheEntityPosition(wrapper, position.getX(), position.getY(), position.getZ(), true, false); positionHandler.cacheEntityPosition(wrapper, position.getX(), position.getY(), position.getZ(), true, false);
} else if (wrapper.getId() != 0x25) { // ignore join game } else if (wrapper.getId() != ClientboundPackets1_14.JOIN_GAME.getId()) { // ignore join game
positionHandler.cacheEntityPosition(wrapper, true, false); positionHandler.cacheEntityPosition(wrapper, true, false);
} }
} }
@ -80,8 +81,8 @@ public class EntityPackets1_14 extends LegacyEntityRewriter<Protocol1_13_2To1_14
// Check for death status // Check for death status
if (status != 3) return; if (status != 3) return;
EntityTracker.ProtocolEntityTracker tracker = getEntityTracker(wrapper.user()); EntityTracker tracker = tracker(wrapper.user());
EntityType entityType = tracker.getEntityType(entityId); EntityType entityType = tracker.entityType(entityId);
if (entityType != Entity1_14Types.PLAYER) return; if (entityType != Entity1_14Types.PLAYER) return;
// Remove equipment, else the client will see ghost items // Remove equipment, else the client will see ghost items
@ -150,7 +151,7 @@ public class EntityPackets1_14 extends LegacyEntityRewriter<Protocol1_13_2To1_14
@Override @Override
public void handle(PacketWrapper wrapper) throws Exception { public void handle(PacketWrapper wrapper) throws Exception {
int id = wrapper.get(Type.BYTE, 0); int id = wrapper.get(Type.BYTE, 0);
int mappedId = getOldEntityId(id); int mappedId = newEntityId(id);
Entity1_13Types.EntityType entityType = Entity1_13Types.getTypeFromId(mappedId, false); Entity1_13Types.EntityType entityType = Entity1_13Types.getTypeFromId(mappedId, false);
Entity1_13Types.ObjectType objectType; Entity1_13Types.ObjectType objectType;
if (entityType.isOrHasParent(Entity1_13Types.EntityType.MINECART_ABSTRACT)) { if (entityType.isOrHasParent(Entity1_13Types.EntityType.MINECART_ABSTRACT)) {
@ -223,14 +224,14 @@ public class EntityPackets1_14 extends LegacyEntityRewriter<Protocol1_13_2To1_14
EntityType entityType = Entity1_14Types.getTypeFromId(type); EntityType entityType = Entity1_14Types.getTypeFromId(type);
addTrackedEntity(wrapper, wrapper.get(Type.VAR_INT, 0), entityType); addTrackedEntity(wrapper, wrapper.get(Type.VAR_INT, 0), entityType);
int oldId = typeMapping.get(type); int oldId = newEntityId(type);
if (oldId == -1) { if (oldId == -1) {
EntityData entityData = getEntityData(entityType); EntityData entityData = entityDataForType(entityType);
if (entityData == null) { if (entityData == null) {
ViaBackwards.getPlatform().getLogger().warning("Could not find 1.13.2 entity type for 1.14 entity type " + type + "/" + entityType); ViaBackwards.getPlatform().getLogger().warning("Could not find 1.13.2 entity type for 1.14 entity type " + type + "/" + entityType);
wrapper.cancel(); wrapper.cancel();
} else { } else {
wrapper.set(Type.VAR_INT, 1, entityData.getReplacementId()); wrapper.set(Type.VAR_INT, 1, entityData.replacementId());
} }
} else { } else {
wrapper.set(Type.VAR_INT, 1, oldId); wrapper.set(Type.VAR_INT, 1, oldId);
@ -243,7 +244,7 @@ public class EntityPackets1_14 extends LegacyEntityRewriter<Protocol1_13_2To1_14
} }
}); });
getProtocol().registerClientbound(ClientboundPackets1_14.SPAWN_EXPERIENCE_ORB, new PacketRemapper() { protocol.registerClientbound(ClientboundPackets1_14.SPAWN_EXPERIENCE_ORB, new PacketRemapper() {
@Override @Override
public void registerMap() { public void registerMap() {
map(Type.VAR_INT); // 0 - Entity id map(Type.VAR_INT); // 0 - Entity id
@ -254,7 +255,7 @@ public class EntityPackets1_14 extends LegacyEntityRewriter<Protocol1_13_2To1_14
} }
}); });
getProtocol().registerClientbound(ClientboundPackets1_14.SPAWN_GLOBAL_ENTITY, new PacketRemapper() { protocol.registerClientbound(ClientboundPackets1_14.SPAWN_GLOBAL_ENTITY, new PacketRemapper() {
@Override @Override
public void registerMap() { public void registerMap() {
map(Type.VAR_INT); // 0 - Entity id map(Type.VAR_INT); // 0 - Entity id
@ -297,7 +298,7 @@ public class EntityPackets1_14 extends LegacyEntityRewriter<Protocol1_13_2To1_14
} }
}); });
registerEntityDestroy(ClientboundPackets1_14.DESTROY_ENTITIES); registerRemoveEntities(ClientboundPackets1_14.DESTROY_ENTITIES);
registerMetadataRewriter(ClientboundPackets1_14.ENTITY_METADATA, Types1_14.METADATA_LIST, Types1_13_2.METADATA_LIST); registerMetadataRewriter(ClientboundPackets1_14.ENTITY_METADATA, Types1_14.METADATA_LIST, Types1_13_2.METADATA_LIST);
protocol.registerClientbound(ClientboundPackets1_14.JOIN_GAME, new PacketRemapper() { protocol.registerClientbound(ClientboundPackets1_14.JOIN_GAME, new PacketRemapper() {
@ -346,142 +347,113 @@ public class EntityPackets1_14 extends LegacyEntityRewriter<Protocol1_13_2To1_14
protected void registerRewrites() { protected void registerRewrites() {
mapTypes(Entity1_14Types.values(), Entity1_13Types.EntityType.class); mapTypes(Entity1_14Types.values(), Entity1_13Types.EntityType.class);
mapEntity(Entity1_14Types.CAT, Entity1_14Types.OCELOT).jsonName("Cat"); mapEntityTypeWithData(Entity1_14Types.CAT, Entity1_14Types.OCELOT).jsonName("Cat");
mapEntity(Entity1_14Types.TRADER_LLAMA, Entity1_14Types.LLAMA).jsonName("Trader Llama"); mapEntityTypeWithData(Entity1_14Types.TRADER_LLAMA, Entity1_14Types.LLAMA).jsonName("Trader Llama");
mapEntity(Entity1_14Types.FOX, Entity1_14Types.WOLF).jsonName("Fox"); mapEntityTypeWithData(Entity1_14Types.FOX, Entity1_14Types.WOLF).jsonName("Fox");
mapEntity(Entity1_14Types.PANDA, Entity1_14Types.POLAR_BEAR).jsonName("Panda"); mapEntityTypeWithData(Entity1_14Types.PANDA, Entity1_14Types.POLAR_BEAR).jsonName("Panda");
mapEntity(Entity1_14Types.PILLAGER, Entity1_14Types.VILLAGER).jsonName("Pillager"); mapEntityTypeWithData(Entity1_14Types.PILLAGER, Entity1_14Types.VILLAGER).jsonName("Pillager");
mapEntity(Entity1_14Types.WANDERING_TRADER, Entity1_14Types.VILLAGER).jsonName("Wandering Trader"); mapEntityTypeWithData(Entity1_14Types.WANDERING_TRADER, Entity1_14Types.VILLAGER).jsonName("Wandering Trader");
mapEntity(Entity1_14Types.RAVAGER, Entity1_14Types.COW).jsonName("Ravager"); mapEntityTypeWithData(Entity1_14Types.RAVAGER, Entity1_14Types.COW).jsonName("Ravager");
registerMetaHandler().handle(e -> { filter().handler((event, meta) -> {
Metadata meta = e.getData(); int typeId = meta.metaType().typeId();
int typeId = meta.getMetaType().getTypeID();
if (typeId <= 15) { if (typeId <= 15) {
meta.setMetaType(MetaType1_13_2.byId(typeId)); meta.setMetaType(MetaType1_13_2.byId(typeId));
} }
MetaType type = meta.getMetaType(); MetaType type = meta.metaType();
if (type == MetaType1_13_2.Slot) { if (type == MetaType1_13_2.Slot) {
Item item = (Item) meta.getValue(); Item item = (Item) meta.getValue();
meta.setValue(getProtocol().getBlockItemPackets().handleItemToClient(item)); meta.setValue(protocol.getBlockItemPackets().handleItemToClient(item));
} else if (type == MetaType1_13_2.BlockID) { } else if (type == MetaType1_13_2.BlockID) {
int blockstate = (Integer) meta.getValue(); int blockstate = (Integer) meta.getValue();
meta.setValue(protocol.getMappingData().getNewBlockStateId(blockstate)); meta.setValue(protocol.getMappingData().getNewBlockStateId(blockstate));
} }
return meta;
}); });
registerMetaHandler().filter(Entity1_14Types.PILLAGER, 15).removed(); filter().type(Entity1_14Types.PILLAGER).cancel(15);
registerMetaHandler().filter(Entity1_14Types.FOX, 15).removed(); filter().type(Entity1_14Types.FOX).cancel(15);
registerMetaHandler().filter(Entity1_14Types.FOX, 16).removed(); filter().type(Entity1_14Types.FOX).cancel(16);
registerMetaHandler().filter(Entity1_14Types.FOX, 17).removed(); filter().type(Entity1_14Types.FOX).cancel(17);
registerMetaHandler().filter(Entity1_14Types.FOX, 18).removed(); filter().type(Entity1_14Types.FOX).cancel(18);
registerMetaHandler().filter(Entity1_14Types.PANDA, 15).removed(); filter().type(Entity1_14Types.PANDA).cancel(15);
registerMetaHandler().filter(Entity1_14Types.PANDA, 16).removed(); filter().type(Entity1_14Types.PANDA).cancel(16);
registerMetaHandler().filter(Entity1_14Types.PANDA, 17).removed(); filter().type(Entity1_14Types.PANDA).cancel(17);
registerMetaHandler().filter(Entity1_14Types.PANDA, 18).removed(); filter().type(Entity1_14Types.PANDA).cancel(18);
registerMetaHandler().filter(Entity1_14Types.PANDA, 19).removed(); filter().type(Entity1_14Types.PANDA).cancel(19);
registerMetaHandler().filter(Entity1_14Types.PANDA, 20).removed(); filter().type(Entity1_14Types.PANDA).cancel(20);
registerMetaHandler().filter(Entity1_14Types.CAT, 18).removed(); filter().type(Entity1_14Types.CAT).cancel(18);
registerMetaHandler().filter(Entity1_14Types.CAT, 19).removed(); filter().type(Entity1_14Types.CAT).cancel(19);
registerMetaHandler().filter(Entity1_14Types.CAT, 20).removed(); filter().type(Entity1_14Types.CAT).cancel(20);
registerMetaHandler().handle(e -> { filter().handler((event, meta) -> {
EntityType type = e.getEntity().getType(); EntityType type = event.entityType();
Metadata meta = e.getData();
if (type.isOrHasParent(Entity1_14Types.ABSTRACT_ILLAGER_BASE) || type == Entity1_14Types.RAVAGER || type == Entity1_14Types.WITCH) { if (type.isOrHasParent(Entity1_14Types.ABSTRACT_ILLAGER_BASE) || type == Entity1_14Types.RAVAGER || type == Entity1_14Types.WITCH) {
int index = e.getIndex(); int index = event.index();
if (index == 14) { if (index == 14) {
throw RemovedValueException.EX; event.cancel();
} else if (index > 14) { } else if (index > 14) {
meta.setId(index - 1); event.setIndex(index - 1);
} }
} }
return meta;
}); });
registerMetaHandler().filter(Entity1_14Types.AREA_EFFECT_CLOUD, 10).handle(e -> { filter().type(Entity1_14Types.AREA_EFFECT_CLOUD).index(10).handler((event, meta) -> {
Metadata meta = e.getData();
rewriteParticle((Particle) meta.getValue()); rewriteParticle((Particle) meta.getValue());
return meta;
}); });
registerMetaHandler().filter(Entity1_14Types.FIREWORK_ROCKET, 8).handle(e -> { filter().type(Entity1_14Types.FIREWORK_ROCKET).index(8).handler((event, meta) -> {
Metadata meta = e.getData();
meta.setMetaType(MetaType1_13_2.VarInt); meta.setMetaType(MetaType1_13_2.VarInt);
Integer value = (Integer) meta.getValue(); Integer value = (Integer) meta.getValue();
if (value == null) meta.setValue(0); if (value == null) meta.setValue(0);
return meta;
}); });
registerMetaHandler().filter(Entity1_14Types.ABSTRACT_ARROW, true).handle(e -> { filter().filterFamily(Entity1_14Types.ABSTRACT_ARROW).removeIndex(9);
Metadata meta = e.getData();
int index = e.getIndex();
if (index == 9) {
throw RemovedValueException.EX;
} else if (index > 9) {
meta.setId(index - 1);
}
return meta;
});
registerMetaHandler().filter(Entity1_14Types.VILLAGER, 15).removed(); // Head shake timer filter().type(Entity1_14Types.VILLAGER).cancel(15); // Head shake timer
MetaHandler villagerDataHandler = e -> { MetaHandler villagerDataHandler = (event, meta) -> {
Metadata meta = e.getData();
VillagerData villagerData = (VillagerData) meta.getValue(); VillagerData villagerData = (VillagerData) meta.getValue();
meta.setValue(villagerDataToProfession(villagerData)); meta.setValue(villagerDataToProfession(villagerData));
meta.setMetaType(MetaType1_13_2.VarInt); meta.setMetaType(MetaType1_13_2.VarInt);
if (meta.getId() == 16) { if (meta.id() == 16) {
meta.setId(15); // decreased by 2 again in one of the following handlers event.setIndex(15); // decreased by 2 again in one of the following handlers
} }
return meta;
}; };
registerMetaHandler().filter(Entity1_14Types.ZOMBIE_VILLAGER, 18).handle(villagerDataHandler); filter().type(Entity1_14Types.ZOMBIE_VILLAGER).index(18).handler(villagerDataHandler);
registerMetaHandler().filter(Entity1_14Types.VILLAGER, 16).handle(villagerDataHandler); filter().type(Entity1_14Types.VILLAGER).index(16).handler(villagerDataHandler);
// Holding arms up - from bitfield into own boolean // Holding arms up - from bitfield into own boolean
registerMetaHandler().filter(Entity1_14Types.ABSTRACT_SKELETON, true, 13).handle(e -> { filter().filterFamily(Entity1_14Types.ABSTRACT_SKELETON).index(13).handler((event, meta) -> {
byte value = (byte) e.getData().getValue(); byte value = (byte) meta.getValue();
if ((value & 4) != 0) { if ((value & 4) != 0) {
e.createMeta(new Metadata(14, MetaType1_13_2.Boolean, true)); event.createExtraMeta(new Metadata(14, MetaType1_13_2.Boolean, true));
} }
return e.getData();
}); });
registerMetaHandler().filter(Entity1_14Types.ZOMBIE, true, 13).handle(e -> { filter().filterFamily(Entity1_14Types.ZOMBIE).index(13).handler((event, meta) -> {
byte value = (byte) e.getData().getValue(); byte value = (byte) meta.getValue();
if ((value & 4) != 0) { if ((value & 4) != 0) {
e.createMeta(new Metadata(16, MetaType1_13_2.Boolean, true)); event.createExtraMeta(new Metadata(16, MetaType1_13_2.Boolean, true));
} }
return e.getData();
}); });
registerMetaHandler().filter(Entity1_14Types.ZOMBIE, true).handle(e -> { filter().filterFamily(Entity1_14Types.ZOMBIE).addIndex(16);
Metadata meta = e.getData();
int index = e.getIndex();
if (index >= 16) {
meta.setId(index + 1);
}
return meta;
});
// Remove bed location // Remove bed location
registerMetaHandler().filter(Entity1_14Types.LIVINGENTITY, true).handle(e -> { filter().filterFamily(Entity1_14Types.LIVINGENTITY).handler((event, meta) -> {
Metadata meta = e.getData(); int index = event.index();
int index = e.getIndex();
if (index == 12) { if (index == 12) {
Position position = (Position) meta.getValue(); Position position = (Position) meta.getValue();
if (position != null) { if (position != null) {
// Use bed // Use bed
PacketWrapper wrapper = PacketWrapper.create(0x33, null, e.getUser()); PacketWrapper wrapper = PacketWrapper.create(0x33, null, event.user());
wrapper.write(Type.VAR_INT, e.getEntity().getEntityId()); wrapper.write(Type.VAR_INT, event.entityId());
wrapper.write(Type.POSITION, position); wrapper.write(Type.POSITION, position);
try { try {
@ -491,50 +463,34 @@ public class EntityPackets1_14 extends LegacyEntityRewriter<Protocol1_13_2To1_14
} }
} }
throw RemovedValueException.EX; event.cancel();
} else if (index > 12) { } else if (index > 12) {
meta.setId(index - 1); event.setIndex(index - 1);
} }
return meta;
}); });
registerMetaHandler().handle(e -> { // Something
Metadata meta = e.getData(); filter().removeIndex(6);
int index = e.getIndex();
if (index == 6) {
throw RemovedValueException.EX;
} else if (index > 6) {
meta.setId(index - 1);
}
return meta;
});
registerMetaHandler().handle(e -> { filter().handler((event, meta) -> {
Metadata meta = e.getData(); int typeId = meta.metaType().typeId();
int typeId = meta.getMetaType().getTypeID();
if (typeId > 15) { if (typeId > 15) {
ViaBackwards.getPlatform().getLogger().warning("New 1.14 metadata was not handled: " + meta + " entity: " + e.getEntity().getType()); ViaBackwards.getPlatform().getLogger().warning("New 1.14 metadata was not handled: " + meta + " entity: " + event.entityType());
return null;
} }
return meta;
}); });
registerMetaHandler().filter(Entity1_14Types.OCELOT, 13).handle(e -> { filter().type(Entity1_14Types.OCELOT).index(13).handler((event, meta) -> {
Metadata meta = e.getData(); event.setIndex(15);
meta.setId(15);
meta.setMetaType(MetaType1_13_2.VarInt); meta.setMetaType(MetaType1_13_2.VarInt);
meta.setValue(0); meta.setValue(0);
return meta;
}); });
registerMetaHandler().filter(Entity1_14Types.CAT).handle(e -> { filter().type(Entity1_14Types.CAT).handler((event, meta) -> {
Metadata meta = e.getData(); if (event.index() == 15) {
if (meta.getId() == 15) {
meta.setValue(1); meta.setValue(1);
} else if (meta.getId() == 13) { } else if (event.index() == 13) {
meta.setValue((byte) ((byte) meta.getValue() & 0x4)); meta.setValue((byte) ((byte) meta.getValue() & 0x4));
} }
return meta;
}); });
} }
@ -566,7 +522,7 @@ public class EntityPackets1_14 extends LegacyEntityRewriter<Protocol1_13_2To1_14
} }
@Override @Override
protected EntityType getTypeFromId(int typeId) { public EntityType typeFromId(int typeId) {
return Entity1_14Types.getTypeFromId(typeId); return Entity1_14Types.getTypeFromId(typeId);
} }
} }

Datei anzeigen

@ -17,7 +17,6 @@
*/ */
package com.viaversion.viabackwards.protocol.protocol1_13_2to1_14.packets; package com.viaversion.viabackwards.protocol.protocol1_13_2to1_14.packets;
import com.viaversion.viabackwards.api.rewriters.Rewriter;
import com.viaversion.viabackwards.protocol.protocol1_13_2to1_14.Protocol1_13_2To1_14; import com.viaversion.viabackwards.protocol.protocol1_13_2to1_14.Protocol1_13_2To1_14;
import com.viaversion.viaversion.api.minecraft.Position; import com.viaversion.viaversion.api.minecraft.Position;
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper; import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
@ -26,8 +25,9 @@ import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper;
import com.viaversion.viaversion.api.type.Type; import com.viaversion.viaversion.api.type.Type;
import com.viaversion.viaversion.protocols.protocol1_13to1_12_2.ServerboundPackets1_13; import com.viaversion.viaversion.protocols.protocol1_13to1_12_2.ServerboundPackets1_13;
import com.viaversion.viaversion.protocols.protocol1_14to1_13_2.ClientboundPackets1_14; import com.viaversion.viaversion.protocols.protocol1_14to1_13_2.ClientboundPackets1_14;
import com.viaversion.viaversion.rewriter.RewriterBase;
public class PlayerPackets1_14 extends Rewriter<Protocol1_13_2To1_14> { public class PlayerPackets1_14 extends RewriterBase<Protocol1_13_2To1_14> {
public PlayerPackets1_14(Protocol1_13_2To1_14 protocol) { public PlayerPackets1_14(Protocol1_13_2To1_14 protocol) {
super(protocol); super(protocol);

Datei anzeigen

@ -18,17 +18,17 @@
package com.viaversion.viabackwards.protocol.protocol1_13_2to1_14.packets; package com.viaversion.viabackwards.protocol.protocol1_13_2to1_14.packets;
import com.viaversion.viabackwards.ViaBackwards; import com.viaversion.viabackwards.ViaBackwards;
import com.viaversion.viabackwards.api.entities.storage.EntityTracker;
import com.viaversion.viabackwards.api.rewriters.Rewriter;
import com.viaversion.viabackwards.api.rewriters.SoundRewriter; import com.viaversion.viabackwards.api.rewriters.SoundRewriter;
import com.viaversion.viabackwards.protocol.protocol1_13_2to1_14.Protocol1_13_2To1_14; import com.viaversion.viabackwards.protocol.protocol1_13_2to1_14.Protocol1_13_2To1_14;
import com.viaversion.viabackwards.protocol.protocol1_13_2to1_14.storage.EntityPositionStorage1_14; import com.viaversion.viabackwards.protocol.protocol1_13_2to1_14.storage.EntityPositionStorage1_14;
import com.viaversion.viaversion.api.data.entity.StoredEntityData;
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper; import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper; import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper;
import com.viaversion.viaversion.api.type.Type; import com.viaversion.viaversion.api.type.Type;
import com.viaversion.viaversion.protocols.protocol1_14to1_13_2.ClientboundPackets1_14; import com.viaversion.viaversion.protocols.protocol1_14to1_13_2.ClientboundPackets1_14;
import com.viaversion.viaversion.rewriter.RewriterBase;
public class SoundPackets1_14 extends Rewriter<Protocol1_13_2To1_14> { public class SoundPackets1_14 extends RewriterBase<Protocol1_13_2To1_14> {
public SoundPackets1_14(Protocol1_13_2To1_14 protocol) { public SoundPackets1_14(Protocol1_13_2To1_14 protocol) {
super(protocol); super(protocol);
@ -55,7 +55,7 @@ public class SoundPackets1_14 extends Rewriter<Protocol1_13_2To1_14> {
int category = wrapper.read(Type.VAR_INT); int category = wrapper.read(Type.VAR_INT);
int entityId = wrapper.read(Type.VAR_INT); int entityId = wrapper.read(Type.VAR_INT);
EntityTracker.StoredEntity storedEntity = wrapper.user().get(EntityTracker.class).get(protocol).getEntity(entityId); StoredEntityData storedEntity = wrapper.user().getEntityTracker(protocol.getClass()).entityData(entityId);
EntityPositionStorage1_14 entityStorage; EntityPositionStorage1_14 entityStorage;
if (storedEntity == null || (entityStorage = storedEntity.get(EntityPositionStorage1_14.class)) == null) { if (storedEntity == null || (entityStorage = storedEntity.get(EntityPositionStorage1_14.class)) == null) {
ViaBackwards.getPlatform().getLogger().warning("Untracked entity with id " + entityId); ViaBackwards.getPlatform().getLogger().warning("Untracked entity with id " + entityId);

Datei anzeigen

@ -19,19 +19,20 @@ package com.viaversion.viabackwards.protocol.protocol1_13to1_13_1;
import com.viaversion.viabackwards.api.BackwardsProtocol; import com.viaversion.viabackwards.api.BackwardsProtocol;
import com.viaversion.viabackwards.api.data.BackwardsMappings; import com.viaversion.viabackwards.api.data.BackwardsMappings;
import com.viaversion.viabackwards.api.entities.storage.EntityTracker;
import com.viaversion.viabackwards.api.rewriters.TranslatableRewriter; import com.viaversion.viabackwards.api.rewriters.TranslatableRewriter;
import com.viaversion.viabackwards.protocol.protocol1_13to1_13_1.data.CommandRewriter1_13_1; import com.viaversion.viabackwards.protocol.protocol1_13to1_13_1.data.CommandRewriter1_13_1;
import com.viaversion.viabackwards.protocol.protocol1_13to1_13_1.packets.EntityPackets1_13_1; import com.viaversion.viabackwards.protocol.protocol1_13to1_13_1.packets.EntityPackets1_13_1;
import com.viaversion.viabackwards.protocol.protocol1_13to1_13_1.packets.InventoryPackets1_13_1; import com.viaversion.viabackwards.protocol.protocol1_13to1_13_1.packets.InventoryPackets1_13_1;
import com.viaversion.viabackwards.protocol.protocol1_13to1_13_1.packets.WorldPackets1_13_1; import com.viaversion.viabackwards.protocol.protocol1_13to1_13_1.packets.WorldPackets1_13_1;
import com.viaversion.viaversion.api.connection.UserConnection; import com.viaversion.viaversion.api.connection.UserConnection;
import com.viaversion.viaversion.api.minecraft.entities.Entity1_13Types;
import com.viaversion.viaversion.api.minecraft.item.Item; import com.viaversion.viaversion.api.minecraft.item.Item;
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper; import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
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.protocol.remapper.PacketRemapper;
import com.viaversion.viaversion.api.protocol.remapper.ValueTransformer; import com.viaversion.viaversion.api.protocol.remapper.ValueTransformer;
import com.viaversion.viaversion.api.type.Type; import com.viaversion.viaversion.api.type.Type;
import com.viaversion.viaversion.data.entity.EntityTrackerBase;
import com.viaversion.viaversion.libs.gson.JsonElement; import com.viaversion.viaversion.libs.gson.JsonElement;
import com.viaversion.viaversion.libs.gson.JsonObject; import com.viaversion.viaversion.libs.gson.JsonObject;
import com.viaversion.viaversion.protocols.protocol1_13_1to1_13.Protocol1_13_1To1_13; import com.viaversion.viaversion.protocols.protocol1_13_1to1_13.Protocol1_13_1To1_13;
@ -215,12 +216,7 @@ public class Protocol1_13To1_13_1 extends BackwardsProtocol<ClientboundPackets1_
@Override @Override
public void init(UserConnection user) { public void init(UserConnection user) {
// Register EntityTracker if it doesn't exist yet. user.addEntityTracker(getClass(), new EntityTrackerBase(user, Entity1_13Types.EntityType.PLAYER));
if (!user.has(EntityTracker.class))
user.put(new EntityTracker(user));
// Init protocol in EntityTracker
user.get(EntityTracker.class).initProtocol(this);
if (!user.has(ClientWorld.class)) { if (!user.has(ClientWorld.class)) {
user.put(new ClientWorld(user)); user.put(new ClientWorld(user));

Datei anzeigen

@ -18,7 +18,6 @@
package com.viaversion.viabackwards.protocol.protocol1_13to1_13_1.packets; package com.viaversion.viabackwards.protocol.protocol1_13to1_13_1.packets;
import com.viaversion.viabackwards.ViaBackwards; import com.viaversion.viabackwards.ViaBackwards;
import com.viaversion.viabackwards.api.entities.storage.MetaStorage;
import com.viaversion.viabackwards.api.rewriters.LegacyEntityRewriter; import com.viaversion.viabackwards.api.rewriters.LegacyEntityRewriter;
import com.viaversion.viabackwards.protocol.protocol1_13to1_13_1.Protocol1_13To1_13_1; import com.viaversion.viabackwards.protocol.protocol1_13to1_13_1.Protocol1_13To1_13_1;
import com.viaversion.viaversion.api.minecraft.entities.Entity1_13Types; import com.viaversion.viaversion.api.minecraft.entities.Entity1_13Types;
@ -34,6 +33,8 @@ import com.viaversion.viaversion.api.type.types.Particle;
import com.viaversion.viaversion.api.type.types.version.Types1_13; import com.viaversion.viaversion.api.type.types.version.Types1_13;
import com.viaversion.viaversion.protocols.protocol1_13to1_12_2.ClientboundPackets1_13; import com.viaversion.viaversion.protocols.protocol1_13to1_12_2.ClientboundPackets1_13;
import java.util.List;
public class EntityPackets1_13_1 extends LegacyEntityRewriter<Protocol1_13To1_13_1> { public class EntityPackets1_13_1 extends LegacyEntityRewriter<Protocol1_13To1_13_1> {
public EntityPackets1_13_1(Protocol1_13To1_13_1 protocol) { public EntityPackets1_13_1(Protocol1_13To1_13_1 protocol) {
@ -73,14 +74,14 @@ public class EntityPackets1_13_1 extends LegacyEntityRewriter<Protocol1_13To1_13
} }
// Track Entity // Track Entity
addTrackedEntity(wrapper, entityId, entType); tracker(wrapper.user()).addEntity(entityId, entType);
} }
}); });
} }
}); });
registerExtraTracker(ClientboundPackets1_13.SPAWN_EXPERIENCE_ORB, Entity1_13Types.EntityType.EXPERIENCE_ORB); registerTracker(ClientboundPackets1_13.SPAWN_EXPERIENCE_ORB, Entity1_13Types.EntityType.EXPERIENCE_ORB);
registerExtraTracker(ClientboundPackets1_13.SPAWN_GLOBAL_ENTITY, Entity1_13Types.EntityType.LIGHTNING_BOLT); registerTracker(ClientboundPackets1_13.SPAWN_GLOBAL_ENTITY, Entity1_13Types.EntityType.LIGHTNING_BOLT);
protocol.registerClientbound(ClientboundPackets1_13.SPAWN_MOB, new PacketRemapper() { protocol.registerClientbound(ClientboundPackets1_13.SPAWN_MOB, new PacketRemapper() {
@Override @Override
@ -106,13 +107,8 @@ public class EntityPackets1_13_1 extends LegacyEntityRewriter<Protocol1_13To1_13
handler(new PacketHandler() { handler(new PacketHandler() {
@Override @Override
public void handle(PacketWrapper wrapper) throws Exception { public void handle(PacketWrapper wrapper) throws Exception {
MetaStorage storage = new MetaStorage(wrapper.get(Types1_13.METADATA_LIST, 0)); List<Metadata> metadata = wrapper.get(Types1_13.METADATA_LIST, 0);
handleMeta(wrapper.user(), wrapper.get(Type.VAR_INT, 0), storage); handleMetadata(wrapper.get(Type.VAR_INT, 0), metadata, wrapper.user());
// Don't handle new ids / base meta since it's not used for this version
// Rewrite Metadata
wrapper.set(Types1_13.METADATA_LIST, 0, storage.getMetaDataList());
} }
}); });
} }
@ -134,58 +130,46 @@ public class EntityPackets1_13_1 extends LegacyEntityRewriter<Protocol1_13To1_13
} }
}); });
registerExtraTracker(ClientboundPackets1_13.SPAWN_PAINTING, Entity1_13Types.EntityType.PAINTING); registerTracker(ClientboundPackets1_13.SPAWN_PAINTING, Entity1_13Types.EntityType.PAINTING);
registerJoinGame(ClientboundPackets1_13.JOIN_GAME, Entity1_13Types.EntityType.PLAYER); registerJoinGame(ClientboundPackets1_13.JOIN_GAME, Entity1_13Types.EntityType.PLAYER);
registerRespawn(ClientboundPackets1_13.RESPAWN); registerRespawn(ClientboundPackets1_13.RESPAWN);
registerEntityDestroy(ClientboundPackets1_13.DESTROY_ENTITIES); registerRemoveEntities(ClientboundPackets1_13.DESTROY_ENTITIES);
registerMetadataRewriter(ClientboundPackets1_13.ENTITY_METADATA, Types1_13.METADATA_LIST); registerMetadataRewriter(ClientboundPackets1_13.ENTITY_METADATA, Types1_13.METADATA_LIST);
} }
@Override @Override
protected void registerRewrites() { protected void registerRewrites() {
// Rewrite items & blocks // Rewrite items & blocks
registerMetaHandler().handle(e -> { filter().handler((event, meta) -> {
Metadata meta = e.getData(); if (meta.metaType() == MetaType1_13.Slot) {
if (meta.getMetaType() == MetaType1_13.Slot) {
InventoryPackets1_13_1.toClient((Item) meta.getValue()); InventoryPackets1_13_1.toClient((Item) meta.getValue());
} else if (meta.getMetaType() == MetaType1_13.BlockID) { } else if (meta.metaType() == MetaType1_13.BlockID) {
// Convert to new block id // Convert to new block id
int data = (int) meta.getValue(); int data = (int) meta.getValue();
meta.setValue(protocol.getMappingData().getNewBlockStateId(data)); meta.setValue(protocol.getMappingData().getNewBlockStateId(data));
} else if (meta.getMetaType() == MetaType1_13.PARTICLE) { } else if (meta.metaType() == MetaType1_13.PARTICLE) {
rewriteParticle((Particle) meta.getValue()); rewriteParticle((Particle) meta.getValue());
} }
return meta;
}); });
// Remove shooter UUID // Remove shooter UUID
registerMetaHandler(). filter().filterFamily(Entity1_13Types.EntityType.ABSTRACT_ARROW).cancel(7);
filter(Entity1_13Types.EntityType.ABSTRACT_ARROW, true, 7)
.removed();
// Move colors to old position // Move colors to old position
registerMetaHandler().filter(Entity1_13Types.EntityType.SPECTRAL_ARROW, 8) filter().type(Entity1_13Types.EntityType.SPECTRAL_ARROW).index(8).toIndex(7);
.handleIndexChange(7);
// Move loyalty level to old position // Move loyalty level to old position
registerMetaHandler().filter(Entity1_13Types.EntityType.TRIDENT, 8) filter().type(Entity1_13Types.EntityType.TRIDENT).index(8).toIndex(7);
.handleIndexChange(7);
// Rewrite Minecart blocks // Rewrite Minecart blocks
registerMetaHandler() filter().filterFamily(Entity1_13Types.EntityType.MINECART_ABSTRACT).index(9).handler((event, meta) -> {
.filter(Entity1_13Types.EntityType.MINECART_ABSTRACT, true, 9) int data = (int) meta.getValue();
.handle(e -> { meta.setValue(protocol.getMappingData().getNewBlockStateId(data));
Metadata meta = e.getData(); });
int data = (int) meta.getValue();
meta.setValue(protocol.getMappingData().getNewBlockStateId(data));
return meta;
});
} }
@Override @Override
protected EntityType getTypeFromId(int typeId) { public EntityType typeFromId(int typeId) {
return Entity1_13Types.getTypeFromId(typeId, false); return Entity1_13Types.getTypeFromId(typeId, false);
} }

Datei anzeigen

@ -19,7 +19,6 @@ package com.viaversion.viabackwards.protocol.protocol1_14_4to1_15;
import com.viaversion.viabackwards.api.BackwardsProtocol; import com.viaversion.viabackwards.api.BackwardsProtocol;
import com.viaversion.viabackwards.api.data.BackwardsMappings; import com.viaversion.viabackwards.api.data.BackwardsMappings;
import com.viaversion.viabackwards.api.entities.storage.EntityTracker;
import com.viaversion.viabackwards.api.rewriters.SoundRewriter; import com.viaversion.viabackwards.api.rewriters.SoundRewriter;
import com.viaversion.viabackwards.api.rewriters.TranslatableRewriter; import com.viaversion.viabackwards.api.rewriters.TranslatableRewriter;
import com.viaversion.viabackwards.protocol.protocol1_14_4to1_15.data.EntityTypeMapping; import com.viaversion.viabackwards.protocol.protocol1_14_4to1_15.data.EntityTypeMapping;
@ -27,9 +26,11 @@ import com.viaversion.viabackwards.protocol.protocol1_14_4to1_15.data.ImmediateR
import com.viaversion.viabackwards.protocol.protocol1_14_4to1_15.packets.BlockItemPackets1_15; import com.viaversion.viabackwards.protocol.protocol1_14_4to1_15.packets.BlockItemPackets1_15;
import com.viaversion.viabackwards.protocol.protocol1_14_4to1_15.packets.EntityPackets1_15; import com.viaversion.viabackwards.protocol.protocol1_14_4to1_15.packets.EntityPackets1_15;
import com.viaversion.viaversion.api.connection.UserConnection; import com.viaversion.viaversion.api.connection.UserConnection;
import com.viaversion.viaversion.api.minecraft.entities.Entity1_15Types;
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper; import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper; import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper;
import com.viaversion.viaversion.api.type.Type; import com.viaversion.viaversion.api.type.Type;
import com.viaversion.viaversion.data.entity.EntityTrackerBase;
import com.viaversion.viaversion.protocols.protocol1_14to1_13_2.ClientboundPackets1_14; import com.viaversion.viaversion.protocols.protocol1_14to1_13_2.ClientboundPackets1_14;
import com.viaversion.viaversion.protocols.protocol1_14to1_13_2.ServerboundPackets1_14; import com.viaversion.viaversion.protocols.protocol1_14to1_13_2.ServerboundPackets1_14;
import com.viaversion.viaversion.protocols.protocol1_15to1_14_4.ClientboundPackets1_15; import com.viaversion.viaversion.protocols.protocol1_15to1_14_4.ClientboundPackets1_15;
@ -105,10 +106,7 @@ public class Protocol1_14_4To1_15 extends BackwardsProtocol<ClientboundPackets1_
if (!user.has(ImmediateRespawn.class)) { if (!user.has(ImmediateRespawn.class)) {
user.put(new ImmediateRespawn(user)); user.put(new ImmediateRespawn(user));
} }
if (!user.has(EntityTracker.class)) { user.addEntityTracker(getClass(), new EntityTrackerBase(user, Entity1_15Types.PLAYER));
user.put(new EntityTracker(user));
}
user.get(EntityTracker.class).initProtocol(this);
} }
public BlockItemPackets1_15 getBlockItemPackets() { public BlockItemPackets1_15 getBlockItemPackets() {

Datei anzeigen

@ -17,21 +17,17 @@
*/ */
package com.viaversion.viabackwards.protocol.protocol1_14_4to1_15.packets; package com.viaversion.viabackwards.protocol.protocol1_14_4to1_15.packets;
import com.viaversion.viabackwards.api.exceptions.RemovedValueException;
import com.viaversion.viabackwards.api.rewriters.EntityRewriter; import com.viaversion.viabackwards.api.rewriters.EntityRewriter;
import com.viaversion.viabackwards.protocol.protocol1_14_4to1_15.Protocol1_14_4To1_15; import com.viaversion.viabackwards.protocol.protocol1_14_4to1_15.Protocol1_14_4To1_15;
import com.viaversion.viabackwards.protocol.protocol1_14_4to1_15.data.EntityTypeMapping; import com.viaversion.viabackwards.protocol.protocol1_14_4to1_15.data.EntityTypeMapping;
import com.viaversion.viabackwards.protocol.protocol1_14_4to1_15.data.ImmediateRespawn; import com.viaversion.viabackwards.protocol.protocol1_14_4to1_15.data.ImmediateRespawn;
import com.viaversion.viaversion.api.minecraft.entities.Entity1_15Types; import com.viaversion.viaversion.api.minecraft.entities.Entity1_15Types;
import com.viaversion.viaversion.api.minecraft.entities.EntityType; import com.viaversion.viaversion.api.minecraft.entities.EntityType;
import com.viaversion.viaversion.api.minecraft.item.Item;
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.minecraft.metadata.types.MetaType1_14; import com.viaversion.viaversion.api.minecraft.metadata.types.MetaType1_14;
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper; import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper; import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper;
import com.viaversion.viaversion.api.type.Type; import com.viaversion.viaversion.api.type.Type;
import com.viaversion.viaversion.api.type.types.Particle;
import com.viaversion.viaversion.api.type.types.version.Types1_14; import com.viaversion.viaversion.api.type.types.version.Types1_14;
import com.viaversion.viaversion.protocols.protocol1_15to1_14_4.ClientboundPackets1_15; import com.viaversion.viaversion.protocols.protocol1_15to1_14_4.ClientboundPackets1_15;
@ -74,7 +70,7 @@ public class EntityPackets1_15 extends EntityRewriter<Protocol1_14_4To1_15> {
} }
}); });
registerSpawnTrackerWithData(ClientboundPackets1_15.SPAWN_ENTITY, Entity1_15Types.FALLING_BLOCK); registerTrackerWithData(ClientboundPackets1_15.SPAWN_ENTITY, Entity1_15Types.FALLING_BLOCK);
protocol.registerClientbound(ClientboundPackets1_15.SPAWN_MOB, new PacketRemapper() { protocol.registerClientbound(ClientboundPackets1_15.SPAWN_MOB, new PacketRemapper() {
@Override @Override
@ -96,7 +92,7 @@ public class EntityPackets1_15 extends EntityRewriter<Protocol1_14_4To1_15> {
handler(wrapper -> { handler(wrapper -> {
int type = wrapper.get(Type.VAR_INT, 1); int type = wrapper.get(Type.VAR_INT, 1);
EntityType entityType = Entity1_15Types.getTypeFromId(type); EntityType entityType = Entity1_15Types.getTypeFromId(type);
addTrackedEntity(wrapper, wrapper.get(Type.VAR_INT, 0), entityType); tracker(wrapper.user()).addEntity(wrapper.get(Type.VAR_INT, 0), entityType);
wrapper.set(Type.VAR_INT, 1, EntityTypeMapping.getOldEntityId(type)); wrapper.set(Type.VAR_INT, 1, EntityTypeMapping.getOldEntityId(type));
}); });
} }
@ -130,9 +126,9 @@ public class EntityPackets1_15 extends EntityRewriter<Protocol1_14_4To1_15> {
} }
}); });
registerExtraTracker(ClientboundPackets1_15.SPAWN_EXPERIENCE_ORB, Entity1_15Types.EXPERIENCE_ORB); registerTracker(ClientboundPackets1_15.SPAWN_EXPERIENCE_ORB, Entity1_15Types.EXPERIENCE_ORB);
registerExtraTracker(ClientboundPackets1_15.SPAWN_GLOBAL_ENTITY, Entity1_15Types.LIGHTNING_BOLT); registerTracker(ClientboundPackets1_15.SPAWN_GLOBAL_ENTITY, Entity1_15Types.LIGHTNING_BOLT);
registerExtraTracker(ClientboundPackets1_15.SPAWN_PAINTING, Entity1_15Types.PAINTING); registerTracker(ClientboundPackets1_15.SPAWN_PAINTING, Entity1_15Types.PAINTING);
protocol.registerClientbound(ClientboundPackets1_15.SPAWN_PLAYER, new PacketRemapper() { protocol.registerClientbound(ClientboundPackets1_15.SPAWN_PLAYER, new PacketRemapper() {
@Override @Override
@ -150,7 +146,7 @@ public class EntityPackets1_15 extends EntityRewriter<Protocol1_14_4To1_15> {
} }
}); });
registerEntityDestroy(ClientboundPackets1_15.DESTROY_ENTITIES); registerRemoveEntities(ClientboundPackets1_15.DESTROY_ENTITIES);
registerMetadataRewriter(ClientboundPackets1_15.ENTITY_METADATA, Types1_14.METADATA_LIST); registerMetadataRewriter(ClientboundPackets1_15.ENTITY_METADATA, Types1_14.METADATA_LIST);
// Attributes (get rid of generic.flyingSpeed for the Bee remap) // Attributes (get rid of generic.flyingSpeed for the Bee remap)
@ -161,7 +157,7 @@ public class EntityPackets1_15 extends EntityRewriter<Protocol1_14_4To1_15> {
map(Type.INT); map(Type.INT);
handler(wrapper -> { handler(wrapper -> {
int entityId = wrapper.get(Type.VAR_INT, 0); int entityId = wrapper.get(Type.VAR_INT, 0);
EntityType entityType = getEntityType(wrapper.user(), entityId); EntityType entityType = tracker(wrapper.user()).entityType(entityId);
if (entityType != Entity1_15Types.BEE) return; if (entityType != Entity1_15Types.BEE) return;
int size = wrapper.get(Type.INT, 0); int size = wrapper.get(Type.INT, 0);
@ -199,62 +195,35 @@ public class EntityPackets1_15 extends EntityRewriter<Protocol1_14_4To1_15> {
@Override @Override
protected void registerRewrites() { protected void registerRewrites() {
registerMetaHandler().handle(e -> { registerMetaTypeHandler(MetaType1_14.Slot, MetaType1_14.BlockID, MetaType1_14.PARTICLE, null);
Metadata meta = e.getData();
MetaType type = meta.getMetaType();
if (type == MetaType1_14.Slot) {
Item item = (Item) meta.getValue();
meta.setValue(protocol.getBlockItemPackets().handleItemToClient(item));
} else if (type == MetaType1_14.BlockID) {
int blockstate = (int) meta.getValue();
meta.setValue(protocol.getMappingData().getNewBlockStateId(blockstate));
} else if (type == MetaType1_14.PARTICLE) {
rewriteParticle((Particle) meta.getValue());
}
return meta;
});
registerMetaHandler().filter(Entity1_15Types.LIVINGENTITY, true).handle(e -> { filter().filterFamily(Entity1_15Types.LIVINGENTITY).removeIndex(12);
int index = e.getIndex();
if (index == 12) {
throw RemovedValueException.EX;
} else if (index > 12) {
e.getData().setId(index - 1);
}
return e.getData();
});
registerMetaHandler().filter(Entity1_15Types.BEE, 15).removed(); filter().type(Entity1_15Types.BEE).cancel(15);
registerMetaHandler().filter(Entity1_15Types.BEE, 16).removed(); filter().type(Entity1_15Types.BEE).cancel(16);
mapEntity(Entity1_15Types.BEE, Entity1_15Types.PUFFERFISH).jsonName("Bee").spawnMetadata(storage -> { mapEntityTypeWithData(Entity1_15Types.BEE, Entity1_15Types.PUFFERFISH).jsonName("Bee").spawnMetadata(storage -> {
storage.add(new Metadata(14, MetaType1_14.Boolean, false)); storage.add(new Metadata(14, MetaType1_14.Boolean, false));
storage.add(new Metadata(15, MetaType1_14.VarInt, 2)); storage.add(new Metadata(15, MetaType1_14.VarInt, 2));
}); });
registerMetaHandler().filter(Entity1_15Types.ENDERMAN, 16).removed(); filter().type(Entity1_15Types.ENDERMAN).cancel(16);
registerMetaHandler().filter(Entity1_15Types.TRIDENT, 10).removed(); filter().type(Entity1_15Types.TRIDENT).cancel(10);
registerMetaHandler().filter(Entity1_15Types.WOLF).handle(e -> { // Redundant health removed in 1.15
int index = e.getIndex(); filter().type(Entity1_15Types.WOLF).addIndex(17);
if (index >= 17) { filter().type(Entity1_15Types.WOLF).index(8).handler((event, meta) -> {
e.getData().setId(index + 1); // redundant health removed in 1.15 event.createExtraMeta(new Metadata(17/*WOLF_HEALTH*/, MetaType1_14.Float, event.meta().value()));
}
return e.getData();
});
registerMetaHandler().filter(Entity1_15Types.WOLF, 8).handle(e -> {
e.createMeta(new Metadata(17/*WOLF_HEALTH*/, MetaType1_14.Float, e.getData().getValue()));
return e.getData();
}); });
} }
@Override @Override
protected EntityType getTypeFromId(int typeId) { public EntityType typeFromId(int typeId) {
return Entity1_15Types.getTypeFromId(typeId); return Entity1_15Types.getTypeFromId(typeId);
} }
@Override @Override
public int getOldEntityId(final int newId) { public int newEntityId(final int newId) {
return EntityTypeMapping.getOldEntityId(newId); return EntityTypeMapping.getOldEntityId(newId);
} }
} }

Datei anzeigen

@ -20,6 +20,8 @@ package com.viaversion.viabackwards.protocol.protocol1_14to1_14_1;
import com.viaversion.viabackwards.api.BackwardsProtocol; import com.viaversion.viabackwards.api.BackwardsProtocol;
import com.viaversion.viabackwards.protocol.protocol1_14to1_14_1.packets.EntityPackets1_14_1; import com.viaversion.viabackwards.protocol.protocol1_14to1_14_1.packets.EntityPackets1_14_1;
import com.viaversion.viaversion.api.connection.UserConnection; import com.viaversion.viaversion.api.connection.UserConnection;
import com.viaversion.viaversion.api.minecraft.entities.Entity1_15Types;
import com.viaversion.viaversion.data.entity.EntityTrackerBase;
import com.viaversion.viaversion.protocols.protocol1_14to1_13_2.ClientboundPackets1_14; import com.viaversion.viaversion.protocols.protocol1_14to1_13_2.ClientboundPackets1_14;
import com.viaversion.viaversion.protocols.protocol1_14to1_13_2.ServerboundPackets1_14; import com.viaversion.viaversion.protocols.protocol1_14to1_13_2.ServerboundPackets1_14;
@ -36,6 +38,6 @@ public class Protocol1_14To1_14_1 extends BackwardsProtocol<ClientboundPackets1_
@Override @Override
public void init(UserConnection user) { public void init(UserConnection user) {
initEntityTracker(user); user.addEntityTracker(this.getClass(), new EntityTrackerBase(user, Entity1_15Types.PLAYER));
} }
} }

Datei anzeigen

@ -17,11 +17,11 @@
*/ */
package com.viaversion.viabackwards.protocol.protocol1_14to1_14_1.packets; package com.viaversion.viabackwards.protocol.protocol1_14to1_14_1.packets;
import com.viaversion.viabackwards.api.entities.storage.MetaStorage;
import com.viaversion.viabackwards.api.rewriters.LegacyEntityRewriter; import com.viaversion.viabackwards.api.rewriters.LegacyEntityRewriter;
import com.viaversion.viabackwards.protocol.protocol1_14to1_14_1.Protocol1_14To1_14_1; import com.viaversion.viabackwards.protocol.protocol1_14to1_14_1.Protocol1_14To1_14_1;
import com.viaversion.viaversion.api.minecraft.entities.Entity1_14Types; import com.viaversion.viaversion.api.minecraft.entities.Entity1_14Types;
import com.viaversion.viaversion.api.minecraft.entities.EntityType; import com.viaversion.viaversion.api.minecraft.entities.EntityType;
import com.viaversion.viaversion.api.minecraft.metadata.Metadata;
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper; import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
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.protocol.remapper.PacketRemapper;
@ -29,6 +29,8 @@ import com.viaversion.viaversion.api.type.Type;
import com.viaversion.viaversion.api.type.types.version.Types1_14; import com.viaversion.viaversion.api.type.types.version.Types1_14;
import com.viaversion.viaversion.protocols.protocol1_14to1_13_2.ClientboundPackets1_14; import com.viaversion.viaversion.protocols.protocol1_14to1_13_2.ClientboundPackets1_14;
import java.util.List;
public class EntityPackets1_14_1 extends LegacyEntityRewriter<Protocol1_14To1_14_1> { public class EntityPackets1_14_1 extends LegacyEntityRewriter<Protocol1_14To1_14_1> {
public EntityPackets1_14_1(Protocol1_14To1_14_1 protocol) { public EntityPackets1_14_1(Protocol1_14To1_14_1 protocol) {
@ -37,12 +39,12 @@ public class EntityPackets1_14_1 extends LegacyEntityRewriter<Protocol1_14To1_14
@Override @Override
protected void registerPackets() { protected void registerPackets() {
registerExtraTracker(ClientboundPackets1_14.SPAWN_EXPERIENCE_ORB, Entity1_14Types.EXPERIENCE_ORB); registerTracker(ClientboundPackets1_14.SPAWN_EXPERIENCE_ORB, Entity1_14Types.EXPERIENCE_ORB);
registerExtraTracker(ClientboundPackets1_14.SPAWN_GLOBAL_ENTITY, Entity1_14Types.LIGHTNING_BOLT); registerTracker(ClientboundPackets1_14.SPAWN_GLOBAL_ENTITY, Entity1_14Types.LIGHTNING_BOLT);
registerExtraTracker(ClientboundPackets1_14.SPAWN_PAINTING, Entity1_14Types.PAINTING); registerTracker(ClientboundPackets1_14.SPAWN_PAINTING, Entity1_14Types.PAINTING);
registerExtraTracker(ClientboundPackets1_14.SPAWN_PLAYER, Entity1_14Types.PLAYER); registerTracker(ClientboundPackets1_14.SPAWN_PLAYER, Entity1_14Types.PLAYER);
registerExtraTracker(ClientboundPackets1_14.JOIN_GAME, Entity1_14Types.PLAYER, Type.INT); registerTracker(ClientboundPackets1_14.JOIN_GAME, Entity1_14Types.PLAYER, Type.INT);
registerEntityDestroy(ClientboundPackets1_14.DESTROY_ENTITIES); registerRemoveEntities(ClientboundPackets1_14.DESTROY_ENTITIES);
protocol.registerClientbound(ClientboundPackets1_14.SPAWN_ENTITY, new PacketRemapper() { protocol.registerClientbound(ClientboundPackets1_14.SPAWN_ENTITY, new PacketRemapper() {
@Override @Override
@ -79,10 +81,10 @@ public class EntityPackets1_14_1 extends LegacyEntityRewriter<Protocol1_14To1_14
int type = wrapper.get(Type.VAR_INT, 1); int type = wrapper.get(Type.VAR_INT, 1);
// Register Type ID // Register Type ID
addTrackedEntity(wrapper, entityId, Entity1_14Types.getTypeFromId(type)); tracker(wrapper.user()).addEntity(entityId, Entity1_14Types.getTypeFromId(type));
MetaStorage storage = new MetaStorage(wrapper.get(Types1_14.METADATA_LIST, 0)); List<Metadata> metadata = wrapper.get(Types1_14.METADATA_LIST, 0);
handleMeta(wrapper.user(), entityId, storage); handleMetadata(entityId, metadata, wrapper.user());
} }
}); });
} }
@ -94,13 +96,13 @@ public class EntityPackets1_14_1 extends LegacyEntityRewriter<Protocol1_14To1_14
@Override @Override
protected void registerRewrites() { protected void registerRewrites() {
registerMetaHandler().filter(Entity1_14Types.VILLAGER, 15).removed(); filter().type(Entity1_14Types.VILLAGER).cancel(15);
registerMetaHandler().filter(Entity1_14Types.VILLAGER, 16).handleIndexChange(15); filter().type(Entity1_14Types.VILLAGER).index(16).toIndex(15);
registerMetaHandler().filter(Entity1_14Types.WANDERING_TRADER, 15).removed(); filter().type(Entity1_14Types.WANDERING_TRADER).cancel(15);
} }
@Override @Override
protected EntityType getTypeFromId(int typeId) { public EntityType typeFromId(int typeId) {
return Entity1_14Types.getTypeFromId(typeId); return Entity1_14Types.getTypeFromId(typeId);
} }
} }

Datei anzeigen

@ -28,9 +28,11 @@ import com.viaversion.viabackwards.protocol.protocol1_15_2to1_16.packets.BlockIt
import com.viaversion.viabackwards.protocol.protocol1_15_2to1_16.packets.EntityPackets1_16; import com.viaversion.viabackwards.protocol.protocol1_15_2to1_16.packets.EntityPackets1_16;
import com.viaversion.viabackwards.protocol.protocol1_15_2to1_16.storage.PlayerSneakStorage; import com.viaversion.viabackwards.protocol.protocol1_15_2to1_16.storage.PlayerSneakStorage;
import com.viaversion.viaversion.api.connection.UserConnection; import com.viaversion.viaversion.api.connection.UserConnection;
import com.viaversion.viaversion.api.minecraft.entities.Entity1_16Types;
import com.viaversion.viaversion.api.protocol.packet.State; import com.viaversion.viaversion.api.protocol.packet.State;
import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper; import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper;
import com.viaversion.viaversion.api.type.Type; import com.viaversion.viaversion.api.type.Type;
import com.viaversion.viaversion.data.entity.EntityTrackerBase;
import com.viaversion.viaversion.libs.gson.JsonElement; import com.viaversion.viaversion.libs.gson.JsonElement;
import com.viaversion.viaversion.libs.gson.JsonObject; import com.viaversion.viaversion.libs.gson.JsonObject;
import com.viaversion.viaversion.protocols.protocol1_14to1_13_2.ServerboundPackets1_14; import com.viaversion.viaversion.protocols.protocol1_14to1_13_2.ServerboundPackets1_14;
@ -133,9 +135,9 @@ public class Protocol1_15_2To1_16 extends BackwardsProtocol<ClientboundPackets1_
} }
}); });
new TagRewriter(this, entityPackets::getOldEntityId).register(ClientboundPackets1_16.TAGS, RegistryType.ENTITY); new TagRewriter(this, entityPackets::newEntityId).register(ClientboundPackets1_16.TAGS, RegistryType.ENTITY);
new StatisticsRewriter(this, entityPackets::getOldEntityId).register(ClientboundPackets1_16.STATISTICS); new StatisticsRewriter(this, entityPackets::newEntityId).register(ClientboundPackets1_16.STATISTICS);
registerServerbound(ServerboundPackets1_14.ENTITY_ACTION, new PacketRemapper() { registerServerbound(ServerboundPackets1_14.ENTITY_ACTION, new PacketRemapper() {
@Override @Override
@ -200,13 +202,14 @@ public class Protocol1_15_2To1_16 extends BackwardsProtocol<ClientboundPackets1_
user.put(new PlayerSneakStorage(user)); user.put(new PlayerSneakStorage(user));
user.put(new WorldNameTracker(user)); user.put(new WorldNameTracker(user));
initEntityTracker(user); user.addEntityTracker(this.getClass(), new EntityTrackerBase(user, Entity1_16Types.PLAYER));
} }
public BlockItemPackets1_16 getBlockItemPackets() { public BlockItemPackets1_16 getBlockItemPackets() {
return blockItemPackets; return blockItemPackets;
} }
@Override
public TranslatableRewriter getTranslatableRewriter() { public TranslatableRewriter getTranslatableRewriter() {
return translatableRewriter; return translatableRewriter;
} }

Datei anzeigen

@ -26,7 +26,6 @@ import com.viaversion.viaversion.api.minecraft.entities.Entity1_16Types;
import com.viaversion.viaversion.api.minecraft.entities.EntityType; import com.viaversion.viaversion.api.minecraft.entities.EntityType;
import com.viaversion.viaversion.api.minecraft.item.Item; import com.viaversion.viaversion.api.minecraft.item.Item;
import com.viaversion.viaversion.api.minecraft.metadata.MetaType; import com.viaversion.viaversion.api.minecraft.metadata.MetaType;
import com.viaversion.viaversion.api.minecraft.metadata.Metadata;
import com.viaversion.viaversion.api.minecraft.metadata.types.MetaType1_14; import com.viaversion.viaversion.api.minecraft.metadata.types.MetaType1_14;
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper; import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper; import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper;
@ -75,7 +74,7 @@ public class EntityPackets1_16 extends EntityRewriter<Protocol1_15_2To1_16> {
map(Type.BYTE); // 7 - Yaw map(Type.BYTE); // 7 - Yaw
map(Type.INT); // 8 - Data map(Type.INT); // 8 - Data
handler(wrapper -> { handler(wrapper -> {
EntityType entityType = getTypeFromId(wrapper.get(Type.VAR_INT, 1)); EntityType entityType = typeFromId(wrapper.get(Type.VAR_INT, 1));
if (entityType == Entity1_16Types.LIGHTNING_BOLT) { if (entityType == Entity1_16Types.LIGHTNING_BOLT) {
// Map to old weather entity packet // Map to old weather entity packet
wrapper.cancel(); wrapper.cancel();
@ -89,7 +88,7 @@ public class EntityPackets1_16 extends EntityRewriter<Protocol1_15_2To1_16> {
spawnLightningPacket.send(Protocol1_15_2To1_16.class, true, true); spawnLightningPacket.send(Protocol1_15_2To1_16.class, true, true);
} }
}); });
handler(getSpawnTracketWithDataHandler(Entity1_16Types.FALLING_BLOCK)); handler(getSpawnTrackerWithDataHandler(Entity1_16Types.FALLING_BLOCK));
} }
}); });
@ -156,7 +155,7 @@ public class EntityPackets1_16 extends EntityRewriter<Protocol1_15_2To1_16> {
handler(wrapper -> { handler(wrapper -> {
ClientWorld clientChunks = wrapper.user().get(ClientWorld.class); ClientWorld clientChunks = wrapper.user().get(ClientWorld.class);
clientChunks.setEnvironment(wrapper.get(Type.INT, 1)); clientChunks.setEnvironment(wrapper.get(Type.INT, 1));
getEntityTracker(wrapper.user()).trackEntityType(wrapper.get(Type.INT, 0), Entity1_16Types.PLAYER); tracker(wrapper.user()).addEntity(wrapper.get(Type.INT, 0), Entity1_16Types.PLAYER);
wrapper.write(Type.STRING, "default"); // Level type wrapper.write(Type.STRING, "default"); // Level type
@ -172,11 +171,11 @@ public class EntityPackets1_16 extends EntityRewriter<Protocol1_15_2To1_16> {
} }
}); });
registerExtraTracker(ClientboundPackets1_16.SPAWN_EXPERIENCE_ORB, Entity1_16Types.EXPERIENCE_ORB); registerTracker(ClientboundPackets1_16.SPAWN_EXPERIENCE_ORB, Entity1_16Types.EXPERIENCE_ORB);
// F Spawn Global Object, it is no longer with us :( // F Spawn Global Object, it is no longer with us :(
registerExtraTracker(ClientboundPackets1_16.SPAWN_PAINTING, Entity1_16Types.PAINTING); registerTracker(ClientboundPackets1_16.SPAWN_PAINTING, Entity1_16Types.PAINTING);
registerExtraTracker(ClientboundPackets1_16.SPAWN_PLAYER, Entity1_16Types.PLAYER); registerTracker(ClientboundPackets1_16.SPAWN_PLAYER, Entity1_16Types.PLAYER);
registerEntityDestroy(ClientboundPackets1_16.DESTROY_ENTITIES); registerRemoveEntities(ClientboundPackets1_16.DESTROY_ENTITIES);
registerMetadataRewriter(ClientboundPackets1_16.ENTITY_METADATA, Types1_14.METADATA_LIST); registerMetadataRewriter(ClientboundPackets1_16.ENTITY_METADATA, Types1_14.METADATA_LIST);
protocol.registerClientbound(ClientboundPackets1_16.ENTITY_PROPERTIES, new PacketRemapper() { protocol.registerClientbound(ClientboundPackets1_16.ENTITY_PROPERTIES, new PacketRemapper() {
@ -244,9 +243,8 @@ public class EntityPackets1_16 extends EntityRewriter<Protocol1_15_2To1_16> {
@Override @Override
protected void registerRewrites() { protected void registerRewrites() {
registerMetaHandler().handle(e -> { filter().handler((event, meta) -> {
Metadata meta = e.getData(); MetaType type = meta.metaType();
MetaType type = meta.getMetaType();
if (type == MetaType1_14.Slot) { if (type == MetaType1_14.Slot) {
meta.setValue(protocol.getBlockItemPackets().handleItemToClient((Item) meta.getValue())); meta.setValue(protocol.getBlockItemPackets().handleItemToClient((Item) meta.getValue()));
} else if (type == MetaType1_14.BlockID) { } else if (type == MetaType1_14.BlockID) {
@ -254,52 +252,49 @@ public class EntityPackets1_16 extends EntityRewriter<Protocol1_15_2To1_16> {
} else if (type == MetaType1_14.PARTICLE) { } else if (type == MetaType1_14.PARTICLE) {
rewriteParticle((Particle) meta.getValue()); rewriteParticle((Particle) meta.getValue());
} else if (type == MetaType1_14.OptChat) { } else if (type == MetaType1_14.OptChat) {
JsonElement text = meta.getCastedValue(); JsonElement text = meta.value();
if (text != null) { if (text != null) {
protocol.getTranslatableRewriter().processText(text); protocol.getTranslatableRewriter().processText(text);
} }
} }
return meta;
}); });
mapEntityDirect(Entity1_16Types.ZOMBIFIED_PIGLIN, Entity1_15Types.ZOMBIE_PIGMAN); mapEntityType(Entity1_16Types.ZOMBIFIED_PIGLIN, Entity1_15Types.ZOMBIE_PIGMAN);
mapTypes(Entity1_16Types.values(), Entity1_15Types.class); mapTypes(Entity1_16Types.values(), Entity1_15Types.class);
mapEntity(Entity1_16Types.HOGLIN, Entity1_16Types.COW).jsonName("Hoglin"); mapEntityTypeWithData(Entity1_16Types.HOGLIN, Entity1_16Types.COW).jsonName("Hoglin");
mapEntity(Entity1_16Types.ZOGLIN, Entity1_16Types.COW).jsonName("Zoglin"); mapEntityTypeWithData(Entity1_16Types.ZOGLIN, Entity1_16Types.COW).jsonName("Zoglin");
mapEntity(Entity1_16Types.PIGLIN, Entity1_16Types.ZOMBIFIED_PIGLIN).jsonName("Piglin"); mapEntityTypeWithData(Entity1_16Types.PIGLIN, Entity1_16Types.ZOMBIFIED_PIGLIN).jsonName("Piglin");
mapEntity(Entity1_16Types.STRIDER, Entity1_16Types.MAGMA_CUBE).jsonName("Strider"); mapEntityTypeWithData(Entity1_16Types.STRIDER, Entity1_16Types.MAGMA_CUBE).jsonName("Strider");
registerMetaHandler().filter(Entity1_16Types.ZOGLIN, 16).removed(); filter().type(Entity1_16Types.ZOGLIN).cancel(16);
registerMetaHandler().filter(Entity1_16Types.HOGLIN, 15).removed(); filter().type(Entity1_16Types.HOGLIN).cancel(15);
registerMetaHandler().filter(Entity1_16Types.PIGLIN, 16).removed(); filter().type(Entity1_16Types.PIGLIN).cancel(16);
registerMetaHandler().filter(Entity1_16Types.PIGLIN, 17).removed(); filter().type(Entity1_16Types.PIGLIN).cancel(17);
registerMetaHandler().filter(Entity1_16Types.PIGLIN, 18).removed(); filter().type(Entity1_16Types.PIGLIN).cancel(18);
registerMetaHandler().filter(Entity1_16Types.STRIDER, 15).handle(meta -> { filter().type(Entity1_16Types.STRIDER).index(15).handler((event, meta) -> {
boolean baby = meta.getData().getCastedValue(); boolean baby = meta.value();
meta.getData().setValue(baby ? 1 : 3); meta.setValue(baby ? 1 : 3);
meta.getData().setMetaType(MetaType1_14.VarInt); meta.setMetaType(MetaType1_14.VarInt);
return meta.getData();
}); });
registerMetaHandler().filter(Entity1_16Types.STRIDER, 16).removed(); filter().type(Entity1_16Types.STRIDER).cancel(16);
registerMetaHandler().filter(Entity1_16Types.STRIDER, 17).removed(); filter().type(Entity1_16Types.STRIDER).cancel(17);
registerMetaHandler().filter(Entity1_16Types.STRIDER, 18).removed(); filter().type(Entity1_16Types.STRIDER).cancel(18);
registerMetaHandler().filter(Entity1_16Types.FISHING_BOBBER, 8).removed(); filter().type(Entity1_16Types.FISHING_BOBBER).cancel(8);
registerMetaHandler().filter(Entity1_16Types.ABSTRACT_ARROW, true, 8).removed(); filter().filterFamily(Entity1_16Types.ABSTRACT_ARROW).cancel(8);
registerMetaHandler().filter(Entity1_16Types.ABSTRACT_ARROW, true).handle(meta -> { filter().filterFamily(Entity1_16Types.ABSTRACT_ARROW).handler((event, meta) -> {
if (meta.getIndex() >= 8) { if (event.index() >= 8) {
meta.getData().setId(meta.getIndex() + 1); event.setIndex(event.index() + 1); // TODO is this right...?
} }
return meta.getData();
}); });
} }
@Override @Override
protected EntityType getTypeFromId(int typeId) { public EntityType typeFromId(int typeId) {
return Entity1_16Types.getTypeFromId(typeId); return Entity1_16Types.getTypeFromId(typeId);
} }
} }

Datei anzeigen

@ -25,10 +25,12 @@ import com.viaversion.viabackwards.protocol.protocol1_16_1to1_16_2.data.CommandR
import com.viaversion.viabackwards.protocol.protocol1_16_1to1_16_2.packets.BlockItemPackets1_16_2; import com.viaversion.viabackwards.protocol.protocol1_16_1to1_16_2.packets.BlockItemPackets1_16_2;
import com.viaversion.viabackwards.protocol.protocol1_16_1to1_16_2.packets.EntityPackets1_16_2; import com.viaversion.viabackwards.protocol.protocol1_16_1to1_16_2.packets.EntityPackets1_16_2;
import com.viaversion.viaversion.api.connection.UserConnection; import com.viaversion.viaversion.api.connection.UserConnection;
import com.viaversion.viaversion.api.minecraft.entities.Entity1_16_2Types;
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper; import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
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.protocol.remapper.PacketRemapper;
import com.viaversion.viaversion.api.type.Type; import com.viaversion.viaversion.api.type.Type;
import com.viaversion.viaversion.data.entity.EntityTrackerBase;
import com.viaversion.viaversion.libs.gson.JsonElement; import com.viaversion.viaversion.libs.gson.JsonElement;
import com.viaversion.viaversion.protocols.protocol1_16_2to1_16_1.ClientboundPackets1_16_2; import com.viaversion.viaversion.protocols.protocol1_16_2to1_16_1.ClientboundPackets1_16_2;
import com.viaversion.viaversion.protocols.protocol1_16_2to1_16_1.Protocol1_16_2To1_16_1; import com.viaversion.viaversion.protocols.protocol1_16_2to1_16_1.Protocol1_16_2To1_16_1;
@ -127,14 +129,14 @@ public class Protocol1_16_1To1_16_2 extends BackwardsProtocol<ClientboundPackets
} }
}); });
new TagRewriter(this, entityPackets::getOldEntityId).register(ClientboundPackets1_16_2.TAGS, RegistryType.ENTITY); new TagRewriter(this, entityPackets::newEntityId).register(ClientboundPackets1_16_2.TAGS, RegistryType.ENTITY);
new StatisticsRewriter(this, entityPackets::getOldEntityId).register(ClientboundPackets1_16_2.STATISTICS); new StatisticsRewriter(this, entityPackets::newEntityId).register(ClientboundPackets1_16_2.STATISTICS);
} }
@Override @Override
public void init(UserConnection user) { public void init(UserConnection user) {
initEntityTracker(user); user.addEntityTracker(this.getClass(), new EntityTrackerBase(user, Entity1_16_2Types.PLAYER));
} }
public BlockItemPackets1_16_2 getBlockItemPackets() { public BlockItemPackets1_16_2 getBlockItemPackets() {

Datei anzeigen

@ -23,15 +23,10 @@ import com.viaversion.viabackwards.protocol.protocol1_16_1to1_16_2.Protocol1_16_
import com.viaversion.viaversion.api.minecraft.entities.Entity1_16Types; import com.viaversion.viaversion.api.minecraft.entities.Entity1_16Types;
import com.viaversion.viaversion.api.minecraft.entities.Entity1_16_2Types; import com.viaversion.viaversion.api.minecraft.entities.Entity1_16_2Types;
import com.viaversion.viaversion.api.minecraft.entities.EntityType; import com.viaversion.viaversion.api.minecraft.entities.EntityType;
import com.viaversion.viaversion.api.minecraft.item.Item;
import com.viaversion.viaversion.api.minecraft.metadata.MetaType;
import com.viaversion.viaversion.api.minecraft.metadata.Metadata;
import com.viaversion.viaversion.api.minecraft.metadata.types.MetaType1_14; import com.viaversion.viaversion.api.minecraft.metadata.types.MetaType1_14;
import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper; import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper;
import com.viaversion.viaversion.api.type.Type; import com.viaversion.viaversion.api.type.Type;
import com.viaversion.viaversion.api.type.types.Particle;
import com.viaversion.viaversion.api.type.types.version.Types1_14; import com.viaversion.viaversion.api.type.types.version.Types1_14;
import com.viaversion.viaversion.libs.gson.JsonElement;
import com.viaversion.viaversion.libs.opennbt.tag.builtin.CompoundTag; import com.viaversion.viaversion.libs.opennbt.tag.builtin.CompoundTag;
import com.viaversion.viaversion.libs.opennbt.tag.builtin.StringTag; import com.viaversion.viaversion.libs.opennbt.tag.builtin.StringTag;
import com.viaversion.viaversion.protocols.protocol1_16_2to1_16_1.ClientboundPackets1_16_2; import com.viaversion.viaversion.protocols.protocol1_16_2to1_16_1.ClientboundPackets1_16_2;
@ -49,12 +44,12 @@ public class EntityPackets1_16_2 extends EntityRewriter<Protocol1_16_1To1_16_2>
@Override @Override
protected void registerPackets() { protected void registerPackets() {
registerSpawnTrackerWithData(ClientboundPackets1_16_2.SPAWN_ENTITY, Entity1_16_2Types.FALLING_BLOCK); registerTrackerWithData(ClientboundPackets1_16_2.SPAWN_ENTITY, Entity1_16_2Types.FALLING_BLOCK);
registerSpawnTracker(ClientboundPackets1_16_2.SPAWN_MOB); registerSpawnTracker(ClientboundPackets1_16_2.SPAWN_MOB);
registerExtraTracker(ClientboundPackets1_16_2.SPAWN_EXPERIENCE_ORB, Entity1_16_2Types.EXPERIENCE_ORB); registerTracker(ClientboundPackets1_16_2.SPAWN_EXPERIENCE_ORB, Entity1_16_2Types.EXPERIENCE_ORB);
registerExtraTracker(ClientboundPackets1_16_2.SPAWN_PAINTING, Entity1_16_2Types.PAINTING); registerTracker(ClientboundPackets1_16_2.SPAWN_PAINTING, Entity1_16_2Types.PAINTING);
registerExtraTracker(ClientboundPackets1_16_2.SPAWN_PLAYER, Entity1_16_2Types.PLAYER); registerTracker(ClientboundPackets1_16_2.SPAWN_PLAYER, Entity1_16_2Types.PLAYER);
registerEntityDestroy(ClientboundPackets1_16_2.DESTROY_ENTITIES); registerRemoveEntities(ClientboundPackets1_16_2.DESTROY_ENTITIES);
registerMetadataRewriter(ClientboundPackets1_16_2.ENTITY_METADATA, Types1_14.METADATA_LIST); registerMetadataRewriter(ClientboundPackets1_16_2.ENTITY_METADATA, Types1_14.METADATA_LIST);
protocol.registerClientbound(ClientboundPackets1_16_2.JOIN_GAME, new PacketRemapper() { protocol.registerClientbound(ClientboundPackets1_16_2.JOIN_GAME, new PacketRemapper() {
@ -109,39 +104,17 @@ public class EntityPackets1_16_2 extends EntityRewriter<Protocol1_16_1To1_16_2>
@Override @Override
protected void registerRewrites() { protected void registerRewrites() {
registerMetaHandler().handle(e -> { registerMetaTypeHandler(MetaType1_14.Slot, MetaType1_14.BlockID, MetaType1_14.PARTICLE, MetaType1_14.OptChat);
Metadata meta = e.getData();
MetaType type = meta.getMetaType();
if (type == MetaType1_14.Slot) {
meta.setValue(protocol.getBlockItemPackets().handleItemToClient((Item) meta.getValue()));
} else if (type == MetaType1_14.BlockID) {
meta.setValue(protocol.getMappingData().getNewBlockStateId((int) meta.getValue()));
} else if (type == MetaType1_14.OptChat) {
JsonElement text = meta.getCastedValue();
if (text != null) {
protocol.getTranslatableRewriter().processText(text);
}
} else if (type == MetaType1_14.PARTICLE) {
rewriteParticle((Particle) meta.getValue());
}
return meta;
});
mapTypes(Entity1_16_2Types.values(), Entity1_16Types.class); mapTypes(Entity1_16_2Types.values(), Entity1_16Types.class);
mapEntity(Entity1_16_2Types.PIGLIN_BRUTE, Entity1_16_2Types.PIGLIN).jsonName("Piglin Brute"); mapEntityTypeWithData(Entity1_16_2Types.PIGLIN_BRUTE, Entity1_16_2Types.PIGLIN).jsonName("Piglin Brute");
registerMetaHandler().filter(Entity1_16_2Types.ABSTRACT_PIGLIN, true).handle(meta -> { filter().filterFamily(Entity1_16_2Types.ABSTRACT_PIGLIN).index(15).toIndex(16);
if (meta.getIndex() == 15) { filter().filterFamily(Entity1_16_2Types.ABSTRACT_PIGLIN).index(16).toIndex(15);
meta.getData().setId(16);
} else if (meta.getIndex() == 16) {
meta.getData().setId(15);
}
return meta.getData();
});
} }
@Override @Override
protected EntityType getTypeFromId(int typeId) { public EntityType typeFromId(int typeId) {
return Entity1_16_2Types.getTypeFromId(typeId); return Entity1_16_2Types.getTypeFromId(typeId);
} }
} }

Datei anzeigen

@ -24,9 +24,11 @@ import com.viaversion.viabackwards.api.rewriters.TranslatableRewriter;
import com.viaversion.viabackwards.protocol.protocol1_16_4to1_17.packets.BlockItemPackets1_17; import com.viaversion.viabackwards.protocol.protocol1_16_4to1_17.packets.BlockItemPackets1_17;
import com.viaversion.viabackwards.protocol.protocol1_16_4to1_17.packets.EntityPackets1_17; import com.viaversion.viabackwards.protocol.protocol1_16_4to1_17.packets.EntityPackets1_17;
import com.viaversion.viaversion.api.connection.UserConnection; import com.viaversion.viaversion.api.connection.UserConnection;
import com.viaversion.viaversion.api.minecraft.entities.Entity1_17Types;
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper; import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper; import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper;
import com.viaversion.viaversion.api.type.Type; import com.viaversion.viaversion.api.type.Type;
import com.viaversion.viaversion.data.entity.EntityTrackerBase;
import com.viaversion.viaversion.libs.fastutil.ints.IntArrayList; import com.viaversion.viaversion.libs.fastutil.ints.IntArrayList;
import com.viaversion.viaversion.libs.fastutil.ints.IntList; import com.viaversion.viaversion.libs.fastutil.ints.IntList;
import com.viaversion.viaversion.protocols.protocol1_16_2to1_16_1.ClientboundPackets1_16_2; import com.viaversion.viaversion.protocols.protocol1_16_2to1_16_1.ClientboundPackets1_16_2;
@ -79,7 +81,7 @@ public class Protocol1_16_4To1_17 extends BackwardsProtocol<ClientboundPackets1_
soundRewriter.registerNamedSound(ClientboundPackets1_17.NAMED_SOUND); soundRewriter.registerNamedSound(ClientboundPackets1_17.NAMED_SOUND);
soundRewriter.registerStopSound(ClientboundPackets1_17.STOP_SOUND); soundRewriter.registerStopSound(ClientboundPackets1_17.STOP_SOUND);
TagRewriter tagRewriter = new TagRewriter(this, entityPackets::getOldEntityId); TagRewriter tagRewriter = new TagRewriter(this, entityPackets::newEntityId);
registerClientbound(ClientboundPackets1_17.TAGS, new PacketRemapper() { registerClientbound(ClientboundPackets1_17.TAGS, new PacketRemapper() {
@Override @Override
public void registerMap() { public void registerMap() {
@ -137,7 +139,7 @@ public class Protocol1_16_4To1_17 extends BackwardsProtocol<ClientboundPackets1_
} }
}); });
new StatisticsRewriter(this, entityPackets::getOldEntityId).register(ClientboundPackets1_17.STATISTICS); new StatisticsRewriter(this, entityPackets::newEntityId).register(ClientboundPackets1_17.STATISTICS);
registerClientbound(ClientboundPackets1_17.RESOURCE_PACK, new PacketRemapper() { registerClientbound(ClientboundPackets1_17.RESOURCE_PACK, new PacketRemapper() {
@Override @Override
@ -225,9 +227,10 @@ public class Protocol1_16_4To1_17 extends BackwardsProtocol<ClientboundPackets1_
@Override @Override
public void init(UserConnection user) { public void init(UserConnection user) {
initEntityTracker(user); user.addEntityTracker(this.getClass(), new EntityTrackerBase(user, Entity1_17Types.PLAYER));
} }
@Override
public BlockItemPackets1_17 getBlockItemPackets() { public BlockItemPackets1_17 getBlockItemPackets() {
return blockItemPackets; return blockItemPackets;
} }

Datei anzeigen

@ -17,11 +17,11 @@
*/ */
package com.viaversion.viabackwards.protocol.protocol1_16_4to1_17.packets; package com.viaversion.viabackwards.protocol.protocol1_16_4to1_17.packets;
import com.viaversion.viabackwards.api.entities.storage.EntityTracker;
import com.viaversion.viabackwards.api.rewriters.MapColorRewriter; import com.viaversion.viabackwards.api.rewriters.MapColorRewriter;
import com.viaversion.viabackwards.api.rewriters.TranslatableRewriter; import com.viaversion.viabackwards.api.rewriters.TranslatableRewriter;
import com.viaversion.viabackwards.protocol.protocol1_16_4to1_17.Protocol1_16_4To1_17; import com.viaversion.viabackwards.protocol.protocol1_16_4to1_17.Protocol1_16_4To1_17;
import com.viaversion.viabackwards.protocol.protocol1_16_4to1_17.data.MapColorRewrites; import com.viaversion.viabackwards.protocol.protocol1_16_4to1_17.data.MapColorRewrites;
import com.viaversion.viaversion.api.data.entity.EntityTracker;
import com.viaversion.viaversion.api.minecraft.BlockChangeRecord; import com.viaversion.viaversion.api.minecraft.BlockChangeRecord;
import com.viaversion.viaversion.api.minecraft.chunks.Chunk; import com.viaversion.viaversion.api.minecraft.chunks.Chunk;
import com.viaversion.viaversion.api.minecraft.chunks.ChunkSection; import com.viaversion.viaversion.api.minecraft.chunks.ChunkSection;
@ -143,8 +143,8 @@ public class BlockItemPackets1_17 extends com.viaversion.viabackwards.api.rewrit
map(Type.VAR_INT); // Z map(Type.VAR_INT); // Z
map(Type.BOOLEAN); // Trust edges map(Type.BOOLEAN); // Trust edges
handler(wrapper -> { handler(wrapper -> {
EntityTracker tracker = wrapper.user().get(EntityTracker.class); EntityTracker tracker = wrapper.user().getEntityTracker(Protocol1_16_4To1_17.class);
int startFromSection = Math.max(0, -(tracker.getCurrentMinY() >> 4)); int startFromSection = Math.max(0, -(tracker.currentMinY() >> 4));
long[] skyLightMask = wrapper.read(Type.LONG_ARRAY_PRIMITIVE); long[] skyLightMask = wrapper.read(Type.LONG_ARRAY_PRIMITIVE);
long[] blockLightMask = wrapper.read(Type.LONG_ARRAY_PRIMITIVE); long[] blockLightMask = wrapper.read(Type.LONG_ARRAY_PRIMITIVE);
@ -158,8 +158,8 @@ public class BlockItemPackets1_17 extends com.viaversion.viabackwards.api.rewrit
wrapper.write(Type.VAR_INT, cutLightMask(emptySkyLightMask, startFromSection)); wrapper.write(Type.VAR_INT, cutLightMask(emptySkyLightMask, startFromSection));
wrapper.write(Type.VAR_INT, cutLightMask(emptyBlockLightMask, startFromSection)); wrapper.write(Type.VAR_INT, cutLightMask(emptyBlockLightMask, startFromSection));
writeLightArrays(wrapper, BitSet.valueOf(skyLightMask), cutSkyLightMask, startFromSection, tracker.getCurrentWorldSectionHeight()); writeLightArrays(wrapper, BitSet.valueOf(skyLightMask), cutSkyLightMask, startFromSection, tracker.currentWorldSectionHeight());
writeLightArrays(wrapper, BitSet.valueOf(blockLightMask), cutBlockLightMask, startFromSection, tracker.getCurrentWorldSectionHeight()); writeLightArrays(wrapper, BitSet.valueOf(blockLightMask), cutBlockLightMask, startFromSection, tracker.currentWorldSectionHeight());
}); });
} }
@ -242,14 +242,14 @@ public class BlockItemPackets1_17 extends com.viaversion.viabackwards.api.rewrit
@Override @Override
public void registerMap() { public void registerMap() {
handler(wrapper -> { handler(wrapper -> {
EntityTracker tracker = wrapper.user().get(EntityTracker.class); EntityTracker tracker = wrapper.user().getEntityTracker(Protocol1_16_4To1_17.class);
int currentWorldSectionHeight = tracker.getCurrentWorldSectionHeight(); int currentWorldSectionHeight = tracker.currentWorldSectionHeight();
Chunk chunk = wrapper.read(new Chunk1_17Type(currentWorldSectionHeight)); Chunk chunk = wrapper.read(new Chunk1_17Type(currentWorldSectionHeight));
wrapper.write(new Chunk1_16_2Type(), chunk); wrapper.write(new Chunk1_16_2Type(), chunk);
// Cut sections // Cut sections
int startFromSection = Math.max(0, -(tracker.getCurrentMinY() >> 4)); int startFromSection = Math.max(0, -(tracker.currentMinY() >> 4));
chunk.setBiomeData(Arrays.copyOfRange(chunk.getBiomeData(), startFromSection * 64, (startFromSection * 64) + 1024)); chunk.setBiomeData(Arrays.copyOfRange(chunk.getBiomeData(), startFromSection * 64, (startFromSection * 64) + 1024));
chunk.setBitmask(cutMask(chunk.getChunkMask(), startFromSection, false)); chunk.setBitmask(cutMask(chunk.getChunkMask(), startFromSection, false));

Datei anzeigen

@ -23,16 +23,13 @@ import com.viaversion.viabackwards.protocol.protocol1_16_4to1_17.Protocol1_16_4T
import com.viaversion.viaversion.api.minecraft.entities.Entity1_16_2Types; import com.viaversion.viaversion.api.minecraft.entities.Entity1_16_2Types;
import com.viaversion.viaversion.api.minecraft.entities.Entity1_17Types; import com.viaversion.viaversion.api.minecraft.entities.Entity1_17Types;
import com.viaversion.viaversion.api.minecraft.entities.EntityType; import com.viaversion.viaversion.api.minecraft.entities.EntityType;
import com.viaversion.viaversion.api.minecraft.item.Item;
import com.viaversion.viaversion.api.minecraft.metadata.MetaType; import com.viaversion.viaversion.api.minecraft.metadata.MetaType;
import com.viaversion.viaversion.api.minecraft.metadata.Metadata;
import com.viaversion.viaversion.api.minecraft.metadata.types.MetaType1_14; import com.viaversion.viaversion.api.minecraft.metadata.types.MetaType1_14;
import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper; import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper;
import com.viaversion.viaversion.api.type.Type; import com.viaversion.viaversion.api.type.Type;
import com.viaversion.viaversion.api.type.types.Particle; import com.viaversion.viaversion.api.type.types.Particle;
import com.viaversion.viaversion.api.type.types.version.Types1_14; import com.viaversion.viaversion.api.type.types.version.Types1_14;
import com.viaversion.viaversion.api.type.types.version.Types1_17; import com.viaversion.viaversion.api.type.types.version.Types1_17;
import com.viaversion.viaversion.libs.gson.JsonElement;
import com.viaversion.viaversion.libs.opennbt.tag.builtin.CompoundTag; import com.viaversion.viaversion.libs.opennbt.tag.builtin.CompoundTag;
import com.viaversion.viaversion.libs.opennbt.tag.builtin.IntTag; import com.viaversion.viaversion.libs.opennbt.tag.builtin.IntTag;
import com.viaversion.viaversion.libs.opennbt.tag.builtin.ListTag; import com.viaversion.viaversion.libs.opennbt.tag.builtin.ListTag;
@ -49,11 +46,11 @@ public class EntityPackets1_17 extends EntityRewriter<Protocol1_16_4To1_17> {
@Override @Override
protected void registerPackets() { protected void registerPackets() {
registerSpawnTrackerWithData(ClientboundPackets1_17.SPAWN_ENTITY, Entity1_16_2Types.FALLING_BLOCK); registerTrackerWithData(ClientboundPackets1_17.SPAWN_ENTITY, Entity1_16_2Types.FALLING_BLOCK);
registerSpawnTracker(ClientboundPackets1_17.SPAWN_MOB); registerSpawnTracker(ClientboundPackets1_17.SPAWN_MOB);
registerExtraTracker(ClientboundPackets1_17.SPAWN_EXPERIENCE_ORB, Entity1_16_2Types.EXPERIENCE_ORB); registerTracker(ClientboundPackets1_17.SPAWN_EXPERIENCE_ORB, Entity1_16_2Types.EXPERIENCE_ORB);
registerExtraTracker(ClientboundPackets1_17.SPAWN_PAINTING, Entity1_16_2Types.PAINTING); registerTracker(ClientboundPackets1_17.SPAWN_PAINTING, Entity1_16_2Types.PAINTING);
registerExtraTracker(ClientboundPackets1_17.SPAWN_PLAYER, Entity1_16_2Types.PLAYER); registerTracker(ClientboundPackets1_17.SPAWN_PLAYER, Entity1_16_2Types.PLAYER);
registerMetadataRewriter(ClientboundPackets1_17.ENTITY_METADATA, Types1_17.METADATA_LIST, Types1_14.METADATA_LIST); registerMetadataRewriter(ClientboundPackets1_17.ENTITY_METADATA, Types1_17.METADATA_LIST, Types1_14.METADATA_LIST);
protocol.registerClientbound(ClientboundPackets1_17.REMOVE_ENTITY, ClientboundPackets1_16_2.DESTROY_ENTITIES, new PacketRemapper() { protocol.registerClientbound(ClientboundPackets1_17.REMOVE_ENTITY, ClientboundPackets1_16_2.DESTROY_ENTITIES, new PacketRemapper() {
@ -61,7 +58,7 @@ public class EntityPackets1_17 extends EntityRewriter<Protocol1_16_4To1_17> {
public void registerMap() { public void registerMap() {
handler(wrapper -> { handler(wrapper -> {
int entityId = wrapper.read(Type.VAR_INT); int entityId = wrapper.read(Type.VAR_INT);
getEntityTracker(wrapper.user()).removeEntity(entityId); tracker(wrapper.user()).removeEntity(entityId);
// Write into single value array // Write into single value array
int[] array = {entityId}; int[] array = {entityId};
@ -87,7 +84,7 @@ public class EntityPackets1_17 extends EntityRewriter<Protocol1_16_4To1_17> {
} }
}); });
handler(getTrackerHandler(Entity1_16_2Types.PLAYER, Type.INT)); handler(getTrackerHandler(Entity1_16_2Types.PLAYER, Type.INT));
handler(getWorldDataTracker(1)); handler(worldDataTrackerHandler(1));
handler(wrapper -> { handler(wrapper -> {
CompoundTag registry = wrapper.get(Type.NBT, 0); CompoundTag registry = wrapper.get(Type.NBT, 0);
CompoundTag biomeRegsitry = registry.get("minecraft:worldgen/biome"); CompoundTag biomeRegsitry = registry.get("minecraft:worldgen/biome");
@ -116,10 +113,8 @@ public class EntityPackets1_17 extends EntityRewriter<Protocol1_16_4To1_17> {
@Override @Override
public void registerMap() { public void registerMap() {
map(Type.NBT); // Dimension data map(Type.NBT); // Dimension data
handler(getWorldDataTracker(0)); handler(worldDataTrackerHandler(0));
handler(wrapper -> { handler(wrapper -> reduceExtendedHeight(wrapper.get(Type.NBT, 0), true));
reduceExtendedHeight(wrapper.get(Type.NBT, 0), true);
});
} }
}); });
@ -157,21 +152,11 @@ public class EntityPackets1_17 extends EntityRewriter<Protocol1_16_4To1_17> {
@Override @Override
protected void registerRewrites() { protected void registerRewrites() {
registerMetaHandler().handle(e -> { filter().handler((event, meta) -> {
Metadata meta = e.getData(); meta.setMetaType(MetaType1_14.byId(meta.metaType().typeId()));
meta.setMetaType(MetaType1_14.byId(meta.getMetaType().getTypeID()));
MetaType type = meta.getMetaType(); MetaType type = meta.metaType();
if (type == MetaType1_14.Slot) { if (type == MetaType1_14.PARTICLE) {
meta.setValue(protocol.getBlockItemPackets().handleItemToClient((Item) meta.getValue()));
} else if (type == MetaType1_14.BlockID) {
meta.setValue(protocol.getMappingData().getNewBlockStateId((int) meta.getValue()));
} else if (type == MetaType1_14.OptChat) {
JsonElement text = meta.getCastedValue();
if (text != null) {
protocol.getTranslatableRewriter().processText(text);
}
} else if (type == MetaType1_14.PARTICLE) {
Particle particle = (Particle) meta.getValue(); Particle particle = (Particle) meta.getValue();
if (particle.getId() == 15) { // Dust / Dust Transition if (particle.getId() == 15) { // Dust / Dust Transition
// Remove transition target color values 4-6 // Remove transition target color values 4-6
@ -180,55 +165,46 @@ public class EntityPackets1_17 extends EntityRewriter<Protocol1_16_4To1_17> {
// No nice mapping possible without tracking entity positions and doing particle tasks // No nice mapping possible without tracking entity positions and doing particle tasks
particle.setId(0); particle.setId(0);
particle.getArguments().clear(); particle.getArguments().clear();
return meta; return;
} }
rewriteParticle(particle); rewriteParticle(particle);
} else if (type == MetaType1_14.Pose) { } else if (type == MetaType1_14.Pose) {
// Goat LONG_JUMP added at 6 // Goat LONG_JUMP added at 6
int pose = meta.getCastedValue(); int pose = meta.value();
if (pose == 6) { if (pose == 6) {
meta.setValue(1); // FALL_FLYING meta.setValue(1); // FALL_FLYING
} else if (pose > 6) { } else if (pose > 6) {
meta.setValue(pose - 1); meta.setValue(pose - 1);
} }
} }
return meta;
}); });
// Particles have already been handled
registerMetaTypeHandler(MetaType1_14.Slot, MetaType1_14.BlockID, null, MetaType1_14.OptChat);
mapTypes(Entity1_17Types.values(), Entity1_16_2Types.class); mapTypes(Entity1_17Types.values(), Entity1_16_2Types.class);
registerMetaHandler().filter(Entity1_17Types.AXOLOTL, 17).removed(); filter().type(Entity1_17Types.AXOLOTL).cancel(17);
registerMetaHandler().filter(Entity1_17Types.AXOLOTL, 18).removed(); filter().type(Entity1_17Types.AXOLOTL).cancel(18);
registerMetaHandler().filter(Entity1_17Types.AXOLOTL, 19).removed(); filter().type(Entity1_17Types.AXOLOTL).cancel(19);
registerMetaHandler().filter(Entity1_17Types.GLOW_SQUID, 16).removed(); filter().type(Entity1_17Types.GLOW_SQUID).cancel(16);
registerMetaHandler().filter(Entity1_17Types.GOAT, 17).removed(); filter().type(Entity1_17Types.GOAT).cancel(17);
mapEntity(Entity1_17Types.AXOLOTL, Entity1_17Types.TROPICAL_FISH).jsonName("Axolotl"); mapEntityTypeWithData(Entity1_17Types.AXOLOTL, Entity1_17Types.TROPICAL_FISH).jsonName("Axolotl");
mapEntity(Entity1_17Types.GOAT, Entity1_17Types.SHEEP).jsonName("Goat"); mapEntityTypeWithData(Entity1_17Types.GOAT, Entity1_17Types.SHEEP).jsonName("Goat");
mapEntity(Entity1_17Types.GLOW_SQUID, Entity1_17Types.SQUID).jsonName("Glow Squid"); mapEntityTypeWithData(Entity1_17Types.GLOW_SQUID, Entity1_17Types.SQUID).jsonName("Glow Squid");
mapEntity(Entity1_17Types.GLOW_ITEM_FRAME, Entity1_17Types.ITEM_FRAME); mapEntityTypeWithData(Entity1_17Types.GLOW_ITEM_FRAME, Entity1_17Types.ITEM_FRAME);
registerMetaHandler().filter(Entity1_17Types.SHULKER).handle(meta -> { filter().type(Entity1_17Types.SHULKER).addIndex(17); // TODO Handle attachment pos?
if (meta.getIndex() >= 17) {
meta.getData().setId(meta.getIndex() + 1); // TODO Handle attachment pos?
}
return meta.getData();
});
registerMetaHandler().filter(7).removed(); // Ticks frozen filter().removeIndex(7); // Ticks frozen
registerMetaHandler().handle(meta -> {
if (meta.getIndex() > 7) {
meta.getData().setId(meta.getIndex() - 1);
}
return meta.getData();
});
} }
@Override @Override
protected EntityType getTypeFromId(int typeId) { public EntityType typeFromId(int typeId) {
return Entity1_17Types.getTypeFromId(typeId); return Entity1_17Types.getTypeFromId(typeId);
} }

Datei anzeigen

@ -24,10 +24,12 @@ import com.viaversion.viabackwards.api.rewriters.SoundRewriter;
import com.viaversion.viabackwards.protocol.protocol1_9_4to1_10.packets.BlockItemPackets1_10; import com.viaversion.viabackwards.protocol.protocol1_9_4to1_10.packets.BlockItemPackets1_10;
import com.viaversion.viabackwards.protocol.protocol1_9_4to1_10.packets.EntityPackets1_10; import com.viaversion.viabackwards.protocol.protocol1_9_4to1_10.packets.EntityPackets1_10;
import com.viaversion.viaversion.api.connection.UserConnection; import com.viaversion.viaversion.api.connection.UserConnection;
import com.viaversion.viaversion.api.minecraft.entities.Entity1_10Types;
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper; import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper; import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper;
import com.viaversion.viaversion.api.protocol.remapper.ValueTransformer; import com.viaversion.viaversion.api.protocol.remapper.ValueTransformer;
import com.viaversion.viaversion.api.type.Type; import com.viaversion.viaversion.api.type.Type;
import com.viaversion.viaversion.data.entity.EntityTrackerBase;
import com.viaversion.viaversion.protocols.protocol1_9_3to1_9_1_2.ClientboundPackets1_9_3; import com.viaversion.viaversion.protocols.protocol1_9_3to1_9_1_2.ClientboundPackets1_9_3;
import com.viaversion.viaversion.protocols.protocol1_9_3to1_9_1_2.ServerboundPackets1_9_3; import com.viaversion.viaversion.protocols.protocol1_9_3to1_9_1_2.ServerboundPackets1_9_3;
import com.viaversion.viaversion.protocols.protocol1_9_3to1_9_1_2.storage.ClientWorld; import com.viaversion.viaversion.protocols.protocol1_9_3to1_9_1_2.storage.ClientWorld;
@ -94,7 +96,7 @@ public class Protocol1_9_4To1_10 extends BackwardsProtocol<ClientboundPackets1_9
user.put(new ClientWorld(user)); user.put(new ClientWorld(user));
} }
initEntityTracker(user); user.addEntityTracker(this.getClass(), new EntityTrackerBase(user, Entity1_10Types.EntityType.PLAYER));
} }
public EntityPackets1_10 getEntityPackets() { public EntityPackets1_10 getEntityPackets() {

Datei anzeigen

@ -23,7 +23,6 @@ import com.viaversion.viabackwards.protocol.protocol1_9_4to1_10.Protocol1_9_4To1
import com.viaversion.viaversion.api.minecraft.BlockChangeRecord; import com.viaversion.viaversion.api.minecraft.BlockChangeRecord;
import com.viaversion.viaversion.api.minecraft.chunks.Chunk; import com.viaversion.viaversion.api.minecraft.chunks.Chunk;
import com.viaversion.viaversion.api.minecraft.item.Item; import com.viaversion.viaversion.api.minecraft.item.Item;
import com.viaversion.viaversion.api.minecraft.metadata.Metadata;
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper; import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
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.protocol.remapper.PacketRemapper;
@ -138,13 +137,9 @@ public class BlockItemPackets1_10 extends LegacyBlockItemRewriter<Protocol1_9_4T
}); });
// Rewrite metadata items // Rewrite metadata items
protocol.getEntityPackets().registerMetaHandler().handle(e -> { protocol.getEntityPackets().filter().handler((event, meta) -> {
Metadata data = e.getData(); if (meta.metaType().type().equals(Type.ITEM)) // Is Item
meta.setValue(handleItemToClient((Item) meta.getValue()));
if (data.getMetaType().getType().equals(Type.ITEM)) // Is Item
data.setValue(handleItemToClient((Item) data.getValue()));
return data;
}); });
// Particle // Particle

Datei anzeigen

@ -19,8 +19,7 @@
package com.viaversion.viabackwards.protocol.protocol1_9_4to1_10.packets; package com.viaversion.viabackwards.protocol.protocol1_9_4to1_10.packets;
import com.viaversion.viabackwards.api.entities.storage.EntityData; import com.viaversion.viabackwards.api.entities.storage.EntityData;
import com.viaversion.viabackwards.api.entities.storage.MetaStorage; import com.viaversion.viabackwards.api.entities.storage.WrappedMetadata;
import com.viaversion.viabackwards.api.exceptions.RemovedValueException;
import com.viaversion.viabackwards.api.rewriters.LegacyEntityRewriter; import com.viaversion.viabackwards.api.rewriters.LegacyEntityRewriter;
import com.viaversion.viabackwards.protocol.protocol1_9_4to1_10.Protocol1_9_4To1_10; import com.viaversion.viabackwards.protocol.protocol1_9_4to1_10.Protocol1_9_4To1_10;
import com.viaversion.viabackwards.utils.Block; import com.viaversion.viabackwards.utils.Block;
@ -37,6 +36,7 @@ import com.viaversion.viaversion.api.type.Type;
import com.viaversion.viaversion.api.type.types.version.Types1_9; import com.viaversion.viaversion.api.type.types.version.Types1_9;
import com.viaversion.viaversion.protocols.protocol1_9_3to1_9_1_2.ClientboundPackets1_9_3; import com.viaversion.viaversion.protocols.protocol1_9_3to1_9_1_2.ClientboundPackets1_9_3;
import java.util.List;
import java.util.Optional; import java.util.Optional;
public class EntityPackets1_10 extends LegacyEntityRewriter<Protocol1_9_4To1_10> { public class EntityPackets1_10 extends LegacyEntityRewriter<Protocol1_9_4To1_10> {
@ -74,7 +74,7 @@ public class EntityPackets1_10 extends LegacyEntityRewriter<Protocol1_9_4To1_10>
int objType = objectData & 4095; int objType = objectData & 4095;
int data = objectData >> 12 & 15; int data = objectData >> 12 & 15;
Block block = getProtocol().getBlockItemPackets().handleBlock(objType, data); Block block = protocol.getBlockItemPackets().handleBlock(objType, data);
if (block == null) if (block == null)
return; return;
@ -85,8 +85,8 @@ public class EntityPackets1_10 extends LegacyEntityRewriter<Protocol1_9_4To1_10>
} }
}); });
registerExtraTracker(ClientboundPackets1_9_3.SPAWN_EXPERIENCE_ORB, Entity1_10Types.EntityType.EXPERIENCE_ORB); registerTracker(ClientboundPackets1_9_3.SPAWN_EXPERIENCE_ORB, Entity1_10Types.EntityType.EXPERIENCE_ORB);
registerExtraTracker(ClientboundPackets1_9_3.SPAWN_GLOBAL_ENTITY, Entity1_10Types.EntityType.WEATHER); registerTracker(ClientboundPackets1_9_3.SPAWN_GLOBAL_ENTITY, Entity1_10Types.EntityType.WEATHER);
protocol.registerClientbound(ClientboundPackets1_9_3.SPAWN_MOB, new PacketRemapper() { protocol.registerClientbound(ClientboundPackets1_9_3.SPAWN_MOB, new PacketRemapper() {
@Override @Override
@ -113,35 +113,25 @@ public class EntityPackets1_10 extends LegacyEntityRewriter<Protocol1_9_4To1_10>
@Override @Override
public void handle(PacketWrapper wrapper) throws Exception { public void handle(PacketWrapper wrapper) throws Exception {
int entityId = wrapper.get(Type.VAR_INT, 0); int entityId = wrapper.get(Type.VAR_INT, 0);
EntityType type = getEntityType(wrapper.user(), entityId); EntityType type = tracker(wrapper.user()).entityType(entityId);
MetaStorage storage = new MetaStorage(wrapper.get(Types1_9.METADATA_LIST, 0)); List<Metadata> metadata = wrapper.get(Types1_9.METADATA_LIST, 0);
handleMeta( handleMetadata(wrapper.get(Type.VAR_INT, 0), metadata, wrapper.user());
wrapper.user(),
wrapper.get(Type.VAR_INT, 0),
storage
);
EntityData entityData = getEntityData(type); EntityData entityData = entityDataForType(type);
if (entityData != null) { if (entityData != null) {
wrapper.set(Type.UNSIGNED_BYTE, 0, (short) entityData.getReplacementId()); WrappedMetadata storage = new WrappedMetadata(metadata);
wrapper.set(Type.UNSIGNED_BYTE, 0, (short) entityData.replacementId());
if (entityData.hasBaseMeta()) if (entityData.hasBaseMeta())
entityData.getDefaultMeta().createMeta(storage); entityData.defaultMeta().createMeta(storage);
} }
// Rewrite Metadata
wrapper.set(
Types1_9.METADATA_LIST,
0,
storage.getMetaDataList()
);
} }
}); });
} }
}); });
registerExtraTracker(ClientboundPackets1_9_3.SPAWN_PAINTING, Entity1_10Types.EntityType.PAINTING); registerTracker(ClientboundPackets1_9_3.SPAWN_PAINTING, Entity1_10Types.EntityType.PAINTING);
registerJoinGame(ClientboundPackets1_9_3.JOIN_GAME, Entity1_10Types.EntityType.PLAYER); registerJoinGame(ClientboundPackets1_9_3.JOIN_GAME, Entity1_10Types.EntityType.PLAYER);
registerRespawn(ClientboundPackets1_9_3.RESPAWN); registerRespawn(ClientboundPackets1_9_3.RESPAWN);
@ -161,61 +151,43 @@ public class EntityPackets1_10 extends LegacyEntityRewriter<Protocol1_9_4To1_10>
} }
}); });
registerEntityDestroy(ClientboundPackets1_9_3.DESTROY_ENTITIES); registerRemoveEntities(ClientboundPackets1_9_3.DESTROY_ENTITIES);
registerMetadataRewriter(ClientboundPackets1_9_3.ENTITY_METADATA, Types1_9.METADATA_LIST); registerMetadataRewriter(ClientboundPackets1_9_3.ENTITY_METADATA, Types1_9.METADATA_LIST);
} }
@Override @Override
protected void registerRewrites() { protected void registerRewrites() {
mapEntity(Entity1_10Types.EntityType.POLAR_BEAR, Entity1_10Types.EntityType.SHEEP).mobName("Polar Bear"); mapEntityTypeWithData(Entity1_10Types.EntityType.POLAR_BEAR, Entity1_10Types.EntityType.SHEEP).mobName("Polar Bear");
// Change the sheep color when the polar bear is standing up (index 13 -> Standing up) // Change the sheep color when the polar bear is standing up (index 13 -> Standing up)
registerMetaHandler().filter(Entity1_10Types.EntityType.POLAR_BEAR, 13).handle((e -> { filter().type(Entity1_10Types.EntityType.POLAR_BEAR).index(13).handler((event, meta) -> {
Metadata data = e.getData(); boolean b = (boolean) meta.getValue();
boolean b = (boolean) data.getValue();
data.setMetaType(MetaType1_9.Byte); meta.setMetaType(MetaType1_9.Byte);
data.setValue(b ? (byte) (14 & 0x0F) : (byte) (0)); meta.setValue(b ? (byte) (14 & 0x0F) : (byte) (0));
});
return data;
}));
// Handle husk (index 13 -> Zombie Type) // Handle husk (index 13 -> Zombie Type)
registerMetaHandler().filter(Entity1_10Types.EntityType.ZOMBIE, 13).handle(e -> { filter().type(Entity1_10Types.EntityType.ZOMBIE).index(13).handler((event, meta) -> {
Metadata data = e.getData(); if ((int) meta.getValue() == 6) { // Is type Husk
meta.setValue(0);
if ((int) data.getValue() == 6) // Is type Husk }
data.setValue(0);
return data;
}); });
// Handle Stray (index 12 -> Skeleton Type) // Handle Stray (index 12 -> Skeleton Type)
registerMetaHandler().filter(Entity1_10Types.EntityType.SKELETON, 12).handle(e -> { filter().type(Entity1_10Types.EntityType.SKELETON).index(12).handler((event, meta) -> {
Metadata data = e.getData(); if ((int) meta.getValue() == 2) {
meta.setValue(0); // Change to default skeleton
if ((int) data.getValue() == 2) }
data.setValue(0); // Change to default skeleton
return data;
}); });
// Handle the missing NoGravity tag for every metadata // Handle the missing NoGravity tag for every metadata
registerMetaHandler().handle(e -> { filter().removeIndex(5);
Metadata data = e.getData();
if (data.getId() == 5)
throw RemovedValueException.EX;
else if (data.getId() >= 5)
data.setId(data.getId() - 1);
return data;
});
} }
@Override @Override
protected EntityType getTypeFromId(int typeId) { public EntityType typeFromId(int typeId) {
return Entity1_10Types.getTypeFromId(typeId, false); return Entity1_10Types.getTypeFromId(typeId, false);
} }