Jump to content

[1.8][SOLVED] Has Anyone fixed their portals for their custom dimensions?


Recommended Posts

Posted

Sorry and here

 

package common.zeroquest.block.portal;

import java.util.Random;

import net.minecraft.block.Block;
import net.minecraft.block.BlockPortal;
import net.minecraft.block.material.Material;
import net.minecraft.block.state.IBlockState;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityList;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.init.Blocks;
import net.minecraft.server.MinecraftServer;
import net.minecraft.util.BlockPos;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.EnumParticleTypes;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import net.minecraft.world.WorldServer;

import common.zeroquest.ModBlocks;
import common.zeroquest.ZeroQuest;

public class BlockPortalNillax extends BlockPortal {

public BlockPortalNillax() {
	super();
	this.setStepSound(soundTypeGlass);
}

@Override
public int getLightValue(IBlockAccess world, BlockPos pos) {
	return 14;
}

@Override
public void onEntityCollidedWithBlock(World worldIn, BlockPos pos, IBlockState state, Entity entityIn) {
	if (entityIn.ridingEntity == null && entityIn.riddenByEntity == null && entityIn.timeUntilPortal <= 0) {
		int id = ZeroQuest.NillaxID;
		if (entityIn.dimension == id) {
			id = 0;
		}

		if (entityIn instanceof EntityPlayerMP) {

			EntityPlayerMP player = (EntityPlayerMP) entityIn;
			MinecraftServer mcServer = player.mcServer;

			if (player.timeUntilPortal > 0) {
				player.timeUntilPortal = 10;
			}
			else if (player.dimension != ZeroQuest.NillaxID) {
				player.timeUntilPortal = 10;
				player.mcServer.getConfigurationManager().transferPlayerToDimension(player, ZeroQuest.NillaxID, new TeleporterNillax(mcServer.worldServerForDimension(ZeroQuest.NillaxID)));
			}
			else {
				player.timeUntilPortal = 10;
				player.mcServer.getConfigurationManager().transferPlayerToDimension(player, 0, new TeleporterNillax(mcServer.worldServerForDimension(0)));
			}
		}
		else {
			travelToDimension(entityIn, id);
		}
	}
}

private void travelToDimension(Entity entity, int id) {
	if (!entity.worldObj.isRemote && !entity.isDead) {
		entity.worldObj.theProfiler.startSection("changeDimension");
		MinecraftServer minecraftserver = MinecraftServer.getServer();
		int j = entity.dimension;
		WorldServer worldserver = minecraftserver.worldServerForDimension(j);
		WorldServer worldserver1 = minecraftserver.worldServerForDimension(id);
		entity.dimension = id;

		if (j == 1 && id == 1) {
			worldserver1 = minecraftserver.worldServerForDimension(0);
			entity.dimension = 0;
		}

		entity.worldObj.removeEntity(entity);
		entity.isDead = false;
		entity.worldObj.theProfiler.startSection("reposition");
		minecraftserver.getConfigurationManager().transferEntityToWorld(entity, j, worldserver, worldserver1, new TeleporterNillax(worldserver1));
		entity.worldObj.theProfiler.endStartSection("reloading");
		Entity entity1 = EntityList.createEntityByName(EntityList.getEntityString(entity), worldserver1);

		if (entity1 != null) {
			entity1.copyDataFromOld(entity);

			if (j == 1 && id == 1) {
				BlockPos spawnPoint = worldserver1.getSpawnPoint();
				spawnPoint = entity.worldObj.getTopSolidOrLiquidBlock(spawnPoint);
				entity1.setLocationAndAngles(spawnPoint.getX(), spawnPoint.getY(), spawnPoint.getZ(), entity1.rotationYaw, entity1.rotationPitch);
			}

			worldserver1.spawnEntityInWorld(entity1);
		}

		entity.isDead = true;
		entity.worldObj.theProfiler.endSection();
		worldserver.resetUpdateEntityTick();
		worldserver1.resetUpdateEntityTick();
		entity.worldObj.theProfiler.endSection();
	}
}

@Override
public boolean func_176548_d(World worldIn, BlockPos p_176548_2_) {
	BlockPortalNillax.Size size = new BlockPortalNillax.Size(worldIn, p_176548_2_, EnumFacing.Axis.X);

	if (size.func_150860_b() && size.field_150864_e == 0) {
		size.func_150859_c();
		return true;
	}
	else {
		BlockPortalNillax.Size size1 = new BlockPortalNillax.Size(worldIn, p_176548_2_, EnumFacing.Axis.Z);

		if (size1.func_150860_b() && size1.field_150864_e == 0) {
			size1.func_150859_c();
			return true;
		}
		else {
			return false;
		}
	}
}

@Override
public void randomDisplayTick(World worldIn, BlockPos pos, IBlockState state, Random rand) {

	int par2 = pos.getX();
	int par3 = pos.getY();
	int par4 = pos.getZ();

	if (rand.nextInt(100) == 0) {
		worldIn.playSound(pos.getX() + 0.5D, pos.getY() + 0.5D, pos.getZ() + 0.5D, "portal.portal", 0.5F, rand.nextFloat() * 0.4F + 0.8F, false);
	}

	for (int i = 0; i < 4; ++i) {
		double d0 = pos.getX() + rand.nextFloat();
		double d1 = pos.getY() + rand.nextFloat();
		double d2 = pos.getZ() + rand.nextFloat();
		double d3 = (rand.nextFloat() - 0.5D) * 0.5D;
		double d4 = (rand.nextFloat() - 0.5D) * 0.5D;
		double d5 = (rand.nextFloat() - 0.5D) * 0.5D;
		int j = rand.nextInt(2) * 2 - 1;

		if (worldIn.getBlockState(pos.west()).getBlock() != this && worldIn.getBlockState(pos.east()).getBlock() != this) {
			d0 = pos.getX() + 0.5D + 0.25D * j;
			d3 = rand.nextFloat() * 2.0F * j;
		}
		else {
			d2 = pos.getZ() + 0.5D + 0.25D * j;
			d5 = rand.nextFloat() * 2.0F * j;
		}

		worldIn.spawnParticle(EnumParticleTypes.PORTAL, d0, d1, d2, d3, d4, d5, new int[0]);
	}
}

@Override
public void onNeighborBlockChange(World worldIn, BlockPos pos, IBlockState state, Block neighborBlock) {
	EnumFacing.Axis axis = (EnumFacing.Axis) state.getValue(AXIS);
	BlockPortalNillax.Size size;

	if (axis == EnumFacing.Axis.X) {
		size = new BlockPortalNillax.Size(worldIn, pos, EnumFacing.Axis.X);

		if (!size.func_150860_b() || size.field_150864_e < size.field_150868_h * size.field_150862_g) {
			worldIn.setBlockState(pos, Blocks.air.getDefaultState());
		}
	}
	else if (axis == EnumFacing.Axis.Z) {
		size = new BlockPortalNillax.Size(worldIn, pos, EnumFacing.Axis.Z);

		if (!size.func_150860_b() || size.field_150864_e < size.field_150868_h * size.field_150862_g) {
			worldIn.setBlockState(pos, Blocks.air.getDefaultState());
		}
	}
}

public static class Size {
	private final World world;
	private final EnumFacing.Axis axis;
	private final EnumFacing field_150866_c;
	private final EnumFacing field_150863_d;
	private int field_150864_e = 0;
	private BlockPos field_150861_f;
	private int field_150862_g;
	private int field_150868_h;
	private static final String __OBFID = "CL_00000285";

	public Size(World worldIn, BlockPos p_i45694_2_, EnumFacing.Axis p_i45694_3_) {
		this.world = worldIn;
		this.axis = p_i45694_3_;

		if (p_i45694_3_ == EnumFacing.Axis.X) {
			this.field_150863_d = EnumFacing.EAST;
			this.field_150866_c = EnumFacing.WEST;
		}
		else {
			this.field_150863_d = EnumFacing.NORTH;
			this.field_150866_c = EnumFacing.SOUTH;
		}

		for (BlockPos blockpos1 = p_i45694_2_; p_i45694_2_.getY() > blockpos1.getY() - 21 && p_i45694_2_.getY() > 0 && this.func_150857_a(worldIn.getBlockState(p_i45694_2_.down()).getBlock()); p_i45694_2_ = p_i45694_2_.down()) {
			;
		}

		int i = this.func_180120_a(p_i45694_2_, this.field_150863_d) - 1;

		if (i >= 0) {
			this.field_150861_f = p_i45694_2_.offset(this.field_150863_d, i);
			this.field_150868_h = this.func_180120_a(this.field_150861_f, this.field_150866_c);

			if (this.field_150868_h < 2 || this.field_150868_h > 21) {
				this.field_150861_f = null;
				this.field_150868_h = 0;
			}
		}

		if (this.field_150861_f != null) {
			this.field_150862_g = this.func_150858_a();
		}
	}

