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

Update to 1.21.3

Dieser Commit ist enthalten in:
Moulberry 2024-11-17 00:13:04 +08:00
Ursprung bbf14d4f63
Commit 9a86585f3e
7 geänderte Dateien mit 33 neuen und 26 gelöschten Zeilen

Datei anzeigen

@ -3,7 +3,7 @@
bom-newest = "1.37" bom-newest = "1.37"
cloud-paper = "2.0.0-20240516.054251-69" cloud-paper = "2.0.0-20240516.054251-69"
coreprotect = "22.4" coreprotect = "22.4"
paper = "1.21.1-R0.1-SNAPSHOT" paper = "1.21.3-R0.1-SNAPSHOT"
plotsquared = "7.3.8" plotsquared = "7.3.8"
reflection-remapper = "0.1.2-20240315.033304-2" reflection-remapper = "0.1.2-20240315.033304-2"
viaversion-api = "5.0.1" viaversion-api = "5.0.1"

Datei anzeigen

@ -27,7 +27,7 @@ public class DisallowedBlocks {
for (String disallowedBlock : disallowedBlocks) { for (String disallowedBlock : disallowedBlocks) {
try { try {
var parsed = BlockStateParser.parseForTesting(BuiltInRegistries.BLOCK.asLookup(), new StringReader(disallowedBlock), false); var parsed = BlockStateParser.parseForTesting(BuiltInRegistries.BLOCK, new StringReader(disallowedBlock), false);
parsed.left().ifPresent(result -> { parsed.left().ifPresent(result -> {
disallowedPredicates.add(blockState -> { disallowedPredicates.add(blockState -> {

Datei anzeigen

@ -8,6 +8,7 @@ import it.unimi.dsi.fastutil.longs.Long2ObjectMap;
import it.unimi.dsi.fastutil.longs.Long2ObjectOpenHashMap; import it.unimi.dsi.fastutil.longs.Long2ObjectOpenHashMap;
import net.minecraft.SharedConstants; import net.minecraft.SharedConstants;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.core.Holder;
import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.core.registries.BuiltInRegistries;
import net.minecraft.nbt.*; import net.minecraft.nbt.*;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
@ -25,6 +26,7 @@ import java.nio.file.Files;
import java.nio.file.Path; import java.nio.file.Path;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Optional;
public class BlueprintIo { public class BlueprintIo {
@ -91,9 +93,11 @@ public class BlueprintIo {
long pos = blockPos.asLong(); long pos = blockPos.asLong();
String id = blockEntityCompound.getString("id"); String id = blockEntityCompound.getString("id");
BlockEntityType<?> type = BuiltInRegistries.BLOCK_ENTITY_TYPE.get(VersionHelper.createResourceLocation(id)); Optional<Holder.Reference<BlockEntityType<?>>> typeOptional = BuiltInRegistries.BLOCK_ENTITY_TYPE.get(VersionHelper.createResourceLocation(id));
if (typeOptional.isPresent()) {
BlockEntityType<?> type = typeOptional.get().value();
if (type != null) {
PalettedContainer<BlockState> container = blockMap.get(BlockPos.asLong( PalettedContainer<BlockState> container = blockMap.get(BlockPos.asLong(
blockPos.getX() >> 4, blockPos.getX() >> 4,
blockPos.getY() >> 4, blockPos.getY() >> 4,

Datei anzeigen

@ -17,7 +17,7 @@ import net.minecraft.network.RegistryFriendlyByteBuf;
import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerLevel;
import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.EntityType;
import net.minecraft.world.entity.RelativeMovement; import net.minecraft.world.entity.Relative;
import net.minecraft.world.entity.decoration.HangingEntity; import net.minecraft.world.entity.decoration.HangingEntity;
import net.minecraft.world.entity.decoration.ItemFrame; import net.minecraft.world.entity.decoration.ItemFrame;
import net.minecraft.world.level.block.Rotation; import net.minecraft.world.level.block.Rotation;
@ -48,18 +48,18 @@ public class ManipulateEntityPacketListener implements PacketHandler {
REMOVE_LIST REMOVE_LIST
} }
public record ManipulateEntry(UUID uuid, @Nullable Set<RelativeMovement> relativeMovementSet, @Nullable Vec3 position, public record ManipulateEntry(UUID uuid, @Nullable Set<Relative> relativeMovementSet, @Nullable Vec3 position,
float yaw, float pitch, CompoundTag merge, PassengerManipulation passengerManipulation, List<UUID> passengers) { float yaw, float pitch, CompoundTag merge, PassengerManipulation passengerManipulation, List<UUID> passengers) {
public static ManipulateEntry read(FriendlyByteBuf friendlyByteBuf, Player player, AxiomPaper plugin) { public static ManipulateEntry read(FriendlyByteBuf friendlyByteBuf, Player player, AxiomPaper plugin) {
UUID uuid = friendlyByteBuf.readUUID(); UUID uuid = friendlyByteBuf.readUUID();
int flags = friendlyByteBuf.readByte(); int flags = friendlyByteBuf.readByte();
Set<RelativeMovement> relativeMovementSet = null; Set<Relative> relativeMovementSet = null;
Vec3 position = null; Vec3 position = null;
float yaw = 0; float yaw = 0;
float pitch = 0; float pitch = 0;
if (flags >= 0) { if (flags >= 0) {
relativeMovementSet = RelativeMovement.unpack(flags); relativeMovementSet = Relative.unpack(flags);
position = new Vec3(friendlyByteBuf.readDouble(), friendlyByteBuf.readDouble(), friendlyByteBuf.readDouble()); position = new Vec3(friendlyByteBuf.readDouble(), friendlyByteBuf.readDouble(), friendlyByteBuf.readDouble());
yaw = friendlyByteBuf.readFloat(); yaw = friendlyByteBuf.readFloat();
pitch = friendlyByteBuf.readFloat(); pitch = friendlyByteBuf.readFloat();
@ -128,11 +128,11 @@ public class ManipulateEntityPacketListener implements PacketHandler {
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(Relative.X) ? entity.position().x + entryPos.x : entryPos.x;
double newY = entry.relativeMovementSet.contains(RelativeMovement.Y) ? entity.position().y + entryPos.y : entryPos.y; double newY = entry.relativeMovementSet.contains(Relative.Y) ? entity.position().y + entryPos.y : entryPos.y;
double newZ = entry.relativeMovementSet.contains(RelativeMovement.Z) ? entity.position().z + entryPos.z : entryPos.z; double newZ = entry.relativeMovementSet.contains(Relative.Z) ? entity.position().z + entryPos.z : entryPos.z;
float newYaw = entry.relativeMovementSet.contains(RelativeMovement.Y_ROT) ? entity.getYRot() + entry.yaw : entry.yaw; float newYaw = entry.relativeMovementSet.contains(Relative.Y_ROT) ? entity.getYRot() + entry.yaw : entry.yaw;
float newPitch = entry.relativeMovementSet.contains(RelativeMovement.X_ROT) ? entity.getXRot() + entry.pitch : entry.pitch; float newPitch = entry.relativeMovementSet.contains(Relative.X_ROT) ? entity.getXRot() + entry.pitch : entry.pitch;
if (entity instanceof HangingEntity hangingEntity) { if (entity instanceof HangingEntity hangingEntity) {
float changedYaw = newYaw - entity.getYRot(); float changedYaw = newYaw - entity.getYRot();
@ -148,7 +148,7 @@ public class ManipulateEntityPacketListener implements PacketHandler {
if (Integration.canPlaceBlock(player, new Location(player.getWorld(), if (Integration.canPlaceBlock(player, new Location(player.getWorld(),
containing.getX(), containing.getY(), containing.getZ()))) { 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, true);
} }
entity.setYHeadRot(newYaw); entity.setYHeadRot(newYaw);

Datei anzeigen

@ -154,7 +154,7 @@ public class SetBlockBufferPacketListener implements PacketHandler {
int cz = BlockPos.getZ(entry.getLongKey()); int cz = BlockPos.getZ(entry.getLongKey());
PalettedContainer<BlockState> container = entry.getValue(); PalettedContainer<BlockState> container = entry.getValue();
if (cy < world.getMinSection() || cy >= world.getMaxSection()) { if (cy < world.getMinSectionY() || cy > world.getMaxSectionY()) {
continue; continue;
} }
@ -247,7 +247,7 @@ public class SetBlockBufferPacketListener implements PacketHandler {
} }
// Update Light // Update Light
sectionLightChanged |= LightEngine.hasDifferentLightProperties(chunk, blockPos, old, blockState); sectionLightChanged |= LightEngine.hasDifferentLightProperties(old, blockState);
// Update Poi // Update Poi
Optional<Holder<PoiType>> newPoi = containerMaybeHasPoi ? PoiTypes.forState(blockState) : Optional.empty(); Optional<Holder<PoiType>> newPoi = containerMaybeHasPoi ? PoiTypes.forState(blockState) : Optional.empty();
@ -312,11 +312,12 @@ public class SetBlockBufferPacketListener implements PacketHandler {
boolean nowHasOnlyAir = section.hasOnlyAir(); boolean nowHasOnlyAir = section.hasOnlyAir();
if (hasOnlyAir != nowHasOnlyAir) { if (hasOnlyAir != nowHasOnlyAir) {
world.getChunkSource().getLightEngine().updateSectionStatus(SectionPos.of(cx, cy, cz), nowHasOnlyAir); world.getChunkSource().getLightEngine().updateSectionStatus(SectionPos.of(cx, cy, cz), nowHasOnlyAir);
world.getChunkSource().onSectionEmptinessChanged(cx, cy, cz, nowHasOnlyAir);
} }
if (sectionChanged) { if (sectionChanged) {
extension.sendChunk(cx, cz); extension.sendChunk(cx, cz);
chunk.setUnsaved(true); chunk.markUnsaved();
} }
if (sectionLightChanged) { if (sectionLightChanged) {
extension.lightChunk(cx, cz); extension.lightChunk(cx, cz);
@ -344,21 +345,21 @@ public class SetBlockBufferPacketListener implements PacketHandler {
Set<LevelChunk> changedChunks = new HashSet<>(); Set<LevelChunk> changedChunks = new HashSet<>();
int minSection = world.getMinSection(); int minSection = world.getMinSectionY();
int maxSection = world.getMaxSection(); int maxSection = world.getMaxSectionY();
Optional<Registry<Biome>> registryOptional = world.registryAccess().registry(Registries.BIOME); Optional<Registry<Biome>> registryOptional = world.registryAccess().lookup(Registries.BIOME);
if (registryOptional.isEmpty()) return; if (registryOptional.isEmpty()) return;
Registry<Biome> registry = registryOptional.get(); Registry<Biome> registry = registryOptional.get();
biomeBuffer.forEachEntry((x, y, z, biome) -> { biomeBuffer.forEachEntry((x, y, z, biome) -> {
int cy = y >> 2; int cy = y >> 2;
if (cy < minSection || cy >= maxSection) { if (cy < minSection || cy > maxSection) {
return; return;
} }
var holder = registry.getHolder(biome); var holder = registry.get(biome);
if (holder.isPresent()) { if (holder.isPresent()) {
var chunk = (LevelChunk) world.getChunk(x >> 2, z >> 2, ChunkStatus.FULL, false); var chunk = (LevelChunk) world.getChunk(x >> 2, z >> 2, ChunkStatus.FULL, false);
if (chunk == null) return; if (chunk == null) return;
@ -377,7 +378,7 @@ public class SetBlockBufferPacketListener implements PacketHandler {
var chunkMap = world.getChunkSource().chunkMap; var chunkMap = world.getChunkSource().chunkMap;
HashMap<ServerPlayer, List<LevelChunk>> map = new HashMap<>(); HashMap<ServerPlayer, List<LevelChunk>> map = new HashMap<>();
for (LevelChunk chunk : changedChunks) { for (LevelChunk chunk : changedChunks) {
chunk.setUnsaved(true); chunk.markUnsaved();
ChunkPos chunkPos = chunk.getPos(); ChunkPos chunkPos = chunk.getPos();
for (ServerPlayer serverPlayer2 : chunkMap.getPlayers(chunkPos, false)) { for (ServerPlayer serverPlayer2 : chunkMap.getPlayers(chunkPos, false)) {
map.computeIfAbsent(serverPlayer2, serverPlayer -> new ArrayList<>()).add(chunk); map.computeIfAbsent(serverPlayer2, serverPlayer -> new ArrayList<>()).add(chunk);

Datei anzeigen

@ -232,7 +232,7 @@ public class SetBlockPacketListener implements PacketHandler {
ServerLevel level = player.serverLevel(); ServerLevel level = player.serverLevel();
LevelChunk chunk = level.getChunk(cx, cz); LevelChunk chunk = level.getChunk(cx, cz);
chunk.setUnsaved(true); chunk.markUnsaved();
LevelChunkSection section = chunk.getSection(level.getSectionIndexFromSectionY(cy)); LevelChunkSection section = chunk.getSection(level.getSectionIndexFromSectionY(cy));
boolean hasOnlyAir = section.hasOnlyAir(); boolean hasOnlyAir = section.hasOnlyAir();
@ -295,7 +295,7 @@ public class SetBlockPacketListener implements PacketHandler {
level.getChunkSource().blockChanged(blockPos); level.getChunkSource().blockChanged(blockPos);
// Update Light // Update Light
if (LightEngine.hasDifferentLightProperties(chunk, blockPos, old, blockState)) { if (LightEngine.hasDifferentLightProperties(old, blockState)) {
// Note: Skylight Sources not currently needed on Paper due to Starlight // Note: Skylight Sources not currently needed on Paper due to Starlight
// This might change in the future, so be careful! // This might change in the future, so be careful!
// chunk.getSkyLightSources().update(chunk, x, by, z); // chunk.getSkyLightSources().update(chunk, x, by, z);
@ -322,6 +322,7 @@ public class SetBlockPacketListener implements PacketHandler {
boolean nowHasOnlyAir = section.hasOnlyAir(); boolean nowHasOnlyAir = section.hasOnlyAir();
if (hasOnlyAir != nowHasOnlyAir) { if (hasOnlyAir != nowHasOnlyAir) {
level.getChunkSource().getLightEngine().updateSectionStatus(SectionPos.of(cx, cy, cz), nowHasOnlyAir); level.getChunkSource().getLightEngine().updateSectionStatus(SectionPos.of(cx, cy, cz), nowHasOnlyAir);
level.getChunkSource().onSectionEmptinessChanged(cx, cy, cz, nowHasOnlyAir);
} }
} }
} }

Datei anzeigen

@ -14,6 +14,7 @@ import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.network.RegistryFriendlyByteBuf; import net.minecraft.network.RegistryFriendlyByteBuf;
import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerLevel;
import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.EntitySpawnReason;
import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.EntityType;
import net.minecraft.world.entity.decoration.HangingEntity; import net.minecraft.world.entity.decoration.HangingEntity;
import net.minecraft.world.entity.decoration.ItemFrame; import net.minecraft.world.entity.decoration.ItemFrame;
@ -96,7 +97,7 @@ public class SpawnEntityPacketListener implements PacketHandler {
AtomicBoolean useNewUuid = new AtomicBoolean(true); AtomicBoolean useNewUuid = new AtomicBoolean(true);
Entity spawned = EntityType.loadEntityRecursive(tag, serverLevel, entity -> { Entity spawned = EntityType.loadEntityRecursive(tag, serverLevel, EntitySpawnReason.COMMAND, entity -> {
if (!this.plugin.canEntityBeManipulated(entity.getType())) { if (!this.plugin.canEntityBeManipulated(entity.getType())) {
return null; return null;
} }