Buckets & entity enhancements, cleanup

This commit is contained in:
paulevsGitch 2021-04-19 21:22:11 +03:00
parent 00fd2b6199
commit 3ec2edd6d5
234 changed files with 1988 additions and 1643 deletions

View file

@ -5,7 +5,6 @@ import java.util.List;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings;
import net.fabricmc.fabric.api.tag.TagRegistry;
import net.fabricmc.fabric.api.tool.attribute.v1.FabricToolTags; import net.fabricmc.fabric.api.tool.attribute.v1.FabricToolTags;
import net.minecraft.client.color.block.BlockColor; import net.minecraft.client.color.block.BlockColor;
import net.minecraft.client.color.item.ItemColor; import net.minecraft.client.color.item.ItemColor;

View file

@ -1,6 +1,7 @@
package ru.betterend.blocks; package ru.betterend.blocks;
import java.util.Random; import java.util.Random;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction; import net.minecraft.core.Direction;
import net.minecraft.world.level.WorldGenLevel; import net.minecraft.world.level.WorldGenLevel;

View file

@ -2,6 +2,9 @@ package ru.betterend.blocks;
import java.util.List; import java.util.List;
import java.util.Random; import java.util.Random;
import com.google.common.collect.Lists;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.BlockGetter; import net.minecraft.world.level.BlockGetter;
@ -12,7 +15,6 @@ import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.storage.loot.LootContext; import net.minecraft.world.level.storage.loot.LootContext;
import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.CollisionContext;
import net.minecraft.world.phys.shapes.VoxelShape; import net.minecraft.world.phys.shapes.VoxelShape;
import com.google.common.collect.Lists;
import ru.betterend.blocks.basis.EndPlantBlock; import ru.betterend.blocks.basis.EndPlantBlock;
import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndBlocks;

View file

@ -1,13 +1,15 @@
package ru.betterend.blocks; package ru.betterend.blocks;
import java.util.List; import java.util.List;
import com.google.common.collect.Lists;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.BlockGetter; import net.minecraft.world.level.BlockGetter;
import net.minecraft.world.level.LevelReader; import net.minecraft.world.level.LevelReader;
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.storage.loot.LootContext; import net.minecraft.world.level.storage.loot.LootContext;
import com.google.common.collect.Lists;
import ru.betterend.blocks.BlockProperties.TripleShape; import ru.betterend.blocks.BlockProperties.TripleShape;
import ru.betterend.blocks.basis.VineBlock; import ru.betterend.blocks.basis.VineBlock;
import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndBlocks;

View file

@ -1,6 +1,7 @@
package ru.betterend.blocks; package ru.betterend.blocks;
import java.util.Random; import java.util.Random;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.tags.BlockTags; import net.minecraft.tags.BlockTags;
import net.minecraft.world.level.LevelReader; import net.minecraft.world.level.LevelReader;

View file

@ -1,6 +1,7 @@
package ru.betterend.blocks; package ru.betterend.blocks;
import java.util.Random; import java.util.Random;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction; import net.minecraft.core.Direction;
import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerLevel;

View file

@ -1,6 +1,7 @@
package ru.betterend.blocks; package ru.betterend.blocks;
import java.util.Random; import java.util.Random;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.world.level.WorldGenLevel; import net.minecraft.world.level.WorldGenLevel;
import net.minecraft.world.level.material.Fluids; import net.minecraft.world.level.material.Fluids;

View file

@ -1,6 +1,7 @@
package ru.betterend.blocks; package ru.betterend.blocks;
import java.util.Random; import java.util.Random;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.core.BlockPos.MutableBlockPos; import net.minecraft.core.BlockPos.MutableBlockPos;
import net.minecraft.core.Direction; import net.minecraft.core.Direction;

View file

@ -2,6 +2,7 @@ package ru.betterend.blocks;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import net.minecraft.core.Registry; import net.minecraft.core.Registry;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Block;

View file

@ -1,6 +1,9 @@
package ru.betterend.blocks; package ru.betterend.blocks;
import java.util.List; import java.util.List;
import com.google.common.collect.Lists;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction; import net.minecraft.core.Direction;
import net.minecraft.core.Registry; import net.minecraft.core.Registry;
@ -19,7 +22,6 @@ import net.minecraft.world.level.block.state.StateDefinition;
import net.minecraft.world.level.block.state.properties.BooleanProperty; import net.minecraft.world.level.block.state.properties.BooleanProperty;
import net.minecraft.world.level.storage.loot.LootContext; import net.minecraft.world.level.storage.loot.LootContext;
import net.minecraft.world.level.storage.loot.parameters.LootContextParams; import net.minecraft.world.level.storage.loot.parameters.LootContextParams;
import com.google.common.collect.Lists;
import ru.betterend.blocks.basis.PedestalBlock; import ru.betterend.blocks.basis.PedestalBlock;
import ru.betterend.blocks.entities.EternalPedestalEntity; import ru.betterend.blocks.entities.EternalPedestalEntity;
import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndBlocks;

View file

@ -1,6 +1,9 @@
package ru.betterend.blocks; package ru.betterend.blocks;
import java.util.List; import java.util.List;
import com.google.common.collect.Lists;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.world.entity.player.Player; import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.ItemStack;
@ -9,7 +12,6 @@ import net.minecraft.world.level.Explosion;
import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.Blocks;
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.storage.loot.LootContext; import net.minecraft.world.level.storage.loot.LootContext;
import com.google.common.collect.Lists;
public class EternalRunedFlavolite extends RunedFlavolite { public class EternalRunedFlavolite extends RunedFlavolite {

View file

@ -1,6 +1,7 @@
package ru.betterend.blocks; package ru.betterend.blocks;
import java.util.Random; import java.util.Random;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.core.BlockPos.MutableBlockPos; import net.minecraft.core.BlockPos.MutableBlockPos;
import net.minecraft.world.level.WorldGenLevel; import net.minecraft.world.level.WorldGenLevel;

View file

@ -2,6 +2,7 @@ package ru.betterend.blocks;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction; import net.minecraft.core.Direction;
import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.ItemStack;

View file

@ -1,6 +1,7 @@
package ru.betterend.blocks; package ru.betterend.blocks;
import java.util.Random; import java.util.Random;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.core.BlockPos.MutableBlockPos; import net.minecraft.core.BlockPos.MutableBlockPos;
import net.minecraft.core.Direction; import net.minecraft.core.Direction;

View file

@ -1,6 +1,7 @@
package ru.betterend.blocks; package ru.betterend.blocks;
import java.util.Random; import java.util.Random;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.world.level.WorldGenLevel; import net.minecraft.world.level.WorldGenLevel;
import net.minecraft.world.level.block.state.BlockBehaviour; import net.minecraft.world.level.block.state.BlockBehaviour;

View file

@ -2,6 +2,7 @@ package ru.betterend.blocks;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import net.minecraft.core.Registry; import net.minecraft.core.Registry;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Block;

View file

@ -1,6 +1,7 @@
package ru.betterend.blocks; package ru.betterend.blocks;
import java.util.Random; import java.util.Random;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerLevel;
import net.minecraft.world.level.BlockGetter; import net.minecraft.world.level.BlockGetter;

View file

@ -1,6 +1,7 @@
package ru.betterend.blocks; package ru.betterend.blocks;
import java.util.Random; import java.util.Random;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerLevel;
import net.minecraft.world.entity.item.ItemEntity; import net.minecraft.world.entity.item.ItemEntity;

View file

@ -1,6 +1,7 @@
package ru.betterend.blocks; package ru.betterend.blocks;
import java.util.Random; import java.util.Random;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerLevel;
import net.minecraft.world.entity.item.ItemEntity; import net.minecraft.world.entity.item.ItemEntity;

View file

@ -1,6 +1,7 @@
package ru.betterend.blocks.basis; package ru.betterend.blocks.basis;
import java.io.Reader; import java.io.Reader;
import net.minecraft.core.Registry; import net.minecraft.core.Registry;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
import ru.betterend.patterns.Patterns; import ru.betterend.patterns.Patterns;

View file

@ -2,6 +2,7 @@ package ru.betterend.blocks.basis;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.BlockGetter; import net.minecraft.world.level.BlockGetter;
import net.minecraft.world.level.block.BaseEntityBlock; import net.minecraft.world.level.block.BaseEntityBlock;

View file

@ -3,6 +3,7 @@ package ru.betterend.blocks.basis;
import java.io.Reader; import java.io.Reader;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import net.minecraft.core.Registry; import net.minecraft.core.Registry;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.ItemStack;

View file

@ -2,6 +2,9 @@ package ru.betterend.blocks.basis;
import java.util.Map; import java.util.Map;
import java.util.Random; import java.util.Random;
import com.google.common.collect.Maps;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction; import net.minecraft.core.Direction;
import net.minecraft.core.Registry; import net.minecraft.core.Registry;
@ -20,7 +23,6 @@ import net.minecraft.world.level.block.state.StateDefinition;
import net.minecraft.world.level.block.state.properties.EnumProperty; import net.minecraft.world.level.block.state.properties.EnumProperty;
import net.minecraft.world.level.material.MaterialColor; import net.minecraft.world.level.material.MaterialColor;
import net.minecraft.world.phys.BlockHitResult; import net.minecraft.world.phys.BlockHitResult;
import com.google.common.collect.Maps;
import ru.betterend.blocks.BlockProperties; import ru.betterend.blocks.BlockProperties;
import ru.betterend.blocks.BlockProperties.TripleShape; import ru.betterend.blocks.BlockProperties.TripleShape;
import ru.betterend.blocks.EndTerrainBlock; import ru.betterend.blocks.EndTerrainBlock;

View file

@ -1,6 +1,14 @@
package ru.betterend.blocks.entities.render; package ru.betterend.blocks.entities.render;
import java.util.HashMap; import java.util.HashMap;
import com.google.common.collect.Maps;
import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.blaze3d.vertex.VertexConsumer;
import com.mojang.math.Vector3f;
import it.unimi.dsi.fastutil.floats.Float2FloatFunction;
import it.unimi.dsi.fastutil.ints.Int2IntFunction;
import net.minecraft.client.model.geom.ModelPart; import net.minecraft.client.model.geom.ModelPart;
import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.RenderType;
@ -22,12 +30,6 @@ import net.minecraft.world.level.block.entity.ChestBlockEntity;
import net.minecraft.world.level.block.entity.LidBlockEntity; import net.minecraft.world.level.block.entity.LidBlockEntity;
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.block.state.properties.ChestType; import net.minecraft.world.level.block.state.properties.ChestType;
import com.google.common.collect.Maps;
import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.blaze3d.vertex.VertexConsumer;
import com.mojang.math.Vector3f;
import it.unimi.dsi.fastutil.floats.Float2FloatFunction;
import it.unimi.dsi.fastutil.ints.Int2IntFunction;
import ru.betterend.BetterEnd; import ru.betterend.BetterEnd;
import ru.betterend.blocks.basis.EndChestBlock; import ru.betterend.blocks.basis.EndChestBlock;
import ru.betterend.blocks.entities.EChestBlockEntity; import ru.betterend.blocks.entities.EChestBlockEntity;

View file

@ -2,6 +2,13 @@ package ru.betterend.blocks.entities.render;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import com.google.common.collect.Maps;
import com.mojang.blaze3d.platform.NativeImage;
import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.blaze3d.vertex.VertexConsumer;
import com.mojang.math.Vector3f;
import net.minecraft.client.gui.Font; import net.minecraft.client.gui.Font;
import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.RenderType;
@ -20,11 +27,6 @@ import net.minecraft.world.level.block.SignBlock;
import net.minecraft.world.level.block.StandingSignBlock; import net.minecraft.world.level.block.StandingSignBlock;
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.block.state.properties.WoodType; import net.minecraft.world.level.block.state.properties.WoodType;
import com.google.common.collect.Maps;
import com.mojang.blaze3d.platform.NativeImage;
import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.blaze3d.vertex.VertexConsumer;
import com.mojang.math.Vector3f;
import ru.betterend.BetterEnd; import ru.betterend.BetterEnd;
import ru.betterend.blocks.basis.EndSignBlock; import ru.betterend.blocks.basis.EndSignBlock;
import ru.betterend.blocks.entities.ESignBlockEntity; import ru.betterend.blocks.entities.ESignBlockEntity;

View file

@ -2,6 +2,7 @@ package ru.betterend.blocks.entities.render;
import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.math.Vector3f; import com.mojang.math.Vector3f;
import net.fabricmc.api.EnvType; import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment; import net.fabricmc.api.Environment;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;

View file

@ -12,6 +12,7 @@ import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.blaze3d.vertex.Tesselator; import com.mojang.blaze3d.vertex.Tesselator;
import com.mojang.blaze3d.vertex.VertexConsumer; import com.mojang.blaze3d.vertex.VertexConsumer;
import com.mojang.math.Matrix4f; import com.mojang.math.Matrix4f;
import net.fabricmc.api.EnvType; import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment; import net.fabricmc.api.Environment;
import net.minecraft.Util; import net.minecraft.Util;

View file

@ -6,6 +6,7 @@ import java.util.Set;
import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.systems.RenderSystem;
import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.PoseStack;
import net.fabricmc.api.EnvType; import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment; import net.fabricmc.api.Environment;
import net.minecraft.client.gui.GuiComponent; import net.minecraft.client.gui.GuiComponent;

View file

@ -2,6 +2,7 @@ package ru.betterend.client.gui;
import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.systems.RenderSystem;
import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.PoseStack;
import net.fabricmc.api.EnvType; import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment; import net.fabricmc.api.Environment;
import net.minecraft.client.gui.components.ImageButton; import net.minecraft.client.gui.components.ImageButton;

View file

@ -5,6 +5,7 @@ import com.mojang.blaze3d.vertex.VertexConsumer;
import com.mojang.math.Matrix3f; import com.mojang.math.Matrix3f;
import com.mojang.math.Matrix4f; import com.mojang.math.Matrix4f;
import com.mojang.math.Vector3f; import com.mojang.math.Vector3f;
import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.RenderType;
import net.minecraft.client.renderer.texture.OverlayTexture; import net.minecraft.client.renderer.texture.OverlayTexture;

View file

@ -1,94 +1,95 @@
package ru.betterend.client.render; package ru.betterend.client.render;
import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.blaze3d.vertex.VertexConsumer; import com.mojang.blaze3d.vertex.VertexConsumer;
import com.mojang.math.Matrix3f; import com.mojang.math.Matrix3f;
import com.mojang.math.Matrix4f; import com.mojang.math.Matrix4f;
import com.mojang.math.Quaternion; import com.mojang.math.Quaternion;
import com.mojang.math.Vector3f; import com.mojang.math.Vector3f;
import net.minecraft.client.model.geom.ModelPart;
import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.model.geom.ModelPart;
import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.client.renderer.texture.OverlayTexture; import net.minecraft.client.renderer.RenderType;
import net.minecraft.core.BlockPos; import net.minecraft.client.renderer.texture.OverlayTexture;
import net.minecraft.resources.ResourceLocation; import net.minecraft.core.BlockPos;
import net.minecraft.util.Mth; import net.minecraft.resources.ResourceLocation;
import net.minecraft.util.Mth;
public class EndCrystalRenderer {
private static final ResourceLocation CRYSTAL_TEXTURE = new ResourceLocation("textures/entity/end_crystal/end_crystal.png"); public class EndCrystalRenderer {
private static final ResourceLocation CRYSTAL_BEAM_TEXTURE = new ResourceLocation("textures/entity/end_crystal/end_crystal_beam.png"); private static final ResourceLocation CRYSTAL_TEXTURE = new ResourceLocation("textures/entity/end_crystal/end_crystal.png");
private static final RenderType CRYSTAL_BEAM_LAYER; private static final ResourceLocation CRYSTAL_BEAM_TEXTURE = new ResourceLocation("textures/entity/end_crystal/end_crystal_beam.png");
private static final RenderType END_CRYSTAL; private static final RenderType CRYSTAL_BEAM_LAYER;
private static final ModelPart CORE; private static final RenderType END_CRYSTAL;
private static final ModelPart FRAME; private static final ModelPart CORE;
private static final int AGE_CYCLE = 240; private static final ModelPart FRAME;
private static final float SINE_45_DEGREES; private static final int AGE_CYCLE = 240;
private static final float SINE_45_DEGREES;
public static void render(int age, int maxAge, float tickDelta, PoseStack matrices, MultiBufferSource vertexConsumerProvider, int light) {
float k = (float) AGE_CYCLE / maxAge; public static void render(int age, int maxAge, float tickDelta, PoseStack matrices, MultiBufferSource vertexConsumerProvider, int light) {
float rotation = (age * k + tickDelta) * 3.0F; float k = (float) AGE_CYCLE / maxAge;
VertexConsumer vertexConsumer = vertexConsumerProvider.getBuffer(END_CRYSTAL); float rotation = (age * k + tickDelta) * 3.0F;
matrices.pushPose(); VertexConsumer vertexConsumer = vertexConsumerProvider.getBuffer(END_CRYSTAL);
matrices.scale(0.8F, 0.8F, 0.8F); matrices.pushPose();
matrices.translate(0.0D, -0.5D, 0.0D); matrices.scale(0.8F, 0.8F, 0.8F);
matrices.mulPose(Vector3f.YP.rotationDegrees(rotation)); matrices.translate(0.0D, -0.5D, 0.0D);
matrices.translate(0.0D, 0.8F, 0.0D); matrices.mulPose(Vector3f.YP.rotationDegrees(rotation));
matrices.mulPose(new Quaternion(new Vector3f(SINE_45_DEGREES, 0.0F, SINE_45_DEGREES), 60.0F, true)); matrices.translate(0.0D, 0.8F, 0.0D);
FRAME.render(matrices, vertexConsumer, light, OverlayTexture.NO_OVERLAY); matrices.mulPose(new Quaternion(new Vector3f(SINE_45_DEGREES, 0.0F, SINE_45_DEGREES), 60.0F, true));
matrices.scale(0.875F, 0.875F, 0.875F); FRAME.render(matrices, vertexConsumer, light, OverlayTexture.NO_OVERLAY);
matrices.mulPose(new Quaternion(new Vector3f(SINE_45_DEGREES, 0.0F, SINE_45_DEGREES), 60.0F, true)); matrices.scale(0.875F, 0.875F, 0.875F);
matrices.mulPose(Vector3f.YP.rotationDegrees(rotation)); matrices.mulPose(new Quaternion(new Vector3f(SINE_45_DEGREES, 0.0F, SINE_45_DEGREES), 60.0F, true));
FRAME.render(matrices, vertexConsumer, light, OverlayTexture.NO_OVERLAY); matrices.mulPose(Vector3f.YP.rotationDegrees(rotation));
matrices.scale(0.875F, 0.875F, 0.875F); FRAME.render(matrices, vertexConsumer, light, OverlayTexture.NO_OVERLAY);
matrices.mulPose(new Quaternion(new Vector3f(SINE_45_DEGREES, 0.0F, SINE_45_DEGREES), 60.0F, true)); matrices.scale(0.875F, 0.875F, 0.875F);
matrices.mulPose(Vector3f.YP.rotationDegrees(rotation)); matrices.mulPose(new Quaternion(new Vector3f(SINE_45_DEGREES, 0.0F, SINE_45_DEGREES), 60.0F, true));
CORE.render(matrices, vertexConsumer, light, OverlayTexture.NO_OVERLAY); matrices.mulPose(Vector3f.YP.rotationDegrees(rotation));
matrices.popPose(); CORE.render(matrices, vertexConsumer, light, OverlayTexture.NO_OVERLAY);
} matrices.popPose();
}
public static void renderBeam(BlockPos start, BlockPos end, float tickDelta, int age, PoseStack matrices, MultiBufferSource vertexConsumers, int light) {
float dx = start.getX() - end.getX() + 1.0F; public static void renderBeam(BlockPos start, BlockPos end, float tickDelta, int age, PoseStack matrices, MultiBufferSource vertexConsumers, int light) {
float dy = start.getY() - end.getY() + 1.0F; float dx = start.getX() - end.getX() + 1.0F;
float dz = start.getZ() - end.getZ() + 1.0F; float dy = start.getY() - end.getY() + 1.0F;
float f = Mth.sqrt(dx * dx + dz * dz); float dz = start.getZ() - end.getZ() + 1.0F;
float g = Mth.sqrt(dx * dx + dy * dy + dz * dz); float f = Mth.sqrt(dx * dx + dz * dz);
matrices.pushPose(); float g = Mth.sqrt(dx * dx + dy * dy + dz * dz);
matrices.translate(0.0D, 2.0D, 0.0D); matrices.pushPose();
matrices.mulPose(Vector3f.YP.rotation((float)(-Math.atan2((double) dz, (double) dx)) - 1.5707964F)); matrices.translate(0.0D, 2.0D, 0.0D);
matrices.mulPose(Vector3f.XP.rotation((float)(-Math.atan2((double) f, (double) dy)) - 1.5707964F)); matrices.mulPose(Vector3f.YP.rotation((float)(-Math.atan2((double) dz, (double) dx)) - 1.5707964F));
VertexConsumer vertexConsumer = vertexConsumers.getBuffer(CRYSTAL_BEAM_LAYER); matrices.mulPose(Vector3f.XP.rotation((float)(-Math.atan2((double) f, (double) dy)) - 1.5707964F));
float h = 0.0F - ((float) age + tickDelta) * 0.01F; VertexConsumer vertexConsumer = vertexConsumers.getBuffer(CRYSTAL_BEAM_LAYER);
float i = Mth.sqrt(dx * dx + dy * dy + dz * dz) / 32.0F - ((float) age + tickDelta) * 0.01F; float h = 0.0F - ((float) age + tickDelta) * 0.01F;
float k = 0.0F; float i = Mth.sqrt(dx * dx + dy * dy + dz * dz) / 32.0F - ((float) age + tickDelta) * 0.01F;
float l = 0.75F; float k = 0.0F;
float m = 0.0F; float l = 0.75F;
PoseStack.Pose entry = matrices.last(); float m = 0.0F;
Matrix4f matrix4f = entry.pose(); PoseStack.Pose entry = matrices.last();
Matrix3f matrix3f = entry.normal(); Matrix4f matrix4f = entry.pose();
Matrix3f matrix3f = entry.normal();
for(int n = 1; n <= 8; ++n) {
float o = Mth.sin((float) n * 6.2831855F / 8.0F) * 0.75F; for(int n = 1; n <= 8; ++n) {
float p = Mth.cos((float) n * 6.2831855F / 8.0F) * 0.75F; float o = Mth.sin((float) n * 6.2831855F / 8.0F) * 0.75F;
float q = (float) n / 8.0F; float p = Mth.cos((float) n * 6.2831855F / 8.0F) * 0.75F;
vertexConsumer.vertex(matrix4f, k * 0.2F, l * 0.2F, 0.0F).color(0, 0, 0, 255).uv(m, h).overlayCoords(OverlayTexture.NO_OVERLAY).uv2(light).normal(matrix3f, 0.0F, -1.0F, 0.0F).endVertex(); float q = (float) n / 8.0F;
vertexConsumer.vertex(matrix4f, k, l, g).color(255, 255, 255, 255).uv(m, i).overlayCoords(OverlayTexture.NO_OVERLAY).uv2(light).normal(matrix3f, 0.0F, -1.0F, 0.0F).endVertex(); vertexConsumer.vertex(matrix4f, k * 0.2F, l * 0.2F, 0.0F).color(0, 0, 0, 255).uv(m, h).overlayCoords(OverlayTexture.NO_OVERLAY).uv2(light).normal(matrix3f, 0.0F, -1.0F, 0.0F).endVertex();
vertexConsumer.vertex(matrix4f, o, p, g).color(255, 255, 255, 255).uv(q, i).overlayCoords(OverlayTexture.NO_OVERLAY).uv2(light).normal(matrix3f, 0.0F, -1.0F, 0.0F).endVertex(); vertexConsumer.vertex(matrix4f, k, l, g).color(255, 255, 255, 255).uv(m, i).overlayCoords(OverlayTexture.NO_OVERLAY).uv2(light).normal(matrix3f, 0.0F, -1.0F, 0.0F).endVertex();
vertexConsumer.vertex(matrix4f, o * 0.2F, p * 0.2F, 0.0F).color(0, 0, 0, 255).uv(q, h).overlayCoords(OverlayTexture.NO_OVERLAY).uv2(light).normal(matrix3f, 0.0F, -1.0F, 0.0F).endVertex(); vertexConsumer.vertex(matrix4f, o, p, g).color(255, 255, 255, 255).uv(q, i).overlayCoords(OverlayTexture.NO_OVERLAY).uv2(light).normal(matrix3f, 0.0F, -1.0F, 0.0F).endVertex();
k = o; vertexConsumer.vertex(matrix4f, o * 0.2F, p * 0.2F, 0.0F).color(0, 0, 0, 255).uv(q, h).overlayCoords(OverlayTexture.NO_OVERLAY).uv2(light).normal(matrix3f, 0.0F, -1.0F, 0.0F).endVertex();
l = p; k = o;
m = q; l = p;
} m = q;
}
matrices.popPose();
} matrices.popPose();
}
static {
END_CRYSTAL = RenderType.entityCutoutNoCull(CRYSTAL_TEXTURE); static {
CRYSTAL_BEAM_LAYER = RenderType.entitySmoothCutout(CRYSTAL_BEAM_TEXTURE); END_CRYSTAL = RenderType.entityCutoutNoCull(CRYSTAL_TEXTURE);
SINE_45_DEGREES = (float) Math.sin(0.7853981633974483D); CRYSTAL_BEAM_LAYER = RenderType.entitySmoothCutout(CRYSTAL_BEAM_TEXTURE);
FRAME = new ModelPart(64, 32, 0, 0); SINE_45_DEGREES = (float) Math.sin(0.7853981633974483D);
FRAME.addBox(-4.0F, -4.0F, -4.0F, 8.0F, 8.0F, 8.0F); FRAME = new ModelPart(64, 32, 0, 0);
CORE = new ModelPart(64, 32, 32, 0); FRAME.addBox(-4.0F, -4.0F, -4.0F, 8.0F, 8.0F, 8.0F);
CORE.addBox(-4.0F, -4.0F, -4.0F, 8.0F, 8.0F, 8.0F); CORE = new ModelPart(64, 32, 32, 0);
} CORE.addBox(-4.0F, -4.0F, -4.0F, 8.0F, 8.0F, 8.0F);
} }
}

View file

@ -1,69 +1,70 @@
package ru.betterend.client.render; package ru.betterend.client.render;
import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.blaze3d.vertex.VertexConsumer; import com.mojang.blaze3d.vertex.VertexConsumer;
import com.mojang.math.Vector3f; import com.mojang.math.Vector3f;
import net.minecraft.client.model.geom.ModelPart;
import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.model.geom.ModelPart;
import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.client.renderer.texture.OverlayTexture; import net.minecraft.client.renderer.RenderType;
import net.minecraft.core.Vec3i; import net.minecraft.client.renderer.texture.OverlayTexture;
import net.minecraft.util.Mth; import net.minecraft.core.Vec3i;
import ru.betterend.BetterEnd; import net.minecraft.util.Mth;
import ru.betterend.blocks.AuroraCrystalBlock; import ru.betterend.BetterEnd;
import ru.betterend.util.ColorUtil; import ru.betterend.blocks.AuroraCrystalBlock;
import ru.betterend.util.MHelper; import ru.betterend.util.ColorUtil;
import ru.betterend.util.MHelper;
public class EternalCrystalRenderer {
private static final RenderType RENDER_LAYER; public class EternalCrystalRenderer {
private static final ModelPart[] SHARDS; private static final RenderType RENDER_LAYER;
private static final ModelPart CORE; private static final ModelPart[] SHARDS;
private static final ModelPart CORE;
public static void render(int age, float tickDelta, PoseStack matrices, MultiBufferSource vertexConsumerProvider, int light) {
VertexConsumer vertexConsumer = vertexConsumerProvider.getBuffer(RENDER_LAYER); public static void render(int age, float tickDelta, PoseStack matrices, MultiBufferSource vertexConsumerProvider, int light) {
float[] colors = colors(age); VertexConsumer vertexConsumer = vertexConsumerProvider.getBuffer(RENDER_LAYER);
float rotation = (age + tickDelta) / 25.0F + 6.0F; float[] colors = colors(age);
matrices.pushPose(); float rotation = (age + tickDelta) / 25.0F + 6.0F;
matrices.scale(0.6F, 0.6F, 0.6F); matrices.pushPose();
matrices.mulPose(Vector3f.YP.rotation(rotation)); matrices.scale(0.6F, 0.6F, 0.6F);
CORE.render(matrices, vertexConsumer, light, OverlayTexture.NO_OVERLAY, colors[0], colors[1], colors[2], colors[3]); matrices.mulPose(Vector3f.YP.rotation(rotation));
CORE.render(matrices, vertexConsumer, light, OverlayTexture.NO_OVERLAY, colors[0], colors[1], colors[2], colors[3]);
for (int i = 0; i < 4; i++) {
matrices.pushPose(); for (int i = 0; i < 4; i++) {
float offset = Mth.sin(rotation * 2 + i) * 0.15F; matrices.pushPose();
matrices.translate(0, offset, 0); float offset = Mth.sin(rotation * 2 + i) * 0.15F;
SHARDS[i].render(matrices, vertexConsumer, light, OverlayTexture.NO_OVERLAY, colors[0], colors[1], colors[2], colors[3]); matrices.translate(0, offset, 0);
matrices.popPose(); SHARDS[i].render(matrices, vertexConsumer, light, OverlayTexture.NO_OVERLAY, colors[0], colors[1], colors[2], colors[3]);
} matrices.popPose();
}
matrices.popPose();
} matrices.popPose();
}
public static float[] colors(int age) {
double delta = age * 0.01; public static float[] colors(int age) {
int index = MHelper.floor(delta); double delta = age * 0.01;
int index2 = (index + 1) & 3; int index = MHelper.floor(delta);
delta -= index; int index2 = (index + 1) & 3;
index &= 3; delta -= index;
index &= 3;
Vec3i color1 = AuroraCrystalBlock.COLORS[index];
Vec3i color2 = AuroraCrystalBlock.COLORS[index2]; Vec3i color1 = AuroraCrystalBlock.COLORS[index];
Vec3i color2 = AuroraCrystalBlock.COLORS[index2];
int r = MHelper.floor(Mth.lerp(delta, color1.getX(), color2.getX()));
int g = MHelper.floor(Mth.lerp(delta, color1.getY(), color2.getY())); int r = MHelper.floor(Mth.lerp(delta, color1.getX(), color2.getX()));
int b = MHelper.floor(Mth.lerp(delta, color1.getZ(), color2.getZ())); int g = MHelper.floor(Mth.lerp(delta, color1.getY(), color2.getY()));
int b = MHelper.floor(Mth.lerp(delta, color1.getZ(), color2.getZ()));
return ColorUtil.toFloatArray(MHelper.color(r, g, b));
} return ColorUtil.toFloatArray(MHelper.color(r, g, b));
}
static {
RENDER_LAYER = RenderType.beaconBeam(BetterEnd.makeID("textures/entity/eternal_crystal.png"), true); static {
SHARDS = new ModelPart[4]; RENDER_LAYER = RenderType.beaconBeam(BetterEnd.makeID("textures/entity/eternal_crystal.png"), true);
SHARDS[0] = new ModelPart(16, 16, 2, 4).addBox(-5.0F, 1.0F, -3.0F, 2.0F, 8.0F, 2.0F); SHARDS = new ModelPart[4];
SHARDS[1] = new ModelPart(16, 16, 2, 4).addBox(3.0F, -1.0F, -1.0F, 2.0F, 8.0F, 2.0F); SHARDS[0] = new ModelPart(16, 16, 2, 4).addBox(-5.0F, 1.0F, -3.0F, 2.0F, 8.0F, 2.0F);
SHARDS[2] = new ModelPart(16, 16, 2, 4).addBox(-1.0F, 0.0F, -5.0F, 2.0F, 4.0F, 2.0F); SHARDS[1] = new ModelPart(16, 16, 2, 4).addBox(3.0F, -1.0F, -1.0F, 2.0F, 8.0F, 2.0F);
SHARDS[3] = new ModelPart(16, 16, 2, 4).addBox(0.0F, 3.0F, 4.0F, 2.0F, 6.0F, 2.0F); SHARDS[2] = new ModelPart(16, 16, 2, 4).addBox(-1.0F, 0.0F, -5.0F, 2.0F, 4.0F, 2.0F);
CORE = new ModelPart(16, 16, 0, 0); SHARDS[3] = new ModelPart(16, 16, 2, 4).addBox(0.0F, 3.0F, 4.0F, 2.0F, 6.0F, 2.0F);
CORE.addBox(-2.0F, -2.0F, -2.0F, 4.0F, 12.0F, 4.0F); CORE = new ModelPart(16, 16, 0, 0);
} CORE.addBox(-2.0F, -2.0F, -2.0F, 4.0F, 12.0F, 4.0F);
} }
}

View file

@ -4,13 +4,15 @@ import java.lang.reflect.Type;
import java.util.Map; import java.util.Map;
import java.util.function.Consumer; import java.util.function.Consumer;
import java.util.function.Supplier; import java.util.function.Supplier;
import net.minecraft.util.GsonHelper;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import com.google.common.collect.Maps; import com.google.common.collect.Maps;
import com.google.common.reflect.TypeToken; import com.google.common.reflect.TypeToken;
import com.google.gson.JsonElement; import com.google.gson.JsonElement;
import com.google.gson.JsonObject; import com.google.gson.JsonObject;
import net.minecraft.util.GsonHelper;
import ru.betterend.util.JsonFactory; import ru.betterend.util.JsonFactory;
public final class ConfigKeeper { public final class ConfigKeeper {

View file

@ -1,91 +1,93 @@
package ru.betterend.config; package ru.betterend.config;
import java.util.function.BiFunction; import java.util.function.BiFunction;
import net.minecraft.resources.ResourceLocation;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import ru.betterend.config.ConfigKeeper.Entry;
import ru.betterend.config.ConfigKeeper.FloatRange; import net.minecraft.resources.ResourceLocation;
import ru.betterend.config.ConfigKeeper.IntegerRange; import ru.betterend.config.ConfigKeeper.Entry;
import ru.betterend.config.ConfigKeeper.FloatRange;
public class IdConfig extends Config { import ru.betterend.config.ConfigKeeper.IntegerRange;
protected final BiFunction<ResourceLocation, String, ConfigKey> keyFactory; public class IdConfig extends Config {
public IdConfig(String group, BiFunction<ResourceLocation, String, ConfigKey> keyFactory) { protected final BiFunction<ResourceLocation, String, ConfigKey> keyFactory;
super(group);
this.keyFactory = keyFactory; public IdConfig(String group, BiFunction<ResourceLocation, String, ConfigKey> keyFactory) {
} super(group);
this.keyFactory = keyFactory;
@Override }
protected void registerEntries() {}
@Override
protected ConfigKey createKey(ResourceLocation id, String key) { protected void registerEntries() {}
return this.keyFactory.apply(id, key);
} protected ConfigKey createKey(ResourceLocation id, String key) {
return this.keyFactory.apply(id, key);
@Nullable }
public <T, E extends Entry<T>> E getEntry(ResourceLocation id, String key, Class<E> type) {
return this.getEntry(createKey(id, key), type); @Nullable
} public <T, E extends Entry<T>> E getEntry(ResourceLocation id, String key, Class<E> type) {
return this.getEntry(createKey(id, key), type);
@Nullable }
public <T, E extends Entry<T>> T getDefault(ResourceLocation id, String key, Class<E> type) {
return this.getDefault(createKey(id, key), type); @Nullable
} public <T, E extends Entry<T>> T getDefault(ResourceLocation id, String key, Class<E> type) {
return this.getDefault(createKey(id, key), type);
public String getString(ResourceLocation id, String key, String defaultValue) { }
return this.getString(createKey(id, key), defaultValue);
} public String getString(ResourceLocation id, String key, String defaultValue) {
return this.getString(createKey(id, key), defaultValue);
public String getString(ResourceLocation id, String key) { }
return this.getString(createKey(id, key));
} public String getString(ResourceLocation id, String key) {
return this.getString(createKey(id, key));
public boolean setString(ResourceLocation id, String key, String value) { }
return this.setString(createKey(id, key), value);
} public boolean setString(ResourceLocation id, String key, String value) {
return this.setString(createKey(id, key), value);
public int getInt(ResourceLocation id, String key, int defaultValue) { }
return this.getInt(createKey(id, key), defaultValue);
} public int getInt(ResourceLocation id, String key, int defaultValue) {
return this.getInt(createKey(id, key), defaultValue);
public int getInt(ResourceLocation id, String key) { }
return this.getInt(createKey(id, key));
} public int getInt(ResourceLocation id, String key) {
return this.getInt(createKey(id, key));
public boolean setInt(ResourceLocation id, String key, int value) { }
return this.setInt(createKey(id, key), value);
} public boolean setInt(ResourceLocation id, String key, int value) {
return this.setInt(createKey(id, key), value);
public boolean setRangedInt(ResourceLocation id, String key, int value) { }
return this.setRanged(createKey(id, key), value, IntegerRange.class);
} public boolean setRangedInt(ResourceLocation id, String key, int value) {
return this.setRanged(createKey(id, key), value, IntegerRange.class);
public boolean setRangedFloat(ResourceLocation id, String key, float value) { }
return this.setRanged(createKey(id, key), value, FloatRange.class);
} public boolean setRangedFloat(ResourceLocation id, String key, float value) {
return this.setRanged(createKey(id, key), value, FloatRange.class);
public float getFloat(ResourceLocation id, String key, float defaultValue) { }
return this.getFloat(createKey(id, key), defaultValue);
} public float getFloat(ResourceLocation id, String key, float defaultValue) {
return this.getFloat(createKey(id, key), defaultValue);
public float getFloat(ResourceLocation id, String key) { }
return this.getFloat(createKey(id, key));
} public float getFloat(ResourceLocation id, String key) {
return this.getFloat(createKey(id, key));
public boolean setFloat(ResourceLocation id, String key, float value) { }
return this.setFloat(createKey(id, key), value);
} public boolean setFloat(ResourceLocation id, String key, float value) {
return this.setFloat(createKey(id, key), value);
public boolean getBoolean(ResourceLocation id, String key, boolean defaultValue) { }
return this.getBoolean(createKey(id, key), defaultValue);
} public boolean getBoolean(ResourceLocation id, String key, boolean defaultValue) {
return this.getBoolean(createKey(id, key), defaultValue);
public boolean getBoolean(ResourceLocation id, String key) { }
return this.getBoolean(createKey(id, key));
} public boolean getBoolean(ResourceLocation id, String key) {
return this.getBoolean(createKey(id, key));
public boolean setBoolean(ResourceLocation id, String key, boolean value) { }
return this.setBoolean(createKey(id, key), value);
} public boolean setBoolean(ResourceLocation id, String key, boolean value) {
} return this.setBoolean(createKey(id, key), value);
}
}

View file

@ -2,6 +2,7 @@ package ru.betterend.entity;
import java.util.List; import java.util.List;
import java.util.Random; import java.util.Random;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.CompoundTag;
import net.minecraft.network.protocol.game.ClientboundGameEventPacket; import net.minecraft.network.protocol.game.ClientboundGameEventPacket;
@ -30,7 +31,6 @@ import net.minecraft.world.entity.animal.AbstractSchoolingFish;
import net.minecraft.world.entity.item.ItemEntity; import net.minecraft.world.entity.item.ItemEntity;
import net.minecraft.world.entity.player.Player; import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.Items;
import net.minecraft.world.level.Level; import net.minecraft.world.level.Level;
import net.minecraft.world.level.ServerLevelAccessor; import net.minecraft.world.level.ServerLevelAccessor;
import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.AABB;
@ -49,7 +49,13 @@ public class CubozoaEntity extends AbstractSchoolingFish {
@Override @Override
public SpawnGroupData finalizeSpawn(ServerLevelAccessor world, DifficultyInstance difficulty, MobSpawnType spawnReason, SpawnGroupData entityData, CompoundTag entityTag) { public SpawnGroupData finalizeSpawn(ServerLevelAccessor world, DifficultyInstance difficulty, MobSpawnType spawnReason, SpawnGroupData entityData, CompoundTag entityTag) {
SpawnGroupData data = super.finalizeSpawn(world, difficulty, spawnReason, entityData, entityTag); SpawnGroupData data = super.finalizeSpawn(world, difficulty, spawnReason, entityData, entityTag);
if (EndBiomes.getFromBiome(world.getBiome(blockPosition())) == EndBiomes.SULPHUR_SPRINGS) { if (entityTag != null) {
if (entityTag.contains("variant"))
this.entityData.set(VARIANT, entityTag.getByte("variant"));
if (entityTag.contains("scale"))
this.entityData.set(SCALE, entityTag.getByte("scale"));
}
else if (EndBiomes.getFromBiome(world.getBiome(blockPosition())) == EndBiomes.SULPHUR_SPRINGS) {
this.entityData.set(VARIANT, (byte) 1); this.entityData.set(VARIANT, (byte) 1);
} }
this.refreshDimensions(); this.refreshDimensions();
@ -67,7 +73,7 @@ public class CubozoaEntity extends AbstractSchoolingFish {
public void addAdditionalSaveData(CompoundTag tag) { public void addAdditionalSaveData(CompoundTag tag) {
super.addAdditionalSaveData(tag); super.addAdditionalSaveData(tag);
tag.putByte("Variant", (byte) getVariant()); tag.putByte("Variant", (byte) getVariant());
tag.putByte("Scale", (byte) getScale()); tag.putByte("Scale", getByteScale());
} }
@Override @Override
@ -80,6 +86,15 @@ public class CubozoaEntity extends AbstractSchoolingFish {
this.entityData.set(SCALE, tag.getByte("Scale")); this.entityData.set(SCALE, tag.getByte("Scale"));
} }
} }
@Override
protected ItemStack getBucketItemStack() {
ItemStack bucket = EndItems.BUCKET_CUBOZOA.getDefaultInstance();
CompoundTag tag = bucket.getOrCreateTag();
tag.putByte("variant", entityData.get(VARIANT));
tag.putByte("scale", entityData.get(SCALE));
return bucket;
}
public static AttributeSupplier.Builder createMobAttributes() { public static AttributeSupplier.Builder createMobAttributes() {
return LivingEntity.createLivingAttributes() return LivingEntity.createLivingAttributes()
@ -91,9 +106,13 @@ public class CubozoaEntity extends AbstractSchoolingFish {
public int getVariant() { public int getVariant() {
return (int) this.entityData.get(VARIANT); return (int) this.entityData.get(VARIANT);
} }
public byte getByteScale() {
return this.entityData.get(SCALE);
}
public float getScale() { public float getScale() {
return this.entityData.get(SCALE) / 32F + 0.75F; return getByteScale() / 32F + 0.75F;
} }
public static boolean canSpawn(EntityType<CubozoaEntity> type, ServerLevelAccessor world, MobSpawnType spawnReason, BlockPos pos, Random random) { public static boolean canSpawn(EntityType<CubozoaEntity> type, ServerLevelAccessor world, MobSpawnType spawnReason, BlockPos pos, Random random) {
@ -117,11 +136,6 @@ public class CubozoaEntity extends AbstractSchoolingFish {
} }
} }
@Override
protected ItemStack getBucketItemStack() {
return new ItemStack(Items.WATER_BUCKET);
}
@Override @Override
protected SoundEvent getFlopSound() { protected SoundEvent getFlopSound() {
return SoundEvents.SALMON_FLOP; return SoundEvents.SALMON_FLOP;

View file

@ -2,6 +2,7 @@ package ru.betterend.entity;
import java.util.EnumSet; import java.util.EnumSet;
import java.util.Random; import java.util.Random;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerLevel;
import net.minecraft.sounds.SoundEvent; import net.minecraft.sounds.SoundEvent;
@ -31,8 +32,6 @@ import net.minecraft.world.level.levelgen.Heightmap.Types;
import net.minecraft.world.level.pathfinder.BlockPathTypes; import net.minecraft.world.level.pathfinder.BlockPathTypes;
import net.minecraft.world.level.pathfinder.Path; import net.minecraft.world.level.pathfinder.Path;
import net.minecraft.world.phys.Vec3; import net.minecraft.world.phys.Vec3;
import ru.betterend.entity.DragonflyEntity.DragonflyLookControl;
import ru.betterend.entity.DragonflyEntity.WanderAroundGoal;
import ru.betterend.registry.EndEntities; import ru.betterend.registry.EndEntities;
import ru.betterend.registry.EndSounds; import ru.betterend.registry.EndSounds;
import ru.betterend.util.BlocksHelper; import ru.betterend.util.BlocksHelper;

View file

@ -2,6 +2,7 @@ package ru.betterend.entity;
import java.util.List; import java.util.List;
import java.util.Random; import java.util.Random;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.core.particles.ParticleTypes; import net.minecraft.core.particles.ParticleTypes;
import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.CompoundTag;
@ -42,7 +43,13 @@ public class EndFishEntity extends AbstractSchoolingFish {
@Override @Override
public SpawnGroupData finalizeSpawn(ServerLevelAccessor world, DifficultyInstance difficulty, MobSpawnType spawnReason, SpawnGroupData entityData, CompoundTag entityTag) { public SpawnGroupData finalizeSpawn(ServerLevelAccessor world, DifficultyInstance difficulty, MobSpawnType spawnReason, SpawnGroupData entityData, CompoundTag entityTag) {
SpawnGroupData data = super.finalizeSpawn(world, difficulty, spawnReason, entityData, entityTag); SpawnGroupData data = super.finalizeSpawn(world, difficulty, spawnReason, entityData, entityTag);
if (EndBiomes.getFromBiome(world.getBiome(blockPosition())) == EndBiomes.SULPHUR_SPRINGS) { if (entityTag != null) {
if (entityTag.contains("variant"))
this.entityData.set(VARIANT, entityTag.getByte("variant"));
if (entityTag.contains("scale"))
this.entityData.set(SCALE, entityTag.getByte("scale"));
}
else if (EndBiomes.getFromBiome(world.getBiome(blockPosition())) == EndBiomes.SULPHUR_SPRINGS) {
this.entityData.set(VARIANT, (byte) (random.nextInt(VARIANTS_SULPHUR) + VARIANTS_NORMAL)); this.entityData.set(VARIANT, (byte) (random.nextInt(VARIANTS_SULPHUR) + VARIANTS_NORMAL));
} }
this.refreshDimensions(); this.refreshDimensions();
@ -60,7 +67,7 @@ public class EndFishEntity extends AbstractSchoolingFish {
public void addAdditionalSaveData(CompoundTag tag) { public void addAdditionalSaveData(CompoundTag tag) {
super.addAdditionalSaveData(tag); super.addAdditionalSaveData(tag);
tag.putByte("Variant", (byte) getVariant()); tag.putByte("Variant", (byte) getVariant());
tag.putByte("Scale", (byte) getScale()); tag.putByte("Scale", getByteScale());
} }
@Override @Override
@ -76,7 +83,11 @@ public class EndFishEntity extends AbstractSchoolingFish {
@Override @Override
protected ItemStack getBucketItemStack() { protected ItemStack getBucketItemStack() {
return new ItemStack(EndItems.BUCKET_END_FISH); ItemStack bucket = EndItems.BUCKET_END_FISH.getDefaultInstance();
CompoundTag tag = bucket.getOrCreateTag();
tag.putByte("variant", entityData.get(VARIANT));
tag.putByte("scale", entityData.get(SCALE));
return bucket;
} }
@Override @Override
@ -121,8 +132,12 @@ public class EndFishEntity extends AbstractSchoolingFish {
return (int) this.entityData.get(VARIANT); return (int) this.entityData.get(VARIANT);
} }
public byte getByteScale() {
return this.entityData.get(SCALE);
}
public float getScale() { public float getScale() {
return this.entityData.get(SCALE) / 32F + 0.75F; return getByteScale() / 32F + 0.75F;
} }
public static boolean canSpawn(EntityType<EndFishEntity> type, ServerLevelAccessor world, MobSpawnType spawnReason, BlockPos pos, Random random) { public static boolean canSpawn(EntityType<EndFishEntity> type, ServerLevelAccessor world, MobSpawnType spawnReason, BlockPos pos, Random random) {

View file

@ -3,6 +3,7 @@ package ru.betterend.entity;
import java.util.EnumSet; import java.util.EnumSet;
import java.util.List; import java.util.List;
import java.util.Random; import java.util.Random;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.core.BlockPos.MutableBlockPos; import net.minecraft.core.BlockPos.MutableBlockPos;
import net.minecraft.core.particles.ParticleOptions; import net.minecraft.core.particles.ParticleOptions;
@ -37,11 +38,6 @@ import net.minecraft.world.level.ServerLevelAccessor;
import net.minecraft.world.level.biome.Biome; import net.minecraft.world.level.biome.Biome;
import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.Blocks;
import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.AABB;
import ru.betterend.entity.EndSlimeEntity.EndSlimeMoveControl;
import ru.betterend.entity.EndSlimeEntity.FaceTowardTargetGoal;
import ru.betterend.entity.EndSlimeEntity.MoveGoal;
import ru.betterend.entity.EndSlimeEntity.RandomLookGoal;
import ru.betterend.entity.EndSlimeEntity.SwimmingGoal;
import ru.betterend.interfaces.ISlime; import ru.betterend.interfaces.ISlime;
import ru.betterend.registry.EndBiomes; import ru.betterend.registry.EndBiomes;
import ru.betterend.util.BlocksHelper; import ru.betterend.util.BlocksHelper;

View file

@ -2,6 +2,7 @@ package ru.betterend.entity;
import java.util.List; import java.util.List;
import java.util.Random; import java.util.Random;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.core.particles.ParticleTypes; import net.minecraft.core.particles.ParticleTypes;
import net.minecraft.sounds.SoundEvent; import net.minecraft.sounds.SoundEvent;

View file

@ -5,6 +5,7 @@ import java.util.List;
import java.util.Random; import java.util.Random;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.core.Registry; import net.minecraft.core.Registry;
import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.CompoundTag;
@ -46,9 +47,6 @@ import net.minecraft.world.phys.AABB;
import net.minecraft.world.phys.Vec3; import net.minecraft.world.phys.Vec3;
import ru.betterend.BetterEnd; import ru.betterend.BetterEnd;
import ru.betterend.blocks.BlockProperties; import ru.betterend.blocks.BlockProperties;
import ru.betterend.entity.SilkMothEntity.MothLookControl;
import ru.betterend.entity.SilkMothEntity.ReturnToHiveGoal;
import ru.betterend.entity.SilkMothEntity.WanderAroundGoal;
import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndBlocks;
import ru.betterend.registry.EndEntities; import ru.betterend.registry.EndEntities;
import ru.betterend.registry.EndItems; import ru.betterend.registry.EndItems;

View file

@ -1,6 +1,7 @@
package ru.betterend.entity.model; package ru.betterend.entity.model;
import java.util.function.Function; import java.util.function.Function;
import net.minecraft.client.model.EntityModel; import net.minecraft.client.model.EntityModel;
import net.minecraft.client.model.geom.ModelPart; import net.minecraft.client.model.geom.ModelPart;
import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.RenderType;

View file

@ -2,6 +2,7 @@ package ru.betterend.entity.model;
import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.blaze3d.vertex.VertexConsumer; import com.mojang.blaze3d.vertex.VertexConsumer;
import net.minecraft.client.model.geom.ModelPart; import net.minecraft.client.model.geom.ModelPart;
import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.RenderType;
import net.minecraft.util.Mth; import net.minecraft.util.Mth;

View file

@ -2,6 +2,7 @@ package ru.betterend.entity.model;
import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.blaze3d.vertex.VertexConsumer; import com.mojang.blaze3d.vertex.VertexConsumer;
import net.minecraft.client.model.geom.ModelPart; import net.minecraft.client.model.geom.ModelPart;
import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.RenderType;
import ru.betterend.entity.DragonflyEntity; import ru.betterend.entity.DragonflyEntity;

View file

@ -2,6 +2,7 @@ package ru.betterend.entity.model;
import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.blaze3d.vertex.VertexConsumer; import com.mojang.blaze3d.vertex.VertexConsumer;
import net.minecraft.client.model.geom.ModelPart; import net.minecraft.client.model.geom.ModelPart;
import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.RenderType;
import ru.betterend.entity.EndFishEntity; import ru.betterend.entity.EndFishEntity;

View file

@ -3,6 +3,7 @@ package ru.betterend.entity.model;
import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableList;
import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.blaze3d.vertex.VertexConsumer; import com.mojang.blaze3d.vertex.VertexConsumer;
import net.minecraft.client.model.ListModel; import net.minecraft.client.model.ListModel;
import net.minecraft.client.model.geom.ModelPart; import net.minecraft.client.model.geom.ModelPart;
import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.RenderType;

View file

@ -2,6 +2,7 @@ package ru.betterend.entity.model;
import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.blaze3d.vertex.VertexConsumer; import com.mojang.blaze3d.vertex.VertexConsumer;
import net.minecraft.client.model.geom.ModelPart; import net.minecraft.client.model.geom.ModelPart;
import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.RenderType;
import net.minecraft.util.Mth; import net.minecraft.util.Mth;

View file

@ -2,6 +2,7 @@ package ru.betterend.entity.render;
import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.blaze3d.vertex.VertexConsumer; import com.mojang.blaze3d.vertex.VertexConsumer;
import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.RenderType;
import net.minecraft.client.renderer.entity.EntityRenderDispatcher; import net.minecraft.client.renderer.entity.EntityRenderDispatcher;

View file

@ -2,6 +2,7 @@ package ru.betterend.entity.render;
import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.blaze3d.vertex.VertexConsumer; import com.mojang.blaze3d.vertex.VertexConsumer;
import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.RenderType;
import net.minecraft.client.renderer.entity.EntityRenderDispatcher; import net.minecraft.client.renderer.entity.EntityRenderDispatcher;

View file

@ -2,6 +2,7 @@ package ru.betterend.entity.render;
import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.blaze3d.vertex.VertexConsumer; import com.mojang.blaze3d.vertex.VertexConsumer;
import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.RenderType;
import net.minecraft.client.renderer.entity.EntityRenderDispatcher; import net.minecraft.client.renderer.entity.EntityRenderDispatcher;

View file

@ -2,8 +2,10 @@ package ru.betterend.integration;
import java.awt.Color; import java.awt.Color;
import java.util.Map; import java.util.Map;
import net.minecraft.world.level.ItemLike;
import com.google.common.collect.Maps; import com.google.common.collect.Maps;
import net.minecraft.world.level.ItemLike;
import ru.betterend.blocks.HydraluxPetalColoredBlock; import ru.betterend.blocks.HydraluxPetalColoredBlock;
import ru.betterend.blocks.complex.ColoredMaterial; import ru.betterend.blocks.complex.ColoredMaterial;
import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndBlocks;

View file

@ -2,6 +2,7 @@ package ru.betterend.integration.byg;
import java.util.List; import java.util.List;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import net.minecraft.data.BuiltinRegistries; import net.minecraft.data.BuiltinRegistries;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.entity.ai.behavior.WeightedList; import net.minecraft.world.entity.ai.behavior.WeightedList;

View file

@ -1,6 +1,7 @@
package ru.betterend.integration.byg.biomes; package ru.betterend.integration.byg.biomes;
import java.util.List; import java.util.List;
import net.minecraft.sounds.SoundEvent; import net.minecraft.sounds.SoundEvent;
import net.minecraft.world.entity.MobCategory; import net.minecraft.world.entity.MobCategory;
import net.minecraft.world.level.biome.Biome; import net.minecraft.world.level.biome.Biome;

View file

@ -1,6 +1,7 @@
package ru.betterend.integration.byg.biomes; package ru.betterend.integration.byg.biomes;
import java.util.List; import java.util.List;
import net.minecraft.core.particles.ParticleTypes; import net.minecraft.core.particles.ParticleTypes;
import net.minecraft.sounds.SoundEvent; import net.minecraft.sounds.SoundEvent;
import net.minecraft.world.entity.MobCategory; import net.minecraft.world.entity.MobCategory;

View file

@ -2,6 +2,7 @@ package ru.betterend.integration.byg.biomes;
import java.util.List; import java.util.List;
import java.util.function.Supplier; import java.util.function.Supplier;
import net.minecraft.core.Registry; import net.minecraft.core.Registry;
import net.minecraft.core.particles.ParticleTypes; import net.minecraft.core.particles.ParticleTypes;
import net.minecraft.data.BuiltinRegistries; import net.minecraft.data.BuiltinRegistries;

View file

@ -2,14 +2,16 @@ package ru.betterend.integration.byg.features;
import java.util.List; import java.util.List;
import java.util.Random; import java.util.Random;
import com.google.common.base.Function;
import com.mojang.math.Vector3f;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.world.level.WorldGenLevel; import net.minecraft.world.level.WorldGenLevel;
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.chunk.ChunkGenerator;
import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration;
import net.minecraft.world.level.material.Material; import net.minecraft.world.level.material.Material;
import com.google.common.base.Function;
import com.mojang.math.Vector3f;
import ru.betterend.integration.Integrations; import ru.betterend.integration.Integrations;
import ru.betterend.registry.EndTags; import ru.betterend.registry.EndTags;
import ru.betterend.util.MHelper; import ru.betterend.util.MHelper;

View file

@ -2,6 +2,11 @@ package ru.betterend.integration.byg.features;
import java.util.List; import java.util.List;
import java.util.Random; import java.util.Random;
import com.google.common.base.Function;
import com.google.common.collect.Lists;
import com.mojang.math.Vector3f;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.core.BlockPos.MutableBlockPos; import net.minecraft.core.BlockPos.MutableBlockPos;
import net.minecraft.core.Direction; import net.minecraft.core.Direction;
@ -12,9 +17,6 @@ import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.chunk.ChunkGenerator;
import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration;
import net.minecraft.world.level.material.Material; import net.minecraft.world.level.material.Material;
import com.google.common.base.Function;
import com.google.common.collect.Lists;
import com.mojang.math.Vector3f;
import ru.betterend.integration.Integrations; import ru.betterend.integration.Integrations;
import ru.betterend.registry.EndTags; import ru.betterend.registry.EndTags;
import ru.betterend.util.BlocksHelper; import ru.betterend.util.BlocksHelper;

View file

@ -2,6 +2,11 @@ package ru.betterend.integration.byg.features;
import java.util.List; import java.util.List;
import java.util.Random; import java.util.Random;
import com.google.common.base.Function;
import com.google.common.collect.Lists;
import com.mojang.math.Vector3f;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.core.BlockPos.MutableBlockPos; import net.minecraft.core.BlockPos.MutableBlockPos;
import net.minecraft.core.Direction; import net.minecraft.core.Direction;
@ -12,9 +17,6 @@ import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.chunk.ChunkGenerator;
import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration;
import net.minecraft.world.level.material.Material; import net.minecraft.world.level.material.Material;
import com.google.common.base.Function;
import com.google.common.collect.Lists;
import com.mojang.math.Vector3f;
import ru.betterend.integration.Integrations; import ru.betterend.integration.Integrations;
import ru.betterend.registry.EndTags; import ru.betterend.registry.EndTags;
import ru.betterend.util.BlocksHelper; import ru.betterend.util.BlocksHelper;

View file

@ -3,6 +3,10 @@ package ru.betterend.integration.byg.features;
import java.util.List; import java.util.List;
import java.util.Random; import java.util.Random;
import java.util.function.Function; import java.util.function.Function;
import com.google.common.collect.Lists;
import com.mojang.math.Vector3f;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.util.Mth; import net.minecraft.util.Mth;
import net.minecraft.world.level.WorldGenLevel; import net.minecraft.world.level.WorldGenLevel;
@ -12,8 +16,6 @@ import net.minecraft.world.level.chunk.ChunkGenerator;
import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration;
import net.minecraft.world.level.material.Material; import net.minecraft.world.level.material.Material;
import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.AABB;
import com.google.common.collect.Lists;
import com.mojang.math.Vector3f;
import ru.betterend.integration.Integrations; import ru.betterend.integration.Integrations;
import ru.betterend.noise.OpenSimplexNoise; import ru.betterend.noise.OpenSimplexNoise;
import ru.betterend.registry.EndTags; import ru.betterend.registry.EndTags;

View file

@ -1,88 +1,89 @@
package ru.betterend.integration.rei; package ru.betterend.integration.rei;
import java.text.DecimalFormat; import java.text.DecimalFormat;
import java.util.List; import java.util.List;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.PoseStack;
import it.unimi.dsi.fastutil.ints.IntList;
import me.shedaniel.math.Point; import it.unimi.dsi.fastutil.ints.IntList;
import me.shedaniel.math.Rectangle; import me.shedaniel.math.Point;
import me.shedaniel.rei.api.EntryStack; import me.shedaniel.math.Rectangle;
import me.shedaniel.rei.api.TransferRecipeCategory; import me.shedaniel.rei.api.EntryStack;
import me.shedaniel.rei.api.widgets.Widgets; import me.shedaniel.rei.api.TransferRecipeCategory;
import me.shedaniel.rei.gui.entries.RecipeEntry; import me.shedaniel.rei.api.widgets.Widgets;
import me.shedaniel.rei.gui.entries.SimpleRecipeEntry; import me.shedaniel.rei.gui.entries.RecipeEntry;
import me.shedaniel.rei.gui.widget.Widget; import me.shedaniel.rei.gui.entries.SimpleRecipeEntry;
import net.minecraft.client.gui.GuiComponent; import me.shedaniel.rei.gui.widget.Widget;
import net.minecraft.network.chat.TranslatableComponent; import net.minecraft.client.gui.GuiComponent;
import net.minecraft.resources.ResourceLocation; import net.minecraft.network.chat.TranslatableComponent;
import ru.betterend.recipe.builders.AlloyingRecipe; import net.minecraft.resources.ResourceLocation;
import ru.betterend.registry.EndBlocks; import ru.betterend.recipe.builders.AlloyingRecipe;
import ru.betterend.util.LangUtil; import ru.betterend.registry.EndBlocks;
import ru.betterend.util.LangUtil;
public class REIAlloyingCategory implements TransferRecipeCategory<REIAlloyingDisplay> {
public class REIAlloyingCategory implements TransferRecipeCategory<REIAlloyingDisplay> {
@Override
public @NotNull ResourceLocation getIdentifier() { @Override
return AlloyingRecipe.ID; public @NotNull ResourceLocation getIdentifier() {
} return AlloyingRecipe.ID;
}
@Override
public @NotNull String getCategoryName() { @Override
return LangUtil.translate(EndBlocks.END_STONE_SMELTER.getDescriptionId()); public @NotNull String getCategoryName() {
} return LangUtil.translate(EndBlocks.END_STONE_SMELTER.getDescriptionId());
}
@Override
public @NotNull EntryStack getLogo() { @Override
return REIPlugin.END_STONE_SMELTER; public @NotNull EntryStack getLogo() {
} return REIPlugin.END_STONE_SMELTER;
}
@Override
public @NotNull List<Widget> setupDisplay(REIAlloyingDisplay display, Rectangle bounds) { @Override
Point startPoint = new Point(bounds.getCenterX() - 41, bounds.y + 10); public @NotNull List<Widget> setupDisplay(REIAlloyingDisplay display, Rectangle bounds) {
double smeltTime = display.getSmeltTime(); Point startPoint = new Point(bounds.getCenterX() - 41, bounds.y + 10);
DecimalFormat df = new DecimalFormat("###.##"); double smeltTime = display.getSmeltTime();
List<Widget> widgets = Lists.newArrayList(); DecimalFormat df = new DecimalFormat("###.##");
widgets.add(Widgets.createRecipeBase(bounds)); List<Widget> widgets = Lists.newArrayList();
widgets.add(Widgets.createResultSlotBackground(new Point(startPoint.x + 61, startPoint.y + 9))); widgets.add(Widgets.createRecipeBase(bounds));
widgets.add(Widgets.createBurningFire(new Point(startPoint.x - 9, startPoint.y + 20)).animationDurationMS(10000)); widgets.add(Widgets.createResultSlotBackground(new Point(startPoint.x + 61, startPoint.y + 9)));
widgets.add(Widgets.createLabel(new Point(bounds.x + bounds.width - 5, bounds.y + 5), widgets.add(Widgets.createBurningFire(new Point(startPoint.x - 9, startPoint.y + 20)).animationDurationMS(10000));
new TranslatableComponent("category.rei.cooking.time&xp", df.format(display.getXp()), df.format(smeltTime / 20D))).noShadow().rightAligned().color(0xFF404040, 0xFFBBBBBB)); widgets.add(Widgets.createLabel(new Point(bounds.x + bounds.width - 5, bounds.y + 5),
widgets.add(Widgets.createArrow(new Point(startPoint.x + 24, startPoint.y + 8)).animationDurationTicks(smeltTime)); new TranslatableComponent("category.rei.cooking.time&xp", df.format(display.getXp()), df.format(smeltTime / 20D))).noShadow().rightAligned().color(0xFF404040, 0xFFBBBBBB));
List<List<EntryStack>> inputEntries = display.getInputEntries(); widgets.add(Widgets.createArrow(new Point(startPoint.x + 24, startPoint.y + 8)).animationDurationTicks(smeltTime));
widgets.add(Widgets.createSlot(new Point(startPoint.x - 20, startPoint.y + 1)).entries(inputEntries.get(0)).markInput()); List<List<EntryStack>> inputEntries = display.getInputEntries();
if (inputEntries.size() > 1) { widgets.add(Widgets.createSlot(new Point(startPoint.x - 20, startPoint.y + 1)).entries(inputEntries.get(0)).markInput());
widgets.add(Widgets.createSlot(new Point(startPoint.x + 1, startPoint.y + 1)).entries(inputEntries.get(1)).markInput()); if (inputEntries.size() > 1) {
} else { widgets.add(Widgets.createSlot(new Point(startPoint.x + 1, startPoint.y + 1)).entries(inputEntries.get(1)).markInput());
widgets.add(Widgets.createSlot(new Point(startPoint.x + 1, startPoint.y + 1)).entries(Lists.newArrayList()).markInput()); } else {
} widgets.add(Widgets.createSlot(new Point(startPoint.x + 1, startPoint.y + 1)).entries(Lists.newArrayList()).markInput());
widgets.add(Widgets.createSlot(new Point(startPoint.x + 61, startPoint.y + 9)).entries(display.getResultingEntries().get(0)).disableBackground().markOutput()); }
return widgets; widgets.add(Widgets.createSlot(new Point(startPoint.x + 61, startPoint.y + 9)).entries(display.getResultingEntries().get(0)).disableBackground().markOutput());
} return widgets;
}
@Override
public void renderRedSlots(PoseStack matrices, List<Widget> widgets, Rectangle bounds, REIAlloyingDisplay display, @Override
IntList redSlots) { public void renderRedSlots(PoseStack matrices, List<Widget> widgets, Rectangle bounds, REIAlloyingDisplay display,
Point startPoint = new Point(bounds.getCenterX() - 41, bounds.getCenterY() - 27); IntList redSlots) {
matrices.pushPose(); Point startPoint = new Point(bounds.getCenterX() - 41, bounds.getCenterY() - 27);
matrices.translate(0, 0, 400); matrices.pushPose();
if (redSlots.contains(0)) { matrices.translate(0, 0, 400);
GuiComponent.fill(matrices, startPoint.x - 20, startPoint.y + 1, startPoint.x - 20 + 16, startPoint.y + 1 + 16, 1090453504); if (redSlots.contains(0)) {
GuiComponent.fill(matrices, startPoint.x + 1, startPoint.y + 1, startPoint.x + 1 + 16, startPoint.y + 1 + 16, 1090453504); GuiComponent.fill(matrices, startPoint.x - 20, startPoint.y + 1, startPoint.x - 20 + 16, startPoint.y + 1 + 16, 1090453504);
} GuiComponent.fill(matrices, startPoint.x + 1, startPoint.y + 1, startPoint.x + 1 + 16, startPoint.y + 1 + 16, 1090453504);
matrices.popPose(); }
} matrices.popPose();
}
@Override
public @NotNull RecipeEntry getSimpleRenderer(REIAlloyingDisplay recipe) { @Override
return SimpleRecipeEntry.from(recipe.getInputEntries(), recipe.getResultingEntries()); public @NotNull RecipeEntry getSimpleRenderer(REIAlloyingDisplay recipe) {
} return SimpleRecipeEntry.from(recipe.getInputEntries(), recipe.getResultingEntries());
}
@Override
public int getDisplayHeight() { @Override
return 49; public int getDisplayHeight() {
} return 49;
} }
}

View file

@ -1,91 +1,92 @@
package ru.betterend.integration.rei; package ru.betterend.integration.rei;
import java.text.DecimalFormat; import java.text.DecimalFormat;
import java.util.List; import java.util.List;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.PoseStack;
import me.shedaniel.math.Point;
import me.shedaniel.math.Rectangle; import me.shedaniel.math.Point;
import me.shedaniel.rei.api.EntryStack; import me.shedaniel.math.Rectangle;
import me.shedaniel.rei.api.RecipeCategory; import me.shedaniel.rei.api.EntryStack;
import me.shedaniel.rei.api.widgets.Slot; import me.shedaniel.rei.api.RecipeCategory;
import me.shedaniel.rei.api.widgets.Tooltip; import me.shedaniel.rei.api.widgets.Slot;
import me.shedaniel.rei.api.widgets.Widgets; import me.shedaniel.rei.api.widgets.Tooltip;
import me.shedaniel.rei.gui.entries.RecipeEntry; import me.shedaniel.rei.api.widgets.Widgets;
import me.shedaniel.rei.gui.widget.Widget; import me.shedaniel.rei.gui.entries.RecipeEntry;
import net.minecraft.client.Minecraft; import me.shedaniel.rei.gui.widget.Widget;
import net.minecraft.client.resources.language.I18n; import net.minecraft.client.Minecraft;
import net.minecraft.network.chat.TranslatableComponent; import net.minecraft.client.resources.language.I18n;
import net.minecraft.resources.ResourceLocation; import net.minecraft.network.chat.TranslatableComponent;
import net.minecraft.world.item.Items; import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.item.Items;
public class REIAlloyingFuelCategory implements RecipeCategory<REIAlloyingFuelDisplay> {
private static final DecimalFormat DECIMAL_FORMAT = new DecimalFormat("#.##"); public class REIAlloyingFuelCategory implements RecipeCategory<REIAlloyingFuelDisplay> {
private static final DecimalFormat DECIMAL_FORMAT = new DecimalFormat("#.##");
@Override
public @NotNull ResourceLocation getIdentifier() { @Override
return REIPlugin.ALLOYING_FUEL; public @NotNull ResourceLocation getIdentifier() {
} return REIPlugin.ALLOYING_FUEL;
}
@Override
public @NotNull String getCategoryName() { @Override
return I18n.get("category.rei.fuel"); public @NotNull String getCategoryName() {
} return I18n.get("category.rei.fuel");
}
@Override
public int getDisplayHeight() { @Override
return 49; public int getDisplayHeight() {
} return 49;
}
@Override
public @NotNull EntryStack getLogo() { @Override
return EntryStack.create(Items.COAL); public @NotNull EntryStack getLogo() {
} return EntryStack.create(Items.COAL);
}
@Override
public @NotNull List<Widget> setupDisplay(REIAlloyingFuelDisplay recipeDisplay, Rectangle bounds) { @Override
Point startPoint = new Point(bounds.getCenterX() - 41, bounds.getCenterY() - 17); public @NotNull List<Widget> setupDisplay(REIAlloyingFuelDisplay recipeDisplay, Rectangle bounds) {
String burnTime = DECIMAL_FORMAT.format(recipeDisplay.getFuelTime()); Point startPoint = new Point(bounds.getCenterX() - 41, bounds.getCenterY() - 17);
List<Widget> widgets = Lists.newArrayList(); String burnTime = DECIMAL_FORMAT.format(recipeDisplay.getFuelTime());
widgets.add(Widgets.createRecipeBase(bounds)); List<Widget> widgets = Lists.newArrayList();
widgets.add(Widgets.createLabel(new Point(bounds.x + 26, bounds.getMaxY() - 15), new TranslatableComponent("category.rei.fuel.time", burnTime)) widgets.add(Widgets.createRecipeBase(bounds));
.color(0xFF404040, 0xFFBBBBBB).noShadow().leftAligned()); widgets.add(Widgets.createLabel(new Point(bounds.x + 26, bounds.getMaxY() - 15), new TranslatableComponent("category.rei.fuel.time", burnTime))
widgets.add(Widgets.createBurningFire(new Point(bounds.x + 6, startPoint.y + 1)).animationDurationTicks(recipeDisplay.getFuelTime())); .color(0xFF404040, 0xFFBBBBBB).noShadow().leftAligned());
widgets.add(Widgets.createSlot(new Point(bounds.x + 6, startPoint.y + 18)).entries(recipeDisplay.getInputEntries().get(0)).markInput()); widgets.add(Widgets.createBurningFire(new Point(bounds.x + 6, startPoint.y + 1)).animationDurationTicks(recipeDisplay.getFuelTime()));
return widgets; widgets.add(Widgets.createSlot(new Point(bounds.x + 6, startPoint.y + 18)).entries(recipeDisplay.getInputEntries().get(0)).markInput());
} return widgets;
}
@Override
public @NotNull RecipeEntry getSimpleRenderer(REIAlloyingFuelDisplay recipe) { @Override
Slot slot = Widgets.createSlot(new Point(0, 0)).entries(recipe.getInputEntries().get(0)).disableBackground().disableHighlight(); public @NotNull RecipeEntry getSimpleRenderer(REIAlloyingFuelDisplay recipe) {
String burnItems = DECIMAL_FORMAT.format(recipe.getFuelTime() / 200d); Slot slot = Widgets.createSlot(new Point(0, 0)).entries(recipe.getInputEntries().get(0)).disableBackground().disableHighlight();
return new RecipeEntry() { String burnItems = DECIMAL_FORMAT.format(recipe.getFuelTime() / 200d);
private TranslatableComponent text = new TranslatableComponent("category.rei.fuel.time_short.items", burnItems); return new RecipeEntry() {
private TranslatableComponent text = new TranslatableComponent("category.rei.fuel.time_short.items", burnItems);
@Override
public int getHeight() { @Override
return 22; public int getHeight() {
} return 22;
}
@Nullable
@Override @Nullable
public Tooltip getTooltip(Point point) { @Override
if (slot.containsMouse(point)) public Tooltip getTooltip(Point point) {
return slot.getCurrentTooltip(point); if (slot.containsMouse(point))
return null; return slot.getCurrentTooltip(point);
} return null;
}
@Override
public void render(PoseStack matrices, Rectangle bounds, int mouseX, int mouseY, float delta) { @Override
slot.setZ(getZ() + 50); public void render(PoseStack matrices, Rectangle bounds, int mouseX, int mouseY, float delta) {
slot.getBounds().setLocation(bounds.x + 4, bounds.y + 2); slot.setZ(getZ() + 50);
slot.render(matrices, mouseX, mouseY, delta); slot.getBounds().setLocation(bounds.x + 4, bounds.y + 2);
Minecraft.getInstance().font.drawShadow(matrices, text.getVisualOrderText(), bounds.x + 25, bounds.y + 8, -1); slot.render(matrices, mouseX, mouseY, delta);
} Minecraft.getInstance().font.drawShadow(matrices, text.getVisualOrderText(), bounds.x + 25, bounds.y + 8, -1);
}; }
} };
} }
}

View file

@ -1,100 +1,101 @@
package ru.betterend.integration.rei; package ru.betterend.integration.rei;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.PoseStack;
import it.unimi.dsi.fastutil.ints.IntList;
import me.shedaniel.math.Point; import it.unimi.dsi.fastutil.ints.IntList;
import me.shedaniel.math.Rectangle; import me.shedaniel.math.Point;
import me.shedaniel.rei.api.EntryStack; import me.shedaniel.math.Rectangle;
import me.shedaniel.rei.api.TransferRecipeCategory; import me.shedaniel.rei.api.EntryStack;
import me.shedaniel.rei.api.widgets.Widgets; import me.shedaniel.rei.api.TransferRecipeCategory;
import me.shedaniel.rei.gui.entries.RecipeEntry; import me.shedaniel.rei.api.widgets.Widgets;
import me.shedaniel.rei.gui.entries.SimpleRecipeEntry; import me.shedaniel.rei.gui.entries.RecipeEntry;
import me.shedaniel.rei.gui.widget.Widget; import me.shedaniel.rei.gui.entries.SimpleRecipeEntry;
import net.minecraft.client.gui.GuiComponent; import me.shedaniel.rei.gui.widget.Widget;
import net.minecraft.network.chat.TranslatableComponent; import net.minecraft.client.gui.GuiComponent;
import net.minecraft.resources.ResourceLocation; import net.minecraft.network.chat.TranslatableComponent;
import net.minecraft.world.item.BlockItem; import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.level.block.Block; import net.minecraft.world.item.BlockItem;
import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.Block;
import ru.betterend.blocks.basis.EndAnvilBlock; import net.minecraft.world.level.block.Blocks;
import ru.betterend.util.LangUtil; import ru.betterend.blocks.basis.EndAnvilBlock;
import ru.betterend.util.LangUtil;
public class REIAnvilCategory implements TransferRecipeCategory<REIAnvilDisplay> {
public class REIAnvilCategory implements TransferRecipeCategory<REIAnvilDisplay> {
@Override
public @NotNull ResourceLocation getIdentifier() { @Override
return REIPlugin.SMITHING; public @NotNull ResourceLocation getIdentifier() {
} return REIPlugin.SMITHING;
}
@Override
public @NotNull String getCategoryName() { @Override
return LangUtil.translate(Blocks.ANVIL.getDescriptionId()); public @NotNull String getCategoryName() {
} return LangUtil.translate(Blocks.ANVIL.getDescriptionId());
}
@Override
public @NotNull EntryStack getLogo() { @Override
return REIPlugin.ANVILS[0]; public @NotNull EntryStack getLogo() {
} return REIPlugin.ANVILS[0];
}
@Override
public @NotNull List<Widget> setupDisplay(REIAnvilDisplay display, Rectangle bounds) { @Override
Point startPoint = new Point(bounds.getCenterX() - 41, bounds.y + 10); public @NotNull List<Widget> setupDisplay(REIAnvilDisplay display, Rectangle bounds) {
List<Widget> widgets = Lists.newArrayList(); Point startPoint = new Point(bounds.getCenterX() - 41, bounds.y + 10);
widgets.add(Widgets.createRecipeBase(bounds)); List<Widget> widgets = Lists.newArrayList();
int x = startPoint.x + 10; widgets.add(Widgets.createRecipeBase(bounds));
int y = startPoint.y; int x = startPoint.x + 10;
widgets.add(Widgets.createResultSlotBackground(new Point(x + 61, y + 5))); int y = startPoint.y;
List<List<EntryStack>> inputEntries = display.getInputEntries(); widgets.add(Widgets.createResultSlotBackground(new Point(x + 61, y + 5)));
List<EntryStack> materials = inputEntries.get(1); List<List<EntryStack>> inputEntries = display.getInputEntries();
int anvilLevel = display.getAnvilLevel(); List<EntryStack> materials = inputEntries.get(1);
List<EntryStack> anvils = Arrays.stream(REIPlugin.ANVILS).filter(anvil -> { int anvilLevel = display.getAnvilLevel();
Block block = ((BlockItem) anvil.getItem()).getBlock(); List<EntryStack> anvils = Arrays.stream(REIPlugin.ANVILS).filter(anvil -> {
if (block instanceof EndAnvilBlock) { Block block = ((BlockItem) anvil.getItem()).getBlock();
return ((EndAnvilBlock) block).getCraftingLevel() >= anvilLevel; if (block instanceof EndAnvilBlock) {
} return ((EndAnvilBlock) block).getCraftingLevel() >= anvilLevel;
return anvilLevel == 1; }
}).collect(Collectors.toList()); return anvilLevel == 1;
materials.forEach(entryStack -> entryStack.setAmount(display.getInputCount())); }).collect(Collectors.toList());
widgets.add(Widgets.createArrow(new Point(x + 24, y + 4))); materials.forEach(entryStack -> entryStack.setAmount(display.getInputCount()));
widgets.add(Widgets.createLabel(new Point(bounds.x + bounds.width - 7, bounds.y + bounds.height - 15), widgets.add(Widgets.createArrow(new Point(x + 24, y + 4)));
new TranslatableComponent("category.rei.damage.amount&dmg", display.getDamage())).noShadow().rightAligned().color(0xFF404040, 0xFFBBBBBB)); widgets.add(Widgets.createLabel(new Point(bounds.x + bounds.width - 7, bounds.y + bounds.height - 15),
widgets.add(Widgets.createSlot(new Point(x - 20, y + 4)).entries(materials).markInput()); new TranslatableComponent("category.rei.damage.amount&dmg", display.getDamage())).noShadow().rightAligned().color(0xFF404040, 0xFFBBBBBB));
widgets.add(Widgets.createSlot(new Point(x + 1, y + 4)).entries(inputEntries.get(0)).markInput()); widgets.add(Widgets.createSlot(new Point(x - 20, y + 4)).entries(materials).markInput());
widgets.add(Widgets.createSlot(new Point(x + 61, y + 5)).entries(display.getResultingEntries().get(0)).disableBackground().markOutput()); widgets.add(Widgets.createSlot(new Point(x + 1, y + 4)).entries(inputEntries.get(0)).markInput());
widgets.add(Widgets.createSlot(new Point(x - 9, y + 25)).entries(anvils)); widgets.add(Widgets.createSlot(new Point(x + 61, y + 5)).entries(display.getResultingEntries().get(0)).disableBackground().markOutput());
widgets.add(Widgets.createSlot(new Point(x - 9, y + 25)).entries(anvils));
return widgets;
} return widgets;
}
@Override
public void renderRedSlots(PoseStack matrices, List<Widget> widgets, Rectangle bounds, REIAnvilDisplay display, @Override
IntList redSlots) { public void renderRedSlots(PoseStack matrices, List<Widget> widgets, Rectangle bounds, REIAnvilDisplay display,
Point startPoint = new Point(bounds.getCenterX() - 41, bounds.getCenterY() - 27); IntList redSlots) {
matrices.pushPose(); Point startPoint = new Point(bounds.getCenterX() - 41, bounds.getCenterY() - 27);
matrices.translate(0, 0, 400); matrices.pushPose();
if (redSlots.contains(0)) { matrices.translate(0, 0, 400);
GuiComponent.fill(matrices, startPoint.x - 20, startPoint.y + 3, startPoint.x - 20 + 16, startPoint.y + 3 + 16, 1090453504); if (redSlots.contains(0)) {
GuiComponent.fill(matrices, startPoint.x + 1, startPoint.y + 3, startPoint.x + 1 + 16, startPoint.y + 3 + 16, 1090453504); GuiComponent.fill(matrices, startPoint.x - 20, startPoint.y + 3, startPoint.x - 20 + 16, startPoint.y + 3 + 16, 1090453504);
} GuiComponent.fill(matrices, startPoint.x + 1, startPoint.y + 3, startPoint.x + 1 + 16, startPoint.y + 3 + 16, 1090453504);
matrices.popPose(); }
} matrices.popPose();
}
@Override
public @NotNull RecipeEntry getSimpleRenderer(REIAnvilDisplay recipe) { @Override
return SimpleRecipeEntry.from(Collections.singletonList(recipe.getInputEntries().get(0)), recipe.getResultingEntries()); public @NotNull RecipeEntry getSimpleRenderer(REIAnvilDisplay recipe) {
} return SimpleRecipeEntry.from(Collections.singletonList(recipe.getInputEntries().get(0)), recipe.getResultingEntries());
}
@Override
public int getDisplayHeight() { @Override
return 60; public int getDisplayHeight() {
} return 60;
}
}
}

View file

@ -1,80 +1,81 @@
package ru.betterend.integration.rei; package ru.betterend.integration.rei;
import java.util.List; import java.util.List;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.PoseStack;
import it.unimi.dsi.fastutil.ints.IntList;
import me.shedaniel.math.Point; import it.unimi.dsi.fastutil.ints.IntList;
import me.shedaniel.math.Rectangle; import me.shedaniel.math.Point;
import me.shedaniel.rei.api.EntryStack; import me.shedaniel.math.Rectangle;
import me.shedaniel.rei.api.TransferRecipeCategory; import me.shedaniel.rei.api.EntryStack;
import me.shedaniel.rei.api.widgets.Widgets; import me.shedaniel.rei.api.TransferRecipeCategory;
import me.shedaniel.rei.gui.entries.RecipeEntry; import me.shedaniel.rei.api.widgets.Widgets;
import me.shedaniel.rei.gui.entries.SimpleRecipeEntry; import me.shedaniel.rei.gui.entries.RecipeEntry;
import me.shedaniel.rei.gui.widget.Widget; import me.shedaniel.rei.gui.entries.SimpleRecipeEntry;
import net.minecraft.network.chat.TranslatableComponent; import me.shedaniel.rei.gui.widget.Widget;
import net.minecraft.resources.ResourceLocation; import net.minecraft.network.chat.TranslatableComponent;
import ru.betterend.BetterEnd; import net.minecraft.resources.ResourceLocation;
import ru.betterend.recipe.builders.InfusionRecipe; import ru.betterend.BetterEnd;
import ru.betterend.registry.EndBlocks; import ru.betterend.recipe.builders.InfusionRecipe;
import ru.betterend.util.LangUtil; import ru.betterend.registry.EndBlocks;
import ru.betterend.util.LangUtil;
public class REIInfusionCategory implements TransferRecipeCategory<REIInfusionDisplay> {
public class REIInfusionCategory implements TransferRecipeCategory<REIInfusionDisplay> {
private final static ResourceLocation BACKGROUND = BetterEnd.makeID("textures/gui/rei_infusion.png");
private final static ResourceLocation BACKGROUND = BetterEnd.makeID("textures/gui/rei_infusion.png");
@Override
public @NotNull ResourceLocation getIdentifier() { @Override
return InfusionRecipe.ID; public @NotNull ResourceLocation getIdentifier() {
} return InfusionRecipe.ID;
}
@Override
public @NotNull String getCategoryName() { @Override
return LangUtil.translate(EndBlocks.INFUSION_PEDESTAL.getDescriptionId()); public @NotNull String getCategoryName() {
} return LangUtil.translate(EndBlocks.INFUSION_PEDESTAL.getDescriptionId());
}
@Override
public @NotNull EntryStack getLogo() { @Override
return REIPlugin.INFUSION_RITUAL; public @NotNull EntryStack getLogo() {
} return REIPlugin.INFUSION_RITUAL;
}
@Override
public @NotNull RecipeEntry getSimpleRenderer(REIInfusionDisplay recipe) { @Override
return SimpleRecipeEntry.from(recipe.getInputEntries(), recipe.getResultingEntries()); public @NotNull RecipeEntry getSimpleRenderer(REIInfusionDisplay recipe) {
} return SimpleRecipeEntry.from(recipe.getInputEntries(), recipe.getResultingEntries());
}
@Override
public @NotNull List<Widget> setupDisplay(REIInfusionDisplay display, Rectangle bounds) { @Override
Point centerPoint = new Point(bounds.getCenterX() - 34, bounds.getCenterY() - 2); public @NotNull List<Widget> setupDisplay(REIInfusionDisplay display, Rectangle bounds) {
List<Widget> widgets = Lists.newArrayList(); Point centerPoint = new Point(bounds.getCenterX() - 34, bounds.getCenterY() - 2);
widgets.add(Widgets.createRecipeBase(bounds)); List<Widget> widgets = Lists.newArrayList();
List<List<EntryStack>> inputEntries = display.getInputEntries(); widgets.add(Widgets.createRecipeBase(bounds));
List<List<EntryStack>> outputEntries = display.getResultingEntries(); List<List<EntryStack>> inputEntries = display.getInputEntries();
widgets.add(Widgets.createTexturedWidget(BACKGROUND, bounds.x, bounds.y, 0, 0, 150, 104, 150, 104)); List<List<EntryStack>> outputEntries = display.getResultingEntries();
widgets.add(Widgets.createSlot(centerPoint).entries(inputEntries.get(0)).disableBackground().markInput()); widgets.add(Widgets.createTexturedWidget(BACKGROUND, bounds.x, bounds.y, 0, 0, 150, 104, 150, 104));
widgets.add(Widgets.createSlot(new Point(centerPoint.x, centerPoint.y - 28)).entries(inputEntries.get(1)).disableBackground().markInput()); widgets.add(Widgets.createSlot(centerPoint).entries(inputEntries.get(0)).disableBackground().markInput());
widgets.add(Widgets.createSlot(new Point(centerPoint.x + 28, centerPoint.y)).entries(inputEntries.get(3)).disableBackground().markInput()); widgets.add(Widgets.createSlot(new Point(centerPoint.x, centerPoint.y - 28)).entries(inputEntries.get(1)).disableBackground().markInput());
widgets.add(Widgets.createSlot(new Point(centerPoint.x, centerPoint.y + 28)).entries(inputEntries.get(5)).disableBackground().markInput()); widgets.add(Widgets.createSlot(new Point(centerPoint.x + 28, centerPoint.y)).entries(inputEntries.get(3)).disableBackground().markInput());
widgets.add(Widgets.createSlot(new Point(centerPoint.x - 28, centerPoint.y)).entries(inputEntries.get(7)).disableBackground().markInput()); widgets.add(Widgets.createSlot(new Point(centerPoint.x, centerPoint.y + 28)).entries(inputEntries.get(5)).disableBackground().markInput());
widgets.add(Widgets.createSlot(new Point(centerPoint.x + 24, centerPoint.y - 24)).entries(inputEntries.get(2)).disableBackground().markInput()); widgets.add(Widgets.createSlot(new Point(centerPoint.x - 28, centerPoint.y)).entries(inputEntries.get(7)).disableBackground().markInput());
widgets.add(Widgets.createSlot(new Point(centerPoint.x + 24, centerPoint.y + 24)).entries(inputEntries.get(4)).disableBackground().markInput()); widgets.add(Widgets.createSlot(new Point(centerPoint.x + 24, centerPoint.y - 24)).entries(inputEntries.get(2)).disableBackground().markInput());
widgets.add(Widgets.createSlot(new Point(centerPoint.x - 24, centerPoint.y + 24)).entries(inputEntries.get(6)).disableBackground().markInput()); widgets.add(Widgets.createSlot(new Point(centerPoint.x + 24, centerPoint.y + 24)).entries(inputEntries.get(4)).disableBackground().markInput());
widgets.add(Widgets.createSlot(new Point(centerPoint.x - 24, centerPoint.y - 24)).entries(inputEntries.get(8)).disableBackground().markInput()); widgets.add(Widgets.createSlot(new Point(centerPoint.x - 24, centerPoint.y + 24)).entries(inputEntries.get(6)).disableBackground().markInput());
widgets.add(Widgets.createSlot(new Point(centerPoint.x + 80, centerPoint.y)).entries(outputEntries.get(0)).disableBackground().markOutput()); widgets.add(Widgets.createSlot(new Point(centerPoint.x - 24, centerPoint.y - 24)).entries(inputEntries.get(8)).disableBackground().markInput());
widgets.add(Widgets.createLabel(new Point(bounds.getMaxX() - 5, bounds.y + 6), new TranslatableComponent("category.rei.infusion.time&val", display.getInfusionTime())) widgets.add(Widgets.createSlot(new Point(centerPoint.x + 80, centerPoint.y)).entries(outputEntries.get(0)).disableBackground().markOutput());
.noShadow().rightAligned().color(0xFF404040, 0xFFBBBBBB)); widgets.add(Widgets.createLabel(new Point(bounds.getMaxX() - 5, bounds.y + 6), new TranslatableComponent("category.rei.infusion.time&val", display.getInfusionTime()))
return widgets; .noShadow().rightAligned().color(0xFF404040, 0xFFBBBBBB));
} return widgets;
}
@Override
public void renderRedSlots(PoseStack matrices, List<Widget> widgets, Rectangle bounds, @Override
REIInfusionDisplay display, IntList redSlots) {} public void renderRedSlots(PoseStack matrices, List<Widget> widgets, Rectangle bounds,
REIInfusionDisplay display, IntList redSlots) {}
@Override
public int getDisplayHeight() { @Override
return 104; public int getDisplayHeight() {
} return 104;
} }
}

View file

@ -1,6 +1,7 @@
package ru.betterend.interfaces; package ru.betterend.interfaces;
import java.util.List; import java.util.List;
import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceKey;
import net.minecraft.world.level.biome.Biome; import net.minecraft.world.level.biome.Biome;

View file

@ -1,6 +1,10 @@
package ru.betterend.item; package ru.betterend.item;
import java.util.UUID; import java.util.UUID;
import com.google.common.collect.ImmutableMultimap;
import com.google.common.collect.Multimap;
import net.minecraft.world.entity.EquipmentSlot; import net.minecraft.world.entity.EquipmentSlot;
import net.minecraft.world.entity.ai.attributes.Attribute; import net.minecraft.world.entity.ai.attributes.Attribute;
import net.minecraft.world.entity.ai.attributes.AttributeModifier; import net.minecraft.world.entity.ai.attributes.AttributeModifier;
@ -8,8 +12,6 @@ import net.minecraft.world.entity.ai.attributes.Attributes;
import net.minecraft.world.item.ArmorItem; import net.minecraft.world.item.ArmorItem;
import net.minecraft.world.item.ArmorMaterial; import net.minecraft.world.item.ArmorMaterial;
import net.minecraft.world.item.Item; import net.minecraft.world.item.Item;
import com.google.common.collect.ImmutableMultimap;
import com.google.common.collect.Multimap;
import ru.betterend.mixin.common.ArmorItemAccessor; import ru.betterend.mixin.common.ArmorItemAccessor;
import ru.betterend.patterns.Patterned; import ru.betterend.patterns.Patterned;
import ru.betterend.patterns.Patterns; import ru.betterend.patterns.Patterns;

View file

@ -0,0 +1,18 @@
package ru.betterend.item;
import net.minecraft.world.item.BucketItem;
import net.minecraft.world.level.material.Fluids;
import ru.betterend.patterns.Patterned;
import ru.betterend.patterns.Patterns;
import ru.betterend.registry.EndItems;
public class EndBucketItem extends BucketItem implements Patterned {
public EndBucketItem() {
super(Fluids.WATER, EndItems.makeItemSettings().stacksTo(1));
}
@Override
public String getModelPattern(String name) {
return Patterns.createJson(Patterns.ITEM_GENERATED, name);
}
}

View file

@ -1,43 +1,44 @@
package ru.betterend.item; package ru.betterend.item;
import java.util.List; import java.util.List;
import net.minecraft.ChatFormatting;
import net.minecraft.network.chat.Component; import net.minecraft.ChatFormatting;
import net.minecraft.resources.ResourceLocation; import net.minecraft.network.chat.Component;
import net.minecraft.server.level.ServerPlayer; import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.InteractionHand; import net.minecraft.server.level.ServerPlayer;
import net.minecraft.world.InteractionResultHolder; import net.minecraft.world.InteractionHand;
import net.minecraft.world.entity.player.Player; import net.minecraft.world.InteractionResultHolder;
import net.minecraft.world.item.Item; import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Item;
import net.minecraft.world.item.TooltipFlag; import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.Level; import net.minecraft.world.item.TooltipFlag;
import ru.betterend.BetterEnd; import net.minecraft.world.level.Level;
import ru.betterend.registry.EndItems; import ru.betterend.BetterEnd;
import ru.betterend.util.LangUtil; import ru.betterend.registry.EndItems;
import vazkii.patchouli.api.PatchouliAPI; import ru.betterend.util.LangUtil;
import vazkii.patchouli.api.PatchouliAPI;
public class GuideBookItem extends PatternedItem {
public final static ResourceLocation BOOK_ID = BetterEnd.makeID("guidebook"); public class GuideBookItem extends PatternedItem {
public static final Item GUIDE_BOOK = EndItems.registerItem(BOOK_ID, new GuideBookItem()); public final static ResourceLocation BOOK_ID = BetterEnd.makeID("guidebook");
public static final Item GUIDE_BOOK = EndItems.registerItem(BOOK_ID, new GuideBookItem());
public static void register() {}
public static void register() {}
public GuideBookItem() {
super(EndItems.makeItemSettings().stacksTo(1)); public GuideBookItem() {
} super(EndItems.makeItemSettings().stacksTo(1));
}
@Override
public InteractionResultHolder<ItemStack> use(Level world, Player user, InteractionHand hand) { @Override
if (!world.isClientSide && user instanceof ServerPlayer) { public InteractionResultHolder<ItemStack> use(Level world, Player user, InteractionHand hand) {
PatchouliAPI.get().openBookGUI((ServerPlayer) user, BOOK_ID); if (!world.isClientSide && user instanceof ServerPlayer) {
return InteractionResultHolder.success(user.getItemInHand(hand)); PatchouliAPI.get().openBookGUI((ServerPlayer) user, BOOK_ID);
} return InteractionResultHolder.success(user.getItemInHand(hand));
return InteractionResultHolder.consume(user.getItemInHand(hand)); }
} return InteractionResultHolder.consume(user.getItemInHand(hand));
}
@Override
public void appendHoverText(ItemStack stack, Level world, List<Component> tooltip, TooltipFlag context) { @Override
tooltip.add(LangUtil.getText("book.betterend", "subtitle").withStyle(ChatFormatting.DARK_PURPLE, ChatFormatting.ITALIC)); public void appendHoverText(ItemStack stack, Level world, List<Component> tooltip, TooltipFlag context) {
} tooltip.add(LangUtil.getText("book.betterend", "subtitle").withStyle(ChatFormatting.DARK_PURPLE, ChatFormatting.ITALIC));
} }
}

View file

@ -1,6 +1,7 @@
package ru.betterend.item.material; package ru.betterend.item.material;
import java.util.function.Supplier; import java.util.function.Supplier;
import net.minecraft.util.LazyLoadedValue; import net.minecraft.util.LazyLoadedValue;
import net.minecraft.world.item.Tier; import net.minecraft.world.item.Tier;
import net.minecraft.world.item.crafting.Ingredient; import net.minecraft.world.item.crafting.Ingredient;

View file

@ -1,41 +1,43 @@
package ru.betterend.item.model; package ru.betterend.item.model;
import java.util.Collections; import java.util.Collections;
import net.minecraft.client.model.HumanoidModel;
import net.minecraft.client.model.geom.ModelPart; import com.google.common.collect.Lists;
import net.minecraft.client.renderer.RenderType;
import net.minecraft.world.entity.LivingEntity; import net.minecraft.client.model.HumanoidModel;
import com.google.common.collect.Lists; import net.minecraft.client.model.geom.ModelPart;
import net.minecraft.client.renderer.RenderType;
public class CrystaliteBootsModel extends HumanoidModel<LivingEntity> { import net.minecraft.world.entity.LivingEntity;
public ModelPart leftBoot; public class CrystaliteBootsModel extends HumanoidModel<LivingEntity> {
public ModelPart rightBoot;
public ModelPart leftBoot;
public CrystaliteBootsModel(float scale) { public ModelPart rightBoot;
super(RenderType::entityTranslucent, scale, 0.0F, 64, 48);
this.leftBoot = new ModelPart(this, 0, 32); public CrystaliteBootsModel(float scale) {
this.leftBoot.addBox(-2.0F, 0.0F, -2.0F, 4.0F, 12.0F, 4.0F, scale + 0.25F); super(RenderType::entityTranslucent, scale, 0.0F, 64, 48);
this.leftBoot.setPos(1.9F, 12.0F, 0.0F); this.leftBoot = new ModelPart(this, 0, 32);
this.rightBoot = new ModelPart(this, 0, 16); this.leftBoot.addBox(-2.0F, 0.0F, -2.0F, 4.0F, 12.0F, 4.0F, scale + 0.25F);
this.rightBoot.addBox(-2.0F, 0.0F, -2.0F, 4.0F, 12.0F, 4.0F, scale + 0.25F); this.leftBoot.setPos(1.9F, 12.0F, 0.0F);
this.rightBoot.setPos(-1.9F, 12.0F, 0.0F); this.rightBoot = new ModelPart(this, 0, 16);
} this.rightBoot.addBox(-2.0F, 0.0F, -2.0F, 4.0F, 12.0F, 4.0F, scale + 0.25F);
this.rightBoot.setPos(-1.9F, 12.0F, 0.0F);
@Override }
public void copyPropertiesTo(HumanoidModel<LivingEntity> bipedEntityModel) {
super.copyPropertiesTo(bipedEntityModel); @Override
this.leftBoot.copyFrom(leftLeg); public void copyPropertiesTo(HumanoidModel<LivingEntity> bipedEntityModel) {
this.rightBoot.copyFrom(rightLeg); super.copyPropertiesTo(bipedEntityModel);
} this.leftBoot.copyFrom(leftLeg);
this.rightBoot.copyFrom(rightLeg);
@Override }
protected Iterable<ModelPart> headParts() {
return Collections::emptyIterator; @Override
} protected Iterable<ModelPart> headParts() {
return Collections::emptyIterator;
@Override }
protected Iterable<ModelPart> bodyParts() {
return Lists.newArrayList(leftBoot, rightBoot); @Override
} protected Iterable<ModelPart> bodyParts() {
} return Lists.newArrayList(leftBoot, rightBoot);
}
}

View file

@ -1,72 +1,74 @@
package ru.betterend.item.model; package ru.betterend.item.model;
import java.util.Collections; import java.util.Collections;
import net.minecraft.client.model.HumanoidModel;
import net.minecraft.client.model.geom.ModelPart; import com.google.common.collect.Lists;
import net.minecraft.client.renderer.RenderType; import com.mojang.blaze3d.vertex.PoseStack;
import net.minecraft.world.entity.HumanoidArm;
import net.minecraft.world.entity.LivingEntity; import net.minecraft.client.model.HumanoidModel;
import com.google.common.collect.Lists; import net.minecraft.client.model.geom.ModelPart;
import com.mojang.blaze3d.vertex.PoseStack; import net.minecraft.client.renderer.RenderType;
import net.minecraft.world.entity.HumanoidArm;
public class CrystaliteChestplateModel extends HumanoidModel<LivingEntity> { import net.minecraft.world.entity.LivingEntity;
public ModelPart leftShoulder; public class CrystaliteChestplateModel extends HumanoidModel<LivingEntity> {
public ModelPart rightShoulder;
private boolean thinArms; public ModelPart leftShoulder;
public ModelPart rightShoulder;
public CrystaliteChestplateModel(float scale, boolean thinArms) { private boolean thinArms;
super(RenderType::entityTranslucent, scale, 0.0F, 64, 48);
this.thinArms = thinArms; public CrystaliteChestplateModel(float scale, boolean thinArms) {
this.body = new ModelPart(this, 16, 16); super(RenderType::entityTranslucent, scale, 0.0F, 64, 48);
this.body.addBox(-4.0F, 0.0F, -2.0F, 8.0F, 12.0F, 4.0F, scale + 0.25F); this.thinArms = thinArms;
this.body.setPos(0.0F, 0.0F, 0.0F); this.body = new ModelPart(this, 16, 16);
if (thinArms) { this.body.addBox(-4.0F, 0.0F, -2.0F, 8.0F, 12.0F, 4.0F, scale + 0.25F);
this.leftShoulder = new ModelPart(this, 41, 32); this.body.setPos(0.0F, 0.0F, 0.0F);
this.leftShoulder.addBox(-1.0F, -2.5F, -2.0F, 3.0F, 12.0F, 4.0F, scale + 0.35F); if (thinArms) {
this.leftShoulder.setPos(5.0F, 2.5F, 0.0F); this.leftShoulder = new ModelPart(this, 41, 32);
this.leftShoulder.mirror = true; this.leftShoulder.addBox(-1.0F, -2.5F, -2.0F, 3.0F, 12.0F, 4.0F, scale + 0.35F);
this.rightShoulder = new ModelPart(this, 41, 16); this.leftShoulder.setPos(5.0F, 2.5F, 0.0F);
this.rightShoulder.addBox(-2.0F, -2.5F, -2.0F, 3.0F, 12.0F, 4.0F, scale + 0.35F); this.leftShoulder.mirror = true;
this.rightShoulder.setPos(-5.0F, 2.5F, 10.0F); this.rightShoulder = new ModelPart(this, 41, 16);
} else { this.rightShoulder.addBox(-2.0F, -2.5F, -2.0F, 3.0F, 12.0F, 4.0F, scale + 0.35F);
this.leftShoulder = new ModelPart(this, 40, 32); this.rightShoulder.setPos(-5.0F, 2.5F, 10.0F);
this.leftShoulder.addBox(-1.0F, -2.5F, -2.0F, 4.0F, 12.0F, 4.0F, scale + 0.45F); } else {
this.leftShoulder.setPos(5.0F, 2.0F, 0.0F); this.leftShoulder = new ModelPart(this, 40, 32);
this.leftShoulder.mirror = true; this.leftShoulder.addBox(-1.0F, -2.5F, -2.0F, 4.0F, 12.0F, 4.0F, scale + 0.45F);
this.rightShoulder = new ModelPart(this, 40, 16); this.leftShoulder.setPos(5.0F, 2.0F, 0.0F);
this.rightShoulder.addBox(-3.0F, -2.5F, -2.0F, 4.0F, 12.0F, 4.0F, scale + 0.45F); this.leftShoulder.mirror = true;
this.rightShoulder.setPos(-5.0F, 2.0F, 10.0F); this.rightShoulder = new ModelPart(this, 40, 16);
} this.rightShoulder.addBox(-3.0F, -2.5F, -2.0F, 4.0F, 12.0F, 4.0F, scale + 0.45F);
} this.rightShoulder.setPos(-5.0F, 2.0F, 10.0F);
}
@Override }
public void copyPropertiesTo(HumanoidModel<LivingEntity> bipedEntityModel) {
super.copyPropertiesTo(bipedEntityModel); @Override
this.leftShoulder.copyFrom(leftArm); public void copyPropertiesTo(HumanoidModel<LivingEntity> bipedEntityModel) {
this.rightShoulder.copyFrom(rightArm); super.copyPropertiesTo(bipedEntityModel);
} this.leftShoulder.copyFrom(leftArm);
this.rightShoulder.copyFrom(rightArm);
@Override }
protected Iterable<ModelPart> headParts() {
return Collections::emptyIterator; @Override
} protected Iterable<ModelPart> headParts() {
return Collections::emptyIterator;
@Override }
protected Iterable<ModelPart> bodyParts() {
return Lists.newArrayList(body, leftShoulder, rightShoulder); @Override
} protected Iterable<ModelPart> bodyParts() {
return Lists.newArrayList(body, leftShoulder, rightShoulder);
@Override }
public void translateToHand(HumanoidArm arm, PoseStack matrices) {
ModelPart modelPart = this.getArm(arm); @Override
if (this.thinArms) { public void translateToHand(HumanoidArm arm, PoseStack matrices) {
float f = 0.5F * (float)(arm == HumanoidArm.RIGHT ? 1 : -1); ModelPart modelPart = this.getArm(arm);
modelPart.x += f; if (this.thinArms) {
modelPart.translateAndRotate(matrices); float f = 0.5F * (float)(arm == HumanoidArm.RIGHT ? 1 : -1);
modelPart.x -= f; modelPart.x += f;
} else { modelPart.translateAndRotate(matrices);
modelPart.translateAndRotate(matrices); modelPart.x -= f;
} } else {
} modelPart.translateAndRotate(matrices);
} }
}
}

View file

@ -1,34 +1,36 @@
package ru.betterend.item.model; package ru.betterend.item.model;
import java.util.Collections; import java.util.Collections;
import net.minecraft.client.model.HumanoidModel;
import net.minecraft.client.model.geom.ModelPart; import com.google.common.collect.Lists;
import net.minecraft.client.renderer.RenderType;
import net.minecraft.world.entity.LivingEntity; import net.minecraft.client.model.HumanoidModel;
import com.google.common.collect.Lists; import net.minecraft.client.model.geom.ModelPart;
import net.minecraft.client.renderer.RenderType;
public class CrystaliteLeggingsModel extends HumanoidModel<LivingEntity> { import net.minecraft.world.entity.LivingEntity;
public CrystaliteLeggingsModel(float scale) { public class CrystaliteLeggingsModel extends HumanoidModel<LivingEntity> {
super(RenderType::entityTranslucent, scale, 0.0F, 64, 48);
this.body = new ModelPart(this, 16, 16); public CrystaliteLeggingsModel(float scale) {
this.body.addBox(-4.0F, 0.0F, -2.0F, 8.0F, 12.0F, 4.0F, scale); super(RenderType::entityTranslucent, scale, 0.0F, 64, 48);
this.body.setPos(0.0F, 0.0F, 0.0F); this.body = new ModelPart(this, 16, 16);
this.leftLeg = new ModelPart(this, 0, 32); this.body.addBox(-4.0F, 0.0F, -2.0F, 8.0F, 12.0F, 4.0F, scale);
this.leftLeg.addBox(-2.0F, 0.0F, -2.0F, 4.0F, 12.0F, 4.0F, scale); this.body.setPos(0.0F, 0.0F, 0.0F);
this.leftLeg.setPos(1.9F, 12.0F, 0.0F); this.leftLeg = new ModelPart(this, 0, 32);
this.rightLeg = new ModelPart(this, 0, 16); this.leftLeg.addBox(-2.0F, 0.0F, -2.0F, 4.0F, 12.0F, 4.0F, scale);
this.rightLeg.addBox(-2.0F, 0.0F, -2.0F, 4.0F, 12.0F, 4.0F, scale); this.leftLeg.setPos(1.9F, 12.0F, 0.0F);
this.rightLeg.setPos(-1.9F, 12.0F, 0.0F); this.rightLeg = new ModelPart(this, 0, 16);
} this.rightLeg.addBox(-2.0F, 0.0F, -2.0F, 4.0F, 12.0F, 4.0F, scale);
this.rightLeg.setPos(-1.9F, 12.0F, 0.0F);
@Override }
protected Iterable<ModelPart> headParts() {
return Collections::emptyIterator; @Override
} protected Iterable<ModelPart> headParts() {
return Collections::emptyIterator;
@Override }
protected Iterable<ModelPart> bodyParts() {
return Lists.newArrayList(body, rightLeg, leftLeg); @Override
} protected Iterable<ModelPart> bodyParts() {
} return Lists.newArrayList(body, rightLeg, leftLeg);
}
}

View file

@ -1,9 +1,10 @@
package ru.betterend.mixin.client; package ru.betterend.mixin.client;
import net.minecraft.client.resources.sounds.AbstractSoundInstance;
import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.gen.Accessor; import org.spongepowered.asm.mixin.gen.Accessor;
import net.minecraft.client.resources.sounds.AbstractSoundInstance;
@Mixin(AbstractSoundInstance.class) @Mixin(AbstractSoundInstance.class)
public interface AbstractSoundInstanceAccessor { public interface AbstractSoundInstanceAccessor {
@Accessor("volume") @Accessor("volume")

View file

@ -1,6 +1,16 @@
package ru.betterend.mixin.client; package ru.betterend.mixin.client;
import java.util.List; import java.util.List;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import com.google.common.collect.Lists;
import com.mojang.blaze3d.vertex.PoseStack;
import net.minecraft.client.gui.components.AbstractWidget; import net.minecraft.client.gui.components.AbstractWidget;
import net.minecraft.client.gui.components.Button; import net.minecraft.client.gui.components.Button;
import net.minecraft.client.gui.components.EditBox; import net.minecraft.client.gui.components.EditBox;
@ -13,14 +23,6 @@ import net.minecraft.world.entity.player.Inventory;
import net.minecraft.world.inventory.AbstractContainerMenu; import net.minecraft.world.inventory.AbstractContainerMenu;
import net.minecraft.world.inventory.AnvilMenu; import net.minecraft.world.inventory.AnvilMenu;
import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.ItemStack;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import com.google.common.collect.Lists;
import com.mojang.blaze3d.vertex.PoseStack;
import ru.betterend.interfaces.AnvilScreenHandlerExtended; import ru.betterend.interfaces.AnvilScreenHandlerExtended;
@Mixin(AnvilScreen.class) @Mixin(AnvilScreen.class)

View file

@ -8,6 +8,7 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import com.mojang.blaze3d.platform.GlStateManager; import com.mojang.blaze3d.platform.GlStateManager;
import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.systems.RenderSystem;
import net.minecraft.Util; import net.minecraft.Util;
import net.minecraft.client.Camera; import net.minecraft.client.Camera;
import net.minecraft.client.multiplayer.ClientLevel; import net.minecraft.client.multiplayer.ClientLevel;

View file

@ -1,16 +1,17 @@
package ru.betterend.mixin.client; package ru.betterend.mixin.client;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.multiplayer.ClientLevel; import net.minecraft.client.multiplayer.ClientLevel;
import net.minecraft.client.multiplayer.ClientPacketListener; import net.minecraft.client.multiplayer.ClientPacketListener;
import net.minecraft.network.protocol.PacketUtils; import net.minecraft.network.protocol.PacketUtils;
import net.minecraft.network.protocol.game.ClientboundOpenSignEditorPacket; import net.minecraft.network.protocol.game.ClientboundOpenSignEditorPacket;
import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntity;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import ru.betterend.blocks.entities.ESignBlockEntity; import ru.betterend.blocks.entities.ESignBlockEntity;
import ru.betterend.client.gui.BlockSignEditScreen; import ru.betterend.client.gui.BlockSignEditScreen;

View file

@ -1,14 +1,14 @@
package ru.betterend.mixin.client; package ru.betterend.mixin.client;
import net.minecraft.client.ClientRecipeBook;
import net.minecraft.client.RecipeBookCategories;
import net.minecraft.world.item.crafting.Recipe;
import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
import net.minecraft.client.ClientRecipeBook;
import net.minecraft.client.RecipeBookCategories;
import net.minecraft.world.item.crafting.Recipe;
import ru.betterend.interfaces.BetterEndRecipe; import ru.betterend.interfaces.BetterEndRecipe;
import ru.betterend.recipe.builders.AlloyingRecipe;
@Mixin(ClientRecipeBook.class) @Mixin(ClientRecipeBook.class)
public abstract class ClientRecipeBookMixin { public abstract class ClientRecipeBookMixin {

View file

@ -4,6 +4,7 @@ import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.gen.Accessor; import org.spongepowered.asm.mixin.gen.Accessor;
import com.google.gson.Gson; import com.google.gson.Gson;
import net.minecraft.client.renderer.block.model.BlockModelDefinition; import net.minecraft.client.renderer.block.model.BlockModelDefinition;
@Mixin(BlockModelDefinition.Context.class) @Mixin(BlockModelDefinition.Context.class)

View file

@ -1,16 +1,18 @@
package ru.betterend.mixin.client; package ru.betterend.mixin.client;
import java.util.Random; import java.util.Random;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.core.particles.ParticleTypes; import net.minecraft.core.particles.ParticleTypes;
import net.minecraft.world.level.Level; import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.EnchantmentTableBlock; import net.minecraft.world.level.block.EnchantmentTableBlock;
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.BlockState;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import ru.betterend.registry.EndTags; import ru.betterend.registry.EndTags;
@Mixin(EnchantmentTableBlock.class) @Mixin(EnchantmentTableBlock.class)

View file

@ -7,6 +7,7 @@ import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.color.block.BlockColors; import net.minecraft.client.color.block.BlockColors;
import net.minecraft.client.color.item.ItemColors; import net.minecraft.client.color.item.ItemColors;

View file

@ -4,6 +4,15 @@ import java.io.InputStreamReader;
import java.io.Reader; import java.io.Reader;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.util.Optional; import java.util.Optional;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.ModifyVariable;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
import net.minecraft.client.renderer.block.model.BlockModel; import net.minecraft.client.renderer.block.model.BlockModel;
import net.minecraft.client.resources.model.ModelBakery; import net.minecraft.client.resources.model.ModelBakery;
import net.minecraft.core.Registry; import net.minecraft.core.Registry;
@ -12,13 +21,6 @@ import net.minecraft.server.packs.resources.Resource;
import net.minecraft.server.packs.resources.ResourceManager; import net.minecraft.server.packs.resources.ResourceManager;
import net.minecraft.world.item.Item; import net.minecraft.world.item.Item;
import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Block;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.ModifyVariable;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
import ru.betterend.BetterEnd; import ru.betterend.BetterEnd;
import ru.betterend.patterns.Patterned; import ru.betterend.patterns.Patterned;
import ru.betterend.world.generator.GeneratorOptions; import ru.betterend.world.generator.GeneratorOptions;

View file

@ -2,15 +2,17 @@ package ru.betterend.mixin.client;
import java.io.Reader; import java.io.Reader;
import java.io.StringReader; import java.io.StringReader;
import net.minecraft.client.renderer.block.model.BlockModelDefinition;
import net.minecraft.util.GsonHelper;
import net.minecraft.world.level.block.Block;
import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
import com.google.gson.Gson; import com.google.gson.Gson;
import net.minecraft.client.renderer.block.model.BlockModelDefinition;
import net.minecraft.util.GsonHelper;
import net.minecraft.world.level.block.Block;
import ru.betterend.patterns.BlockPatterned; import ru.betterend.patterns.BlockPatterned;
@Mixin(BlockModelDefinition.class) @Mixin(BlockModelDefinition.class)

View file

@ -1,6 +1,14 @@
package ru.betterend.mixin.client; package ru.betterend.mixin.client;
import java.util.Random; import java.util.Random;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.resources.sounds.AbstractSoundInstance; import net.minecraft.client.resources.sounds.AbstractSoundInstance;
import net.minecraft.client.resources.sounds.SoundInstance; import net.minecraft.client.resources.sounds.SoundInstance;
@ -8,12 +16,6 @@ import net.minecraft.client.sounds.MusicManager;
import net.minecraft.sounds.Music; import net.minecraft.sounds.Music;
import net.minecraft.util.Mth; import net.minecraft.util.Mth;
import net.minecraft.world.level.Level; import net.minecraft.world.level.Level;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import ru.betterend.client.ClientOptions; import ru.betterend.client.ClientOptions;
@Mixin(MusicManager.class) @Mixin(MusicManager.class)

View file

@ -1,11 +1,7 @@
package ru.betterend.mixin.client; package ru.betterend.mixin.client;
import java.util.List; import java.util.List;
import net.minecraft.core.Registry;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.server.packs.resources.FallbackResourceManager;
import net.minecraft.server.packs.resources.Resource;
import net.minecraft.world.level.block.Block;
import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.At;
@ -14,6 +10,12 @@ import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import net.minecraft.core.Registry;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.server.packs.resources.FallbackResourceManager;
import net.minecraft.server.packs.resources.Resource;
import net.minecraft.world.level.block.Block;
import ru.betterend.BetterEnd; import ru.betterend.BetterEnd;
import ru.betterend.patterns.BlockPatterned; import ru.betterend.patterns.BlockPatterned;

View file

@ -19,6 +19,7 @@ import com.mojang.blaze3d.vertex.VertexBuffer;
import com.mojang.blaze3d.vertex.VertexFormat; import com.mojang.blaze3d.vertex.VertexFormat;
import com.mojang.math.Quaternion; import com.mojang.math.Quaternion;
import com.mojang.math.Vector3f; import com.mojang.math.Vector3f;
import net.fabricmc.loader.api.FabricLoader; import net.fabricmc.loader.api.FabricLoader;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.multiplayer.ClientLevel; import net.minecraft.client.multiplayer.ClientLevel;

View file

@ -1,12 +1,13 @@
package ru.betterend.mixin.common; package ru.betterend.mixin.common;
import net.minecraft.world.level.block.AnvilBlock;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.block.state.properties.IntegerProperty;
import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
import net.minecraft.world.level.block.AnvilBlock;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.block.state.properties.IntegerProperty;
import ru.betterend.blocks.basis.EndAnvilBlock; import ru.betterend.blocks.basis.EndAnvilBlock;
@Mixin(AnvilBlock.class) @Mixin(AnvilBlock.class)

View file

@ -3,6 +3,14 @@ package ru.betterend.mixin.common;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
import net.minecraft.tags.BlockTags; import net.minecraft.tags.BlockTags;
import net.minecraft.world.entity.player.Inventory; import net.minecraft.world.entity.player.Inventory;
import net.minecraft.world.entity.player.Player; import net.minecraft.world.entity.player.Player;
@ -16,12 +24,6 @@ import net.minecraft.world.item.crafting.RecipeManager;
import net.minecraft.world.level.block.AnvilBlock; import net.minecraft.world.level.block.AnvilBlock;
import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.BlockState;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
import ru.betterend.blocks.basis.EndAnvilBlock; import ru.betterend.blocks.basis.EndAnvilBlock;
import ru.betterend.interfaces.AnvilScreenHandlerExtended; import ru.betterend.interfaces.AnvilScreenHandlerExtended;
import ru.betterend.recipe.builders.AnvilRecipe; import ru.betterend.recipe.builders.AnvilRecipe;

View file

@ -1,14 +1,16 @@
package ru.betterend.mixin.common; package ru.betterend.mixin.common;
import java.util.UUID; import java.util.UUID;
import net.minecraft.world.entity.ai.attributes.Attribute;
import net.minecraft.world.entity.ai.attributes.AttributeModifier;
import net.minecraft.world.item.ArmorItem;
import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.gen.Accessor; import org.spongepowered.asm.mixin.gen.Accessor;
import com.google.common.collect.Multimap; import com.google.common.collect.Multimap;
import net.minecraft.world.entity.ai.attributes.Attribute;
import net.minecraft.world.entity.ai.attributes.AttributeModifier;
import net.minecraft.world.item.ArmorItem;
@Mixin(ArmorItem.class) @Mixin(ArmorItem.class)
public interface ArmorItemAccessor { public interface ArmorItemAccessor {
@Accessor("ARMOR_MODIFIER_UUID_PER_SLOT") @Accessor("ARMOR_MODIFIER_UUID_PER_SLOT")

View file

@ -2,11 +2,13 @@ package ru.betterend.mixin.common;
import java.util.List; import java.util.List;
import java.util.function.Supplier; import java.util.function.Supplier;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.gen.Accessor;
import net.minecraft.world.level.biome.BiomeGenerationSettings; import net.minecraft.world.level.biome.BiomeGenerationSettings;
import net.minecraft.world.level.levelgen.feature.ConfiguredFeature; import net.minecraft.world.level.levelgen.feature.ConfiguredFeature;
import net.minecraft.world.level.levelgen.feature.ConfiguredStructureFeature; import net.minecraft.world.level.levelgen.feature.ConfiguredStructureFeature;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.gen.Accessor;
@Mixin(BiomeGenerationSettings.class) @Mixin(BiomeGenerationSettings.class)
public interface BiomeGenerationSettingsAccessor { public interface BiomeGenerationSettingsAccessor {

View file

@ -1,6 +1,14 @@
package ru.betterend.mixin.common; package ru.betterend.mixin.common;
import java.util.List; import java.util.List;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
import com.google.common.collect.Lists;
import net.minecraft.util.Mth; import net.minecraft.util.Mth;
import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.Items; import net.minecraft.world.item.Items;
@ -11,12 +19,6 @@ import net.minecraft.world.level.block.state.BlockBehaviour;
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.storage.loot.LootContext; import net.minecraft.world.level.storage.loot.LootContext;
import net.minecraft.world.level.storage.loot.parameters.LootContextParams; import net.minecraft.world.level.storage.loot.parameters.LootContextParams;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
import com.google.common.collect.Lists;
import ru.betterend.item.tool.EndHammerItem; import ru.betterend.item.tool.EndHammerItem;
import ru.betterend.util.MHelper; import ru.betterend.util.MHelper;

View file

@ -1,6 +1,12 @@
package ru.betterend.mixin.common; package ru.betterend.mixin.common;
import java.util.Random; import java.util.Random;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.core.BlockPos.MutableBlockPos; import net.minecraft.core.BlockPos.MutableBlockPos;
import net.minecraft.core.Direction; import net.minecraft.core.Direction;
@ -12,10 +18,6 @@ import net.minecraft.world.level.biome.Biome.BiomeCategory;
import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.Blocks;
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.BlockState;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
import ru.betterend.registry.EndBiomes; import ru.betterend.registry.EndBiomes;
import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndBlocks;
import ru.betterend.registry.EndTags; import ru.betterend.registry.EndTags;

View file

@ -1,6 +1,16 @@
package ru.betterend.mixin.common; package ru.betterend.mixin.common;
import java.util.Random; import java.util.Random;
import org.jetbrains.annotations.Nullable;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction; import net.minecraft.core.Direction;
import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerLevel;
@ -16,14 +26,6 @@ import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.block.state.properties.BlockStateProperties; import net.minecraft.world.level.block.state.properties.BlockStateProperties;
import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.CollisionContext;
import net.minecraft.world.phys.shapes.VoxelShape; import net.minecraft.world.phys.shapes.VoxelShape;
import org.jetbrains.annotations.Nullable;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndBlocks;
import ru.betterend.registry.EndTags; import ru.betterend.registry.EndTags;
import ru.betterend.util.BlocksHelper; import ru.betterend.util.BlocksHelper;

View file

@ -1,5 +1,11 @@
package ru.betterend.mixin.common; package ru.betterend.mixin.common;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction; import net.minecraft.core.Direction;
import net.minecraft.world.item.context.BlockPlaceContext; import net.minecraft.world.item.context.BlockPlaceContext;
@ -14,11 +20,6 @@ import net.minecraft.world.level.block.state.BlockBehaviour;
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.block.state.StateDefinition; import net.minecraft.world.level.block.state.StateDefinition;
import net.minecraft.world.level.block.state.properties.BlockStateProperties; import net.minecraft.world.level.block.state.properties.BlockStateProperties;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndBlocks;
import ru.betterend.registry.EndTags; import ru.betterend.registry.EndTags;
import ru.betterend.util.BlocksHelper; import ru.betterend.util.BlocksHelper;

View file

@ -1,6 +1,12 @@
package ru.betterend.mixin.common; package ru.betterend.mixin.common;
import java.util.Random; import java.util.Random;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.world.level.WorldGenLevel; import net.minecraft.world.level.WorldGenLevel;
import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.Blocks;
@ -10,10 +16,6 @@ import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.chunk.ChunkGenerator;
import net.minecraft.world.level.levelgen.feature.ChorusPlantFeature; import net.minecraft.world.level.levelgen.feature.ChorusPlantFeature;
import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndBlocks;
import ru.betterend.util.BlocksHelper; import ru.betterend.util.BlocksHelper;
import ru.betterend.util.MHelper; import ru.betterend.util.MHelper;

View file

@ -1,12 +1,13 @@
package ru.betterend.mixin.common; package ru.betterend.mixin.common;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.util.Mth; import net.minecraft.util.Mth;
import net.minecraft.world.level.biome.Biome; import net.minecraft.world.level.biome.Biome;
import net.minecraft.world.level.chunk.ChunkBiomeContainer; import net.minecraft.world.level.chunk.ChunkBiomeContainer;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import ru.betterend.interfaces.IBiomeArray; import ru.betterend.interfaces.IBiomeArray;
@Mixin(ChunkBiomeContainer.class) @Mixin(ChunkBiomeContainer.class)

View file

@ -1,9 +1,10 @@
package ru.betterend.mixin.common; package ru.betterend.mixin.common;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.gen.Invoker;
import net.minecraft.world.level.ItemLike; import net.minecraft.world.level.ItemLike;
import net.minecraft.world.level.block.ComposterBlock; import net.minecraft.world.level.block.ComposterBlock;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.gen.Invoker;
@Mixin(ComposterBlock.class) @Mixin(ComposterBlock.class)
public interface ComposterBlockAccessor { public interface ComposterBlockAccessor {

View file

@ -1,9 +1,5 @@
package ru.betterend.mixin.common; package ru.betterend.mixin.common;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.inventory.ContainerLevelAccess;
import net.minecraft.world.inventory.CraftingMenu;
import net.minecraft.world.level.block.CraftingTableBlock;
import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.Shadow;
@ -11,6 +7,11 @@ import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.inventory.ContainerLevelAccess;
import net.minecraft.world.inventory.CraftingMenu;
import net.minecraft.world.level.block.CraftingTableBlock;
@Mixin(CraftingMenu.class) @Mixin(CraftingMenu.class)
public abstract class CraftingMenuMixin { public abstract class CraftingMenuMixin {
@Final @Final

View file

@ -1,15 +1,16 @@
package ru.betterend.mixin.common; package ru.betterend.mixin.common;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
import net.minecraft.core.Registry; import net.minecraft.core.Registry;
import net.minecraft.world.level.biome.Biome; import net.minecraft.world.level.biome.Biome;
import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.chunk.ChunkGenerator;
import net.minecraft.world.level.dimension.DimensionType; import net.minecraft.world.level.dimension.DimensionType;
import net.minecraft.world.level.levelgen.NoiseBasedChunkGenerator; import net.minecraft.world.level.levelgen.NoiseBasedChunkGenerator;
import net.minecraft.world.level.levelgen.NoiseGeneratorSettings; import net.minecraft.world.level.levelgen.NoiseGeneratorSettings;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
import ru.betterend.world.generator.BetterEndBiomeSource; import ru.betterend.world.generator.BetterEndBiomeSource;
import ru.betterend.world.generator.GeneratorOptions; import ru.betterend.world.generator.GeneratorOptions;

View file

@ -2,6 +2,14 @@ package ru.betterend.mixin.common;
import java.util.List; import java.util.List;
import java.util.Random; import java.util.Random;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import net.minecraft.core.Registry; import net.minecraft.core.Registry;
import net.minecraft.world.Container; import net.minecraft.world.Container;
import net.minecraft.world.inventory.AbstractContainerMenu; import net.minecraft.world.inventory.AbstractContainerMenu;
@ -12,12 +20,6 @@ import net.minecraft.world.inventory.MenuType;
import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.enchantment.EnchantmentHelper; import net.minecraft.world.item.enchantment.EnchantmentHelper;
import net.minecraft.world.item.enchantment.EnchantmentInstance; import net.minecraft.world.item.enchantment.EnchantmentInstance;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import ru.betterend.registry.EndTags; import ru.betterend.registry.EndTags;
@Mixin(EnchantmentMenu.class) @Mixin(EnchantmentMenu.class)

View file

@ -1,5 +1,11 @@
package ru.betterend.mixin.common; package ru.betterend.mixin.common;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.ChunkPos;
import net.minecraft.world.level.biome.Biome; import net.minecraft.world.level.biome.Biome;
import net.minecraft.world.level.biome.BiomeSource; import net.minecraft.world.level.biome.BiomeSource;
@ -7,11 +13,6 @@ import net.minecraft.world.level.chunk.ChunkGenerator;
import net.minecraft.world.level.levelgen.WorldgenRandom; import net.minecraft.world.level.levelgen.WorldgenRandom;
import net.minecraft.world.level.levelgen.feature.EndCityFeature; import net.minecraft.world.level.levelgen.feature.EndCityFeature;
import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
import ru.betterend.world.generator.GeneratorOptions; import ru.betterend.world.generator.GeneratorOptions;
@Mixin(EndCityFeature.class) @Mixin(EndCityFeature.class)

View file

@ -1,6 +1,15 @@
package ru.betterend.mixin.common; package ru.betterend.mixin.common;
import java.util.Random; import java.util.Random;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.ModifyVariable;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.nbt.NbtUtils; import net.minecraft.nbt.NbtUtils;
import net.minecraft.world.level.WorldGenLevel; import net.minecraft.world.level.WorldGenLevel;
@ -10,13 +19,6 @@ import net.minecraft.world.level.levelgen.feature.EndPodiumFeature;
import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration;
import net.minecraft.world.level.levelgen.structure.templatesystem.StructurePlaceSettings; import net.minecraft.world.level.levelgen.structure.templatesystem.StructurePlaceSettings;
import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplate; import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplate;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.ModifyVariable;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
import ru.betterend.BetterEnd; import ru.betterend.BetterEnd;
import ru.betterend.util.StructureHelper; import ru.betterend.util.StructureHelper;
import ru.betterend.util.WorldDataUtil; import ru.betterend.util.WorldDataUtil;

View file

@ -1,13 +1,14 @@
package ru.betterend.mixin.common; package ru.betterend.mixin.common;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
import net.minecraft.world.entity.EquipmentSlot; import net.minecraft.world.entity.EquipmentSlot;
import net.minecraft.world.entity.monster.EnderMan; import net.minecraft.world.entity.monster.EnderMan;
import net.minecraft.world.entity.player.Player; import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.enchantment.EnchantmentHelper; import net.minecraft.world.item.enchantment.EnchantmentHelper;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
import ru.betterend.effects.EndEnchantments; import ru.betterend.effects.EndEnchantments;
import ru.betterend.effects.EndStatusEffects; import ru.betterend.effects.EndStatusEffects;

Some files were not shown because too many files have changed in this diff Show more