Jump to content

[PARTIALLY SOLVED] [1.8] See who added a block in the world


JimiIT92

Recommended Posts

I have a block that when powered by redstone (or anything related like buttons, levers....) or right clicked do some stuff and than send a message to the player in the chat. Now, for the right click no problem, the message is displayed only to who actually right clicked the block. BUt for the redstone related part? Since i don't know how to check (or even if it is possible to check) who placed/activated the block how can i send the right message to the right player? By now i check the nearest player to block, wich it works assuming that the only player in a radius of 5 blocks from the powered block is actually who powered the block. But of course i want to avoid this because if there is another player near the block, the chat message will be showned to that player instead of the "legal" one. So this is the whole class for the block

package mw.blocks;

import java.util.List;
import java.util.Random;

import mw.core.MWBlocks;
import mw.core.utils.Utils;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.block.properties.IProperty;
import net.minecraft.block.properties.PropertyEnum;
import net.minecraft.block.state.BlockState;
import net.minecraft.block.state.IBlockState;
import net.minecraft.client.Minecraft;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.BlockPos;
import net.minecraft.util.ChatComponentText;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.EnumParticleTypes;
import net.minecraft.util.IStringSerializable;
import net.minecraft.world.World;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;

public class BlockDetector extends Block {

private Block block;
private int metadata;
private boolean powered;
private String language;
private String name;

private String no_block_found;
private String one_block_found;
private String some_blocks_found;
private String blocks_found;
private String one_block_found_at;
private String some_blocks_found_at;
private String nearest_block;

public static final PropertyEnum VARIANT = PropertyEnum.create("variant", BlockDetector.EnumType.class);


public BlockDetector(Block block, int metadata, String name) {
	super(Material.rock);
	this.setDefaultState(this.blockState.getBaseState().withProperty(VARIANT, BlockDetector.EnumType.LV1));
	Utils.setDetectorBlockInfo(this, name);
	this.block = block;
	this.metadata = metadata;
	this.powered = false;
	this.language = Minecraft.getMinecraft().getLanguageManager().getCurrentLanguage().toString();
	this.name = name;
}

public void onBlockAdded(World par1, BlockPos pos, IBlockState state)
{
	if (!par1.isRemote)
	{
		if (this.powered && par1.isBlockIndirectlyGettingPowered(pos) == 0)
		{
			par1.scheduleUpdate(pos, this, 4);
		}
		else if (!this.powered && par1.isBlockIndirectlyGettingPowered(pos) != 0)
		{
			this.onBlockActivated(par1, pos, state, par1.getClosestPlayer(pos.getX(), pos.getY(), pos.getZ(), 5.0F), null, 0.0F, 0.0F, 0.0F);
		}
	}
}

/**
 * Called when a neighboring block changes.
 */
public void onNeighborBlockChange(World par1, BlockPos pos, IBlockState state, Block neighborBlock)
{
	if (!par1.isRemote)
	{
		if (this.powered && par1.isBlockIndirectlyGettingPowered(pos) == 0)
		{
			par1.scheduleUpdate(pos, this, 4);
		}
		else if (!this.powered && par1.isBlockIndirectlyGettingPowered(pos) != 0)
		{
			this.onBlockActivated(par1, pos, state, par1.getClosestPlayer(pos.getX(), pos.getY(), pos.getZ(), 5.0F), null, 0.0F, 0.0F, 0.0F);
		}
	}
}

@Override
public boolean onBlockActivated(World par1World, BlockPos pos, IBlockState state, EntityPlayer par5EntityPlayer, EnumFacing side, float par7, float par8, float par9)
{
	int par2 = pos.getX();
	int par3 = pos.getY();
	int par4 = pos.getZ();

	this.sparkle(par1World, par2, par3, par4);

	if(!par1World.isRemote)
	{
		int min = -5 + (-5 * par1World.getBlockState(pos).getBlock().getMetaFromState(state));
		int max = 6 + (6 * par1World.getBlockState(pos).getBlock().getMetaFromState(state));
		boolean flag = false;
		int count = 0;
		int x = 0, y = 0, z = 0;

		for(int i = min; i < max; i++)
			for(int j = min; j < max; j++)
				for(int k = min; k < max; k++)
				{
					if(par1World.getBlockState(pos.add(i, j, k)).getBlock().equals(this.block) && par1World.getBlockState(pos.add(i, j, k)) == block.getStateFromMeta(this.metadata))
					{
						flag = true;
						count++;
						if(par2+1 < 0)
							x = par2 + i + 1;
						else
							x = par2 + i;
						y = par3 + j;
						if(par4+k < 0)
							z = par4 + k + 1;
						else
							z = par4 + k;
					}
				}
		String block_name = this.block.getLocalizedName();
		if(this.language.equals("Italiano (Italia)"))
		{
			if(block_name.equals("tile.marble.name") && this.metadata == 0)
				block_name = "Marmo Bianco";
			if(block_name.equals("tile.marble.name") && this.metadata == 1)
				block_name = "Marmo Rosa";
			this.one_block_found = "E' stato trovato un blocco di " + block_name + " qui intorno";
			this.no_block_found = "Non e' stato trovato alcun blocco di " + block_name + " qui intorno";
			this.some_blocks_found = "Sono stati trovati alcuni blocchi di " + block_name + " qui intorno";
			this.blocks_found = "Sono stati trovati " + count + " blocchi di " + block_name + " qui intorno";
			this.one_block_found_at = "E' stato trovato un blocco di " + block_name + " alle coordinate " + "X = " + x + " Y = " + y + " Z = " + z;
			this.some_blocks_found_at = "Sono stati trovati " + count + " blocchi di " + block_name + " qui intorno";
			this.nearest_block = "Il piu' vicino si trova intorno alle coordinate X = " + x + " Y = " + y + " Z = " + z;
		}
		else
		{
			if(block_name.equals("tile.marble.name") && this.metadata == 0)
				block_name = "White Marble";
			if(block_name.equals("tile.marble.name") && this.metadata == 1)
				block_name = "Pink Marble";
			this.one_block_found = "Found a block of " + block_name + " hereabouts";
			this.no_block_found = "Found no block of " + block_name + " hereabouts";
			this.some_blocks_found = "Found some blocks of " + block_name + " hereabouts";
			this.blocks_found = "Found " + count + " blocks of " + block_name + " hereabouts";
			this.one_block_found_at = "Found one block of " + block_name + " to the coordinates " + "X = " + x + " Y = " + y + " Z = " + z;
			this.some_blocks_found_at = "Found " + count + " blocks of " + block_name + " hereabouts";
			this.nearest_block = "The nearest is around the coordinates X = " + x + " Y = " + y + " Z = " + z;
		}

		if(!par1World.isRemote)
		{
			if(flag == true)
			{
				switch(par1World.getBlockState(pos).getBlock().getMetaFromState(state))
				{
				case 0:
					if(count == 1)
						par5EntityPlayer.addChatComponentMessage(new ChatComponentText(this.one_block_found));
					else
						par5EntityPlayer.addChatComponentMessage(new ChatComponentText(this.some_blocks_found));
					break;
				case 1:
					if(count == 1)
						par5EntityPlayer.addChatComponentMessage(new ChatComponentText(this.one_block_found));
					else
						par5EntityPlayer.addChatComponentMessage(new ChatComponentText(this.blocks_found));
					break;
				case 2:
					if(count == 1)
						par5EntityPlayer.addChatComponentMessage(new ChatComponentText(this.one_block_found_at));
					else
					{
						par5EntityPlayer.addChatComponentMessage(new ChatComponentText(this.some_blocks_found_at));
						par5EntityPlayer.addChatComponentMessage(new ChatComponentText(this.nearest_block));
					}
					break;
				}
			}
			else
				par5EntityPlayer.addChatComponentMessage(new ChatComponentText(this.no_block_found));
		}

		return true;
	}
	return true;
}
    
private void sparkle(World par1, int par2, int par3, int par4)
{
	Random random = par1.rand;
	double d0 = 0.0625D;

	for (int l = 0; l < 6; ++l)
	{
		double d1 = (double)((float)par2 + random.nextFloat());
		double d2 = (double)((float)par3 + random.nextFloat());
		double d3 = (double)((float)par4 + random.nextFloat());

		if (l == 0 && !par1.getBlockState(new BlockPos(par2, par3+l, par4)).getBlock().isOpaqueCube())
		{
			d2 = (double)(par3 + 1) + d0;
		}

		if (l == 1 && !par1.getBlockState(new BlockPos(par2, par3 - 1, par4)).getBlock().isOpaqueCube())
		{
			d2 = (double)(par3 + 0) - d0;
		}

		if (l == 2 && !par1.getBlockState(new BlockPos(par2, par3, par4 + 1)).getBlock().isOpaqueCube())
		{
			d3 = (double)(par4 + 1) + d0;
		}

		if (l == 3 && !par1.getBlockState(new BlockPos(par2, par3, par4 - 1)).getBlock().isOpaqueCube())
		{
			d3 = (double)(par4 + 0) - d0;
		}

		if (l == 4 && !par1.getBlockState(new BlockPos(par2 + 1, par3, par4)).getBlock().isOpaqueCube())
		{
			d1 = (double)(par2 + 1) + d0;
		}

		if (l == 5 && !par1.getBlockState(new BlockPos(par2 - 1, par3, par4)).getBlock().isOpaqueCube())
		{
			d1 = (double)(par2 + 0) - d0;
		}

		if (d1 < (double)par2 || d1 > (double)(par2 + 1) || d2 < 0.0D || d2 > (double)(par3 + 1) || d3 < (double)par4 || d3 > (double)(par4 + 1))
		{
			par1.spawnParticle(EnumParticleTypes.REDSTONE, d1, d2, d3, 0.0D, 0.0D, 0.0D);
		}
	}
}


 /**
     * Get the damage value that this Block should drop
     */
    public int damageDropped(IBlockState state)
    {
        return ((BlockDetector.EnumType)state.getValue(VARIANT)).getMetadata();
    }

    /**
     * returns a list of blocks with the same ID, but different meta (eg: wood returns 4 blocks)
     */
    @SideOnly(Side.CLIENT)
    public void getSubBlocks(Item itemIn, CreativeTabs tab, List list)
    {
        BlockDetector.EnumType[] aenumtype = BlockDetector.EnumType.values();
        int i = aenumtype.length;

        for (int j = 0; j < i; ++j)
        {
            BlockDetector.EnumType enumtype = aenumtype[j];
            list.add(new ItemStack(itemIn, 1, enumtype.getMetadata()));
        }
    }

    /**
     * Convert the given metadata into a BlockState for this Block
     */
    public IBlockState getStateFromMeta(int meta)
    {
        return this.getDefaultState().withProperty(VARIANT, BlockDetector.EnumType.byMetadata(meta));
    }

    /**
     * Convert the BlockState into the correct metadata value
     */
    public int getMetaFromState(IBlockState state)
    {
        return ((BlockDetector.EnumType)state.getValue(VARIANT)).getMetadata();
    }

    protected BlockState createBlockState()
    {
        return new BlockState(this, new IProperty[] {VARIANT});
    }

    public static enum EnumType implements IStringSerializable
    {
        LV1(0, "lv1"),
        LV2(1, "lv2"),
        LV3(2, "lv3");
        private static final BlockDetector.EnumType[] META_LOOKUP = new BlockDetector.EnumType[values().length];
        private final int meta;
        private final String name;
        private final String unlocalizedName;


        private EnumType(int meta, String name)
        {
            this(meta, name, name);
        }

        private EnumType(int meta, String name, String unlocalizedName)
        {
            this.meta = meta;
            this.name = name;
            this.unlocalizedName = unlocalizedName;
        }

        public int getMetadata()
        {
            return this.meta;
        }

        public String toString()
        {
            return this.name;
        }

        public static BlockDetector.EnumType byMetadata(int meta)
        {
            if (meta < 0 || meta >= META_LOOKUP.length)
            {
                meta = 0;
            }

            return META_LOOKUP[meta];
        }

        public String getName()
        {
            return this.name;
        }

        public String getUnlocalizedName()
        {
            return this.unlocalizedName;
        }

        static
        {
            BlockDetector.EnumType[] var0 = values();
            int var1 = var0.length;

            for (int var2 = 0; var2 < var1; ++var2)
            {
                BlockDetector.EnumType var3 = var0[var2];
                META_LOOKUP[var3.getMetadata()] = var3;
            }
        }
    }


}

The function that send a message to the player is the onBlockActivated function.

Also, when i powered a block with a lever, the message is sended twice.

Don't blame me if i always ask for your help. I just want to learn to be better :)

Link to comment
Share on other sites

Yeah, you're not going to be able to figure that out.

Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable.  If you think this is the case, JUST REPORT ME.  Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice.

 

Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked.

 

DO NOT PM ME WITH PROBLEMS. No help will be given.

Link to comment
Share on other sites

You can store the UUID of the player who placed the block in a

TileEntity

(and then retrieve the player with that UUID to send a message to them at some point), but there's no way to detect the player who activated with a redstone signal.

Please don't PM me to ask for help. Asking your question in a public thread preserves it for people who are having the same problem in the future.

Link to comment
Share on other sites

Without using a TileEntity i have done this

@Override
public void onBlockPlacedBy(World world, BlockPos pos, IBlockState state, EntityLivingBase entity, ItemStack stack)
{
	super.onBlockPlacedBy(world, pos, state, entity, stack);
	if(entity instanceof EntityPlayer)
		this.player = (EntityPlayer) entity;
}

saving the entity uuid in a local variable (this.player). Then in the onBlockAdded/onNeighborBlockChange functions i do this

if(this.player != null)
				this.onBlockActivated(par1, pos, state, par1.getPlayerEntityByUUID(this.player), null, 0.0F, 0.0F, 0.0F);
			else
				this.onBlockActivated(par1, pos, state, par1.getClosestPlayer(pos.getX(), pos.getY(), pos.getZ(), 10.0F), null, 0.0F, 0.0F, 0.0F);

so if a player place this block than only that player will have a message in chat, even if is not him to activate the block via redstone (it's weird and possibly wrong, but since it would be very disadvantaged check where a redstone circuit ends up, i'll leave this), and if it's not a player to place the block (for example via setblock command) than give the output to the closest player :) Thanks Choonster for giving me the tip to save the player uuid :)

Don't blame me if i always ask for your help. I just want to learn to be better :)

Link to comment
Share on other sites

There is no possibility of finding the player that activates redstone, as the are non-player methods of applying a redstone signal.  Pressure plays activated by mobs or items, block update detectors, detector rail...

Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable.  If you think this is the case, JUST REPORT ME.  Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice.

 

Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked.

 

DO NOT PM ME WITH PROBLEMS. No help will be given.

Link to comment
Share on other sites

I think first of all I want to make sure you understand some important concepts. The reason your first idea of recording the player in a player field wouldn't work is that you need to understand that there is only one instance (a singleton) of the block's class used, so any fields in the block itself will act globally (affect all blocks of that type in the game). This is because there are so many blocks in the game -- there are 65,000 blocks just in a single chunk -- that the computer would not have enough memory to instantiate them all as separate instances. So instead, there is a map of block types to locations in the chunk, and chunks in the world. They have also allowed a tiny bit of data (just four bits) to be stored per block location -- this is often called metadata. So then something like the color of clay block doesn't need a TileEntity, but rather can just use metadata.

 

So for blocks that don't do any processing (i.e. unique data per block location) that is all that is needed. But in your case, you want unique player information associated with each block location, and this is too much for 4 bit metadata. So they have provided TileEntities which are designed to allow you to make some blocks unique. You still can't use a lot of them, otherwise they would cause same problem as creating multiple block instances. Note that a TileEntity can just store data, or it can do some actual processing (like do things each tick). In your case you probably don't need them to tick, just store the player UUID, which is good because ticking a lot of TileEntities can cause performance problems.

 

There is an alternate way of storing data per location though. You could create a map in the world data that associates block positions with player UUIDs.

 

Note that in both approaches (TileEntity or world data) you will want to make sure you save and load the information as part of the NBT save / load processes.

 

Now regarding the redstone part, it actually is possible, but it would require quite a bit of programming. One approach is to substitute custom blocks for each redstone and redstone activated element and have them either have TileEntities or have them interact with world data. For example, you could have a world data map that represents who activated each pressure plate, and in your block that substitutes for the pressure plate you could update that world data map.

 

It would take a lot of programming though to achieve. Also you have to consider that redstone circuits can actually be activated by multiple things simultaneously -- imagine two pressure plates where one player gets on, then another player gets on, and then the first player gets off. Which player would you consider as the one that activated the circuit.

 

So not impossible, but really probably an advanced mod to make.

Check out my tutorials here: http://jabelarminecraft.blogspot.com/

Link to comment
Share on other sites

I understand :/ For the block part i have done it with a tile entity that only store the player UUID, it doesn't do anything else. For the redstone part, i think i should handle multiple events (entity collides with a pressur plate, entity interact with a lever/button, ...) and in there check if is a player who activate them. For multiple player instances, once the player hits the pressure plate is done, is not a block that works "until the player is on the pressure plate", it just need a single impulse of any type, so in that case both players will receive the output because both have activated it. The hard part is to see if what they press (lever,pressure plate, ecc...) is connected to the block, wich i think is a bit hard to code and sure will require a good pc to run (wich is not good). Anyway here is the updated code, just in case there is something wrong with it :) 

