• Recently Browsing

    No registered users viewing this page.

  • Posts

    • @TheGreyGhost, I want to render a particle which is just a simple line. But nothing shows in  Game.    
    • Hello   What is your question?  Does it work?  If it does not work, what are the symptoms?   Cheers   TGG
    • Introduce: I'm working on making a custom particle from scratch. I want to render a particle which is just a simple line, but nothing shows in game. There are my codes. ObsidianParticle.java public class ObsidianParticle extends Particle { protected ObsidianParticle(World worldIn, double posXIn, double posYIn, double posZIn) { super(worldIn, posXIn, posYIn, posZIn); } @Override public void renderParticle(IVertexBuilder buffer, ActiveRenderInfo renderInfo, float partialTicks) { buffer.pos(0, 0, 0) .color(1, 0, 0, 1) .endVertex(); buffer.pos(1, 0, 0) .color(1, 0, 0, 1) .endVertex(); buffer.pos(1, 1, 0) .color(1, 0, 0, 1) .endVertex(); buffer.pos(1, 1, 1) .color(1, 0, 0, 1) .endVertex(); } @Override public IParticleRenderType getRenderType() { return ObsidianParticleRenderType.INSTANCE; } } ObsidianParticleRenderType.java public class ObsidianParticleRenderType implements IParticleRenderType { public static final ObsidianParticleRenderType INSTANCE = new ObsidianParticleRenderType(); @Override public void beginRender(BufferBuilder bufferBuilder, TextureManager textureManager) { RenderSystem.disableLighting(); RenderSystem.disableDepthTest(); RenderSystem.disableCull(); RenderSystem.enableBlend(); RenderSystem.defaultBlendFunc(); bufferBuilder.begin(GL11.GL_LINE_STRIP, DefaultVertexFormats.POSITION_COLOR); } @Override public void finishRender(Tessellator tessellator) { tessellator.draw(); } } ClientSideRegistry.java @Mod.EventBusSubscriber(bus = Mod.EventBusSubscriber.Bus.MOD) public class ClientSideRegistry { @SubscribeEvent public static void onParticleFactoryRegistration(ParticleFactoryRegisterEvent event) { Minecraft.getInstance().particles.registerFactory(ParticleTypeRegistry.obsidianParticleType.get(), new ObsidianParticleFactory()); } } ObsidianParticleData.java public class ObsidianParticleData implements IParticleData { public static final IParticleData.IDeserializer<ObsidianParticleData> DESERIALIZER = new IDeserializer<ObsidianParticleData>() { @Override public ObsidianParticleData deserialize(ParticleType<ObsidianParticleData> particleTypeIn, StringReader reader) { return new ObsidianParticleData(); } @Override public ObsidianParticleData read(ParticleType<ObsidianParticleData> particleTypeIn, PacketBuffer buffer) { return new ObsidianParticleData(); } }; @Override public ParticleType<?> getType() { return ParticleTypeRegistry.obsidianParticleType.get(); } @Override public void write(PacketBuffer buffer) { } @Override public String getParameters() { return ""; } } ObsidianParticleFactory.java public class ObsidianParticleFactory implements IParticleFactory<ObsidianParticleData> { @Nullable @Override public Particle makeParticle(ObsidianParticleData typeIn, World worldIn, double x, double y, double z, double xSpeed, double ySpeed, double zSpeed) { return new ObsidianParticle(worldIn, x, y, z); } } ParticleTypeRegistry.java public class ParticleTypeRegistry { public static final DeferredRegister<ParticleType<?>> PARTICLE_TYPE = new DeferredRegister<>(ForgeRegistries.PARTICLE_TYPES, ModConstants.MOD_ID); public static final RegistryObject<ObsidianParticleType> obsidianParticleType = PARTICLE_TYPE.register("obsidian_particle", ObsidianParticleType::new); } ObsidianParticleType.java public class ObsidianParticleType extends ParticleType<ObsidianParticleData> { public ObsidianParticleType() { super(false, ObsidianParticleData.DESERIALIZER); } }  
    • Howdy   You could get some clues from the Botania mod, it uses ItemStackHandlers and Capabilities instead of IInventory eg ItemFlowerBag. https://github.com/Vazkii/Botania/blob/master/src/main/java/vazkii/botania/common/item/ItemFlowerBag.java   The only potential problem with SlotItemHandler and ItemStackhandler instead of IInventory is that IInventory is also used by vanilla to tell the source container (typically TileEntity) that the GUI has modified the slot contents (marked it as "dirty").  But SlotItemHandler and ItemStackhandler don't do that.    There are some knowledgeable folks on this forum who think that it doesn't matter because the source container is marked as dirty in other ways; they might be right although I'm not convinced yet.  I haven't tested it empirically yet (on my to-do list).  Up until now I've played it safe and wrapped the ItemStackHandler in an IInventory.  If you decide to test it yourself, please let me know...   -TGG  
  • Topics

  • Who's Online (See full list)