3
0
Mirror von https://github.com/Moulberry/AxiomPaperPlugin.git synchronisiert 2024-11-17 05:40:06 +01:00

Integrate entity editing with PlotSquared

Dieser Commit ist enthalten in:
Moulberry 2024-03-06 16:05:27 +08:00
Ursprung 87ad8948c1
Commit 51b6ae7010
4 geänderte Dateien mit 51 neuen und 6 gelöschten Zeilen

Datei anzeigen

@ -23,7 +23,8 @@ public record BlueprintHeader(String name, String author, List<String> tags, flo
public static BlueprintHeader read(FriendlyByteBuf friendlyByteBuf) { public static BlueprintHeader read(FriendlyByteBuf friendlyByteBuf) {
String name = friendlyByteBuf.readUtf(); String name = friendlyByteBuf.readUtf();
String author = friendlyByteBuf.readUtf(); String author = friendlyByteBuf.readUtf();
List<String> tags = friendlyByteBuf.readList(FriendlyByteBuf::readUtf); List<String> tags = friendlyByteBuf.readCollection(FriendlyByteBuf.limitValue(ArrayList::new, 1000),
FriendlyByteBuf::readUtf);
int blockCount = friendlyByteBuf.readInt(); int blockCount = friendlyByteBuf.readInt();
return new BlueprintHeader(name, author, tags, 0, 0, true, blockCount); return new BlueprintHeader(name, author, tags, 0, 0, true, blockCount);
} }

Datei anzeigen

@ -1,6 +1,7 @@
package com.moulberry.axiom.packet; package com.moulberry.axiom.packet;
import com.moulberry.axiom.AxiomPaper; import com.moulberry.axiom.AxiomPaper;
import com.moulberry.axiom.integration.plotsquared.PlotSquaredIntegration;
import io.netty.buffer.Unpooled; import io.netty.buffer.Unpooled;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction; import net.minecraft.core.Direction;
@ -20,6 +21,7 @@ import org.bukkit.plugin.messaging.PluginMessageListener;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.UUID; import java.util.UUID;
@ -45,7 +47,8 @@ public class DeleteEntityPacketListener implements PluginMessageListener {
} }
FriendlyByteBuf friendlyByteBuf = new FriendlyByteBuf(Unpooled.wrappedBuffer(message)); FriendlyByteBuf friendlyByteBuf = new FriendlyByteBuf(Unpooled.wrappedBuffer(message));
List<UUID> delete = friendlyByteBuf.readList(FriendlyByteBuf::readUUID); List<UUID> delete = friendlyByteBuf.readCollection(FriendlyByteBuf.limitValue(ArrayList::new, 1000),
FriendlyByteBuf::readUUID);
ServerLevel serverLevel = ((CraftWorld)player.getWorld()).getHandle(); ServerLevel serverLevel = ((CraftWorld)player.getWorld()).getHandle();
@ -61,6 +64,11 @@ public class DeleteEntityPacketListener implements PluginMessageListener {
if (!whitelistedEntities.isEmpty() && !whitelistedEntities.contains(type)) continue; if (!whitelistedEntities.isEmpty() && !whitelistedEntities.contains(type)) continue;
if (blacklistedEntities.contains(type)) continue; if (blacklistedEntities.contains(type)) continue;
if (!PlotSquaredIntegration.canBreakBlock(player,
player.getWorld().getBlockAt(entity.getBlockX(), entity.getBlockY(), entity.getBlockZ()))) {
continue;
}
entity.remove(Entity.RemovalReason.DISCARDED); entity.remove(Entity.RemovalReason.DISCARDED);
} }
} }

Datei anzeigen

