Jump to content

[1.8](apparently not so)little question about a player and his pets


Recommended Posts

Posted

does the player's entity store some list of entities he has tamed, or is this purely tamed entity sided?

 

basically i wanna make levellable wolves, so on experience pickup i wanna give all the wolves a player has tamed an amount of experience.

Posted

Ok, i'm assuming here i'll be making a IExtendedEntityProperties class for the player.

 

So, while i have some experience in java overall (basic stuff), i'm having a hard time following your instructions, for instance, what type of list should i use to store the player's pets?

you said i should use a WeakHashMap, but for some reason my eclipse refuses to show me source code, so i have no idea how to use it...

Posted

so, when can i register the entity's UUID in the player's UUID set?

is there any event for when a tameable entity gets tamed?

or is there a simpler way to deal with this.

 

some insight: this is for 1.8 and im currently dealing with vanilla wolves

 

EDIT: im assuming EntityInteractEvent, please correct me if im wrong

 

EDIT2: when using this code to check if the eventHandler is working:

@SubscribeEvent
public void onEntityInteract(EntityInteractEvent event){
	EntityPlayer player = event.entityPlayer;
	if(event.target instanceof EntityTameable){
		EntityTameable targetTame = (EntityTameable) event.target;
		System.out.println("you interacted with a tameable entity");
	}
}

the printed line comes out twice per interaction...

 

EDIT3:

so yeah, that event obviously runs before the entity is being tamed, even if that interaction is going to tame it, so i still don't know when to register the entity's UUID into the player's Set...

Posted

public class WolfTamingEvent {
private static EntityTameable entity = null;

@SubscribeEvent
public void onEntityInteract(EntityInteractEvent event){
	EntityPlayer player = event.entityPlayer;
	if(event.target instanceof EntityTameable){
		entity = (EntityTameable) event.target;
	}
}
@SubscribeEvent
public void onLivingSetAttackTargetEvent(LivingSetAttackTargetEvent event){
	if(event.entity instanceof EntityTameable && event.target == null && event.entity == entity){
		System.out.println("you just tamed a entity");
	}
}
}

 

this seems to work, thanks for the help so far!

Posted

ok, i assumed i had to reset the enity field to null at some point for security reasons, thanks for telling me where to do so, however, event.phase doesnt have a POST, it does have a END, so i assumed it's that one.

 

on another question, what do i do in the saveToNBT and loadFromNBT methods for the extended player properties class?

am i doing this right:

public void saveNBTData(NBTTagCompound compound) {
	Iterator thePets = pets.iterator();
	String[] petIDs = new String[pets.size()];
	int i = 0;
	while(thePets.hasNext()){
		petIDs[i]=thePets.toString();
		i++;
	}
}

 

and since to save a value and later load it you obviously need keys, i dont know what to do beyond storing the IDs in Strings...

Posted

not getting what you're telling me here :/

could you give me some more detailed explanations, or maybe some mockup code?

