Mirror von
https://github.com/ViaVersion/ViaBackwards.git
synchronisiert 2024-12-26 16:12:43 +01:00
Some metadata and entity rewriter cleanup
Dieser Commit ist enthalten in:
Ursprung
cf5e5590ad
Commit
004d0d2b23
@ -77,19 +77,17 @@ public class MetaHandlerSettings {
|
|||||||
return filterFamily;
|
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) {
|
public boolean isGucci(EntityType type, Metadata metadata) {
|
||||||
if (!hasHandler()) return false;
|
if (!hasHandler()) return false;
|
||||||
|
if (hasType() && (filterFamily ? !type.isOrHasParent(filterType) : !filterType.is(type))) {
|
||||||
if (hasType()) {
|
return false;
|
||||||
if (filterFamily) {
|
|
||||||
if (!type.isOrHasParent(filterType)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (!filterType.is(type)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return !hasIndex() || metadata.getId() == filterIndex;
|
return !hasIndex() || metadata.getId() == filterIndex;
|
||||||
}
|
}
|
||||||
|
@ -18,7 +18,8 @@ public class RemovedValueException extends IOException {
|
|||||||
* May be cached since it is never actually printed, only checked.
|
* May be cached since it is never actually printed, only checked.
|
||||||
*/
|
*/
|
||||||
public static final RemovedValueException EX = new RemovedValueException() {
|
public static final RemovedValueException EX = new RemovedValueException() {
|
||||||
public synchronized Throwable fillInStackTrace() {
|
@Override
|
||||||
|
public Throwable fillInStackTrace() {
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -24,10 +24,12 @@ import us.myles.ViaVersion.packets.State;
|
|||||||
import us.myles.ViaVersion.protocols.protocol1_9_3to1_9_1_2.storage.ClientWorld;
|
import us.myles.ViaVersion.protocols.protocol1_9_3to1_9_1_2.storage.ClientWorld;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Comparator;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Entity rewriter base class.
|
* Entity rewriter base class.
|
||||||
@ -138,60 +140,52 @@ public abstract class EntityRewriterBase<T extends BackwardsProtocol> extends Re
|
|||||||
}
|
}
|
||||||
|
|
||||||
EntityType type = storedEntity.getType();
|
EntityType type = storedEntity.getType();
|
||||||
List<Metadata> newList = new ArrayList<>();
|
|
||||||
for (MetaHandlerSettings settings : metaHandlers) {
|
for (MetaHandlerSettings settings : metaHandlers) {
|
||||||
List<Metadata> extraData = null;
|
List<Metadata> newData = new ArrayList<>();
|
||||||
for (Metadata md : storage.getMetaDataList()) {
|
for (Metadata meta : storage.getMetaDataList()) {
|
||||||
Metadata nmd = md;
|
|
||||||
MetaHandlerEvent event = null;
|
MetaHandlerEvent event = null;
|
||||||
try {
|
try {
|
||||||
if (settings.isGucci(type, nmd)) {
|
Metadata modifiedMeta = meta;
|
||||||
event = new MetaHandlerEvent(user, storedEntity, nmd.getId(), nmd, storage);
|
if (settings.isGucci(type, meta)) {
|
||||||
nmd = settings.getHandler().handle(event);
|
event = new MetaHandlerEvent(user, storedEntity, meta.getId(), meta, storage);
|
||||||
|
modifiedMeta = settings.getHandler().handle(event);
|
||||||
|
|
||||||
if (event.getExtraData() != null) {
|
if (event.getExtraData() != null) {
|
||||||
(extraData != null ? extraData : (extraData = new ArrayList<>())).addAll(event.getExtraData());
|
newData.addAll(event.getExtraData());
|
||||||
event.clearExtraData();
|
event.clearExtraData();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (nmd == null) {
|
if (modifiedMeta == null) {
|
||||||
throw RemovedValueException.EX;
|
throw RemovedValueException.EX;
|
||||||
}
|
}
|
||||||
|
|
||||||
newList.add(nmd);
|
newData.add(modifiedMeta);
|
||||||
} catch (RemovedValueException e) {
|
} catch (RemovedValueException e) {
|
||||||
// add the additionally created data here in case of an interruption
|
// Add the additionally created data here in case of an interruption
|
||||||
if (event != null && event.getExtraData() != null) {
|
if (event != null && event.getExtraData() != null) {
|
||||||
(extraData != null ? extraData : (extraData = new ArrayList<>())).addAll(event.getExtraData());
|
newData.addAll(event.getExtraData());
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
Logger log = ViaBackwards.getPlatform().getLogger();
|
Logger log = ViaBackwards.getPlatform().getLogger();
|
||||||
log.warning("Unable to handle metadata " + nmd);
|
log.warning("Unable to handle metadata " + meta + " for entity type " + type);
|
||||||
log.warning("Full metadata list " + storage);
|
log.warning(storage.getMetaDataList().stream().sorted(Comparator.comparingInt(Metadata::getId))
|
||||||
|
.map(Metadata::toString).collect(Collectors.joining("\n", "Full metadata list: ", "")));
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
List<Metadata> newData = new ArrayList<>(newList);
|
|
||||||
if (extraData != null) {
|
|
||||||
newData.addAll(extraData);
|
|
||||||
}
|
|
||||||
|
|
||||||
storage.setMetaDataList(newData);
|
storage.setMetaDataList(newData);
|
||||||
newList.clear();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Handle Entity Name
|
// Handle Entity Name
|
||||||
Metadata data = storage.get(displayNameIndex);
|
Metadata data = storage.get(displayNameIndex);
|
||||||
if (data != null) {
|
if (data != null) {
|
||||||
EntityData entityData = getEntityData(type);
|
EntityData entityData = getEntityData(type);
|
||||||
if (entityData != null) {
|
if (entityData != null && entityData.getMobName() != null
|
||||||
if (entityData.getMobName() != null &&
|
&& (data.getValue() == null || ((String) data.getValue()).isEmpty())
|
||||||
(data.getValue() == null || ((String) data.getValue()).isEmpty()) &&
|
&& data.getMetaType().getTypeID() == displayNameMetaType.getTypeID()) {
|
||||||
data.getMetaType().getTypeID() == displayNameMetaType.getTypeID()) {
|
data.setValue(entityData.getMobName());
|
||||||
data.setValue(entityData.getMobName());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -166,26 +166,10 @@ public class EntityPackets1_11 extends LegacyEntityRewriter<Protocol1_10To1_11>
|
|||||||
registerExtraTracker(0x04, Entity1_11Types.EntityType.PAINTING);
|
registerExtraTracker(0x04, Entity1_11Types.EntityType.PAINTING);
|
||||||
|
|
||||||
// Join game
|
// Join game
|
||||||
protocol.registerOutgoing(State.PLAY, 0x23, 0x23, new PacketRemapper() {
|
registerJoinGame(0x23, 0x23, Entity1_11Types.EntityType.PLAYER);
|
||||||
@Override
|
|
||||||
public void registerMap() {
|
|
||||||
map(Type.INT); // 0 - Entity ID
|
|
||||||
map(Type.UNSIGNED_BYTE); // 1 - Gamemode
|
|
||||||
map(Type.INT); // 2 - Dimension
|
|
||||||
|
|
||||||
handler(getTrackerHandler(Entity1_11Types.EntityType.PLAYER, Type.INT));
|
// Respawn Packet
|
||||||
handler(getDimensionHandler(1));
|
registerRespawn(0x33, 0x33);
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// Respawn Packet (save dimension id)
|
|
||||||
protocol.registerOutgoing(State.PLAY, 0x33, 0x33, new PacketRemapper() {
|
|
||||||
@Override
|
|
||||||
public void registerMap() {
|
|
||||||
map(Type.INT); // 0 - Dimension ID
|
|
||||||
handler(getDimensionHandler(0));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// Spawn Player
|
// Spawn Player
|
||||||
protocol.registerOutgoing(State.PLAY, 0x05, 0x05, new PacketRemapper() {
|
protocol.registerOutgoing(State.PLAY, 0x05, 0x05, new PacketRemapper() {
|
||||||
|
@ -165,14 +165,8 @@ public class EntityPackets1_12 extends LegacyEntityRewriter<Protocol1_11_1To1_12
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
// Respawn Packet (save dimension id)
|
// Respawn Packet
|
||||||
protocol.registerOutgoing(State.PLAY, 0x34, 0x33, new PacketRemapper() {
|
registerRespawn(0x34, 0x33);
|
||||||
@Override
|
|
||||||
public void registerMap() {
|
|
||||||
map(Type.INT); // 0 - Dimension ID
|
|
||||||
handler(getDimensionHandler(0));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// Destroy entities
|
// Destroy entities
|
||||||
registerEntityDestroy(0x31, 0x30);
|
registerEntityDestroy(0x31, 0x30);
|
||||||
|
@ -83,26 +83,10 @@ public class EntityPackets1_11_1 extends LegacyEntityRewriter<Protocol1_11To1_11
|
|||||||
registerExtraTracker(0x04, Entity1_11Types.EntityType.PAINTING);
|
registerExtraTracker(0x04, Entity1_11Types.EntityType.PAINTING);
|
||||||
|
|
||||||
// Join game
|
// Join game
|
||||||
protocol.registerOutgoing(State.PLAY, 0x23, 0x23, new PacketRemapper() {
|
registerJoinGame(0x23, 0x23, Entity1_11Types.EntityType.PLAYER);
|
||||||
@Override
|
|
||||||
public void registerMap() {
|
|
||||||
map(Type.INT); // 0 - Entity ID
|
|
||||||
map(Type.UNSIGNED_BYTE); // 1 - Gamemode
|
|
||||||
map(Type.INT); // 2 - Dimension
|
|
||||||
|
|
||||||
handler(getTrackerHandler(Entity1_11Types.EntityType.PLAYER, Type.INT));
|
// Respawn Packet
|
||||||
handler(getDimensionHandler(1));
|
registerRespawn(0x33, 0x33);
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// Respawn Packet (save dimension id)
|
|
||||||
protocol.registerOutgoing(State.PLAY, 0x33, 0x33, new PacketRemapper() {
|
|
||||||
@Override
|
|
||||||
public void registerMap() {
|
|
||||||
map(Type.INT); // 0 - Dimension ID
|
|
||||||
handler(getDimensionHandler(0));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// Spawn Player
|
// Spawn Player
|
||||||
protocol.registerOutgoing(State.PLAY, 0x05, 0x05, new PacketRemapper() {
|
protocol.registerOutgoing(State.PLAY, 0x05, 0x05, new PacketRemapper() {
|
||||||
|
@ -198,19 +198,9 @@ public class EntityPackets1_13 extends LegacyEntityRewriter<Protocol1_12_2To1_13
|
|||||||
});
|
});
|
||||||
|
|
||||||
// Join game
|
// Join game
|
||||||
protocol.out(State.PLAY, 0x25, 0x23, new PacketRemapper() {
|
registerJoinGame(0x25, 0x23, Entity1_13Types.EntityType.PLAYER);
|
||||||
@Override
|
|
||||||
public void registerMap() {
|
|
||||||
map(Type.INT); // 0 - Entity ID
|
|
||||||
map(Type.UNSIGNED_BYTE); // 1 - Gamemode
|
|
||||||
map(Type.INT); // 2 - Dimension
|
|
||||||
|
|
||||||
handler(getTrackerHandler(Entity1_13Types.EntityType.PLAYER, Type.INT));
|
// Respawn Packet
|
||||||
handler(getDimensionHandler(1));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// Respawn Packet (save dimension id)
|
|
||||||
protocol.registerOutgoing(State.PLAY, 0x38, 0x35, new PacketRemapper() {
|
protocol.registerOutgoing(State.PLAY, 0x38, 0x35, new PacketRemapper() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void registerMap() {
|
||||||
|
@ -126,28 +126,10 @@ public class EntityPackets1_13_1 extends LegacyEntityRewriter<Protocol1_13To1_13
|
|||||||
registerExtraTracker(0x04, Entity1_13Types.EntityType.PAINTING);
|
registerExtraTracker(0x04, Entity1_13Types.EntityType.PAINTING);
|
||||||
|
|
||||||
// Join Game
|
// Join Game
|
||||||
protocol.registerOutgoing(State.PLAY, 0x25, 0x25, new PacketRemapper() {
|
registerJoinGame(0x25, 0x25, Entity1_13Types.EntityType.PLAYER);
|
||||||
@Override
|
|
||||||
public void registerMap() {
|
|
||||||
map(Type.INT); // 0 - Entity ID
|
|
||||||
map(Type.UNSIGNED_BYTE); // 1 - Gamemode
|
|
||||||
map(Type.INT); // 2 - Dimension
|
|
||||||
|
|
||||||
handler(getTrackerHandler(Entity1_13Types.EntityType.PLAYER, Type.INT));
|
|
||||||
handler(getDimensionHandler(1));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// Respawn
|
// Respawn
|
||||||
protocol.out(State.PLAY, 0x38, 0x38, new PacketRemapper() {
|
registerRespawn(0x38, 0x38);
|
||||||
@Override
|
|
||||||
public void registerMap() {
|
|
||||||
map(Type.INT); // 0 - Dimension ID\
|
|
||||||
|
|
||||||
// Save dimension
|
|
||||||
handler(getDimensionHandler(0));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// Destroy entities
|
// Destroy entities
|
||||||
registerEntityDestroy(0x35);
|
registerEntityDestroy(0x35);
|
||||||
|
@ -18,7 +18,6 @@ import us.myles.ViaVersion.api.type.Type;
|
|||||||
import us.myles.ViaVersion.api.type.types.Particle;
|
import us.myles.ViaVersion.api.type.types.Particle;
|
||||||
import us.myles.ViaVersion.api.type.types.version.Types1_14;
|
import us.myles.ViaVersion.api.type.types.version.Types1_14;
|
||||||
import us.myles.ViaVersion.packets.State;
|
import us.myles.ViaVersion.packets.State;
|
||||||
import us.myles.ViaVersion.protocols.protocol1_9_3to1_9_1_2.storage.ClientWorld;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
||||||
@ -97,7 +96,7 @@ public class EntityPackets1_15 extends EntityRewriter<Protocol1_14_4To1_15> {
|
|||||||
public void registerMap() {
|
public void registerMap() {
|
||||||
map(Type.INT);
|
map(Type.INT);
|
||||||
map(Type.LONG, Type.NOTHING); // Seed
|
map(Type.LONG, Type.NOTHING); // Seed
|
||||||
handler(wrapper -> wrapper.user().get(ClientWorld.class).setEnvironment(wrapper.get(Type.INT, 0)));
|
handler(getDimensionHandler(0));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -142,26 +142,10 @@ public class EntityPackets1_10 extends LegacyEntityRewriter<Protocol1_9_4To1_10>
|
|||||||
registerExtraTracker(0x04, Entity1_10Types.EntityType.PAINTING);
|
registerExtraTracker(0x04, Entity1_10Types.EntityType.PAINTING);
|
||||||
|
|
||||||
// Join game
|
// Join game
|
||||||
protocol.registerOutgoing(State.PLAY, 0x23, 0x23, new PacketRemapper() {
|
registerJoinGame(0x23, 0x23, Entity1_10Types.EntityType.PLAYER);
|
||||||
@Override
|
|
||||||
public void registerMap() {
|
|
||||||
map(Type.INT); // 0 - Entity ID
|
|
||||||
map(Type.UNSIGNED_BYTE); // 1 - Gamemode
|
|
||||||
map(Type.INT); // 2 - Dimension
|
|
||||||
|
|
||||||
handler(getTrackerHandler(Entity1_10Types.EntityType.PLAYER, Type.INT));
|
// Respawn Packet
|
||||||
handler(getDimensionHandler(1));
|
registerRespawn(0x33, 0x33);
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// Respawn Packet (save dimension id)
|
|
||||||
protocol.registerOutgoing(State.PLAY, 0x33, 0x33, new PacketRemapper() {
|
|
||||||
@Override
|
|
||||||
public void registerMap() {
|
|
||||||
map(Type.INT); // 0 - Dimension ID
|
|
||||||
handler(getDimensionHandler(0));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// Spawn Player
|
// Spawn Player
|
||||||
protocol.registerOutgoing(State.PLAY, 0x05, 0x05, new PacketRemapper() {
|
protocol.registerOutgoing(State.PLAY, 0x05, 0x05, new PacketRemapper() {
|
||||||
|
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren