Code/net/minecraft/world/level/block/entity/SpawnerBlockEntity.java

84 lines
3.2 KiB
Java

package net.minecraft.world.level.block.entity;
import javax.annotation.Nullable;
import net.minecraft.core.BlockPos;
import net.minecraft.core.HolderLookup;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.network.protocol.game.ClientboundBlockEntityDataPacket;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.util.RandomSource;
import net.minecraft.world.entity.EntityType;
import net.minecraft.world.level.BaseSpawner;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.SpawnData;
import net.minecraft.world.level.Spawner;
import net.minecraft.world.level.block.Blocks;
import net.minecraft.world.level.block.state.BlockState;
public class SpawnerBlockEntity extends BlockEntity implements Spawner {
private final BaseSpawner spawner = new BaseSpawner() {
@Override
public void broadcastEvent(Level p_155767_, BlockPos p_155768_, int p_155769_) {
p_155767_.blockEvent(p_155768_, Blocks.SPAWNER, p_155769_, 0);
}
@Override
public void setNextSpawnData(@Nullable Level p_155771_, BlockPos p_155772_, SpawnData p_155773_) {
super.setNextSpawnData(p_155771_, p_155772_, p_155773_);
if (p_155771_ != null) {
BlockState blockstate = p_155771_.getBlockState(p_155772_);
p_155771_.sendBlockUpdated(p_155772_, blockstate, blockstate, 260);
}
}
};
public SpawnerBlockEntity(BlockPos p_155752_, BlockState p_155753_) {
super(BlockEntityType.MOB_SPAWNER, p_155752_, p_155753_);
}
@Override
protected void loadAdditional(CompoundTag p_328601_, HolderLookup.Provider p_329952_) {
super.loadAdditional(p_328601_, p_329952_);
this.spawner.load(this.level, this.worldPosition, p_328601_);
}
@Override
protected void saveAdditional(CompoundTag p_187521_, HolderLookup.Provider p_332669_) {
super.saveAdditional(p_187521_, p_332669_);
this.spawner.save(p_187521_);
}
public static void clientTick(Level p_155755_, BlockPos p_155756_, BlockState p_155757_, SpawnerBlockEntity p_155758_) {
p_155758_.spawner.clientTick(p_155755_, p_155756_);
}
public static void serverTick(Level p_155762_, BlockPos p_155763_, BlockState p_155764_, SpawnerBlockEntity p_155765_) {
p_155765_.spawner.serverTick((ServerLevel)p_155762_, p_155763_);
}
public ClientboundBlockEntityDataPacket getUpdatePacket() {
return ClientboundBlockEntityDataPacket.create(this);
}
@Override
public CompoundTag getUpdateTag(HolderLookup.Provider p_329063_) {
CompoundTag compoundtag = this.saveCustomOnly(p_329063_);
compoundtag.remove("SpawnPotentials");
return compoundtag;
}
@Override
public boolean triggerEvent(int p_59797_, int p_59798_) {
return this.spawner.onEventTriggered(this.level, p_59797_) ? true : super.triggerEvent(p_59797_, p_59798_);
}
@Override
public void setEntityId(EntityType<?> p_254530_, RandomSource p_253719_) {
this.spawner.setEntityId(p_254530_, this.level, p_253719_, this.worldPosition);
this.setChanged();
}
public BaseSpawner getSpawner() {
return this.spawner;
}
}