98 lines
3.5 KiB
Java
98 lines
3.5 KiB
Java
|
package net.minecraft.world.level.block.entity;
|
||
|
|
||
|
import net.minecraft.core.BlockPos;
|
||
|
import net.minecraft.sounds.SoundEvents;
|
||
|
import net.minecraft.sounds.SoundSource;
|
||
|
import net.minecraft.world.Container;
|
||
|
import net.minecraft.world.entity.player.Player;
|
||
|
import net.minecraft.world.level.Level;
|
||
|
import net.minecraft.world.level.block.Blocks;
|
||
|
import net.minecraft.world.level.block.state.BlockState;
|
||
|
|
||
|
public class EnderChestBlockEntity extends BlockEntity implements LidBlockEntity {
|
||
|
private final ChestLidController chestLidController = new ChestLidController();
|
||
|
private final ContainerOpenersCounter openersCounter = new ContainerOpenersCounter() {
|
||
|
@Override
|
||
|
protected void onOpen(Level p_155531_, BlockPos p_155532_, BlockState p_155533_) {
|
||
|
p_155531_.playSound(
|
||
|
null,
|
||
|
p_155532_.getX() + 0.5,
|
||
|
p_155532_.getY() + 0.5,
|
||
|
p_155532_.getZ() + 0.5,
|
||
|
SoundEvents.ENDER_CHEST_OPEN,
|
||
|
SoundSource.BLOCKS,
|
||
|
0.5F,
|
||
|
p_155531_.random.nextFloat() * 0.1F + 0.9F
|
||
|
);
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
protected void onClose(Level p_155541_, BlockPos p_155542_, BlockState p_155543_) {
|
||
|
p_155541_.playSound(
|
||
|
null,
|
||
|
p_155542_.getX() + 0.5,
|
||
|
p_155542_.getY() + 0.5,
|
||
|
p_155542_.getZ() + 0.5,
|
||
|
SoundEvents.ENDER_CHEST_CLOSE,
|
||
|
SoundSource.BLOCKS,
|
||
|
0.5F,
|
||
|
p_155541_.random.nextFloat() * 0.1F + 0.9F
|
||
|
);
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
protected void openerCountChanged(Level p_155535_, BlockPos p_155536_, BlockState p_155537_, int p_155538_, int p_155539_) {
|
||
|
p_155535_.blockEvent(EnderChestBlockEntity.this.worldPosition, Blocks.ENDER_CHEST, 1, p_155539_);
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
protected boolean isOwnContainer(Player p_155529_) {
|
||
|
return p_155529_.getEnderChestInventory().isActiveChest(EnderChestBlockEntity.this);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
public EnderChestBlockEntity(BlockPos p_155513_, BlockState p_155514_) {
|
||
|
super(BlockEntityType.ENDER_CHEST, p_155513_, p_155514_);
|
||
|
}
|
||
|
|
||
|
public static void lidAnimateTick(Level p_155518_, BlockPos p_155519_, BlockState p_155520_, EnderChestBlockEntity p_155521_) {
|
||
|
p_155521_.chestLidController.tickLid();
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public boolean triggerEvent(int p_59285_, int p_59286_) {
|
||
|
if (p_59285_ == 1) {
|
||
|
this.chestLidController.shouldBeOpen(p_59286_ > 0);
|
||
|
return true;
|
||
|
} else {
|
||
|
return super.triggerEvent(p_59285_, p_59286_);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public void startOpen(Player p_155516_) {
|
||
|
if (!this.remove && !p_155516_.isSpectator()) {
|
||
|
this.openersCounter.incrementOpeners(p_155516_, this.getLevel(), this.getBlockPos(), this.getBlockState());
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public void stopOpen(Player p_155523_) {
|
||
|
if (!this.remove && !p_155523_.isSpectator()) {
|
||
|
this.openersCounter.decrementOpeners(p_155523_, this.getLevel(), this.getBlockPos(), this.getBlockState());
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public boolean stillValid(Player p_59283_) {
|
||
|
return Container.stillValidBlockEntity(this, p_59283_);
|
||
|
}
|
||
|
|
||
|
public void recheckOpen() {
|
||
|
if (!this.remove) {
|
||
|
this.openersCounter.recheckOpeners(this.getLevel(), this.getBlockPos(), this.getBlockState());
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public float getOpenNess(float p_59281_) {
|
||
|
return this.chestLidController.getOpenness(p_59281_);
|
||
|
}
|
||
|
}
|