diff --git a/src/main/java/net/minecraft/client/gui/MissingMinecraftScreen.java b/src/main/java/net/minecraft/client/gui/MissingMinecraftScreen.java
index 4efb5c71e..c3a5c7836 100644
--- a/src/main/java/net/minecraft/client/gui/MissingMinecraftScreen.java
+++ b/src/main/java/net/minecraft/client/gui/MissingMinecraftScreen.java
@@ -72,7 +72,7 @@ public class MissingMinecraftScreen extends Screen {
     }
     @Override
     public void tick(){
-        ticks += 1;
+        ticks += 30;
     }
 
     public void drawBackground(float partialTick)
@@ -81,7 +81,7 @@ public class MissingMinecraftScreen extends Screen {
         GL11.glDisable(GL11.GL_FOG);
 
         Tessellator tessellator = Tessellator.instance;
-        mc.textureManager.loadTexture("/assets/minecraft/textures/block/netherrack_mossy.png").bind();
+        mc.textureManager.loadTexture("/assets/minecraft/textures/block/cobbled_netherrack_mossy.png").bind();
         GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
         GL11.glEnable(GL11.GL_BLEND);
 
diff --git a/src/main/java/net/minecraft/client/gui/chat/ChatScreen.java b/src/main/java/net/minecraft/client/gui/chat/ChatScreen.java
index ded531c91..64b323481 100644
--- a/src/main/java/net/minecraft/client/gui/chat/ChatScreen.java
+++ b/src/main/java/net/minecraft/client/gui/chat/ChatScreen.java
@@ -71,7 +71,7 @@ public class ChatScreen extends Screen implements ITextField {
 			if (showEmotePicker) {
 				emotePicker.scrollOffset((int)(-dWheel / 0.1f));
 			} else {
-				mc.ingameHud.chatScroll += dWheel / 1;
+				mc.ingameHud.chatScroll += dWheel;
 			}
 		}
 
diff --git a/src/main/java/net/minecraft/core/block/MotionSensorBlock.java b/src/main/java/net/minecraft/core/block/MotionSensorBlock.java
index 20b449948..f2f3c668b 100644
--- a/src/main/java/net/minecraft/core/block/MotionSensorBlock.java
+++ b/src/main/java/net/minecraft/core/block/MotionSensorBlock.java
@@ -46,16 +46,6 @@ public class MotionSensorBlock extends RotatableEntityBlock
         spawnParticles(world, x, y, z);
     }
 
