Merge pull request #1782 from KennyTV/abstraction

20w21a
This commit is contained in:
Myles 2020-05-20 16:18:26 +01:00 committed by GitHub
commit 062d846c37
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 96 additions and 24 deletions

View File

@ -1,21 +1,13 @@
package us.myles.ViaVersion.api.minecraft;
import java.util.HashMap;
import java.util.Map;
public enum Environment {
NORMAL(0),
NETHER(-1),
END(1);
END(1),
CUSTOM(Integer.MAX_VALUE);
private final int id;
private static final Map<Integer, Environment> lookup = new HashMap<>();
static {
for (Environment env : values()) {
lookup.put(env.getId(), env);
}
}
Environment(int id) {
this.id = id;
@ -25,8 +17,28 @@ public enum Environment {
return id;
}
public static Environment getEnvironmentById(int id) {
return lookup.get(id);
switch (id) {
default:
case -1:
return NETHER;
case 0:
return NORMAL;
case 1:
return END;
}
}
public static Environment getEnvironmentById(String id) {
switch (id) {
case "minecraft:the_nether":
return NETHER;
case "minecraft:overworld":
return NORMAL;
case "minecraft:the_end":
return END;
default:
return CUSTOM;
}
}
}

View File

@ -80,7 +80,7 @@ public class ProtocolVersion {
register(v1_15 = new ProtocolVersion(573, "1.15"));
register(v1_15_1 = new ProtocolVersion(575, "1.15.1"));
register(v1_15_2 = new ProtocolVersion(578, "1.15.2"));
register(v1_16 = new ProtocolVersion(717, "1.16"));
register(v1_16 = new ProtocolVersion(718, "1.16"));
register(unknown = new ProtocolVersion(-1, "UNKNOWN"));
}

View File

@ -20,6 +20,7 @@ import java.util.UUID;
public class Protocol1_16To1_15_2 extends Protocol {
public static final UUID ZERO_UUID = new UUID(0, 0);
private TagRewriter tagRewriter;
public Protocol1_16To1_15_2() {
@ -49,6 +50,16 @@ public class Protocol1_16To1_15_2 extends Protocol {
}
});
// Chat Message
registerOutgoing(State.PLAY, 0x0F, 0x0F, new PacketRemapper() {
@Override
public void registerMap() {
map(Type.STRING);
map(Type.BYTE);
handler(wrapper -> wrapper.write(Type.UUID, ZERO_UUID)); // sender uuid
}
});
// Entity Sound Effect
registerOutgoing(State.PLAY, 0x51, 0x51, new PacketRemapper() {
@Override

View File

@ -1,9 +1,14 @@
package us.myles.ViaVersion.protocols.protocol1_16to1_15_2.packets;
import com.github.steveice10.opennbt.tag.builtin.CompoundTag;
import com.github.steveice10.opennbt.tag.builtin.ListTag;
import com.github.steveice10.opennbt.tag.builtin.StringTag;
import us.myles.ViaVersion.api.PacketWrapper;
import us.myles.ViaVersion.api.Via;
import us.myles.ViaVersion.api.entities.Entity1_16Types;
import us.myles.ViaVersion.api.protocol.Protocol;
import us.myles.ViaVersion.api.remapper.PacketRemapper;
import us.myles.ViaVersion.api.remapper.ValueTransformer;
import us.myles.ViaVersion.api.type.Type;
import us.myles.ViaVersion.api.type.types.version.Types1_14;
import us.myles.ViaVersion.packets.State;
@ -15,6 +20,39 @@ import us.myles.ViaVersion.protocols.protocol1_9_3to1_9_1_2.storage.ClientWorld;
public class EntityPackets {
private static final ValueTransformer<Integer, String> DIMENSION_TRANSFORMER = new ValueTransformer<Integer, String>(Type.INT, Type.STRING) {
@Override
public String transform(PacketWrapper wrapper, Integer input) throws Exception {
switch (input) {
case -1:
return "the_nether";
case 0:
return "overworld";
case 1:
return "the_end";
default:
Via.getPlatform().getLogger().warning("Invalid dimension id: " + input);
return "overworld";
}
}
};
private static final CompoundTag DIMENSIONS_TAG = new CompoundTag("");
static {
ListTag list = new ListTag("dimension", CompoundTag.class);
list.add(createDimensionEntry("minecraft:overworld"));
list.add(createDimensionEntry("minecraft:the_nether"));
list.add(createDimensionEntry("minecraft:the_end"));
DIMENSIONS_TAG.put(list);
}
private static CompoundTag createDimensionEntry(String dimension) {
CompoundTag tag = new CompoundTag("");
tag.put(new StringTag("key", dimension));
tag.put(new StringTag("element", dimension));
return tag;
}
public static void register(Protocol protocol) {
MetadataRewriter1_16To1_15_2 metadataRewriter = protocol.get(MetadataRewriter1_16To1_15_2.class);
@ -37,12 +75,12 @@ public class EntityPackets {
protocol.registerOutgoing(State.PLAY, 0x3B, 0x3B, new PacketRemapper() {
@Override
public void registerMap() {
map(Type.INT);
map(DIMENSION_TRANSFORMER);
map(Type.LONG);
map(Type.BYTE);
handler(wrapper -> {
ClientWorld clientWorld = wrapper.user().get(ClientWorld.class);
int dimensionId = wrapper.get(Type.INT, 0);
String dimensionId = wrapper.get(Type.STRING, 0);
clientWorld.setEnvironment(dimensionId);
String levelType = wrapper.read(Type.STRING);
@ -59,13 +97,19 @@ public class EntityPackets {
public void registerMap() {
map(Type.INT); // Entity ID
map(Type.UNSIGNED_BYTE); // Gamemode
map(Type.INT); // Dimension
map(Type.NOTHING, new ValueTransformer<Void, CompoundTag>(Type.NBT) { // whatever this is
@Override
public CompoundTag transform(PacketWrapper wrapper, Void input) throws Exception {
return DIMENSIONS_TAG;
}
});
map(DIMENSION_TRANSFORMER); // Dimension
map(Type.LONG); // Seed
map(Type.UNSIGNED_BYTE); // Max players
handler(wrapper -> {
ClientWorld clientChunks = wrapper.user().get(ClientWorld.class);
int dimensionId = wrapper.get(Type.INT, 1);
clientChunks.setEnvironment(dimensionId);
String dimension = wrapper.get(Type.STRING, 0);
clientChunks.setEnvironment(dimension);
wrapper.user().get(EntityTracker1_16.class).addEntity(wrapper.get(Type.INT, 0), Entity1_16Types.EntityType.PLAYER);

View File

@ -16,12 +16,10 @@ public class ClientWorld extends StoredObject {
}
public void setEnvironment(int environmentId) {
this.environment = getEnvFromId(environmentId);
this.environment = Environment.getEnvironmentById(environmentId);
}
private Environment getEnvFromId(int id) {
Environment output = Environment.getEnvironmentById(id);
if (output == null) return Environment.NETHER;
return output;
public void setEnvironment(String environmentId) {
this.environment = Environment.getEnvironmentById(environmentId);
}
}

View File

@ -19047,6 +19047,7 @@
"entity.donkey.angry",
"entity.donkey.chest",
"entity.donkey.death",
"entity.donkey.eat",
"entity.donkey.hurt",
"entity.drowned.ambient",
"entity.drowned.ambient_water",
@ -19132,6 +19133,7 @@
"entity.fox.sleep",
"entity.fox.sniff",
"entity.fox.spit",
"entity.fox.teleport",
"block.roots.break",
"block.roots.step",
"block.roots.place",
@ -19304,8 +19306,10 @@
"entity.mooshroom.suspicious_milk",
"entity.mooshroom.shear",
"entity.mule.ambient",
"entity.mule.angry",
"entity.mule.chest",
"entity.mule.death",
"entity.mule.eat",
"entity.mule.hurt",
"music.creative",
"music.credits",
@ -19425,10 +19429,12 @@
"entity.parrot.imitate.evoker",
"entity.parrot.imitate.ghast",
"entity.parrot.imitate.guardian",
"entity.parrot.imitate.hoglin",
"entity.parrot.imitate.husk",
"entity.parrot.imitate.illusioner",
"entity.parrot.imitate.magma_cube",
"entity.parrot.imitate.phantom",
"entity.parrot.imitate.piglin",
"entity.parrot.imitate.pillager",
"entity.parrot.imitate.ravager",
"entity.parrot.imitate.shulker",
@ -19442,6 +19448,7 @@
"entity.parrot.imitate.witch",
"entity.parrot.imitate.wither",
"entity.parrot.imitate.wither_skeleton",
"entity.parrot.imitate.zoglin",
"entity.parrot.imitate.zombie",
"entity.parrot.imitate.zombie_villager",
"entity.parrot.step",