This is the block class

package mw.blocks;

import java.util.List;
import java.util.Random;
import java.util.UUID;

import mw.core.utils.Utils;
import mw.entities.tileentity.TileEntityDetector;
import mw.entities.tileentity.TileEntityDynamicLamp;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.block.properties.IProperty;
import net.minecraft.block.properties.PropertyEnum;
import net.minecraft.block.state.BlockState;
import net.minecraft.block.state.IBlockState;
import net.minecraft.client.Minecraft;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.BlockPos;
import net.minecraft.util.ChatComponentText;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.EnumParticleTypes;
import net.minecraft.util.IStringSerializable;
import net.minecraft.world.World;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;

public class BlockDetector extends Block {

private Block block;
private int metadata;
private boolean powered;
private String language;
private String name;

private String no_block_found;
private String one_block_found;
private String some_blocks_found;
private String blocks_found;
private String one_block_found_at;
private String some_blocks_found_at;
private String nearest_block;

public static final PropertyEnum VARIANT = PropertyEnum.create("variant", BlockDetector.EnumType.class);


@Override
    public boolean hasTileEntity(IBlockState state)
    {
    	return true;
    }

/**
     * Returns a new instance of a block's tile entity class. Called on placing the block.
     */
    @Override
    public TileEntity createTileEntity(World worldIn, IBlockState meta)
    {
    	return new TileEntityDetector();
    }
    
public BlockDetector(Block block, int metadata, String name) {
	super(Material.rock);
	this.setDefaultState(this.blockState.getBaseState().withProperty(VARIANT, BlockDetector.EnumType.LV1));
	Utils.setDetectorBlockInfo(this, name);
	this.block = block;
	this.metadata = metadata;
	this.powered = false;
	this.language = Minecraft.getMinecraft().getLanguageManager().getCurrentLanguage().toString();
	this.name = name;
}

@Override
public void onBlockPlacedBy(World world, BlockPos pos, IBlockState state, EntityLivingBase entity, ItemStack stack)
{
	super.onBlockPlacedBy(world, pos, state, entity, stack);
	TileEntity tileentity = world.getTileEntity(pos);
	if(entity instanceof EntityPlayer)
		((TileEntityDetector)tileentity).setUUID(entity.getUniqueID());
}

public void onBlockAdded(World par1, BlockPos pos, IBlockState state)
{
	if (!par1.isRemote)
	{
		if (this.powered && par1.isBlockIndirectlyGettingPowered(pos) == 0)
		{
			par1.scheduleUpdate(pos, this, 4);
		}
		else if (!this.powered && par1.isBlockIndirectlyGettingPowered(pos) != 0)
		{
			TileEntity tileentity = par1.getTileEntity(pos);
			UUID id = ((TileEntityDetector)tileentity).getUUID();
			if(id != null)
				this.onBlockActivated(par1, pos, state, par1.getPlayerEntityByUUID(id), null, 0.0F, 0.0F, 0.0F);
			else
				this.onBlockActivated(par1, pos, state, par1.getClosestPlayer(pos.getX(), pos.getY(), pos.getZ(), 10.0F), null, 0.0F, 0.0F, 0.0F);
		}
	}
}

/**
 * Called when a neighboring block changes.
 */
public void onNeighborBlockChange(World par1, BlockPos pos, IBlockState state, Block neighborBlock)
{
	if (!par1.isRemote)
	{
		if (this.powered && par1.isBlockIndirectlyGettingPowered(pos) == 0)
		{
			par1.scheduleUpdate(pos, this, 4);
		}
		else if (!this.powered && par1.isBlockIndirectlyGettingPowered(pos) != 0)
		{
			TileEntity tileentity = par1.getTileEntity(pos);
			UUID id = ((TileEntityDetector)tileentity).getUUID();
			if(id != null)
				this.onBlockActivated(par1, pos, state, par1.getPlayerEntityByUUID(id), null, 0.0F, 0.0F, 0.0F);
			else
				this.onBlockActivated(par1, pos, state, par1.getClosestPlayer(pos.getX(), pos.getY(), pos.getZ(), 10.0F), null, 0.0F, 0.0F, 0.0F);
		}
	}
}

@Override
public boolean onBlockActivated(World par1World, BlockPos pos, IBlockState state, EntityPlayer par5EntityPlayer, EnumFacing side, float par7, float par8, float par9)
{
	int par2 = pos.getX();
	int par3 = pos.getY();
	int par4 = pos.getZ();

	this.sparkle(par1World, par2, par3, par4);

	if(!par1World.isRemote)
	{
		int min = -5 + (-5 * par1World.getBlockState(pos).getBlock().getMetaFromState(state));
		int max = 6 + (6 * par1World.getBlockState(pos).getBlock().getMetaFromState(state));
		boolean flag = false;
		int count = 0;
		int x = 0, y = 0, z = 0;

		for(int i = min; i < max; i++)
			for(int j = min; j < max; j++)
				for(int k = min; k < max; k++)
				{
					if(par1World.getBlockState(pos.add(i, j, k)).getBlock().equals(this.block) && par1World.getBlockState(pos.add(i, j, k)) == block.getStateFromMeta(this.metadata))
					{
						flag = true;
						count++;
						if(par2+1 < 0)
							x = par2 + i + 1;
						else
							x = par2 + i;
						y = par3 + j;
						if(par4+k < 0)
							z = par4 + k + 1;
						else
							z = par4 + k;
					}
				}
		String block_name = this.block.getLocalizedName();
		if(this.language.equals("Italiano (Italia)"))
		{
			if(block_name.equals("tile.marble.name") && this.metadata == 0)
				block_name = "Marmo Bianco";
			if(block_name.equals("tile.marble.name") && this.metadata == 1)
				block_name = "Marmo Rosa";
			this.one_block_found = "E' stato trovato un blocco di " + block_name + " qui intorno";
			this.no_block_found = "Non e' stato trovato alcun blocco di " + block_name + " qui intorno";
			this.some_blocks_found = "Sono stati trovati alcuni blocchi di " + block_name + " qui intorno";
			this.blocks_found = "Sono stati trovati " + count + " blocchi di " + block_name + " qui intorno";
			this.one_block_found_at = "E' stato trovato un blocco di " + block_name + " alle coordinate " + "X = " + x + " Y = " + y + " Z = " + z;
			this.some_blocks_found_at = "Sono stati trovati " + count + " blocchi di " + block_name + " qui intorno";
			this.nearest_block = "Il piu' vicino si trova intorno alle coordinate X = " + x + " Y = " + y + " Z = " + z;
		}
		else
		{
			if(block_name.equals("tile.marble.name") && this.metadata == 0)
				block_name = "White Marble";
			if(block_name.equals("tile.marble.name") && this.metadata == 1)
				block_name = "Pink Marble";
			this.one_block_found = "Found a block of " + block_name + " hereabouts";
			this.no_block_found = "Found no block of " + block_name + " hereabouts";
			this.some_blocks_found = "Found some blocks of " + block_name + " hereabouts";
			this.blocks_found = "Found " + count + " blocks of " + block_name + " hereabouts";
			this.one_block_found_at = "Found one block of " + block_name + " to the coordinates " + "X = " + x + " Y = " + y + " Z = " + z;
			this.some_blocks_found_at = "Found " + count + " blocks of " + block_name + " hereabouts";
			this.nearest_block = "The nearest is around the coordinates X = " + x + " Y = " + y + " Z = " + z;
		}

		if(!par1World.isRemote)
		{
			if(flag == true)
			{
				switch(par1World.getBlockState(pos).getBlock().getMetaFromState(state))
				{
				case 0:
					if(count == 1)
						par5EntityPlayer.addChatComponentMessage(new ChatComponentText(this.one_block_found));
					else
						par5EntityPlayer.addChatComponentMessage(new ChatComponentText(this.some_blocks_found));
					break;
				case 1:
					if(count == 1)
						par5EntityPlayer.addChatComponentMessage(new ChatComponentText(this.one_block_found));
					else
						par5EntityPlayer.addChatComponentMessage(new ChatComponentText(this.blocks_found));
					break;
				case 2:
					if(count == 1)
						par5EntityPlayer.addChatComponentMessage(new ChatComponentText(this.one_block_found_at));
					else
					{
						par5EntityPlayer.addChatComponentMessage(new ChatComponentText(this.some_blocks_found_at));
						par5EntityPlayer.addChatComponentMessage(new ChatComponentText(this.nearest_block));
					}
					break;
				}
			}
			else
				par5EntityPlayer.addChatComponentMessage(new ChatComponentText(this.no_block_found));
		}

		return true;
	}
	return true;
}
    
private void sparkle(World par1, int par2, int par3, int par4)
{
	Random random = par1.rand;
	double d0 = 0.0625D;

	for (int l = 0; l < 6; ++l)
	{
		double d1 = (double)((float)par2 + random.nextFloat());
		double d2 = (double)((float)par3 + random.nextFloat());
		double d3 = (double)((float)par4 + random.nextFloat());

		if (l == 0 && !par1.getBlockState(new BlockPos(par2, par3+l, par4)).getBlock().isOpaqueCube())
		{
			d2 = (double)(par3 + 1) + d0;
		}

		if (l == 1 && !par1.getBlockState(new BlockPos(par2, par3 - 1, par4)).getBlock().isOpaqueCube())
		{
			d2 = (double)(par3 + 0) - d0;
		}

		if (l == 2 && !par1.getBlockState(new BlockPos(par2, par3, par4 + 1)).getBlock().isOpaqueCube())
		{
			d3 = (double)(par4 + 1) + d0;
		}

		if (l == 3 && !par1.getBlockState(new BlockPos(par2, par3, par4 - 1)).getBlock().isOpaqueCube())
		{
			d3 = (double)(par4 + 0) - d0;
		}

		if (l == 4 && !par1.getBlockState(new BlockPos(par2 + 1, par3, par4)).getBlock().isOpaqueCube())
		{
			d1 = (double)(par2 + 1) + d0;
		}

		if (l == 5 && !par1.getBlockState(new BlockPos(par2 - 1, par3, par4)).getBlock().isOpaqueCube())
		{
			d1 = (double)(par2 + 0) - d0;
		}

		if (d1 < (double)par2 || d1 > (double)(par2 + 1) || d2 < 0.0D || d2 > (double)(par3 + 1) || d3 < (double)par4 || d3 > (double)(par4 + 1))
		{
			par1.spawnParticle(EnumParticleTypes.REDSTONE, d1, d2, d3, 0.0D, 0.0D, 0.0D);
		}
	}
}


