Skip to content

Commit

Permalink
* Async scheduler!
Browse files Browse the repository at this point in the history
* Fixed an issue with fetching block information above max world height

* Added toString overrides for all packets.

* Implemented PlayerInteractEvent.
  • Loading branch information
zml2008 authored and SpaceManiac committed Nov 19, 2011
1 parent e17b25e commit 7f09b77
Show file tree
Hide file tree
Showing 82 changed files with 769 additions and 53 deletions.
9 changes: 7 additions & 2 deletions pom.xml
Expand Up @@ -51,7 +51,7 @@
<dependency>
<groupId>org.bukkit</groupId>
<artifactId>bukkit</artifactId>
<version>1.8.1-R4-SNAPSHOT</version>
<version>1.8.1-R5-SNAPSHOT</version>
<type>jar</type>
<scope>compile</scope>
</dependency>
Expand Down Expand Up @@ -93,7 +93,12 @@
<artifactId>junit</artifactId>
<version>4.8.1</version>
<scope>test</scope>
</dependency>
</dependency>
<dependency>
<groupId>net.sf.trove4j</groupId>
<artifactId>trove4j</artifactId>
<version>3.0.1</version>
</dependency>
</dependencies>

<build>
Expand Down
4 changes: 4 additions & 0 deletions src/main/java/net/glowstone/EventFactory.java
Expand Up @@ -108,6 +108,10 @@ public static PlayerPreLoginEvent onPlayerPreLogin(String name, Session session)
public static PlayerChangedWorldEvent onPlayerChangedWorld(GlowPlayer player, GlowWorld fromWorld) {
return callEvent(new PlayerChangedWorldEvent(player, fromWorld));
}

public static PlayerAnimationEvent onPlayerAnimate(GlowPlayer player) {
return callEvent(new PlayerAnimationEvent(player));
}

// -- Block Events

