Skip to content

Commit

Permalink
implement missed bukkit things (#1625)
Browse files Browse the repository at this point in the history
* implement missed bukkit things

* migrate to Decorate

* fix crash

* bring #1586
  • Loading branch information
sj-hub9796 authored Feb 1, 2025
1 parent 4e387fc commit a842e85
Show file tree
Hide file tree
Showing 3 changed files with 82 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
package io.izzel.arclight.common.mixin.bukkit;

import com.google.common.base.Function;
import io.izzel.arclight.common.bridge.core.entity.player.ServerPlayerEntityBridge;
import io.izzel.arclight.common.bridge.core.util.DamageSourceBridge;
import io.izzel.arclight.common.bridge.core.world.WorldBridge;
import io.izzel.arclight.common.mod.util.ArclightCaptures;
import io.izzel.arclight.common.mod.util.DistValidate;
import net.minecraft.core.BlockPos;
Expand All @@ -11,16 +13,21 @@
import net.minecraft.world.entity.item.ItemEntity;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.LevelAccessor;
import net.minecraft.world.level.block.entity.SignBlockEntity;
import net.minecraft.world.level.block.state.properties.NoteBlockInstrument;
import org.bukkit.Bukkit;
import org.bukkit.block.Block;
import org.bukkit.block.Sign;
import org.bukkit.block.sign.Side;
import org.bukkit.craftbukkit.v.block.CraftBlock;
import org.bukkit.craftbukkit.v.block.CraftBlockState;
import org.bukkit.craftbukkit.v.block.CraftBlockStates;
import org.bukkit.craftbukkit.v.block.CraftSign;
import org.bukkit.craftbukkit.v.block.data.CraftBlockData;
import org.bukkit.craftbukkit.v.damage.CraftDamageSource;
import org.bukkit.craftbukkit.v.event.CraftEventFactory;
import org.bukkit.entity.Item;
import org.bukkit.entity.Player;
import org.bukkit.event.block.BlockFadeEvent;
import org.bukkit.event.block.BlockFormEvent;
import org.bukkit.event.block.BlockGrowEvent;
Expand All @@ -32,6 +39,7 @@
import org.bukkit.event.entity.EntityChangeBlockEvent;
import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.event.entity.ItemSpawnEvent;
import org.bukkit.event.player.PlayerSignOpenEvent;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Overwrite;
import org.spongepowered.asm.mixin.Shadow;
Expand Down Expand Up @@ -236,4 +244,32 @@ public static NotePlayEvent callNotePlayEvent(Level world, BlockPos pos, NoteBlo
cir.setReturnValue(event);
}
}

/**
* @author sj-hub9796
* @reason
*/
@Overwrite
public static boolean callPlayerSignOpenEvent(net.minecraft.world.entity.player.Player player, SignBlockEntity tileEntitySign, boolean front, PlayerSignOpenEvent.Cause cause) {
Block block = CraftBlock.at(tileEntitySign.getLevel(), tileEntitySign.getBlockPos());
Sign sign;
if (CraftBlockStates.getBlockState(block) instanceof Sign sign1) {
sign = sign1;
} else {
sign = new CraftSign<>(((WorldBridge) tileEntitySign.getLevel()).bridge$getWorld(), tileEntitySign);
}
Side side = front ? Side.FRONT : Side.BACK;
return callPlayerSignOpenEvent(((ServerPlayerEntityBridge) player).bridge$getBukkitEntity(), sign, side, cause);
}

/**
* @author sj-hub9796
* @reason
*/
@Overwrite
public static boolean callPlayerSignOpenEvent(Player player, Sign sign, Side side, PlayerSignOpenEvent.Cause cause) {
PlayerSignOpenEvent event = new PlayerSignOpenEvent(player, sign, side, cause);
Bukkit.getPluginManager().callEvent(event);
return !event.isCancelled();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
package io.izzel.arclight.common.mixin.core.world.level.block.entity;

import io.izzel.arclight.mixin.Decorate;
import net.minecraft.core.BlockPos;
import net.minecraft.core.component.DataComponents;
import net.minecraft.world.level.block.entity.BannerBlockEntity;
import net.minecraft.world.level.block.entity.BannerPatternLayers;
import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.level.block.entity.BlockEntityType;
import net.minecraft.world.level.block.state.BlockState;
import org.objectweb.asm.Opcodes;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;

import java.util.List;

@Mixin(BannerBlockEntity.class)
public abstract class BannerBlockEntityMixin extends BlockEntity {

@Shadow private BannerPatternLayers patterns;

public BannerBlockEntityMixin(BlockEntityType<?> blockEntityType, BlockPos blockPos, BlockState blockState) {
super(blockEntityType, blockPos, blockState);
}

@Decorate(method = "method_58121", inject = true, at = @At(value = "FIELD", target = "Lnet/minecraft/world/level/block/entity/BannerBlockEntity;patterns:Lnet/minecraft/world/level/block/entity/BannerPatternLayers;", opcode = Opcodes.PUTFIELD))
private void arclight$setPatterns(BannerPatternLayers layers) {
this.setPatterns(layers);
}

@Decorate(method = "applyImplicitComponents", inject = true, at = @At(value = "FIELD", target = "Lnet/minecraft/world/level/block/entity/BannerBlockEntity;patterns:Lnet/minecraft/world/level/block/entity/BannerPatternLayers;", opcode = Opcodes.PUTFIELD))
private void arclight$applyLimits(BlockEntity.DataComponentInput dataComponentInput) {
this.setPatterns((BannerPatternLayers) dataComponentInput.getOrDefault(DataComponents.BANNER_PATTERNS, BannerPatternLayers.EMPTY)); // CraftBukkit - apply limits
}

// CraftBukkit start
public void setPatterns(BannerPatternLayers bannerpatternlayers) {
if (bannerpatternlayers.layers().size() > 20) {
bannerpatternlayers = new BannerPatternLayers(List.copyOf(bannerpatternlayers.layers().subList(0, 20)));
}
this.patterns = bannerpatternlayers;
}
// CraftBukkit end
}
Original file line number Diff line number Diff line change
Expand Up @@ -491,6 +491,7 @@
"world.level.block.entity.BrushableBlockEntityMixin",
"world.level.block.entity.CampfireBlockEntityMixin",
"world.level.block.entity.ChestBlockEntityMixin",
"world.level.block.entity.BannerBlockEntityMixin",
"world.level.block.entity.ChiseledBookShelfBlockEntityMixin",
"world.level.block.entity.CommandBlockLogicMixin",
"world.level.block.entity.CommandBlockTileEntity1Mixin",
Expand Down

0 comments on commit a842e85

Please sign in to comment.