Mirror von
https://github.com/ViaVersion/ViaBackwards.git
synchronisiert 2024-12-27 08:30:10 +01:00
Remap tridents, fix falling dust and lingering potions (#140)
* Fix falling dust particle for 1.9 clients * Fix concurrent meta addition / lingering potions Fixes #125 * Remap trident and trident sounds
Dieser Commit ist enthalten in:
Ursprung
781ef86af6
Commit
e6059845aa
@ -14,5 +14,6 @@ import nl.matsv.viabackwards.api.exceptions.RemovedValueException;
|
|||||||
import us.myles.ViaVersion.api.minecraft.metadata.Metadata;
|
import us.myles.ViaVersion.api.minecraft.metadata.Metadata;
|
||||||
|
|
||||||
public interface MetaHandler {
|
public interface MetaHandler {
|
||||||
|
|
||||||
Metadata handle(MetaHandlerEvent e) throws RemovedValueException;
|
Metadata handle(MetaHandlerEvent e) throws RemovedValueException;
|
||||||
}
|
}
|
||||||
|
@ -10,33 +10,43 @@
|
|||||||
|
|
||||||
package nl.matsv.viabackwards.api.entities.meta;
|
package nl.matsv.viabackwards.api.entities.meta;
|
||||||
|
|
||||||
import lombok.AllArgsConstructor;
|
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
import nl.matsv.viabackwards.api.entities.storage.EntityTracker;
|
import nl.matsv.viabackwards.api.entities.storage.EntityTracker;
|
||||||
import nl.matsv.viabackwards.api.entities.storage.MetaStorage;
|
import nl.matsv.viabackwards.api.entities.storage.MetaStorage;
|
||||||
import us.myles.ViaVersion.api.data.UserConnection;
|
import us.myles.ViaVersion.api.data.UserConnection;
|
||||||
import us.myles.ViaVersion.api.minecraft.metadata.Metadata;
|
import us.myles.ViaVersion.api.minecraft.metadata.Metadata;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
|
||||||
@Getter
|
@Getter
|
||||||
@AllArgsConstructor
|
@RequiredArgsConstructor
|
||||||
public class MetaHandlerEvent {
|
public class MetaHandlerEvent {
|
||||||
private UserConnection user;
|
private final UserConnection user;
|
||||||
private EntityTracker.StoredEntity entity;
|
private final EntityTracker.StoredEntity entity;
|
||||||
private int index = -1;
|
private final int index;
|
||||||
private Metadata data;
|
private final Metadata data;
|
||||||
@Getter
|
private final MetaStorage storage;
|
||||||
private MetaStorage storage;
|
private List<Metadata> extraData;
|
||||||
|
|
||||||
public boolean hasData() {
|
public boolean hasData() {
|
||||||
return data != null;
|
return data != null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Optional<Metadata> getMetaByIndex(int index) {
|
public Optional<Metadata> getMetaByIndex(int index) {
|
||||||
for (Metadata meta : getStorage().getMetaDataList())
|
for (Metadata meta : storage.getMetaDataList())
|
||||||
if (index == meta.getId())
|
if (index == meta.getId())
|
||||||
return Optional.of(meta);
|
return Optional.of(meta);
|
||||||
return Optional.empty();
|
return Optional.empty();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void clearExtraData() {
|
||||||
|
extraData = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void createMeta(Metadata metadata) {
|
||||||
|
(extraData != null ? extraData : (extraData = new ArrayList<>())).add(metadata);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -120,16 +120,31 @@ public abstract class EntityRewriter<T extends BackwardsProtocol> extends Rewrit
|
|||||||
List<Metadata> newList = new CopyOnWriteArrayList<>();
|
List<Metadata> newList = new CopyOnWriteArrayList<>();
|
||||||
|
|
||||||
for (MetaHandlerSettings settings : metaHandlers) {
|
for (MetaHandlerSettings settings : metaHandlers) {
|
||||||
|
List<Metadata> extraData = null;
|
||||||
for (Metadata md : storage.getMetaDataList()) {
|
for (Metadata md : storage.getMetaDataList()) {
|
||||||
Metadata nmd = md;
|
Metadata nmd = md;
|
||||||
|
MetaHandlerEvent event = null;
|
||||||
try {
|
try {
|
||||||
if (settings.isGucci(type, nmd))
|
if (settings.isGucci(type, nmd)) {
|
||||||
nmd = settings.getHandler().handle(new MetaHandlerEvent(user, entity, nmd.getId(), nmd, storage));
|
event = new MetaHandlerEvent(user, entity, nmd.getId(), nmd, storage);
|
||||||
|
nmd = settings.getHandler().handle(event);
|
||||||
|
|
||||||
if (nmd == null)
|
if (event.getExtraData() != null) {
|
||||||
|
(extraData != null ? extraData : (extraData = new ArrayList<>())).addAll(event.getExtraData());
|
||||||
|
event.clearExtraData();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (nmd == null) {
|
||||||
throw new RemovedValueException();
|
throw new RemovedValueException();
|
||||||
|
}
|
||||||
|
|
||||||
newList.add(nmd);
|
newList.add(nmd);
|
||||||
} catch (RemovedValueException ignored) {
|
} catch (RemovedValueException e) {
|
||||||
|
// add the additionally created data here in case of an interruption
|
||||||
|
if (event != null && event.getExtraData() != null) {
|
||||||
|
(extraData != null ? extraData : (extraData = new ArrayList<>())).addAll(event.getExtraData());
|
||||||
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
if (Via.getManager().isDebug()) {
|
if (Via.getManager().isDebug()) {
|
||||||
Logger log = ViaBackwards.getPlatform().getLogger();
|
Logger log = ViaBackwards.getPlatform().getLogger();
|
||||||
@ -139,12 +154,18 @@ public abstract class EntityRewriter<T extends BackwardsProtocol> extends Rewrit
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
storage.setMetaDataList(new ArrayList<>(newList));
|
|
||||||
|
List<Metadata> newData = new ArrayList<>(newList);
|
||||||
|
if (extraData != null) {
|
||||||
|
newData.addAll(extraData);
|
||||||
|
}
|
||||||
|
|
||||||
|
storage.setMetaDataList(newData);
|
||||||
newList.clear();
|
newList.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Handle Entity Name
|
// Handle Entity Name
|
||||||
Optional<Metadata> opMd = storage.get(getDisplayNameIndex());
|
Optional<Metadata> opMd = storage.get(displayNameIndex);
|
||||||
if (opMd.isPresent()) {
|
if (opMd.isPresent()) {
|
||||||
Optional<EntityData> opEd = getEntityData(type);
|
Optional<EntityData> opEd = getEntityData(type);
|
||||||
if (opEd.isPresent()) {
|
if (opEd.isPresent()) {
|
||||||
@ -152,7 +173,7 @@ public abstract class EntityRewriter<T extends BackwardsProtocol> extends Rewrit
|
|||||||
EntityData entData = opEd.get();
|
EntityData entData = opEd.get();
|
||||||
if (entData.getMobName() != null &&
|
if (entData.getMobName() != null &&
|
||||||
(data.getValue() == null || ((String) data.getValue()).isEmpty()) &&
|
(data.getValue() == null || ((String) data.getValue()).isEmpty()) &&
|
||||||
data.getMetaType().getTypeID() == getDisplayNameMetaType().getTypeID()) {
|
data.getMetaType().getTypeID() == displayNameMetaType.getTypeID()) {
|
||||||
String mobName = entData.getMobName();
|
String mobName = entData.getMobName();
|
||||||
if (isDisplayNameJson) {
|
if (isDisplayNameJson) {
|
||||||
mobName = ChatRewriter.legacyTextToJson(mobName);
|
mobName = ChatRewriter.legacyTextToJson(mobName);
|
||||||
|
@ -17,6 +17,16 @@ public class SoundMapping {
|
|||||||
|
|
||||||
Arrays.fill(sounds, (short) -1);
|
Arrays.fill(sounds, (short) -1);
|
||||||
mapIdentifiers(sounds, mapping1_13.getAsJsonArray("sounds"), mapping1_12.getAsJsonArray("sounds"));
|
mapIdentifiers(sounds, mapping1_13.getAsJsonArray("sounds"), mapping1_12.getAsJsonArray("sounds"));
|
||||||
|
|
||||||
|
// Simulate some trident sounds
|
||||||
|
sounds[628] = 138; // throw -> shoot
|
||||||
|
sounds[629] = 137; // hit -> hit_player
|
||||||
|
sounds[630] = 137; // hit_ground -> hit
|
||||||
|
sounds[631] = 139; // riptide_1 -> shoot
|
||||||
|
sounds[632] = 139; // riptide_2
|
||||||
|
sounds[633] = 139; // riptide_3
|
||||||
|
sounds[634] = 139; // throw -> shoot
|
||||||
|
// no fitting thunder remap
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void mapIdentifiers(short[] output, JsonArray oldIdentifiers, JsonArray newIdentifiers) {
|
private static void mapIdentifiers(short[] output, JsonArray oldIdentifiers, JsonArray newIdentifiers) {
|
||||||
|
@ -12,6 +12,7 @@ import nl.matsv.viabackwards.api.rewriters.EntityRewriter;
|
|||||||
import nl.matsv.viabackwards.protocol.protocol1_12_2to1_13.Protocol1_12_2To1_13;
|
import nl.matsv.viabackwards.protocol.protocol1_12_2to1_13.Protocol1_12_2To1_13;
|
||||||
import nl.matsv.viabackwards.protocol.protocol1_12_2to1_13.data.EntityTypeMapping;
|
import nl.matsv.viabackwards.protocol.protocol1_12_2to1_13.data.EntityTypeMapping;
|
||||||
import nl.matsv.viabackwards.protocol.protocol1_12_2to1_13.data.PaintingMapping;
|
import nl.matsv.viabackwards.protocol.protocol1_12_2to1_13.data.PaintingMapping;
|
||||||
|
import nl.matsv.viabackwards.protocol.protocol1_12_2to1_13.data.ParticleMapping;
|
||||||
import us.myles.ViaVersion.api.PacketWrapper;
|
import us.myles.ViaVersion.api.PacketWrapper;
|
||||||
import us.myles.ViaVersion.api.minecraft.item.Item;
|
import us.myles.ViaVersion.api.minecraft.item.Item;
|
||||||
import us.myles.ViaVersion.api.minecraft.metadata.Metadata;
|
import us.myles.ViaVersion.api.minecraft.metadata.Metadata;
|
||||||
@ -26,6 +27,7 @@ import us.myles.ViaVersion.protocols.protocol1_13to1_12_2.ChatRewriter;
|
|||||||
import us.myles.ViaVersion.protocols.protocol1_13to1_12_2.data.Particle;
|
import us.myles.ViaVersion.protocols.protocol1_13to1_12_2.data.Particle;
|
||||||
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.List;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
|
||||||
public class EntityPackets1_13 extends EntityRewriter<Protocol1_12_2To1_13> {
|
public class EntityPackets1_13 extends EntityRewriter<Protocol1_12_2To1_13> {
|
||||||
@ -65,13 +67,16 @@ public class EntityPackets1_13 extends EntityRewriter<Protocol1_12_2To1_13> {
|
|||||||
handler(new PacketHandler() {
|
handler(new PacketHandler() {
|
||||||
@Override
|
@Override
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
public void handle(PacketWrapper wrapper) throws Exception {
|
||||||
Optional<EntityType1_13.ObjectType> type = EntityType1_13.ObjectType.findById(wrapper.get(Type.BYTE, 0));
|
Optional<EntityType1_13.ObjectType> optionalType = EntityType1_13.ObjectType.findById(wrapper.get(Type.BYTE, 0));
|
||||||
if (type.isPresent() && type.get() == EntityType1_13.ObjectType.FALLING_BLOCK) {
|
if (!optionalType.isPresent()) return;
|
||||||
|
|
||||||
|
final EntityType1_13.ObjectType type = optionalType.get();
|
||||||
|
if (type == EntityType1_13.ObjectType.FALLING_BLOCK) {
|
||||||
int blockState = wrapper.get(Type.INT, 0);
|
int blockState = wrapper.get(Type.INT, 0);
|
||||||
int combined = BlockItemPackets1_13.toOldId(blockState);
|
int combined = BlockItemPackets1_13.toOldId(blockState);
|
||||||
combined = ((combined >> 4) & 0xFFF) | ((combined & 0xF) << 12);
|
combined = ((combined >> 4) & 0xFFF) | ((combined & 0xF) << 12);
|
||||||
wrapper.set(Type.INT, 0, combined);
|
wrapper.set(Type.INT, 0, combined);
|
||||||
} else if (type.isPresent() && type.get() == EntityType1_13.ObjectType.ITEM_FRAME) {
|
} else if (type == EntityType1_13.ObjectType.ITEM_FRAME) {
|
||||||
int data = wrapper.get(Type.INT, 0);
|
int data = wrapper.get(Type.INT, 0);
|
||||||
switch (data) {
|
switch (data) {
|
||||||
case 3:
|
case 3:
|
||||||
@ -85,6 +90,8 @@ public class EntityPackets1_13 extends EntityRewriter<Protocol1_12_2To1_13> {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
wrapper.set(Type.INT, 0, data);
|
wrapper.set(Type.INT, 0, data);
|
||||||
|
} else if (type == EntityType1_13.ObjectType.TRIDENT) {
|
||||||
|
wrapper.set(Type.BYTE, 0, (byte) EntityType1_13.ObjectType.TIPPED_ARROW.getId());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -347,15 +354,12 @@ public class EntityPackets1_13 extends EntityRewriter<Protocol1_12_2To1_13> {
|
|||||||
handler(new PacketHandler() {
|
handler(new PacketHandler() {
|
||||||
@Override
|
@Override
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
public void handle(PacketWrapper wrapper) throws Exception {
|
||||||
wrapper.set(
|
final List<Metadata> metaDataList = handleMeta(
|
||||||
Types1_12.METADATA_LIST,
|
wrapper.user(),
|
||||||
0,
|
wrapper.get(Type.VAR_INT, 0),
|
||||||
handleMeta(
|
new MetaStorage(wrapper.get(Types1_12.METADATA_LIST, 0))
|
||||||
wrapper.user(),
|
).getMetaDataList();
|
||||||
wrapper.get(Type.VAR_INT, 0),
|
wrapper.set(Types1_12.METADATA_LIST, 0, metaDataList);
|
||||||
new MetaStorage(wrapper.get(Types1_12.METADATA_LIST, 0))
|
|
||||||
).getMetaDataList()
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -385,7 +389,6 @@ public class EntityPackets1_13 extends EntityRewriter<Protocol1_12_2To1_13> {
|
|||||||
// Turtle
|
// Turtle
|
||||||
regEntType(EntityType.TURTLE, EntityType.OCELOT).mobName("Turtle");
|
regEntType(EntityType.TURTLE, EntityType.OCELOT).mobName("Turtle");
|
||||||
|
|
||||||
|
|
||||||
// Rewrite Meta types
|
// Rewrite Meta types
|
||||||
registerMetaHandler().handle(e -> {
|
registerMetaHandler().handle(e -> {
|
||||||
Metadata meta = e.getData();
|
Metadata meta = e.getData();
|
||||||
@ -482,15 +485,14 @@ public class EntityPackets1_13 extends EntityRewriter<Protocol1_12_2To1_13> {
|
|||||||
Metadata meta = e.getData();
|
Metadata meta = e.getData();
|
||||||
Particle particle = (Particle) meta.getValue();
|
Particle particle = (Particle) meta.getValue();
|
||||||
|
|
||||||
// TODO Rewrite particle ids
|
ParticleMapping.ParticleData data = ParticleMapping.getMapping(particle.getId());
|
||||||
e.getStorage().add(new Metadata(9, MetaType1_12.VarInt, 0));
|
e.createMeta(new Metadata(9, MetaType1_12.VarInt, data.getHistoryId()));
|
||||||
e.getStorage().add(new Metadata(10, MetaType1_12.VarInt, 0));
|
e.createMeta(new Metadata(10, MetaType1_12.VarInt, 0)); //TODO particle data
|
||||||
e.getStorage().add(new Metadata(11, MetaType1_12.VarInt, 0));
|
e.createMeta(new Metadata(11, MetaType1_12.VarInt, 0)); //TODO particle data
|
||||||
|
|
||||||
throw new RemovedValueException();
|
throw new RemovedValueException();
|
||||||
});
|
});
|
||||||
|
|
||||||
// TODO REWRITE BLOCKS IN MINECART
|
// TODO REWRITE BLOCKS IN MINECART
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -223,6 +223,33 @@ public class BlockItemPackets1_10 extends BlockItemRewriter<Protocol1_9_4To1_10>
|
|||||||
|
|
||||||
return data;
|
return data;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Particle
|
||||||
|
protocol.registerOutgoing(State.PLAY, 0x22, 0x22, new PacketRemapper() {
|
||||||
|
@Override
|
||||||
|
public void registerMap() {
|
||||||
|
map(Type.INT);
|
||||||
|
map(Type.BOOLEAN);
|
||||||
|
map(Type.FLOAT);
|
||||||
|
map(Type.FLOAT);
|
||||||
|
map(Type.FLOAT);
|
||||||
|
map(Type.FLOAT);
|
||||||
|
map(Type.FLOAT);
|
||||||
|
map(Type.FLOAT);
|
||||||
|
map(Type.FLOAT);
|
||||||
|
map(Type.INT);
|
||||||
|
|
||||||
|
handler(new PacketHandler() {
|
||||||
|
@Override
|
||||||
|
public void handle(PacketWrapper wrapper) throws Exception {
|
||||||
|
int id = wrapper.get(Type.INT, 0);
|
||||||
|
if (id == 46) { // new falling_dust
|
||||||
|
wrapper.set(Type.INT, 0, 38); // -> block_dust
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren