• Recently Browsing

    No registered users viewing this page.

  • Posts

    • I want to join my server and when I want to connect it's seem to me I don't have FLM or Forge installed even tought I have them  
    • From my experience the motion of player is (0.0, -0.0784000015258789, 0.0) when still is because there's gravitational (downward) acceleration, and the unit should be blocks/tick.
    • Right to the question: how minecraft achieves smooth entity rendering? As far as I know and experimented with Logging of entity's position in render method, it is updated, like, 20 times per second, which equals to 1 tick. So it seems like while rendering, minecraft uses entity's speed to determine where it should be, or what?   The problem is, while standing still, player's getMotion().toString() returns (0.0, -0.0784000015258789, 0.0). Is this really gives velocity? Is -0.0784... a deviation? If so, what is a unit velocity here? 1 block/tick? 1 px/tick? (Here by px i mean 1/16 block)   Ok, here is the problem I met. I need to render an entity at a fixed position for the player, as if it is a part of it. Here is my render method in renderer class: public void render(MyEntity entityIn, float entityYaw, float partialTicks, MatrixStack matrixStackIn, IRenderTypeBuffer bufferIn, int packedLightIn) { if (entityIn.getOwner() != null) { PlayerEntity owner = entityIn.world.getPlayerByUuid(entityIn.getOwner().getUniqueID()); //Will optimize that later, nevermind. Owner is a player I should stick to. // entityIn.setRawPosition(owner.getPosX(), owner.getPosY(), owner.getPosZ()); (first try to stick entity to player, resulted 20 times per second jumping) LOG.info("Entity's position: {}", entityIn.getPositionVec().toString()); //Used to see, that position updates every 3 frames with 60FPS. matrixStackIn.push(); // Vector3d move = owner.getPositionVec().add(entityIn.getPositionVec().scale(-1)).add(owner.getMotion().scale(partialTicks-1f)); //Uses player motion, so while standing still, entity vibrates. I'm sure it's caused my motion, because without last component entity stops vibrating. // Vector3d move = owner.getMotion().scale(partialTicks); //Upwards you may see other attempts to achieve a goal. None worked. Vector3d move = owner.getPositionVec().add(entityIn.getPositionVec().scale(-1)); // matrixStackIn.translate(move.x+1D, move.y, move.z); //Tried to move 1 block, to see if it works //TODO definitely should find a better way for that! LOG.info("Moving matrix a bit: {}, owner's motion: {}", move.toString(), owner.getMotion().toString()); //This is what outputs that strange -0.07... motion. model.setRotationAngles(entityIn, partialTicks, 0.0F, -0.1F, 0.0F, 0.0F); // TODO describe (does nothing yet, will describe after achieving smooth) IVertexBuilder ivertexbuilder = bufferIn.getBuffer(model.getRenderType(this.getEntityTexture(entityIn))); //Copied form boat renderer, as far as I remember... model.render(matrixStackIn, ivertexbuilder, packedLightIn, OverlayTexture.NO_OVERLAY, 1.0F, 1.0F, 1.0F, 1.0F); matrixStackIn.pop(); } else { LOG.info("Owner is null, not rendering"); } super.render(entityIn, entityYaw, partialTicks, matrixStackIn, bufferIn, packedLightIn); } Also, I included raw this.setPositionAndUpdate(owner.getPosX(), owner.getPosY(), owner.getPosZ()); to entity's tick() method, and I'm sure it's executed on both client and server (Both Server and Render thread are logging message). By entity in the world start jumping a bit along player's moving direction, as you start to move. Jump distances are proportional to player's velocity. Obviously, this indicates low position update rate, because while using 20FPS render everything works as I'd like to.   Would be graceful for any help about all that, thank you.
    • 1.7 is not supported on this forum. Please update to a modern version of Minecraft to receive support.
    • There seems to be a lot of conflicting information out there on creating capabilities. On what classes/interfaces you need, what needs to implement what, whether serializeNBT should call writeNBT or the other way around, etc. I understand there's probably a lot of ways to create a capability, but I just want the simplest possible thing. I have a capability which I only want 1 item to use. It'll be able to store an EntityType, and serialize it into a String or deserialize it from a String when needed. Right now I have 2 classes, Pet and PetCapability: public class Pet implements INBTSerializable<CompoundNBT> { private EntityType<?> entityType; public Pet() { this.entityType = null; } @Override public CompoundNBT serializeNBT() { CompoundNBT result = new CompoundNBT(); String entityTypeString = EntityType.getKey(this.entityType).toString(); result.putString("entityType", entityTypeString); return result; } @Override public void deserializeNBT(CompoundNBT nbt) { if (nbt.contains("entityType")) { String entityTypeString = nbt.getString("entityType"); this.entityType = EntityType.byKey(entityTypeString).get(); } } } public class PetCapability { @CapabilityInject(Pet.class) public static Capability<Pet> CAPABILITY_PET = null; public static void register() { CapabilityManager.INSTANCE.register(Pet.class, new PetStorage(), () -> new Pet()); } public static class PetStorage implements IStorage<Pet> { @Override public void readNBT(Capability<Pet> capability, Pet instance, Direction side, INBT nbt) { instance.deserializeNBT((CompoundNBT) nbt); } @Override public INBT writeNBT(Capability<Pet> capability, Pet instance, Direction side) { return instance.serializeNBT(); } } } Where do I go from here? I need a provider to attach to capability to the item right? Are my classes ok? Am I doing something where I shouldn't be doing it? Thanks!
  • Topics

  • Who's Online (See full list)