From 0d6eb6daeffa63af95ea0747c7d23a5046001a4e Mon Sep 17 00:00:00 2001 From: Telesphoreo Date: Sat, 11 Jun 2022 22:37:25 -0500 Subject: [PATCH] Add a few more patches --- ...018-Limit-ListTags-to-1024-elements.patch} | 4 +- ...illing-potion-effects-and-certain-po.patch | 53 +++++++++++ .../0020-Fix-negative-death-times.patch | 19 ++++ patches/server/0021-Reset-large-tags.patch | 87 +++++++++++++++++++ 4 files changed, 161 insertions(+), 2 deletions(-) rename patches/server/{0019-Limit-ListTags-to-1024-elements.patch => 0018-Limit-ListTags-to-1024-elements.patch} (81%) create mode 100644 patches/server/0019-Fixes-creative-killing-potion-effects-and-certain-po.patch create mode 100644 patches/server/0020-Fix-negative-death-times.patch create mode 100644 patches/server/0021-Reset-large-tags.patch diff --git a/patches/server/0019-Limit-ListTags-to-1024-elements.patch b/patches/server/0018-Limit-ListTags-to-1024-elements.patch similarity index 81% rename from patches/server/0019-Limit-ListTags-to-1024-elements.patch rename to patches/server/0018-Limit-ListTags-to-1024-elements.patch index a22d29d..e20309e 100644 --- a/patches/server/0019-Limit-ListTags-to-1024-elements.patch +++ b/patches/server/0018-Limit-ListTags-to-1024-elements.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Limit ListTags to 1024 elements diff --git a/src/main/java/net/minecraft/nbt/ListTag.java b/src/main/java/net/minecraft/nbt/ListTag.java -index ea68b26e506e48d8238b7ee4266e61b211d52bd2..10d3a1b31233f884823ee9a4bb27d70eac3914df 100644 +index f346306d61854bdc6b395f5d8f799909537a1b50..fef39a78552188e90ebfcd608e7bf9e15c385bd1 100644 --- a/src/main/java/net/minecraft/nbt/ListTag.java +++ b/src/main/java/net/minecraft/nbt/ListTag.java -@@ -33,6 +33,7 @@ public class ListTag extends CollectionTag { +@@ -30,6 +30,7 @@ public class ListTag extends CollectionTag { list.add(tagType.load(dataInput, i + 1, nbtAccounter)); } diff --git a/patches/server/0019-Fixes-creative-killing-potion-effects-and-certain-po.patch b/patches/server/0019-Fixes-creative-killing-potion-effects-and-certain-po.patch new file mode 100644 index 0000000..802975c --- /dev/null +++ b/patches/server/0019-Fixes-creative-killing-potion-effects-and-certain-po.patch @@ -0,0 +1,53 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Video +Date: Mon, 11 Apr 2022 13:33:52 -0600 +Subject: [PATCH] Fixes creative-killing potion effects and certain potion + effect overflows + + +diff --git a/src/main/java/net/minecraft/world/effect/MobEffect.java b/src/main/java/net/minecraft/world/effect/MobEffect.java +index 17ffab92f4ae2c06fa9f9249a474d4b6c9c55090..b2701b5779d9930e2cf6460b1e258cd80c4465f0 100644 +--- a/src/main/java/net/minecraft/world/effect/MobEffect.java ++++ b/src/main/java/net/minecraft/world/effect/MobEffect.java +@@ -59,6 +59,7 @@ public class MobEffect { + } + + public void applyEffectTick(LivingEntity entity, int amplifier) { ++ boolean god = entity instanceof Player player && (player.isCreative() || player.isInvulnerable()); // Scissors + if (this == MobEffects.REGENERATION) { + if (entity.getHealth() < entity.getMaxHealth()) { + entity.heal(1.0F, RegainReason.MAGIC_REGEN); // CraftBukkit +@@ -87,17 +88,31 @@ public class MobEffect { + // CraftBukkit end + } + } else if ((this != MobEffects.HEAL || entity.isInvertedHealAndHarm()) && (this != MobEffects.HARM || !entity.isInvertedHealAndHarm())) { +- if (this == MobEffects.HARM && !entity.isInvertedHealAndHarm() || this == MobEffects.HEAL && entity.isInvertedHealAndHarm()) { ++ // Scissors start ++ amplifier = Math.min(Math.abs(amplifier), 124); ++ if (!god && (this == MobEffects.HARM && !entity.isInvertedHealAndHarm() || this == MobEffects.HEAL && entity.isInvertedHealAndHarm())) { + entity.hurt(DamageSource.MAGIC, (float) (6 << amplifier)); + } ++ // Scissors end + } else { +- entity.heal((float) Math.max(4 << amplifier, 0), RegainReason.MAGIC); // CraftBukkit ++ // Scissors start ++ if (!god) { ++ amplifier = Math.min(Math.abs(amplifier), 124); ++ entity.heal((float) Math.max(4 << amplifier, 0), RegainReason.MAGIC); // CraftBukkit ++ } ++ // Scissors end + } + + } + + public void applyInstantenousEffect(@Nullable Entity source, @Nullable Entity attacker, LivingEntity target, int amplifier, double proximity) { + int j; ++ // Scissors start - Don't apply any healing/harming effects for Creative/Invulnerable players and cap the amplifier for those who aren't. ++ if (target instanceof Player player && (player.isCreative() || player.isInvulnerable())) { ++ return; ++ } ++ amplifier = Math.min(Math.abs(amplifier), 124); ++ // Scissors end + + if ((this != MobEffects.HEAL || target.isInvertedHealAndHarm()) && (this != MobEffects.HARM || !target.isInvertedHealAndHarm())) { + if ((this != MobEffects.HARM || target.isInvertedHealAndHarm()) && (this != MobEffects.HEAL || !target.isInvertedHealAndHarm())) { diff --git a/patches/server/0020-Fix-negative-death-times.patch b/patches/server/0020-Fix-negative-death-times.patch new file mode 100644 index 0000000..0e3dfe9 --- /dev/null +++ b/patches/server/0020-Fix-negative-death-times.patch @@ -0,0 +1,19 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Telesphoreo +Date: Fri, 3 Jun 2022 19:30:14 -0500 +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 e8dc99752d06ca40f17f3ad2c829b2447b703d7c..ac85b2444322d1f2bd5ccdc285443bfc1a4855ca 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 { + + protected void tickDeath() { + ++this.deathTime; +- if (this.deathTime == 20 && !this.level.isClientSide()) { ++ if ((this.deathTime >= 20 || this.deathTime <= 0) && !this.level.isClientSide()) { + this.level.broadcastEntityEvent(this, (byte) 60); + this.remove(Entity.RemovalReason.KILLED); + } diff --git a/patches/server/0021-Reset-large-tags.patch b/patches/server/0021-Reset-large-tags.patch new file mode 100644 index 0000000..35e2de9 --- /dev/null +++ b/patches/server/0021-Reset-large-tags.patch @@ -0,0 +1,87 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Telesphoreo +Date: Fri, 22 Apr 2022 01:56:03 -0500 +Subject: [PATCH] Reset large tags + + +diff --git a/src/main/java/me/totalfreedom/scissors/NbtUtility.java b/src/main/java/me/totalfreedom/scissors/NbtUtility.java +new file mode 100644 +index 0000000000000000000000000000000000000000..fd408bd8bb0ad4a96abfbd5721fe4ecd7066297c +--- /dev/null ++++ b/src/main/java/me/totalfreedom/scissors/NbtUtility.java +@@ -0,0 +1,28 @@ ++package me.totalfreedom.scissors; ++ ++import java.nio.charset.StandardCharsets; ++import javax.annotation.Nullable; ++import net.minecraft.nbt.CompoundTag; ++ ++public class NbtUtility ++{ ++ public static boolean isTooLarge(@Nullable CompoundTag tag) ++ { ++ if (tag == null) ++ { ++ return false; ++ } ++ return tag.toString().getBytes(StandardCharsets.UTF_8).length > (256 * 1024); ++ } ++ ++ public static class Item ++ { ++ public static CompoundTag removeItemData(CompoundTag tag) ++ { ++ CompoundTag cleaned = new CompoundTag(); ++ cleaned.putString("id", tag.getString("id")); ++ cleaned.putByte("Count", tag.getByte("Count")); ++ return cleaned; ++ } ++ } ++} +diff --git a/src/main/java/net/minecraft/world/item/ItemStack.java b/src/main/java/net/minecraft/world/item/ItemStack.java +index 6b3cfc19c4fd1382ddf534265a1114995a4f6b55..10eb3261e215870997784751523e1609360f27ee 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; + import java.util.stream.Collectors; + import java.util.stream.Stream; + import javax.annotation.Nullable; ++import me.totalfreedom.scissors.NbtUtility; + import net.minecraft.ChatFormatting; + import net.minecraft.Util; + import net.minecraft.advancements.CriteriaTriggers; +@@ -251,6 +252,12 @@ public final class ItemStack { + + // CraftBukkit - break into own method + private void load(CompoundTag nbttagcompound) { ++ // Scissors start - Reset large tags ++ if (NbtUtility.isTooLarge(nbttagcompound)) { ++ // Reset tag without destroying item ++ nbttagcompound = NbtUtility.Item.removeItemData(nbttagcompound); ++ } ++ // Scissors end + this.item = (Item) Registry.ITEM.get(new ResourceLocation(nbttagcompound.getString("id"))); + this.count = nbttagcompound.getByte("Count"); + if (nbttagcompound.contains("tag", 10)) { +@@ -682,6 +689,11 @@ public final class ItemStack { + + itemstack.setPopTime(this.getPopTime()); + if (this.tag != null) { ++ // Scissors start - Don't save large tags ++ if (!NbtUtility.isTooLarge(this.tag)) { ++ itemstack.tag.put("tag", this.tag.copy()); ++ } ++ // Scissors end + itemstack.tag = this.tag.copy(); + } + +@@ -839,6 +851,9 @@ public final class ItemStack { + // Paper end + + public void setTag(@Nullable CompoundTag nbt) { ++ // Scissors start - Ignore large tags ++ if (NbtUtility.isTooLarge(nbt)) return; ++ // Scissors end + this.tag = nbt; + this.processEnchantOrder(this.tag); // Paper + if (this.getItem().canBeDepleted()) {