Mirror von
https://github.com/PaperMC/Paper.git
synchronisiert 2024-12-20 21:40:06 +01:00
Adds update chunk method for sending fake chunk updates to the client. This is to match the sendBlockChange method.
Dieser Commit ist enthalten in:
Ursprung
1a1fc953cb
Commit
8320917363
95
src/main/java/net/minecraft/server/Packet51MapChunk.java
Normale Datei
95
src/main/java/net/minecraft/server/Packet51MapChunk.java
Normale Datei
@ -0,0 +1,95 @@
|
|||||||
|
package net.minecraft.server;
|
||||||
|
|
||||||
|
import java.io.DataInputStream;
|
||||||
|
import java.io.DataOutputStream;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.zip.DataFormatException;
|
||||||
|
import java.util.zip.Deflater;
|
||||||
|
import java.util.zip.Inflater;
|
||||||
|
|
||||||
|
public class Packet51MapChunk extends Packet {
|
||||||
|
|
||||||
|
public int a;
|
||||||
|
public int b;
|
||||||
|
public int c;
|
||||||
|
public int d;
|
||||||
|
public int e;
|
||||||
|
public int f;
|
||||||
|
public byte[] g;
|
||||||
|
private int h;
|
||||||
|
|
||||||
|
public Packet51MapChunk() {
|
||||||
|
this.k = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// CraftBukkit - start
|
||||||
|
public Packet51MapChunk(int i, int j, int k, int l, int i1, int j1, World world) {
|
||||||
|
this(i, j, k, l, i1, j1, world.c(i, j, k, l, i1, j1));
|
||||||
|
}
|
||||||
|
|
||||||
|
public Packet51MapChunk(int i, int j, int k, int l, int i1, int j1, byte[] data) {
|
||||||
|
// CraftBukkit - end
|
||||||
|
this.k = true;
|
||||||
|
this.a = i;
|
||||||
|
this.b = j;
|
||||||
|
this.c = k;
|
||||||
|
this.d = l;
|
||||||
|
this.e = i1;
|
||||||
|
this.f = j1;
|
||||||
|
byte[] abyte = data; // CraftBukkit - uses data from above constructor
|
||||||
|
Deflater deflater = new Deflater(1);
|
||||||
|
|
||||||
|
try {
|
||||||
|
deflater.setInput(abyte);
|
||||||
|
deflater.finish();
|
||||||
|
this.g = new byte[l * i1 * j1 * 5 / 2];
|
||||||
|
this.h = deflater.deflate(this.g);
|
||||||
|
} finally {
|
||||||
|
deflater.end();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void a(DataInputStream datainputstream) throws IOException { // CraftBukkit - throws IOEXception
|
||||||
|
this.a = datainputstream.readInt();
|
||||||
|
this.b = datainputstream.readShort();
|
||||||
|
this.c = datainputstream.readInt();
|
||||||
|
this.d = datainputstream.read() + 1;
|
||||||
|
this.e = datainputstream.read() + 1;
|
||||||
|
this.f = datainputstream.read() + 1;
|
||||||
|
this.h = datainputstream.readInt();
|
||||||
|
byte[] abyte = new byte[this.h];
|
||||||
|
|
||||||
|
datainputstream.readFully(abyte);
|
||||||
|
this.g = new byte[this.d * this.e * this.f * 5 / 2];
|
||||||
|
Inflater inflater = new Inflater();
|
||||||
|
|
||||||
|
inflater.setInput(abyte);
|
||||||
|
|
||||||
|
try {
|
||||||
|
inflater.inflate(this.g);
|
||||||
|
} catch (DataFormatException dataformatexception) {
|
||||||
|
throw new IOException("Bad compressed data format");
|
||||||
|
} finally {
|
||||||
|
inflater.end();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void a(DataOutputStream dataoutputstream) throws IOException { // CraftBukkit - throws IOException
|
||||||
|
dataoutputstream.writeInt(this.a);
|
||||||
|
dataoutputstream.writeShort(this.b);
|
||||||
|
dataoutputstream.writeInt(this.c);
|
||||||
|
dataoutputstream.write(this.d - 1);
|
||||||
|
dataoutputstream.write(this.e - 1);
|
||||||
|
dataoutputstream.write(this.f - 1);
|
||||||
|
dataoutputstream.writeInt(this.h);
|
||||||
|
dataoutputstream.write(this.g, 0, this.h);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void a(NetHandler nethandler) {
|
||||||
|
nethandler.a(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
public int a() {
|
||||||
|
return 17 + this.h;
|
||||||
|
}
|
||||||
|
}
|
@ -2,11 +2,13 @@ package org.bukkit.craftbukkit.entity;
|
|||||||
|
|
||||||
import java.net.InetSocketAddress;
|
import java.net.InetSocketAddress;
|
||||||
import java.net.SocketAddress;
|
import java.net.SocketAddress;
|
||||||
|
import java.util.zip.Deflater;
|
||||||
import net.minecraft.server.EntityHuman;
|
import net.minecraft.server.EntityHuman;
|
||||||
import net.minecraft.server.EntityPlayer;
|
import net.minecraft.server.EntityPlayer;
|
||||||
import net.minecraft.server.ItemInWorldManager;
|
import net.minecraft.server.ItemInWorldManager;
|
||||||
import net.minecraft.server.Packet200Statistic;
|
import net.minecraft.server.Packet200Statistic;
|
||||||
import net.minecraft.server.Packet3Chat;
|
import net.minecraft.server.Packet3Chat;
|
||||||
|
import net.minecraft.server.Packet51MapChunk;
|
||||||
import net.minecraft.server.Packet53BlockChange;
|
import net.minecraft.server.Packet53BlockChange;
|
||||||
import net.minecraft.server.Packet54PlayNoteBlock;
|
import net.minecraft.server.Packet54PlayNoteBlock;
|
||||||
import net.minecraft.server.Packet6SpawnPosition;
|
import net.minecraft.server.Packet6SpawnPosition;
|
||||||
@ -164,6 +166,33 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
|
|||||||
getHandle().netServerHandler.sendPacket(packet);
|
getHandle().netServerHandler.sendPacket(packet);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean sendChunkChange(Location loc, int sx, int sy, int sz, byte[] data) {
|
||||||
|
int x = loc.getBlockX();
|
||||||
|
int y = loc.getBlockY();
|
||||||
|
int z = loc.getBlockZ();
|
||||||
|
|
||||||
|
int cx = x >> 4;
|
||||||
|
int cz = z >> 4;
|
||||||
|
|
||||||
|
if (sx <= 0 || sy <= 0 || sz <= 0) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((x + sx - 1) >> 4 != cx || (z + sz - 1) >> 4 != cz || y < 0 || y + sy > 128) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (data.length != (sx * sy * sz * 5) / 2) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
Packet51MapChunk packet = new Packet51MapChunk(x, y, z, sx, sy, sz, data);
|
||||||
|
|
||||||
|
getHandle().netServerHandler.sendPacket(packet);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean teleport(Location location) {
|
public boolean teleport(Location location) {
|
||||||
WorldServer oldWorld = ((CraftWorld)getWorld()).getHandle();
|
WorldServer oldWorld = ((CraftWorld)getWorld()).getHandle();
|
||||||
|
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren