use of io.xol.chunkstories.api.entity.Entity in project chunkstories by Hugobros3.
the class CreativeCommand method handleCommand.
@Override
public boolean handleCommand(CommandEmitter emitter, Command command, String[] arguments) {
if (!(emitter instanceof Player)) {
emitter.sendMessage("You need to be a player to use this command.");
return true;
}
Player player = (Player) emitter;
if (!emitter.hasPermission("self.toggleCreative")) {
emitter.sendMessage("You don't have the permission.");
return true;
}
Entity controlledEntity = player.getControlledEntity();
if (controlledEntity != null && controlledEntity instanceof EntityCreative) {
boolean state = ((EntityCreative) controlledEntity).getCreativeModeComponent().get();
state = !state;
player.sendMessage("Creative mode set to: " + state);
((EntityCreative) controlledEntity).getCreativeModeComponent().set(state);
return true;
}
emitter.sendMessage("This action doesn't apply to your current entity.");
return true;
}
use of io.xol.chunkstories.api.entity.Entity in project chunkstories by Hugobros3.
the class FlyCommand method handleCommand.
@Override
public boolean handleCommand(CommandEmitter emitter, Command command, String[] arguments) {
if (!(emitter instanceof Player)) {
emitter.sendMessage("You need to be a player to use this command.");
return true;
}
Player player = (Player) emitter;
if (!emitter.hasPermission("self.toggleFly")) {
emitter.sendMessage("You don't have the permission.");
return true;
}
Entity controlledEntity = player.getControlledEntity();
if (controlledEntity != null && controlledEntity instanceof EntityFlying) {
boolean state = ((EntityFlying) controlledEntity).getFlyingComponent().get();
state = !state;
player.sendMessage("Flying mode set to: " + state);
((EntityFlying) controlledEntity).getFlyingComponent().set(state);
return true;
}
emitter.sendMessage("This action doesn't apply to your current entity.");
return true;
}
use of io.xol.chunkstories.api.entity.Entity in project chunkstories by Hugobros3.
the class HealthCommand method handleCommand.
@Override
public boolean handleCommand(CommandEmitter emitter, Command command, String[] arguments) {
if (!(emitter instanceof Player)) {
emitter.sendMessage("You need to be a player to use this command.");
return true;
}
Player player = (Player) emitter;
if (!emitter.hasPermission("self.sethealth")) {
emitter.sendMessage("You don't have the permission.");
return true;
}
if (arguments.length < 1 || !isNumeric(arguments[0])) {
emitter.sendMessage("Syntax: /health <hp>");
return true;
}
float health = Float.parseFloat(arguments[0]);
Entity controlledEntity = player.getControlledEntity();
if (controlledEntity != null && controlledEntity instanceof EntityLiving) {
((EntityLiving) controlledEntity).setHealth(health);
player.sendMessage("Health set to: " + health + "/" + ((EntityLiving) controlledEntity).getMaxHealth());
return true;
}
emitter.sendMessage("This action doesn't apply to your current entity.");
return true;
}
use of io.xol.chunkstories.api.entity.Entity in project chunkstories-core by Hugobros3.
the class EntityLivingImplementation method damage.
@Override
public float damage(DamageCause cause, HitBox osef, float damage) {
if (damageCooldown > System.currentTimeMillis())
return 0f;
EntityDamageEvent event = new EntityDamageEvent(this, cause, damage);
this.getWorld().getGameLogic().getPluginsManager().fireEvent(event);
if (!event.isCancelled()) {
entityHealthComponent.damage(event.getDamageDealt());
lastDamageCause = cause;
damageCooldown = System.currentTimeMillis() + cause.getCooldownInMs();
float damageDealt = event.getDamageDealt();
// Applies knockback
if (cause instanceof Entity) {
Entity attacker = (Entity) cause;
Vector3d attackKnockback = this.getLocation().sub(attacker.getLocation().add(0d, 0d, 0d));
attackKnockback.y = (0d);
attackKnockback.normalize();
float knockback = (float) Math.max(1f, Math.pow(damageDealt, 0.5f));
attackKnockback.mul(knockback / 50d);
attackKnockback.y = (knockback / 50d);
/*
attackKnockback.scale(damageDealt / 500d);
attackKnockback.scale(1.0 / (1.0 + 5 * this.getVelocityComponent().getVelocity().length()));*/
// .scale(1/60d).scale(damageDealt / 10f);
this.getVelocityComponent().addVelocity(attackKnockback);
}
return damageDealt;
}
return 0f;
}
use of io.xol.chunkstories.api.entity.Entity in project chunkstories-core by Hugobros3.
the class EntityPlayer method onControllerInput.
@Override
public boolean onControllerInput(Input input, Controller controller) {
// We are moving inventory bringup here !
if (input.getName().equals("inventory") && world instanceof WorldClient) {
if (creativeMode.get()) {
((WorldClient) getWorld()).getClient().openInventories(this.inventoryComponent.getInventory(), new InventoryLocalCreativeMenu(world));
} else {
((WorldClient) getWorld()).getClient().openInventories(this.inventoryComponent.getInventory(), this.armor.getInventory());
}
return true;
}
Location blockLocation = this.getBlockLookingAt(true);
double maxLen = 1024;
if (blockLocation != null) {
Vector3d diff = new Vector3d(blockLocation).sub(this.getLocation());
// Vector3d dir = diff.clone().normalize();
maxLen = diff.length();
}
Vector3d initialPosition = new Vector3d(getLocation());
initialPosition.add(new Vector3d(0, eyePosition, 0));
Vector3dc direction = getDirectionLookingAt();
Iterator<Entity> i = world.collisionsManager().rayTraceEntities(initialPosition, direction, maxLen);
while (i.hasNext()) {
Entity e = i.next();
if (e.handleInteraction(this, input))
return true;
}
ItemPile itemSelected = getSelectedItemComponent().getSelectedItem();
if (itemSelected != null) {
// See if the item handles the interaction
if (itemSelected.getItem().onControllerInput(this, itemSelected, input, controller))
return true;
}
if (getWorld() instanceof WorldMaster) {
// Creative mode features building and picking.
if (this.getCreativeModeComponent().get()) {
if (input.getName().equals("mouse.left")) {
if (blockLocation != null) {
// Player events mod
if (controller instanceof Player) {
Player player = (Player) controller;
WorldCell cell = world.peekSafely(blockLocation);
FutureCell future = new FutureCell(cell);
future.setVoxel(this.getDefinition().store().parent().voxels().air());
future.setBlocklight(0);
future.setSunlight(0);
future.setMetaData(0);
PlayerVoxelModificationEvent event = new PlayerVoxelModificationEvent(cell, future, EntityCreative.CREATIVE_MODE, player);
// Anyone has objections ?
world.getGameContext().getPluginManager().fireEvent(event);
if (event.isCancelled())
return true;
Vector3d rnd = new Vector3d();
for (int k = 0; k < 40; k++) {
rnd.set(blockLocation);
rnd.add(Math.random() * 0.98, Math.random() * 0.98, Math.random() * 0.98);
world.getParticlesManager().spawnParticleAtPosition("voxel_frag", rnd);
}
world.getSoundManager().playSoundEffect("sounds/gameplay/voxel_remove.ogg", Mode.NORMAL, blockLocation, 1.0f, 1.0f);
try {
world.poke(future, this);
// world.poke((int)blockLocation.x, (int)blockLocation.y, (int)blockLocation.z, null, 0, 0, 0, this);
} catch (WorldException e) {
// Discard but maybe play some effect ?
}
return true;
}
}
} else if (input.getName().equals("mouse.middle")) {
if (blockLocation != null) {
CellData ctx = this.getWorld().peekSafely(blockLocation);
if (!ctx.getVoxel().isAir()) {
// Spawn new itemPile in his inventory
ItemVoxel item = (ItemVoxel) world.getGameContext().getContent().items().getItemDefinition("item_voxel").newItem();
item.voxel = ctx.getVoxel();
item.voxelMeta = ctx.getMetaData();
ItemPile itemVoxel = new ItemPile(item);
this.getInventory().setItemPileAt(getSelectedItemComponent().getSelectedSlot(), 0, itemVoxel);
return true;
}
}
}
}
}
// Then we check if the world minds being interacted with
return world.handleInteraction(this, blockLocation, input);
}
Aggregations