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:
Ursprung
fc81443d6e
Commit
9d4d3689f6
@ -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);
|
||||||
}
|
}
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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_R2.CraftWorld;
|
import org.bukkit.craftbukkit.v1_20_R2.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 {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
entity.teleportTo(serverLevel, newX, newY, newZ, Set.of(), newYaw, newPitch);
|
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.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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
|
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren