Survival array and mirror.
This commit is contained in:
@@ -51,14 +51,32 @@ public class Array {
|
|||||||
bagInventory = ItemRandomizerBag.getBagInventory(event.getPlayer().getHeldItemMainhand());
|
bagInventory = ItemRandomizerBag.getBagInventory(event.getPlayer().getHeldItemMainhand());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Get itemstack
|
||||||
|
ItemStack itemStack = event.getPlayer().getHeldItem(event.getHand());
|
||||||
|
|
||||||
for (int i = 0; i < a.count; i++) {
|
for (int i = 0; i < a.count; i++) {
|
||||||
pos = pos.add(offset);
|
pos = pos.add(offset);
|
||||||
if (event.getWorld().isBlockLoaded(pos, true)) {
|
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() :
|
IBlockState blockState = bagInventory == null ? event.getPlacedBlock() :
|
||||||
getBlockStateFromRandomizerBag(bagInventory, event.getWorld(), event.getPlayer(), event.getPos());
|
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);
|
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) {
|
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++) {
|
for (int i = 0; i < a.count; i++) {
|
||||||
pos = pos.add(offset);
|
pos = pos.add(offset);
|
||||||
if (event.getWorld().isBlockLoaded(pos, false)) {
|
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);
|
event.getWorld().setBlockToAir(pos);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -157,8 +157,21 @@ public class Mirror {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static void placeBlock(World world, EntityPlayer player, BlockPos newBlockPos, IBlockState newBlockState) {
|
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);
|
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
|
//Array synergy
|
||||||
BlockSnapshot blockSnapshot = new BlockSnapshot(world, newBlockPos, newBlockState);
|
BlockSnapshot blockSnapshot = new BlockSnapshot(world, newBlockPos, newBlockState);
|
||||||
BlockEvent.PlaceEvent placeEvent = new BlockEvent.PlaceEvent(blockSnapshot, newBlockState, player, EnumHand.MAIN_HAND);
|
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) {
|
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);
|
event.getWorld().setBlockToAir(newBlockPos);
|
||||||
|
|
||||||
//Array synergy
|
//Array synergy
|
||||||
|
|||||||
@@ -1,8 +1,10 @@
|
|||||||
package nl.requios.effortlessbuilding;
|
package nl.requios.effortlessbuilding;
|
||||||
|
|
||||||
|
import net.minecraft.block.Block;
|
||||||
import net.minecraft.block.state.IBlockState;
|
import net.minecraft.block.state.IBlockState;
|
||||||
import net.minecraft.entity.player.EntityPlayer;
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
import net.minecraft.entity.player.EntityPlayerMP;
|
import net.minecraft.entity.player.EntityPlayerMP;
|
||||||
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.util.EnumHand;
|
import net.minecraft.util.EnumHand;
|
||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
import net.minecraftforge.common.util.BlockSnapshot;
|
import net.minecraftforge.common.util.BlockSnapshot;
|
||||||
@@ -55,8 +57,16 @@ public class QuickReplace {
|
|||||||
}
|
}
|
||||||
|
|
||||||
IBlockState blockState = blockStates.get(player.getUniqueID());
|
IBlockState blockState = blockStates.get(player.getUniqueID());
|
||||||
|
|
||||||
|
SurvivalHelper.dropBlock(player.world, placedAgainstBlockPos, player);
|
||||||
player.world.setBlockState(placedAgainstBlockPos, blockState);
|
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
|
//Mirror and Array synergy
|
||||||
BlockSnapshot blockSnapshot = new BlockSnapshot(player.world, placedAgainstBlockPos, blockState);
|
BlockSnapshot blockSnapshot = new BlockSnapshot(player.world, placedAgainstBlockPos, blockState);
|
||||||
BlockEvent.PlaceEvent placeEvent = new BlockEvent.PlaceEvent(blockSnapshot, blockState, player, EnumHand.MAIN_HAND);
|
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