From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Allink Date: Mon, 4 Jul 2022 22:12:19 +0100 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 2e7c03b00bc941b86df6a7f1b2b188c9f0aede22..333f9bcccbe9ecd88c1fd13e2956f69414d6e295 100644 --- a/src/main/java/net/minecraft/world/level/block/CommandBlock.java +++ b/src/main/java/net/minecraft/world/level/block/CommandBlock.java @@ -1,5 +1,6 @@ package net.minecraft.world.level.block; +import me.totalfreedom.scissors.event.block.MasterBlockFireEvent; import com.mojang.logging.LogUtils; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; @@ -25,10 +26,10 @@ 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.event.block.BlockRedstoneEvent; +import org.bukkit.Location; import org.slf4j.Logger; -import org.bukkit.event.block.BlockRedstoneEvent; // CraftBukkit - public class CommandBlock extends BaseEntityBlock implements GameMasterBlock { private static final Logger LOGGER = LogUtils.getLogger(); @@ -117,6 +118,15 @@ public class CommandBlock extends BaseEntityBlock implements GameMasterBlock { } private void execute(BlockState state, Level world, BlockPos pos, BaseCommandBlock executor, boolean hasCommand) { + // Scissors - 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/StructureBlock.java b/src/main/java/net/minecraft/world/level/block/StructureBlock.java index a3dac53b07618819b322b48339d850d80a1c55ba..4dd21b7ea247b3ced3d3ee6c67746cc6811d5bb8 100644 --- a/src/main/java/net/minecraft/world/level/block/StructureBlock.java +++ b/src/main/java/net/minecraft/world/level/block/StructureBlock.java @@ -1,6 +1,7 @@ package net.minecraft.world.level.block; import javax.annotation.Nullable; + import net.minecraft.core.BlockPos; import net.minecraft.server.level.ServerLevel; import net.minecraft.world.InteractionHand; 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 b56e4be3228489b5b910c23bde1717d5d3e2ad9a..e22b91b7ac53ce8d3b7a39bda4525f82e187fc45 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.Registry; @@ -16,6 +18,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"; @@ -106,6 +109,16 @@ public class JigsawBlockEntity extends BlockEntity { } public void generate(ServerLevel world, int maxDepth, boolean keepJigsaws) { + // Scissors - 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 registry = world.registryAccess().registryOrThrow(Registry.TEMPLATE_POOL_REGISTRY); // 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 9792bf3ee083f571f1f4089d30beb586839f5f6b..e9d584b0ca984f9b7c70f99e1665cdedecb710e1 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; @@ -29,6 +31,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; @@ -264,7 +267,6 @@ public class StructureBlockEntity extends BlockEntity { return false; } else { BlockPos blockPos = this.getBlockPos(); - int i = 80; BlockPos blockPos2 = new BlockPos(blockPos.getX() - 80, this.level.getMinBuildHeight(), blockPos.getZ() - 80); BlockPos blockPos3 = new BlockPos(blockPos.getX() + 80, this.level.getMaxBuildHeight() - 1, blockPos.getZ() + 80); Stream stream = this.getRelatedCorners(blockPos2, blockPos3); @@ -321,6 +323,16 @@ public class StructureBlockEntity extends BlockEntity { public boolean saveStructure(boolean bl) { if (this.mode == StructureMode.SAVE && !this.level.isClientSide && this.structureName != null) { + // Scissors - 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(); @@ -358,6 +370,16 @@ public class StructureBlockEntity extends BlockEntity { public boolean loadStructure(ServerLevel world, boolean bl) { if (this.mode == StructureMode.LOAD && this.structureName != null) { + // Scissors - 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 + StructureTemplateManager structureTemplateManager = world.getStructureManager(); Optional optional; @@ -403,6 +425,16 @@ public class StructureBlockEntity extends BlockEntity { } public void unloadStructure() { + // Scissors - 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();