aboutsummaryrefslogtreecommitdiff
path: root/RoughlyEnoughItems-default-plugin/src/main/java/me
diff options
context:
space:
mode:
authorShnupbups <shnupbups@gmail.com>2020-08-22 22:02:39 +0800
committershedaniel <daniel@shedaniel.me>2020-08-22 22:02:39 +0800
commita2df00581046648bcfcd99bb37dcbaaf87eb951a (patch)
treed79478235f296c18693c358db414faa9a581cd62 /RoughlyEnoughItems-default-plugin/src/main/java/me
parent28b5f0d67e4e7e87063c613dbe60849f86b58edf (diff)
downloadRoughlyEnoughItems-a2df00581046648bcfcd99bb37dcbaaf87eb951a.tar.gz
RoughlyEnoughItems-a2df00581046648bcfcd99bb37dcbaaf87eb951a.tar.bz2
RoughlyEnoughItems-a2df00581046648bcfcd99bb37dcbaaf87eb951a.zip
Tilling and Pathing (#403)
Signed-off-by: shedaniel <daniel@shedaniel.me>
Diffstat (limited to 'RoughlyEnoughItems-default-plugin/src/main/java/me')
-rw-r--r--RoughlyEnoughItems-default-plugin/src/main/java/me/shedaniel/rei/plugin/DefaultPlugin.java29
-rw-r--r--RoughlyEnoughItems-default-plugin/src/main/java/me/shedaniel/rei/plugin/pathing/DefaultPathingCategory.java75
-rw-r--r--RoughlyEnoughItems-default-plugin/src/main/java/me/shedaniel/rei/plugin/pathing/DefaultPathingDisplay.java80
-rw-r--r--RoughlyEnoughItems-default-plugin/src/main/java/me/shedaniel/rei/plugin/pathing/DummyShovelItem.java42
-rw-r--r--RoughlyEnoughItems-default-plugin/src/main/java/me/shedaniel/rei/plugin/tilling/DefaultTillingCategory.java75
-rw-r--r--RoughlyEnoughItems-default-plugin/src/main/java/me/shedaniel/rei/plugin/tilling/DefaultTillingDisplay.java80
-rw-r--r--RoughlyEnoughItems-default-plugin/src/main/java/me/shedaniel/rei/plugin/tilling/DummyHoeItem.java41
7 files changed, 421 insertions, 1 deletions
diff --git a/RoughlyEnoughItems-default-plugin/src/main/java/me/shedaniel/rei/plugin/DefaultPlugin.java b/RoughlyEnoughItems-default-plugin/src/main/java/me/shedaniel/rei/plugin/DefaultPlugin.java
index 81d0c8dd9..331c61603 100644
--- a/RoughlyEnoughItems-default-plugin/src/main/java/me/shedaniel/rei/plugin/DefaultPlugin.java
+++ b/RoughlyEnoughItems-default-plugin/src/main/java/me/shedaniel/rei/plugin/DefaultPlugin.java
@@ -50,6 +50,9 @@ import me.shedaniel.rei.plugin.fuel.DefaultFuelCategory;
import me.shedaniel.rei.plugin.fuel.DefaultFuelDisplay;
import me.shedaniel.rei.plugin.information.DefaultInformationCategory;
import me.shedaniel.rei.plugin.information.DefaultInformationDisplay;
+import me.shedaniel.rei.plugin.pathing.DefaultPathingCategory;
+import me.shedaniel.rei.plugin.pathing.DefaultPathingDisplay;
+import me.shedaniel.rei.plugin.pathing.DummyShovelItem;
import me.shedaniel.rei.plugin.smelting.DefaultSmeltingDisplay;
import me.shedaniel.rei.plugin.smithing.DefaultSmithingCategory;
import me.shedaniel.rei.plugin.smithing.DefaultSmithingDisplay;
@@ -59,6 +62,9 @@ import me.shedaniel.rei.plugin.stonecutting.DefaultStoneCuttingDisplay;
import me.shedaniel.rei.plugin.stripping.DefaultStrippingCategory;
import me.shedaniel.rei.plugin.stripping.DefaultStrippingDisplay;
import me.shedaniel.rei.plugin.stripping.DummyAxeItem;
+import me.shedaniel.rei.plugin.tilling.DefaultTillingCategory;
+import me.shedaniel.rei.plugin.tilling.DefaultTillingDisplay;
+import me.shedaniel.rei.plugin.tilling.DummyHoeItem;
import me.shedaniel.rei.utils.CollectionUtils;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
@@ -86,7 +92,6 @@ import org.jetbrains.annotations.ApiStatus;
import org.jetbrains.annotations.NotNull;
import java.util.*;
-import java.util.function.Consumer;
import java.util.function.UnaryOperator;
import static me.shedaniel.rei.impl.Internals.attachInstance;
@@ -107,6 +112,8 @@ public class DefaultPlugin implements REIPluginV0, BuiltinPlugin {
public static final Identifier FUEL = BuiltinPlugin.FUEL;
public static final Identifier SMITHING = BuiltinPlugin.SMITHING;
public static final Identifier BEACON = BuiltinPlugin.BEACON;
+ public static final Identifier TILLING = BuiltinPlugin.TILLING;
+ public static final Identifier PATHING = BuiltinPlugin.PATHING;
public static final Identifier INFO = BuiltinPlugin.INFO;
private static final Identifier DISPLAY_TEXTURE = new Identifier("roughlyenoughitems", "textures/gui/display.png");
private static final Identifier DISPLAY_TEXTURE_DARK = new Identifier("roughlyenoughitems", "textures/gui/display_dark.png");
@@ -202,6 +209,8 @@ public class DefaultPlugin implements REIPluginV0, BuiltinPlugin {
new DefaultStrippingCategory(),
new DefaultSmithingCategory(),
new DefaultBeaconBaseCategory(),
+ new DefaultTillingCategory(),
+ new DefaultPathingCategory(),
new DefaultInformationCategory()
);
}
@@ -255,6 +264,12 @@ public class DefaultPlugin implements REIPluginV0, BuiltinPlugin {
DummyAxeItem.getStrippedBlocksMap().entrySet().stream().sorted(Comparator.comparing(b -> Registry.BLOCK.getId(b.getKey()))).forEach(set -> {
recipeHelper.registerDisplay(new DefaultStrippingDisplay(EntryStack.create(set.getKey()), EntryStack.create(set.getValue())));
});
+ DummyHoeItem.getTilledBlocksMap().entrySet().stream().sorted(Comparator.comparing(b -> Registry.BLOCK.getId(b.getKey()))).forEach(set -> {
+ recipeHelper.registerDisplay(new DefaultTillingDisplay(EntryStack.create(set.getKey()), EntryStack.create(set.getValue().getBlock())));
+ });
+ DummyShovelItem.getPathBlocksMap().entrySet().stream().sorted(Comparator.comparing(b -> Registry.BLOCK.getId(b.getKey()))).forEach(set -> {
+ recipeHelper.registerDisplay(new DefaultPathingDisplay(EntryStack.create(set.getKey()), EntryStack.create(set.getValue().getBlock())));
+ });
recipeHelper.registerDisplay(new DefaultBeaconBaseDisplay(CollectionUtils.map(Lists.newArrayList(BlockTags.BEACON_BASE_BLOCKS.values()), ItemStack::new)));
}
@@ -324,6 +339,18 @@ public class DefaultPlugin implements REIPluginV0, BuiltinPlugin {
recipeHelper.registerWorkingStations(STRIPPING, EntryStack.create(item));
}
}
+ Tag<Item> hoes = MinecraftClient.getInstance().getNetworkHandler().getTagManager().getItems().getTag(new Identifier("fabric", "hoes"));
+ if (hoes != null) {
+ for (Item item : hoes.values()) {
+ recipeHelper.registerWorkingStations(TILLING, EntryStack.create(item));
+ }
+ }
+ Tag<Item> shovels = MinecraftClient.getInstance().getNetworkHandler().getTagManager().getItems().getTag(new Identifier("fabric", "shovels"));
+ if (shovels != null) {
+ for (Item item : shovels.values()) {
+ recipeHelper.registerWorkingStations(PATHING, EntryStack.create(item));
+ }
+ }
recipeHelper.removeAutoCraftButton(FUEL);
recipeHelper.removeAutoCraftButton(COMPOSTING);
recipeHelper.removeAutoCraftButton(BEACON);
diff --git a/RoughlyEnoughItems-default-plugin/src/main/java/me/shedaniel/rei/plugin/pathing/DefaultPathingCategory.java b/RoughlyEnoughItems-default-plugin/src/main/java/me/shedaniel/rei/plugin/pathing/DefaultPathingCategory.java
new file mode 100644
index 000000000..fecda32cf
--- /dev/null
+++ b/RoughlyEnoughItems-default-plugin/src/main/java/me/shedaniel/rei/plugin/pathing/DefaultPathingCategory.java
@@ -0,0 +1,75 @@
+/*
+ * This file is licensed under the MIT License, part of Roughly Enough Items.
+ * Copyright (c) 2018, 2019, 2020 shedaniel
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+package me.shedaniel.rei.plugin.pathing;
+
+import net.minecraft.client.resource.language.I18n;
+import net.minecraft.item.Items;
+import net.minecraft.util.Identifier;
+
+import me.shedaniel.math.Point;
+import me.shedaniel.math.Rectangle;
+import me.shedaniel.rei.api.EntryStack;
+import me.shedaniel.rei.api.RecipeCategory;
+import me.shedaniel.rei.api.widgets.Widgets;
+import me.shedaniel.rei.gui.widget.Widget;
+import me.shedaniel.rei.plugin.DefaultPlugin;
+
+import com.google.common.collect.Lists;
+import java.util.List;
+
+public class DefaultPathingCategory implements RecipeCategory<DefaultPathingDisplay> {
+
+ @Override
+ public Identifier getIdentifier() {
+ return DefaultPlugin.PATHING;
+ }
+
+ @Override
+ public EntryStack getLogo() {
+ return EntryStack.create(Items.IRON_SHOVEL);
+ }
+
+ @Override
+ public String getCategoryName() {
+ return I18n.translate("category.rei.pathing");
+ }
+
+ @Override
+ public List<Widget> setupDisplay(DefaultPathingDisplay recipeDisplay, Rectangle bounds) {
+ Point startPoint = new Point(bounds.getCenterX() - 41, bounds.getCenterY() - 13);
+ List<Widget> widgets = Lists.newArrayList();
+ widgets.add(Widgets.createRecipeBase(bounds));
+ widgets.add(Widgets.createArrow(new Point(startPoint.x + 27, startPoint.y + 4)));
+ widgets.add(Widgets.createResultSlotBackground(new Point(startPoint.x + 61, startPoint.y + 5)));
+ widgets.add(Widgets.createSlot(new Point(startPoint.x + 4, startPoint.y + 5)).entry(recipeDisplay.getIn()).markInput());
+ widgets.add(Widgets.createSlot(new Point(startPoint.x + 61, startPoint.y + 5)).entry(recipeDisplay.getOut()).disableBackground().markInput());
+ return widgets;
+ }
+
+ @Override
+ public int getDisplayHeight() {
+ return 36;
+ }
+
+}
diff --git a/RoughlyEnoughItems-default-plugin/src/main/java/me/shedaniel/rei/plugin/pathing/DefaultPathingDisplay.java b/RoughlyEnoughItems-default-plugin/src/main/java/me/shedaniel/rei/plugin/pathing/DefaultPathingDisplay.java
new file mode 100644
index 000000000..36a00d4f2
--- /dev/null
+++ b/RoughlyEnoughItems-default-plugin/src/main/java/me/shedaniel/rei/plugin/pathing/DefaultPathingDisplay.java
@@ -0,0 +1,80 @@
+/*
+ * This file is licensed under the MIT License, part of Roughly Enough Items.
+ * Copyright (c) 2018, 2019, 2020 shedaniel
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+package me.shedaniel.rei.plugin.pathing;
+
+import net.fabricmc.api.EnvType;
+import net.fabricmc.api.Environment;
+
+import net.minecraft.item.ItemStack;
+import net.minecraft.util.Identifier;
+
+import me.shedaniel.rei.api.EntryStack;
+import me.shedaniel.rei.api.RecipeDisplay;
+import me.shedaniel.rei.plugin.DefaultPlugin;
+
+import java.util.Collections;
+import java.util.List;
+
+@Environment(EnvType.CLIENT)
+public class DefaultPathingDisplay implements RecipeDisplay {
+ private EntryStack in, out;
+
+ public DefaultPathingDisplay(EntryStack in, EntryStack out) {
+ this.in = in;
+ this.out = out;
+ }
+
+ public DefaultPathingDisplay(ItemStack in, ItemStack out) {
+ this.in = EntryStack.create(in);
+ this.out = EntryStack.create(out);
+ }
+
+ public final EntryStack getIn() {
+ return in;
+ }
+
+ public final EntryStack getOut() {
+ return out;
+ }
+
+ @Override
+ public List<List<EntryStack>> getInputEntries() {
+ return Collections.singletonList(Collections.singletonList(in));
+ }
+
+ @Override
+ public List<List<EntryStack>> getResultingEntries() {
+ return Collections.singletonList(Collections.singletonList(out));
+ }
+
+ @Override
+ public Identifier getRecipeCategory() {
+ return DefaultPlugin.PATHING;
+ }
+
+ @Override
+ public List<List<EntryStack>> getRequiredEntries() {
+ return getInputEntries();
+ }
+}
diff --git a/RoughlyEnoughItems-default-plugin/src/main/java/me/shedaniel/rei/plugin/pathing/DummyShovelItem.java b/RoughlyEnoughItems-default-plugin/src/main/java/me/shedaniel/rei/plugin/pathing/DummyShovelItem.java
new file mode 100644
index 000000000..a59aa7abf
--- /dev/null
+++ b/RoughlyEnoughItems-default-plugin/src/main/java/me/shedaniel/rei/plugin/pathing/DummyShovelItem.java
@@ -0,0 +1,42 @@
+/*
+ * This file is licensed under the MIT License, part of Roughly Enough Items.
+ * Copyright (c) 2018, 2019, 2020 shedaniel
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+package me.shedaniel.rei.plugin.pathing;
+
+import net.minecraft.block.Block;
+import net.minecraft.block.BlockState;
+import net.minecraft.item.HoeItem;
+import net.minecraft.item.ShovelItem;
+import net.minecraft.item.ToolMaterial;
+
+import java.util.Map;
+
+public class DummyShovelItem extends ShovelItem {
+ protected DummyShovelItem(ToolMaterial toolMaterial_1, float float_1, float float_2, Settings item$Settings_1) {
+ super(toolMaterial_1, float_1, float_2, item$Settings_1);
+ }
+
+ public static Map<Block, BlockState> getPathBlocksMap() {
+ return PATH_BLOCKSTATES;
+ }
+}
diff --git a/RoughlyEnoughItems-default-plugin/src/main/java/me/shedaniel/rei/plugin/tilling/DefaultTillingCategory.java b/RoughlyEnoughItems-default-plugin/src/main/java/me/shedaniel/rei/plugin/tilling/DefaultTillingCategory.java
new file mode 100644
index 000000000..5c0bdf48d
--- /dev/null
+++ b/RoughlyEnoughItems-default-plugin/src/main/java/me/shedaniel/rei/plugin/tilling/DefaultTillingCategory.java
@@ -0,0 +1,75 @@
+/*
+ * This file is licensed under the MIT License, part of Roughly Enough Items.
+ * Copyright (c) 2018, 2019, 2020 shedaniel
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+package me.shedaniel.rei.plugin.tilling;
+
+import net.minecraft.client.resource.language.I18n;
+import net.minecraft.item.Items;
+import net.minecraft.util.Identifier;
+
+import me.shedaniel.math.Point;
+import me.shedaniel.math.Rectangle;
+import me.shedaniel.rei.api.EntryStack;
+import me.shedaniel.rei.api.RecipeCategory;
+import me.shedaniel.rei.api.widgets.Widgets;
+import me.shedaniel.rei.gui.widget.Widget;
+import me.shedaniel.rei.plugin.DefaultPlugin;
+
+import com.google.common.collect.Lists;
+import java.util.List;
+
+public class DefaultTillingCategory implements RecipeCategory<DefaultTillingDisplay> {
+
+ @Override
+ public Identifier getIdentifier() {
+ return DefaultPlugin.TILLING;
+ }
+
+ @Override
+ public EntryStack getLogo() {
+ return EntryStack.create(Items.IRON_HOE);
+ }
+
+ @Override
+ public String getCategoryName() {
+ return I18n.translate("category.rei.tilling");
+ }
+
+ @Override
+ public List<Widget> setupDisplay(DefaultTillingDisplay recipeDisplay, Rectangle bounds) {
+ Point startPoint = new Point(bounds.getCenterX() - 41, bounds.getCenterY() - 13);
+ List<Widget> widgets = Lists.newArrayList();
+ widgets.add(Widgets.createRecipeBase(bounds));
+ widgets.add(Widgets.createArrow(new Point(startPoint.x + 27, startPoint.y + 4)));
+ widgets.add(Widgets.createResultSlotBackground(new Point(startPoint.x + 61, startPoint.y + 5)));
+ widgets.add(Widgets.createSlot(new Point(startPoint.x + 4, startPoint.y + 5)).entry(recipeDisplay.getIn()).markInput());
+ widgets.add(Widgets.createSlot(new Point(startPoint.x + 61, startPoint.y + 5)).entry(recipeDisplay.getOut()).disableBackground().markInput());
+ return widgets;
+ }
+
+ @Override
+ public int getDisplayHeight() {
+ return 36;
+ }
+
+}
diff --git a/RoughlyEnoughItems-default-plugin/src/main/java/me/shedaniel/rei/plugin/tilling/DefaultTillingDisplay.java b/RoughlyEnoughItems-default-plugin/src/main/java/me/shedaniel/rei/plugin/tilling/DefaultTillingDisplay.java
new file mode 100644
index 000000000..90b44d0ea
--- /dev/null
+++ b/RoughlyEnoughItems-default-plugin/src/main/java/me/shedaniel/rei/plugin/tilling/DefaultTillingDisplay.java
@@ -0,0 +1,80 @@
+/*
+ * This file is licensed under the MIT License, part of Roughly Enough Items.
+ * Copyright (c) 2018, 2019, 2020 shedaniel
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+package me.shedaniel.rei.plugin.tilling;
+
+import net.fabricmc.api.EnvType;
+import net.fabricmc.api.Environment;
+
+import net.minecraft.item.ItemStack;
+import net.minecraft.util.Identifier;
+
+import me.shedaniel.rei.api.EntryStack;
+import me.shedaniel.rei.api.RecipeDisplay;
+import me.shedaniel.rei.plugin.DefaultPlugin;
+
+import java.util.Collections;
+import java.util.List;
+
+@Environment(EnvType.CLIENT)
+public class DefaultTillingDisplay implements RecipeDisplay {
+ private EntryStack in, out;
+
+ public DefaultTillingDisplay(EntryStack in, EntryStack out) {
+ this.in = in;
+ this.out = out;
+ }
+
+ public DefaultTillingDisplay(ItemStack in, ItemStack out) {
+ this.in = EntryStack.create(in);
+ this.out = EntryStack.create(out);
+ }
+
+ public final EntryStack getIn() {
+ return in;
+ }
+
+ public final EntryStack getOut() {
+ return out;
+ }
+
+ @Override
+ public List<List<EntryStack>> getInputEntries() {
+ return Collections.singletonList(Collections.singletonList(in));
+ }
+
+ @Override
+ public List<List<EntryStack>> getResultingEntries() {
+ return Collections.singletonList(Collections.singletonList(out));
+ }
+
+ @Override
+ public Identifier getRecipeCategory() {
+ return DefaultPlugin.TILLING;
+ }
+
+ @Override
+ public List<List<EntryStack>> getRequiredEntries() {
+ return getInputEntries();
+ }
+}
diff --git a/RoughlyEnoughItems-default-plugin/src/main/java/me/shedaniel/rei/plugin/tilling/DummyHoeItem.java b/RoughlyEnoughItems-default-plugin/src/main/java/me/shedaniel/rei/plugin/tilling/DummyHoeItem.java
new file mode 100644
index 000000000..89c669431
--- /dev/null
+++ b/RoughlyEnoughItems-default-plugin/src/main/java/me/shedaniel/rei/plugin/tilling/DummyHoeItem.java
@@ -0,0 +1,41 @@
+/*
+ * This file is licensed under the MIT License, part of Roughly Enough Items.
+ * Copyright (c) 2018, 2019, 2020 shedaniel
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+package me.shedaniel.rei.plugin.tilling;
+
+import net.minecraft.block.Block;
+import net.minecraft.block.BlockState;
+import net.minecraft.item.HoeItem;
+import net.minecraft.item.ToolMaterial;
+
+import java.util.Map;
+
+public class DummyHoeItem extends HoeItem {
+ protected DummyHoeItem(ToolMaterial toolMaterial_1, int int_1, float float_1, Settings item$Settings_1) {
+ super(toolMaterial_1, int_1, float_1, item$Settings_1);
+ }
+
+ public static Map<Block, BlockState> getTilledBlocksMap() {
+ return TILLED_BLOCKS;
+ }
+}