-
Notifications
You must be signed in to change notification settings - Fork 5
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
a46abce
commit 8a5cd40
Showing
11 changed files
with
442 additions
and
2 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
19 changes: 19 additions & 0 deletions
19
patches/server/0017-Don-t-log-invalid-teams-to-console.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 | ||
From: Telesphoreo <me@telesphoreo.me> | ||
Date: Sat, 11 May 2024 12:24:26 -0500 | ||
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 8ff815b1bb77eab735c65fa9c6bf469dca8562c4..8768ab338836569d53e0a70cc5f097b5a6d721ec 100644 | ||
--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java | ||
+++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java | ||
@@ -901,7 +901,7 @@ public abstract class LivingEntity extends Entity implements Attackable { | ||
boolean flag = scoreboardteam != null && scoreboard.addPlayerToTeam(this.getStringUUID(), scoreboardteam); | ||
|
||
if (!flag) { | ||
- LivingEntity.LOGGER.warn("Unable to add mob to team \"{}\" (that team probably doesn't exist)", s); | ||
+ // Scissors - Prevent log spam possible with this error message, easily provokable by players in creative. | ||
} | ||
} | ||
|
24 changes: 24 additions & 0 deletions
24
patches/server/0018-Fixes-out-of-bounds-HangingEntity-crash-exploit.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 | ||
From: Video <videogamesm12@gmail.com> | ||
Date: Fri, 19 Aug 2022 00:49:38 -0600 | ||
Subject: [PATCH] Fixes out of bounds HangingEntity crash exploit | ||
|
||
|
||
diff --git a/src/main/java/net/minecraft/world/entity/decoration/HangingEntity.java b/src/main/java/net/minecraft/world/entity/decoration/HangingEntity.java | ||
index bf2d91bbb4bf401696f5f5d14a67e3920a179084..e31102bb56fac4ffc1e114cc8ea2075af0f92e7f 100644 | ||
--- a/src/main/java/net/minecraft/world/entity/decoration/HangingEntity.java | ||
+++ b/src/main/java/net/minecraft/world/entity/decoration/HangingEntity.java | ||
@@ -279,6 +279,13 @@ public abstract class HangingEntity extends Entity { | ||
public void readAdditionalSaveData(CompoundTag nbt) { | ||
BlockPos blockposition = new BlockPos(nbt.getInt("TileX"), nbt.getInt("TileY"), nbt.getInt("TileZ")); | ||
|
||
+ // Scissors start - Fixes exploit where bad TileX, TileY, and TileZ coordinates can crash servers | ||
+ if (level().isLoadedAndInBounds(blockposition)) | ||
+ { | ||
+ this.pos = blockposition; | ||
+ } | ||
+ // Scissors end | ||
+ | ||
if (!blockposition.closerThan(this.blockPosition(), 16.0D)) { | ||
HangingEntity.LOGGER.error("Hanging entity at invalid position: {}", blockposition); | ||
} else { |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,141 @@ | ||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 | ||
From: Telesphoreo <me@telesphoreo.me> | ||
Date: Sat, 11 May 2024 12:31:03 -0500 | ||
Subject: [PATCH] Add MasterBlockFireEvent | ||
|
||
|
||
diff --git a/src/main/java/net/minecraft/world/level/block/CommandBlock.java b/src/main/java/net/minecraft/world/level/block/CommandBlock.java | ||
index ec1a8c60ccac50e5131f937c4262128fd2768331..385c73cc952caea21f6ebf5512fdf72bf121b953 100644 | ||
--- a/src/main/java/net/minecraft/world/level/block/CommandBlock.java | ||
+++ b/src/main/java/net/minecraft/world/level/block/CommandBlock.java | ||
@@ -4,6 +4,7 @@ import com.mojang.logging.LogUtils; | ||
import com.mojang.serialization.Codec; | ||
import com.mojang.serialization.MapCodec; | ||
import com.mojang.serialization.codecs.RecordCodecBuilder; | ||
+import me.totalfreedom.scissors.event.block.MasterBlockFireEvent; | ||
import net.minecraft.core.BlockPos; | ||
import net.minecraft.core.Direction; | ||
import net.minecraft.core.component.DataComponents; | ||
@@ -27,6 +28,7 @@ import net.minecraft.world.level.block.state.properties.BlockStateProperties; | ||
import net.minecraft.world.level.block.state.properties.BooleanProperty; | ||
import net.minecraft.world.level.block.state.properties.DirectionProperty; | ||
import net.minecraft.world.phys.BlockHitResult; | ||
+import org.bukkit.Location; | ||
import org.slf4j.Logger; | ||
|
||
import org.bukkit.event.block.BlockRedstoneEvent; // CraftBukkit | ||
@@ -128,6 +130,13 @@ public class CommandBlock extends BaseEntityBlock implements GameMasterBlock { | ||
} | ||
|
||
private void execute(BlockState state, Level world, BlockPos pos, BaseCommandBlock executor, boolean hasCommand) { | ||
+ // Scissors start - Add master block fire event | ||
+ final MasterBlockFireEvent event = new MasterBlockFireEvent(new Location(world.getWorld(), pos.getX(), pos.getY(), pos.getZ())); | ||
+ if (!event.callEvent()) { | ||
+ return; | ||
+ } | ||
+ // Scissors end | ||
+ | ||
if (hasCommand) { | ||
executor.performCommand(world); | ||
} else { | ||
diff --git a/src/main/java/net/minecraft/world/level/block/entity/JigsawBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/JigsawBlockEntity.java | ||
index 922592f2073eaea8ca361a3a1efcda8b18bea21c..7fec97a00f271eca29beca0ec0862de4036dd546 100644 | ||
--- a/src/main/java/net/minecraft/world/level/block/entity/JigsawBlockEntity.java | ||
+++ b/src/main/java/net/minecraft/world/level/block/entity/JigsawBlockEntity.java | ||
@@ -2,6 +2,8 @@ package net.minecraft.world.level.block.entity; | ||
|
||
import java.util.Arrays; | ||
import java.util.Optional; | ||
+ | ||
+import me.totalfreedom.scissors.event.block.MasterBlockFireEvent; | ||
import net.minecraft.core.BlockPos; | ||
import net.minecraft.core.Holder; | ||
import net.minecraft.core.HolderLookup; | ||
@@ -18,6 +20,7 @@ import net.minecraft.world.level.block.JigsawBlock; | ||
import net.minecraft.world.level.block.state.BlockState; | ||
import net.minecraft.world.level.levelgen.structure.pools.JigsawPlacement; | ||
import net.minecraft.world.level.levelgen.structure.pools.StructureTemplatePool; | ||
+import org.bukkit.Location; | ||
|
||
public class JigsawBlockEntity extends BlockEntity { | ||
public static final String TARGET = "target"; | ||
@@ -135,6 +138,14 @@ public class JigsawBlockEntity extends BlockEntity { | ||
} | ||
|
||
public void generate(ServerLevel world, int maxDepth, boolean keepJigsaws) { | ||
+ // Scissors start - Add master block fire event | ||
+ final BlockPos pos = this.getBlockPos(); | ||
+ final MasterBlockFireEvent event = new MasterBlockFireEvent(new Location(this.getLevel().getWorld(), pos.getX(), pos.getY(), pos.getZ())); | ||
+ if (!event.callEvent()) { | ||
+ return; | ||
+ } | ||
+ // Scissors end | ||
+ | ||
BlockPos blockPos = this.getBlockPos().relative(this.getBlockState().getValue(JigsawBlock.ORIENTATION).front()); | ||
Registry<StructureTemplatePool> registry = world.registryAccess().registryOrThrow(Registries.TEMPLATE_POOL); | ||
// Paper start - Replace getHolderOrThrow with a null check | ||
diff --git a/src/main/java/net/minecraft/world/level/block/entity/StructureBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/StructureBlockEntity.java | ||
index ab3e35069a069040f72900a9581f41848e4c4653..d390b05486dcaa563269500b350aecd9dfa3bc28 100644 | ||
--- a/src/main/java/net/minecraft/world/level/block/entity/StructureBlockEntity.java | ||
+++ b/src/main/java/net/minecraft/world/level/block/entity/StructureBlockEntity.java | ||
@@ -5,6 +5,8 @@ import java.util.Objects; | ||
import java.util.Optional; | ||
import java.util.stream.Stream; | ||
import javax.annotation.Nullable; | ||
+ | ||
+import me.totalfreedom.scissors.event.block.MasterBlockFireEvent; | ||
import net.minecraft.ResourceLocationException; | ||
import net.minecraft.Util; | ||
import net.minecraft.core.BlockPos; | ||
@@ -30,6 +32,7 @@ import net.minecraft.world.level.levelgen.structure.templatesystem.BlockRotProce | ||
import net.minecraft.world.level.levelgen.structure.templatesystem.StructurePlaceSettings; | ||
import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplate; | ||
import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplateManager; | ||
+import org.bukkit.Location; | ||
|
||
public class StructureBlockEntity extends BlockEntity { | ||
private static final int SCAN_CORNER_BLOCKS_RANGE = 5; | ||
@@ -317,6 +320,14 @@ public class StructureBlockEntity extends BlockEntity { | ||
if (this.structureName == null) { | ||
return false; | ||
} else { | ||
+ // Scissors start - Add master block fire event | ||
+ final BlockPos pos = this.getBlockPos(); | ||
+ final MasterBlockFireEvent event = new MasterBlockFireEvent(new Location(this.getLevel().getWorld(), pos.getX(), pos.getY(), pos.getZ())); | ||
+ if (!event.callEvent()) { | ||
+ return false; | ||
+ } | ||
+ // Scissors end | ||
+ | ||
BlockPos blockPos = this.getBlockPos().offset(this.structurePos); | ||
ServerLevel serverLevel = (ServerLevel)this.level; | ||
StructureTemplateManager structureTemplateManager = serverLevel.getStructureManager(); | ||
@@ -368,6 +379,13 @@ public class StructureBlockEntity extends BlockEntity { | ||
if (structureTemplate == null) { | ||
return false; | ||
} else { | ||
+ // Scissors start - Add master block fire event | ||
+ final BlockPos blockPos = this.getBlockPos(); | ||
+ final MasterBlockFireEvent event = new MasterBlockFireEvent(new Location(this.getLevel().getWorld(), blockPos.getX(), blockPos.getY(), blockPos.getZ())); | ||
+ if (!event.callEvent()) { | ||
+ return false; | ||
+ } | ||
+ // Scissors end | ||
this.loadStructureInfo(structureTemplate); | ||
return true; | ||
} | ||
@@ -408,6 +426,14 @@ public class StructureBlockEntity extends BlockEntity { | ||
} | ||
|
||
public void unloadStructure() { | ||
+ // Scissors start - Add master block fire event | ||
+ final BlockPos blockPos = this.getBlockPos(); | ||
+ final MasterBlockFireEvent event = new MasterBlockFireEvent(new Location(this.getLevel().getWorld(), blockPos.getX(), blockPos.getY(), blockPos.getZ())); | ||
+ | ||
+ if (!event.callEvent()) { | ||
+ return; | ||
+ } | ||
+ // Scissors end | ||
if (this.structureName != null) { | ||
ServerLevel serverLevel = (ServerLevel)this.level; | ||
StructureTemplateManager structureTemplateManager = serverLevel.getStructureManager(); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 | ||
From: Telesphoreo <me@telesphoreo.me> | ||
Date: Sat, 11 May 2024 13:02:20 -0500 | ||
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 5e9202bc7fc649764568b55d66ba0d684118c00c..31a6be18075723eb53fd1cbb664429e49909cf66 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.Consumer; | ||
import java.util.stream.Collectors; | ||
import java.util.stream.Stream; | ||
import javax.annotation.Nullable; | ||
+ | ||
+import me.totalfreedom.scissors.event.player.SpectatorTeleportEvent; | ||
import net.minecraft.ChatFormatting; | ||
import net.minecraft.Util; | ||
import net.minecraft.advancements.AdvancementHolder; | ||
@@ -2033,6 +2035,12 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl | ||
Entity entity = packet.getEntity(worldserver); | ||
|
||
if (entity != null) { | ||
+ // Scissors start - Add spectator teleport event | ||
+ final SpectatorTeleportEvent event = new SpectatorTeleportEvent(this.player.getBukkitEntity(), entity.getBukkitEntity()); | ||
+ if (!event.callEvent()) { | ||
+ return; | ||
+ } | ||
+ // Scissors end | ||
this.player.teleportTo(worldserver, entity.getX(), entity.getY(), entity.getZ(), entity.getYRot(), entity.getXRot(), org.bukkit.event.player.PlayerTeleportEvent.TeleportCause.SPECTATE); // CraftBukkit | ||
return; | ||
} |
37 changes: 37 additions & 0 deletions
37
patches/server/0021-Prevent-invalid-container-events.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,37 @@ | ||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 | ||
From: Telesphoreo <me@telesphoreo.me> | ||
Date: Sat, 11 May 2024 13:04:21 -0500 | ||
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 31a6be18075723eb53fd1cbb664429e49909cf66..65284355b6fc97eb1967e5c6fd51bc5b018e3e29 100644 | ||
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java | ||
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java | ||
@@ -31,6 +31,7 @@ import java.util.stream.Stream; | ||
import javax.annotation.Nullable; | ||
|
||
import me.totalfreedom.scissors.event.player.SpectatorTeleportEvent; | ||
+import net.kyori.adventure.text.format.NamedTextColor; | ||
import net.minecraft.ChatFormatting; | ||
import net.minecraft.Util; | ||
import net.minecraft.advancements.AdvancementHolder; | ||
@@ -2981,6 +2982,18 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl | ||
return; | ||
} | ||
|
||
+ // Scissors start - Do not call events when the slot/button number is invalid | ||
+ final int sentSlotNum = packet.getSlotNum(); | ||
+ if((Mth.clamp(sentSlotNum, -1, this.player.containerMenu.slots.size() - 1) != sentSlotNum) && sentSlotNum != -999) | ||
+ { | ||
+ this.getCraftPlayer().kick( | ||
+ net.kyori.adventure.text.Component.text("Invalid container click slot (Hacking?)") | ||
+ .color(NamedTextColor.RED) | ||
+ ); | ||
+ return; | ||
+ } | ||
+ // Scissors end | ||
+ | ||
InventoryView inventory = this.player.containerMenu.getBukkitView(); | ||
SlotType type = inventory.getSlotType(packet.getSlotNum()); | ||
|
31 changes: 31 additions & 0 deletions
31
patches/server/0022-Validate-block-entity-entity-tag-query-positions.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,31 @@ | ||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 | ||
From: Telesphoreo <me@telesphoreo.me> | ||
Date: Sat, 11 May 2024 13:08:40 -0500 | ||
Subject: [PATCH] Validate block entity/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 65284355b6fc97eb1967e5c6fd51bc5b018e3e29..26eb85c9be17fcac00a5f31c2ede3111319c4044 100644 | ||
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java | ||
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java | ||
@@ -1266,7 +1266,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl | ||
if (this.player.hasPermissions(2)) { | ||
Entity entity = this.player.level().getEntity(packet.getEntityId()); | ||
|
||
- if (entity != null) { | ||
+ if (entity != null && this.player.distanceToSqr(entity.position().x, entity.position().y, entity.position().z) < 32 * 32) { // Scissors - Validate entity tag query positions | ||
CompoundTag nbttagcompound = entity.saveWithoutId(new CompoundTag()); | ||
|
||
this.player.connection.send(new ClientboundTagQueryPacket(packet.getTransactionId(), nbttagcompound)); | ||
@@ -1298,7 +1298,10 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl | ||
@Override | ||
public void handleBlockEntityTagQuery(ServerboundBlockEntityTagQueryPacket packet) { | ||
PacketUtils.ensureRunningOnSameThread(packet, this, this.player.serverLevel()); | ||
- if (this.player.hasPermissions(2)) { | ||
+ // Scissors start - Validate block entity tag query positions | ||
+ if (this.player.hasPermissions(2) && this.player.level().isLoadedAndInBounds(packet.getPos()) | ||
+ && this.player.distanceToSqr(packet.getPos().getX(), packet.getPos().getY(), packet.getPos().getZ()) < 32 * 32) { | ||
+ // Scissors end | ||
BlockEntity tileentity = this.player.level().getBlockEntity(packet.getPos()); | ||
CompoundTag nbttagcompound = tileentity != null ? tileentity.saveWithoutMetadata(this.player.registryAccess()) : null; | ||
|
18 changes: 18 additions & 0 deletions
18
patches/server/0023-Refuse-to-convert-legacy-messages-over-1k-characters.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 | ||
From: Telesphoreo <me@telesphoreo.me> | ||
Date: Sat, 11 May 2024 13:09:44 -0500 | ||
Subject: [PATCH] Refuse to convert legacy messages over 1k characters | ||
|
||
|
||
diff --git a/src/main/java/org/bukkit/craftbukkit/util/CraftChatMessage.java b/src/main/java/org/bukkit/craftbukkit/util/CraftChatMessage.java | ||
index 42ab6e0ba77fb2f0350bee72488e905074989b4d..4785dc2467ade8cad5c92c3d734cf6b2877a2693 100644 | ||
--- a/src/main/java/org/bukkit/craftbukkit/util/CraftChatMessage.java | ||
+++ b/src/main/java/org/bukkit/craftbukkit/util/CraftChatMessage.java | ||
@@ -207,6 +207,7 @@ public final class CraftChatMessage { | ||
} | ||
|
||
public static Component[] fromString(String message, boolean keepNewlines, boolean plain) { | ||
+ if (message.length() > 1_000) return new Component[]{Component.empty()}; // Scissors - Refuse to convert legacy messages over 1k characters | ||
return new StringMessage(message, keepNewlines, plain).getOutput(); | ||
} | ||
|
Oops, something went wrong.