 /**
     * Get the damage value that this Block should drop
     */
    public int damageDropped(IBlockState state)
    {
        return ((BlockDetector.EnumType)state.getValue(VARIANT)).getMetadata();
    }

    /**
     * returns a list of blocks with the same ID, but different meta (eg: wood returns 4 blocks)
     */
    @SideOnly(Side.CLIENT)
    public void getSubBlocks(Item itemIn, CreativeTabs tab, List list)
    {
        BlockDetector.EnumType[] aenumtype = BlockDetector.EnumType.values();
        int i = aenumtype.length;

        for (int j = 0; j < i; ++j)
        {
            BlockDetector.EnumType enumtype = aenumtype[j];
            list.add(new ItemStack(itemIn, 1, enumtype.getMetadata()));
        }
    }

    /**
     * Convert the given metadata into a BlockState for this Block
     */
    public IBlockState getStateFromMeta(int meta)
    {
        return this.getDefaultState().withProperty(VARIANT, BlockDetector.EnumType.byMetadata(meta));
    }

    /**
     * Convert the BlockState into the correct metadata value
     */
    public int getMetaFromState(IBlockState state)
    {
        return ((BlockDetector.EnumType)state.getValue(VARIANT)).getMetadata();
    }

    protected BlockState createBlockState()
    {
        return new BlockState(this, new IProperty[] {VARIANT});
    }

    public static enum EnumType implements IStringSerializable
    {
        LV1(0, "lv1"),
        LV2(1, "lv2"),
        LV3(2, "lv3");
        private static final BlockDetector.EnumType[] META_LOOKUP = new BlockDetector.EnumType[values().length];
        private final int meta;
        private final String name;
        private final String unlocalizedName;


        private EnumType(int meta, String name)
        {
            this(meta, name, name);
        }

        private EnumType(int meta, String name, String unlocalizedName)
        {
            this.meta = meta;
            this.name = name;
            this.unlocalizedName = unlocalizedName;
        }

        public int getMetadata()
        {
            return this.meta;
        }

        public String toString()
        {
            return this.name;
        }

        public static BlockDetector.EnumType byMetadata(int meta)
        {
            if (meta < 0 || meta >= META_LOOKUP.length)
            {
                meta = 0;
            }

            return META_LOOKUP[meta];
        }

        public String getName()
        {
            return this.name;
        }

        public String getUnlocalizedName()
        {
            return this.unlocalizedName;
        }

        static
        {
            BlockDetector.EnumType[] var0 = values();
            int var1 = var0.length;

            for (int var2 = 0; var2 < var1; ++var2)
            {
                BlockDetector.EnumType var3 = var0[var2];
                META_LOOKUP[var3.getMetadata()] = var3;
            }
        }
    }


}

 

And this is the tile entity

 

package mw.entities.tileentity;

import java.util.UUID;

import mw.blocks.BlockDynamicLamp;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;
import net.minecraft.server.gui.IUpdatePlayerListBox;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;

public class TileEntityDetector extends TileEntity
{
private UUID player;
public TileEntityDetector() {
	super();
}

public void setUUID(UUID par1)
{
	this.player = par1;
}

public UUID getUUID()
{
	return this.player;
}

public void readFromNBT(NBTTagCompound compound)
    {
        super.readFromNBT(compound);
        NBTTagList nbttaglist = new NBTTagList();
        this.player = UUID.fromString(compound.getString("Player")); 
    }

    public void writeToNBT(NBTTagCompound compound)
    {
        super.writeToNBT(compound);
        NBTTagList nbttaglist = new NBTTagList();
        compound.setString("Player", this.player.toString());
    }
}

 

Also here's a short video to explain better how the block works right now :)

https://www.youtube.com/watch?v=CrdJvXmufNQ

Don't blame me if i always ask for your help. I just want to learn to be better :)

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.