	protected int func_180120_a(BlockPos p_180120_1_, EnumFacing p_180120_2_) {
		int i;

		for (i = 0; i < 22; ++i) {
			BlockPos blockpos1 = p_180120_1_.offset(p_180120_2_, i);

			if (!this.func_150857_a(this.world.getBlockState(blockpos1).getBlock()) || this.world.getBlockState(blockpos1.down()).getBlock() != ModBlocks.nillaxStone) {
				break;
			}
		}

		Block block = this.world.getBlockState(p_180120_1_.offset(p_180120_2_, i)).getBlock();
		return block == ModBlocks.nillaxStone ? i : 0;
	}

	protected int func_150858_a() {
		int i;
		label56:

		for (this.field_150862_g = 0; this.field_150862_g < 21; ++this.field_150862_g) {
			for (i = 0; i < this.field_150868_h; ++i) {
				BlockPos blockpos = this.field_150861_f.offset(this.field_150866_c, i).up(this.field_150862_g);
				Block block = this.world.getBlockState(blockpos).getBlock();

				if (!this.func_150857_a(block)) {
					break label56;
				}

				if (block == ModBlocks.portalNillax) {
					++this.field_150864_e;
				}

				if (i == 0) {
					block = this.world.getBlockState(blockpos.offset(this.field_150863_d)).getBlock();

					if (block != ModBlocks.nillaxStone) {
						break label56;
					}
				}
				else if (i == this.field_150868_h - 1) {
					block = this.world.getBlockState(blockpos.offset(this.field_150866_c)).getBlock();

					if (block != ModBlocks.nillaxStone) {
						break label56;
					}
				}
			}
		}

		for (i = 0; i < this.field_150868_h; ++i) {
			if (this.world.getBlockState(this.field_150861_f.offset(this.field_150866_c, i).up(this.field_150862_g)).getBlock() != ModBlocks.nillaxStone) {
				this.field_150862_g = 0;
				break;
			}
		}

		if (this.field_150862_g <= 21 && this.field_150862_g >= 3) {
			return this.field_150862_g;
		}
		else {
			this.field_150861_f = null;
			this.field_150868_h = 0;
			this.field_150862_g = 0;
			return 0;
		}
	}

	protected boolean func_150857_a(Block p_150857_1_) {
		return p_150857_1_.getMaterial() == Material.air || p_150857_1_ == ModBlocks.nileFire || p_150857_1_ == ModBlocks.portalNillax;
	}

	public boolean func_150860_b() {
		return this.field_150861_f != null && this.field_150868_h >= 2 && this.field_150868_h <= 21 && this.field_150862_g >= 3 && this.field_150862_g <= 21;
	}

	public void func_150859_c() {
		for (int i = 0; i < this.field_150868_h; ++i) {
			BlockPos blockpos = this.field_150861_f.offset(this.field_150866_c, i);

			for (int j = 0; j < this.field_150862_g; ++j) {
				this.world.setBlockState(blockpos.up(j), ModBlocks.portalNillax.getDefaultState().withProperty(BlockPortalNillax.AXIS, this.axis), 2);
			}
		}
	}
}
}