im still having a tough time with this whole NBT stuff :(

Posted

cant find the object to apply the getLeastSignificantBits() method to...

i've tried it on thePets, but the only getter it has is getClass()...

 

sorry for being lame, must be a bad day or something :/

EDIT:

think i finally got it:

public void saveNBTData(NBTTagCompound compound) {
	NBTTagCompound properties = new NBTTagCompound();
	NBTTagList list = new NBTTagList();
	UUID[] IDs = (UUID[]) pets.toArray();
	long low;
	long high;
	for(int i = 0; i < IDs.length; i++){
		low = IDs[i].getLeastSignificantBits();
		high = IDs[i].getMostSignificantBits();

		properties.setLong("uuidLow", low);
		properties.setLong("uuidHigh", high);
		list.appendTag(properties);
	}
}

Posted

see my edit please.

 

also, what exactly is a hard reference or a weak reference?

and i thought i didnt need the map after all cuz you said this:

In 1.8 you can just use WorldServer#getEntityFromUuid, it will be fast.

 

here's my current load method too:

public void loadNBTData(NBTTagCompound compound) {
	long low;
	long high;
	UUID uuid;
	NBTTagList list = compound.getTagList(LIST_NAME, compound.getId());
	NBTTagCompound properties;

	this.pets.clear();
	for(int i = 0; i < list.tagCount(); i++){
		properties = list.getCompoundTagAt(i);
		low = properties.getLong("uuidLow");
		high = properties.getLong("uuidHigh");
		uuid = new UUID(high, low);
		this.pets.add(uuid);
	}
}

Posted

i may be misunderstanding your instructions here, but isn't it impossible to make a new anything in a loop?

or should i make a list of tagCompounds and make a new one inside that list on every iteration?

Posted

ok, didn't know you could overwrite a variable like that, i was thinking about how it's impossible to declare a variable inside a loop for obvious reasons.

 

so just to be 100% sure, are the save and load methods done now?:

 

@Override
public void saveNBTData(NBTTagCompound compound) {
	NBTTagCompound properties = new NBTTagCompound();
	NBTTagList list = new NBTTagList();
	long low;
	long high;
	for(UUID uuid : pets){
		properties = new NBTTagCompound();
		low = uuid.getLeastSignificantBits();
		high = uuid.getMostSignificantBits();

		properties.setLong("uuidLow", low);
		properties.setLong("uuidHigh", high);
		list.appendTag(properties);
	}
	compound.setTag(LIST_NAME, list);
}

@Override
public void loadNBTData(NBTTagCompound compound) {
	long low;
	long high;
	UUID uuid;
	NBTTagList list = compound.getTagList(LIST_NAME, Constants.NBT.TAG_COMPOUND);
	NBTTagCompound properties;

	this.pets.clear();
	for(int i = 0; i < list.tagCount(); i++){
		properties = list.getCompoundTagAt(i);
		low = properties.getLong("uuidLow");
		high = properties.getLong("uuidHigh");
		uuid = new UUID(high, low);
		this.pets.add(uuid);
	}
}

Posted

ok, didn't know you could overwrite a variable like that, i was thinking about how it's impossible to declare a variable inside a loop for obvious reasons.

 

It's entirely possible to declare a variable in any part of a method, including loops. I think you should review the basics of Java.

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.

Posted

this is getting way off track...

 

ok, didn't know you could overwrite a variable like that, i was thinking about how it's impossible to declare a variable inside a loop for obvious reasons.

 

so just to be 100% sure, are the save and load methods done now?:

 

@Override
public void saveNBTData(NBTTagCompound compound) {
	NBTTagCompound properties = new NBTTagCompound();
	NBTTagList list = new NBTTagList();
	long low;
	long high;
	for(UUID uuid : pets){
		properties = new NBTTagCompound();
		low = uuid.getLeastSignificantBits();
		high = uuid.getMostSignificantBits();

		properties.setLong("uuidLow", low);
		properties.setLong("uuidHigh", high);
		list.appendTag(properties);
	}
	compound.setTag(LIST_NAME, list);
}

@Override
public void loadNBTData(NBTTagCompound compound) {
	long low;
	long high;
	UUID uuid;
	NBTTagList list = compound.getTagList(LIST_NAME, Constants.NBT.TAG_COMPOUND);
	NBTTagCompound properties;

	this.pets.clear();
	for(int i = 0; i < list.tagCount(); i++){
		properties = list.getCompoundTagAt(i);
		low = properties.getLong("uuidLow");
		high = properties.getLong("uuidHigh");
		uuid = new UUID(high, low);
		this.pets.add(uuid);
	}
}

Posted

ok, right now im at the part where i give my beloved wolves their exp.

you said that i should use the method ServerWorld#getEntityByUuid(), which only exists for EntityPlayer.

the method that does exist for any other entity is getEntityById(), but it takes an int for an argument :/

 

ok i noticed im using the clientWorld, how the hell do i retrieve the ServerWorld?

Posted

how am i supposed to know on what side im doing things?

 

u know what?

i'll publish a repo on github with my current code, cuz now im also getting errors when trying to retrieve the extended entity properties...

 

here it is: https://github.com/jokekid/BattleCreatures/

 

this is all with forge-1.8-11.14.3.1502

 

most extended entity basics are learned from coolalias' tutorial.

 

this "tiny" mod is turning out to be much more of a pain in the ass than i initially thought...

Posted

because i dont understand how in the actual hell the game differentiates between server and client, there are no guides on this at all, the only thing i know for server/client side, is how to make sure renders only registe on client side, and i think my entities and other stuff registers at server side.

 

another thing though, this line:

return (ExtendedPlayer) entity.getExtendedProperties(PROP_NAME);

 

gives an error, however i used the exact same line in another WIP mod and it worked perfectly fine, does this have anything to do with the forge version? i used to work in the "reccomended" build, and now im in the 1502 one (was the latest when i set the workspace up for this mod)

 

now, if i could get some insight on how you determine if something is running on server or client...

Posted

this is getting way out of hands...

[12:11:01] [server thread/ERROR] [FML]: Failed to save extended properties for ExtendedTameable.  This is a mod issue.
[12:11:01] [server thread/INFO] [sTDERR]: [java.lang.Throwable$WrappedPrintStream:println:-1]: java.lang.NullPointerException
[12:11:01] [server thread/INFO] [sTDERR]: [java.lang.Throwable$WrappedPrintStream:println:-1]: 	at com.jokekid.battlecreatures.extEntity.ExtendedPlayer.saveNBTData(ExtendedPlayer.java:36)
[12:11:01] [server thread/INFO] [sTDERR]: [java.lang.Throwable$WrappedPrintStream:println:-1]: 	at net.minecraft.entity.Entity.writeToNBT(Entity.java:1611)
[12:11:01] [server thread/INFO] [sTDERR]: [java.lang.Throwable$WrappedPrintStream:println:-1]: 	at net.minecraft.server.integrated.IntegratedPlayerList.writePlayerData(IntegratedPlayerList.java:33)
[12:11:01] [server thread/INFO] [sTDERR]: [java.lang.Throwable$WrappedPrintStream:println:-1]: 	at net.minecraft.server.management.ServerConfigurationManager.saveAllPlayerData(ServerConfigurationManager.java:890)
[12:11:01] [server thread/INFO] [sTDERR]: [java.lang.Throwable$WrappedPrintStream:println:-1]: 	at net.minecraft.server.integrated.IntegratedServer.tick(IntegratedServer.java:146)
[12:11:01] [server thread/INFO] [sTDERR]: [java.lang.Throwable$WrappedPrintStream:println:-1]: 	at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:540)
[12:11:01] [server thread/INFO] [sTDERR]: [java.lang.Throwable$WrappedPrintStream:println:-1]: 	at java.lang.Thread.run(Unknown Source)
[12:11:01] [server thread/ERROR] [FML]: Failed to save extended properties for ExtendedTameable.  This is a mod issue.
[12:11:01] [server thread/INFO] [sTDERR]: [java.lang.Throwable$WrappedPrintStream:println:-1]: java.lang.NullPointerException
[12:11:01] [server thread/INFO] [sTDERR]: [java.lang.Throwable$WrappedPrintStream:println:-1]: 	at com.jokekid.battlecreatures.extEntity.ExtendedPlayer.saveNBTData(ExtendedPlayer.java:36)
[12:11:01] [server thread/INFO] [sTDERR]: [java.lang.Throwable$WrappedPrintStream:println:-1]: 	at net.minecraft.entity.Entity.writeToNBT(Entity.java:1611)
[12:11:01] [server thread/INFO] [sTDERR]: [java.lang.Throwable$WrappedPrintStream:println:-1]: 	at net.minecraft.world.storage.SaveHandler.writePlayerData(SaveHandler.java:271)
[12:11:01] [server thread/INFO] [sTDERR]: [java.lang.Throwable$WrappedPrintStream:println:-1]: 	at net.minecraft.server.management.ServerConfigurationManager.writePlayerData(ServerConfigurationManager.java:333)
[12:11:01] [server thread/INFO] [sTDERR]: [java.lang.Throwable$WrappedPrintStream:println:-1]: 	at net.minecraft.server.integrated.IntegratedPlayerList.writePlayerData(IntegratedPlayerList.java:36)
[12:11:01] [server thread/INFO] [sTDERR]: [java.lang.Throwable$WrappedPrintStream:println:-1]: 	at net.minecraft.server.management.ServerConfigurationManager.saveAllPlayerData(ServerConfigurationManager.java:890)
[12:11:01] [server thread/INFO] [sTDERR]: [java.lang.Throwable$WrappedPrintStream:println:-1]: 	at net.minecraft.server.integrated.IntegratedServer.tick(IntegratedServer.java:146)
[12:11:01] [server thread/INFO] [sTDERR]: [java.lang.Throwable$WrappedPrintStream:println:-1]: 	at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:540)
[12:11:01] [server thread/INFO] [sTDERR]: [java.lang.Throwable$WrappedPrintStream:println:-1]: 	at java.lang.Thread.run(Unknown Source)
[12:11:01] [server thread/INFO]: Saving chunks for level 'flat'/Overworld
[12:11:01] [server thread/INFO]: Saving chunks for level 'flat'/Nether
[12:11:01] [server thread/INFO]: Saving chunks for level 'flat'/The End
[12:11:01] [server thread/ERROR] [FML]: Exception caught during firing event net.minecraftforge.event.entity.player.PlayerPickupXpEvent@383dc8b9:
java.lang.NullPointerException
at com.jokekid.battlecreatures.events.ModEventHandler.onPlayerXpPickup(ModEventHandler.java:27) ~[ModEventHandler.class:?]
at net.minecraftforge.fml.common.eventhandler.ASMEventHandler_7_ModEventHandler_onPlayerXpPickup_PlayerPickupXpEvent.invoke(.dynamic) ~[?:?]
at net.minecraftforge.fml.common.eventhandler.ASMEventHandler.invoke(ASMEventHandler.java:55) ~[ASMEventHandler.class:?]
at net.minecraftforge.fml.common.eventhandler.EventBus.post(EventBus.java:138) [EventBus.class:?]
at net.minecraft.entity.item.EntityXPOrb.onCollideWithPlayer(EntityXPOrb.java:233) [EntityXPOrb.class:?]
at net.minecraft.entity.player.EntityPlayer.collideWithPlayer(EntityPlayer.java:691) [EntityPlayer.class:?]
at net.minecraft.entity.player.EntityPlayer.onLivingUpdate(EntityPlayer.java:683) [EntityPlayer.class:?]
at net.minecraft.entity.EntityLivingBase.onUpdate(EntityLivingBase.java:1828) [EntityLivingBase.class:?]
at net.minecraft.entity.player.EntityPlayer.onUpdate(EntityPlayer.java:334) [EntityPlayer.class:?]
at net.minecraft.entity.player.EntityPlayerMP.onUpdateEntity(EntityPlayerMP.java:374) [EntityPlayerMP.class:?]
at net.minecraft.network.NetHandlerPlayServer.processPlayer(NetHandlerPlayServer.java:347) [NetHandlerPlayServer.class:?]
at net.minecraft.network.play.client.C03PacketPlayer.processPacket(C03PacketPlayer.java:36) [C03PacketPlayer.class:?]
at net.minecraft.network.play.client.C03PacketPlayer.processPacket(C03PacketPlayer.java:105) [C03PacketPlayer.class:?]
at net.minecraft.network.PacketThreadUtil$1.run(PacketThreadUtil.java:24) [PacketThreadUtil$1.class:?]
at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) [?:1.8.0_60]
at java.util.concurrent.FutureTask.run(Unknown Source) [?:1.8.0_60]
at net.minecraftforge.fml.common.FMLCommonHandler.callFuture(FMLCommonHandler.java:714) [FMLCommonHandler.class:?]
at net.minecraft.server.integrated.IntegratedServer.tick(IntegratedServer.java:160) [integratedServer.class:?]
at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:540) [MinecraftServer.class:?]
at java.lang.Thread.run(Unknown Source) [?:1.8.0_60]
[12:11:01] [server thread/ERROR] [FML]: Index: 1 Listeners:
[12:11:01] [server thread/ERROR] [FML]: 0: NORMAL
[12:11:01] [server thread/ERROR] [FML]: 1: ASM: com.jokekid.battlecreatures.events.ModEventHandler@27d6ff8c onPlayerXpPickup(Lnet/minecraftforge/event/entity/player/PlayerPickupXpEvent;)V
[12:11:01] [server thread/FATAL] [FML]: Exception caught executing FutureTask: java.util.concurrent.ExecutionException: net.minecraft.util.ReportedException: Ticking player
java.util.concurrent.ExecutionException: net.minecraft.util.ReportedException: Ticking player
at java.util.concurrent.FutureTask.report(Unknown Source) ~[?:1.8.0_60]
at java.util.concurrent.FutureTask.get(Unknown Source) ~[?:1.8.0_60]
at net.minecraftforge.fml.common.FMLCommonHandler.callFuture(FMLCommonHandler.java:715) [FMLCommonHandler.class:?]
at net.minecraft.server.integrated.IntegratedServer.tick(IntegratedServer.java:160) [integratedServer.class:?]
at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:540) [MinecraftServer.class:?]
at java.lang.Thread.run(Unknown Source) [?:1.8.0_60]
Caused by: net.minecraft.util.ReportedException: Ticking player
at net.minecraft.entity.player.EntityPlayerMP.onUpdateEntity(EntityPlayerMP.java:428) ~[EntityPlayerMP.class:?]
at net.minecraft.network.NetHandlerPlayServer.processPlayer(NetHandlerPlayServer.java:347) ~[NetHandlerPlayServer.class:?]
at net.minecraft.network.play.client.C03PacketPlayer.processPacket(C03PacketPlayer.java:36) ~[C03PacketPlayer.class:?]
at net.minecraft.network.play.client.C03PacketPlayer.processPacket(C03PacketPlayer.java:105) ~[C03PacketPlayer.class:?]
at net.minecraft.network.PacketThreadUtil$1.run(PacketThreadUtil.java:24) ~[PacketThreadUtil$1.class:?]
at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) ~[?:1.8.0_60]
at java.util.concurrent.FutureTask.run(Unknown Source) ~[?:1.8.0_60]
at net.minecraftforge.fml.common.FMLCommonHandler.callFuture(FMLCommonHandler.java:714) ~[FMLCommonHandler.class:?]
... 3 more
Caused by: java.lang.NullPointerException
at com.jokekid.battlecreatures.events.ModEventHandler.onPlayerXpPickup(ModEventHandler.java:27) ~[ModEventHandler.class:?]
at net.minecraftforge.fml.common.eventhandler.ASMEventHandler_7_ModEventHandler_onPlayerXpPickup_PlayerPickupXpEvent.invoke(.dynamic) ~[?:?]
at net.minecraftforge.fml.common.eventhandler.ASMEventHandler.invoke(ASMEventHandler.java:55) ~[ASMEventHandler.class:?]
at net.minecraftforge.fml.common.eventhandler.EventBus.post(EventBus.java:138) ~[EventBus.class:?]
at net.minecraft.entity.item.EntityXPOrb.onCollideWithPlayer(EntityXPOrb.java:233) ~[EntityXPOrb.class:?]
at net.minecraft.entity.player.EntityPlayer.collideWithPlayer(EntityPlayer.java:691) ~[EntityPlayer.class:?]
at net.minecraft.entity.player.EntityPlayer.onLivingUpdate(EntityPlayer.java:683) ~[EntityPlayer.class:?]
at net.minecraft.entity.EntityLivingBase.onUpdate(EntityLivingBase.java:1828) ~[EntityLivingBase.class:?]
at net.minecraft.entity.player.EntityPlayer.onUpdate(EntityPlayer.java:334) ~[EntityPlayer.class:?]
at net.minecraft.entity.player.EntityPlayerMP.onUpdateEntity(EntityPlayerMP.java:374) ~[EntityPlayerMP.class:?]
at net.minecraft.network.NetHandlerPlayServer.processPlayer(NetHandlerPlayServer.java:347) ~[NetHandlerPlayServer.class:?]
at net.minecraft.network.play.client.C03PacketPlayer.processPacket(C03PacketPlayer.java:36) ~[C03PacketPlayer.class:?]
at net.minecraft.network.play.client.C03PacketPlayer.processPacket(C03PacketPlayer.java:105) ~[C03PacketPlayer.class:?]
at net.minecraft.network.PacketThreadUtil$1.run(PacketThreadUtil.java:24) ~[PacketThreadUtil$1.class:?]
at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) ~[?:1.8.0_60]
at java.util.concurrent.FutureTask.run(Unknown Source) ~[?:1.8.0_60]
at net.minecraftforge.fml.common.FMLCommonHandler.callFuture(FMLCommonHandler.java:714) ~[FMLCommonHandler.class:?]
... 3 more
[12:11:02] [server thread/ERROR] [FML]: Failed to save extended properties for ExtendedTameable.  This is a mod issue.
[12:11:02] [server thread/INFO] [sTDERR]: [java.lang.Throwable$WrappedPrintStream:println:-1]: java.lang.NullPointerException
[12:11:02] [server thread/INFO] [sTDERR]: [java.lang.Throwable$WrappedPrintStream:println:-1]: 	at com.jokekid.battlecreatures.extEntity.ExtendedPlayer.saveNBTData(ExtendedPlayer.java:36)
[12:11:02] [server thread/INFO] [sTDERR]: [java.lang.Throwable$WrappedPrintStream:println:-1]: 	at net.minecraft.entity.Entity.writeToNBT(Entity.java:1611)
[12:11:02] [server thread/INFO] [sTDERR]: [java.lang.Throwable$WrappedPrintStream:println:-1]: 	at net.minecraft.server.integrated.IntegratedPlayerList.writePlayerData(IntegratedPlayerList.java:33)
[12:11:02] [server thread/INFO] [sTDERR]: [java.lang.Throwable$WrappedPrintStream:println:-1]: 	at net.minecraft.server.management.ServerConfigurationManager.playerLoggedOut(ServerConfigurationManager.java:377)
[12:11:02] [server thread/INFO] [sTDERR]: [java.lang.Throwable$WrappedPrintStream:println:-1]: 	at net.minecraft.server.integrated.IntegratedServer$3.run(IntegratedServer.java:381)
[12:11:02] [server thread/INFO] [sTDERR]: [java.lang.Throwable$WrappedPrintStream:println:-1]: 	at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
[12:11:02] [server thread/INFO] [sTDERR]: [java.lang.Throwable$WrappedPrintStream:println:-1]: 	at java.util.concurrent.FutureTask.run(Unknown Source)
[12:11:02] [server thread/INFO] [sTDERR]: [java.lang.Throwable$WrappedPrintStream:println:-1]: 	at net.minecraftforge.fml.common.FMLCommonHandler.callFuture(FMLCommonHandler.java:714)
[12:11:02] [server thread/INFO] [sTDERR]: [java.lang.Throwable$WrappedPrintStream:println:-1]: 	at net.minecraft.server.integrated.IntegratedServer.tick(IntegratedServer.java:160)
[12:11:02] [server thread/INFO] [sTDERR]: [java.lang.Throwable$WrappedPrintStream:println:-1]: 	at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:540)
[12:11:02] [server thread/INFO] [sTDERR]: [java.lang.Throwable$WrappedPrintStream:println:-1]: 	at java.lang.Thread.run(Unknown Source)
[12:11:02] [server thread/ERROR] [FML]: Failed to save extended properties for ExtendedTameable.  This is a mod issue.
[12:11:02] [server thread/INFO] [sTDERR]: [java.lang.Throwable$WrappedPrintStream:println:-1]: java.lang.NullPointerException
[12:11:02] [server thread/INFO] [sTDERR]: [java.lang.Throwable$WrappedPrintStream:println:-1]: 	at com.jokekid.battlecreatures.extEntity.ExtendedPlayer.saveNBTData(ExtendedPlayer.java:36)
[12:11:02] [server thread/INFO] [sTDERR]: [java.lang.Throwable$WrappedPrintStream:println:-1]: 	at net.minecraft.entity.Entity.writeToNBT(Entity.java:1611)
[12:11:02] [server thread/INFO] [sTDERR]: [java.lang.Throwable$WrappedPrintStream:println:-1]: 	at net.minecraft.world.storage.SaveHandler.writePlayerData(SaveHandler.java:271)
[12:11:02] [server thread/INFO] [sTDERR]: [java.lang.Throwable$WrappedPrintStream:println:-1]: 	at net.minecraft.server.management.ServerConfigurationManager.writePlayerData(ServerConfigurationManager.java:333)
[12:11:02] [server thread/INFO] [sTDERR]: [java.lang.Throwable$WrappedPrintStream:println:-1]: 	at net.minecraft.server.integrated.IntegratedPlayerList.writePlayerData(IntegratedPlayerList.java:36)
[12:11:02] [server thread/INFO] [sTDERR]: [java.lang.Throwable$WrappedPrintStream:println:-1]: 	at net.minecraft.server.management.ServerConfigurationManager.playerLoggedOut(ServerConfigurationManager.java:377)
[12:11:02] [server thread/INFO] [sTDERR]: [java.lang.Throwable$WrappedPrintStream:println:-1]: 	at net.minecraft.server.integrated.IntegratedServer$3.run(IntegratedServer.java:381)
[12:11:02] [server thread/INFO] [sTDERR]: [java.lang.Throwable$WrappedPrintStream:println:-1]: 	at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
[12:11:02] [server thread/INFO] [sTDERR]: [java.lang.Throwable$WrappedPrintStream:println:-1]: 	at java.util.concurrent.FutureTask.run(Unknown Source)
[12:11:02] [server thread/INFO] [sTDERR]: [java.lang.Throwable$WrappedPrintStream:println:-1]: 	at net.minecraftforge.fml.common.FMLCommonHandler.callFuture(FMLCommonHandler.java:714)
[12:11:02] [server thread/INFO] [sTDERR]: [java.lang.Throwable$WrappedPrintStream:println:-1]: 	at net.minecraft.server.integrated.IntegratedServer.tick(IntegratedServer.java:160)
[12:11:02] [server thread/INFO] [sTDERR]: [java.lang.Throwable$WrappedPrintStream:println:-1]: 	at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:540)
[12:11:02] [server thread/INFO] [sTDERR]: [java.lang.Throwable$WrappedPrintStream:println:-1]: 	at java.lang.Thread.run(Unknown Source)
[12:11:02] [server thread/INFO]: Stopping server

 

