Résolu Crashreports téléportation
-
Bonjour, je vous demande de l’aide car j’ai deux problèmes:
1. Quand je quitte mon monde et que je reviens, j’ai une arrayIndexOutOfBoundsExeption: -77 ou -73
2. Quand je sors ou entre dans le donjon en faisant un clic sur un bloc, parfois sa marche, parfois j’ai un arrayIndexOutOfBoundsExeption: 3565 ou je suis tp dans le videLes codes:
BlockDungeonTeleporter:package com.mod.test.blocks; import com.mod.test.entity.EntityBug; import com.mod.test.init.BlockMod; import com.mod.test.tileEntity.TileEntityBinaryMachine; import com.mod.test.tileEntity.TileEntityDungeonExit; import com.mod.test.tileEntity.TileEntityDungeonTeleporter; import com.mod.test.world.StructureDungeon; import net.minecraft.block.Block; import net.minecraft.block.ITileEntityProvider; import net.minecraft.block.material.Material; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.ChatComponentTranslation; import net.minecraft.world.EnumDifficulty; import net.minecraft.world.World; public class BlockDungeonTeleporter extends Block implements ITileEntityProvider { public BlockDungeonTeleporter() { super(Material.rock); } @Override public TileEntity createNewTileEntity(World world, int metadata) { return new TileEntityDungeonTeleporter(); } @Override public boolean hasTileEntity(int metadata) { return true; } public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) { if(player.dimension == 49) { if(world.difficultySetting != EnumDifficulty.PEACEFUL) { int ycoo = 165; int max = 0; boolean test = false; boolean max14 = false; TileEntityDungeonTeleporter t = new TileEntityDungeonTeleporter(); do { TileEntity tile = world.getTileEntity(-10, ycoo, -10); if(tile instanceof TileEntityDungeonTeleporter) { t = (TileEntityDungeonTeleporter)tile; if(!t.getOccuped()) { test = true; } else { if(max < 14) { ycoo += 6; max++; } else { max14 = true; test = true; } } } else { test = true; } } while(!test); if(!max14) { StructureDungeon.generate(world, 0, ycoo, 0); EntityBug boss = new EntityBug(world); player.setPosition(-3, ycoo + 1, -3); world.spawnEntityInWorld(boss); boss.setPosition(-3, ycoo + 1, -3); int i = -10; int j = ycoo; int k = -10; world.setBlock(i, j, k, BlockMod.dungeon_teleporter); TileEntity tile = world.getTileEntity(i, j, k); if(tile instanceof TileEntityDungeonTeleporter) { TileEntityDungeonTeleporter tp = (TileEntityDungeonTeleporter) tile; tp.setOccuped(true); } setCoordonates(world, i + 5, j + 2, k + 0, i, j, k, x, y, z); setCoordonates(world, i + 6, j + 2, k + 0, i, j, k, x, y, z); setCoordonates(world, i + 0, j + 2, k + 5, i, j, k, x, y, z); setCoordonates(world, i + 0, j + 2, k + 6, i, j, k, x, y, z); setCoordonates(world, i + 5, j + 2, k + 11, i, j, k, x, y, z); setCoordonates(world, i + 6, j + 2, k + 11, i, j, k, x, y, z); setCoordonates(world, i + 11, j + 2, k + 5, i, j, k, x, y, z); setCoordonates(world, i + 11, j + 2, k + 6, i, j, k, x, y, z); } else { if(!world.isRemote) player.addChatMessage(new ChatComponentTranslation("chat.dungeon_occuped")); } return true; } else { if(!world.isRemote) player.addChatMessage(new ChatComponentTranslation("chat.dungeon_peaceful")); } } return false; } private void setCoordonates(World world, int x, int y, int z, int i, int j, int k, int l, int m, int n) { TileEntity tile = world.getTileEntity(x, y, z); if(tile instanceof TileEntityDungeonExit) { TileEntityDungeonExit t = (TileEntityDungeonExit)tile; t.setTeleporterCoordonates(i, j, k); t.setCoordonates(l, m, n); } } }
BlockDungeonExit:
package com.mod.test.blocks; import com.mod.test.init.ItemMod; import com.mod.test.tileEntity.TileEntityDirectional; import com.mod.test.tileEntity.TileEntityDungeonExit; import com.mod.test.tileEntity.TileEntityDungeonTeleporter; import net.minecraft.block.Block; import net.minecraft.block.ITileEntityProvider; import net.minecraft.block.material.Material; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.ChatComponentTranslation; import net.minecraft.world.World; public class BlockDungeonExit extends Block implements ITileEntityProvider { public BlockDungeonExit() { super(Material.rock); } @Override public TileEntity createNewTileEntity(World world, int metadata) { return new TileEntityDungeonExit(); } @Override public boolean hasTileEntity(int metadata) { return true; } public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) { ItemStack stack = player.getHeldItem(); if(stack != null && stack.getItem() == ItemMod.dungeon_exit_key) { TileEntity tile = world.getTileEntity(x, y, z); if(tile instanceof TileEntityDungeonExit) { TileEntityDungeonExit t = (TileEntityDungeonExit)tile; world.setBlockToAir(t.xcoo, t.ycoo, t.zcoo); player.setPosition(t.xcoo, t.ycoo, t.zcoo); TileEntity tile2 = world.getTileEntity(t.xtp, t.ytp, t.ztp); if(tile instanceof TileEntityDungeonTeleporter) { TileEntityDungeonTeleporter t2 = (TileEntityDungeonTeleporter)tile2; t2.setOccuped(false); } return true; } } if(!world.isRemote) player.addChatMessage(new ChatComponentTranslation("chat.dungeon_exit_no_key")); return false; } }
TileEntityDungeonTeleporter:
package com.mod.test.tileEntity; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; public class TileEntityDungeonTeleporter extends TileEntity { private boolean occuped = false; @Override public void writeToNBT(NBTTagCompound compound) { super.writeToNBT(compound); compound.setBoolean("Occuped", occuped); } @Override public void readFromNBT(NBTTagCompound compound) { super.readFromNBT(compound); occuped = compound.getBoolean("Occuped"); } public void setOccuped(boolean tf) { occuped = tf; } public boolean getOccuped() { return occuped; } }
TileEntityDungeonExit:
package com.mod.test.tileEntity; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; public class TileEntityDungeonExit extends TileEntity { public int xcoo = 0; public int ycoo = 0; public int zcoo = 0; public int xtp = 0; public int ytp = 0; public int ztp = 0; @Override public void writeToNBT(NBTTagCompound compound) { super.writeToNBT(compound); compound.setInteger("x", xcoo); compound.setInteger("y", ycoo); compound.setInteger("z", zcoo); compound.setInteger("xtp", xtp); compound.setInteger("ytp", ytp); compound.setInteger("ztp", ztp); } @Override public void readFromNBT(NBTTagCompound compound) { super.readFromNBT(compound); xcoo = compound.getInteger("x"); ycoo = compound.getInteger("y"); zcoo = compound.getInteger("z"); xtp = compound.getInteger("xtp"); ytp = compound.getInteger("ytp"); ztp = compound.getInteger("ztp"); } public void setCoordonates(int x, int y, int z) { xcoo = x; ycoo = y; zcoo = z; } public void setTeleporterCoordonates(int x, int y, int z) { xtp = x; ytp = y; ztp = z; } }
-
Salut,
Ça serait bien de joindre le rapport de crash, non ? -
@‘robin4002’:
Salut,
Ça serait bien de joindre le rapport de crash, non ?Sa fonctionne dans plusieurs sens mais il y as des erreur des téléportation mauvaise et des crash c’est pourquoi j’aimerais bien que vous jetiez un œil au code pour perfectionner tout ca
Les:
Quand je relance un sauvegarde:[10:00:58] [Server thread/ERROR]: Encountered an unexpected exception java.lang.ArrayIndexOutOfBoundsException: -73 at net.minecraft.world.chunk.NibbleArray.get(NibbleArray.java:38) ~[NibbleArray.class:?] at net.minecraft.world.chunk.storage.ExtendedBlockStorage.getExtBlockMetadata(ExtendedBlockStorage.java:115) ~[ExtendedBlockStorage.class:?] at net.minecraft.world.chunk.Chunk.getBlockMetadata(Chunk.java:606) ~[Chunk.class:?] at net.minecraft.world.chunk.Chunk.func_150812_a(Chunk.java:961) ~[Chunk.class:?] at net.minecraft.world.chunk.Chunk.addTileEntity(Chunk.java:945) ~[Chunk.class:?] at net.minecraft.world.chunk.storage.AnvilChunkLoader.loadEntities(AnvilChunkLoader.java:529) ~[AnvilChunkLoader.class:?] at net.minecraftforge.common.chunkio.ChunkIOProvider.callStage2(ChunkIOProvider.java:41) ~[ChunkIOProvider.class:?] at net.minecraftforge.common.chunkio.ChunkIOProvider.callStage2(ChunkIOProvider.java:12) ~[ChunkIOProvider.class:?] at net.minecraftforge.common.util.AsynchronousExecutor$Task.finish(AsynchronousExecutor.java:189) ~[AsynchronousExecutor$Task.class:?] at net.minecraftforge.common.util.AsynchronousExecutor.finishActive(AsynchronousExecutor.java:354) ~[AsynchronousExecutor.class:?] at net.minecraftforge.common.chunkio.ChunkIOExecutor.tick(ChunkIOExecutor.java:30) ~[ChunkIOExecutor.class:?] at net.minecraft.server.MinecraftServer.updateTimeLightAndEntities(MinecraftServer.java:663) ~[MinecraftServer.class:?] at net.minecraft.server.MinecraftServer.tick(MinecraftServer.java:614) ~[MinecraftServer.class:?] at net.minecraft.server.integrated.IntegratedServer.tick(IntegratedServer.java:118) ~[IntegratedServer.class:?] at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:485) [MinecraftServer.class:?] at net.minecraft.server.MinecraftServer$2.run(MinecraftServer.java:752) [MinecraftServer$2.class:?] [10:00:58] [Server thread/ERROR]: This crash report has been saved to: C:\Users\antoine\Desktop\forge-1.7.10-10.13.4.1614-1.7.10-src\eclipse\.\crash-reports\crash-2016-08-23_10.00.58-server.txt [10:00:58] [Server thread/INFO]: Stopping server [10:00:58] [Server thread/INFO]: Saving players [10:00:58] [Server thread/INFO]: Saving worlds [10:00:59] [Server thread/INFO]: Saving chunks for level 'New World'/Overworld [10:01:00] [Server thread/INFO]: Saving chunks for level 'New World'/Nether [10:01:00] [Server thread/INFO]: Saving chunks for level 'New World'/The End [10:01:00] [Server thread/INFO]: Saving chunks for level 'New World'/BinaryDimension [10:01:05] [Server thread/INFO] [FML]: Unloading dimension 0 [10:01:05] [Server thread/INFO] [FML]: Unloading dimension -1 [10:01:05] [Server thread/INFO] [FML]: Unloading dimension 1 [10:01:05] [Server thread/INFO] [FML]: Unloading dimension 49 [10:01:05] [Server thread/INFO] [FML]: Applying holder lookups [10:01:05] [Server thread/INFO] [FML]: Holder lookups applied [10:01:05] [Server thread/INFO] [FML]: The state engine was in incorrect state SERVER_STOPPING and forced into state SERVER_STOPPED. Errors may have been discarded. [10:01:10] [Client thread/INFO] [STDOUT]: [net.minecraft.client.Minecraft:displayCrashReport:388]: –-- Minecraft Crash Report ---- // You're mean. Time: 23/08/16 10:01 Description: Exception in server tick loop java.lang.ArrayIndexOutOfBoundsException: -73 at net.minecraft.world.chunk.NibbleArray.get(NibbleArray.java:38) at net.minecraft.world.chunk.storage.ExtendedBlockStorage.getExtBlockMetadata(ExtendedBlockStorage.java:115) at net.minecraft.world.chunk.Chunk.getBlockMetadata(Chunk.java:606) at net.minecraft.world.chunk.Chunk.func_150812_a(Chunk.java:961) at net.minecraft.world.chunk.Chunk.addTileEntity(Chunk.java:945) at net.minecraft.world.chunk.storage.AnvilChunkLoader.loadEntities(AnvilChunkLoader.java:529) at net.minecraftforge.common.chunkio.ChunkIOProvider.callStage2(ChunkIOProvider.java:41) at net.minecraftforge.common.chunkio.ChunkIOProvider.callStage2(ChunkIOProvider.java:12) at net.minecraftforge.common.util.AsynchronousExecutor$Task.finish(AsynchronousExecutor.java:189) at net.minecraftforge.common.util.AsynchronousExecutor.finishActive(AsynchronousExecutor.java:354) at net.minecraftforge.common.chunkio.ChunkIOExecutor.tick(ChunkIOExecutor.java:30) at net.minecraft.server.MinecraftServer.updateTimeLightAndEntities(MinecraftServer.java:663) at net.minecraft.server.MinecraftServer.tick(MinecraftServer.java:614) at net.minecraft.server.integrated.IntegratedServer.tick(IntegratedServer.java:118) at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:485) at net.minecraft.server.MinecraftServer$2.run(MinecraftServer.java:752)
De remps en temps quand j’entre ou sors du donjon
net.minecraft.util.ReportedException: Ticking memory connection at net.minecraft.network.NetworkSystem.networkTick(NetworkSystem.java:198) ~[NetworkSystem.class:?] at net.minecraft.server.MinecraftServer.updateTimeLightAndEntities(MinecraftServer.java:726) ~[MinecraftServer.class:?] at net.minecraft.server.MinecraftServer.tick(MinecraftServer.java:614) ~[MinecraftServer.class:?] at net.minecraft.server.integrated.IntegratedServer.tick(IntegratedServer.java:118) ~[IntegratedServer.class:?] at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:485) [MinecraftServer.class:?] at net.minecraft.server.MinecraftServer$2.run(MinecraftServer.java:752) [MinecraftServer$2.class:?] Caused by: java.lang.ArrayIndexOutOfBoundsException: -6 at net.minecraft.world.chunk.NibbleArray.get(NibbleArray.java:38) ~[NibbleArray.class:?] at net.minecraft.world.chunk.storage.ExtendedBlockStorage.getExtBlockMetadata(ExtendedBlockStorage.java:115) ~[ExtendedBlockStorage.class:?] at net.minecraft.world.chunk.Chunk.getBlockMetadata(Chunk.java:606) ~[Chunk.class:?] at net.minecraft.world.chunk.Chunk.func_150812_a(Chunk.java:961) ~[Chunk.class:?] at net.minecraft.world.chunk.Chunk.addTileEntity(Chunk.java:945) ~[Chunk.class:?] at net.minecraft.world.chunk.storage.AnvilChunkLoader.loadEntities(AnvilChunkLoader.java:529) ~[AnvilChunkLoader.class:?] at net.minecraftforge.common.chunkio.ChunkIOProvider.callStage2(ChunkIOProvider.java:41) ~[ChunkIOProvider.class:?] at net.minecraftforge.common.chunkio.ChunkIOProvider.callStage2(ChunkIOProvider.java:12) ~[ChunkIOProvider.class:?] at net.minecraftforge.common.util.AsynchronousExecutor.skipQueue(AsynchronousExecutor.java:344) ~[AsynchronousExecutor.class:?] at net.minecraftforge.common.util.AsynchronousExecutor.getSkipQueue(AsynchronousExecutor.java:302) ~[AsynchronousExecutor.class:?] at net.minecraftforge.common.chunkio.ChunkIOExecutor.syncChunkLoad(ChunkIOExecutor.java:12) ~[ChunkIOExecutor.class:?] at net.minecraft.world.gen.ChunkProviderServer.loadChunk(ChunkProviderServer.java:144) ~[ChunkProviderServer.class:?] at net.minecraft.world.gen.ChunkProviderServer.loadChunk(ChunkProviderServer.java:119) ~[ChunkProviderServer.class:?] at net.minecraft.world.gen.ChunkProviderServer.provideChunk(ChunkProviderServer.java:221) ~[ChunkProviderServer.class:?] at net.minecraft.world.World.getChunkFromChunkCoords(World.java:482) ~[World.class:?] at net.minecraft.world.World.getTileEntity(World.java:2804) ~[World.class:?] at com.mod.test.blocks.BlockDungeonTeleporter.onBlockActivated(BlockDungeonTeleporter.java:53) ~[BlockDungeonTeleporter.class:?] at net.minecraft.server.management.ItemInWorldManager.activateBlockOrUseItem(ItemInWorldManager.java:409) ~[ItemInWorldManager.class:?] at net.minecraft.network.NetHandlerPlayServer.processPlayerBlockPlacement(NetHandlerPlayServer.java:593) ~[NetHandlerPlayServer.class:?] at net.minecraft.network.play.client.C08PacketPlayerBlockPlacement.processPacket(C08PacketPlayerBlockPlacement.java:74) ~[C08PacketPlayerBlockPlacement.class:?] at net.minecraft.network.play.client.C08PacketPlayerBlockPlacement.processPacket(C08PacketPlayerBlockPlacement.java:122) ~[C08PacketPlayerBlockPlacement.class:?] at net.minecraft.network.NetworkManager.processReceivedPackets(NetworkManager.java:241) ~[NetworkManager.class:?] at net.minecraft.network.NetworkSystem.networkTick(NetworkSystem.java:182) ~[NetworkSystem.class:?] … 5 more [10:09:40] [Server thread/ERROR]: This crash report has been saved to: C:\Users\antoine\Desktop\forge-1.7.10-10.13.4.1614-1.7.10-src\eclipse\.\crash-reports\crash-2016-08-23_10.09.40-server.txt [10:09:40] [Server thread/INFO]: Stopping server [10:09:40] [Server thread/INFO]: Saving players [10:09:41] [Server thread/INFO]: Saving worlds [10:09:41] [Server thread/INFO]: Saving chunks for level 'New World'/Overworld [10:09:41] [Server thread/INFO]: Saving chunks for level 'New World'/Nether [10:09:41] [Server thread/INFO]: Saving chunks for level 'New World'/The End [10:09:41] [Server thread/INFO]: Saving chunks for level 'New World'/BinaryDimension [10:09:42] [Client thread/INFO] [STDOUT]: [net.minecraft.client.Minecraft:displayCrashReport:388]: –-- Minecraft Crash Report ---- // Quite honestly, I wouldn't worry myself about that. Time: 23/08/16 10:09 Description: Ticking memory connection java.lang.ArrayIndexOutOfBoundsException: -6 at net.minecraft.world.chunk.NibbleArray.get(NibbleArray.java:38) at net.minecraft.world.chunk.storage.ExtendedBlockStorage.getExtBlockMetadata(ExtendedBlockStorage.java:115) at net.minecraft.world.chunk.Chunk.getBlockMetadata(Chunk.java:606) at net.minecraft.world.chunk.Chunk.func_150812_a(Chunk.java:961) at net.minecraft.world.chunk.Chunk.addTileEntity(Chunk.java:945) at net.minecraft.world.chunk.storage.AnvilChunkLoader.loadEntities(AnvilChunkLoader.java:529) at net.minecraftforge.common.chunkio.ChunkIOProvider.callStage2(ChunkIOProvider.java:41) at net.minecraftforge.common.chunkio.ChunkIOProvider.callStage2(ChunkIOProvider.java:12) at net.minecraftforge.common.util.AsynchronousExecutor.skipQueue(AsynchronousExecutor.java:344) at net.minecraftforge.common.util.AsynchronousExecutor.getSkipQueue(AsynchronousExecutor.java:302) at net.minecraftforge.common.chunkio.ChunkIOExecutor.syncChunkLoad(ChunkIOExecutor.java:12) at net.minecraft.world.gen.ChunkProviderServer.loadChunk(ChunkProviderServer.java:144) at net.minecraft.world.gen.ChunkProviderServer.loadChunk(ChunkProviderServer.java:119) at net.minecraft.world.gen.ChunkProviderServer.provideChunk(ChunkProviderServer.java:221) at net.minecraft.world.World.getChunkFromChunkCoords(World.java:482) at net.minecraft.world.World.getTileEntity(World.java:2804) at com.mod.test.blocks.BlockDungeonTeleporter.onBlockActivated(BlockDungeonTeleporter.java:53) at net.minecraft.server.management.ItemInWorldManager.activateBlockOrUseItem(ItemInWorldManager.java:409) at net.minecraft.network.NetHandlerPlayServer.processPlayerBlockPlacement(NetHandlerPlayServer.java:593) at net.minecraft.network.play.client.C08PacketPlayerBlockPlacement.processPacket(C08PacketPlayerBlockPlacement.java:74) at net.minecraft.network.play.client.C08PacketPlayerBlockPlacement.processPacket(C08PacketPlayerBlockPlacement.java:122) at net.minecraft.network.NetworkManager.processReceivedPackets(NetworkManager.java:241) at net.minecraft.network.NetworkSystem.networkTick(NetworkSystem.java:182) at net.minecraft.server.MinecraftServer.updateTimeLightAndEntities(MinecraftServer.java:726) at net.minecraft.server.MinecraftServer.tick(MinecraftServer.java:614) at net.minecraft.server.integrated.IntegratedServer.tick(IntegratedServer.java:118) at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:485) at net.minecraft.server.MinecraftServer$2.run(MinecraftServer.java:752)
J’ai aussi des ArrayOutOfBoundsExeption: 3565
-
J’ai l’impression quelque chose corrompt les données d’une tile entity et du coup ça crash au chargement de celle-ci, après je ne vois pas d’où ça peut venir…
Ou sinon ça pourrait être la position que tu demandes pour get la tile entity (ici : BlockDungeonTeleporter.onBlockActivated(BlockDungeonTeleporter.java:53)) qui n’est pas bonne, et du coup, IndexOutOfBounds quand mc récupère le block dans l’index des blocks du chunk, mais les positions que tu mets à cet endroit m’ont l’air bonnes…
Ce crash est bizarre. -
@‘AymericRed’:
J’ai l’impression quelque chose corrompt les données d’une tile entity et du coup ça crash au chargement de celle-ci, après je ne vois pas d’où ça peut venir…
Ou sinon ça pourrait être la position que tu demandes pour get la tile entity (ici : BlockDungeonTeleporter.onBlockActivated(BlockDungeonTeleporter.java:53)) qui n’est pas bonne, et du coup, IndexOutOfBounds quand mc récupère le block dans l’index des blocks du chunk, mais les positions que tu mets à cet endroit m’ont l’air bonnes…
Ce crash est bizarre.Oui je me dit aussi que c’est bizarre et c ennuyant car je peut pas avancer sur le reste de mon mod
-
Up j’ai besoin de vous
-
Bonjour, j’ai +/- cibler le problème mais j’aurais besoin de savoir comment charger un chunk d’un block en particulier j’ai vraiment besoin
-
World.getChunkFromCoords(x, z) va te donner un objet Chunk.
-
@‘AymericRed’:
World.getChunkFromCoords(x, z) va te donner un objet Chunk.
Ok et comment le chager pour faire un getbloc dedans?
-
Si tu veux juste get un bloc, il faut que tu fasses world.getBlock(…), le chunk sera automatiquement chargé, sinon pour get un block dans un chunk, c’est chunk.getBlock(x << 16, y <<16, z << 16) je crois, mais je suis pas sur pour les “<<16”, regarde dans la fonction “getBlock” de World.
-
@‘AymericRed’:
Si tu veux juste get un bloc, il faut que tu fasses world.getBlock(…), le chunk sera automatiquement chargé, sinon pour get un block dans un chunk, c’est chunk.getBlock(x << 16, y <<16, z << 16) je crois, mais je suis pas sur pour les “<<16”, regarde dans la fonction “getBlock” de World.
Merci mais uand je faisiat le get block, vu que le chunk n’était pas généré ça crashait, donc j’ai fait ça:
Chunk chunk = this.worldServerInstance.getChunkFromBlockCoords(l3, l1); this.worldServerInstance.getChunkProvider().loadChunk(chunk.xPosition, chunk.zPosition);