- * Ex Deorum uses the ModKit library, which adds several utilities primarily for data generation
- * without needing to be shaded or depended upon outside a development environment.
- */
@net.minecraft.MethodsReturnNonnullByDefault
@javax.annotation.ParametersAreNonnullByDefault
package thedarkcolour.exdeorum.blockentity;
diff --git a/src/main/java/thedarkcolour/exdeorum/client/ClientHandler.java b/src/main/java/thedarkcolour/exdeorum/client/ClientHandler.java
index e3351cca..664886ed 100644
--- a/src/main/java/thedarkcolour/exdeorum/client/ClientHandler.java
+++ b/src/main/java/thedarkcolour/exdeorum/client/ClientHandler.java
@@ -21,6 +21,7 @@ package thedarkcolour.exdeorum.client;
import com.mojang.blaze3d.systems.RenderSystem;
import com.mojang.blaze3d.vertex.DefaultVertexFormat;
import net.minecraft.client.Minecraft;
+import net.minecraft.client.gui.screens.MenuScreens;
import net.minecraft.client.gui.screens.worldselection.CreateWorldScreen;
import net.minecraft.client.gui.screens.worldselection.WorldCreationUiState;
import net.minecraft.client.renderer.ItemBlockRenderTypes;
@@ -42,6 +43,7 @@ import net.minecraftforge.fml.event.config.ModConfigEvent;
import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent;
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
import thedarkcolour.exdeorum.ExDeorum;
+import thedarkcolour.exdeorum.client.screen.MechanicalSieveScreen;
import thedarkcolour.exdeorum.client.ter.BarrelRenderer;
import thedarkcolour.exdeorum.client.ter.CrucibleRenderer;
import thedarkcolour.exdeorum.client.ter.InfestedLeavesRenderer;
@@ -52,9 +54,11 @@ import thedarkcolour.exdeorum.network.ClientMessageHandler;
import thedarkcolour.exdeorum.recipe.RecipeUtil;
import thedarkcolour.exdeorum.registry.EBlockEntities;
import thedarkcolour.exdeorum.registry.EFluids;
+import thedarkcolour.exdeorum.registry.EMenus;
import thedarkcolour.exdeorum.registry.EWorldPresets;
import java.io.IOException;
+import java.text.DecimalFormat;
public class ClientHandler {
// Used for the composting recipe category in JEI
@@ -95,7 +99,10 @@ public class ClientHandler {
}
private static void clientSetup(FMLClientSetupEvent event) {
- event.enqueueWork(ClientHandler::setRenderLayers);
+ event.enqueueWork(() -> {
+ setRenderLayers();
+ MenuScreens.register(EMenus.MECHANICAL_SIEVE.get(), MechanicalSieveScreen::new);
+ });
}
private static void setRenderLayers() {
@@ -128,7 +135,8 @@ public class ClientHandler {
event.registerBlockEntityRenderer(EBlockEntities.BARREL.get(), BarrelRenderer::new);
event.registerBlockEntityRenderer(EBlockEntities.LAVA_CRUCIBLE.get(), ctx -> new CrucibleRenderer());
event.registerBlockEntityRenderer(EBlockEntities.WATER_CRUCIBLE.get(), ctx -> new CrucibleRenderer());
- event.registerBlockEntityRenderer(EBlockEntities.SIEVE.get(), SieveRenderer::new);
+ event.registerBlockEntityRenderer(EBlockEntities.SIEVE.get(), ctx -> new SieveRenderer<>());
+ event.registerBlockEntityRenderer(EBlockEntities.MECHANICAL_SIEVE.get(), ctx -> new SieveRenderer<>());
}
private static void registerShaders(RegisterShadersEvent event) {
diff --git a/src/main/java/thedarkcolour/exdeorum/client/RenderFace.java b/src/main/java/thedarkcolour/exdeorum/client/RenderFace.java
index bfcc1466..19b09ee1 100644
--- a/src/main/java/thedarkcolour/exdeorum/client/RenderFace.java
+++ b/src/main/java/thedarkcolour/exdeorum/client/RenderFace.java
@@ -27,9 +27,7 @@ import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import java.util.List;
public interface RenderFace {
- void renderFlatSprite(MultiBufferSource buffers, PoseStack stack, float y, int r, int g, int b, int light, float edge);
-
- void renderFlatSpriteLerp(MultiBufferSource buffers, PoseStack stack, float percentage, int r, int g, int b, int light, float edge, float minY, float maxY);
+ void renderFlatSpriteLerp(MultiBufferSource buffers, PoseStack stack, float percentage, int r, int g, int b, int light, float edge, float yStart, float yEnd);
boolean isMissingTexture();
@@ -37,14 +35,10 @@ public interface RenderFace {
public Single(RenderType renderType, TextureAtlasSprite sprite) {
this(renderType, sprite, RenderUtil.isMissingTexture(sprite));
}
- @Override
- public void renderFlatSprite(MultiBufferSource buffers, PoseStack stack, float y, int r, int g, int b, int light, float edge) {
- RenderUtil.renderFlatSprite(buffers.getBuffer(this.renderType), stack, y, r, g, b, this.sprite, light, edge);
- }
@Override
- public void renderFlatSpriteLerp(MultiBufferSource buffers, PoseStack stack, float percentage, int r, int g, int b, int light, float edge, float minY, float maxY) {
- RenderUtil.renderFlatSpriteLerp(buffers.getBuffer(this.renderType), stack, percentage, r, g, b, this.sprite, light, edge, minY, maxY);
+ public void renderFlatSpriteLerp(MultiBufferSource buffers, PoseStack stack, float percentage, int r, int g, int b, int light, float edge, float yStart, float yEnd) {
+ RenderUtil.renderFlatSpriteLerp(buffers.getBuffer(this.renderType), stack, percentage, r, g, b, this.sprite, light, edge, yStart, yEnd);
}
}
@@ -54,16 +48,9 @@ public interface RenderFace {
}
@Override
- public void renderFlatSprite(MultiBufferSource buffers, PoseStack stack, float y, int r, int g, int b, int light, float edge) {
+ public void renderFlatSpriteLerp(MultiBufferSource buffers, PoseStack stack, float percentage, int r, int g, int b, int light, float edge, float yStart, float yEnd) {
for (var layer : this.layers) {
- RenderUtil.renderFlatSprite(buffers.getBuffer(layer.first()), stack, y, r, g, b, layer.second(), light, edge);
- }
- }
-
- @Override
- public void renderFlatSpriteLerp(MultiBufferSource buffers, PoseStack stack, float percentage, int r, int g, int b, int light, float edge, float minY, float maxY) {
- for (var layer : this.layers) {
- RenderUtil.renderFlatSpriteLerp(buffers.getBuffer(layer.first()), stack, percentage, r, g, b, layer.second(), light, edge, minY, maxY);
+ RenderUtil.renderFlatSpriteLerp(buffers.getBuffer(layer.first()), stack, percentage, r, g, b, layer.second(), light, edge, yStart, yEnd);
}
}
diff --git a/src/main/java/thedarkcolour/exdeorum/client/RenderUtil.java b/src/main/java/thedarkcolour/exdeorum/client/RenderUtil.java
index 71f85341..1cc0f0d3 100644
--- a/src/main/java/thedarkcolour/exdeorum/client/RenderUtil.java
+++ b/src/main/java/thedarkcolour/exdeorum/client/RenderUtil.java
@@ -56,11 +56,12 @@ import thedarkcolour.exdeorum.client.ter.SieveRenderer;
import java.awt.Color;
import java.lang.invoke.MethodHandles;
import java.lang.invoke.VarHandle;
-import java.util.IdentityHashMap;
+import java.util.HashMap;
+import java.util.Map;
public class RenderUtil {
private static final VarHandle COMPOSITE_MODEL_CHILDREN;
- private static final IdentityHashMap
- * Ex Deorum uses the ModKit library, which adds several utilities primarily for data generation
- * without needing to be shaded or depended upon outside a development environment.
- */
@net.minecraft.MethodsReturnNonnullByDefault
@javax.annotation.ParametersAreNonnullByDefault
package thedarkcolour.exdeorum.data;
diff --git a/src/main/java/thedarkcolour/exdeorum/data/recipe/Recipes.java b/src/main/java/thedarkcolour/exdeorum/data/recipe/Recipes.java
index 0cbd308a..d485e6f6 100644
--- a/src/main/java/thedarkcolour/exdeorum/data/recipe/Recipes.java
+++ b/src/main/java/thedarkcolour/exdeorum/data/recipe/Recipes.java
@@ -18,10 +18,10 @@
package thedarkcolour.exdeorum.data.recipe;
+import mcjty.theoneprobe.apiimpl.elements.ElementItemStack;
import net.minecraft.data.recipes.FinishedRecipe;
import net.minecraft.data.recipes.RecipeCategory;
import net.minecraft.resources.ResourceLocation;
-import net.minecraft.tags.BlockTags;
import net.minecraft.tags.ItemTags;
import net.minecraft.tags.TagKey;
import net.minecraft.world.item.Item;
@@ -282,6 +282,16 @@ public class Recipes {
recipe.pattern("WCW");
MKRecipeProvider.unlockedByHaving(recipe, EItems.WOOD_CHIPPINGS.get());
});
+ recipes.shapedCrafting(RecipeCategory.MISC, EItems.MECHANICAL_SIEVE.get(), recipe -> {
+ recipe.define('#', Items.IRON_BLOCK);
+ recipe.define('G', Items.GLASS);
+ recipe.define('H', Items.HOPPER);
+ recipe.define('I', Items.IRON_BARS);
+ recipe.pattern("#G#");
+ recipe.pattern("IHI");
+ recipe.pattern("I I");
+ MKRecipeProvider.unlockedByHaving(recipe, Items.HOPPER);
+ });
}
private static void modUShaped(MKRecipeProvider recipes, String modid, RegistryObject extends Item> sides, RegistryObject extends Item> middle, RegistryObject extends Item> result) {
diff --git a/src/main/java/thedarkcolour/exdeorum/data/recipe/SieveRecipes.java b/src/main/java/thedarkcolour/exdeorum/data/recipe/SieveRecipes.java
index 9c0305c9..9081c3d8 100644
--- a/src/main/java/thedarkcolour/exdeorum/data/recipe/SieveRecipes.java
+++ b/src/main/java/thedarkcolour/exdeorum/data/recipe/SieveRecipes.java
@@ -939,6 +939,7 @@ class SieveRecipes {
void accept(BiConsumer
- * Ex Deorum uses the ModKit library, which adds several utilities primarily for data generation
- * without needing to be shaded or depended upon outside a development environment.
- */
@net.minecraft.MethodsReturnNonnullByDefault
@javax.annotation.ParametersAreNonnullByDefault
package thedarkcolour.exdeorum.recipe.hammer;
diff --git a/src/main/java/thedarkcolour/exdeorum/recipe/package-info.java b/src/main/java/thedarkcolour/exdeorum/recipe/package-info.java
index 308d7f38..5ca3d7d3 100644
--- a/src/main/java/thedarkcolour/exdeorum/recipe/package-info.java
+++ b/src/main/java/thedarkcolour/exdeorum/recipe/package-info.java
@@ -16,12 +16,6 @@
* along with this program. If not, see
- * Ex Deorum uses the ModKit library, which adds several utilities primarily for data generation
- * without needing to be shaded or depended upon outside a development environment.
- */
@net.minecraft.MethodsReturnNonnullByDefault
@javax.annotation.ParametersAreNonnullByDefault
package thedarkcolour.exdeorum.recipe;
diff --git a/src/main/java/thedarkcolour/exdeorum/recipe/sieve/FinishedSieveRecipe.java b/src/main/java/thedarkcolour/exdeorum/recipe/sieve/FinishedSieveRecipe.java
index 17da4389..b0def25e 100644
--- a/src/main/java/thedarkcolour/exdeorum/recipe/sieve/FinishedSieveRecipe.java
+++ b/src/main/java/thedarkcolour/exdeorum/recipe/sieve/FinishedSieveRecipe.java
@@ -49,19 +49,19 @@ public class FinishedSieveRecipe implements EFinishedRecipe {
@Override
public void serializeRecipeData(JsonObject object) {
- object.add("ingredient", ingredient.toJson());
+ object.add("ingredient", this.ingredient.toJson());
object.addProperty("mesh", ForgeRegistries.ITEMS.getKey(this.mesh).toString());
this.result.ifLeft(item -> {
object.addProperty("result", ForgeRegistries.ITEMS.getKey(item).toString());
}).ifRight(tag -> {
object.addProperty("result_tag", tag.location().toString());
});
- object.add("result_amount", LootDataType.PREDICATE.parser().toJsonTree(resultAmount));
+ object.add("result_amount", LootDataType.PREDICATE.parser().toJsonTree(this.resultAmount));
}
@Override
public ResourceLocation getId() {
- return id;
+ return this.id;
}
@Override
diff --git a/src/main/java/thedarkcolour/exdeorum/recipe/sieve/SieveRecipe.java b/src/main/java/thedarkcolour/exdeorum/recipe/sieve/SieveRecipe.java
index 4b72986e..c122186a 100644
--- a/src/main/java/thedarkcolour/exdeorum/recipe/sieve/SieveRecipe.java
+++ b/src/main/java/thedarkcolour/exdeorum/recipe/sieve/SieveRecipe.java
@@ -43,11 +43,13 @@ import thedarkcolour.exdeorum.registry.ERecipeTypes;
public class SieveRecipe extends ProbabilityRecipe {
public final Item mesh;
+ public final boolean byHandOnly;
- public SieveRecipe(ResourceLocation id, Ingredient ingredient, Item mesh, Item result, NumberProvider resultAmount) {
+ public SieveRecipe(ResourceLocation id, Ingredient ingredient, Item mesh, Item result, NumberProvider resultAmount, boolean byHandOnly) {
super(id, ingredient, result, resultAmount);
this.mesh = mesh;
+ this.byHandOnly = byHandOnly;
}
@Override
@@ -83,7 +85,8 @@ public class SieveRecipe extends ProbabilityRecipe {
}
NumberProvider resultAmount = RecipeUtil.readNumberProvider(json, "result_amount");
- return new SieveRecipe(id, ingredient, mesh, result, resultAmount);
+ boolean byHandOnly = json.has("by_hand_only") && json.get("by_hand_only").getAsBoolean();
+ return new SieveRecipe(id, ingredient, mesh, result, resultAmount, byHandOnly);
}
@Override
@@ -92,7 +95,7 @@ public class SieveRecipe extends ProbabilityRecipe {
Item mesh = buffer.readById(BuiltInRegistries.ITEM);
Item result = buffer.readById(BuiltInRegistries.ITEM);
NumberProvider resultAmount = RecipeUtil.fromNetworkNumberProvider(buffer);
- return new SieveRecipe(id, ingredient, mesh, result, resultAmount);
+ return new SieveRecipe(id, ingredient, mesh, result, resultAmount, buffer.readBoolean());
}
@Override
@@ -101,6 +104,7 @@ public class SieveRecipe extends ProbabilityRecipe {
buffer.writeId(BuiltInRegistries.ITEM, recipe.mesh);
buffer.writeId(BuiltInRegistries.ITEM, recipe.result);
RecipeUtil.toNetworkNumberProvider(buffer, recipe.resultAmount);
+ buffer.writeBoolean(recipe.byHandOnly);
}
}
}
diff --git a/src/main/java/thedarkcolour/exdeorum/registry/EBlockEntities.java b/src/main/java/thedarkcolour/exdeorum/registry/EBlockEntities.java
index f5a9b507..edcab94f 100644
--- a/src/main/java/thedarkcolour/exdeorum/registry/EBlockEntities.java
+++ b/src/main/java/thedarkcolour/exdeorum/registry/EBlockEntities.java
@@ -24,8 +24,10 @@ import net.minecraftforge.registries.ForgeRegistries;
import net.minecraftforge.registries.RegistryObject;
import thedarkcolour.exdeorum.ExDeorum;
import thedarkcolour.exdeorum.blockentity.BarrelBlockEntity;
+import thedarkcolour.exdeorum.blockentity.CompressedSieveBlockEntity;
import thedarkcolour.exdeorum.blockentity.InfestedLeavesBlockEntity;
import thedarkcolour.exdeorum.blockentity.LavaCrucibleBlockEntity;
+import thedarkcolour.exdeorum.blockentity.MechanicalSieveBlockEntity;
import thedarkcolour.exdeorum.blockentity.SieveBlockEntity;
import thedarkcolour.exdeorum.blockentity.WaterCrucibleBlockEntity;
@@ -154,4 +156,5 @@ public class EBlockEntities {
EBlocks.MAPLE_SIEVE.get(),
EBlocks.CRYSTALLIZED_SIEVE.get()
).build(null));
+ public static final RegistryObject