Skip to content

Commit

Permalink
Implement bubble columns
Browse files Browse the repository at this point in the history
  • Loading branch information
clabe45 committed Jan 14, 2020
1 parent 9633b49 commit 2eb3794
Show file tree
Hide file tree
Showing 3 changed files with 60 additions and 1 deletion.
25 changes: 24 additions & 1 deletion src/main/java/net/glowstone/block/blocktype/BlockMagma.java
Original file line number Diff line number Diff line change
@@ -1,17 +1,40 @@
package net.glowstone.block.blocktype;

import net.glowstone.block.GlowBlock;
import net.glowstone.block.GlowBlockState;
import net.glowstone.entity.GlowPlayer;
import net.glowstone.inventory.ToolType;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.block.BlockFace;
import org.bukkit.entity.LivingEntity;
import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.util.Vector;

public class BlockMagma extends BlockDirectDrops {

public BlockMagma() {
super(Material.MAGMA_BLOCK, ToolType.PICKAXE);
}

@Override
public void placeBlock(GlowPlayer player, GlowBlockState blockState, BlockFace face,
ItemStack holding, Vector clickedLoc) {
super.placeBlock(player, blockState, face, holding, clickedLoc);
bubbleUp(blockState.getBlock().getRelative(BlockFace.UP));
}

private void bubbleUp(GlowBlock target) {
// trigger bubble chain
if (target.getType() == Material.WATER) {
target.setType(Material.BUBBLE_COLUMN);
}
if (target.getType() == Material.BUBBLE_COLUMN) {
Bukkit.getLogger().info("create whirlpool at " + target.getLocation());
// todo: set 'drag' blockdata to true
}
}

@Override
public void onEntityStep(GlowBlock block, LivingEntity entity) {
entity.damage(1.0, EntityDamageEvent.DamageCause.FIRE);
Expand Down
13 changes: 13 additions & 0 deletions src/main/java/net/glowstone/block/blocktype/BlockSoulSand.java
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
package net.glowstone.block.blocktype;

import net.glowstone.block.GlowBlock;
import net.glowstone.block.GlowBlockState;
import net.glowstone.entity.GlowPlayer;
import net.glowstone.inventory.ToolType;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.block.BlockFace;
import org.bukkit.inventory.ItemStack;
Expand All @@ -17,5 +19,16 @@ public BlockSoulSand() {
public void placeBlock(GlowPlayer player, GlowBlockState blockState, BlockFace face,
ItemStack holding, Vector clickedLoc) {
super.placeBlock(player, blockState, face, holding, clickedLoc);
bubbleUp(blockState.getBlock().getRelative(BlockFace.UP));
}

private void bubbleUp(GlowBlock target) {
if (target.getType() == Material.WATER) {
target.setType(Material.BUBBLE_COLUMN);
}
if (target.getType() == Material.BUBBLE_COLUMN) {
Bukkit.getLogger().info("create upwards bubble column at " + target.getLocation());
// todo: set 'drag' blockdata to false
}
}
}
23 changes: 23 additions & 0 deletions src/main/java/net/glowstone/block/blocktype/BlockWater.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import net.glowstone.block.GlowBlock;
import net.glowstone.block.GlowBlockState;
import net.glowstone.constants.GlowBiomeClimate;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.block.BlockFace;
import org.bukkit.event.block.BlockSpreadEvent;
Expand Down Expand Up @@ -40,6 +41,28 @@ public void updateBlock(GlowBlock block) {
}
}

@Override
public void onNearBlockChanged(GlowBlock block, BlockFace face, GlowBlock changedBlock,
Material oldType, byte oldData, Material newType, byte newData) {
// spread bubble column up or let it die out
if (face != BlockFace.DOWN) {
return;
}
switch (newType) {
case BUBBLE_COLUMN: {
block.setType(Material.BUBBLE_COLUMN);
Bukkit.getLogger().info("spread bubble column at " + block.getLocation());
// todo: set 'drag' blockdata to that of the block below
break;
}
case WATER: {
block.setType(Material.WATER);
Bukkit.getLogger().info("destroy bubble column at " + block.getLocation());
break;
}
}
}

private boolean hasNearSolidBlock(GlowBlock block) {
// check there's at least a solid block around
for (BlockFace face : SIDES) {
Expand Down

0 comments on commit 2eb3794

Please sign in to comment.