Jump to content

Multi-block doesn't break proerly


KeeganDeathman

Recommended Posts

I setup my multi-block so when its assembled, the textures conenct, and when its not, not yet, or its broken, they result to a separate texture.

I have it setup so it checks every time onEntityUpdate is ran on the central tile entity, it will report to the blocks that connect (the 'walls') whether or not the multiblock is complete.

In addition to it knowing when the other blocks are broken, the block class of the tile entity will set the 'multiblock' Boolean of the walls(which are stored in an array passed to it from the tile entity every update) to false.

However, if another complete multiblock exists in the world, it doesn't break right. I deciphered it to this.

The Boolean isnt changed on break, until all of the 'central TEs' are removed from the world(I haven't tried breaking one of the other blocks in all other multi-blocks), and only the sides of the blocks that decipher their correct textures based off their location relative to the tile-entities position revert.

Also, sometimes the 'back' of the multi-block doesnt revert, when the aforementioned bug condition is met. Until I break one of the affected blocks and replace it, to look pretty, and see if those blocks still thought the structure was complete(they didnt).

 

onEntityUpdate()

 

 

public void updateEntity()
{
	if ((worldObj.getBlock(xCoord+1, yCoord, zCoord) != null)
	&&(worldObj.getBlock(xCoord-1, yCoord, zCoord) != null)
	&&(worldObj.getBlock(xCoord+1, yCoord+1, zCoord) != null)
	&&(worldObj.getBlock(xCoord-1, yCoord+1, zCoord) != null)
	&&(worldObj.getBlock(xCoord+1, yCoord-1, zCoord) != null)
	&&(worldObj.getBlock(xCoord-1, yCoord+1, zCoord) != null)
	&&(worldObj.getBlock(xCoord, yCoord+1, zCoord) != null)
	&&(worldObj.getBlock(xCoord, yCoord-1, zCoord) != null)
	&&(worldObj.getBlock(xCoord+1, yCoord, zCoord+1) != null)
	&&(worldObj.getBlock(xCoord-1, yCoord, zCoord+1) != null)
	&&(worldObj.getBlock(xCoord+1, yCoord+1, zCoord+1) != null)
	&&(worldObj.getBlock(xCoord-1, yCoord+1, zCoord+1) != null)
	&&(worldObj.getBlock(xCoord+1, yCoord-1, zCoord+1) != null)
	&&(worldObj.getBlock(xCoord-1, yCoord+1, zCoord+1) != null)
	&&(worldObj.getBlock(xCoord, yCoord+1, zCoord+1) != null)
	&&(worldObj.getBlock(xCoord, yCoord-1, zCoord+1) != null)
	&&(worldObj.getBlock(xCoord+1, yCoord, zCoord+2) != null)
	&&(worldObj.getBlock(xCoord-1, yCoord, zCoord+2) != null)
	&&(worldObj.getBlock(xCoord+1, yCoord+1, zCoord+2) != null)
	&&(worldObj.getBlock(xCoord-1, yCoord+1, zCoord+2) != null)
	&&(worldObj.getBlock(xCoord+1, yCoord-1, zCoord+2) != null)
	&&(worldObj.getBlock(xCoord-1, yCoord+1, zCoord+2) != null)
	&&(worldObj.getBlock(xCoord, yCoord+1, zCoord+2) != null)
	&&(worldObj.getBlock(xCoord, yCoord-1, zCoord+2) != null)
	&&(worldObj.getBlock(xCoord, yCoord, zCoord+2) != null)) {
		if ((worldObj.getBlock(xCoord + 1, yCoord, zCoord) == LabStuffMain.blockGasChamberWall)
				&& (worldObj.getBlock(xCoord - 1, yCoord, zCoord) == LabStuffMain.blockGasChamberWall)
				&& (worldObj.getBlock(xCoord + 1, yCoord + 1, zCoord) == LabStuffMain.blockGasChamberWall)
				&& (worldObj.getBlock(xCoord - 1, yCoord + 1, zCoord) == LabStuffMain.blockGasChamberWall)
				&& (worldObj.getBlock(xCoord + 1, yCoord - 1, zCoord) == LabStuffMain.blockGasChamberWall)
				&& (worldObj.getBlock(xCoord - 1, yCoord + 1, zCoord) == LabStuffMain.blockGasChamberWall)
				&& (worldObj.getBlock(xCoord, yCoord + 1, zCoord) == LabStuffMain.blockGasChamberWall)
				&& (worldObj.getBlock(xCoord, yCoord - 1, zCoord) == LabStuffMain.blockGasChamberWall)
				&& (worldObj.getBlock(xCoord + 1, yCoord, zCoord + 1) == LabStuffMain.blockGasChamberWall)
				&& (worldObj.getBlock(xCoord - 1, yCoord, zCoord + 1) == LabStuffMain.blockGasChamberWall)
				&& (worldObj.getBlock(xCoord + 1, yCoord + 1, zCoord + 1) == LabStuffMain.blockGasChamberWall)
				&& (worldObj.getBlock(xCoord - 1, yCoord + 1, zCoord + 1) == LabStuffMain.blockGasChamberWall)
				&& (worldObj.getBlock(xCoord + 1, yCoord - 1, zCoord + 1) == LabStuffMain.blockGasChamberWall)
				&& (worldObj.getBlock(xCoord - 1, yCoord + 1, zCoord + 1) == LabStuffMain.blockGasChamberWall)
				&& (worldObj.getBlock(xCoord, yCoord + 1, zCoord + 1) == LabStuffMain.blockGasChamberPort)
				&& (worldObj.getBlock(xCoord, yCoord - 1, zCoord + 1) == LabStuffMain.blockGasChamberPort)
				&& (worldObj.getBlock(xCoord + 1, yCoord, zCoord + 2) == LabStuffMain.blockGasChamberWall)
				&& (worldObj.getBlock(xCoord - 1, yCoord, zCoord + 2) == LabStuffMain.blockGasChamberWall)
				&& (worldObj.getBlock(xCoord + 1, yCoord + 1, zCoord + 2) == LabStuffMain.blockGasChamberWall)
				&& (worldObj.getBlock(xCoord - 1, yCoord + 1, zCoord + 2) == LabStuffMain.blockGasChamberWall)
				&& (worldObj.getBlock(xCoord + 1, yCoord - 1, zCoord + 2) == LabStuffMain.blockGasChamberWall)
				&& (worldObj.getBlock(xCoord - 1, yCoord + 1, zCoord + 2) == LabStuffMain.blockGasChamberWall)
				&& (worldObj.getBlock(xCoord, yCoord + 1, zCoord + 2) == LabStuffMain.blockGasChamberWall)
				&& (worldObj.getBlock(xCoord, yCoord - 1, zCoord + 2) == LabStuffMain.blockGasChamberWall)
				&& (worldObj.getBlock(xCoord, yCoord, zCoord + 2) == LabStuffMain.blockGasChamberWall)) 
		{
			multiblocks[0][0][0] = worldObj.getBlock(xCoord+1, yCoord+1, zCoord+2);
			multiblocks[0][0][1] = worldObj.getBlock(xCoord, yCoord+1, zCoord+2);
			multiblocks[0][0][2] = worldObj.getBlock(xCoord-1, yCoord+1, zCoord+2);
			multiblocks[0][1][0] = worldObj.getBlock(xCoord+1, yCoord+1, zCoord+1);
			multiblocks[0][1][1] = worldObj.getBlock(xCoord, yCoord+1, zCoord+1);
			multiblocks[0][1][2] = worldObj.getBlock(xCoord-1, yCoord+1, zCoord+1);
			multiblocks[0][2][0] = worldObj.getBlock(xCoord+1, yCoord+1, zCoord);
			multiblocks[0][2][0] = worldObj.getBlock(xCoord, yCoord+1, zCoord);
			multiblocks[0][2][0] = worldObj.getBlock(xCoord-1, yCoord+1, zCoord);
			multiblocks[1][0][0] = worldObj.getBlock(xCoord+1, yCoord, zCoord+2);
			multiblocks[1][0][1] = worldObj.getBlock(xCoord, yCoord, zCoord+2);
			multiblocks[1][0][2] = worldObj.getBlock(xCoord-1, yCoord, zCoord+2);
			multiblocks[1][1][0] = worldObj.getBlock(xCoord+1, yCoord, zCoord+1);
			multiblocks[1][1][1] = worldObj.getBlock(xCoord, yCoord, zCoord+1);
			multiblocks[1][1][2] = worldObj.getBlock(xCoord-1, yCoord, zCoord+1);
			multiblocks[1][2][0] = worldObj.getBlock(xCoord+1, yCoord, zCoord);
			multiblocks[1][2][0] = worldObj.getBlock(xCoord, yCoord, zCoord);
			multiblocks[1][2][0] = worldObj.getBlock(xCoord-1, yCoord, zCoord);
			multiblocks[2][0][0] = worldObj.getBlock(xCoord+1, yCoord-1, zCoord+2);
			multiblocks[2][0][1] = worldObj.getBlock(xCoord, yCoord-1, zCoord+2);
			multiblocks[2][0][2] = worldObj.getBlock(xCoord-1, yCoord-1, zCoord+2);
			multiblocks[2][1][0] = worldObj.getBlock(xCoord+1, yCoord-1, zCoord+1);
			multiblocks[2][1][1] = worldObj.getBlock(xCoord, yCoord-1, zCoord+1);
			multiblocks[2][1][2] = worldObj.getBlock(xCoord-1, yCoord-1, zCoord+1);
			multiblocks[2][2][0] = worldObj.getBlock(xCoord+1, yCoord-1, zCoord);
			multiblocks[2][2][0] = worldObj.getBlock(xCoord, yCoord-1, zCoord);
			multiblocks[2][2][0] = worldObj.getBlock(xCoord-1, yCoord-1, zCoord);
			for(int i = 0; i < 3; i++)
			{
				for(int j = 0; j < 3; j++)
				{
					for(int k = 0; k < 3; k++)
					{
						if(multiblocks[i][j][k] != null && multiblocks[i][j][k] == LabStuffMain.blockGasChamberWall)
						{
							System.out.println("Lets a go!");
							((BlockGasChamberWall)multiblocks[i][j][k]).setMultiBlockState(true);;
						}
					}
				}
			}
		}
		else 
		{
			if(multiblocks[0][0][0] != null)
			{
				for(int i = 0; i < 3; i++)
				{
					for(int j = 0; j < 3; j++)
					{
						for(int k = 0; k < 3; k++)
						{
							if(multiblocks[i][j][k] != null && multiblocks[i][j][k] == LabStuffMain.blockGasChamberWall)
							{
								((BlockGasChamberWall)multiblocks[i][j][k]).setMultiBlockState(false);
							}
						}
					}
				}
			}
		}
	}

	if(worldObj.getBlock(xCoord, yCoord, zCoord) == LabStuffMain.blockElectronGrabber)
	{
		((BlockElectronGrabber) worldObj.getBlock(xCoord, yCoord, zCoord)).multiblocks = multiblocks;
	}

}

 

 

 

removedByPlayer(block destroyed of 'electron grabber)

 

 

@Override
public boolean removedByPlayer(World world, EntityPlayer player, int x, int y, int z)
{
	super.removedByPlayer(world, player, x, y, z);
	if (multiblocks[0][0][0] != null) 
	{
		for (int i = 0; i < 3; i++) 
		{
			for (int j = 0; j < 3; j++) 
			{
				for (int k = 0; k < 3; k++) 
				{
					if (multiblocks[i][j][k] != null && multiblocks[i][j][k] == LabStuffMain.blockGasChamberWall) 
					{
						((BlockGasChamberWall) multiblocks[i][j][k]).setMultiBlockState(false);
					}
				}
			}
		}
	}
	return true;
}

 

 

 

getIcon method of the walls

 

 

@Override
public IIcon getIcon(IBlockAccess access, int x, int y, int z, int side)
    {
	if (isMultiBlock()) 
	{
		if (side == 1 || side == 0) {
			if (access.getBlock(x + 1, y, z + 1) == LabStuffMain.blockGasChamberPort) {
				return icons[2][2];
			}
			if (access.getBlock(x, y, z + 1) == LabStuffMain.blockGasChamberPort) {
				return icons[2][1];
			}
			if (access.getBlock(x - 1, y, z + 1) == LabStuffMain.blockGasChamberPort) {
				return icons[2][0];
			}
			if (access.getBlock(x + 1, y, z) == LabStuffMain.blockGasChamberPort) {
				return icons[1][2];
			}
			if (access.getBlock(x - 1, y, z) == LabStuffMain.blockGasChamberPort) {
				return icons[1][0];
			}
			if (access.getBlock(x - 1, y, z - 1) == LabStuffMain.blockGasChamberPort) {
				return icons[0][0];
			}
			if (access.getBlock(x, y, z - 1) == LabStuffMain.blockGasChamberPort) {
				return icons[0][1];
			}
			if (access.getBlock(x + 1, y, z - 1) == LabStuffMain.blockGasChamberPort) {
				return icons[0][2];
			}

			return this.blank;
		}
		if (access.getBlock(x, y - 1, z) == LabStuffMain.blockGasChamberWall
				|| access.getBlock(x, y - 1, z) == LabStuffMain.blockGasChamberPort
				|| access.getBlock(x, y - 1, z) == LabStuffMain.blockElectronCannon
				|| access.getBlock(x, y - 1, z) == LabStuffMain.blockElectronGrabber) {
			if (side == 2 || side == 3) {
				if (access.getBlock(x + 1, y, z + 1) == LabStuffMain.blockGasChamberPort) {
					return icons[2][2];
				}
				if (access.getBlock(x, y, z + 1) == LabStuffMain.blockGasChamberPort) {
					return icons[2][1];
				}
				if (access.getBlock(x - 1, y, z + 1) == LabStuffMain.blockGasChamberPort) {
					return icons[2][0];
				}
				if (access.getBlock(x + 1, y, z) == LabStuffMain.blockGasChamberPort) {
					return icons[2][2];
				}
				if (access.getBlock(x - 1, y, z) == LabStuffMain.blockGasChamberPort) {
					return icons[2][0];
				}
				if (access.getBlock(x - 1, y, z - 1) == LabStuffMain.blockGasChamberPort) {
					return icons[2][0];
				}
				if (access.getBlock(x, y, z - 1) == LabStuffMain.blockGasChamberPort) {
					return icons[2][1];
				}
				if (access.getBlock(x + 1, y, z - 1) == LabStuffMain.blockGasChamberPort) {
					return icons[2][2];
				}
			}
			if (side == 4 || side == 5) {
				if (access.getBlock(x + 1, y, z + 1) == LabStuffMain.blockGasChamberPort) {
					return icons[2][2];
				}
				if (access.getBlock(x - 1, y, z + 1) == LabStuffMain.blockGasChamberPort) {
					return icons[2][2];
				}
				if (access.getBlock(x + 1, y, z) == LabStuffMain.blockGasChamberPort) {
					return icons[2][1];
				}
				if (access.getBlock(x - 1, y, z) == LabStuffMain.blockGasChamberPort) {
					return icons[2][1];
				}
				if (access.getBlock(x - 1, y, z - 1) == LabStuffMain.blockGasChamberPort) {
					return icons[2][0];
				}
				if (access.getBlock(x + 1, y, z - 1) == LabStuffMain.blockGasChamberPort) {
					return icons[2][0];
				}
			}
			if (side == 2 || side == 3) {
				if ((access.getBlock(x + 1, y, z) == LabStuffMain.blockElectronCannon
						|| access.getBlock(x + 1, y, z) == LabStuffMain.blockElectronGrabber || access
						.getBlock(x + 1, y, z) == LabStuffMain.blockGasChamberWall)
						&& access.getBlock(x, y + 1, z) == LabStuffMain.blockGasChamberWall
						&& access.getBlock(x, y - 1, z) == LabStuffMain.blockGasChamberWall
						&& access.getBlock(x - 1, y, z) != LabStuffMain.blockGasChamberWall) {
					return icons[1][2];
				}
				if ((access.getBlock(x - 1, y, z) == LabStuffMain.blockElectronCannon
						|| access.getBlock(x - 1, y, z) == LabStuffMain.blockElectronGrabber || access
						.getBlock(x - 1, y, z) == LabStuffMain.blockGasChamberWall)
						&& access.getBlock(x, y + 1, z) == LabStuffMain.blockGasChamberWall
						&& access.getBlock(x, y - 1, z) == LabStuffMain.blockGasChamberWall
						&& access.getBlock(x + 1, y, z) != LabStuffMain.blockGasChamberWall) {
					return icons[1][0];
				}
				if (access.getBlock(x - 1, y, z) == LabStuffMain.blockGasChamberWall
						&& access.getBlock(x, y + 1, z) == LabStuffMain.blockGasChamberWall
						&& access.getBlock(x + 1, y, z) == LabStuffMain.blockGasChamberWall
						&& access.getBlock(x, y - 1, z) == LabStuffMain.blockGasChamberWall) {
					return icons[1][1];
				}
			}
			if (side == 4 || side == 5) {
				if ((access.getBlock(x, y, z + 1) == LabStuffMain.blockElectronCannon
						|| access.getBlock(x + 1, y, z) == LabStuffMain.blockElectronGrabber || access
						.getBlock(x, y, z + 1) == LabStuffMain.blockGasChamberWall)
						&& access.getBlock(x, y + 1, z) == LabStuffMain.blockGasChamberWall
						&& access.getBlock(x, y - 1, z) == LabStuffMain.blockGasChamberWall
						&& access.getBlock(x, y, z - 1) != LabStuffMain.blockGasChamberWall) {
					return icons[1][2];
				}
				if ((access.getBlock(x, y, z - 1) == LabStuffMain.blockElectronCannon
						|| access.getBlock(x - 1, y, z) == LabStuffMain.blockElectronGrabber || access
						.getBlock(x, y, z - 1) == LabStuffMain.blockGasChamberWall)
						&& access.getBlock(x, y + 1, z) == LabStuffMain.blockGasChamberWall
						&& access.getBlock(x, y - 1, z) == LabStuffMain.blockGasChamberWall
						&& access.getBlock(x, y, z + 1) != LabStuffMain.blockGasChamberWall) {
					return icons[1][0];
				}
				if (access.getBlock(x, y, z - 1) == LabStuffMain.blockGasChamberWall
						&& access.getBlock(x, y + 1, z) == LabStuffMain.blockGasChamberWall
						&& access.getBlock(x, y, z + 1) == LabStuffMain.blockGasChamberWall
						&& access.getBlock(x, y - 1, z) == LabStuffMain.blockGasChamberWall) {
					return icons[1][1];
				}
			}
			return this.blank;
		}
		if (side == 2 || side == 3) {
			if (access.getBlock(x + 1, y, z + 1) == LabStuffMain.blockGasChamberPort) {
				return icons[0][2];
			}
			if (access.getBlock(x, y, z + 1) == LabStuffMain.blockGasChamberPort) {
				return icons[0][1];
			}
			if (access.getBlock(x - 1, y, z + 1) == LabStuffMain.blockGasChamberPort) {
				return icons[0][0];
			}
			if (access.getBlock(x + 1, y, z) == LabStuffMain.blockGasChamberPort) {
				return icons[0][2];
			}
			if (access.getBlock(x - 1, y, z) == LabStuffMain.blockGasChamberPort) {
				return icons[0][0];
			}
			if (access.getBlock(x - 1, y, z - 1) == LabStuffMain.blockGasChamberPort) {
				return icons[0][0];
			}
			if (access.getBlock(x, y, z - 1) == LabStuffMain.blockGasChamberPort) {
				return icons[0][1];
			}
			if (access.getBlock(x + 1, y, z - 1) == LabStuffMain.blockGasChamberPort) {
				return icons[0][2];
			}
		}
		if (side == 4 || side == 5) {
			if (access.getBlock(x + 1, y, z + 1) == LabStuffMain.blockGasChamberPort) {
				return icons[0][2];
			}
			if (access.getBlock(x - 1, y, z + 1) == LabStuffMain.blockGasChamberPort) {
				return icons[0][2];
			}
			if (access.getBlock(x + 1, y, z) == LabStuffMain.blockGasChamberPort) {
				return icons[0][1];
			}
			if (access.getBlock(x - 1, y, z) == LabStuffMain.blockGasChamberPort) {
				return icons[0][1];
			}
			if (access.getBlock(x - 1, y, z - 1) == LabStuffMain.blockGasChamberPort) {
				return icons[0][0];
			}
			if (access.getBlock(x + 1, y, z - 1) == LabStuffMain.blockGasChamberPort) {
				return icons[0][0];
			}
		}
	}
	return this.blank;
    }

 

 

[shadow=gray,left][glow=red,2,300]KEEGAN[/glow][/shadow]

Link to comment
Share on other sites

First. Arrrgh, my eyes. There was that pic somewhere with Mickey Mouse tearing his eyes.

Please dedupe code. I'd advise some kind of enumVolume func which returns iterable over some specified volume. I did the thing for myself (though in Scala): https://github.com/target-san/Gateway/blob/master/src/targetsan/mcmods/gateway/Mod.scala (see Utils.enumVolume function).

 

Second, you didn't show isMultiBlock.

 

Third, you need to notify neighbor blocks when one of them is changed/destroyed. So, when any part of multiblock pieces is destroyed, you need to notify _all_ other pieces and enforce their update.

Link to comment
Share on other sites

Okay, yes I see. I was derping last night, and guess I thought the onEntityUpdate() function would handle it all.

But now that I think of it, the entity doesn't update unless there's a block update in BUD range.

Heres the isMultiBlock() function. Nothing special. this was written when I thought the TE would handle it all.

public boolean isMultiBlock()
{
       return this.multiblock();
}

 

Now that I think of it, that should also check to predetermine itself if the multiblock is complete and not rely on the te.

Now hopefully, one block determining the state of the multiblock, well update blocks near it, and those will do the same, and chain reaction.

If not, add a forceupdate call to isMultiblock

[shadow=gray,left][glow=red,2,300]KEEGAN[/glow][/shadow]

Link to comment
Share on other sites

I think I found the problem with the textures not reverting until all 'electron grabbers' are removed from the world.

During a test to see if I could send the array from the tile entities to the blocks, and have them decide their icons based on their position in the array(3 for loops, one for each sub-array or whatever, and an if (if(multiblocks[j][k] == this)), however, the tops and bottoms, the only sides implemented in the new method, all defaulted to the icon of multiblock 0,0,0, even wall blocks not part of a multiblock,and therefore shouldnt have a multiblock array, default to 0,0,0s top texture.

My conclusion, for whatever reason, my electron grabber is affecting all wall blocks in the world. Even though it should only affect those in the array. I have not yet tested to see if it is in fact, just a coding bug, and all blocks believe they are 0,0,0 by default, whether or not they have a multiblock, by removing the grabbers, and seeing if their texture resets.

[shadow=gray,left][glow=red,2,300]KEEGAN[/glow][/shadow]

Link to comment
Share on other sites

Is the grabber assigning all walls to the array? No, I use world.getBlock, its very strict.

Is the default [00][00][00]? maybe, but that wouldn't explain the original problem. onBlockremoved should set the boolean on all walls. And it does, is just delayed until all grabbers are gone! Maybe, yes! a secondary testing system, to see if there is a tile entity at the coords provided by the tile entity, this would be in the isMultiBlock, and would be half the return value. multiblock boolean would be set to false, if the tile entity doesnt show up! tertiary defense, the return method is return (multiblock && isTileEntityPresent)! Ill add it as soon as I can!

[shadow=gray,left][glow=red,2,300]KEEGAN[/glow][/shadow]

Link to comment
Share on other sites

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.



  • Recently Browsing

    • No registered users viewing this page.
  • Posts

    • Hi fellow minecrafter,   We've got exciting news from the Pacific Laboratory for Artificial Intelligence (PLAI) at UBC! We're merging the worlds of Minecraft and AI research, and you're invited to join through our platform, plaicraft.ai, to aid our data collection process. It's not just playing games; it's contributing to cutting-edge AI research.   BetterStructures and more!!: We want to make the server as fun as possible for everyone so we recently added a bunch of structural plugins that adds over a hundred of new structures and sites for you to explore and challenge. We are also working on PVP, bedwars and skyblock content, which will make the server even more fun!   Here’s how you can get involved! -Register on plaicraft.ai with your email(you can fake one, as long as you can receive email from it it's fine). -Complete a consent form. -Play Minecraft and contribute to science! (all you need is a Chrome browser and a steady internet, you'll be playing on VM)   Why You Should Participate? -Support AI Research: Your gameplay directly contributes to important AI advancements.  -Free Minecraft Access: Enjoy the game without any cost. -We have shaders and a bunch of cool mods loaded on our instances  -Great Community: Our server currently has a fantastic community, with many awesome players you can meet.   Elephant in the room: Now I want to address some obvious concerns, I sure did a good job making us sound like a scam by the above content. I know that the "free Minecraft" thing has always been taboo in the Minecraft community. So how can I prove to you that this is not a scam? - The easiest way and most official way is that we are approved by the University of British Columbia ethics board, our BREB number is H23-02389. You can verify this case number yourself. - The harder way is that I'll explain the technical details of this project and why we choose to provide free Minecraft. So the goal of this project is very similar to the paper MineDojo or MineRL, we want to collect a multi-modal dataset that consists of video, audio, keyboard and mouse movement. Minecraft has been a very important simulation environment for the ML community and there are tons of papers related to it. Now we obviously don't have enough money like those big tech companies who can just pay people to play, so we have to turn to the Minecraft community. To record all the data mentioned, there needs to be a lot of setup and coding, and it's definitely impossible for us to ask people to run these recording programs on their personal computers. So we carefully configured the AWS EC2 instance to run Minecraft alongside the programs. And that's where and why we also provide you with free Minecraft licenses, of course, we are not giving the account to you, just allowing you to be able to play Minecraft on these instances. You might ask, "Why can't I log in with my account on the instances?", that's because first login with your personal Minecraft account is another privacy risk; second not all our target audiences have an account; and lastly we restricted a lot on what you can do on the instance, basically all you can do is play Minecraft and that's all the data we want, allowing you to log in will make things complicated to control.   For more information on the project and the team, visit Dr. Frank Wood’s website or follow @frankdonaldwood on Twitter. You can also learn more about PLAI lab research on our website (just search ubc plai). Join us in transforming your gaming experience into a meaningful contribution to AI research. Let’s push the boundaries of what gaming can achieve together! Happy plaiing!   Best,  The PLAI Team
    • The mod has improved a lot from yesterday just 1 last issue  Here's the crash report- https://pastebin.com/k2A1BAKn   Please help, Thanks.
    • Take Your Gaming Experience to the Next Level with These Essential Tools   If you're a Minecraft enthusiast, you've likely experienced the need to customize your world and server to make it more exciting and challenging. Fortunately, there's a perfect solution for you: https://menzatyx.xyz, the website that offers a wide selection of free and pre-configured Minecraft plugins. At https://menzatyx.xyz, you'll find a diverse range of plugins that will allow you to take your gaming experience to the next level. From server management tools to mods that add new functionalities, each of these plugins has been carefully selected and configured, so you can enjoy a more personalized and thrilling Minecraft experience. One of the primary benefits of using these pre-configured plugins is the ease of implementation. You no longer have to spend hours configuring and adjusting each individual plugin. Simply download the package that best suits your needs, and you're good to go! You'll be able to enjoy all the features and improvements without investing too much time and effort. From plugins that enhance the security of your server to mods that add new game modes, the variety offered by https://menzatyx.xyz is impressive. Moreover, as these are free plugins, you can access these tools without spending a single penny. It's the perfect opportunity to take your Minecraft experience to the next level without affecting your wallet! Whether you're a casual player or an experienced server administrator, at https://menzatyx.xyz you'll find the Minecraft plugins you need to personalize and enhance your game. Visit the website now and discover how you can transform your Minecraft world into something unique and thrilling!
    • Meaning I need to restart the server and redownload cobblemon?
    • Crash with the error: The game crashed whilst exception ticking world Error: java.util.ConcurrentModificationException pastebin crashlog the game worked for like 24h, then started to receive this error. Things I've tried: removing optifine or other performace mods. tried different versions (older) of the pack. set true to remove error entities and tiles in forge.cfg asked for help on the sevtech github, they said its fixed in the latest sevpatches mod, i updated that mod and its not. I've tried updating multiple mods with no result. tried a different pc and still crashed happened only one time on another map although i cant make it happen again on that map.
  • Topics

×
×
  • Create New...

Important Information

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