@ -2,6 +2,7 @@ package com.moulberry.axiom.packet;
import com.moulberry.axiom.AxiomPaper; import com.moulberry.axiom.AxiomPaper;
import com.moulberry.axiom.NbtSanitization; import com.moulberry.axiom.NbtSanitization;
import com.moulberry.axiom.integration.plotsquared.PlotSquaredIntegration;
import io.netty.buffer.Unpooled; import io.netty.buffer.Unpooled;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction; import net.minecraft.core.Direction;
@ -17,12 +18,14 @@ import net.minecraft.world.entity.decoration.ItemFrame;
import net.minecraft.world.level.Level; import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.Rotation; import net.minecraft.world.level.block.Rotation;
import net.minecraft.world.phys.Vec3; import net.minecraft.world.phys.Vec3;
import org.bukkit.Location;
import org.bukkit.craftbukkit.v1_20_R3.CraftWorld; import org.bukkit.craftbukkit.v1_20_R3.CraftWorld;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.plugin.messaging.PluginMessageListener; import org.bukkit.plugin.messaging.PluginMessageListener;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Set; import java.util.Set;
import java.util.UUID; import java.util.UUID;
@ -63,7 +66,8 @@ public class ManipulateEntityPacketListener implements PluginMessageListener {
PassengerManipulation passengerManipulation = friendlyByteBuf.readEnum(PassengerManipulation.class); PassengerManipulation passengerManipulation = friendlyByteBuf.readEnum(PassengerManipulation.class);
List<UUID> passengers = List.of(); List<UUID> passengers = List.of();
if (passengerManipulation == PassengerManipulation.ADD_LIST || passengerManipulation == PassengerManipulation.REMOVE_LIST) { if (passengerManipulation == PassengerManipulation.ADD_LIST || passengerManipulation == PassengerManipulation.REMOVE_LIST) {
passengers = friendlyByteBuf.readList(FriendlyByteBuf::readUUID); passengers = friendlyByteBuf.readCollection(FriendlyByteBuf.limitValue(ArrayList::new, 1000),
FriendlyByteBuf::readUUID);
} }
return new ManipulateEntry(uuid, relativeMovementSet, position, yaw, pitch, nbt, return new ManipulateEntry(uuid, relativeMovementSet, position, yaw, pitch, nbt,
@ -88,7 +92,8 @@ public class ManipulateEntityPacketListener implements PluginMessageListener {
} }
FriendlyByteBuf friendlyByteBuf = new FriendlyByteBuf(Unpooled.wrappedBuffer(message)); FriendlyByteBuf friendlyByteBuf = new FriendlyByteBuf(Unpooled.wrappedBuffer(message));
List<ManipulateEntry> entries = friendlyByteBuf.readList(ManipulateEntry::read); List<ManipulateEntry> entries = friendlyByteBuf.readCollection(FriendlyByteBuf.limitValue(ArrayList::new, 1000),
ManipulateEntry::read);
ServerLevel serverLevel = ((CraftWorld)player.getWorld()).getHandle(); ServerLevel serverLevel = ((CraftWorld)player.getWorld()).getHandle();
@ -104,6 +109,14 @@ public class ManipulateEntityPacketListener implements PluginMessageListener {
if (!whitelistedEntities.isEmpty() && !whitelistedEntities.contains(type)) continue; if (!whitelistedEntities.isEmpty() && !whitelistedEntities.contains(type)) continue;
if (blacklistedEntities.contains(type)) continue; if (blacklistedEntities.contains(type)) continue;
Vec3 position = entity.position();
BlockPos containing = BlockPos.containing(position.x, position.y, position.z);
if (!PlotSquaredIntegration.canPlaceBlock(player, new Location(player.getWorld(),
containing.getX(), containing.getY(), containing.getZ()))) {
continue;
}
if (entry.merge != null && !entry.merge.isEmpty()) { if (entry.merge != null && !entry.merge.isEmpty()) {
NbtSanitization.sanitizeEntity(entry.merge); NbtSanitization.sanitizeEntity(entry.merge);
@ -112,6 +125,8 @@ public class ManipulateEntityPacketListener implements PluginMessageListener {
entity.load(compoundTag); entity.load(compoundTag);
} }
entity.setPosRaw(position.x, position.y, position.z);
Vec3 entryPos = entry.position(); Vec3 entryPos = entry.position();
if (entryPos != null && entry.relativeMovementSet != null) { if (entryPos != null && entry.relativeMovementSet != null) {
double newX = entry.relativeMovementSet.contains(RelativeMovement.X) ? entity.position().x + entryPos.x : entryPos.x; double newX = entry.relativeMovementSet.contains(RelativeMovement.X) ? entity.position().x + entryPos.x : entryPos.x;
@ -130,7 +145,13 @@ public class ManipulateEntityPacketListener implements PluginMessageListener {
} }
} }
containing = BlockPos.containing(newX, newY, newZ);
if (PlotSquaredIntegration.canPlaceBlock(player, new Location(player.getWorld(),
containing.getX(), containing.getY(), containing.getZ()))) {
entity.teleportTo(serverLevel, newX, newY, newZ, Set.of(), newYaw, newPitch); entity.teleportTo(serverLevel, newX, newY, newZ, Set.of(), newYaw, newPitch);
}
entity.setYHeadRot(newYaw); entity.setYHeadRot(newYaw);
} }
@ -154,6 +175,14 @@ public class ManipulateEntityPacketListener implements PluginMessageListener {
continue; continue;
} }
position = passenger.position();
containing = BlockPos.containing(position.x, position.y, position.z);
if (!PlotSquaredIntegration.canPlaceBlock(player, new Location(player.getWorld(),
containing.getX(), containing.getY(), containing.getZ()))) {
continue;
}
passenger.startRiding(entity, true); passenger.startRiding(entity, true);
} }
} }

