Problème avec le Teleporter de ma dimension
-
Voilà la classe du block portal : http://pastebin.com/P3ZrHLMP
-
public void onEntityCollidedWithBlock(World worldIn, BlockPos pos, IBlockState state, Entity entityIn) { if (!entityIn.isRiding() && !entityIn.isBeingRidden() && entityIn.isNonBoss() && ((entityIn instanceof EntityPlayerMP))) { entityIn.setPortal(pos); // rajoute cette ligne et normalement ce sera bon EntityPlayerMP thePlayer = (EntityPlayerMP) entityIn; if (thePlayer.timeUntilPortal > 0) { thePlayer.timeUntilPortal = 20; } else if (thePlayer.dimension != Configs.dimensionID) { thePlayer.timeUntilPortal = 20; thePlayer.mcServer.getPlayerList().transferPlayerToDimension(thePlayer, Configs.dimensionID, new RDTeleporter(thePlayer.mcServer.worldServerForDimension(Configs.dimensionID))); } else { thePlayer.timeUntilPortal = 20; thePlayer.mcServer.getPlayerList().transferPlayerToDimension(thePlayer, 0, new RDTeleporter(thePlayer.mcServer.worldServerForDimension(0))); } } }Au fait, tu n’es pas obligé de recopier la classe Size car celle de BlockPortal est statique et publique donc tu peux y accéder.
-
Oui je sais. Mais je pensais qu’utiliser celui de la classe BlockPortal causerait des soucis de cast. Donc dans le doute, je l’ai aussi recopié.
-
Du coup la fonction rajoutée dans le code change quelque chose ?
-
Non justement

-
Renvoi le rapport de crash et la classe du Teleporter et du Block
-
Je viens de me rendre compte surtout que la classe Size semble aussi gérer le block qui va avec le portail, genre dans le Size de BlockPortal y’a la mention du Blocks.obsidian. du coup j’ai keep le custom Size.
Je t’envoie tout ça :
http://pastebin.com/WnZK4SmW - BlockRumblePortal
http://pastebin.com/z4k1vqh0 - RDTeleporter -
Tu n’as pas rajouté cette ligne “entityIn.setPortal(pos);” et il manque le rapport de crash
-
Je n’utilise pas le setPortal(pos) car il utilise le portail vers le nether.
public void setPortal(BlockPos pos) { if (this.timeUntilPortal > 0) { this.timeUntilPortal = this.getPortalCooldown(); } else { if (!this.worldObj.isRemote && !pos.equals(this.lastPortalPos)) { this.lastPortalPos = new BlockPos(pos); BlockPattern.PatternHelper blockpattern$patternhelper = Blocks.portal.func_181089_f(this.worldObj, this.lastPortalPos); double d0 = blockpattern$patternhelper.getFinger().getAxis() == EnumFacing.Axis.X ? (double)blockpattern$patternhelper.getPos().getZ() : (double)blockpattern$patternhelper.getPos().getX(); double d1 = blockpattern$patternhelper.getFinger().getAxis() == EnumFacing.Axis.X ? this.posZ : this.posX; d1 = Math.abs(MathHelper.func_181160_c(d1 - (double)(blockpattern$patternhelper.getFinger().rotateY().getAxisDirection() == EnumFacing.AxisDirection.NEGATIVE ? 1 : 0), d0, d0 - (double)blockpattern$patternhelper.func_181118_d())); double d2 = MathHelper.func_181160_c(this.posY - 1.0D, (double)blockpattern$patternhelper.getPos().getY(), (double)(blockpattern$patternhelper.getPos().getY() - blockpattern$patternhelper.func_181119_e())); this.lastPortalVec = new Vec3d(d1, d2, 0.0D); this.teleportDirection = blockpattern$patternhelper.getFinger(); } this.inPortal = true; } }Et le rapport de crash ne diffère en rien de ceux que j’ai envoyé.
-
Oui mais le problème c’est que dans ton Teleporter tu demandes justement cette variable donc soit tu lui donnes une valeur (ce que je conseille) soit t’utilises une valeur que tu enregistres autrement