Expand Down
5 changes: 5 additions & 0 deletions src/main/java/net/glowstone/GlowChunk.java
Expand Up @@ -313,6 +313,7 @@ public void initializeTypes(byte[] types) {
* @return A GlowBlockState if the entity exists, or null otherwise.
*/
public GlowBlockState getEntity(int x, int y, int z) {
if (y >= world.getMaxHeight() - 1 || y < 0) return null;
load();
return tileEntities.get(coordToIndex(x, z, y));
}
Expand All @@ -325,6 +326,7 @@ public GlowBlockState getEntity(int x, int y, int z) {
* @return The type.
*/
public int getType(int x, int z, int y) {
if (y >= world.getMaxHeight() - 1 || y < 0) return 0;
load();
return types[coordToIndex(x, z, y)];
}
Expand Down Expand Up @@ -371,6 +373,7 @@ public void setType(int x, int z, int y, int type) {
* @return The metadata.
*/
public int getMetaData(int x, int z, int y) {
if (y >= world.getMaxHeight() - 1 || y < 0) return 0;
load();
return metaData[coordToIndex(x, z, y)];
}
Expand Down Expand Up @@ -398,6 +401,7 @@ public void setMetaData(int x, int z, int y, int metaData) {
* @return The sky light level.
*/
public int getSkyLight(int x, int z, int y) {
if (y >= world.getMaxHeight() - 1 || y < 0) return 0;
load();
return skyLight[coordToIndex(x, z, y)];
}
Expand Down Expand Up @@ -425,6 +429,7 @@ public void setSkyLight(int x, int z, int y, int skyLight) {
* @return The block light level.
*/
public int getBlockLight(int x, int z, int y) {
if (y >= world.getMaxHeight() - 1 || y < 0) return 0;
load();
return blockLight[coordToIndex(x, z, y)];
}
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/net/glowstone/GlowWorld.java
Expand Up @@ -487,7 +487,7 @@ public synchronized GlowBlock getBlockAt(int x, int y, int z) {
}

public int getBlockTypeIdAt(int x, int y, int z) {
return ((GlowChunk) getChunkAt(x >> 4, z >> 4)).getType(x & 0xF, z & 0xF, y & 0x7F);
return ((GlowChunk) getChunkAt(x >> 4, z >> 4)).getType(x & 0xF, z & 0xF, y);
}

public int getHighestBlockYAt(int x, int z) {
Expand Down
15 changes: 10 additions & 5 deletions src/main/java/net/glowstone/block/GlowBlock.java
Expand Up @@ -113,7 +113,7 @@ public Material getType() {
}

public int getTypeId() {
return chunk.getType(x & 0xf, z & 0xf, y & 0x7f);
return chunk.getType(x & 0xf, z & 0xf, y);
}

public void setType(Material type) {
Expand All @@ -129,8 +129,8 @@ public boolean setTypeId(int type, boolean applyPhysics) {
}

public boolean setTypeIdAndData(int type, byte data, boolean applyPhysics) {
chunk.setType(x & 0xf, z & 0xf, y & 0x7f, type);
chunk.setMetaData(x & 0xf, z & 0xf, y & 0x7f, data);
chunk.setType(x & 0xf, z & 0xf, y, type);
chunk.setMetaData(x & 0xf, z & 0xf, y, data);

BlockChangeMessage bcmsg = new BlockChangeMessage(x, y, z, type, data);
for (GlowPlayer p : getWorld().getRawPlayers()) {
Expand All @@ -151,7 +151,7 @@ public boolean isLiquid() {
// data and light getters/setters

public byte getData() {
return (byte) chunk.getMetaData(x & 0xf, z & 0xf, y & 0x7f);
return (byte) chunk.getMetaData(x & 0xf, z & 0xf, y);
}

public void setData(byte data) {
Expand All @@ -168,7 +168,7 @@ public void setData(byte data, boolean applyPhyiscs) {
}

public byte getLightLevel() {
return (byte) Math.max(chunk.getSkyLight(x & 0xf, z & 0xf, y & 0x7f), chunk.getBlockLight(x & 0xf, z & 0xf, y & 0x7f));
return (byte) Math.max(chunk.getSkyLight(x & 0xf, z & 0xf, y), chunk.getBlockLight(x & 0xf, z & 0xf, y));
}

// redstone-related shenanigans
Expand Down Expand Up @@ -202,4 +202,9 @@ public PistonMoveReaction getPistonMoveReaction() {
throw new UnsupportedOperationException("Not supported yet.");
}

@Override
public String toString() {
return "GlowBlock{loc=" + getLocation().toString() + ",type=" + getTypeId() + ",data=" + getData() + "}";
}

}
50 changes: 46 additions & 4 deletions src/main/java/net/glowstone/entity/GlowLivingEntity.java
@@ -1,10 +1,14 @@
package net.glowstone.entity;

import java.util.Arrays;
import java.util.HashSet;
import java.util.ArrayList;
import java.util.List;

import gnu.trove.set.hash.TIntHashSet;
import net.glowstone.GlowServer;

import net.glowstone.util.TargetBlock;
import org.bukkit.Location;
import org.bukkit.block.Block;
import org.bukkit.entity.Arrow;
Expand All @@ -24,7 +28,7 @@
import net.glowstone.GlowWorld;

/**
* A GlowLivingEntity is a {@link Player} or {@link Monster}.
* A GlowLivingEntity is a {@link org.bukkit.entity.Player} or {@link org.bukkit.entity.Monster}.
* @author Graham Edgecombe.
*/
public abstract class GlowLivingEntity extends GlowEntity implements LivingEntity {
Expand Down Expand Up @@ -107,15 +111,53 @@ public Location getEyeLocation() {
}

public List<Block> getLineOfSight(HashSet<Byte> transparent, int maxDistance) {
throw new UnsupportedOperationException("Not supported yet.");
TIntHashSet transparentBlocks = new TIntHashSet();
if (transparent != null) {
for (byte byt : transparent) {
transparentBlocks.add(byt);
}
} else {
transparentBlocks.add(0);
}
List<Block> ret = new ArrayList<Block>();
TargetBlock target = new TargetBlock(this, maxDistance, 0.2, transparentBlocks);
while (target.getNextBlock() != null) {
Block block = target.getCurrentBlock().getBlock();
if (!transparentBlocks.contains(block.getTypeId())) {
ret.add(block);
}
}
return ret;
}

public Block getTargetBlock(HashSet<Byte> transparent, int maxDistance) {
throw new UnsupportedOperationException("Not supported yet.");
TIntHashSet transparentBlocks = new TIntHashSet();
if (transparent != null) {
for (byte byt : transparent) {
transparentBlocks.add(byt);
}
} else {
transparentBlocks = null;
}
Location loc = new TargetBlock(this, maxDistance, 0.2, transparentBlocks).getSolidTargetBlock();
return loc == null ? null : loc.getBlock();
}

public List<Block> getLastTwoTargetBlocks(HashSet<Byte> transparent, int maxDistance) {
throw new UnsupportedOperationException("Not supported yet.");
TIntHashSet transparentBlocks = new TIntHashSet();
if (transparent != null) {
for (byte byt : transparent) {
transparentBlocks.add(byt);
}
} else {
transparentBlocks = null;
}
TargetBlock target = new TargetBlock(this, maxDistance, 0.2, transparentBlocks);
Location last = target.getSolidTargetBlock();
if (last == null) {
return new ArrayList<Block>(Arrays.asList(target.getPreviousBlock().getBlock()));
}
return new ArrayList<Block>(Arrays.asList(target.getPreviousBlock().getBlock(), last.getBlock()));
}

public Egg throwEgg() {
Expand Down
14 changes: 14 additions & 0 deletions src/main/java/net/glowstone/entity/GlowPlayer.java
Expand Up @@ -131,6 +131,12 @@ public final class GlowPlayer extends GlowHumanEntity implements Player, Invento
*/
private String playerListName;

/**
* Stores the last block placement message to work around a bug in the
* vanilla client where duplicate packets are sent.
*/
private BlockPlacementMessage lastPlacement;

/**
* Creates a new player and adds it to the world.
* @param session The player's session.
Expand Down Expand Up @@ -877,4 +883,12 @@ public Map<String, Object> serialize() {
ret.put("name", getName());
return ret;
}

public BlockPlacementMessage getPreviousPlacement() {
return lastPlacement;
}

public void setPreviousPlacement(BlockPlacementMessage message) {
this.lastPlacement = message;
}
}
4 changes: 4 additions & 0 deletions src/main/java/net/glowstone/msg/ActivateItemMessage.java
Expand Up @@ -12,4 +12,8 @@ public int getSlot() {
return slot;
}

@Override
public String toString() {
return "ActivateItemMessage{slot=" + slot + "}";
}
}
4 changes: 4 additions & 0 deletions src/main/java/net/glowstone/msg/AnimateEntityMessage.java
Expand Up @@ -21,4 +21,8 @@ public int getAnimation() {
return animation;
}

@Override
public String toString() {
return "AnimateEntityMessage{id=" + id + ",animation=" + animation + "}";
}
}
4 changes: 4 additions & 0 deletions src/main/java/net/glowstone/msg/AttachEntityMessage.java
Expand Up @@ -17,4 +17,8 @@ public int getVehicle() {
return vehicle;
}

@Override
public String toString() {
return "AttachEntityMessage{id=" + id + ",vehicle=" + vehicle + "}";
}
}
4 changes: 4 additions & 0 deletions src/main/java/net/glowstone/msg/BlockChangeMessage.java
Expand Up @@ -32,4 +32,8 @@ public int getMetadata() {
return metadata;
}

@Override
public String toString() {
return "BlockChangeMessage{x=" + x + ",y=" + y +",z=" + z + ",type=" + type + ",metadata=" + metadata + "}";
}
}
4 changes: 4 additions & 0 deletions src/main/java/net/glowstone/msg/BlockPlacementMessage.java
Expand Up @@ -46,4 +46,8 @@ public int getDirection() {
return direction;
}

@Override
public String toString() {
return "BlockPlacementMessage{x=" + x + ",y=" + y +",z=" + z + ",direction=" + direction + ",id=" + id + ",count=" + count + ",damage=" + damage + "}";
}
}
4 changes: 4 additions & 0 deletions src/main/java/net/glowstone/msg/ChatMessage.java
Expand Up @@ -12,4 +12,8 @@ public String getMessage() {
return message;
}

@Override
public String toString() {
return "ChatMessage{message=" + message + "}";
}
}
4 changes: 4 additions & 0 deletions src/main/java/net/glowstone/msg/CloseWindowMessage.java
Expand Up @@ -12,4 +12,8 @@ public int getId() {
return id;
}

@Override
public String toString() {
return "CloseWindowMessage{id=" + id + "}";
}
}
4 changes: 4 additions & 0 deletions src/main/java/net/glowstone/msg/CollectItemMessage.java
Expand Up @@ -17,4 +17,8 @@ public int getCollector() {
return collector;
}

@Override
public String toString() {
return "CollectItemMessage{id=" + id + ",collector=" + collector + "}";
}
}
4 changes: 4 additions & 0 deletions src/main/java/net/glowstone/msg/CompressedChunkMessage.java
Expand Up @@ -45,4 +45,8 @@ public byte[] getData() {
return data;
}

@Override
public String toString() {
return "CompressedChunkMessage{x=" + x + ",y=" + y + ",z=" + z + ",width=" + width + ",height=" + height + ",depth=" + depth + ",data=" + depth + "}";
}
}
4 changes: 4 additions & 0 deletions src/main/java/net/glowstone/msg/CreateEntityMessage.java
Expand Up @@ -12,4 +12,8 @@ public int getId() {
return id;
}

@Override
public String toString() {
return "CreateEntityMessage{id=" + id + "}";
}
}
4 changes: 4 additions & 0 deletions src/main/java/net/glowstone/msg/DestroyEntityMessage.java
Expand Up @@ -12,4 +12,8 @@ public int getId() {
return id;
}

@Override
public String toString() {
return "DestroyEntityMessage{id=" + id + "}";
}
}
4 changes: 4 additions & 0 deletions src/main/java/net/glowstone/msg/DiggingMessage.java
Expand Up @@ -36,4 +36,8 @@ public int getFace() {
return face;
}

@Override
public String toString() {
return "DiggingMessage{state=" + state + ",x=" + x + ",y=" + y + ",z=" + z + ",face=" + face + "}";
}
}
4 changes: 4 additions & 0 deletions src/main/java/net/glowstone/msg/EntityActionMessage.java
Expand Up @@ -21,4 +21,8 @@ public int getAction() {
return action;
}

@Override
public String toString() {
return "EntityActionMessage{id=" + id + ",action=" + action + "}";
}
}
6 changes: 5 additions & 1 deletion src/main/java/net/glowstone/msg/EntityEffectMessage.java
Expand Up @@ -28,5 +28,9 @@ public byte getAmplifier() {
public short getDuration() {
return duration;
}


@Override
public String toString() {
return "EntityEffectMessage{id=" + id + ",effect=" + effect + ",amplifier=" + amplifier + ",duration=" + duration +"}";
}
}
4 changes: 4 additions & 0 deletions src/main/java/net/glowstone/msg/EntityEquipmentMessage.java
Expand Up @@ -33,4 +33,8 @@ public int getDamage() {
return damage;
}

@Override
public String toString() {
return "EntityEquipmentMessage{id=" + id + ",slot=" + slot + ",item=" + item + ",damage" + damage +"}";
}
}
4 changes: 4 additions & 0 deletions src/main/java/net/glowstone/msg/EntityInteractionMessage.java
Expand Up @@ -23,4 +23,8 @@ public boolean isPunching() {
return punching;
}

@Override
public String toString() {
return "EntityInteractionMessage{id=" + id + ",target=" + target + ",punching=" + punching + "}";
}
}
10 changes: 10 additions & 0 deletions src/main/java/net/glowstone/msg/EntityMetadataMessage.java
Expand Up @@ -22,4 +22,14 @@ public List<Parameter<?>> getParameters() {
return parameters;
}

@Override
public String toString() {
StringBuilder build = new StringBuilder("EntityInteractionMessage{id=");
build.append(id).append(",metadata=[");
for (Parameter<?> param : parameters) {
build.append(param.toString()).append(",");
}
build.append("]}");
return build.toString();
}
}

0 comments on commit 7f09b77

Please sign in to comment.