-	public static void updateSensorBlockState(boolean active, World world, int x, int y, int z) {
-		int meta = world.getBlockMetadata(x, y, z);
-		if(active) {
-			world.setBlockWithNotify(x, y, z, Blocks.MOTION_SENSOR_ACTIVE.id);
-		}else {
-			world.setBlockWithNotify(x, y, z, Blocks.MOTION_SENSOR_IDLE.id);
-		}
-		world.setBlockMetadataWithNotify(x, y, z, meta);
-	}
-
 	private void spawnParticles(World world, int x, int y, int z) {
 		Random random = world.rand;
 
diff --git a/src/main/java/net/minecraft/core/block/entity/BlockEntity.java b/src/main/java/net/minecraft/core/block/entity/BlockEntity.java
index 22701c5b4..8328f58f0 100644
--- a/src/main/java/net/minecraft/core/block/entity/BlockEntity.java
+++ b/src/main/java/net/minecraft/core/block/entity/BlockEntity.java
@@ -127,16 +127,16 @@ public class BlockEntity implements ICarriable
 
     @Override
     public boolean tryPlace(World world, Entity holder, int blockX, int blockY, int blockZ, Side side, double xPlaced, double yPlaced) {
+        CarriedBlock carriedBlock = this.carriedBlock;
         x = blockX + side.getOffsetX();
         y = blockY + side.getOffsetY();
         z = blockZ + side.getOffsetZ();
 
         Block currentBlock = world.getBlock(x, y, z);
         if (currentBlock != null && !currentBlock.hasTag(BlockTags.PLACE_OVERWRITES)) return false;
-        world.setBlockAndMetadataWithNotify(x, y, z, carriedBlock.blockId, carriedBlock.metadata);
+        world.setBlockAndMetadata(x, y, z, carriedBlock.blockId, carriedBlock.metadata);
 
         worldObj = world;
-        this.carriedBlock = null;
         this.validate();
         world.removeBlockTileEntity(x, y, z);
         world.setBlockTileEntity(x, y, z, this);
@@ -144,6 +144,7 @@ public class BlockEntity implements ICarriable
         if (b != null && holder instanceof Mob) {
             b.onBlockPlacedByMob(world, x, y, z, side, (Mob) holder, yPlaced);
         }
+        world.notifyBlockChange(x, y, z, carriedBlock.blockId);
         return true;
     }
 
diff --git a/src/main/java/net/minecraft/core/block/entity/SensorBlockEntity.java b/src/main/java/net/minecraft/core/block/entity/SensorBlockEntity.java
index 1eb9ce2dd..09423ec18 100644
--- a/src/main/java/net/minecraft/core/block/entity/SensorBlockEntity.java
+++ b/src/main/java/net/minecraft/core/block/entity/SensorBlockEntity.java
@@ -11,26 +11,27 @@ import net.minecraft.core.entity.Entity;
 import net.minecraft.core.entity.player.Player;
 import net.minecraft.core.sound.SoundCategory;
 import net.minecraft.core.util.helper.Direction;
+import net.minecraft.core.util.helper.MathHelper;
 import net.minecraft.core.util.phys.AABB;
 import net.minecraft.core.world.World;
 
 public class SensorBlockEntity extends BlockEntity {
 
-	private int getSightRange(World world, int x, int y, int z, Direction facing) {
+	private int getSightRange(World world, double x, double y, double z, Direction facing) {
 		if(facing == Direction.NONE) {
 			return 0;
 		}
 		
 		int range = 4;
-		int blockInFront = world.getBlockId(x + facing.getOffsetX(), y + facing.getOffsetY(), z + facing.getOffsetZ());
+		int blockInFront = world.getBlockId(MathHelper.round(x + facing.getOffsetX()), MathHelper.round(y + facing.getOffsetY()), MathHelper.round(z + facing.getOffsetZ()));
 		if(Block.hasTag(blockInFront, BlockTags.EXTENDS_MOTION_SENSOR_RANGE)) {
 			range = 8;
 		}
 		
 		for(int i = 1; i <= range; i++) {
-			int x1 = x + facing.getOffsetX() * i;
-			int y1 = y + facing.getOffsetY() * i;
-			int z1 = z + facing.getOffsetZ() * i;
+			int x1 = MathHelper.round(x + facing.getOffsetX() * i);
+			int y1 = MathHelper.round(y + facing.getOffsetY() * i);
+			int z1 = MathHelper.round(z + facing.getOffsetZ() * i);
 			int id = world.getBlockId(x1, y1, z1);
 			if(Block.solid[id] && !Block.hasTag(id, BlockTags.EXTENDS_MOTION_SENSOR_RANGE)) {
 				return i - 1;
@@ -40,22 +41,22 @@ public class SensorBlockEntity extends BlockEntity {
 		return range;
 	}
 
-	private AABB getDetectionBox(int x, int y, int z, Direction facing, int range) {
-		int x1 = x + facing.getOffsetX();
-		int y1 = y + facing.getOffsetY();
-		int z1 = z + facing.getOffsetZ();
+	private AABB getDetectionBox(double x, double y, double z, Direction facing, int range) {
+		double x1 = x + facing.getOffsetX();
+		double y1 = y + facing.getOffsetY();
+		double z1 = z + facing.getOffsetZ();
 		
-		int x2 = x + facing.getOffsetX() * range;
-		int y2 = y + facing.getOffsetY() * range;
-		int z2 = z + facing.getOffsetZ() * range;
+		double x2 = x + facing.getOffsetX() * range;
+		double y2 = y + facing.getOffsetY() * range;
+		double z2 = z + facing.getOffsetZ() * range;
 		
-		int minX = Math.min(x1, x2);
-		int minY = Math.min(y1, y2);
-		int minZ = Math.min(z1, z2);
+		double minX = Math.min(x1, x2);
+		double minY = Math.min(y1, y2);
+		double minZ = Math.min(z1, z2);
 		
-		int maxX = Math.max(x1, x2) + 1;
-		int maxY = Math.max(y1, y2) + 1;
-		int maxZ = Math.max(z1, z2) + 1;
+		double maxX = Math.max(x1, x2) + 1;
+		double maxY = Math.max(y1, y2) + 1;
+		double maxZ = Math.max(z1, z2) + 1;
 		
 		return AABB.getTemporaryBB(minX, minY, minZ, maxX, maxY, maxZ);
 	}
@@ -87,11 +88,66 @@ public class SensorBlockEntity extends BlockEntity {
 		
 		if(shouldBeActive && id == Blocks.MOTION_SENSOR_IDLE.id) {
 			worldObj.playSoundEffect(null, SoundCategory.WORLD_SOUNDS, x + 0.5, y + 0.5, z + 0.5, "random.breath", 0.5f, worldObj.rand.nextFloat());
-			MotionSensorBlock.updateSensorBlockState(true, worldObj, x, y, z);
+			updateSensorBlockState(true, worldObj);
 		}
 		if(!shouldBeActive && id == Blocks.MOTION_SENSOR_ACTIVE.id) {
-			MotionSensorBlock.updateSensorBlockState(false, worldObj, x, y, z);
+			updateSensorBlockState(false, worldObj);
 		}
 	}
 
+	@Override
+	public void heldTick(World world, Entity holder) {
+		if(world == null || carriedBlock == null || world.isClientSide) {
+			return;
+		}
+		assert worldObj == null;
+
+		int id = carriedBlock.blockId;
+		int meta = carriedBlock.metadata;
+
+		boolean shouldBeActive = false;
+		Direction facing = MotionSensorBlock.getFacingDirection(meta);
+		int effectiveRange = getSightRange(world, holder.x, holder.y, holder.z, facing);
+		if(effectiveRange > 0) {
+			AABB detectionBox = getDetectionBox(holder.x, holder.y, holder.z, facing, effectiveRange);
+			List<Entity> list = world.getEntitiesWithinAABBExcludingEntity(null, detectionBox);
+			for(int i=0; i < list.size(); i++) {
+				Entity entity = list.get(i);
+				if(entity instanceof Player) {
+					Player player = (Player) entity;
+					player.triggerAchievement(Achievements.GET_SENSED);
+				}
+				shouldBeActive = true;
+			}
+		}
+
+		if(shouldBeActive && id == Blocks.MOTION_SENSOR_IDLE.id) {
+			world.playSoundEffect(null, SoundCategory.WORLD_SOUNDS, x + 0.5, y + 0.5, z + 0.5, "random.breath", 0.5f, world.rand.nextFloat());
+			updateSensorBlockState(true, world);
+		}
+		if(!shouldBeActive && id == Blocks.MOTION_SENSOR_ACTIVE.id) {
+			updateSensorBlockState(false, world);
+		}
+	}
+
+	public void updateSensorBlockState(boolean active, World world) {
+		if (carriedBlock != null) {
+            if(active) {
+				carriedBlock.blockId = Blocks.MOTION_SENSOR_ACTIVE.id;
+			}else {
+				carriedBlock.blockId = Blocks.MOTION_SENSOR_IDLE.id;
+			}
+		} else {
+			int meta = world.getBlockMetadata(x, y, z);
+			int blockId;
+			if(active) {
+				blockId = Blocks.MOTION_SENSOR_ACTIVE.id;
+			}else {
+				blockId = Blocks.MOTION_SENSOR_IDLE.id;
+			}
+			world.setBlock(x, y, z, blockId);
+			world.setBlockMetadata(x, y, z, meta);
+			world.notifyBlockChange(x, y, z, blockId);
+		}
+	}
 }
diff --git a/src/main/java/net/minecraft/core/net/command/commands/SpawnCommand.java b/src/main/java/net/minecraft/core/net/command/commands/SpawnCommand.java
index 57ed015ab..e95815b03 100644
--- a/src/main/java/net/minecraft/core/net/command/commands/SpawnCommand.java
+++ b/src/main/java/net/minecraft/core/net/command/commands/SpawnCommand.java
@@ -30,7 +30,7 @@ public class SpawnCommand {
                     if (sender == null) throw CommandExceptions.notInWorld().create();
 
                     if (sender.dimension != 0) source.movePlayerToDimension(sender, 0);
-                    sender.absMoveTo(spawnCoordinates.x + 0.5, spawnCoordinates.y, spawnCoordinates.z + 0.5, sender.yRot, sender.xRot);
+                    sender.absMoveTo(spawnCoordinates.x + 0.5, spawnCoordinates.y + 1.1 + sender.heightOffset, spawnCoordinates.z + 0.5, sender.yRot, sender.xRot);
                     source.sendTranslatableMessage("command.commands.spawn.success");
                     return Command.SINGLE_SUCCESS;
                 })
@@ -45,7 +45,7 @@ public class SpawnCommand {
 
                             for (Entity entity : players) {
                                 if (((Player)entity).dimension != 0) source.movePlayerToDimension((Player) entity, 0);
-                                entity.absMoveTo(spawnCoordinates.x + 0.5, spawnCoordinates.y, spawnCoordinates.z + 0.5, entity.yRot, entity.xRot);
+                                entity.absMoveTo(spawnCoordinates.x + 0.5, spawnCoordinates.y + 1.1 + entity.heightOffset, spawnCoordinates.z + 0.5, entity.yRot, entity.xRot);
                                 if (entity == sender) {
                                     source.sendTranslatableMessage("command.commands.spawn.success");
                                 } else {
diff --git a/src/main/java/net/minecraft/server/net/PlayerList.java b/src/main/java/net/minecraft/server/net/PlayerList.java
index 0b51157d1..3defc4b7c 100644
--- a/src/main/java/net/minecraft/server/net/PlayerList.java
+++ b/src/main/java/net/minecraft/server/net/PlayerList.java
@@ -189,7 +189,8 @@ public class PlayerList
             handler.kickUser("The server is full!");
             return null;
         }
-        for (ServerPlayer player : playerEntities) {
+        List<ServerPlayer> playerListCopy = new ArrayList<>(playerEntities);
+        for (ServerPlayer player : playerListCopy) {
             if (player.username.equalsIgnoreCase(username) || player.uuid.equals(uuid)) {
                 player.playerNetServerHandler.kickPlayer("You are logged in from another location!");
             }
diff --git a/src/main/resources/terrain.tiles b/src/main/resources/terrain.tiles
index 2e62a0e1b..12b0809d3 100644
--- a/src/main/resources/terrain.tiles
+++ b/src/main/resources/terrain.tiles
@@ -54,7 +54,7 @@ size=32x32
 2,13=polished_granite_side
 2,14=polished_basalt_side
 2,15=breaking_2
-2,16=netherrack_igneous_overlay
+2,16=cobbled_netherrack_igneous_overlay
 2,18=leaves_cacao_bean_stage0
 2,19=leaves_cherry_flowering_overlay
 2,20=leaves_oak_fancy
@@ -168,7 +168,7 @@ size=32x32
 7,3=deadbush
 7,4=cactus_bottom
 7,5=farmland_dry_top
-7,6=netherrack
+7,6=cobbled_netherrack
 7,7=pumpkin_carved_idle
 7,8=bed_head_top
 7,9=bed_head_side
@@ -254,7 +254,7 @@ size=32x32
 12,1=mushroom_brown
 12,2=furnace_stone_idle_front
 12,3=workbench_side
-12,4=netherrack_igneous
+12,4=cobbled_netherrack_igneous
 12,5=crops_wheat_stage4
 12,6=piston_side
 12,7=cake_bottom
@@ -287,7 +287,7 @@ size=32x32
 14,3=furnace_stone_top
 14,3=dispenser_top
 14,3=spikes_bottom
-14,4=netherrack_mossy
+14,4=cobbled_netherrack_mossy
 14,5=crops_wheat_stage6
 14,6=piston_top
 14,7=furnace_blast_side