Datei anzeigen

@ -4,6 +4,7 @@ import com.moulberry.axiom.AxiomPaper;
import com.moulberry.axiom.NbtSanitization; import com.moulberry.axiom.NbtSanitization;
import com.moulberry.axiom.event.AxiomTeleportEvent; import com.moulberry.axiom.event.AxiomTeleportEvent;
import com.moulberry.axiom.event.AxiomUnknownTeleportEvent; import com.moulberry.axiom.event.AxiomUnknownTeleportEvent;
import com.moulberry.axiom.integration.plotsquared.PlotSquaredIntegration;
import io.netty.buffer.Unpooled; import io.netty.buffer.Unpooled;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction; import net.minecraft.core.Direction;
@ -31,6 +32,7 @@ import org.bukkit.plugin.messaging.PluginMessageListener;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.UUID; import java.util.UUID;
@ -67,7 +69,7 @@ public class SpawnEntityPacketListener implements PluginMessageListener {
} }
FriendlyByteBuf friendlyByteBuf = new FriendlyByteBuf(Unpooled.wrappedBuffer(message)); FriendlyByteBuf friendlyByteBuf = new FriendlyByteBuf(Unpooled.wrappedBuffer(message));
List<SpawnEntry> entries = friendlyByteBuf.readList(SpawnEntry::new); List<SpawnEntry> entries = friendlyByteBuf.readCollection(FriendlyByteBuf.limitValue(ArrayList::new, 1000), SpawnEntry::new);
ServerLevel serverLevel = ((CraftWorld)player.getWorld()).getHandle(); ServerLevel serverLevel = ((CraftWorld)player.getWorld()).getHandle();
@ -82,6 +84,11 @@ public class SpawnEntityPacketListener implements PluginMessageListener {
continue; continue;
} }
if (!PlotSquaredIntegration.canPlaceBlock(player, new Location(player.getWorld(),
blockPos.getX(), blockPos.getY(), blockPos.getZ()))) {
continue;
}
if (serverLevel.getEntity(entry.newUuid) != null) continue; if (serverLevel.getEntity(entry.newUuid) != null) continue;
CompoundTag tag = entry.tag == null ? new CompoundTag() : entry.tag; CompoundTag tag = entry.tag == null ? new CompoundTag() : entry.tag;