Changes for 1.13 compatibility

This commit is contained in:
Dan Mulloy 2018-05-28 11:52:19 -04:00 committed by Alexander Meech
parent 0ad24ce47b
commit 201c285091
4 changed files with 70 additions and 61 deletions

View File

@ -37,6 +37,7 @@ public class MultiBlockUpdaterAgent
/**
* Add a block to the list of blocks to send to the player. The agent supports blocks across different chunks and
* will not send duplicates.
*
* @param block The block to send. The block is stored using a BlockVector, meaning that when the send method is called, it will use
* the material and data found for the block at the moment you call the send method.
* @see #send(Collection)
@ -55,6 +56,7 @@ public class MultiBlockUpdaterAgent
/**
* Sends all the record blocks to all online players. Players out of range will not receive packets.
*
* @see #send(Collection)
*/
public void send()
@ -73,6 +75,7 @@ public class MultiBlockUpdaterAgent
/**
* Send all the recorded blocks to the provided players. This will only send packets to players in range. If the blocks span multiple
* chunks then players will only receive block updates for chunks close to them.
*
* @param players The players which will the packets will be sent to.
*/
public void send(Collection<? extends Player> players)
@ -105,10 +108,10 @@ public class MultiBlockUpdaterAgent
{
for (Player p : players)
{
UtilPlayer.sendPacket(p, new PacketPlayOutMapChunk(c, true, 65535));
int protocol = ((CraftPlayer) p).getHandle().getProtocol();
UtilPlayer.sendPacket(p, new PacketPlayOutMapChunk(protocol, c, true, 65535));
}
}
else
} else
{
PacketPlayOutMultiBlockChange packet = new PacketPlayOutMultiBlockChange();
packet.a = new ChunkCoordIntPair(c.locX, c.locZ);
@ -145,5 +148,4 @@ public class MultiBlockUpdaterAgent
}
}, 5);
}
}

View File

@ -1,7 +1,10 @@
package mineplex.core.common.util;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import net.minecraft.server.v1_8_R3.EnumParticle;
import net.minecraft.server.v1_8_R3.PacketPlayOutWorldParticles;
@ -172,6 +175,16 @@ public class UtilParticle
WATER_WAKE(EnumParticle.WATER_WAKE, "wake");
private static final Map<String, ParticleType> byName = new ConcurrentHashMap<>();
static
{
for (ParticleType type : values())
{
byName.put(type.particleName, type);
}
}
public EnumParticle particle;
public String particleName;
private boolean _friendlyData;
@ -248,15 +261,7 @@ public class UtilParticle
details[i] = Integer.parseInt(parts[i + 1]);
}
ParticleType particleType = ParticleType.CRIT;
for (ParticleType type : ParticleType.values())
{
if (type.particleName.equalsIgnoreCase(parts[0]))
{
particleType = type;
}
}
ParticleType particleType = ParticleType.byName.getOrDefault(parts[0], ParticleType.CRIT);
return new PacketPlayOutWorldParticles(particleType.particle, displayFar,
(float) location.getX(), (float) location.getY(), (float) location.getZ(), offsetX, offsetY, offsetZ, speed,

View File

@ -554,7 +554,7 @@ public class DisguiseManager extends MiniPlugin implements IPacketHandler
if (pDisguise.getSleepingDirection() != null)
{
for (Packet packet : getBedPackets(pDisguise))
for (Packet packet : getBedPackets(protocol, pDisguise))
{
handlePacket(packet, packetVerifier);
}
@ -821,14 +821,15 @@ public class DisguiseManager extends MiniPlugin implements IPacketHandler
{
List<Packet> packets = new ArrayList<>();
PacketPlayOutMapChunk chunk = new PacketPlayOutMapChunk(_bedChunk, true, '\uffff');
EntityPlayer nmsPlayer = ((CraftPlayer) player).getHandle();
final int protocol = nmsPlayer.getProtocol();
PacketPlayOutMapChunk chunk = new PacketPlayOutMapChunk(protocol, _bedChunk, true, '\uffff');
chunk.a = BED_POS_NORTH[0] >> 4;
chunk.b = BED_POS_NORTH[2] >> 4;
packets.add(chunk);
EntityPlayer nmsPlayer = ((CraftPlayer) player).getHandle();
_spawnPacketMap.entrySet().stream()
.filter(entry -> entry.getValue().size() > 0 && entry.getValue().getFirst() instanceof DisguisePlayer && ((DisguisePlayer) entry.getValue().getFirst()).getSleepingDirection() != null)
.filter(entry -> this.containsSpawnDisguise(player, entry.getValue().getFirst()))
@ -838,7 +839,7 @@ public class DisguiseManager extends MiniPlugin implements IPacketHandler
if (tracker != null && tracker.trackedPlayers.contains(nmsPlayer))
{
packets.addAll(getBedPackets((DisguisePlayer) entry.getValue().getFirst()));
packets.addAll(getBedPackets(protocol, (DisguisePlayer) entry.getValue().getFirst()));
}
});
@ -853,7 +854,7 @@ public class DisguiseManager extends MiniPlugin implements IPacketHandler
*
* fixme can we make this better at all?!?!?!
*/
private List<Packet> getBedPackets(DisguisePlayer playerDisguise)
private List<Packet> getBedPackets(int protocol, DisguisePlayer playerDisguise)
{
int[] coords = getCoordsFor(playerDisguise);
@ -873,8 +874,7 @@ public class DisguiseManager extends MiniPlugin implements IPacketHandler
double d1 = posY + (targetY - posY) / (double) partitions;
double d2 = posZ + (targetZ - posZ) / (double) partitions;
PacketPlayOutMapChunk chunk = new PacketPlayOutMapChunk(_bedChunk, true, '\uffff');
PacketPlayOutMapChunk chunk = new PacketPlayOutMapChunk(protocol, _bedChunk, true, '\uffff');
chunk.a = (int) Math.floor(d0) >> 4;
chunk.b = (int) Math.floor(d2) >> 4;
packets.add(chunk);

View File

@ -15,6 +15,7 @@ import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.block.BlockFace;
import org.bukkit.craftbukkit.v1_8_R3.CraftChunk;
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftPlayer;
import org.bukkit.entity.Player;
import mineplex.core.common.util.MapUtil;
@ -153,7 +154,8 @@ public abstract class Crumbleable
for (Player player : UtilServer.getPlayers())
{
UtilPlayer.sendPacket(player, new PacketPlayOutMapChunk(chunk, false, mask));
int protocol = ((CraftPlayer) player).getHandle().getProtocol();
UtilPlayer.sendPacket(player, new PacketPlayOutMapChunk(protocol, chunk, false, mask));
}
_lastChunk = System.currentTimeMillis();