Skip to content

Commit

Permalink
Added new anvil recipe features
Browse files Browse the repository at this point in the history
Completes #9 #11 #13 #21
  • Loading branch information
Mohron committed Jul 21, 2019
1 parent bb90971 commit 8e94918
Show file tree
Hide file tree
Showing 10 changed files with 237 additions and 109 deletions.
5 changes: 2 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,8 @@
[![Rocky Core](http://cf.way2muchnoise.eu/versions/265461.svg)](https://minecraft.curseforge.com/projects/265461)
[![Rocky Core](http://cf.way2muchnoise.eu/full_265461_downloads.svg)](https://minecraft.curseforge.com/projects/265461)

This mod is designed to add useful features for modpacks.
Rocky Tweaks was designed for the [Uprising](https://minecraft.curseforge.com/projects/uprising) modpack but can be used in any modpack.
More features will be added as they're needed.
This mod is designed to add useful features for modpacks.
Rocky Tweaks was designed for the [Uprising](https://minecraft.curseforge.com/projects/uprising) modpack but can be used in any modpack.

### Current Features:
- [CraftTweaker](https://minecraft.curseforge.com/projects/crafttweaker)
Expand Down
2 changes: 1 addition & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ repositories {
}

dependencies {
compileOnly "mezz.jei:jei_${mc_version}:${jei_version}:api"
compileOnly "mezz.jei:jei_${mc_version}:${jei_version}"
runtime "mezz.jei:jei_${mc_version}:${jei_version}"
compile "CraftTweaker2:CraftTweaker2-API:${ct_version}"
compile "CraftTweaker2:CraftTweaker2-MC1120-Main:1.12-${ct_version}"
Expand Down
6 changes: 3 additions & 3 deletions gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@
# This is required to provide enough memory for the Minecraft decompilation process.
org.gradle.jvmargs=-Xmx4G
name=RockyTweaks
mod_version=0.5.0
mod_version=0.6.0-PRE-RELEASE-1
mc_version=1.12.2
mcp_mappings=stable_39
forge_version=14.23.5.2768
forge_version=14.23.5.2779
ct_version=4.1.11+
mtlib_version=3.0.4+
mtlib_version=3.0.4.8+
jei_version=4.8.5.132
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
package rocks.gameonthe.rockytweaks.crafttweaker.anvil;

import crafttweaker.api.minecraft.CraftTweakerMC;
import crafttweaker.api.player.IPlayer;
import crafttweaker.api.recipes.ICraftingInfo;
import crafttweaker.api.recipes.ICraftingInventory;
import crafttweaker.api.world.IWorld;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.world.World;

public class AnvilCraftingInfo implements ICraftingInfo {

private final EntityPlayer player;
private final World world;

public AnvilCraftingInfo(EntityPlayer player, World world) {
this.player = player;
this.world = world;
}

@Override
public ICraftingInventory getInventory() {
return null;
}

@Override
public IPlayer getPlayer() {
return CraftTweakerMC.getIPlayer(player);
}

@Override
public int getDimension() {
return getWorld().getDimension();
}

@Override
public IWorld getWorld() {
return CraftTweakerMC.getIWorld(world);
}
}
Original file line number Diff line number Diff line change
@@ -1,8 +1,12 @@
package rocks.gameonthe.rockytweaks.crafttweaker.anvil;

import com.blamejared.mtlib.helpers.InputHelper;
import crafttweaker.CraftTweakerAPI;
import crafttweaker.api.item.IIngredient;
import crafttweaker.api.item.IItemStack;
import java.util.Comparator;

import net.minecraft.item.Item;
import java.util.HashMap;
import java.util.Map;
import net.minecraft.item.ItemStack;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.event.AnvilUpdateEvent;
Expand All @@ -24,14 +28,14 @@ public void onAnvilUpdate(AnvilUpdateEvent event) {
private void handleAnvilAdditions(AnvilUpdateEvent event) {
AnvilRecipeHandler.getRecipes().stream()
.filter(recipe -> recipe.isValid()
&& matches(event.getLeft(), recipe.getLeft())
&& greaterThanOrEqual(event.getRight(), recipe.getRight()))
&& matches(recipe.getLeft(), event.getLeft())
&& greaterThanOrEqual(recipe.getRight(), event.getRight()))
.max(Comparator.comparing(AnvilRecipe::getRightCount))
.ifPresent(recipe -> {
event.setCanceled(false);
event.setCost(recipe.getCost());
event.setMaterialCost(recipe.getRight().getCount());
event.setOutput(recipe.getOutput());
event.setMaterialCost(recipe.getRightStack().getCount());
event.setOutput(getAnvilOutput(recipe, event));
});
}

Expand All @@ -45,29 +49,48 @@ private void handleAnvilRemovals(AnvilUpdateEvent event) {
public void onAnvilCraft(AnvilRepairEvent event) {
AnvilRecipeHandler.getRecipes().stream()
.filter(recipe -> recipe.isValid()
&& matches(event.getItemInput(), recipe.getLeft())
&& greaterThanOrEqual(event.getIngredientInput(), recipe.getRight()))
&& matches(recipe.getLeft(), event.getItemInput())
&& greaterThanOrEqual(recipe.getRight(), event.getIngredientInput()))
.max(Comparator.comparing(AnvilRecipe::getRightCount))
.ifPresent(recipe -> {
if (event.getItemInput().getCount() > recipe.getLeft().getCount()) {
if (event.getItemInput().getCount() > recipe.getLeftStack().getCount()) {
ItemStack itemStack = event.getItemInput().copy();
itemStack.shrink(recipe.getLeft().getCount());
itemStack.shrink(recipe.getLeftStack().getCount());
if (!event.getEntityPlayer().inventory.addItemStackToInventory(itemStack)) {
event.getEntityPlayer().dropItem(itemStack, true, false);
}
}
});
}

private boolean matches(ItemStack stack1, ItemStack stack2) {
Item item1 = stack1.getItem();
return item1.equals(stack2.getItem())
&& (item1.isDamageable() || stack1.getMetadata() == stack2.getMetadata())
&& stack1.hasTagCompound() == stack2.hasTagCompound()
&& (stack1.getTagCompound() == null || stack1.getTagCompound().equals(stack2.getTagCompound()));
private boolean matches(IIngredient iItemStack, ItemStack itemStack) {
return iItemStack.matches(InputHelper.toIItemStack(itemStack));

// Item item1 = stack1.getItem();
// return item1.equals(stack2.getItem())
// && (item1.isDamageable() || stack1.getMetadata() == stack2.getMetadata())
// && stack1.hasTagCompound() == stack2.hasTagCompound()
// && (stack1.getTagCompound() == null || stack1.getTagCompound().equals(stack2.getTagCompound()));
}

private boolean greaterThanOrEqual(ItemStack stack1, ItemStack stack2) {
return matches(stack1, stack2) && stack1.getCount() >= stack2.getCount();
private boolean greaterThanOrEqual(IIngredient iItemStack, ItemStack itemStack) {
return matches(iItemStack, itemStack) && iItemStack.getAmount() >= itemStack.getCount();
}

private ItemStack getAnvilOutput(AnvilRecipe recipe, AnvilUpdateEvent event) {
if (recipe.getFunction() != null) {
Map<String, IItemStack> inputs = new HashMap<String, IItemStack>() {{
put("left", InputHelper.toIItemStack(event.getLeft()));
put("right", InputHelper.toIItemStack(event.getRight()));
}};
IItemStack out = null;
try {
out = recipe.getFunction().process(recipe.getOutput(), inputs, null);
} catch(Exception exception) {
CraftTweakerAPI.logError("Could not execute RecipeFunction: ", exception);
}
return InputHelper.toStack(out);
}
return InputHelper.toStack(recipe.getOutput());
}
}
Original file line number Diff line number Diff line change
@@ -1,36 +1,58 @@
package rocks.gameonthe.rockytweaks.crafttweaker.anvil;

import com.blamejared.mtlib.helpers.InputHelper;
import crafttweaker.api.item.IIngredient;
import crafttweaker.api.item.IItemStack;
import crafttweaker.api.recipes.IRecipeFunction;
import net.minecraft.item.ItemStack;

public class AnvilRecipe {

private ItemStack left;
private ItemStack right;
private ItemStack output;
private IIngredient left;
private IIngredient right;
private IItemStack output;
private IRecipeFunction function;
private int cost;
private boolean valid = false;

public AnvilRecipe(ItemStack left, ItemStack right, ItemStack output, int cost) {
public AnvilRecipe(IIngredient left, IIngredient right, IItemStack output, int cost, IRecipeFunction function) {
this.left = left;
this.right = right;
this.output = output;
this.cost = cost;
this.function = function;
}

public ItemStack getLeft() {
return left.copy();
public IIngredient getLeft() {
return left;
}

public ItemStack getRight() {
return right.copy();
public ItemStack getLeftStack() {
return InputHelper.toStack(left.getItems().get(0));
}

public IIngredient getRight() {
return right;
}

public ItemStack getRightStack() {
return InputHelper.toStack(right.getItems().get(0));
}

public int getRightCount() {
return right.getCount();
return right.getAmount();
}

public IItemStack getOutput() {
return output;
}

public ItemStack getOutputStack() {
return InputHelper.toStack(output);
}

public ItemStack getOutput() {
return output.copy();
public IRecipeFunction getFunction() {
return function;
}

public int getCost() {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,30 +1,31 @@
package rocks.gameonthe.rockytweaks.crafttweaker.anvil;

import com.blamejared.mtlib.helpers.InputHelper;
import com.google.common.base.Preconditions;
import com.google.common.collect.Lists;
import crafttweaker.api.item.IItemStack;
import java.util.List;
import net.minecraft.item.ItemStack;


public class AnvilRecipeGroup {

private ItemStack left;
private IItemStack left;
private List<AnvilRecipe> recipes = Lists.newArrayList();

public AnvilRecipeGroup(ItemStack left, List<ItemStack> right, List<ItemStack> output, int[] cost) {
public AnvilRecipeGroup(IItemStack left, IItemStack[] right, IItemStack[] output, int[] cost) {
Preconditions.checkNotNull(left);
Preconditions.checkNotNull(right);
Preconditions.checkNotNull(output);
Preconditions.checkNotNull(cost);
Preconditions.checkArgument(right.size() == output.size() && right.size() == cost.length);
Preconditions.checkArgument(right.length == output.length && right.length == cost.length);
this.left = left;
for (int i = 0; i < right.size(); i++) {
this.recipes.add(new AnvilRecipe(left, right.get(i), output.get(i), cost[i]));
for (int i = 0; i < right.length; i++) {
// this.recipes.add(new AnvilRecipe(left, right[i], output[i], cost[i]));
}
}

public ItemStack getLeft() {
return left;
return InputHelper.toStack(left);
}

public List<AnvilRecipe> getRecipes() {
Expand Down
Loading

0 comments on commit 8e94918

Please sign in to comment.