Portal custom : direction du block de la structure
-
Voilà pour toi, “EAST” est remplaçable par n’importe quel direction :
Blocks.pumpkin.getDefaultState().withProperty(BlockPumpkin.FACING, EnumFacing.EAST);Édit désolé j’ai crue que c’était un post en 1.8 en espérant que ça t’aidera tout de même.
-
Regarde le metadata de la citrouille, il est différent en fonction de la direction.
-
Tu fait juste une condition dans l’activateur pour voir si la metadata de la citrouille est la bonne.
-
Salut
Dans les conditions, j’ai tester d’ajouter :.getBlockById(1)et
.getHarvestLevel(1)après le
Blocks.pumpkinIl n’y a aucune erreur dans Éclipse, mais quand je teste, peut importe le sens de la citrouille, le portal s’allume.
J’ai également tester
boolean direction = ForgeDirection.EAST != null;et, dans la condition,
&& directionmais pareil
-
Si tu es en 1.7, regarde les metadatas, si tu es en 1.8, il faut regarder les blockStates
-
Tu peux nous faire voir ton code ?
-
world.getBlockMetadata(x, y, z) == 0
ou 1, ou 2, ou 3 en fonction de la direction voulu. -
Salut
Merci pour la fonction, je l’ai tester mais sans succès : on peut toujours allumer le portal quelque soit la direction des citrouilles
Voilà la class :package This_is_Halloween.Block; import java.util.Random; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import This_is_Halloween.CreateBlocks; import This_is_Halloween.This_is_Halloween; import This_is_Halloween.NOM.TeleporterNOM; import net.minecraft.block.Block; import net.minecraft.block.BlockPortal; import net.minecraft.block.material.Material; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.init.Blocks; import net.minecraft.item.ItemStack; import net.minecraft.server.MinecraftServer; import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.MovingObjectPosition; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; public class BlockPortalNOM extends BlockPortal{ public BlockPortalNOM(Material material) { super(); } @Override public void setBlockBoundsBasedOnState(IBlockAccess blockaccess, int x, int y, int z) { float f; float f1; if(!blockaccess.getBlock(x - 1, y, z).equals(this) && !blockaccess.getBlock(x + 1, y, z).equals(this)) { f = 0.125F; f1 = 0.5F; this.setBlockBounds(0.5F - f, 0.0F, 0.5F - f1, 0.5F + f, 1.0F, 0.5F + f1); } else { f = 0.5F; f1 = 0.125F; this.setBlockBounds(0.5F - f, 0.0F, 0.5F - f1, 0.5F + f, 1.0F, 0.5F + f1); } } @Override public AxisAlignedBB getCollisionBoundingBoxFromPool(World world, int x, int y, int z) { return null; } @Override public void setBlockBoundsForItemRender() { float f1 = 0.125F; this.setBlockBounds(0, 0.0F, 0.5F - f1, 1F, 1.0F, 0.5F + f1); } @Override public boolean func_150000_e(World par1World, int par2, int par3, int par4) { byte b0 = 0; byte b1 = 0; if (par1World.getBlock(par2 - 1, par3, par4) == Blocks.pumpkin || par1World.getBlock(par2 + 1, par3, par4) == Blocks.pumpkin) if (par1World.getBlockMetadata(par2 - 1, par3, par4) == 1 || par1World.getBlockMetadata(par2 + 1, par3, par4) == 1) { b0 = 1; } if (par1World.getBlock(par2, par3, par4 - 1) == Blocks.pumpkin || par1World.getBlock(par2, par3, par4 + 1) == Blocks.pumpkin) if (par1World.getBlockMetadata(par2, par3, par4 - 1) == 1 || par1World.getBlockMetadata(par2, par3, par4 + 1) == 1) { b1 = 1; } if (b0 == b1) { return false; } else { if (par1World.isAirBlock(par2 - b0, par3, par4 - b1)) { par2 -= b0; par4 -= b1; } int l; int i1; for (l = -1; l <= 2; ++l) { for (i1 = -1; i1 <= 3; ++i1) { boolean flag = l == -1 || l == 2 || i1 == -1 || i1 == 3; if (l != -1 && l != 2 || i1 != -1 && i1 != 3) { Block j1 = par1World.getBlock(par2 + b0 * l, par3 + i1, par4 + b1 * l); boolean isAirBlock = par1World.isAirBlock(par2 + b0 * l, par3 + i1, par4 + b1 * l); if (flag) { if (j1 != Blocks.pumpkin) { return false; } } else if (!isAirBlock && j1 != Blocks.lava) { return true; } } } } for (l = 0; l < 2; ++l) { for (i1 = 0; i1 < 3; ++i1) { par1World.setBlock(par2 + b0 * l, par3 + i1, par4 + b1 * l, CreateBlocks.PortalNOMBlock, 0, 2); } } return true; } } @Override public void onNeighborBlockChange(World par1World, int par2, int par3, int par4, Block par5) { byte b0 = 0; byte b1 = 1; if (par1World.getBlock(par2 - 1, par3, par4) == this || par1World.getBlock(par2 + 1, par3, par4) == this) { b0 = 1; b1 = 0; } int i1; for (i1 = par3; par1World.getBlock(par2, i1 - 1, par4) == this; –i1) { ; } if (par1World.getBlock(par2, i1 - 1, par4) != Blocks.pumpkin) { par1World.setBlockToAir(par2, par3, par4); } else { int j1; for (j1 = 1; j1 < 4 && par1World.getBlock(par2, i1 + j1, par4) == this; ++j1) { ; } if (j1 == 3 && par1World.getBlock(par2, i1 + j1, par4) == Blocks.pumpkin) if (j1 == 3 && par1World.getBlockMetadata(par2, i1 + j1, par4) == 1) { boolean flag = par1World.getBlock(par2 - 1, par3, par4) == this || par1World.getBlock(par2 + 1, par3, par4) == this; boolean flag1 = par1World.getBlock(par2, par3, par4 - 1) == this || par1World.getBlock(par2, par3, par4 + 1) == this; if (flag && flag1) { par1World.setBlockToAir(par2, par3, par4); } else { if ((par1World.getBlock(par2 + b0, par3, par4 + b1) != Blocks.pumpkin || par1World.getBlock(par2 - b0, par3, par4 - b1) != this) && (par1World.getBlock(par2 - b0, par3, par4 - b1) != Blocks.pumpkin || par1World.getBlock(par2 + b0, par3, par4 + b1) != this)) { par1World.setBlockToAir(par2, par3, par4); } } } else { par1World.setBlockToAir(par2, par3, par4); } } } @Override public boolean isOpaqueCube() { return false; } @Override public boolean renderAsNormalBlock() { return false; } @Override public int quantityDropped(Random random) { return 0; } @Override public void onEntityCollidedWithBlock(World world, int x, int y, int z, Entity entity) { if((entity.ridingEntity == null) && (entity.riddenByEntity == null)) { if(entity.dimension != This_is_Halloween.dimensionID) { if(entity instanceof EntityPlayerMP) { EntityPlayerMP player = (EntityPlayerMP)entity; if(player.timeUntilPortal > 0) { player.timeUntilPortal = 10; } else { player.timeUntilPortal = 10; player.mcServer.getConfigurationManager().transferPlayerToDimension(player, This_is_Halloween.dimensionID, new TeleporterNOM(player.mcServer.worldServerForDimension(This_is_Halloween.dimensionID))); } } } else { if(entity instanceof EntityPlayerMP) { EntityPlayerMP player = (EntityPlayerMP)entity; if(player.timeUntilPortal > 0) { player.timeUntilPortal = 10; } else { player.timeUntilPortal = 10; player.mcServer.getConfigurationManager().transferPlayerToDimension(player, 0, new TeleporterNOM(player.mcServer.worldServerForDimension(0))); } } } } } @SideOnly(Side.CLIENT) @Override public int getRenderBlockPass() { return 1; } @SideOnly(Side.CLIENT) @Override public ItemStack getPickBlock(MovingObjectPosition target, World world, int x, int y, int z) { return null; } @Override public void breakBlock(World world, int x, int y, int z, Block block, int metadata) { super.breakBlock(world, x, y, z, block, metadata); if(world.getBlock(x, y + 1, z).equals(this)) { world.setBlockToAir(x, y + 1, z); } if(world.getBlock(x, y - 1, z).equals(this)) { world.setBlockToAir(x, y - 1, z); } if(world.getBlock(x + 1, y, z).equals(this)) { world.setBlockToAir(x + 1, y, z); } if(world.getBlock(x - 1, y, z).equals(this)) { world.setBlockToAir(x - 1, y, z); } if(world.getBlock(x, y, z + 1).equals(this)) { world.setBlockToAir(x, y, z + 1); } if(world.getBlock(x, y, z - 1).equals(this)) { world.setBlockToAir(x, y, z - 1); } } }La fonction est aux lignes 71, 77 et 167.
-
tu utilises un activateur, donc fait ça dans l’activateur ^^
-
ça marche beaucoup mieux
Le portal s’allume comme je veux, merci beaucoup
