Mirror von
https://github.com/ViaVersion/ViaVersion.git
synchronisiert 2024-11-03 14:50:30 +01:00
Some MetadataRewriter cleanup
Dieser Commit ist enthalten in:
Ursprung
da77c32a0d
Commit
31f7bde35f
@ -16,10 +16,7 @@ import us.myles.ViaVersion.api.type.Type;
|
|||||||
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.Collections;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
public abstract class MetadataRewriter {
|
public abstract class MetadataRewriter {
|
||||||
@ -35,16 +32,9 @@ public abstract class MetadataRewriter {
|
|||||||
|
|
||||||
public final void handleMetadata(int entityId, List<Metadata> metadatas, UserConnection connection) {
|
public final void handleMetadata(int entityId, List<Metadata> metadatas, UserConnection connection) {
|
||||||
EntityType type = connection.get(entityTrackerClass).getEntity(entityId);
|
EntityType type = connection.get(entityTrackerClass).getEntity(entityId);
|
||||||
Map<Integer, Metadata> metadataMap = new HashMap<>(metadatas.size());
|
|
||||||
for (Metadata metadata : metadatas) {
|
|
||||||
metadataMap.put(metadata.getId(), metadata);
|
|
||||||
}
|
|
||||||
|
|
||||||
metadataMap = Collections.unmodifiableMap(metadataMap);
|
|
||||||
|
|
||||||
for (Metadata metadata : new ArrayList<>(metadatas)) {
|
for (Metadata metadata : new ArrayList<>(metadatas)) {
|
||||||
try {
|
try {
|
||||||
handleMetadata(entityId, type, metadata, metadatas, metadataMap, connection);
|
handleMetadata(entityId, type, metadata, metadatas, connection);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
metadatas.remove(metadata);
|
metadatas.remove(metadata);
|
||||||
if (!Via.getConfig().isSuppressMetadataErrors() || Via.getManager().isDebug()) {
|
if (!Via.getConfig().isSuppressMetadataErrors() || Via.getManager().isDebug()) {
|
||||||
@ -270,20 +260,49 @@ public abstract class MetadataRewriter {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ---------------------------------------------------------------------------
|
||||||
|
|
||||||
protected abstract EntityType getTypeFromId(int type);
|
protected abstract EntityType getTypeFromId(int type);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the entity type from the given id.
|
||||||
|
* From 1.14 and onwards, this is the same exact value as {@link #getTypeFromId(int)}.
|
||||||
|
*
|
||||||
|
* @param type entity type id
|
||||||
|
* @return EntityType from id
|
||||||
|
*/
|
||||||
protected EntityType getObjectTypeFromId(int type) {
|
protected EntityType getObjectTypeFromId(int type) {
|
||||||
return getTypeFromId(type);
|
return getTypeFromId(type);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the mapped entitiy (or the same if it has not changed).
|
||||||
|
*
|
||||||
|
* @param oldId old entity id
|
||||||
|
* @return mapped entity id
|
||||||
|
*/
|
||||||
public int getNewEntityId(int oldId) {
|
public int getNewEntityId(int oldId) {
|
||||||
return typeMapping != null ? typeMapping.getOrDefault(oldId, oldId) : oldId;
|
return typeMapping != null ? typeMapping.getOrDefault(oldId, oldId) : oldId;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void handleMetadata(int entityId, EntityType type, Metadata metadata, List<Metadata> metadatas, UserConnection connection) throws Exception {
|
/**
|
||||||
}
|
* To be overridden to handle metadata.
|
||||||
|
*
|
||||||
|
* @param entityId entity id
|
||||||
|
* @param type entity type, or null if not tracked
|
||||||
|
* @param metadata current metadata
|
||||||
|
* @param metadatas full, mutable list of metadata
|
||||||
|
* @param connection user connection
|
||||||
|
*/
|
||||||
|
protected abstract void handleMetadata(int entityId, @Nullable EntityType type, Metadata metadata, List<Metadata> metadatas, UserConnection connection) throws Exception;
|
||||||
|
|
||||||
protected void handleMetadata(int entityId, EntityType type, Metadata metadata, List<Metadata> metadatas, Map<Integer, Metadata> metadataMap, UserConnection connection) throws Exception {
|
@Nullable
|
||||||
handleMetadata(entityId, type, metadata, metadatas, connection);
|
protected Metadata getMetaByIndex(int index, List<Metadata> metadataList) {
|
||||||
|
for (Metadata metadata : metadataList) {
|
||||||
|
if (metadata.getId() == index) {
|
||||||
|
return metadata;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -6,7 +6,8 @@ import us.myles.ViaVersion.api.type.Type;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public abstract class MetaListTypeTemplate extends Type<List<Metadata>> {
|
public abstract class MetaListTypeTemplate extends Type<List<Metadata>> {
|
||||||
public MetaListTypeTemplate() {
|
|
||||||
|
protected MetaListTypeTemplate() {
|
||||||
super("MetaData List", List.class);
|
super("MetaData List", List.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5,6 +5,7 @@ import us.myles.ViaVersion.api.minecraft.metadata.Metadata;
|
|||||||
import us.myles.ViaVersion.api.type.Type;
|
import us.myles.ViaVersion.api.type.Type;
|
||||||
|
|
||||||
public abstract class ModernMetaListType extends AbstractMetaListType {
|
public abstract class ModernMetaListType extends AbstractMetaListType {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void writeEnd(final Type<Metadata> type, final ByteBuf buffer) throws Exception {
|
protected void writeEnd(final Type<Metadata> type, final ByteBuf buffer) throws Exception {
|
||||||
type.write(buffer, null);
|
type.write(buffer, null);
|
||||||
|
@ -15,7 +15,6 @@ import us.myles.ViaVersion.protocols.protocol1_11to1_10.Protocol1_11To1_10;
|
|||||||
import us.myles.ViaVersion.protocols.protocol1_11to1_10.storage.EntityTracker1_11;
|
import us.myles.ViaVersion.protocols.protocol1_11to1_10.storage.EntityTracker1_11;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
|
||||||
public class MetadataRewriter1_11To1_10 extends MetadataRewriter {
|
public class MetadataRewriter1_11To1_10 extends MetadataRewriter {
|
||||||
@ -25,7 +24,7 @@ public class MetadataRewriter1_11To1_10 extends MetadataRewriter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void handleMetadata(int entityId, us.myles.ViaVersion.api.entities.EntityType type, Metadata metadata, List<Metadata> metadatas, Map<Integer, Metadata> metadataMap, UserConnection connection) {
|
protected void handleMetadata(int entityId, us.myles.ViaVersion.api.entities.EntityType type, Metadata metadata, List<Metadata> metadatas, UserConnection connection) {
|
||||||
if (metadata.getValue() instanceof Item) {
|
if (metadata.getValue() instanceof Item) {
|
||||||
// Apply rewrite
|
// Apply rewrite
|
||||||
EntityIdRewriter.toClientItem((Item) metadata.getValue());
|
EntityIdRewriter.toClientItem((Item) metadata.getValue());
|
||||||
@ -100,15 +99,14 @@ public class MetadataRewriter1_11To1_10 extends MetadataRewriter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (type.is(EntityType.ARMOR_STAND) && Via.getConfig().isHologramPatch()) {
|
if (type.is(EntityType.ARMOR_STAND) && Via.getConfig().isHologramPatch()) {
|
||||||
Optional<Metadata> flags = Optional.ofNullable(metadataMap.get(11));
|
Metadata flags = getMetaByIndex(11, metadatas);
|
||||||
Optional<Metadata> customName = Optional.ofNullable(metadataMap.get(2));
|
Metadata customName = getMetaByIndex(2, metadatas);
|
||||||
Optional<Metadata> customNameVisible = Optional.ofNullable(metadataMap.get(3));
|
Metadata customNameVisible = getMetaByIndex(3, metadatas);
|
||||||
if (metadata.getId() == 0 && flags.isPresent() && customName.isPresent() && customNameVisible.isPresent()) {
|
if (metadata.getId() == 0 && flags != null && customName != null && customNameVisible != null) {
|
||||||
Metadata meta = flags.get();
|
|
||||||
byte data = (byte) metadata.getValue();
|
byte data = (byte) metadata.getValue();
|
||||||
// Check invisible | Check small | Check if custom name is empty | Check if custom name visible is true
|
// Check invisible | Check small | Check if custom name is empty | Check if custom name visible is true
|
||||||
if ((data & 0x20) == 0x20 && ((byte) meta.getValue() & 0x01) == 0x01
|
if ((data & 0x20) == 0x20 && ((byte) flags.getValue() & 0x01) == 0x01
|
||||||
&& !((String) customName.get().getValue()).isEmpty() && (boolean) customNameVisible.get().getValue()) {
|
&& !((String) customName.getValue()).isEmpty() && (boolean) customNameVisible.getValue()) {
|
||||||
EntityTracker1_11 tracker = connection.get(EntityTracker1_11.class);
|
EntityTracker1_11 tracker = connection.get(EntityTracker1_11.class);
|
||||||
if (!tracker.isHologram(entityId)) {
|
if (!tracker.isHologram(entityId)) {
|
||||||
tracker.addHologram(entityId);
|
tracker.addHologram(entityId);
|
||||||
|
@ -17,7 +17,6 @@ import us.myles.ViaVersion.protocols.protocol1_13to1_12_2.packets.WorldPackets;
|
|||||||
import us.myles.ViaVersion.protocols.protocol1_13to1_12_2.storage.EntityTracker1_13;
|
import us.myles.ViaVersion.protocols.protocol1_13to1_12_2.storage.EntityTracker1_13;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
public class MetadataRewriter1_13To1_12_2 extends MetadataRewriter {
|
public class MetadataRewriter1_13To1_12_2 extends MetadataRewriter {
|
||||||
|
|
||||||
@ -26,7 +25,7 @@ public class MetadataRewriter1_13To1_12_2 extends MetadataRewriter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void handleMetadata(int entityId, EntityType type, Metadata metadata, List<Metadata> metadatas, Map<Integer, Metadata> metadataMap, UserConnection connection) throws Exception {
|
protected void handleMetadata(int entityId, EntityType type, Metadata metadata, List<Metadata> metadatas, UserConnection connection) throws Exception {
|
||||||
// Handle new MetaTypes
|
// Handle new MetaTypes
|
||||||
if (metadata.getMetaType().getTypeID() > 4) {
|
if (metadata.getMetaType().getTypeID() > 4) {
|
||||||
metadata.setMetaType(MetaType1_13.byId(metadata.getMetaType().getTypeID() + 1));
|
metadata.setMetaType(MetaType1_13.byId(metadata.getMetaType().getTypeID() + 1));
|
||||||
@ -80,8 +79,10 @@ public class MetadataRewriter1_13To1_12_2 extends MetadataRewriter {
|
|||||||
if (type == Entity1_13Types.EntityType.AREA_EFFECT_CLOUD) {
|
if (type == Entity1_13Types.EntityType.AREA_EFFECT_CLOUD) {
|
||||||
if (metadata.getId() == 9) {
|
if (metadata.getId() == 9) {
|
||||||
int particleId = (int) metadata.getValue();
|
int particleId = (int) metadata.getValue();
|
||||||
int parameter1 = metadataMap.containsKey(10) ? (int) metadataMap.get(10).getValue() : 0;
|
Metadata parameter1Meta = getMetaByIndex(10, metadatas);
|
||||||
int parameter2 = metadataMap.containsKey(11) ? (int) metadataMap.get(11).getValue() : 0;
|
Metadata parameter2Meta = getMetaByIndex(11, metadatas);
|
||||||
|
int parameter1 = parameter1Meta != null ? (int) parameter1Meta.getValue() : 0;
|
||||||
|
int parameter2 = parameter2Meta != null ? (int) parameter2Meta.getValue() : 0;
|
||||||
|
|
||||||
Particle particle = ParticleRewriter.rewriteParticle(particleId, new Integer[]{parameter1, parameter2});
|
Particle particle = ParticleRewriter.rewriteParticle(particleId, new Integer[]{parameter1, parameter2});
|
||||||
if (particle != null && particle.getId() != -1) {
|
if (particle != null && particle.getId() != -1) {
|
||||||
|
@ -16,7 +16,6 @@ import us.myles.ViaVersion.protocols.protocol1_9to1_8.Protocol1_9To1_8;
|
|||||||
import us.myles.ViaVersion.protocols.protocol1_9to1_8.storage.EntityTracker1_9;
|
import us.myles.ViaVersion.protocols.protocol1_9to1_8.storage.EntityTracker1_9;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
public class MetadataRewriter1_9To1_8 extends MetadataRewriter {
|
public class MetadataRewriter1_9To1_8 extends MetadataRewriter {
|
||||||
@ -26,7 +25,7 @@ public class MetadataRewriter1_9To1_8 extends MetadataRewriter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void handleMetadata(int entityId, EntityType type, Metadata metadata, List<Metadata> metadatas, Map<Integer, Metadata> metadataMap, UserConnection connection) throws Exception {
|
protected void handleMetadata(int entityId, EntityType type, Metadata metadata, List<Metadata> metadatas, UserConnection connection) throws Exception {
|
||||||
MetaIndex metaIndex = MetaIndex.searchIndex(type, metadata.getId());
|
MetaIndex metaIndex = MetaIndex.searchIndex(type, metadata.getId());
|
||||||
if (metaIndex == null) {
|
if (metaIndex == null) {
|
||||||
throw new Exception("Could not find valid metadata");
|
throw new Exception("Could not find valid metadata");
|
||||||
@ -43,7 +42,8 @@ public class MetadataRewriter1_9To1_8 extends MetadataRewriter {
|
|||||||
if (type == Entity1_10Types.EntityType.ENDERMAN && metaIndex.getNewType() == MetaType1_9.BlockID) {
|
if (type == Entity1_10Types.EntityType.ENDERMAN && metaIndex.getNewType() == MetaType1_9.BlockID) {
|
||||||
if (metaIndex.getOldType() == MetaType1_8.Short) {
|
if (metaIndex.getOldType() == MetaType1_8.Short) {
|
||||||
int id = (Short) metadata.getValue();
|
int id = (Short) metadata.getValue();
|
||||||
int data = metadataMap.containsKey(17) ? (Byte) metadataMap.get(17).getValue() : 0;
|
Metadata meta = getMetaByIndex(17, metadatas);
|
||||||
|
int data = meta != null ? (Byte) meta.getValue() : 0;
|
||||||
int combined = (id << 4) | (data & 0xF);
|
int combined = (id << 4) | (data & 0xF);
|
||||||
metadata.setValue(combined);
|
metadata.setValue(combined);
|
||||||
} else {
|
} else {
|
||||||
|
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren