Jump to content

Editing Player Class (Custom Player Class?)


FoxxCommand

Recommended Posts

So I'm aware that in Forge you're not allowed to edit the base class files and you're definitely not allowed to edit the player class file (found out the hard way) so I'm wondering what's the best way to edit player functions and what not in a custom mod or if it's possible to make a custom player file and get the game to use that, any ideas or help?

Link to comment
Share on other sites

There are a few ways of doing this, some involving reflection or being a core mod and utilizing the asm library. Depending on your skill with java this can take a while to get into.

 

On the other hand, depending on why you want to use this there may be easier and better ways to a achive your goal :) so what do ya need it for?

If you guys dont get it.. then well ya.. try harder...

Link to comment
Share on other sites

Well I code my own games in Java and for Android (Which uses Java) and I'm pretty well versed in it, I just suck at online/multiplayer stuff

 

Pretty much these bunch of items use like 'mana' and whenever the player uses them it uses their mana and then goes on a cooldown and does things according to what level the player is, I also need to cap the level the player can reach as well as doing some stuff to it's inventory like not drop the stuff when they die and do things like "When holding shift they go invisible" and have like custom player models as well

Link to comment
Share on other sites

I see.. think you could help me with an example class or something? like would it be like

 

package whatever

public class CustomPlayer extends IExtendedEntityProperties 
{

        private int mana;
   
       public void setMana(int m)
       {
                 mana = m;
       }

       public int getMana()
       {
                 return mana;
        }
}

 

and then how would I use those functions in an item would I just use a normal player statement and it'll fill itself out for me?

Link to comment
Share on other sites

So I read up a bit on what you said, but is it possible to use custom functions with it? Because I did everything right I assume but when I use a custome function to get a variable or change it the whole thing crashes

 

How I registered it

public class EventHookContainerClass
{
@ForgeSubscribe
public void entityConstructed(EntityConstructing event)
{
	if (event.entity instanceof EntityLiving)
	{
		//event.entity.dropItem(Item.arrow.itemID, 1);
		event.entity.registerExtendedProperties("custom Player", new EntityCustomPlayer(event.entity.worldObj));
	}
}

@ForgeSubscribe
public void entityHurt(LivingHurtEvent event)
{
	if (event.entity instanceof EntityLiving)
	{
		if (((EntityCustomPlayer) event.entity).getMana() >= 5)
		{
			((EntityLiving) event.entity).addPotionEffect(new PotionEffect(Potion.moveSlowdown.id, 1000));
		}
	}
}
}

 

the 'custom entity' class

public class EntityCustomPlayer extends Entity implements IExtendedEntityProperties
{
private int mana;

public EntityCustomPlayer(World worldObj)
{
	//this.mana = 0;
	super(worldObj);
}

public void setMana(int m)
{
	this.mana = m;
}

public int getMana()
{
	return this.mana;
}

@Override
public void saveNBTData(NBTTagCompound compound) {
	// TODO Auto-generated method stub

}

@Override
public void loadNBTData(NBTTagCompound compound) {
	// TODO Auto-generated method stub

}

@Override
public void init(Entity entity, World world)
{
	mana = 0;

}

@Override
protected void entityInit() {
	// TODO Auto-generated method stub

}

@Override
protected void readEntityFromNBT(NBTTagCompound nbttagcompound) {
	// TODO Auto-generated method stub

}

@Override
protected void writeEntityToNBT(NBTTagCompound nbttagcompound) {
	// TODO Auto-generated method stub

}
}

Link to comment
Share on other sites

I'm not sure what the problem is but whenever I try to use one of the functions it gives me an error and crashes the game, something about and uninitialized variable or something, and I know it's the functions causing it because when I take it out I don't get the errors

Link to comment
Share on other sites

Just throwing my two cents in, You could create your own extension of EntityPlayerMP and use that to access values. I've done the same with my own extension of WorldServer so I could remove random block ticking and modify spawning layouts and a few other tweaks that can't be done in a world provider.

However you'd have to wrap all of the spawned players, and accessing the variables which is a tad more intensive that physically setting a world. And then you would have the issue of accessing the values in a non EntityPlayerMP scenario. This is why forge is great.

 

Also post your crash report

I think its my java of the variables.

Link to comment
Share on other sites

I'm not sure what the problem is but whenever I try to use one of the functions it gives me an error and crashes the game, something about and uninitialized variable or something, and I know it's the functions causing it because when I take it out I don't get the errors

 

When eclipse says you have an uninitialized variable that means nowhere in your code there is something that says variable x equals something. To solve it either have your uninitialized variable as a parameter or just set it equal to 0, or null and then have another method change it later on. Hoped that made sense.  :D

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

    • Wait guys, I still don't don't understand... I shall send my code -- Define the function to decrease hunger local function decreaseHunger(player)     local currentHunger = player.getHunger()          -- Check if hunger is not already zero     if currentHunger > 0 then         player.setHunger(currentHunger - 1)     end end -- Register event to decrease hunger over time script.registerEvent(EntityPlayer, function(player)     while true do         -- Decrease hunger every few seconds         decreaseHunger(player)         script.sleep(1000) -- Sleep for 1 second     end end)     Any help appriecated. It's been a while since I learnt Javascript or whatever Minecraft is made with... ... ... ... Nicknotname Hungerinpeaceful xx
    • good days  i get this error: java.lang.ClassCastException: class net.minecraft.client.player.LocalPlayer cannot be cast to class net.minecraftforge.common.extensions.IForgeServerPlayer (net.minecraft.client.player.LocalPlayer is in module minecraft@1.20.4 of loader 'TRANSFORMER' @3e8b3b79; net.minecraftforge.common.extensions.IForgeServerPlayer is in module forge@49.0.26 of loader 'TRANSFORMER' @3e8b3b79)     at mercmod.blocks.classes.panel_whit_entity_inside.use(panel_whit_entity_inside.java:576) ~[main/:?] {re:classloading}     at net.minecraft.world.level.block.state.BlockBehaviour$BlockStateBase.use(BlockBehaviour.java:826) ~[forge-1.20.4-49.0.26_mapped_official_1.20.4-recomp.jar:?] {re:classloading}     at net.minecraft.client.multiplayer.MultiPlayerGameMode.performUseItemOn(MultiPlayerGameMode.java:324) ~[forge-1.20.4-49.0.26_mapped_official_1.20.4-recomp.jar:?] {re:classloading,pl:runtimedistcleaner:A}     at net.minecraft.client.multiplayer.MultiPlayerGameMode.lambda$useItemOn$4(MultiPlayerGameMode.java:292) ~[forge-1.20.4-49.0.26_mapped_official_1.20.4-recomp.jar:?] {re:classloading,pl:runtimedistcleaner:A}     at net.minecraft.client.multiplayer.MultiPlayerGameMode.startPrediction(MultiPlayerGameMode.java:251) ~[forge-1.20.4-49.0.26_mapped_official_1.20.4-recomp.jar:?] {re:classloading,pl:runtimedistcleaner:A}     at net.minecraft.client.multiplayer.MultiPlayerGameMode.useItemOn(MultiPlayerGameMode.java:291) ~[forge-1.20.4-49.0.26_mapped_official_1.20.4-recomp.jar:?] {re:classloading,pl:runtimedistcleaner:A}     at net.minecraft.client.Minecraft.startUseItem(Minecraft.java:1799) ~[forge-1.20.4-49.0.26_mapped_official_1.20.4-recomp.jar:?] {re:classloading,pl:accesstransformer:B,pl:runtimedistcleaner:A}     at net.minecraft.client.Minecraft.handleKeybinds(Minecraft.java:2083) ~[forge-1.20.4-49.0.26_mapped_official_1.20.4-recomp.jar:?] {re:classloading,pl:accesstransformer:B,pl:runtimedistcleaner:A}     at net.minecraft.client.Minecraft.tick(Minecraft.java:1902) ~[forge-1.20.4-49.0.26_mapped_official_1.20.4-recomp.jar:?] {re:classloading,pl:accesstransformer:B,pl:runtimedistcleaner:A}     at net.minecraft.client.Minecraft.runTick(Minecraft.java:1216) ~[forge-1.20.4-49.0.26_mapped_official_1.20.4-recomp.jar:?] {re:classloading,pl:accesstransformer:B,pl:runtimedistcleaner:A}     at net.minecraft.client.Minecraft.run(Minecraft.java:801) ~[forge-1.20.4-49.0.26_mapped_official_1.20.4-recomp.jar:?] {re:classloading,pl:accesstransformer:B,pl:runtimedistcleaner:A}     at net.minecraft.client.main.Main.main(Main.java:234) ~[forge-1.20.4-49.0.26_mapped_official_1.20.4-recomp.jar:?] {re:classloading,pl:runtimedistcleaner:A} ------------------------------------------------------------------------------------------------------------------   context:  im updating the briefcase from mi mod an i need to make a gui whit this image that gonna be launched from a block and from a item soo im using kapenjoe tutorials  ---------------------------------------------------------------------------------------- The problem is that tutorial is for 1.20.1 and im using 1.20.4 and i really dont get how to call and open the gui from the block nor from the item i made this based on post i made short ago everything seems find but when right click the block to open the gui it crash the game  @Override public InteractionResult use(BlockState blkstate, Level warudo, BlockPos pos, Player pe, InteractionHand hand, BlockHitResult hitresult) {     if(warudo.isClientSide()){         BlockEntity blkentity = warudo.getBlockEntity(pos);         if(blkentity instanceof Panel_BlockEntity){             //   ↓↓↓  open the menu from the block              IForgeServerPlayer ifpe = (IForgeServerPlayer)pe; //<--- this is wrong  "class net.minecraft.client.player.LocalPlayer cannot be cast to class net.minecraftforge.common.extensions.IForgeServerPlayer"             ifpe.openMenu( (Panel_BlockEntity) blkentity, pos ); //<-- i need an example of how open a gui in 1.20.4         }     } return InteractionResult.sidedSuccess(warudo.isClientSide()); } Theres nothing highlighted in red in the code like everything where right an possible but dont works  ####################################################################################################### i need to see an example, just the piece of code for the use() method of the block whit the block entity for 1.20.4  and the same  but for the item     @Override     public @NotNull InteractionResultHolder<ItemStack> use(@NotNull Level warudo, @NotNull Player pe, @NotNull InteractionHand interactionHand)     {         if (!warudo.isClientSide())         {             ItemStack heldItem = pe.getItemInHand(interactionHand);                          if (heldItem.getCapability(ForgeCapabilities.ITEM_HANDLER).isPresent())             {                 //   ↓↓↓  open the menu from the item                 NetworkHooks.openScreen((ServerPlayer) pe, this);             }         }         return super.use(warudo, pe, interactionHand);     }   thanks for your attention           
    • It depends on the data you want to save, but generally speaking you should use some custom Player Capabilities, attach to the Player and use them to store/retrieve any kind of data you want. You can find how to make them work for 1.20.x in the documentation here: https://docs.minecraftforge.net/en/latest/datastorage/capabilities/
  • Topics

×
×
  • Create New...

Important Information

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