Mirror von
https://github.com/ViaVersion/ViaVersion.git
synchronisiert 2024-12-26 16:12:42 +01:00
Merge branch 'master' of https://github.com/MylesIsCool/ViaVersion
Dieser Commit ist enthalten in:
Commit
d88b76db85
@ -87,7 +87,7 @@ public class ViaConfig implements ViaVersionConfig {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public double getHologramYOffset() {
|
public double getHologramYOffset() {
|
||||||
return plugin.getConfig().getDouble("hologram-y", -1D);
|
return plugin.getConfig().getDouble("hologram-y", -0.96D);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -1,7 +1,9 @@
|
|||||||
package us.myles.ViaVersion.protocols.protocol1_9_1to1_9;
|
package us.myles.ViaVersion.protocols.protocol1_9_1to1_9;
|
||||||
|
|
||||||
|
import us.myles.ViaVersion.api.PacketWrapper;
|
||||||
import us.myles.ViaVersion.api.data.UserConnection;
|
import us.myles.ViaVersion.api.data.UserConnection;
|
||||||
import us.myles.ViaVersion.api.protocol.Protocol;
|
import us.myles.ViaVersion.api.protocol.Protocol;
|
||||||
|
import us.myles.ViaVersion.api.remapper.PacketHandler;
|
||||||
import us.myles.ViaVersion.api.remapper.PacketRemapper;
|
import us.myles.ViaVersion.api.remapper.PacketRemapper;
|
||||||
import us.myles.ViaVersion.api.type.Type;
|
import us.myles.ViaVersion.api.type.Type;
|
||||||
import us.myles.ViaVersion.packets.State;
|
import us.myles.ViaVersion.packets.State;
|
||||||
@ -24,6 +26,24 @@ public class Protocol1_9_1TO1_9 extends Protocol {
|
|||||||
map(Type.BOOLEAN); // 6 - Reduced Debug info
|
map(Type.BOOLEAN); // 6 - Reduced Debug info
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Sound Effect Packet
|
||||||
|
registerOutgoing(State.PLAY, 0x47, 0x47, new PacketRemapper() {
|
||||||
|
@Override
|
||||||
|
public void registerMap() {
|
||||||
|
map(Type.VAR_INT); // 0 - Sound ID
|
||||||
|
|
||||||
|
handler(new PacketHandler() {
|
||||||
|
@Override
|
||||||
|
public void handle(PacketWrapper wrapper) throws Exception {
|
||||||
|
int sound = wrapper.get(Type.VAR_INT, 0);
|
||||||
|
|
||||||
|
if (sound >= 415) // Add 1 to every sound id since there is no Elytra sound on a 1.9 server
|
||||||
|
wrapper.set(Type.VAR_INT, 0, sound + 1);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -98,8 +98,8 @@ public class Protocol1_9TO1_8 extends Protocol {
|
|||||||
Bukkit.getPluginManager().registerEvents(new CommandBlockListener(plugin), plugin);
|
Bukkit.getPluginManager().registerEvents(new CommandBlockListener(plugin), plugin);
|
||||||
Bukkit.getPluginManager().registerEvents(new DeathListener(plugin), plugin);
|
Bukkit.getPluginManager().registerEvents(new DeathListener(plugin), plugin);
|
||||||
Bukkit.getPluginManager().registerEvents(new BlockListener(plugin), plugin);
|
Bukkit.getPluginManager().registerEvents(new BlockListener(plugin), plugin);
|
||||||
if (Bukkit.getVersion().toLowerCase().contains("paper")) {
|
if (Bukkit.getVersion().toLowerCase().contains("paper") || Bukkit.getVersion().toLowerCase().contains("taco")) {
|
||||||
plugin.getLogger().info("Enabling PaperSpigot patch: Fixes block placement.");
|
plugin.getLogger().info("Enabling PaperSpigot/TacoSpigot patch: Fixes block placement.");
|
||||||
Bukkit.getPluginManager().registerEvents(new PaperPatch(), plugin);
|
Bukkit.getPluginManager().registerEvents(new PaperPatch(), plugin);
|
||||||
}
|
}
|
||||||
if (plugin.getConf().isStimulatePlayerTick())
|
if (plugin.getConf().isStimulatePlayerTick())
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
package us.myles.ViaVersion.protocols.protocol1_9to1_8.listeners;
|
package us.myles.ViaVersion.protocols.protocol1_9to1_8.listeners;
|
||||||
|
|
||||||
import io.netty.buffer.ByteBuf;
|
|
||||||
import io.netty.buffer.Unpooled;
|
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.entity.HumanEntity;
|
import org.bukkit.entity.HumanEntity;
|
||||||
@ -17,9 +15,9 @@ import org.bukkit.event.player.PlayerJoinEvent;
|
|||||||
import org.bukkit.event.player.PlayerRespawnEvent;
|
import org.bukkit.event.player.PlayerRespawnEvent;
|
||||||
import org.bukkit.inventory.CraftingInventory;
|
import org.bukkit.inventory.CraftingInventory;
|
||||||
import us.myles.ViaVersion.ViaVersionPlugin;
|
import us.myles.ViaVersion.ViaVersionPlugin;
|
||||||
|
import us.myles.ViaVersion.api.PacketWrapper;
|
||||||
import us.myles.ViaVersion.api.ViaVersion;
|
import us.myles.ViaVersion.api.ViaVersion;
|
||||||
import us.myles.ViaVersion.api.data.UserConnection;
|
import us.myles.ViaVersion.api.data.UserConnection;
|
||||||
import us.myles.ViaVersion.api.protocol.ProtocolVersion;
|
|
||||||
import us.myles.ViaVersion.api.type.Type;
|
import us.myles.ViaVersion.api.type.Type;
|
||||||
import us.myles.ViaVersion.protocols.base.ProtocolInfo;
|
import us.myles.ViaVersion.protocols.base.ProtocolInfo;
|
||||||
import us.myles.ViaVersion.protocols.protocol1_9to1_8.ArmorType;
|
import us.myles.ViaVersion.protocols.protocol1_9to1_8.ArmorType;
|
||||||
@ -40,24 +38,21 @@ public class ArmorListener implements Listener {
|
|||||||
if (!userConnection.get(ProtocolInfo.class).getPipeline().contains(Protocol1_9TO1_8.class)) return;
|
if (!userConnection.get(ProtocolInfo.class).getPipeline().contains(Protocol1_9TO1_8.class)) return;
|
||||||
|
|
||||||
int armor = ArmorType.calculateArmorPoints(player.getInventory().getArmorContents());
|
int armor = ArmorType.calculateArmorPoints(player.getInventory().getArmorContents());
|
||||||
int protocol = userConnection.get(ProtocolInfo.class).getProtocolVersion();
|
|
||||||
ByteBuf buf = Unpooled.buffer();
|
PacketWrapper wrapper = new PacketWrapper(0x4B, null, userConnection);
|
||||||
try {
|
try {
|
||||||
|
wrapper.write(Type.VAR_INT, player.getEntityId()); // Player ID
|
||||||
|
wrapper.write(Type.INT, 1); // only 1 property
|
||||||
|
wrapper.write(Type.STRING, "generic.armor");
|
||||||
|
wrapper.write(Type.DOUBLE, 0D); //default 0 armor
|
||||||
|
wrapper.write(Type.VAR_INT, 1); // 1 modifier
|
||||||
|
wrapper.write(Type.UUID, ARMOR_ATTRIBUTE); // armor modifier uuid
|
||||||
|
wrapper.write(Type.DOUBLE, (double) armor); // the modifier value
|
||||||
|
wrapper.write(Type.BYTE, (byte) 0);// the modifier operation, 0 is add number
|
||||||
|
|
||||||
//TODO possibility to send packets by Protocol version, to let the transformer do the work
|
wrapper.send(Protocol1_9TO1_8.class);
|
||||||
Type.VAR_INT.write(buf, (protocol >= ProtocolVersion.v1_9_3.getId()) ? 0x4A : 0x4B); // Entity Properties
|
} catch (Exception e) {
|
||||||
Type.VAR_INT.write(buf, player.getEntityId());
|
e.printStackTrace();
|
||||||
buf.writeInt(1); // only 1 property
|
|
||||||
Type.STRING.write(buf, "generic.armor");
|
|
||||||
buf.writeDouble(0); //default 0 armor
|
|
||||||
Type.VAR_INT.write(buf, 1); // 1 modifier
|
|
||||||
Type.UUID.write(buf, ARMOR_ATTRIBUTE); // armor modifier uuid
|
|
||||||
buf.writeDouble((double) armor); // the modifier value
|
|
||||||
buf.writeByte(0); // the modifier operation, 0 is add number
|
|
||||||
|
|
||||||
ViaVersion.getInstance().sendRawPacket(player, buf);
|
|
||||||
} catch (Exception ignored) {
|
|
||||||
buf.release();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -19,6 +19,7 @@ import org.bukkit.event.player.PlayerRespawnEvent;
|
|||||||
import org.spacehq.opennbt.tag.builtin.ByteTag;
|
import org.spacehq.opennbt.tag.builtin.ByteTag;
|
||||||
import org.spacehq.opennbt.tag.builtin.CompoundTag;
|
import org.spacehq.opennbt.tag.builtin.CompoundTag;
|
||||||
import us.myles.ViaVersion.ViaVersionPlugin;
|
import us.myles.ViaVersion.ViaVersionPlugin;
|
||||||
|
import us.myles.ViaVersion.api.PacketWrapper;
|
||||||
import us.myles.ViaVersion.api.ViaVersion;
|
import us.myles.ViaVersion.api.ViaVersion;
|
||||||
import us.myles.ViaVersion.api.data.UserConnection;
|
import us.myles.ViaVersion.api.data.UserConnection;
|
||||||
import us.myles.ViaVersion.api.minecraft.Position;
|
import us.myles.ViaVersion.api.minecraft.Position;
|
||||||
@ -80,12 +81,12 @@ public class CommandBlockListener implements Listener {
|
|||||||
if (!userConnection.get(ProtocolInfo.class).getPipeline().contains(Protocol1_9TO1_8.class)) return;
|
if (!userConnection.get(ProtocolInfo.class).getPipeline().contains(Protocol1_9TO1_8.class)) return;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
ByteBuf buf = Unpooled.buffer();
|
PacketWrapper wrapper = new PacketWrapper(0x1B, null, userConnection); // Entity status
|
||||||
Type.VAR_INT.write(buf, 0x1B); // Entity Status
|
wrapper.write(Type.INT, p.getEntityId());
|
||||||
buf.writeInt(p.getEntityId());
|
wrapper.write(Type.BYTE, (byte) 26); //Hardcoded op permission level
|
||||||
buf.writeByte(26);
|
wrapper.send(Protocol1_9TO1_8.class);
|
||||||
plugin.sendRawPacket(p, buf);
|
} catch (Exception e) {
|
||||||
} catch (Exception ignored) {
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -97,26 +98,32 @@ public class CommandBlockListener implements Listener {
|
|||||||
|
|
||||||
Object tileEntityCommand = ReflectionUtil.get(cmd, "commandBlock", ReflectionUtil.nms("TileEntityCommand"));
|
Object tileEntityCommand = ReflectionUtil.get(cmd, "commandBlock", ReflectionUtil.nms("TileEntityCommand"));
|
||||||
Object updatePacket = ReflectionUtil.invoke(tileEntityCommand, "getUpdatePacket");
|
Object updatePacket = ReflectionUtil.invoke(tileEntityCommand, "getUpdatePacket");
|
||||||
ByteBuf buf = packetToByteBuf(updatePacket);
|
|
||||||
plugin.sendRawPacket(player, buf);
|
UserConnection userConnection = ((ViaVersionPlugin) ViaVersion.getInstance()).getConnection(player);
|
||||||
|
|
||||||
|
PacketWrapper wrapper = generatePacket(updatePacket, userConnection);
|
||||||
|
wrapper.send(Protocol1_9TO1_8.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
private ByteBuf packetToByteBuf(Object updatePacket) throws Exception {
|
private PacketWrapper generatePacket(Object updatePacket, UserConnection usr) throws Exception {
|
||||||
ByteBuf buf = Unpooled.buffer();
|
PacketWrapper wrapper = new PacketWrapper(0x09, null, usr); // Update block entity
|
||||||
Type.VAR_INT.write(buf, 0x09); //Block Entity Packet ID
|
|
||||||
long[] pos = getPosition(ReflectionUtil.get(updatePacket, "a", ReflectionUtil.nms("BlockPosition")));
|
long[] pos = getPosition(ReflectionUtil.get(updatePacket, "a", ReflectionUtil.nms("BlockPosition")));
|
||||||
Type.POSITION.write(buf, new Position(pos[0], pos[1], pos[2])); //Block position
|
|
||||||
buf.writeByte(2); //Action id always 2
|
wrapper.write(Type.POSITION, new Position(pos[0], pos[1], pos[2])); //Block position
|
||||||
|
wrapper.write(Type.BYTE, (byte) 2); // Action id always 2
|
||||||
|
|
||||||
CompoundTag nbt = getNBT(ReflectionUtil.get(updatePacket, "c", ReflectionUtil.nms("NBTTagCompound")));
|
CompoundTag nbt = getNBT(ReflectionUtil.get(updatePacket, "c", ReflectionUtil.nms("NBTTagCompound")));
|
||||||
if (nbt == null) {
|
if (nbt == null) {
|
||||||
buf.writeByte(0); //If nbt is null. Use 0 as nbt
|
wrapper.write(Type.BYTE, (byte) 0); //If nbt is null. Use 0 as nbt
|
||||||
return buf;
|
return wrapper;
|
||||||
}
|
}
|
||||||
nbt.put(new ByteTag("powered", (byte) 0));
|
nbt.put(new ByteTag("powered", (byte) 0));
|
||||||
nbt.put(new ByteTag("auto", (byte) 0));
|
nbt.put(new ByteTag("auto", (byte) 0));
|
||||||
nbt.put(new ByteTag("conditionMet", (byte) 0));
|
nbt.put(new ByteTag("conditionMet", (byte) 0));
|
||||||
Type.NBT.write(buf, nbt); //NBT tag
|
|
||||||
return buf;
|
wrapper.write(Type.NBT, nbt); // NBT TAG
|
||||||
|
return wrapper;
|
||||||
}
|
}
|
||||||
|
|
||||||
private long[] getPosition(Object obj) throws ClassNotFoundException, NoSuchFieldException, IllegalAccessException {
|
private long[] getPosition(Object obj) throws ClassNotFoundException, NoSuchFieldException, IllegalAccessException {
|
||||||
|
@ -1,7 +1,9 @@
|
|||||||
package us.myles.ViaVersion.protocols.protocol1_9to1_9_1;
|
package us.myles.ViaVersion.protocols.protocol1_9to1_9_1;
|
||||||
|
|
||||||
|
import us.myles.ViaVersion.api.PacketWrapper;
|
||||||
import us.myles.ViaVersion.api.data.UserConnection;
|
import us.myles.ViaVersion.api.data.UserConnection;
|
||||||
import us.myles.ViaVersion.api.protocol.Protocol;
|
import us.myles.ViaVersion.api.protocol.Protocol;
|
||||||
|
import us.myles.ViaVersion.api.remapper.PacketHandler;
|
||||||
import us.myles.ViaVersion.api.remapper.PacketRemapper;
|
import us.myles.ViaVersion.api.remapper.PacketRemapper;
|
||||||
import us.myles.ViaVersion.api.type.Type;
|
import us.myles.ViaVersion.api.type.Type;
|
||||||
import us.myles.ViaVersion.packets.State;
|
import us.myles.ViaVersion.packets.State;
|
||||||
@ -24,6 +26,26 @@ public class Protocol1_9TO1_9_1 extends Protocol {
|
|||||||
map(Type.BOOLEAN); // 6 - Reduced Debug info
|
map(Type.BOOLEAN); // 6 - Reduced Debug info
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Sound Effect Packet
|
||||||
|
registerOutgoing(State.PLAY, 0x47, 0x47, new PacketRemapper() {
|
||||||
|
@Override
|
||||||
|
public void registerMap() {
|
||||||
|
map(Type.VAR_INT); // 0 - Sound ID
|
||||||
|
|
||||||
|
handler(new PacketHandler() {
|
||||||
|
@Override
|
||||||
|
public void handle(PacketWrapper wrapper) throws Exception {
|
||||||
|
int sound = wrapper.get(Type.VAR_INT, 0);
|
||||||
|
|
||||||
|
if (sound == 415) // Stop the Elytra sound for 1.9 (It's introduced in 1.9.2)
|
||||||
|
wrapper.cancel();
|
||||||
|
else if (sound >= 416) // Act like the Elytra sound never existed
|
||||||
|
wrapper.set(Type.VAR_INT, 0, sound - 1);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -54,7 +54,7 @@ shield-blocking: true
|
|||||||
# If they're in the wrong place enable this
|
# If they're in the wrong place enable this
|
||||||
hologram-patch: false
|
hologram-patch: false
|
||||||
# This is the offset, should work as default when enabled.
|
# This is the offset, should work as default when enabled.
|
||||||
hologram-y: -1
|
hologram-y: -0.96
|
||||||
# Enable player tick simulation, this fixes eating, drinking, nether portals.
|
# Enable player tick simulation, this fixes eating, drinking, nether portals.
|
||||||
simulate-pt: true
|
simulate-pt: true
|
||||||
# Should we use nms player to simulate packets, (may fix anti-cheat issues)
|
# Should we use nms player to simulate packets, (may fix anti-cheat issues)
|
||||||
|
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren