Advertisement
Vaerys_Dawn

ListBeesComponent

Feb 17th, 2021
119
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.42 KB | None | 0 0
  1. public class ListBeesComponent implements ICustomComponent {
  2.  
  3. transient float defaultRotation = -45.0F;
  4. transient float renderScale;
  5. transient float offset;
  6. transient int page;
  7. transient int pageCount;
  8. transient Button nextPage;
  9. transient Button prevPage;
  10. transient int xOffset;
  11. transient int yOffset;
  12.  
  13. transient List<Pair<EntityType<?>, Optional<Entity>>> bees = new LinkedList<>();
  14.  
  15. @Override
  16. public void build(int xOffset, int yOffset, int page) {
  17. BeeRegistry.getRegistry().getBees().forEach((s, b) -> bees.add(Pair.of(ForgeRegistries.ENTITIES.getValue(b.getEntityTypeRegistryID()), Optional.empty())));
  18. pageCount = bees.size();
  19. this.xOffset = xOffset;
  20. this.yOffset = yOffset;
  21. }
  22.  
  23. @Override
  24. public void render(MatrixStack matrixStack, IComponentRenderContext context, float pticks, int mouseX, int mouseY) {
  25. prevPage.active = page != 0;
  26. nextPage.active = page != pageCount;
  27. renderEntity(matrixStack, context, page);
  28. }
  29.  
  30. private void renderEntity(MatrixStack matrixStack, IComponentRenderContext context, int page) {
  31. Pair<EntityType<?>, Optional<Entity>> bee = bees.get(page);
  32. if (bee.getRight().isPresent()) {
  33. renderEntity(matrixStack, bee.getValue().get(), context.getGui().getMinecraft().world, xOffset, yOffset, this.defaultRotation, this.renderScale, this.offset);
  34. } else {
  35. Entity entity = initEntity(bee.getLeft(), context.getGui().getMinecraft().world);
  36. if (entity == null) {
  37. bees.remove(page);
  38. pageCount = bees.size();
  39. } else {
  40. bees.set(page, Pair.of(bee.getLeft(), Optional.of(entity)));
  41. }
  42. }
  43. }
  44.  
  45. public static void renderEntity(MatrixStack ms, Entity entity, World world, float x, float y, float rotation, float renderScale, float offset) {
  46. entity.world = world;
  47. ms.push();
  48. ms.translate(x, y, 50.0D);
  49. ms.scale(renderScale, renderScale, renderScale);
  50. ms.translate(0.0D, offset, 0.0D);
  51. ms.multiply(Vector3f.POSITIVE_Z.getDegreesQuaternion(180.0F));
  52. ms.multiply(Vector3f.POSITIVE_Y.getDegreesQuaternion(rotation));
  53. EntityRendererManager erd = Minecraft.getInstance().getRenderManager();
  54. IRenderTypeBuffer.Impl immediate = Minecraft.getInstance().getBufferBuilders().getEntityVertexConsumers();
  55. erd.setRenderShadow(false);
  56. erd.render(entity, 0.0D, 0.0D, 0.0D, 0.0F, 1.0F, ms, immediate, 15728880);
  57. erd.setRenderShadow(true);
  58. immediate.draw();
  59. ms.pop();
  60. }
  61.  
  62. private Entity initEntity(EntityType<?> left, ClientWorld world) {
  63. return left.create(world);
  64. }
  65.  
  66. @Override
  67. public void onDisplayed(IComponentRenderContext context) {
  68. this.prevPage = new Button(0, 50, 10, 10, new StringTextComponent("<"), b -> {
  69. page++;
  70. if (page > pageCount) page = pageCount;
  71. });
  72. this.nextPage = new Button(20, 50, 10, 10, new StringTextComponent(">"), b -> {
  73. page--;
  74. if (page < 0) page = 0;
  75. });
  76. context.registerButton(this.prevPage, 0, () -> {
  77. });
  78. context.registerButton(this.nextPage, 1, () -> {
  79. });
  80. }
  81.  
  82.  
  83. @Override
  84. public void onVariablesAvailable(UnaryOperator<IVariable> unaryOperator) {
  85.  
  86. }
  87. }
  88.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement