Search in sources :

Example 11 with LanternBlockType

use of org.lanternpowered.server.block.LanternBlockType in project LanternServer by LanternPowered.

the class LanternWorld method interactBlock.

private boolean interactBlock(int x, int y, int z, Direction side, @Nullable GameProfile profile, @Nullable ItemStack itemStack) {
    checkNotNull(side, "side");
    final LanternBlockType blockType = ((LanternBlockType) getBlockType(x, y, z));
    final BehaviorPipeline<Behavior> pipeline = blockType.getPipeline();
    final CauseStack causeStack = CauseStack.current();
    try (CauseStack.Frame frame = causeStack.pushCauseFrame()) {
        frame.addContext(ContextKeys.INTERACTION_FACE, side);
        frame.addContext(ContextKeys.BLOCK_LOCATION, new Location<>(this, x, y, z));
        frame.addContext(ContextKeys.BLOCK_TYPE, blockType);
        if (profile != null) {
            frame.addContext(EventContextKeys.PLAYER_SIMULATED, profile);
        }
        if (itemStack != null) {
            frame.addContext(ContextKeys.USED_ITEM_STACK, itemStack);
        }
        final BehaviorContextImpl context = new BehaviorContextImpl(causeStack);
        // Just pass an object trough to make sure that a value is present when successful
        if (context.process(pipeline.pipeline(InteractWithBlockBehavior.class), (ctx, behavior) -> behavior.tryInteract(pipeline, ctx)).isSuccess()) {
            context.accept();
            return true;
        }
        context.revert();
        return false;
    }
}
Also used : LanternEntity(org.lanternpowered.server.entity.LanternEntity) AnvilChunkIOService(org.lanternpowered.server.data.io.anvil.AnvilChunkIOService) WorldStorage(org.spongepowered.api.world.storage.WorldStorage) WorldConfig(org.lanternpowered.server.config.world.WorldConfig) RuleHolder(org.lanternpowered.server.world.rules.RuleHolder) SoundCategory(org.spongepowered.api.effect.sound.SoundCategory) BookView(org.spongepowered.api.text.BookView) ItemStack(org.spongepowered.api.item.inventory.ItemStack) ChunkIOService(org.lanternpowered.server.data.io.ChunkIOService) LanternChunkManager(org.lanternpowered.server.world.chunk.LanternChunkManager) MutableBiomeVolumeWorker(org.spongepowered.api.world.extent.worker.MutableBiomeVolumeWorker) Map(java.util.Map) GameProfile(org.spongepowered.api.profile.GameProfile) VecHelper(org.lanternpowered.server.util.VecHelper) LanternSoundType(org.lanternpowered.server.effect.sound.LanternSoundType) Path(java.nio.file.Path) InteractWithBlockBehavior(org.lanternpowered.server.block.behavior.types.InteractWithBlockBehavior) MessagePlayOutParticleEffect(org.lanternpowered.server.network.vanilla.message.type.play.MessagePlayOutParticleEffect) RuleType(org.lanternpowered.server.world.rules.RuleType) Location(org.spongepowered.api.world.Location) AbstractViewer(org.lanternpowered.server.effect.AbstractViewer) HardnessProperty(org.spongepowered.api.data.property.block.HardnessProperty) LanternWeather(org.lanternpowered.server.world.weather.LanternWeather) Extent(org.spongepowered.api.world.extent.Extent) UnbreakableProperty(org.spongepowered.api.data.property.block.UnbreakableProperty) ArchetypeVolume(org.spongepowered.api.world.extent.ArchetypeVolume) DataContainer(org.spongepowered.api.data.DataContainer) Set(java.util.Set) Weathers(org.spongepowered.api.world.weather.Weathers) BlockAction(org.lanternpowered.server.block.action.BlockAction) BlockState(org.spongepowered.api.block.BlockState) Direction(org.spongepowered.api.util.Direction) ConstructEntityEvent(org.spongepowered.api.event.entity.ConstructEntityEvent) AbstractExtent(org.lanternpowered.server.world.extent.AbstractExtent) World(org.spongepowered.api.world.World) MessagePlayOutRecord(org.lanternpowered.server.network.vanilla.message.type.play.MessagePlayOutRecord) Player(org.spongepowered.api.entity.living.player.Player) EntityProtocolType(org.lanternpowered.server.network.entity.EntityProtocolType) ObservedChunkManager(org.lanternpowered.server.entity.living.player.ObservedChunkManager) BehaviorPipeline(org.lanternpowered.server.behavior.pipeline.BehaviorPipeline) ImmutableValue(org.spongepowered.api.data.value.immutable.ImmutableValue) Vector3d(com.flowpowered.math.vector.Vector3d) AABB(org.spongepowered.api.util.AABB) GameModes(org.spongepowered.api.entity.living.player.gamemode.GameModes) Supplier(java.util.function.Supplier) Key(org.spongepowered.api.data.key.Key) ArrayList(java.util.ArrayList) Vector2i(com.flowpowered.math.vector.Vector2i) LanternTitles(org.lanternpowered.server.text.title.LanternTitles) Lists(com.google.common.collect.Lists) CauseStack(org.lanternpowered.server.event.CauseStack) ExtentViewDownsize(org.lanternpowered.server.world.extent.ExtentViewDownsize) Text(org.spongepowered.api.text.Text) Nullable(javax.annotation.Nullable) ContextKeys(org.lanternpowered.server.behavior.ContextKeys) MessagePlayOutStopSounds(org.lanternpowered.server.network.vanilla.message.type.play.MessagePlayOutStopSounds) Context(org.spongepowered.api.service.context.Context) SpongeEventFactory(org.spongepowered.api.event.SpongeEventFactory) InvalidDataException(org.spongepowered.api.data.persistence.InvalidDataException) SpawnEntityEvent(org.spongepowered.api.event.entity.SpawnEntityEvent) Scoreboard(org.spongepowered.api.scoreboard.Scoreboard) IOException(java.io.IOException) DataHolder(org.spongepowered.api.data.DataHolder) Entity(org.spongepowered.api.entity.Entity) Message(org.lanternpowered.server.network.message.Message) LanternMutableBlockVolumeWorker(org.lanternpowered.server.world.extent.worker.LanternMutableBlockVolumeWorker) DataView(org.spongepowered.api.data.DataView) Vector3i(com.flowpowered.math.vector.Vector3i) PortalAgent(org.spongepowered.api.world.PortalAgent) EventContextKeys(org.spongepowered.api.event.cause.EventContextKeys) LanternBlockType(org.lanternpowered.server.block.LanternBlockType) LanternChunkPreGenerateTask(org.lanternpowered.server.world.pregen.LanternChunkPreGenerateTask) BiFunction(java.util.function.BiFunction) LoggerFactory(org.slf4j.LoggerFactory) EntityProtocolManager(org.lanternpowered.server.network.entity.EntityProtocolManager) LanternChunkTicketManager(org.lanternpowered.server.world.chunk.LanternChunkTicketManager) SPACE_MIN(org.lanternpowered.server.world.chunk.LanternChunkLayout.SPACE_MIN) Behavior(org.lanternpowered.server.behavior.Behavior) EntitySnapshot(org.spongepowered.api.entity.EntitySnapshot) ChatType(org.spongepowered.api.text.chat.ChatType) Preconditions.checkArgument(com.google.common.base.Preconditions.checkArgument) BreakBlockBehavior(org.lanternpowered.server.block.behavior.types.BreakBlockBehavior) ParticleEffect(org.spongepowered.api.effect.particle.ParticleEffect) TileEntity(org.spongepowered.api.block.tileentity.TileEntity) Locale(java.util.Locale) ChunkPreGenerate(org.spongepowered.api.world.ChunkPreGenerate) Title(org.spongepowered.api.text.title.Title) MergeFunction(org.spongepowered.api.data.merge.MergeFunction) LanternChunk.fixEntityYSection(org.lanternpowered.server.world.chunk.LanternChunk.fixEntityYSection) Dimension(org.spongepowered.api.world.Dimension) MutableBlockVolumeWorker(org.spongepowered.api.world.extent.worker.MutableBlockVolumeWorker) SPACE_MAX(org.lanternpowered.server.world.chunk.LanternChunkLayout.SPACE_MAX) ImmutableSet(com.google.common.collect.ImmutableSet) User(org.spongepowered.api.entity.living.player.User) SoundType(org.spongepowered.api.effect.sound.SoundType) Predicate(java.util.function.Predicate) Collection(java.util.Collection) ChunkLoadingTicket(org.lanternpowered.server.world.chunk.ChunkLoadingTicket) ConcurrentHashMap(java.util.concurrent.ConcurrentHashMap) Sponge(org.spongepowered.api.Sponge) Tuple(org.spongepowered.api.util.Tuple) UUID(java.util.UUID) Collectors(java.util.stream.Collectors) Sets(com.google.common.collect.Sets) LanternEntityType(org.lanternpowered.server.entity.LanternEntityType) LanternGame(org.lanternpowered.server.game.LanternGame) WorldGenerator(org.spongepowered.api.world.gen.WorldGenerator) Cause(org.spongepowered.api.event.cause.Cause) List(java.util.List) Lantern(org.lanternpowered.server.game.Lantern) Explosion(org.spongepowered.api.world.explosion.Explosion) Transform(org.spongepowered.api.entity.Transform) BlockType(org.spongepowered.api.block.BlockType) DataManipulator(org.spongepowered.api.data.manipulator.DataManipulator) Optional(java.util.Optional) RecordType(org.spongepowered.api.effect.sound.record.RecordType) ScheduledBlockUpdate(org.spongepowered.api.block.ScheduledBlockUpdate) LanternChatType(org.lanternpowered.server.text.chat.LanternChatType) BlockSnapshot(org.spongepowered.api.block.BlockSnapshot) ChatTypes(org.spongepowered.api.text.chat.ChatTypes) WeatherUniverse(org.lanternpowered.api.world.weather.WeatherUniverse) Keys(org.spongepowered.api.data.key.Keys) ScoreboardIO(org.lanternpowered.server.data.io.ScoreboardIO) LanternChunk(org.lanternpowered.server.world.chunk.LanternChunk) BehaviorContextImpl(org.lanternpowered.server.behavior.BehaviorContextImpl) BiomeType(org.spongepowered.api.world.biome.BiomeType) HashMap(java.util.HashMap) DataTransactionResult(org.spongepowered.api.data.DataTransactionResult) Function(java.util.function.Function) BlockChangeFlag(org.spongepowered.api.world.BlockChangeFlag) ImmutableList(com.google.common.collect.ImmutableList) EntityTypes(org.spongepowered.api.entity.EntityTypes) PlaceBlockBehavior(org.lanternpowered.server.block.behavior.types.PlaceBlockBehavior) Rule(org.lanternpowered.server.world.rules.Rule) Logger(org.slf4j.Logger) Weather(org.spongepowered.api.world.weather.Weather) Iterator(java.util.Iterator) Preconditions.checkNotNull(com.google.common.base.Preconditions.checkNotNull) BaseValue(org.spongepowered.api.data.value.BaseValue) Chunk(org.spongepowered.api.world.Chunk) Consumer(java.util.function.Consumer) LanternMutableBiomeVolumeWorker(org.lanternpowered.server.world.extent.worker.LanternMutableBiomeVolumeWorker) LanternDimensionType(org.lanternpowered.server.world.dimension.LanternDimensionType) Difficulty(org.spongepowered.api.world.difficulty.Difficulty) LanternPlayer(org.lanternpowered.server.entity.living.player.LanternPlayer) Property(org.spongepowered.api.data.Property) IGeneratorType(org.lanternpowered.server.world.gen.IGeneratorType) EntityType(org.spongepowered.api.entity.EntityType) MessageChannel(org.spongepowered.api.text.channel.MessageChannel) Collections(java.util.Collections) CauseStack(org.lanternpowered.server.event.CauseStack) BehaviorContextImpl(org.lanternpowered.server.behavior.BehaviorContextImpl) InteractWithBlockBehavior(org.lanternpowered.server.block.behavior.types.InteractWithBlockBehavior) Behavior(org.lanternpowered.server.behavior.Behavior) BreakBlockBehavior(org.lanternpowered.server.block.behavior.types.BreakBlockBehavior) PlaceBlockBehavior(org.lanternpowered.server.block.behavior.types.PlaceBlockBehavior) LanternBlockType(org.lanternpowered.server.block.LanternBlockType)

Aggregations

LanternBlockType (org.lanternpowered.server.block.LanternBlockType)11 BlockState (org.spongepowered.api.block.BlockState)10 Location (org.spongepowered.api.world.Location)9 World (org.spongepowered.api.world.World)9 Optional (java.util.Optional)8 Keys (org.spongepowered.api.data.key.Keys)8 Direction (org.spongepowered.api.util.Direction)8 ContextKeys (org.lanternpowered.server.behavior.ContextKeys)7 BlockType (org.spongepowered.api.block.BlockType)7 Lantern (org.lanternpowered.server.game.Lantern)6 GameModes (org.spongepowered.api.entity.living.player.gamemode.GameModes)6 Vector3d (com.flowpowered.math.vector.Vector3d)5 Vector3i (com.flowpowered.math.vector.Vector3i)5 Set (java.util.Set)5 Supplier (java.util.function.Supplier)5 Nullable (javax.annotation.Nullable)5 Behavior (org.lanternpowered.server.behavior.Behavior)5 BehaviorContextImpl (org.lanternpowered.server.behavior.BehaviorContextImpl)5 BehaviorPipeline (org.lanternpowered.server.behavior.pipeline.BehaviorPipeline)5 Preconditions.checkArgument (com.google.common.base.Preconditions.checkArgument)4