Survival array and mirror.

This commit is contained in:
Christian Knaapen
2018-09-30 18:05:04 +02:00
parent 6f6360ae11
commit 5c835f8763
4 changed files with 84 additions and 0 deletions

View File

@@ -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);
}
}

View File

@@ -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

View File

@@ -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);

View File

@@ -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);
}
}
}