minecraft-src/net/minecraft/world/level/LevelAccessor.java
2025-07-04 03:45:38 +03:00

110 lines
3.9 KiB
Java

package net.minecraft.world.level;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.core.Holder;
import net.minecraft.core.particles.ParticleOptions;
import net.minecraft.core.registries.Registries;
import net.minecraft.resources.ResourceKey;
import net.minecraft.server.MinecraftServer;
import net.minecraft.sounds.SoundEvent;
import net.minecraft.sounds.SoundSource;
import net.minecraft.util.RandomSource;
import net.minecraft.world.Difficulty;
import net.minecraft.world.DifficultyInstance;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.chunk.ChunkSource;
import net.minecraft.world.level.gameevent.GameEvent;
import net.minecraft.world.level.gameevent.GameEvent.Context;
import net.minecraft.world.level.redstone.NeighborUpdater;
import net.minecraft.world.level.storage.LevelData;
import net.minecraft.world.phys.Vec3;
import net.minecraft.world.ticks.ScheduledTick;
import net.minecraft.world.ticks.TickPriority;
import org.jetbrains.annotations.Nullable;
public interface LevelAccessor extends CommonLevelAccessor, LevelTimeAccess, ScheduledTickAccess {
@Override
default long dayTime() {
return this.getLevelData().getDayTime();
}
long nextSubTickCount();
@Override
default <T> ScheduledTick<T> createTick(BlockPos pos, T type, int delay, TickPriority priority) {
return new ScheduledTick<>(type, pos, this.getLevelData().getGameTime() + delay, priority, this.nextSubTickCount());
}
@Override
default <T> ScheduledTick<T> createTick(BlockPos pos, T type, int delay) {
return new ScheduledTick<>(type, pos, this.getLevelData().getGameTime() + delay, this.nextSubTickCount());
}
/**
* Returns the world's WorldInfo object
*/
LevelData getLevelData();
DifficultyInstance getCurrentDifficultyAt(BlockPos pos);
@Nullable
MinecraftServer getServer();
default Difficulty getDifficulty() {
return this.getLevelData().getDifficulty();
}
/**
* Gets the world's chunk provider
*/
ChunkSource getChunkSource();
@Override
default boolean hasChunk(int chunkX, int chunkZ) {
return this.getChunkSource().hasChunk(chunkX, chunkZ);
}
RandomSource getRandom();
default void updateNeighborsAt(BlockPos pos, Block block) {
}
default void neighborShapeChanged(Direction direction, BlockPos pos, BlockPos neighborPos, BlockState neighborState, int flags, int recursionLeft) {
NeighborUpdater.executeShapeUpdate(this, direction, pos, neighborPos, neighborState, flags, recursionLeft - 1);
}
default void playSound(@Nullable Entity entity, BlockPos pos, SoundEvent sound, SoundSource source) {
this.playSound(entity, pos, sound, source, 1.0F, 1.0F);
}
void playSound(@Nullable Entity entity, BlockPos pos, SoundEvent sound, SoundSource source, float volume, float pitch);
void addParticle(ParticleOptions particle, double x, double y, double z, double xSpeed, double ySpeed, double zSpeed);
void levelEvent(@Nullable Entity entity, int type, BlockPos pos, int data);
default void levelEvent(int type, BlockPos pos, int data) {
this.levelEvent(null, type, pos, data);
}
void gameEvent(Holder<GameEvent> gameEvent, Vec3 pos, Context context);
default void gameEvent(@Nullable Entity entity, Holder<GameEvent> gameEvent, Vec3 pos) {
this.gameEvent(gameEvent, pos, new Context(entity, null));
}
default void gameEvent(@Nullable Entity entity, Holder<GameEvent> gameEvent, BlockPos pos) {
this.gameEvent(gameEvent, pos, new Context(entity, null));
}
default void gameEvent(Holder<GameEvent> gameEvent, BlockPos pos, Context context) {
this.gameEvent(gameEvent, Vec3.atCenterOf(pos), context);
}
default void gameEvent(ResourceKey<GameEvent> gameEvent, BlockPos pos, Context context) {
this.gameEvent(this.registryAccess().lookupOrThrow(Registries.GAME_EVENT).getOrThrow(gameEvent), pos, context);
}
}