Update Paper

This commit is contained in:
Telesphoreo 2022-11-10 17:23:17 -06:00
parent 6a4e753d93
commit 1ea217f446
No known key found for this signature in database
GPG Key ID: B5CDDEBA526C0130
41 changed files with 31 additions and 54 deletions

View File

@ -2,7 +2,7 @@ plugins {
java
`maven-publish`
id("com.github.johnrengelman.shadow") version "7.1.2" apply false
id("io.papermc.paperweight.patcher") version "1.3.8"
id("io.papermc.paperweight.patcher") version "1.3.9"
}
val paperMavenPublicUrl = "https://repo.papermc.io/repository/maven-public/"
@ -15,7 +15,7 @@ repositories {
}
dependencies {
remapper("net.fabricmc:tiny-remapper:0.8.2:fat")
remapper("net.fabricmc:tiny-remapper:0.8.6:fat")
decompiler("net.minecraftforge:forgeflower:1.5.605.9")
paperclip("io.papermc:paperclip:3.0.2")
}

View File

@ -2,7 +2,7 @@ group=me.totalfreedom.scissors
version=1.19.2-R0.1-SNAPSHOT
mcVersion=1.19.2
paperRef=aaf5e3997f5bba868834e990ebac7120ab31d0b8
paperRef=117579c6bb7520666dfdd147576903090fa69fdb
org.gradle.caching=true
org.gradle.parallel=true

Binary file not shown.

View File

@ -1,5 +1,5 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.4.2-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-7.5.1-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

View File