Announcements



  • Recently Browsing

    • No registered users viewing this page.
  • Posts

    • when i enter my bf's server after it does all the loading, encrypting a message popps up: "Internal Exception: java.lang.IndexOutOfBoundaException: index: 4, length: 13996 (expected: range(0, 800))"  one time i saw myself in the server but then got kicked out with the same message. My boyfriend's POV is me joining and leaving the server. I play on 1.19.2 version.  i think i t may be an issue with a mod me and bf recently updated.
    • I am trying to install fear nightfall mod pack on curseforge but it keeps saying error forge modloader installation falied but I played it a week ago can someone please help.
    • Found the solution, will be closing this soon. The Minecraft mining overlay can be rendered using: "serverplayer.connection.send(new ClientboundBlockDestructionPacket(serverplayer.getId(), blockpos, i));" Everything else is completely unnecessary, and I was making this harder than it had to be.
    • [17:35:03] [main/INFO] [cp.mo.mo.Launcher/MODLAUNCHER]: ModLauncher running: args [--launchTarget, forgeclientuserdev, --version, MOD_DEV, --assetIndex, 5, --assetsDir, C:\Users\moraw\.gradle\caches\forge_gradle\assets, --gameDir, ., --fml.forgeVersion, 47.3.0, --fml.mcVersion, 1.20.1, --fml.forgeGroup, net.minecraftforge, --fml.mcpVersion, 20230612.114412] [17:35:03] [main/INFO] [cp.mo.mo.Launcher/MODLAUNCHER]: ModLauncher 10.0.9+10.0.9+main.dcd20f30 starting: java version 17.0.12 by Eclipse Adoptium; OS Windows 10 arch amd64 version 10.0 [17:35:03] [main/DEBUG] [cp.mo.mo.LaunchServiceHandler/MODLAUNCHER]: Found launch services [fmlclientdev,forgeclient,minecraft,forgegametestserverdev,fmlserveruserdev,fmlclient,fmldatauserdev,forgeserverdev,forgeserveruserdev,forgeclientdev,forgeclientuserdev,forgeserver,forgedatadev,fmlserver,fmlclientuserdev,fmlserverdev,forgedatauserdev,testharness,forgegametestserveruserdev] [17:35:03] [main/DEBUG] [cp.mo.mo.NameMappingServiceHandler/MODLAUNCHER]: Found naming services : [srgtomcp] [17:35:03] [main/DEBUG] [cp.mo.mo.LaunchPluginHandler/MODLAUNCHER]: Found launch plugins: [mixin,eventbus,slf4jfixer,object_holder_definalize,runtime_enum_extender,capability_token_subclass,accesstransformer,runtimedistcleaner] [17:35:03] [main/DEBUG] [cp.mo.mo.TransformationServicesHandler/MODLAUNCHER]: Discovering transformation services [17:35:03] [main/DEBUG] [ne.mi.fm.lo.FMLPaths/CORE]: Path GAMEDIR is C:\Users\moraw\Documents\Livestock\run [17:35:03] [main/DEBUG] [ne.mi.fm.lo.FMLPaths/CORE]: Path MODSDIR is C:\Users\moraw\Documents\Livestock\run\mods [17:35:03] [main/DEBUG] [ne.mi.fm.lo.FMLPaths/CORE]: Path CONFIGDIR is C:\Users\moraw\Documents\Livestock\run\config [17:35:03] [main/DEBUG] [ne.mi.fm.lo.FMLPaths/CORE]: Path FMLCONFIG is C:\Users\moraw\Documents\Livestock\run\config\fml.toml [17:35:03] [main/DEBUG] [cp.mo.mo.TransformationServicesHandler/MODLAUNCHER]: Found additional transformation services from discovery services: [17:35:03] [main/INFO] [ne.mi.fm.lo.ImmediateWindowHandler/]: Loading ImmediateWindowProvider fmlearlywindow [17:35:03] [main/INFO] [EARLYDISPLAY/]: Trying GL version 4.6 [17:35:03] [main/INFO] [EARLYDISPLAY/]: Requested GL version 4.6 got version 4.6 [17:35:03] [main/DEBUG] [cp.mo.mo.TransformationServicesHandler/MODLAUNCHER]: Found transformer services : [mixin,fml] [17:35:03] [main/DEBUG] [cp.mo.mo.TransformationServicesHandler/MODLAUNCHER]: Transformation services loading [17:35:03] [main/DEBUG] [cp.mo.mo.TransformationServiceDecorator/MODLAUNCHER]: Loading service mixin [17:35:03] [main/DEBUG] [cp.mo.mo.TransformationServiceDecorator/MODLAUNCHER]: Loaded service mixin [17:35:03] [main/DEBUG] [cp.mo.mo.TransformationServiceDecorator/MODLAUNCHER]: Loading service fml [17:35:03] [main/DEBUG] [ne.mi.fm.lo.LauncherVersion/CORE]: Found FMLLauncher version 1.0 [17:35:03] [main/DEBUG] [ne.mi.fm.lo.FMLLoader/CORE]: FML 1.0 loading [17:35:03] [main/DEBUG] [ne.mi.fm.lo.FMLLoader/CORE]: FML found ModLauncher version : 10.0.9+10.0.9+main.dcd20f30 [17:35:03] [main/DEBUG] [ne.mi.fm.lo.FMLLoader/CORE]: FML found AccessTransformer version : 8.0.4+66+master.c09db6d7 [17:35:03] [main/DEBUG] [ne.mi.fm.lo.FMLLoader/CORE]: FML found EventBus version : 6.0.5+6.0.5+master.eb8e549b [17:35:03] [main/DEBUG] [ne.mi.fm.lo.FMLLoader/CORE]: Found Runtime Dist Cleaner [17:35:03] [main/DEBUG] [ne.mi.fm.lo.FMLLoader/CORE]: FML found CoreMod version : 5.1.6 [17:35:03] [main/DEBUG] [ne.mi.fm.lo.FMLLoader/CORE]: Found ForgeSPI package implementation version 7.0.1+7.0.1+master.d2b38bf6 [17:35:03] [main/DEBUG] [ne.mi.fm.lo.FMLLoader/CORE]: Found ForgeSPI package specification 5 [17:35:03] [main/DEBUG] [cp.mo.mo.TransformationServiceDecorator/MODLAUNCHER]: Loaded service fml [17:35:03] [main/DEBUG] [cp.mo.mo.TransformationServicesHandler/MODLAUNCHER]: Configuring option handling for services [17:35:03] [main/DEBUG] [cp.mo.mo.TransformationServicesHandler/MODLAUNCHER]: Transformation services initializing [17:35:03] [main/DEBUG] [cp.mo.mo.TransformationServiceDecorator/MODLAUNCHER]: Initializing transformation service mixin [17:35:03] [main/DEBUG] [mixin/]: MixinService [ModLauncher] was successfully booted in cpw.mods.cl.ModuleClassLoader@34b7ac2f [17:35:04] [main/INFO] [mixin/]: SpongePowered MIXIN Subsystem Version=0.8.5 Source=union:/C:/Users/moraw/.gradle/caches/modules-2/files-2.1/org.spongepowered/mixin/0.8.5/9d1c0c3a304ae6697ecd477218fa61b850bf57fc/mixin-0.8.5.jar%23126!/ Service=ModLauncher Env=CLIENT [17:35:04] [main/DEBUG] [mixin/]: Initialising Mixin Platform Manager [17:35:04] [main/DEBUG] [mixin/]: Adding mixin platform agents for container ModLauncher Root Container(ModLauncher:4f56a0a2) [17:35:04] [main/DEBUG] [mixin/]: Instancing new MixinPlatformAgentMinecraftForge for ModLauncher Root Container(ModLauncher:4f56a0a2) [17:35:04] [main/DEBUG] [mixin/]: MixinPlatformAgentMinecraftForge rejected container ModLauncher Root Container(ModLauncher:4f56a0a2) [17:35:04] [main/DEBUG] [mixin/]: Instancing new MixinPlatformAgentDefault for ModLauncher Root Container(ModLauncher:4f56a0a2) [17:35:04] [main/DEBUG] [mixin/]: MixinPlatformAgentDefault accepted container ModLauncher Root Container(ModLauncher:4f56a0a2) [17:35:04] [main/DEBUG] [cp.mo.mo.TransformationServiceDecorator/MODLAUNCHER]: Initialized transformation service mixin [17:35:04] [main/DEBUG] [cp.mo.mo.TransformationServiceDecorator/MODLAUNCHER]: Initializing transformation service fml [17:35:04] [main/DEBUG] [ne.mi.fm.lo.FMLServiceProvider/CORE]: Setting up basic FML game directories [17:35:04] [main/DEBUG] [ne.mi.fm.lo.FMLPaths/CORE]: Path GAMEDIR is C:\Users\moraw\Documents\Livestock\run [17:35:04] [main/DEBUG] [ne.mi.fm.lo.FMLPaths/CORE]: Path MODSDIR is C:\Users\moraw\Documents\Livestock\run\mods [17:35:04] [main/DEBUG] [ne.mi.fm.lo.FMLPaths/CORE]: Path CONFIGDIR is C:\Users\moraw\Documents\Livestock\run\config [17:35:04] [main/DEBUG] [ne.mi.fm.lo.FMLPaths/CORE]: Path FMLCONFIG is C:\Users\moraw\Documents\Livestock\run\config\fml.toml [17:35:04] [main/DEBUG] [ne.mi.fm.lo.FMLServiceProvider/CORE]: Loading configuration [17:35:04] [main/DEBUG] [ne.mi.fm.lo.FMLServiceProvider/CORE]: Preparing ModFile [17:35:04] [main/DEBUG] [ne.mi.fm.lo.FMLServiceProvider/CORE]: Preparing launch handler [17:35:04] [main/DEBUG] [ne.mi.fm.lo.FMLLoader/CORE]: Using forgeclientuserdev as launch service [17:35:04] [pool-2-thread-1/INFO] [EARLYDISPLAY/]: GL info: Intel(R) Iris(R) Xe Graphics GL version 4.6.0 - Build 31.0.101.5594, Intel [17:35:04] [main/DEBUG] [ne.mi.fm.lo.FMLLoader/CORE]: Received command line version data : VersionInfo[forgeVersion=47.3.0, mcVersion=1.20.1, mcpVersion=20230612.114412, forgeGroup=net.minecraftforge] [17:35:04] [main/DEBUG] [cp.mo.mo.TransformationServiceDecorator/MODLAUNCHER]: Initialized transformation service fml [17:35:04] [main/DEBUG] [cp.mo.mo.NameMappingServiceHandler/MODLAUNCHER]: Current naming domain is 'mcp' [17:35:04] [main/DEBUG] [cp.mo.mo.NameMappingServiceHandler/MODLAUNCHER]: Identified name mapping providers {srg=srgtomcp:1234} [17:35:04] [main/DEBUG] [cp.mo.mo.TransformationServicesHandler/MODLAUNCHER]: Transformation services begin scanning [17:35:04] [main/DEBUG] [cp.mo.mo.TransformationServiceDecorator/MODLAUNCHER]: Beginning scan trigger - transformation service mixin [17:35:04] [main/DEBUG] [cp.mo.mo.TransformationServiceDecorator/MODLAUNCHER]: End scan trigger - transformation service mixin [17:35:04] [main/DEBUG] [cp.mo.mo.TransformationServiceDecorator/MODLAUNCHER]: Beginning scan trigger - transformation service fml [17:35:04] [main/DEBUG] [ne.mi.fm.lo.FMLServiceProvider/CORE]: Initiating mod scan [17:35:04] [main/DEBUG] [ne.mi.fm.lo.mo.ModListHandler/CORE]: Found mod coordinates from lists: [] [17:35:04] [main/DEBUG] [ne.mi.fm.lo.mo.ModDiscoverer/CORE]: Found Mod Locators : (mods folder:null),(maven libs:null),(exploded directory:null),(minecraft:null),(userdev classpath:null) [17:35:04] [main/DEBUG] [ne.mi.fm.lo.mo.ModDiscoverer/CORE]: Found Dependency Locators : (JarInJar:null) [17:35:04] [main/DEBUG] [ne.mi.fm.lo.ta.CommonLaunchHandler/CORE]: Got mod coordinates livestock%%C:/Users/moraw/Documents/Livestock\build\resources\main;livestock%%C:/Users/moraw/Documents/Livestock\build\classes\java\main from env [17:35:04] [main/DEBUG] [ne.mi.fm.lo.ta.CommonLaunchHandler/CORE]: Found supplied mod coordinates [{livestock=[C:\Users\moraw\Documents\Livestock\build\resources\main, C:\Users\moraw\Documents\Livestock\build\classes\java\main]}] [17:35:04] [main/DEBUG] [ne.mi.fm.lo.mo.ModFileInfo/LOADING]: Found valid mod file forge-1.20.1-47.3.0_mapped_parchment_2023.09.03-1.20.1.jar with {minecraft} mods - versions {1.20.1} [17:35:04] [main/DEBUG] [ne.mi.fm.lo.mo.ModFileParser/LOADING]: Considering mod file candidate C:\Users\moraw\.gradle\caches\modules-2\files-2.1\net.minecraftforge\fmlcore\1.20.1-47.3.0\3b6be96aba3e323f3c918e8ef6a96312d82d76ad\fmlcore-1.20.1-47.3.0.jar [17:35:04] [main/WARN] [ne.mi.fm.lo.mo.ModFileParser/LOADING]: Mod file C:\Users\moraw\.gradle\caches\modules-2\files-2.1\net.minecraftforge\fmlcore\1.20.1-47.3.0\3b6be96aba3e323f3c918e8ef6a96312d82d76ad\fmlcore-1.20.1-47.3.0.jar is missing mods.toml file [17:35:04] [main/DEBUG] [ne.mi.fm.lo.mo.ModFileParser/LOADING]: Considering mod file candidate C:\Users\moraw\.gradle\caches\modules-2\files-2.1\net.minecraftforge\javafmllanguage\1.20.1-47.3.0\d7ebc62120f202109e300e084ca1a31a7b946a62\javafmllanguage-1.20.1-47.3.0.jar [17:35:04] [main/WARN] [ne.mi.fm.lo.mo.ModFileParser/LOADING]: Mod file C:\Users\moraw\.gradle\caches\modules-2\files-2.1\net.minecraftforge\javafmllanguage\1.20.1-47.3.0\d7ebc62120f202109e300e084ca1a31a7b946a62\javafmllanguage-1.20.1-47.3.0.jar is missing mods.toml file [17:35:04] [main/DEBUG] [ne.mi.fm.lo.mo.ModFileParser/LOADING]: Considering mod file candidate C:\Users\moraw\.gradle\caches\modules-2\files-2.1\net.minecraftforge\lowcodelanguage\1.20.1-47.3.0\1bf3e845ea0ce750096da8c71c8364b188ab74d4\lowcodelanguage-1.20.1-47.3.0.jar [17:35:04] [main/WARN] [ne.mi.fm.lo.mo.ModFileParser/LOADING]: Mod file C:\Users\moraw\.gradle\caches\modules-2\files-2.1\net.minecraftforge\lowcodelanguage\1.20.1-47.3.0\1bf3e845ea0ce750096da8c71c8364b188ab74d4\lowcodelanguage-1.20.1-47.3.0.jar is missing mods.toml file [17:35:04] [main/DEBUG] [ne.mi.fm.lo.mo.ModFileParser/LOADING]: Considering mod file candidate C:\Users\moraw\.gradle\caches\modules-2\files-2.1\net.minecraftforge\mclanguage\1.20.1-47.3.0\6093682e943ddccbabf70539319d7f2fe64db2e7\mclanguage-1.20.1-47.3.0.jar [17:35:04] [main/WARN] [ne.mi.fm.lo.mo.ModFileParser/LOADING]: Mod file C:\Users\moraw\.gradle\caches\modules-2\files-2.1\net.minecraftforge\mclanguage\1.20.1-47.3.0\6093682e943ddccbabf70539319d7f2fe64db2e7\mclanguage-1.20.1-47.3.0.jar is missing mods.toml file [17:35:04] [main/DEBUG] [ne.mi.fm.lo.mo.ModFileParser/LOADING]: Considering mod file candidate C:\Users\moraw\Documents\Livestock\build\resources\main [17:35:04] [main/DEBUG] [ne.mi.fm.lo.mo.ModFileInfo/LOADING]: Found valid mod file main with {livestock} mods - versions {0.01-1.20.1} [17:35:04] [main/DEBUG] [ne.mi.fm.lo.mo.ModFileParser/LOADING]: Considering mod file candidate / [17:35:04] [main/DEBUG] [ne.mi.fm.lo.mo.ModFileInfo/LOADING]: Found valid mod file with {forge} mods - versions {47.3.0} [17:35:04] [main/DEBUG] [ne.mi.fm.lo.mo.AbstractJarFileDependencyLocator/]: Failed to load resource META-INF\jarjar\metadata.json from forge-1.20.1-47.3.0_mapped_parchment_2023.09.03-1.20.1.jar, it does not contain dependency information. [17:35:04] [main/DEBUG] [ne.mi.fm.lo.mo.AbstractJarFileDependencyLocator/]: Failed to load resource META-INF\jarjar\metadata.json from , it does not contain dependency information. [17:35:04] [main/DEBUG] [ne.mi.fm.lo.mo.AbstractJarFileDependencyLocator/]: Failed to load resource META-INF\jarjar\metadata.json from main, it does not contain dependency information. [17:35:04] [main/DEBUG] [ne.mi.fm.lo.mo.AbstractJarFileDependencyLocator/]: Failed to load resource META-INF\jarjar\metadata.json from mclanguage-1.20.1-47.3.0.jar, it does not contain dependency information. [17:35:04] [main/DEBUG] [ne.mi.fm.lo.mo.AbstractJarFileDependencyLocator/]: Failed to load resource META-INF\jarjar\metadata.json from javafmllanguage-1.20.1-47.3.0.jar, it does not contain dependency information. [17:35:04] [main/DEBUG] [ne.mi.fm.lo.mo.AbstractJarFileDependencyLocator/]: Failed to load resource META-INF\jarjar\metadata.json from fmlcore-1.20.1-47.3.0.jar, it does not contain dependency information. [17:35:04] [main/DEBUG] [ne.mi.fm.lo.mo.AbstractJarFileDependencyLocator/]: Failed to load resource META-INF\jarjar\metadata.json from lowcodelanguage-1.20.1-47.3.0.jar, it does not contain dependency information. [17:35:04] [main/INFO] [ne.mi.fm.lo.mo.JarInJarDependencyLocator/]: No dependencies to load found. Skipping! [17:35:04] [main/DEBUG] [ne.mi.fm.lo.mo.ModFileInfo/LOADING]: Found valid mod file forge-1.20.1-47.3.0_mapped_parchment_2023.09.03-1.20.1.jar with {minecraft} mods - versions {1.20.1} [17:35:04] [main/DEBUG] [ne.mi.fm.lo.mo.ModFile/LOADING]: Loading mod file C:\Users\moraw\.gradle\caches\forge_gradle\minecraft_user_repo\net\minecraftforge\forge\1.20.1-47.3.0_mapped_parchment_2023.09.03-1.20.1\forge-1.20.1-47.3.0_mapped_parchment_2023.09.03-1.20.1.jar with languages [LanguageSpec[languageName=minecraft, acceptedVersions=1]] [17:35:04] [main/DEBUG] [ne.mi.fm.lo.mo.ModFileParser/LOADING]: Considering mod file candidate / [17:35:04] [main/DEBUG] [ne.mi.fm.lo.mo.ModFileInfo/LOADING]: Found valid mod file with {forge} mods - versions {47.3.0} [17:35:04] [main/DEBUG] [ne.mi.fm.lo.mo.ModFile/LOADING]: Loading mod file / with languages [LanguageSpec[languageName=javafml, acceptedVersions=[24,]]] [17:35:04] [main/DEBUG] [ne.mi.fm.lo.mo.ModFileParser/LOADING]: Found coremod field_to_method with Javascript path coremods/field_to_method.js [17:35:04] [main/DEBUG] [ne.mi.fm.lo.mo.ModFileParser/LOADING]: Found coremod field_to_instanceof with Javascript path coremods/field_to_instanceof.js [17:35:04] [main/DEBUG] [ne.mi.fm.lo.mo.ModFileParser/LOADING]: Found coremod add_bouncer_method with Javascript path coremods/add_bouncer_method.js [17:35:04] [main/DEBUG] [ne.mi.fm.lo.mo.ModFileParser/LOADING]: Found coremod method_redirector with Javascript path coremods/method_redirector.js [17:35:04] [main/DEBUG] [ne.mi.fm.lo.mo.ModFile/LOADING]: Found coremod coremods/field_to_method.js [17:35:04] [main/DEBUG] [ne.mi.fm.lo.mo.ModFile/LOADING]: Found coremod coremods/field_to_instanceof.js [17:35:04] [main/DEBUG] [ne.mi.fm.lo.mo.ModFile/LOADING]: Found coremod coremods/add_bouncer_method.js [17:35:04] [main/DEBUG] [ne.mi.fm.lo.mo.ModFile/LOADING]: Found coremod coremods/method_redirector.js [17:35:04] [main/DEBUG] [ne.mi.fm.lo.mo.ModFileParser/LOADING]: Considering mod file candidate C:\Users\moraw\Documents\Livestock\build\resources\main [17:35:04] [main/DEBUG] [ne.mi.fm.lo.mo.ModFileInfo/LOADING]: Found valid mod file main with {livestock} mods - versions {0.01-1.20.1} [17:35:04] [main/DEBUG] [ne.mi.fm.lo.mo.ModFile/LOADING]: Loading mod file C:\Users\moraw\Documents\Livestock\build\resources\main with languages [LanguageSpec[languageName=javafml, acceptedVersions=[47,)]] [17:35:04] [main/DEBUG] [cp.mo.mo.TransformationServiceDecorator/MODLAUNCHER]: End scan trigger - transformation service fml [17:35:04] [main/DEBUG] [ne.mi.fm.lo.LanguageLoadingProvider/CORE]: Found 3 language providers [17:35:04] [main/DEBUG] [ne.mi.fm.lo.LanguageLoadingProvider/CORE]: Found language provider minecraft, version 1.0 [17:35:04] [main/DEBUG] [ne.mi.fm.lo.LanguageLoadingProvider/CORE]: Found language provider lowcodefml, version 47 [17:35:04] [main/DEBUG] [ne.mi.fm.lo.LanguageLoadingProvider/CORE]: Found language provider javafml, version 47 [17:35:04] [main/DEBUG] [ne.mi.fm.lo.ModSorter/]: Configured system mods: [minecraft, forge] [17:35:04] [main/DEBUG] [ne.mi.fm.lo.ModSorter/]: Found system mod: minecraft [17:35:04] [main/DEBUG] [ne.mi.fm.lo.ModSorter/]: Found system mod: forge [17:35:04] [main/DEBUG] [ne.mi.fm.lo.ModSorter/LOADING]: Found 2 mod requirements (2 mandatory, 0 optional) [17:35:04] [main/DEBUG] [ne.mi.fm.lo.ModSorter/LOADING]: Found 0 mod requirements missing (0 mandatory, 0 optional) [17:35:05] [main/DEBUG] [ne.mi.fm.lo.MCPNamingService/CORE]: Loaded 34318 method mappings from methods.csv [17:35:05] [main/DEBUG] [ne.mi.fm.lo.MCPNamingService/CORE]: Loaded 31014 field mappings from fields.csv [17:35:05] [main/DEBUG] [cp.mo.mo.TransformationServicesHandler/MODLAUNCHER]: Transformation services loading transformers [17:35:05] [main/DEBUG] [cp.mo.mo.TransformationServiceDecorator/MODLAUNCHER]: Initializing transformers for transformation service mixin [17:35:05] [main/DEBUG] [cp.mo.mo.TransformationServiceDecorator/MODLAUNCHER]: Initialized transformers for transformation service mixin [17:35:05] [main/DEBUG] [cp.mo.mo.TransformationServiceDecorator/MODLAUNCHER]: Initializing transformers for transformation service fml [17:35:05] [main/DEBUG] [ne.mi.fm.lo.FMLServiceProvider/CORE]: Loading coremod transformers [17:35:05] [main/DEBUG] [ne.mi.co.CoreModEngine/COREMOD]: Loading CoreMod from coremods/field_to_method.js [17:35:05] [main/DEBUG] [ne.mi.co.CoreModEngine/COREMOD]: CoreMod loaded successfully [17:35:05] [main/DEBUG] [ne.mi.co.CoreModEngine/COREMOD]: Loading CoreMod from coremods/field_to_instanceof.js [17:35:05] [main/DEBUG] [ne.mi.co.CoreModEngine/COREMOD]: CoreMod loaded successfully [17:35:05] [main/DEBUG] [ne.mi.co.CoreModEngine/COREMOD]: Loading CoreMod from coremods/add_bouncer_method.js [17:35:05] [main/DEBUG] [ne.mi.co.CoreModEngine/COREMOD]: CoreMod loaded successfully [17:35:05] [main/DEBUG] [ne.mi.co.CoreModEngine/COREMOD]: Loading CoreMod from coremods/method_redirector.js [17:35:05] [main/DEBUG] [ne.mi.co.CoreModEngine/COREMOD]: CoreMod loaded successfully [17:35:05] [main/DEBUG] [cp.mo.mo.TransformStore/MODLAUNCHER]: Adding transformer net.minecraftforge.coremod.transformer.CoreModClassTransformer@9b76b60 to Target : CLASS {Lnet/minecraft/world/level/biome/Biome;} {} {V} [17:35:05] [main/DEBUG] [cp.mo.mo.TransformStore/MODLAUNCHER]: Adding transformer net.minecraftforge.coremod.transformer.CoreModClassTransformer@493ac8d3 to Target : CLASS {Lnet/minecraft/world/level/levelgen/structure/Structure;} {} {V} [17:35:05] [main/DEBUG] [cp.mo.mo.TransformStore/MODLAUNCHER]: Adding transformer net.minecraftforge.coremod.transformer.CoreModClassTransformer@13dbed9e to Target : CLASS {Lnet/minecraft/world/effect/MobEffectInstance;} {} {V} [17:35:05] [main/DEBUG] [cp.mo.mo.TransformStore/MODLAUNCHER]: Adding transformer net.minecraftforge.coremod.transformer.CoreModClassTransformer@67531e3a to Target : CLASS {Lnet/minecraft/world/level/block/LiquidBlock;} {} {V} [17:35:05] [main/DEBUG] [cp.mo.mo.TransformStore/MODLAUNCHER]: Adding transformer net.minecraftforge.coremod.transformer.CoreModClassTransformer@2b38b1f to Target : CLASS {Lnet/minecraft/world/item/BucketItem;} {} {V} [17:35:05] [main/DEBUG] [cp.mo.mo.TransformStore/MODLAUNCHER]: Adding transformer net.minecraftforge.coremod.transformer.CoreModClassTransformer@1d50a7ca to Target : CLASS {Lnet/minecraft/world/level/block/StairBlock;} {} {V} [17:35:05] [main/DEBUG] [cp.mo.mo.TransformStore/MODLAUNCHER]: Adding transformer net.minecraftforge.coremod.transformer.CoreModClassTransformer@51ab1ee3 to Target : CLASS {Lnet/minecraft/world/level/block/FlowerPotBlock;} {} {V} [17:35:05] [main/DEBUG] [cp.mo.mo.TransformStore/MODLAUNCHER]: Adding transformer net.minecraftforge.coremod.transformer.CoreModClassTransformer@2e766822 to Target : CLASS {Lnet/minecraft/world/item/ItemStack;} {} {V} [17:35:05] [main/DEBUG] [cp.mo.mo.TransformStore/MODLAUNCHER]: Adding transformer net.minecraftforge.coremod.transformer.CoreModClassTransformer@3003e580 to Target : CLASS {Lnet/minecraft/network/play/client/CClientSettingsPacket;} {} {V} [17:35:05] [main/DEBUG] [cp.mo.mo.TransformStore/MODLAUNCHER]: Adding transformer net.minecraftforge.coremod.transformer.CoreModClassTransformer@28757abd to Target : CLASS {Lnet/minecraft/world/entity/monster/Evoker$EvokerSummonSpellGoal;} {} {V} [17:35:05] [main/DEBUG] [cp.mo.mo.TransformStore/MODLAUNCHER]: Adding transformer net.minecraftforge.coremod.transformer.CoreModClassTransformer@28757abd to Target : CLASS {Lnet/minecraft/world/entity/npc/CatSpawner;} {} {V} [17:35:05] [main/DEBUG] [cp.mo.mo.TransformStore/MODLAUNCHER]: Adding transformer net.minecraftforge.coremod.transformer.CoreModClassTransformer@28757abd to Target : CLASS {Lnet/minecraft/world/level/levelgen/structure/structures/OceanRuinPieces$OceanRuinPiece;} {} {V} [17:35:05] [main/DEBUG] [cp.mo.mo.TransformStore/MODLAUNCHER]: Adding transformer net.minecraftforge.coremod.transformer.CoreModClassTransformer@28757abd to Target : CLASS {Lnet/minecraft/world/entity/animal/horse/SkeletonTrapGoal;} {} {V} [17:35:05] [main/DEBUG] [cp.mo.mo.TransformStore/MODLAUNCHER]: Adding transformer net.minecraftforge.coremod.transformer.CoreModClassTransformer@28757abd to Target : CLASS {Lnet/minecraft/world/entity/ai/village/VillageSiege;} {} {V} [17:35:05] [main/DEBUG] [cp.mo.mo.TransformStore/MODLAUNCHER]: Adding transformer net.minecraftforge.coremod.transformer.CoreModClassTransformer@28757abd to Target : CLASS {Lnet/minecraft/world/entity/monster/Strider;} {} {V} [17:35:05] [main/DEBUG] [cp.mo.mo.TransformStore/MODLAUNCHER]: Adding transformer net.minecraftforge.coremod.transformer.CoreModClassTransformer@28757abd to Target : CLASS {Lnet/minecraft/world/entity/monster/Spider;} {} {V} [17:35:05] [main/DEBUG] [cp.mo.mo.TransformStore/MODLAUNCHER]: Adding transformer net.minecraftforge.coremod.transformer.CoreModClassTransformer@28757abd to Target : CLASS {Lnet/minecraft/world/entity/monster/ZombieVillager;} {} {V} [17:35:05] [main/DEBUG] [cp.mo.mo.TransformStore/MODLAUNCHER]: Adding transformer net.minecraftforge.coremod.transformer.CoreModClassTransformer@28757abd to Target : CLASS {Lnet/minecraft/world/level/NaturalSpawner;} {} {V} [17:35:05] [main/DEBUG] [cp.mo.mo.TransformStore/MODLAUNCHER]: Adding transformer net.minecraftforge.coremod.transformer.CoreModClassTransformer@28757abd to Target : CLASS {Lnet/minecraft/world/entity/npc/Villager;} {} {V} [17:35:05] [main/DEBUG] [cp.mo.mo.TransformStore/MODLAUNCHER]: Adding transformer net.minecraftforge.coremod.transformer.CoreModClassTransformer@28757abd to Target : CLASS {Lnet/minecraft/server/commands/RaidCommand;} {} {V} [17:35:05] [main/DEBUG] [cp.mo.mo.TransformStore/MODLAUNCHER]: Adding transformer net.minecraftforge.coremod.transformer.CoreModClassTransformer@28757abd to Target : CLASS {Lnet/minecraft/world/level/levelgen/structure/structures/SwampHutPiece;} {} {V} [17:35:05] [main/DEBUG] [cp.mo.mo.TransformStore/MODLAUNCHER]: Adding transformer net.minecraftforge.coremod.transformer.CoreModClassTransformer@28757abd to Target : CLASS {Lnet/minecraft/world/entity/monster/Zombie;} {} {V} [17:35:05] [main/DEBUG] [cp.mo.mo.TransformStore/MODLAUNCHER]: Adding transformer net.minecraftforge.coremod.transformer.CoreModClassTransformer@28757abd to Target : CLASS {Lnet/minecraft/world/entity/raid/Raid;} {} {V} [17:35:05] [main/DEBUG] [cp.mo.mo.TransformStore/MODLAUNCHER]: Adding transformer net.minecraftforge.coremod.transformer.CoreModClassTransformer@28757abd to Target : CLASS {Lnet/minecraft/world/level/levelgen/structure/structures/WoodlandMansionPieces$WoodlandMansionPiece;} {} {V} [17:35:05] [main/DEBUG] [cp.mo.mo.TransformStore/MODLAUNCHER]: Adding transformer net.minecraftforge.coremod.transformer.CoreModClassTransformer@28757abd to Target : CLASS {Lnet/minecraft/world/entity/EntityType;} {} {V} [17:35:05] [main/DEBUG] [cp.mo.mo.TransformStore/MODLAUNCHER]: Adding transformer net.minecraftforge.coremod.transformer.CoreModClassTransformer@28757abd to Target : CLASS {Lnet/minecraft/world/level/levelgen/PatrolSpawner;} {} {V} [17:35:05] [main/DEBUG] [cp.mo.mo.TransformStore/MODLAUNCHER]: Adding transformer net.minecraftforge.coremod.transformer.CoreModClassTransformer@28757abd to Target : CLASS {Lnet/minecraft/world/level/levelgen/PhantomSpawner;} {} {V} [17:35:05] [main/DEBUG] [cp.mo.mo.TransformStore/MODLAUNCHER]: Adding transformer net.minecraftforge.coremod.transformer.CoreModClassTransformer@28757abd to Target : CLASS {Lnet/minecraft/world/level/levelgen/structure/structures/OceanMonumentPieces$OceanMonumentPiece;} {} {V} [17:35:05] [main/DEBUG] [cp.mo.mo.TransformStore/MODLAUNCHER]: Adding transformer net.minecraftforge.coremod.transformer.CoreModClassTransformer@28757abd to Target : CLASS {Lnet/minecraft/server/commands/SummonCommand;} {} {V} [17:35:05] [main/DEBUG] [cp.mo.mo.TransformStore/MODLAUNCHER]: Adding transformer net.minecraftforge.coremod.transformer.CoreModClassTransformer@28757abd to Target : CLASS {Lnet/minecraft/world/level/levelgen/structure/templatesystem/StructureTemplate;} {} {V} [17:35:05] [main/DEBUG] [cp.mo.mo.TransformStore/MODLAUNCHER]: Adding transformer net.minecraftforge.coremod.transformer.CoreModClassTransformer@28757abd to Target : CLASS {Lnet/minecraft/world/entity/animal/frog/Tadpole;} {} {V} [17:35:05] [main/DEBUG] [cp.mo.mo.TransformationServiceDecorator/MODLAUNCHER]: Initialized transformers for transformation service fml Exception in thread "main" java.lang.module.ResolutionException: Modules classes and livestock export package net.s3alampr3y.livestockmod.entity.client to module minecraft at java.base/java.lang.module.Resolver.resolveFail(Resolver.java:901) at java.base/java.lang.module.Resolver.failTwoSuppliers(Resolver.java:815) at java.base/java.lang.module.Resolver.checkExportSuppliers(Resolver.java:736) at java.base/java.lang.module.Resolver.finish(Resolver.java:380) at java.base/java.lang.module.Configuration.<init>(Configuration.java:140) at java.base/java.lang.module.Configuration.resolveAndBind(Configuration.java:494) at MC-BOOTSTRAP/[email protected]/cpw.mods.modlauncher.ModuleLayerHandler.buildLayer(ModuleLayerHandler.java:75) at MC-BOOTSTRAP/[email protected]/cpw.mods.modlauncher.TransformationServicesHandler.buildTransformingClassLoader(TransformationServicesHandler.java:60) at MC-BOOTSTRAP/[email protected]/cpw.mods.modlauncher.Launcher.run(Launcher.java:106) at MC-BOOTSTRAP/[email protected]/cpw.mods.modlauncher.Launcher.main(Launcher.java:78) at MC-BOOTSTRAP/[email protected]/cpw.mods.modlauncher.BootstrapLaunchConsumer.accept(BootstrapLaunchConsumer.java:26) at MC-BOOTSTRAP/[email protected]/cpw.mods.modlauncher.BootstrapLaunchConsumer.accept(BootstrapLaunchConsumer.java:23) at [email protected]/cpw.mods.bootstraplauncher.BootstrapLauncher.main(BootstrapLauncher.java:141) Process finished with exit code 1  
  • Topics

×
×
  • Create New...

Important Information

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