Archived
0

Add ModToggledObserver - Moved shared logic of observer and piston into ModToggledLogPlaceAbstract

This commit is contained in:
Dico200
2017-10-30 23:04:21 +00:00
parent 32da4b770b
commit b40a39727c
4 changed files with 94 additions and 27 deletions

View File

@@ -48,6 +48,7 @@ public abstract class ModAbstract implements Mod, Listener
ModAbstract.logger = logger;
registerMod(new ModToggledCauldron());
registerMod(new ModToggledPiston());
registerMod(new ModToggledObserver());
registerMod(new ModToggledStep());
registerMod(new ModToggledTorch());
registerMod(new ModInventory("dropper", InventoryType.DROPPER));

View File

@@ -0,0 +1,40 @@
package com.redstoner.modules.blockplacemods.mods;
import org.bukkit.GameMode;
import org.bukkit.block.Block;
import org.bukkit.block.BlockFace;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.block.BlockPlaceEvent;
/**
* A mod that makes placement of directional blocks act the way placement of logs does normally.
* Quartz pillar placement works like this too.
*
* Placed blocks face the block you clicked to place them.
*/
public abstract class ModToggledLogPlaceAbstract extends ModToggledAbstract {
protected ModToggledLogPlaceAbstract(String name, boolean enabledByDefault) {
super(name, enabledByDefault);
}
@SuppressWarnings("deprecation")
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
public void onBlockPlace(BlockPlaceEvent event)
{
Player player = event.getPlayer();
Block block;
if (hasEnabled(player) && !player.isSneaking() && player.getGameMode() == GameMode.CREATIVE
&& isApplicableToPlacedBlock(block = event.getBlock()))
{
block.setData((byte) getBlockDataForFacing(block.getFace(event.getBlockAgainst())));
}
}
protected abstract int getBlockDataForFacing(BlockFace direction);
protected abstract boolean isApplicableToPlacedBlock(Block block);
}

View File

@@ -0,0 +1,43 @@
package com.redstoner.modules.blockplacemods.mods;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.block.BlockFace;
public class ModToggledObserver extends ModToggledLogPlaceAbstract {
protected ModToggledObserver() {
super("observer", false);
}
@Override
public String getDescription() {
return "If active, observers face the block you place them against";
}
@Override
protected boolean isApplicableToPlacedBlock(Block block) {
return block.getType() == Material.OBSERVER;
}
@Override
protected int getBlockDataForFacing(BlockFace direction) {
switch (direction) {
case UP:
return 0;
default:
case DOWN:
return 1;
case SOUTH:
return 2;
case NORTH:
return 3;
case EAST:
return 4;
case WEST:
return 5;
}
}
}

View File

@@ -1,15 +1,10 @@
package com.redstoner.modules.blockplacemods.mods;
import org.bukkit.GameMode;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.block.BlockFace;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.block.BlockPlaceEvent;
public class ModToggledPiston extends ModToggledAbstract
public class ModToggledPiston extends ModToggledLogPlaceAbstract
{
public ModToggledPiston()
{
@@ -22,28 +17,17 @@ public class ModToggledPiston extends ModToggledAbstract
return "If active, pistons face the block you place them against";
}
@SuppressWarnings("deprecation")
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
public void onBlockPlace(BlockPlaceEvent event)
{
Player player = event.getPlayer();
if (hasEnabled(player) && !player.isSneaking() && player.getGameMode() == GameMode.CREATIVE
&& isPiston(event.getBlock().getType()))
{
Block block = event.getBlock();
block.setData((byte) pistonDataForFace(block.getFace(event.getBlockAgainst())));
}
@Override
protected boolean isApplicableToPlacedBlock(Block block) {
Material type = block.getType();
return type == Material.PISTON_BASE || type == Material.PISTON_STICKY_BASE;
}
private boolean isPiston(Material block)
{
return block == Material.PISTON_BASE || block == Material.PISTON_STICKY_BASE;
}
private int pistonDataForFace(BlockFace face)
{
switch (face)
@Override
protected int getBlockDataForFacing(BlockFace direction) {
switch (direction)
{
default:
case DOWN:
return 0;
case UP:
@@ -56,8 +40,7 @@ public class ModToggledPiston extends ModToggledAbstract
return 4;
case EAST:
return 5;
default:
return 0;
}
}
}