@ -5,10 +5,10 @@ Subject: [PATCH] Build changes
diff --git a/build.gradle.kts b/build.gradle.kts
index 2374cc9bab5039d0a0dc11d4b2ec573ab75778a7..72fce1854cc3cddb6deb9912ac41436e01bc806b 100644
index b0e4f11e8af4b909a56bb5576d05ef0537fb25f7..fa6ba78782af95efa65b32f662f5ebb565cfa183 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -9,8 +9,10 @@ plugins {
@@ -7,8 +7,10 @@ plugins {
}
dependencies {
@ -21,7 +21,7 @@ index 2374cc9bab5039d0a0dc11d4b2ec573ab75778a7..72fce1854cc3cddb6deb9912ac41436e
// Paper start
implementation("org.jline:jline-terminal-jansi:3.21.0")
implementation("net.minecrell:terminalconsoleappender:1.3.0")
@@ -60,11 +62,17 @@ tasks.jar {
@@ -58,11 +60,17 @@ tasks.jar {
val gitHash = git("rev-parse", "--short=7", "HEAD").getText().trim()
val implementationVersion = System.getenv("BUILD_NUMBER") ?: "\"$gitHash\""
val date = git("show", "-s", "--format=%ci", gitHash).getText().trim() // Paper
@ -41,7 +41,7 @@ index 2374cc9bab5039d0a0dc11d4b2ec573ab75778a7..72fce1854cc3cddb6deb9912ac41436e
"Implementation-Vendor" to date, // Paper
"Specification-Title" to "Bukkit",
"Specification-Version" to project.version,
@@ -163,7 +171,7 @@ fun TaskContainer.registerRunTask(
@@ -134,7 +142,7 @@ fun TaskContainer.registerRunTask(
name: String,
block: JavaExec.() -> Unit
): TaskProvider<JavaExec> = register<JavaExec>(name) {
@ -51,7 +51,7 @@ index 2374cc9bab5039d0a0dc11d4b2ec573ab75778a7..72fce1854cc3cddb6deb9912ac41436e
standardInput = System.`in`
workingDir = rootProject.layout.projectDirectory
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
index ce81ba5345c8d2fde8a2534b9673275c7e86af8b..076829863c50a645bfee5b2a2bd443026fe162fc 100644
index 6dc6c3bccb4ba34268a87b0754c87eb1e0df4135..0ef065d4d193841ccaca21df70f55cdd5fe15455 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
@@ -1654,7 +1654,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
@ -64,7 +64,7 @@ index ce81ba5345c8d2fde8a2534b9673275c7e86af8b..076829863c50a645bfee5b2a2bd44302
public SystemReport fillSystemReport(SystemReport details) {
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
index 111f8276f26350a5c62a7b8577b4598978b5355d..a09030476eeabe50733d06eb8df20f287a18aecf 100644
index 4212568bf8de6988c71f43d3e2152fa0fe51d0d7..6042a736a7af975331bcfeeae48529368a3057b1 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
@@ -248,7 +248,7 @@ import javax.annotation.Nullable; // Paper

View File

@ -1,23 +0,0 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Luna <lunahatesgogle@gmail.com>
Date: Sun, 13 Mar 2022 11:07:34 -0300
Subject: [PATCH] Ignore null/air bundle items in CraftMetaBundle
diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaBundle.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaBundle.java
index e14318383403f12e26dd7801a9dbdea854df185f..bd3f516a9e9a47c9f00b681b0b457d308bfd1710 100644
--- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaBundle.java
+++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaBundle.java
@@ -47,7 +47,11 @@ public class CraftMetaBundle extends CraftMetaItem implements BundleMeta {
for (int i = 0; i < list.size(); i++) {
CompoundTag nbttagcompound1 = list.getCompound(i);
- this.addItem(CraftItemStack.asCraftMirror(net.minecraft.world.item.ItemStack.of(nbttagcompound1)));
+ // Scissors start
+ CraftItemStack item = CraftItemStack.asCraftMirror(net.minecraft.world.item.ItemStack.of(nbttagcompound1));
+ if(item == null || item.getType().isAir()) continue;
+ this.addItem(item);
+ // Scissors end
}
}
}

View File

@ -18,7 +18,7 @@ index 46681f3fa63516aa750de11cf1dee17cb3734fcd..41d23c244e5e87fdeac75820919adfb5
if (nbt.contains("Properties", 10)) {
CompoundTag compoundTag = nbt.getCompound("Properties");
diff --git a/src/main/java/net/minecraft/world/entity/projectile/AbstractArrow.java b/src/main/java/net/minecraft/world/entity/projectile/AbstractArrow.java
index bc01e5014e1355a225bdf5c47f2965290b45e2d2..8eba392e567afb069ae11b8e94ff72f0aa148ee9 100644
index def3b3f8dac4b28eaaafdd9bc2e7f4b9ec9d6855..5e23504fa6902a5a6f0e95db1f51970f58edad88 100644
--- a/src/main/java/net/minecraft/world/entity/projectile/AbstractArrow.java
+++ b/src/main/java/net/minecraft/world/entity/projectile/AbstractArrow.java
@@ -551,7 +551,7 @@ public abstract class AbstractArrow extends Projectile {

View File

@ -18,7 +18,7 @@ index 2481c50d8eb58a003e30e2d957b877bce5123a3a..6b284666eae8b7e0ef8f54dfe9311a09
// CraftBukkit end
diff --git a/src/main/java/net/minecraft/world/entity/EntityType.java b/src/main/java/net/minecraft/world/entity/EntityType.java
index ac0f0a4da4282c13f6e1f37710cb615d66b8ef2c..e789bcb0c426651a48fb3c78e885c6e3fafb0416 100644
index 72516335570d7137a62ec8667a6e8f06f024692f..eee1e676f521d22d1de6e0ba1fb89c6c31483554 100644
--- a/src/main/java/net/minecraft/world/entity/EntityType.java
+++ b/src/main/java/net/minecraft/world/entity/EntityType.java
@@ -518,7 +518,7 @@ public class EntityType<T extends Entity> implements EntityTypeTest<Entity, T> {
@ -40,7 +40,7 @@ index ac0f0a4da4282c13f6e1f37710cb615d66b8ef2c..e789bcb0c426651a48fb3c78e885c6e3
@Nullable
diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java
index 557e90e54439ce0430075403392b5052d5181feb..2ec4f71fd02bcca5a810cee5d8c7d293599998f7 100644
index fffa6ba329b38433a1df51df339df652d3fda828..6eb0794d78ba83fa387749f51283e798161027e4 100644
--- a/src/main/java/net/minecraft/world/entity/Mob.java
+++ b/src/main/java/net/minecraft/world/entity/Mob.java
@@ -585,7 +585,7 @@ public abstract class Mob extends LivingEntity {

View File

@ -5,7 +5,7 @@ Subject: [PATCH] Fix negative death times
diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java
index cff7993bdafd2f69e46c9985c7601a69ae47f452..fd0de4b4716b75fb4483e34e7c49f68f724e67f4 100644
index 0318c9483a4d96eb39ff4df9054a9e6398186bc3..f3a2e4c356724b4d2ed0b424ae2bf63e9517cc18 100644
--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java
+++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java
@@ -622,7 +622,7 @@ public abstract class LivingEntity extends Entity {

View File

@ -6,7 +6,7 @@ Subject: [PATCH] Validate coordinates before attempting to get block entities
diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
index 9ad36447e82a3504576f6c10cb297514a2f69289..72b23e41d99794c9243ab5cccca00bb3693df972 100644
index 4ab50df1e4c855587ef030cf3f2a1502798cb721..c7d7711be1bd17a25c98578ad68154255135facd 100644
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
@@ -1934,6 +1934,18 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
@ -28,7 +28,7 @@ index 9ad36447e82a3504576f6c10cb297514a2f69289..72b23e41d99794c9243ab5cccca00bb3
@Override
public void handleUseItemOn(ServerboundUseItemOnPacket packet) {
PacketUtils.ensureRunningOnSameThread(packet, this, this.player.getLevel());
@@ -3450,17 +3462,24 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
@@ -3451,17 +3463,24 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
if (!itemstack.isEmpty() && nbttagcompound != null && nbttagcompound.contains("x") && nbttagcompound.contains("y") && nbttagcompound.contains("z") && this.player.getBukkitEntity().hasPermission("minecraft.nbt.copy")) { // Spigot
BlockPos blockposition = BlockEntity.getPosFromTag(nbttagcompound);

View File

@ -5,7 +5,7 @@ Subject: [PATCH] Reset large tags
diff --git a/src/main/java/net/minecraft/world/item/ItemStack.java b/src/main/java/net/minecraft/world/item/ItemStack.java
index 6b3cfc19c4fd1382ddf534265a1114995a4f6b55..6c0ea385df617793aafe995bcf1264ce9b764297 100644
index c18a0bc94d0210396046f4475e49a739088593f3..ee3db7c8b21547ebe941a15de74d9d8d65ea21e7 100644
--- a/src/main/java/net/minecraft/world/item/ItemStack.java
+++ b/src/main/java/net/minecraft/world/item/ItemStack.java
@@ -20,6 +20,7 @@ import java.util.function.Predicate;

View File

@ -59,7 +59,7 @@ index 4092c7a8c2b0d9d26e6f4d97386735236300d132..9e0ab51dd7a4f9fed8f9edde962d42d4
}
}
diff --git a/src/main/java/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java
index 4977f3fad3bfc12fd4c5f9fbe8beea2895247c57..2a005e837108d1879da31e8054afbbd6bf7b175e 100644
index c6aeda6497cb59673b469588142f5f15a338389d..8847a3b3cec47bd36670b77cedab4ef66a8c9270 100644
--- a/src/main/java/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java
+++ b/src/main/java/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java
@@ -9,6 +9,7 @@ import java.util.Iterator;
@ -201,7 +201,7 @@ index 881379681c39230a00b3a1f11cd87498984396c7..1be5d600573f7632e6630224530dd765
}
diff --git a/src/main/java/net/minecraft/world/level/block/entity/HopperBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/HopperBlockEntity.java
index 8ab1d401ed55d4cce55704317cbffe53ebc9f119..5970a1c98cdf966b429c75a1cc178eca813dad11 100644
index ccad692aba2ed77259f6814d88f01b91ed9d229b..da4fc1027e106fd4e4baedd7b9490c41b0e38bd5 100644
--- a/src/main/java/net/minecraft/world/level/block/entity/HopperBlockEntity.java
+++ b/src/main/java/net/minecraft/world/level/block/entity/HopperBlockEntity.java
@@ -5,6 +5,7 @@ import java.util.List;

View File

@ -5,7 +5,7 @@ Subject: [PATCH] Don't log invalid teams to console
diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java
index ac85b2444322d1f2bd5ccdc285443bfc1a4855ca..63229d6c61346821ad45997bddcbbfd95fb96de8 100644
index f3a2e4c356724b4d2ed0b424ae2bf63e9517cc18..d82e72d14adae7f61019a895e513cb34a70730fb 100644
--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java
+++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java
@@ -836,7 +836,9 @@ public abstract class LivingEntity extends Entity {

View File

@ -110,7 +110,7 @@ index 97a2657bc98d41c3c1e376b266d2c85f685acc88..7b6476455e095eed15c92797ce3a3e11
}
}).reduce((accumulator, current) -> {
diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java
index f2908cf61ff28bef44fcf46b15cf585e942fd7ce..f96156a80f0b503963fcfc289ee2289655b975ff 100644
index 6fa47becd0f83ac4273ef3a10c314aa27b08184b..a931aaa05f3e8c499e7e968f6fa1e908d0f2ea24 100644
--- a/src/main/java/net/minecraft/world/entity/Entity.java
+++ b/src/main/java/net/minecraft/world/entity/Entity.java
@@ -2315,12 +2315,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource {

View File

@ -5,7 +5,7 @@ Subject: [PATCH] Add spectator teleport event
diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
index 9b34348cc01da257cccf9ff387fb8151eb1e6729..64680b3e8d5b6cc6da86f5beb9e44dd9ba82aa96 100644
index c7d7711be1bd17a25c98578ad68154255135facd..21f2fa5b1e0eb2cdf73a0f3b6e4fec1c63fac062 100644
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
@@ -1,5 +1,6 @@

View File

@ -5,7 +5,7 @@ Subject: [PATCH] Prevent invalid container events
diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
index e3475e6995a4d260628ee31fe6d2fbe13a2bfbc2..3f2e20d3880f2523fae8e9c1006ef9b4d87ed997 100644
index 21f2fa5b1e0eb2cdf73a0f3b6e4fec1c63fac062..ad44b5b98babdd16fd9cfadb052cb7b6ba963ea1 100644
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
@@ -29,6 +29,8 @@ import java.util.function.UnaryOperator;
@ -17,7 +17,7 @@ index e3475e6995a4d260628ee31fe6d2fbe13a2bfbc2..3f2e20d3880f2523fae8e9c1006ef9b4
import net.minecraft.ChatFormatting;
import net.minecraft.CrashReport;
import net.minecraft.CrashReportCategory;
@@ -3097,6 +3099,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
@@ -3098,6 +3100,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
public void handleContainerClick(ServerboundContainerClickPacket packet) {
PacketUtils.ensureRunningOnSameThread(packet, this, this.player.getLevel());
if (this.player.isImmobile()) return; // CraftBukkit
@ -25,7 +25,7 @@ index e3475e6995a4d260628ee31fe6d2fbe13a2bfbc2..3f2e20d3880f2523fae8e9c1006ef9b4
this.player.resetLastActionTime();
if (this.player.containerMenu.containerId == packet.getContainerId() && this.player.containerMenu.stillValid(this.player)) { // CraftBukkit
boolean cancelled = this.player.isSpectator(); // CraftBukkit - see below if
@@ -3118,6 +3121,18 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
@@ -3119,6 +3122,18 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
return;
}

View File

@ -5,7 +5,7 @@ Subject: [PATCH] Do not attempt to cast items to recipes
diff --git a/src/main/java/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java
index 2a005e837108d1879da31e8054afbbd6bf7b175e..97bcfb36a37eb7d889d6233e7de9b7b53c8a8a5c 100644
index 8847a3b3cec47bd36670b77cedab4ef66a8c9270..b07757bbaf61303368763c681b4096f730e17a4c 100644
--- a/src/main/java/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java
+++ b/src/main/java/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java
@@ -648,6 +648,13 @@ public abstract class AbstractFurnaceBlockEntity extends BaseContainerBlockEntit

View File

@ -388,7 +388,7 @@ index 0000000000000000000000000000000000000000..e08f502fc7165f9f466217910210edb5
+}
+
diff --git a/src/main/java/net/minecraft/server/Main.java b/src/main/java/net/minecraft/server/Main.java
index 5962f7a2b185d7d54a0f9e341a4fdf6e6f1c1ec5..41cc0fe90e10ee53c4fcd49265be02978ab97099 100644
index 88ef769abfa163f923258d1f83d47b28c491eaca..632dfd34829515893a07b35dfa91302188d67a3c 100644
--- a/src/main/java/net/minecraft/server/Main.java
+++ b/src/main/java/net/minecraft/server/Main.java
@@ -118,6 +118,7 @@ public class Main {
@ -400,7 +400,7 @@ index 5962f7a2b185d7d54a0f9e341a4fdf6e6f1c1ec5..41cc0fe90e10ee53c4fcd49265be0297
Path path1 = Paths.get("eula.txt");
diff --git a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java
index 2932d2bb797a49e904cebec4285d24d69b429cd9..25d3949fc39cb463c8190a2c5db6ccb1ef662642 100644
index ff3eced0e20c39b825586897ee2fed01dd471d88..a991be4e8a9836b50eca5d58e14773134aab9b79 100644
--- a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java
+++ b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java
@@ -226,7 +226,15 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface
@ -421,7 +421,7 @@ index 2932d2bb797a49e904cebec4285d24d69b429cd9..25d3949fc39cb463c8190a2c5db6ccb1
this.setFlightAllowed(dedicatedserverproperties.allowFlight);
this.setMotd(dedicatedserverproperties.motd);
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
index a09030476eeabe50733d06eb8df20f287a18aecf..6707f27b22fe3cb935cb8f7043914a5ceb0425a3 100644
index 6042a736a7af975331bcfeeae48529368a3057b1..9863921b98730976fad0da814c4e311bd9fe2a8a 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
@@ -965,6 +965,8 @@ public final class CraftServer implements Server {

View File

@ -5,7 +5,7 @@ Subject: [PATCH] Validate block entity tag query positions
diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
index 2fdaa6ff9782684b8840d7f76fe08680e53de635..03776df3303e74fa9bf88453180b43a8e30efa54 100644
index ad44b5b98babdd16fd9cfadb052cb7b6ba963ea1..45de153b74e7d48acf63326407481542a5e22ff9 100644
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
@@ -1372,7 +1372,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic

View File

@ -34,7 +34,7 @@ index 1aa418ef5e400aabdf17dbe81da6cee6a1f63d96..9cd5ffca69df27f794f5a72e687fc6b3
{
config.set(path, val);
diff --git a/src/main/java/net/minecraft/world/level/block/entity/SignBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/SignBlockEntity.java
index def4fdd2c7e4f925fa128692a744e5d10ae0203a..6ea38c4cb62c71e208b64629f8a427a40c062f3c 100644
index 58599ead28c25a76d9f41d2d29ee8024c9afdccd..a4ea00cbe0cae3664391d3b84a0e6956a3253491 100644
--- a/src/main/java/net/minecraft/world/level/block/entity/SignBlockEntity.java
+++ b/src/main/java/net/minecraft/world/level/block/entity/SignBlockEntity.java
@@ -1,11 +1,13 @@