Skip to content

Commit

Permalink
implement missed bukkit things
Browse files Browse the repository at this point in the history
  • Loading branch information
sj-hub9796 committed Jan 17, 2025
1 parent 4e387fc commit d028987
Show file tree
Hide file tree
Showing 2 changed files with 71 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
package io.izzel.arclight.common.mixin.core.world.level.block.entity;

import io.izzel.arclight.common.mod.server.ArclightServer;
import net.minecraft.core.BlockPos;
import net.minecraft.core.HolderLookup;
import net.minecraft.core.component.DataComponents;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.nbt.NbtOps;
import net.minecraft.network.chat.Component;
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.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Overwrite;
import org.spongepowered.asm.mixin.Shadow;

import java.util.List;

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

@Shadow private BannerPatternLayers patterns;
@Shadow private Component name;

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

/**
* @author sj-hub9796
* @reason
*/
@Overwrite
protected void loadAdditional(CompoundTag compoundTag, HolderLookup.Provider provider) {
super.loadAdditional(compoundTag, provider);
if (compoundTag.contains("CustomName", 8)) {
this.name = parseCustomNameSafe(compoundTag.getString("CustomName"), provider);
}

if (compoundTag.contains("patterns")) {
BannerPatternLayers.CODEC.parse(provider.createSerializationContext(NbtOps.INSTANCE), compoundTag.get("patterns")).resultOrPartial((string) -> {
ArclightServer.LOGGER.error("Failed to parse banner patterns: '{}'", string);
}).ifPresent((bannerPatternLayers) -> {
this.setPatterns(bannerPatternLayers); // CraftBukkit - apply limits
});
}
}

/**
* @author sj-hub9796
* @reason
*/
@Overwrite
protected void applyImplicitComponents(BlockEntity.DataComponentInput dataComponentInput) {
super.applyImplicitComponents(dataComponentInput);
this.setPatterns((BannerPatternLayers) dataComponentInput.getOrDefault(DataComponents.BANNER_PATTERNS, BannerPatternLayers.EMPTY)); // CraftBukkit - apply limits
this.name = (Component)dataComponentInput.get(DataComponents.CUSTOM_NAME);
}

// 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 d028987

Please sign in to comment.