use of io.xol.chunkstories.api.entity.Entity in project chunkstories by Hugobros3.
the class SerializedEntityFile method read.
public Entity read(World world) {
try {
DataInputStream in = new DataInputStream(new FileInputStream(file));
Entity entity = EntitySerializer.readEntityFromStream(in, this, world);
in.close();
return entity;
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
use of io.xol.chunkstories.api.entity.Entity in project chunkstories by Hugobros3.
the class EntitySerializer method readEntityFromStream.
public static Entity readEntityFromStream(DataInputStream dis, OfflineSerializedData source, World world) {
try {
int entityDataLength = dis.readInt();
if (entityDataLength == -1)
return null;
DataInputStream in = LengthAwareBufferedIOHelper.getLengthAwareInput(entityDataLength, dis);
long entityUUID = in.readLong();
// Obsolete ?
// When we reach id -1 in a stream of entities, it means we reached the end.
// if(entityUUID == -1)
// return null;
short entityTypeID = in.readShort();
/*System.out.println("world"+world);
System.out.println("world.getGameContext()"+world.getGameContext());
System.out.println("world.getGameContext().getContent().entities()"+world.getGameContext().getContent().entities());
System.out.println("world.getGameContext().getContent().entities().getEntityTypeById(entityTypeID)"+world.getGameContext().getContent().entities().getEntityTypeById(entityTypeID));
*/
Entity entity = world.getContentTranslator().getEntityForId(entityTypeID).create(new Location(world, 0d, 0d, 0d));
entity.setUUID(entityUUID);
int componentId = in.readInt();
// Loop throught all components
while (true) {
if (// End of components to read
componentId == 0)
break;
else if (componentId == -1) {
// Read UTF-8 component name
String componentName = in.readUTF();
try {
entity.getComponents().tryPullComponentInStream(componentName, source, in);
} catch (UnknownComponentException e) {
logger().warn("Failure reading component " + componentName + " from " + source);
logger().warn(e.getMessage());
}
} else {
// Read int32 component id
try {
entity.getComponents().tryPullComponentInStream(componentId, source, in);
} catch (UnknownComponentException e) {
logger().warn(e.getMessage());
}
}
componentId = in.readInt();
}
return entity;
} catch (NullPointerException | IOException e) {
e.printStackTrace();
}
return null;
}
use of io.xol.chunkstories.api.entity.Entity in project chunkstories by Hugobros3.
the class InventoryView method handleClick.
private boolean handleClick(MouseButton mouseButton) {
// We assume a player has to be spawned in order to do items manipulation
Player player = gameWindow.getClient().getPlayer();
if (player == null) {
this.gameWindow.setLayer(parentLayer);
// this.mainScene.changeOverlay(parent);
selectedItem = null;
return true;
}
World world = player.getWorld();
for (int i = 0; i < drawers.length; i++) {
// Close button
if (drawers[i].isOverCloseButton()) {
this.gameWindow.setLayer(parentLayer);
selectedItem = null;
} else {
int[] c = drawers[i].getSelectedSlot();
if (c == null)
continue;
else {
int x = c[0];
int y = c[1];
if (selectedItem == null) {
if (mouseButton.equals("mouse.left")) {
selectedItem = inventories[i].getItemPileAt(x, y);
selectedItemAmount = selectedItem == null ? 0 : selectedItem.getAmount();
} else if (mouseButton.equals("mouse.right")) {
selectedItem = inventories[i].getItemPileAt(x, y);
selectedItemAmount = selectedItem == null ? 0 : 1;
} else if (mouseButton.equals("mouse.middle")) {
selectedItem = inventories[i].getItemPileAt(x, y);
selectedItemAmount = selectedItem == null ? 0 : (selectedItem.getAmount() > 1 ? selectedItem.getAmount() / 2 : 1);
}
// selectedItemInv = inventory;
} else if (mouseButton.equals("mouse.right")) {
if (selectedItem.equals(inventories[i].getItemPileAt(x, y))) {
if (selectedItemAmount < inventories[i].getItemPileAt(x, y).getAmount())
selectedItemAmount++;
}
} else if (mouseButton.equals("mouse.left")) {
// Ignore null-sum games
if (selectedItem.getInventory() == inventories[i] && x == selectedItem.getX() && y == selectedItem.getY()) {
selectedItem = null;
return true;
}
if (world instanceof WorldMaster) {
PlayerMoveItemEvent moveItemEvent = new PlayerMoveItemEvent(player, selectedItem, selectedItem.getInventory(), inventories[i], selectedItem.getX(), selectedItem.getY(), x, y, selectedItemAmount);
player.getContext().getPluginManager().fireEvent(moveItemEvent);
// If move was successfull
if (!moveItemEvent.isCancelled())
selectedItem.moveItemPileTo(inventories[i], x, y, selectedItemAmount);
selectedItem = null;
} else if (world instanceof WorldClientNetworkedRemote) {
// When in a remote MP scenario, send a packet
PacketInventoryMoveItemPile packetMove = new PacketInventoryMoveItemPile(world, selectedItem, selectedItem.getInventory(), inventories[i], selectedItem.getX(), selectedItem.getY(), x, y, selectedItemAmount);
((WorldClientNetworkedRemote) world).getRemoteServer().pushPacket(packetMove);
// And unsellect item
selectedItem = null;
}
}
return true;
}
}
}
// Clicked outside of any other inventory (drop!)
if (selectedItem != null) {
// SP scenario, replicated logic in PacketInventoryMoveItemPile
if (world instanceof WorldMaster) {
// For local item drops, we need to make sure we have a sutiable entity
Entity playerEntity = player.getControlledEntity();
if (playerEntity != null) {
PlayerMoveItemEvent moveItemEvent = new PlayerMoveItemEvent(player, selectedItem, selectedItem.getInventory(), null, selectedItem.getX(), selectedItem.getY(), 0, 0, selectedItemAmount);
player.getContext().getPluginManager().fireEvent(moveItemEvent);
if (!moveItemEvent.isCancelled()) {
// If we're pulling this out of an inventory ( and not /dev/null ), we need to
// remove it from that
Inventory sourceInventory = selectedItem.getInventory();
Location loc = playerEntity.getLocation();
EventItemDroppedToWorld dropItemEvent = new EventItemDroppedToWorld(loc, sourceInventory, selectedItem);
player.getContext().getPluginManager().fireEvent(dropItemEvent);
if (!dropItemEvent.isCancelled()) {
if (sourceInventory != null)
sourceInventory.setItemPileAt(selectedItem.getX(), selectedItem.getY(), null);
if (dropItemEvent.getItemEntity() != null)
loc.getWorld().addEntity(dropItemEvent.getItemEntity());
}
}
}
selectedItem = null;
} else // In MP scenario, move into /dev/null
if (world instanceof WorldClientNetworkedRemote) {
PacketInventoryMoveItemPile packetMove = new PacketInventoryMoveItemPile(world, selectedItem, selectedItem.getInventory(), null, selectedItem.getX(), selectedItem.getY(), 0, 0, selectedItemAmount);
((WorldClientNetworkedRemote) world).getRemoteServer().pushPacket(packetMove);
selectedItem = null;
}
}
return true;
}
use of io.xol.chunkstories.api.entity.Entity in project chunkstories-api by Hugobros3.
the class PacketOpenInventory method process.
@Override
public void process(PacketSender sender, DataInputStream in, PacketReceptionContext processor) throws IOException, PacketProcessingException {
inventory = InventoryTranslator.obtainInventoryHandle(in, processor);
if (processor.getContext() instanceof ClientInterface) {
ClientInterface client = (ClientInterface) processor.getContext();
Entity currentControlledEntity = client.getPlayer().getControlledEntity();
if (currentControlledEntity != null && currentControlledEntity instanceof EntityWithInventory)
client.openInventories(((EntityWithInventory) currentControlledEntity).getInventory(), inventory);
else
client.openInventories(inventory);
}
}
use of io.xol.chunkstories.api.entity.Entity in project chunkstories-api by Hugobros3.
the class PacketEntity method process.
public void process(PacketSender sender, DataInputStream in, PacketReceptionContext processor) throws IOException, UnknownComponentException {
long entityUUID = in.readLong();
short entityTypeID = in.readShort();
if (entityTypeID == -1)
return;
World world = processor.getWorld();
if (world == null)
return;
Entity entity = world.getEntityByUUID(entityUUID);
boolean addToWorld = false;
// Create an entity if the servers tells you to do so
if (entity == null) {
if (world instanceof WorldMaster && sender instanceof RemotePlayer) {
((Player) sender).sendMessage("You are sending packets to the server about a removed entity. Ignoring those.");
return;
} else {
entity = processor.getWorld().getContentTranslator().getEntityForId(entityTypeID).create(// This is technically wrong
new Location(world, 0, 0, 0));
entity.setUUID(entityUUID);
addToWorld = true;
}
}
int componentId = in.readInt();
// Loop throught all components
while (componentId != 0) {
try {
entity.getComponents().tryPullComponentInStream(componentId, sender, in);
} catch (UnknownComponentException e) {
processor.logger().warn(e.getMessage());
}
componentId = in.readInt();
}
// Add to world if it was missing and we didn't receive the despawn flag
if (addToWorld && entity.exists()) {
// Only the WorldMaster is allowed to spawn new entities in the world
if (processor instanceof ClientPacketsProcessor)
processor.getWorld().addEntity(entity);
}
}
Aggregations