Survival array and mirror.
This commit is contained in:
@@ -51,14 +51,32 @@ public class Array {
|
||||
bagInventory = ItemRandomizerBag.getBagInventory(event.getPlayer().getHeldItemMainhand());
|
||||
}
|
||||
|
||||
//Get itemstack
|
||||
ItemStack itemStack = event.getPlayer().getHeldItem(event.getHand());
|
||||
|
||||
for (int i = 0; i < a.count; i++) {
|
||||
pos = pos.add(offset);
|
||||
if (event.getWorld().isBlockLoaded(pos, true)) {
|
||||
if (itemStack.isEmpty()) break;
|
||||
|
||||
//Check if held block = placed block (otherwise its a bag or wand)
|
||||
if (!event.getPlayer().isCreative() && Block.getBlockFromItem(itemStack.getItem()) == event.getPlacedBlock().getBlock()) {
|
||||
itemStack.shrink(1);
|
||||
}
|
||||
|
||||
//Randomizer bag synergy
|
||||
IBlockState blockState = bagInventory == null ? event.getPlacedBlock() :
|
||||
getBlockStateFromRandomizerBag(bagInventory, event.getWorld(), event.getPlayer(), event.getPos());
|
||||
|
||||
//TODO check if can place (ItemBlock) and if can break replaced
|
||||
|
||||
//Drop existing block
|
||||
SurvivalHelper.dropBlock(event.getWorld(), pos, event.getPlayer());
|
||||
|
||||
event.getWorld().setBlockState(pos, blockState);
|
||||
}
|
||||
}
|
||||
//EffortlessBuilding.log(event.getPlayer(), String.valueOf(event.getPlayer().getHeldItem(event.getHand()).getCount()));
|
||||
}
|
||||
|
||||
private static IBlockState getBlockStateFromRandomizerBag(IItemHandler bagInventory, World world, EntityPlayer player, BlockPos pos) {
|
||||
@@ -83,6 +101,11 @@ public class Array {
|
||||
for (int i = 0; i < a.count; i++) {
|
||||
pos = pos.add(offset);
|
||||
if (event.getWorld().isBlockLoaded(pos, false)) {
|
||||
//TODO check if can break
|
||||
|
||||
//Drop existing block
|
||||
SurvivalHelper.dropBlock(event.getWorld(), pos, event.getPlayer());
|
||||
|
||||
event.getWorld().setBlockToAir(pos);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -157,8 +157,21 @@ public class Mirror {
|
||||
}
|
||||
|
||||
private static void placeBlock(World world, EntityPlayer player, BlockPos newBlockPos, IBlockState newBlockState) {
|
||||
//Check itemstack
|
||||
ItemStack itemStack = player.getHeldItem(player.swingingHand); //TODO check hand
|
||||
if (itemStack.isEmpty()) return;
|
||||
|
||||
//TODO check if can place
|
||||
//TODO check if can break
|
||||
|
||||
SurvivalHelper.dropBlock(world, newBlockPos, player);
|
||||
world.setBlockState(newBlockPos, newBlockState);
|
||||
|
||||
//Check if held block = placed block (otherwise its a bag or wand)
|
||||
if (!player.isCreative() && Block.getBlockFromItem(itemStack.getItem()) == newBlockState.getBlock()) {
|
||||
itemStack.shrink(1);
|
||||
}
|
||||
|
||||
//Array synergy
|
||||
BlockSnapshot blockSnapshot = new BlockSnapshot(world, newBlockPos, newBlockState);
|
||||
BlockEvent.PlaceEvent placeEvent = new BlockEvent.PlaceEvent(blockSnapshot, newBlockState, player, EnumHand.MAIN_HAND);
|
||||
@@ -271,6 +284,9 @@ public class Mirror {
|
||||
}
|
||||
|
||||
private static void breakBlock(BlockEvent.BreakEvent event, BlockPos newBlockPos) {
|
||||
//TODO check if can break
|
||||
|
||||
SurvivalHelper.dropBlock(event.getWorld(), newBlockPos, event.getPlayer());
|
||||
event.getWorld().setBlockToAir(newBlockPos);
|
||||
|
||||
//Array synergy
|
||||
|
||||
@@ -1,8 +1,10 @@
|
||||
package nl.requios.effortlessbuilding;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.state.IBlockState;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.entity.player.EntityPlayerMP;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.util.EnumHand;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraftforge.common.util.BlockSnapshot;
|
||||
@@ -55,8 +57,16 @@ public class QuickReplace {
|
||||
}
|
||||
|
||||
IBlockState blockState = blockStates.get(player.getUniqueID());
|
||||
|
||||
SurvivalHelper.dropBlock(player.world, placedAgainstBlockPos, player);
|
||||
player.world.setBlockState(placedAgainstBlockPos, blockState);
|
||||
|
||||
//Shrink itemstack with 1
|
||||
ItemStack itemStack = player.getHeldItem(player.swingingHand); //TODO check hand
|
||||
if (!player.isCreative() && Block.getBlockFromItem(itemStack.getItem()) == blockState.getBlock()) {
|
||||
itemStack.shrink(1);
|
||||
}
|
||||
|
||||
//Mirror and Array synergy
|
||||
BlockSnapshot blockSnapshot = new BlockSnapshot(player.world, placedAgainstBlockPos, blockState);
|
||||
BlockEvent.PlaceEvent placeEvent = new BlockEvent.PlaceEvent(blockSnapshot, blockState, player, EnumHand.MAIN_HAND);
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
package nl.requios.effortlessbuilding;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.state.IBlockState;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraftforge.items.ItemHandlerHelper;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class SurvivalHelper {
|
||||
|
||||
public static boolean canBreak(){
|
||||
return true;
|
||||
}
|
||||
|
||||
public static boolean canPlace(){
|
||||
return true;
|
||||
}
|
||||
|
||||
//Gives items directly to player
|
||||
public static void dropBlock(World world, BlockPos pos, EntityPlayer player){
|
||||
if (player.isCreative()) return;
|
||||
|
||||
IBlockState blockState = world.getBlockState(pos);
|
||||
|
||||
List<ItemStack> drops = blockState.getBlock().getDrops(world, pos, blockState, 0);
|
||||
for (ItemStack drop : drops)
|
||||
{
|
||||
ItemHandlerHelper.giveItemToPlayer(player, drop);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user