Jump to content

HalestormXV

Forge Modder
  • Posts

    328
  • Joined

  • Last visited

Converted

  • Gender
    Undisclosed
  • URL
    http://www.nerdstormproduction.com
  • Personal Text
    I want to learn, I don't just want answers.

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

HalestormXV's Achievements

Diamond Finder

Diamond Finder (5/8)

4

Reputation

  1. I resolved it. Thank you. I was misunderstanding the read and the write buffers and was using an older method of actually registering/creating the serializer. All is well now. Thanks again.
  2. Getting a bit of an issue with what appears to be a Malformed packet? I ported over this recipe from my 1.15.2 mod to 1.16.4 and it works flawlessly in Singleplayer. Second you try and get onto the Dedicated/SMP world though its a ClientDisconnect with the below debug. I know from the past that this generally means a malformed packet or the read and write of the serializes are out of sync etc. In 1.15.2 I was able to leave the write blank. Apparently that is not the case in 1.16.4? So in an effort to keep this in sync as you can see the resource location is in the reader and then the writer just writes the ResourceLocation but I am still getting this problem. Hopefully someone can let me know what I am doing wrong here. Its just kinda frustrating because I am having a hard time finding some examples that extend the SpecialRecipe class let alone allow you to Dye the items. Appreciate it. https://pastebin.com/mc7wjbQ9 - Debug https://pastebin.com/f2t2tpns - PouchRecipe and Serilzier
  3. I am legitimately laughing out loud right now, but not the "haha" funny laugh. More like that wow seriously, your kidding nervous laugh. Basically......I rewrote the entire class/whole system from the ground up last night, it has more functionality now and works in Multiplayer Environment, but from what you just said....all I had to do was move a couple of lines. Lmfao *FACEPALM to the umpteenth degree* Well as always I thank you. And I appreciate the info. Maybe I'll reuse this for an incredibly basic somewhat "non-flexible" machine that is only meant to do incredibly basic single item operations.
  4. You are correct. As terrifying as that is, that method has resolved the issue. However obviously as you state that is not viable as that contains well quite literally everything from recipes to structure gen to tags. So the question now is, what in a data folder could cause that issue. EDIT: After some meticulous removal and debugging it would seem the issue is within custom recipes. Thankfully I only have one custom recipe and this is the root of the problem. As soon as you remove that custom recipe directory you can log into Multiplayer and everything works flawlessly again. I can't understand why that error would be appearing only when attempting to log into the Multiplayer environment though. For reference I followed this: https://www.youtube.com/watch?v=Ri0Mqv_FXA4 And here are all the classes that were made/used following this Tutorial. https://pastebin.com/TbCtDS2T - Init https://pastebin.com/3VapXLey - Serializer https://pastebin.com/dkd4gsVa - DustRecipe https://pastebin.com/G3N5Ynsb - Interface
  5. I know this is somewhat of an older thread however I was wondering if this was ever resolved as i am getting this EXACT same error. It is kind of strange actually that it is literally the same. Here is my latest: https://hastebin.com/oyebubawit.sql Here is my debug: https://hastebin.com/dehohefudo.md (only took the bottom piece of it where the actual Frozen state happened) As for the reproduction - it is identical to above. It works flawlessly on Singleplayer. Only in the multiplayer environment does this occur. To be honest I wouldn't even know where to look for something like this? I mean are byte issues generally in networking and packet handling? Yes I can show the code as messy as it may currently be if this has indeed not actually been resolved and is still out and about. But I wouldnt even know which sections of the code would cause this to show.
  6. That actually makes it clear. I haven't seen Lazy before until about 3 weeks ago when I stepped back into the Modding world. I also haven't worked with Minecraft modding since 1.12.2 and it was very brief. Prior to that it was only 1.7.10. Also I don't code with Java normally so that works against me, only when working on Minecraft Mods am I utilizing Java so it is somewhat "unfamiliar" to me after not working with it for such a period of time, so when I see something like "Lazy" i get all Huh o_O. But that explanation does make sense so I thank you.
  7. Just giving this a bump as I solved it. @Draco18s thanks for the pointers and tips. I see why they were trying to cast to each other. My Provider, for each Capability never actually checked to ensure that the Capability was in fact the Capability it has to cast to. I am guessing it has something to do with Lazy (i am very new to Lazy to be quite honest so it doesnt surprise me that my error was in there). For reference I built my Capability system similar to how McJty built his in the tutorial videos for 1.15.2 and also took bigger aspects like registration and what not from TheGreyGhost. After looking at TheGreyGhosts capability code as a whole (https://github.com/TheGreyGhost/MinecraftByExample/tree/1-15-2-working/src/main/java/minecraftbyexample/mbe65_capability) I see that he actually enforces a check in his providers, the step I missed above. Which would make sense why when one was disabled it wouldn't conflict because there wasn't anything to conflict with when setting up the getCapability. My question now, because as I have repeatedly said, I am not just in it for answers, i want to actually learn the workings of it because that makes you a better coder and helps enhance your coding knowledge, is WHY that check is needed? If these are entirely separate classes that don't even reference/link to each other, why does that check still need to be made. Does it in fact have to do with how Lazy works?
  8. private void setup(final FMLCommonSetupEvent event) { //CapabilityEntityLocation.register(); <---Disabled to make sure that they work when one is disabled and the other is enabled CapabilityEntityExplosium.register(); ***** ComposterBlock.registerCompostable(0.7f, BlockInitDeferred.ARCANUM_LEAVES.get()); DeferredWorkQueue.runLater(StructureGen::generateStructures); registerEntityWorldSpawns(ModEntityTypes.MOOPLE_ENTITY.get(), 89, 2, 4, BiomeInit.THE_MYSTIC_HILLS.get()); registerEntityWorldSpawns(ModEntityTypes.NOVICE_CULTIST.get(), 72, 1, 4, BiomeInit.THE_LARVEN_FLATS.get(), BiomeInit.THE_MYSTIC_HILLS.get()); PotionInit.addBrewingRecipes(); MinecraftForge.EVENT_BUS.register(CapabilityRegistration.class); ******** MinecraftForge.EVENT_BUS.addListener(WatchfulEyeBreakEvent::breakUnderWatch); MinecraftForge.EVENT_BUS.addListener(ChangedMagicTools::unequippedMagicTool); MinecraftForge.EVENT_BUS.register(CapabilityEventHandler.class); } Segment of Main ^ public class CapabilityRegistration { private static final ResourceLocation ENTITY_LOCATION_CAPABILITY = new ResourceLocation(MysteriumMain.MOD_ID, "locdata"); private static final ResourceLocation ENTITY_EXPLOSIUM_CAPABILITY = new ResourceLocation(MysteriumMain.MOD_ID, "count"); @SubscribeEvent public static void attachCapability(AttachCapabilitiesEvent<Entity> event){ Entity entity = event.getObject(); if (entity instanceof LivingEntity) { //event.addCapability(ENTITY_LOCATION_CAPABILITY, new EntityLocationProvider()); event.addCapability(ENTITY_EXPLOSIUM_CAPABILITY, new EntityExplosiumProvider()); } } } CapabilityRegistration/Attachment ^ public class CapabilityEntityLocation { @CapabilityInject(IEntityLocation.class) public static Capability<IEntityLocation> ENTITY_LOCATION_CAPABILITY = null; public static void register() { CapabilityManager.INSTANCE.register(IEntityLocation.class, new Storage(), DefaultEntityLocation::new); } public static class Storage implements Capability.IStorage<IEntityLocation> { @Nullable @Override public INBT writeNBT(Capability<IEntityLocation> capability, IEntityLocation instance, Direction side) { CompoundNBT tag = new CompoundNBT(); tag.putDouble("xLoc", instance.getX()); tag.putDouble("yLoc", instance.getY()); tag.putDouble("zLoc", instance.getZ()); tag.putInt("dimID", instance.getDimId()); return tag; } @Override public void readNBT(Capability<IEntityLocation> capability, IEntityLocation instance, Direction side, INBT nbt) { double xLoc = ((CompoundNBT) nbt).getDouble("xLoc"); double yLoc = ((CompoundNBT) nbt).getDouble("yLoc"); double zLoc = ((CompoundNBT) nbt).getDouble("zLoc"); int dimID = ((CompoundNBT) nbt).getInt("dimID"); instance.setX(xLoc); instance.setY(yLoc); instance.setZ(zLoc); instance.setDim(dimID); } } } Initializing and Injecting the LocationCapability ^ (currently disabled in main) public class CapabilityEntityExplosium { @CapabilityInject(IEntityExplosium.class) public static Capability<IEntityExplosium> ENTITY_EXPLOSIUM_CAPABILITY = null; public static void register() { CapabilityManager.INSTANCE.register(IEntityExplosium.class, new Storage(), DefaultEntityExplosium::new); } public static class Storage implements Capability.IStorage<IEntityExplosium> { @Nullable @Override public INBT writeNBT(Capability<IEntityExplosium> capability, IEntityExplosium instance, Direction side) { CompoundNBT tag = new CompoundNBT(); tag.putInt("count", instance.getCount()); return tag; } @Override public void readNBT(Capability<IEntityExplosium> capability, IEntityExplosium instance, Direction side, INBT nbt) { int count = ((CompoundNBT) nbt).getInt("count"); instance.setCount(count); } } } Initlizing and Injecting the Explosium one ^ (currently is working with the disabling of the location one)
  9. The crash seems to be occurring somewhere in my (now) CapabilityEvent Handler. It is being triggered (the crash) when an Entity either getsAttacked or onDeath. For whatever reason my two capabilities seem to be conflicting. My ExplosiumCapability which is the only one that uses the attacked and onDeath, and my Location capability. The location capability is registered first in the MainClass, I took it off the Event_Bus.addListener like Draco suggested, and simply just now call a .register(CapabilityRegistration.class) it didn't make a difference. For whatever reason whichever capability is registered first (now the location one) tries to cast itself to the capability registered second (now the explosium one) . My confusion is why. They in no way reference each other. the attack and the onDeath events don't even look for let alone pull data from anything except the Explosium capability as it should be. I know the code is somewhat correct, because if I disable the Explosium capability the Location one works just fine and does everything it is supposed to do. And if I disable the location capability the Explosium one works just fine and doesnt crash or anything and does exactly what it is supposed to. Which leads me back to my original point which is something is getting messed up perhaps when they registered?
  10. Okay that can be done, so I just converted to the the above as you said. Everything is still working fine and my two capabilities are now registered in a CapabilityRegistration class and there is now a single CapabilityEventHandler class (so far with only onDeath subscribed to and onAttack subscribed to) but I am still getting the same error where it seems that the first capability to register is trying to cast to the other and as stated above, they dont even so much as reference each other anywhere in my code. And I am using the event to pull the data and check ifPresent. And as you will see below the Location Capability isn't even mentioned in here nor is it referenced. public class CapabilityEventHandler { @SubscribeEvent public void onDeathEvent(LivingDeathEvent event) { Entity entity = event.getEntity(); entity.getCapability(CapabilityEntityExplosium.ENTITY_EXPLOSIUM_CAPABILITY).ifPresent(h -> { int count = h.getCount(); if (count > 0) { entity.getEntityWorld().createExplosion(entity, entity.getPosX(), entity.getPosY(), entity.getPosZ(), count * .3f + 1.0f, Explosion.Mode.DESTROY); } }); } @SubscribeEvent public void onAttackEvent(AttackEntityEvent event) { Entity attacker = event.getEntity(); if (attacker instanceof PlayerEntity){ PlayerEntity player = (PlayerEntity) attacker; ItemStack stack = player.getHeldItemMainhand(); if (stack.getItem() == ItemInitDeferred.EXPLOSIUM_DUST.get()) { Entity target = event.getTarget(); target.getCapability(CapabilityEntityExplosium.ENTITY_EXPLOSIUM_CAPABILITY).ifPresent(handle -> { int count = handle.getCount() + 1; if (count < 9) { handle.setCount(count); player.sendStatusMessage(new TranslationTextComponent("message.increase_count", Integer.toString(count)), true); stack.shrink(1); player.setHeldItem(Hand.MAIN_HAND, stack); event.setCanceled(true); target.getEntityWorld().addParticle(ParticleTypes.FIREWORK, target.getPosX(), target.getPosY() + 1, target.getPosZ(), 0.0, 0.0, 0.0); }else{ player.sendStatusMessage(new TranslationTextComponent("message.at_max_count", Integer.toString(count-1)), true); event.setCanceled(true); } }); } } } }
  11. So here is a relatively dumb question I am sure. I have multiple capabilities. 3 at the moment but only 2 are actually registered and being used the 3rd is completely disabled and not even registered as I am still working on it. When the time comes I want to Register correctly. As it is set-up now, each capability has an event handler (the stupid part that is probably wrong). In each capabilities' EventHandler has the particular effects that I want that Capability to work with. So the AttachingEvent, an onDeath, and onAttack etc. However, I am noticing conflicts. I am getting crashes and it would seem that one Capability is trying to cast to another Capability despite there being ZERO like absolute ZERO reference to it anywhere in my code. This tells me that I am likely being foolish, and there should only be one Event handler that attaches all the capabilities at once and therefore only one MinecraftForge.EVENT_BUS.addListener(CAPABILITY HANDLER CLASS HERE::onAttachCapabilitiesEvent); MinecraftForge.EVENT_BUS.addListener(CAPABILITY HANDLER CLASS HERE::onAttackEvent); etc., etc. Here is the crash report. The reason why I know it isn't in that EffectRemeberance class is because once I disable my Explosium capability that for whatever reason is trying to cast itself everywhere the code works just fine, perfectly actually, (even my debug messages) and there is no issue. So this tells me I am doing something wrong when registering, and the only thing that "looks" off to me is all the separate registering I am doing and separate event handlers. If you need to see the Main where all the registering is happening here it is. It is currently a mess because I haven't cleaned and optimized it just yet: https://pastebin.com/YWKvtbdK
  12. Brain freeze - yeah I should have thought of that. I was incredibly frustrated and totally forgot. Turns out that was exactly the issue and diesieben07 (Sorry if this tags you, it kinda just did it automatically) was spot on. 100% right and corrected the problem. So i thank you. But perhaps this is a stupid question but why? Is setPos not actually being called? I mean i know it is part of ChunkPrimer which is why I used it in the first place being that this particular Block & TE are part of one of my structures that already generate in the world or is Primer's functionality just totally going over my head and is it just infact a "setup" the chunk itself type of class?
  13. Please someone punch me. Rather than make a new thread as this issue is still the same I think it better and more proper to simply make the post in the same thread. So after the discussion above I understand that this feat need be accomplished via TileEntity.. Not a problem.. I also get that it will use the getEntitiesWithinAABB, since a number of forum searches show a great many of these types of rather simple tasks like checking players around the TileEntity in say a 16 block radius. Mine flat out fails. I am getting a null pointer exception right when my code attempts to do the getEntities. I am CERTAIN it is completely obvious and my general rusty-ness and newness to 1.15.2 is the cause coupled with working on the same piece of code for WAY to long. So please can anyone take a look at this and knock some sense into me as to what I am doing wrong? Specifically line 57 is where the null pointer occurs. https://pastebin.com/fcnEAzkk As an aside, my TileEntity works if i take out the AABB code line and utilize the code starting on line 76 but that is not the proper way to do it and it is essentially an eternal debuff with that method as opposed to a range/radius dependent debuff.
  14. Alright thanks for the running start. I will give it a go. Appreciate it.
  15. Understood, yes as I am browsing the TileEntity class I see it'll need to implement Tickable and will be able to essentially take care of everything. As for gathering players in the area of the TileEntity is there an "effective/preferred/proper" way to do that or pretty much how the Elder Guardian does it would be best? Essentially a: TECreate -> newAxisAligned for the radius/cuboid -> Tick, get all entities in the AxisAligned -> filter the players -> apply the effect to the players, repeat (minus the TECreate and new Axis of course)
×
×
  • Create New...

Important Information

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