all i was doing here was trying to spawn a new wolf with the spawn egg (which didnt work)

and something went terribly wrong in the experience pickup event, cuz i wouldn't pick it up anymore...

Posted

  1. [*]
No. Choose a proper name.

[*]Why do you initialize this here? you overwrite the value in the first for-iteration anyways...

[*]Good job for using a constant, but you should include your ModID, since you are writing directly to the Entity's data.

[*]This check is useless.

[*]Look very closely.

[*]How do you expect this to work? You never register ExtendedTameable anywhere.

[*]See 1

[*]No, bad monkey, no cookie! Don't use other entity's DataWatcher.

[*]No, just no. If you do not know why this is wrong, I don't know how you are modding.

[*]What if the player is offline?

[*]What if entity is null?

[*]Why do you register a plain ExtendedTameable if you know it is a Wolf? Plus, you don't call this method anywhere anyways.

 

That's all just in your IEEP stuff, I am sure I could find dozens more of these if I continued looking.

1.- what would a proper name be?

2.- this may not be necesary, but it shouldnt cause any issues. (will fix though)

3.- so like: LIST_NAME = Reference.MOD_ID + ":Pet_list";  ??

4.- will get rid of it, still dont see any issue with it though.

5.- woops, that would be the main error i was looking for, thanks.

6.-



public void onEntityConstructing(EntityConstructing event) {
if (event.entity instanceof EntityWolf && ExtendedWolf.get((EntityWolf) event.entity) == null) {
ExtendedWolf.register((EntityWolf) event.entity);

ExtendedTameable is ExtendedWolf's superclass.

7.- see 1 please.

8.- please elaborate, did the same thing in my first "mod" (for learning and stuff) when implementing mana for a player, worked just fine.

9.- how DO i retrieve the world? this point is not very constructive tbh :/

10.- if the player is offline, the player can't pickup experience, so the player won't give experience to the wolf, etc...

11.- evolve() is only being called after checking the entity is NOT null, checking again would be pointless? please correct me if im wrong.

12.- right now im registering it as a ExtendedTameable for simplification reasons, wanna make sure the base class works as it should before i start extending it for other mobs.

 

this is the first time im modding with actually no tutorials on my side at all, i'm bound to make mistakes out of ignorance, to be honest i'd love if you kept looking at other classes to find more mistakes, it's the only real way for me to learn i believe.

 

EDIT: should 9 be this: World world = this.entity.getEntityWorld();?

Posted

ok, first this error i dont understand why:

https://github.com/jokekid/BattleCreatures/blob/master/src/main/java/com/jokekid/battlecreatures/extEntity/ExtendedPlayer.java#L38

null pointer exception

 

now back to my previous errors:

6.-

And? That doesn't mean they magically share the same IEEP identifier.

so, how do i do this the right way?

 

8.- so i gotta set up packets for this? :(

 

9.- is it OK to get the entity's world?

 

10.- cuz it's not necesary? any reason i should do this?

i mean, these are always tameable entities, meaning they always have a player associated to them if they're tamed.

 

11.- yes there is:

https://github.com/jokekid/BattleCreatures/blob/master/src/main/java/com/jokekid/battlecreatures/extEntity/ExtendedTameable.java#L64

 

12.- because im not done with this yet, the wolf's extendedProperties will eventually override the tameable one's to make it evolve, etc...

and i do intend to add new mobs to this mod as well, which will also use the ExtendedTameable properties, for the sake of recycling.

 

 

AGAIN thanks for your patience, this is being of great help ;)

Posted

here we go again :P

 

1.- i am asigning values to the set in the addPet() and removePet() methods, i am assuming i'm missing a check or something before the line that's giving me a nullPointerException? help please.

 

what field is a IEEP's identifier? the property name?

 

i just noticed i DONT need it on the client, silly me :P

 

You want to replace the entity with a different one, right? So... which world should it spawn in? This is not a difficult question...

now i'm feeling stupid, i am assuming the "easy" answer is yes? :(

 

Ok, that is some awful code there. You should not create the evolved form before you actually evolve (which you do here, to check if there actually is one).

suggestions?

i thought that in a "if(blablabla && blebleble){}" check, if blablabla returns false, it won't even bother to check blebleble

meaning that if canEvolve() gives false, it shouldn't make the new entity, and if it gives true, i'll be making the entity anyway.

 

 

EDIT: if i make the Set<UUID> final, i am required to initialize it, and i have no idea how to, if i follow my IDE's instructions, it will override basically every single method of said Set...

Posted

1.- ok, added this to the constructor:

this.pets = new HashSet<UUID>();

i assume that should solve my nullPointerExceptions?

 

both wolf and tameable IEEPs are using the same identifier already, which is a constant in ExtendedTameable

 

Correct. But you call getEvolution twice, once inside levelUp and once inside evolve. Both of these will create a fully fledged entity object, one of which will be immediately destroyed again since you only check if it's null or not.

i see, changed it to this:

https://github.com/jokekid/BattleCreatures/blob/master/src/main/java/com/jokekid/battlecreatures/extEntity/ExtendedTameable.java#L55

 

 

Posted

omg, i dont know how to thank you enough for all of this help.

 

wolves are now properly levelling up on experience pickup, i did have to add some more checks to the two events involved with taming, because it would fire too when you made your pet sit or stand up.

 

btw, i thought about the thing for when they are in unloaded chunks, would it work if i only gave the experience to any pets that are within a certain distance from the player?

 

 

Posted

Yes, that would work, you just have to make sure the distance is small enough.

And then you do not need the references to the pets at all.

 

omg, why didn't i think of this in the first place... this would render the extended player class completely useless...

i could just check for nearby entities whose owner equals the player... >.<

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



×
×
  • Create New...

Important Information

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