Main Developer and Owner of Zero Quest

Visit the Wiki for more information

If I helped anyone, please give me a applaud and a thank you!

  • Replies 57
  • Created
  • Last Reply

Top Posters In This Topic

Posted

What's the difference between

new TeleporterNillax(server.worldServerForDimension(0), false)

and

new TeleporterNillax(server.worldServerForDimension(0))

?

 

And, hmm... how about removing "&& entityIn.timeUntilPortal <= 0" in this if statement?

...
public void onEntityCollidedWithBlock(World worldIn, BlockPos pos, IBlockState state, Entity entityIn) {
    if (entityIn.ridingEntity == null && entityIn.riddenByEntity == null && entityIn.timeUntilPortal <= 0) {
...

Author of Tao Land Mod.

width=200 height=69http://taoland.herbix.me/images/1/14/TaoLandLogo.png[/img]

Also, author of RenderTo

----

I'm not an English native speaker. I just try my best.

Posted

I tested out the portal with one of my custom tameables and it is teleporting them, but there's mulitple clones of it in and out of the dimension and it's stuck in the portal also

Main Developer and Owner of Zero Quest

Visit the Wiki for more information

If I helped anyone, please give me a applaud and a thank you!

Posted

Also, here is my code for the portal:

 

	public void onEntityCollidedWithBlock(World worldIn, BlockPos pos, IBlockState state, Entity entityIn) {
	if (entityIn.ridingEntity == null && entityIn.riddenByEntity == null) {
		int id = ZeroQuest.NillaxID;
		if (entityIn.dimension == id) {
			id = 0;
		}

		if (entityIn instanceof EntityPlayerMP) {

			EntityPlayerMP player = (EntityPlayerMP) entityIn;
			MinecraftServer mcServer = player.mcServer;

			if (player.timeUntilPortal > 0) {
				player.timeUntilPortal = 10;
			}
			else if (player.dimension != ZeroQuest.NillaxID) {
				player.timeUntilPortal = 10;
				player.mcServer.getConfigurationManager().transferPlayerToDimension(player, ZeroQuest.NillaxID, new TeleporterNillax(mcServer.worldServerForDimension(ZeroQuest.NillaxID)));
			}
			else {
				player.timeUntilPortal = 10;
				player.mcServer.getConfigurationManager().transferPlayerToDimension(player, 0, new TeleporterNillax(mcServer.worldServerForDimension(0)));
			}
		}
		else {
			travelToDimension(entityIn, id);
		}
	}
}

private void travelToDimension(Entity entity, int id) {
	if (!entity.worldObj.isRemote && !entity.isDead) {
		entity.worldObj.theProfiler.startSection("changeDimension");
		MinecraftServer minecraftserver = MinecraftServer.getServer();
		int j = entity.dimension;
		WorldServer worldserver = minecraftserver.worldServerForDimension(j);
		WorldServer worldserver1 = minecraftserver.worldServerForDimension(id);
		entity.dimension = id;

		if (j == 1 && id == 1) {
			worldserver1 = minecraftserver.worldServerForDimension(0);
			entity.dimension = 0;
		}

		entity.worldObj.removeEntity(entity);
		entity.isDead = false;
		entity.worldObj.theProfiler.startSection("reposition");
		minecraftserver.getConfigurationManager().transferEntityToWorld(entity, j, worldserver, worldserver1, new TeleporterNillax(worldserver1));
		entity.worldObj.theProfiler.endStartSection("reloading");
		Entity entity1 = EntityList.createEntityByName(EntityList.getEntityString(entity), worldserver1);

		if (entity1 != null) {
			entity1.copyDataFromOld(entity);

			if (j == 1 && id == 1) {
				BlockPos spawnPoint = worldserver1.getSpawnPoint();
				spawnPoint = entity.worldObj.getTopSolidOrLiquidBlock(spawnPoint);
				entity1.setLocationAndAngles(spawnPoint.getX(), spawnPoint.getY(), spawnPoint.getZ(), entity1.rotationYaw, entity1.rotationPitch);
			}

			worldserver1.spawnEntityInWorld(entity1);
		}

		entity.isDead = true;
		entity.worldObj.theProfiler.endSection();
		worldserver.resetUpdateEntityTick();
		worldserver1.resetUpdateEntityTick();
		entity.worldObj.theProfiler.endSection();
	}
}

Main Developer and Owner of Zero Quest

Visit the Wiki for more information

If I helped anyone, please give me a applaud and a thank you!

Posted

Is there a way to fix this bug with non-player entities?

There's no much difference between non-player entities and players. They DO have timeUntilPortal field. Do the same thing as players to non-players and It would be solved.

 

By the way, you need to understand how these codes work, not just copy them and ask "why these bugs come out" even when they is solved in other cases.

Author of Tao Land Mod.

width=200 height=69http://taoland.herbix.me/images/1/14/TaoLandLogo.png[/img]

Also, author of RenderTo

----

I'm not an English native speaker. I just try my best.

Posted

Is there a way to fix this bug with non-player entities?

There's no much difference between non-player entities and players. They DO have timeUntilPortal field. Do the same thing as players to non-players and It would be solved.

 

By the way, you need to understand how these codes work, not just copy them and ask "why these bugs come out" even when they is solved in other cases.

 

I've been doing that, it still clones it and the entity doesn't move for a while before getting teleported and gets stuck in the portal after getting teleported

Main Developer and Owner of Zero Quest

Visit the Wiki for more information

If I helped anyone, please give me a applaud and a thank you!

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Announcements




  • Recently Browsing

    • No registered users viewing this page.
  • Posts

    • When I first heard about Bitcoin back in 2018, I was skeptical. The idea of a decentralized, digital currency seemed too good to be true. But I was intrigued as I learned more about the technology behind it and its potential. I started small, investing just a few hundred dollars, dipping my toes into the cryptocurrency waters. At first, it was exhilarating to watch the value of my investment grow exponentially. I felt like I was part of the future, an early adopter of this revolutionary new asset. But that euphoria was short-lived. One day, I logged into my digital wallet only to find it empty - my Bitcoin had vanished without a trace. It turned out that the online exchange I had trusted had been hacked, and my funds were stolen. I was devastated, both financially and emotionally. All the potential I had seen in Bitcoin was tainted by the harsh reality that with decentralization came a lack of regulation and oversight. My hard-earned money was gone, lost to the ether of the digital world. This experience taught me a painful lesson about the price of trust in the uncharted territory of cryptocurrency. While the technology holds incredible promise, the risks can be catastrophic if you don't approach it with extreme caution. My Bitcoin investment gamble had failed, and I was left to pick up the pieces, wiser but poorer for having placed my faith in the wrong hands. My sincere appreciation goes to MUYERN TRUST HACKER. You are my hero in recovering my lost funds. Send a direct m a i l ( muyerntrusted ( @ ) mail-me ( . )c o m ) or message on whats app : + 1 ( 4-4-0 ) ( 3 -3 -5 ) ( 0-2-0-5 )
    • You could try posting a log (if there is no log at all, it may be the launcher you are using, the FAQ may have info on how to enable the log) as described in the FAQ, however this will probably need to be reported to/remedied by the mod author.
    • So me and a couple of friends are playing with a shitpost mod pack and one of the mods in the pack is corail tombstone and for some reason there is a problem with it, where on death to fire the player will get kicked out of the server and the tombstone will not spawn basically deleting an entire inventory, it doesn't matter what type of fire it is, whether it's from vanilla fire/lava, or from modded fire like ice&fire/lycanites and it's common enough to where everyone on the server has experienced at least once or twice and it doesn't give any crash log. a solution to this would be much appreciated thank you!
    • It is 1.12.2 - I have no idea if there is a 1.12 pack
  • Topics

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.