This commit is contained in:
raoulvdberge
2019-09-15 16:42:15 +02:00
parent a93cf426ec
commit b2f6cd59c0
31 changed files with 366 additions and 217 deletions

View File

@@ -8,9 +8,11 @@ import com.raoulvdberge.refinedstorage.apiimpl.storage.disk.StorageDiskFactoryIt
import com.raoulvdberge.refinedstorage.item.*;
import com.raoulvdberge.refinedstorage.item.group.MainItemGroup;
import com.raoulvdberge.refinedstorage.network.NetworkHandler;
import com.raoulvdberge.refinedstorage.recipe.UpgradeWithEnchantedBookRecipeSerializer;
import net.minecraft.block.Block;
import net.minecraft.item.Item;
import net.minecraft.item.ItemGroup;
import net.minecraft.item.crafting.IRecipeSerializer;
import net.minecraftforge.event.RegistryEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.common.Mod;
@@ -30,6 +32,7 @@ public final class RS {
public RS() {
FMLJavaModLoadingContext.get().getModEventBus().addListener(this::onCommonSetup);
FMLJavaModLoadingContext.get().getModEventBus().addGenericListener(Item.class, this::onRegisterItems);
FMLJavaModLoadingContext.get().getModEventBus().addGenericListener(IRecipeSerializer.class, this::onRegisterRecipeSerializers);
}
@SubscribeEvent
@@ -40,6 +43,11 @@ public final class RS {
API.instance().getStorageDiskRegistry().add(StorageDiskFactoryFluid.ID, new StorageDiskFactoryFluid());
}
@SubscribeEvent
public void onRegisterRecipeSerializers(RegistryEvent.Register<IRecipeSerializer<?>> e) {
e.getRegistry().register(new UpgradeWithEnchantedBookRecipeSerializer().setRegistryName(RS.ID, "upgrade_with_enchanted_book"));
}
@SubscribeEvent
public void onRegisterBlocks(RegistryEvent.Register<Block> e) {
@@ -82,6 +90,10 @@ public final class RS {
}
e.getRegistry().register(new ItemStorageHousing());
for (ItemUpgrade.Type type : ItemUpgrade.Type.values()) {
e.getRegistry().register(new ItemUpgrade(type));
}
}
/* TODO

View File

@@ -97,7 +97,9 @@ public class RSConfig {
public int craftingUpgradeUsage;
public int stackUpgradeUsage;
public int silkTouchUpgradeUsage;
public int fortuneUpgradeUsagePerFortune;
public int fortune1UpgradeUsagePerFortune;
public int fortune2UpgradeUsagePerFortune;
public int fortune3UpgradeUsagePerFortune;
//endregion
//region Readers and Writers
@@ -248,7 +250,9 @@ public class RSConfig {
craftingUpgradeUsage = config.getInt("crafting", UPGRADES, 5, 0, Integer.MAX_VALUE, "The additional energy used per Crafting Upgrade");
stackUpgradeUsage = config.getInt("stack", UPGRADES, 12, 0, Integer.MAX_VALUE, "The additional energy used per Stack Upgrade");
silkTouchUpgradeUsage = config.getInt("silkTouch", UPGRADES, 15, 0, Integer.MAX_VALUE, "The additional energy used by the Silk Touch Upgrade");
fortuneUpgradeUsagePerFortune = config.getInt("fortune", UPGRADES, 10, 0, Integer.MAX_VALUE, "The additional energy used by the Fortune Upgrade, multiplied by the level of the enchantment");
fortune1UpgradeUsagePerFortune = config.getInt("fortune1", UPGRADES, 10, 0, Integer.MAX_VALUE, "The additional energy used by the Fortune 1 Upgrade");
fortune2UpgradeUsagePerFortune = config.getInt("fortune2", UPGRADES, 10, 0, Integer.MAX_VALUE, "The additional energy used by the Fortune 2 Upgrade");
fortune3UpgradeUsagePerFortune = config.getInt("fortune3", UPGRADES, 10, 0, Integer.MAX_VALUE, "The additional energy used by the Fortune 3 Upgrade");
//endregion
//region Readers and Writers

View File

@@ -57,9 +57,27 @@ public final class RSItems {
public static final ItemStorageDisk CREATIVE_STORAGE_DISK = null;
public static final ItemPattern PATTERN = new ItemPattern();
public static final ItemUpgrade UPGRADE = new ItemUpgrade();
public static final ItemFilter FILTER = new ItemFilter();
@ObjectHolder(RS.ID + ":upgrade")
public static final ItemUpgrade UPGRADE = null;
@ObjectHolder(RS.ID + ":speed_upgrade")
public static final ItemUpgrade SPEED_UPGRADE = null;
@ObjectHolder(RS.ID + ":range_upgrade")
public static final ItemUpgrade RANGE_UPGRADE = null;
@ObjectHolder(RS.ID + ":crafting_upgrade")
public static final ItemUpgrade CRAFTING_UPGRADE = null;
@ObjectHolder(RS.ID + ":stack_upgrade")
public static final ItemUpgrade STACK_UPGRADE = null;
@ObjectHolder(RS.ID + ":silk_touch_upgrade")
public static final ItemUpgrade SILK_TOUCH_UPGRADE = null;
@ObjectHolder(RS.ID + ":fortune_1_upgrade")
public static final ItemUpgrade FORTUNE_1_UPGRADE = null;
@ObjectHolder(RS.ID + ":fortune_2_upgrade")
public static final ItemUpgrade FORTUNE_2_UPGRADE = null;
@ObjectHolder(RS.ID + ":fortune_3_upgrade")
public static final ItemUpgrade FORTUNE_3_UPGRADE = null;
@ObjectHolder(RS.ID + ":network_card")
public static final ItemNetworkCard NETWORK_CARD = null;

View File

@@ -238,7 +238,7 @@ public class NetworkNodeConstructor extends NetworkNode implements IComparable,
}*/
}
}
} else if (upgrades.hasUpgrade(ItemUpgrade.TYPE_CRAFTING)) {
} else if (upgrades.hasUpgrade(ItemUpgrade.Type.CRAFTING)) {
ItemStack craft = itemFilters.getStackInSlot(0);
network.getCraftingManager().request(this, craft, 1);
@@ -250,7 +250,7 @@ public class NetworkNodeConstructor extends NetworkNode implements IComparable,
if (took != null) {
DefaultDispenseItemBehavior.doDispense(world, took, 6, getDirection(), new Position(getDispensePositionX(), getDispensePositionY(), getDispensePositionZ()));
} else if (upgrades.hasUpgrade(ItemUpgrade.TYPE_CRAFTING)) {
} else if (upgrades.hasUpgrade(ItemUpgrade.Type.CRAFTING)) {
ItemStack craft = itemFilters.getStackInSlot(0);
network.getCraftingManager().request(this, craft, 1);

View File

@@ -236,7 +236,7 @@ public class NetworkNodeCrafter extends NetworkNode implements ICraftingPatternC
@Override
public int getUpdateInterval() {
switch (upgrades.getUpgradeCount(ItemUpgrade.TYPE_SPEED)) {
switch (upgrades.getUpgradeCount(ItemUpgrade.Type.SPEED)) {
case 0:
return 10;
case 1:
@@ -254,7 +254,7 @@ public class NetworkNodeCrafter extends NetworkNode implements ICraftingPatternC
@Override
public int getMaximumSuccessfulCraftingUpdates() {
switch (upgrades.getUpgradeCount(ItemUpgrade.TYPE_SPEED)) {
switch (upgrades.getUpgradeCount(ItemUpgrade.Type.SPEED)) {
case 0:
return 1;
case 1:

View File

@@ -88,7 +88,7 @@ public class NetworkNodeExporter extends NetworkNode implements IComparable, ITy
ItemStack took = network.extractItem(slot, Math.min(slot.getMaxStackSize(), stackSize), compare, Action.SIMULATE);
if (took == null) {
if (upgrades.hasUpgrade(ItemUpgrade.TYPE_CRAFTING)) {
if (upgrades.hasUpgrade(ItemUpgrade.Type.CRAFTING)) {
network.getCraftingManager().request(new SlottedCraftingRequest(this, filterSlot), slot, stackSize);
}
} else if (ItemHandlerHelper.insertItem(handler, took, true).isEmpty()) {
@@ -141,7 +141,7 @@ public class NetworkNodeExporter extends NetworkNode implements IComparable, ITy
handler.fill(took, IFluidHandler.FluidAction.EXECUTE);
}
}
} else if (upgrades.hasUpgrade(ItemUpgrade.TYPE_CRAFTING)) {
} else if (upgrades.hasUpgrade(ItemUpgrade.Type.CRAFTING)) {
network.getCraftingManager().request(this, stack, toExtract);
}
}

View File

@@ -138,7 +138,7 @@ public class NetworkNodeFluidInterface extends NetworkNode {
// That means we still have to autocraft 2 fluids.
delta -= result == null ? 0 : result.getAmount();
if (delta > 0 && upgrades.hasUpgrade(ItemUpgrade.TYPE_CRAFTING)) {
if (delta > 0 && upgrades.hasUpgrade(ItemUpgrade.Type.CRAFTING)) {
network.getCraftingManager().request(this, wanted, delta);
}
} else if (delta < 0) {

View File

@@ -118,7 +118,7 @@ public class NetworkNodeInterface extends NetworkNode implements IComparable {
// That means we still have to autocraft 2 items.
delta -= result == null ? 0 : result.getCount();
if (delta > 0 && upgrades.hasUpgrade(ItemUpgrade.TYPE_CRAFTING)) {
if (delta > 0 && upgrades.hasUpgrade(ItemUpgrade.Type.CRAFTING)) {
network.getCraftingManager().request(new SlottedCraftingRequest(this, i), wanted, delta);
}
} else if (delta < 0) {

View File

@@ -52,7 +52,7 @@ public class NetworkNodeWirelessTransmitter extends NetworkNode implements IWire
@Override
public int getRange() {
return RS.INSTANCE.config.wirelessTransmitterBaseRange + (upgrades.getUpgradeCount(ItemUpgrade.TYPE_RANGE) * RS.INSTANCE.config.wirelessTransmitterRangePerUpgrade);
return RS.INSTANCE.config.wirelessTransmitterBaseRange + (upgrades.getUpgradeCount(ItemUpgrade.Type.RANGE) * RS.INSTANCE.config.wirelessTransmitterRangePerUpgrade);
}
@Override

View File

@@ -1,17 +1,19 @@
package com.raoulvdberge.refinedstorage.inventory.item;
import com.raoulvdberge.refinedstorage.inventory.item.validator.ItemValidatorBasic;
import com.raoulvdberge.refinedstorage.inventory.item.validator.ItemValidatorUpgrade;
import com.raoulvdberge.refinedstorage.item.ItemUpgrade;
import net.minecraft.item.ItemStack;
import javax.annotation.Nullable;
import java.util.function.Consumer;
public class ItemHandlerUpgrade extends ItemHandlerBase {
public ItemHandlerUpgrade(int size, @Nullable Consumer<Integer> listener, ItemUpgrade... supportedUpgrades) {
public ItemHandlerUpgrade(int size, @Nullable Consumer<Integer> listener, ItemUpgrade.Type... supportedUpgrades) {
super(size, listener, new ItemValidatorBasic[supportedUpgrades.length]);
for (int i = 0; i < supportedUpgrades.length; ++i) {
this.validators[i] = new ItemValidatorBasic(supportedUpgrades[i]);
this.validators[i] = new ItemValidatorUpgrade(supportedUpgrades[i]);
}
}
@@ -21,8 +23,9 @@ public class ItemHandlerUpgrade extends ItemHandlerBase {
public int getSpeed(int speed, int speedIncrease) {
for (int i = 0; i < getSlots(); ++i) {
/*TODO if (!getStackInSlot(i).isEmpty() && getStackInSlot(i).getItemDamage() == ItemUpgrade.TYPE_SPEED) {*/
if (false) {
ItemStack slot = getStackInSlot(i);
if (slot.getItem() instanceof ItemUpgrade && ((ItemUpgrade) slot.getItem()).getType() == ItemUpgrade.Type.SPEED) {
speed -= speedIncrease;
}
}
@@ -30,16 +33,25 @@ public class ItemHandlerUpgrade extends ItemHandlerBase {
return speed;
}
public boolean hasUpgrade(int type) {
return getUpgradeCount(type) > 0;
public boolean hasUpgrade(ItemUpgrade.Type type) {
for (int i = 0; i < getSlots(); ++i) {
ItemStack slot = getStackInSlot(i);
if (slot.getItem() instanceof ItemUpgrade && ((ItemUpgrade) slot.getItem()).getType() == type) {
return true;
}
}
return false;
}
public int getUpgradeCount(int type) {
public int getUpgradeCount(ItemUpgrade.Type type) {
int upgrades = 0;
for (int i = 0; i < getSlots(); ++i) {
/*TODO if (!getStackInSlot(i).isEmpty() && getStackInSlot(i).getItemDamage() == type) {*/
if (false) {
ItemStack slot = getStackInSlot(i);
if (slot.getItem() instanceof ItemUpgrade && ((ItemUpgrade) slot.getItem()).getType() == type) {
upgrades++;
}
}
@@ -51,7 +63,11 @@ public class ItemHandlerUpgrade extends ItemHandlerBase {
int usage = 0;
for (int i = 0; i < getSlots(); ++i) {
// TODO usage += ItemUpgrade.getEnergyUsage(getStackInSlot(i));
ItemStack slot = getStackInSlot(i);
if (slot.getItem() instanceof ItemUpgrade) {
usage += ((ItemUpgrade) slot.getItem()).getType().getEnergyUsage();
}
}
return usage;
@@ -61,9 +77,10 @@ public class ItemHandlerUpgrade extends ItemHandlerBase {
int maxFortune = 0;
for (int i = 0; i < getSlots(); ++i) {
if (!getStackInSlot(i).isEmpty()) {
// TODO int fortune = ItemUpgrade.getFortuneLevel(getStackInSlot(i));
int fortune = 0;
ItemStack slot = getStackInSlot(i);
if (slot.getItem() instanceof ItemUpgrade) {
int fortune = ((ItemUpgrade) slot.getItem()).getType().getFortuneLevel();
if (fortune > maxFortune) {
maxFortune = fortune;
@@ -75,7 +92,7 @@ public class ItemHandlerUpgrade extends ItemHandlerBase {
}
public int getItemInteractCount() {
return hasUpgrade(ItemUpgrade.TYPE_STACK) ? 64 : 1;
return hasUpgrade(ItemUpgrade.Type.STACK) ? 64 : 1;
}
@Override

View File

@@ -0,0 +1,19 @@
package com.raoulvdberge.refinedstorage.inventory.item.validator;
import com.raoulvdberge.refinedstorage.item.ItemUpgrade;
import net.minecraft.item.ItemStack;
import java.util.function.Predicate;
public class ItemValidatorUpgrade implements Predicate<ItemStack> {
private ItemUpgrade.Type type;
public ItemValidatorUpgrade(ItemUpgrade.Type type) {
this.type = type;
}
@Override
public boolean test(ItemStack stack) {
return stack.getItem() instanceof ItemUpgrade && ((ItemUpgrade) stack.getItem()).getType() == type;
}
}

View File

@@ -1,108 +1,112 @@
package com.raoulvdberge.refinedstorage.item;
import com.raoulvdberge.refinedstorage.RS;
import com.raoulvdberge.refinedstorage.item.info.ItemInfo;
import net.minecraft.client.util.ITooltipFlag;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.text.ITextComponent;
import net.minecraft.util.text.Style;
import net.minecraft.util.text.TextFormatting;
import net.minecraft.util.text.TranslationTextComponent;
import net.minecraft.world.World;
public class ItemUpgrade extends ItemBase {
public static final int TYPE_RANGE = 1;
public static final int TYPE_SPEED = 2;
public static final int TYPE_CRAFTING = 3;
public static final int TYPE_STACK = 4;
public static final int TYPE_SILK_TOUCH = 6;
public static final int TYPE_FORTUNE_1 = 7;
public static final int TYPE_FORTUNE_2 = 8;
public static final int TYPE_FORTUNE_3 = 9;
import javax.annotation.Nullable;
import java.util.List;
public ItemUpgrade() {
super(new ItemInfo(RS.ID, "upgrade"));
public class ItemUpgrade extends Item {
public enum Type {
NORMAL("normal"),
SPEED("speed"),
RANGE("range"),
CRAFTING("crafting"),
STACK("stack"),
SILK_TOUCH("silk_touch"),
FORTUNE_1("fortune_1"),
FORTUNE_2("fortune_2"),
FORTUNE_3("fortune_3");
//setHasSubtypes(true);
//setMaxDamage(0);
private final String name;
Type(String name) {
this.name = name;
}
public String getName() {
return name;
}
public int getEnergyUsage() {
switch (this) {
case NORMAL:
return 0;
case RANGE:
return RS.INSTANCE.config.rangeUpgradeUsage;
case SPEED:
return RS.INSTANCE.config.speedUpgradeUsage;
case CRAFTING:
return RS.INSTANCE.config.craftingUpgradeUsage;
case STACK:
return RS.INSTANCE.config.stackUpgradeUsage;
case SILK_TOUCH:
return RS.INSTANCE.config.silkTouchUpgradeUsage;
case FORTUNE_1:
return RS.INSTANCE.config.fortune1UpgradeUsagePerFortune;
case FORTUNE_2:
return RS.INSTANCE.config.fortune2UpgradeUsagePerFortune;
case FORTUNE_3:
return RS.INSTANCE.config.fortune3UpgradeUsagePerFortune;
default:
throw new IllegalStateException("What even am I?");
}
}
public int getFortuneLevel() {
switch (this) {
case FORTUNE_1:
return 1;
case FORTUNE_2:
return 2;
case FORTUNE_3:
return 3;
default:
return 0;
}
}
}
/* TODO
@Override
@SideOnly(Side.CLIENT)
public void registerModels(IModelRegistration modelRegistration) {
modelRegistration.setModelVariants(
this,
new ResourceLocation(RS.ID, "upgrade"),
new ResourceLocation(RS.ID, "range_upgrade"),
new ResourceLocation(RS.ID, "speed_upgrade"),
new ResourceLocation(RS.ID, "stack_upgrade"),
new ResourceLocation(RS.ID, "silk_touch_upgrade"),
new ResourceLocation(RS.ID, "fortune_upgrade")
);
modelRegistration.setModel(this, 0, new ModelResourceLocation(RS.ID + ":upgrade", "inventory"));
modelRegistration.setModel(this, TYPE_RANGE, new ModelResourceLocation(RS.ID + ":range_upgrade", "inventory"));
modelRegistration.setModel(this, TYPE_SPEED, new ModelResourceLocation(RS.ID + ":speed_upgrade", "inventory"));
modelRegistration.setModel(this, TYPE_CRAFTING, new ModelResourceLocation(RS.ID + ":crafting_upgrade", "inventory"));
modelRegistration.setModel(this, TYPE_STACK, new ModelResourceLocation(RS.ID + ":stack_upgrade", "inventory"));
modelRegistration.setModel(this, TYPE_SILK_TOUCH, new ModelResourceLocation(RS.ID + ":silk_touch_upgrade", "inventory"));
modelRegistration.setModel(this, TYPE_FORTUNE_1, new ModelResourceLocation(RS.ID + ":fortune_upgrade", "inventory"));
modelRegistration.setModel(this, TYPE_FORTUNE_2, new ModelResourceLocation(RS.ID + ":fortune_upgrade", "inventory"));
modelRegistration.setModel(this, TYPE_FORTUNE_3, new ModelResourceLocation(RS.ID + ":fortune_upgrade", "inventory"));
private final Type type;
public ItemUpgrade(Type type) {
super(new Item.Properties().group(RS.MAIN_GROUP));
this.type = type;
this.setRegistryName(RS.ID, type == Type.NORMAL ? "upgrade" : type.getName() + "_upgrade");
}
@Override
public void addInformation(ItemStack stack, @Nullable World world, List<ITextComponent> tooltip, ITooltipFlag flag) {
super.addInformation(stack, world, tooltip, flag);
if (type.getFortuneLevel() > 0) {
tooltip.add(
new TranslationTextComponent("enchantment.minecraft.fortune")
.appendText(" ")
.appendSibling(new TranslationTextComponent("enchantment.level." + type.getFortuneLevel()))
.setStyle(new Style().setColor(TextFormatting.GRAY))
);
}
}
@Override
public boolean hasEffect(ItemStack stack) {
return stack.getMetadata() == TYPE_SILK_TOUCH || getFortuneLevel(stack) > 0;
return type == Type.SILK_TOUCH ||
type == Type.FORTUNE_1 ||
type == Type.FORTUNE_2 ||
type == Type.FORTUNE_3;
}
@Override
public void addInformation(ItemStack stack, @Nullable World world, List<String> tooltip, ITooltipFlag flag) {
super.addInformation(stack, world, tooltip, flag);
if (getFortuneLevel(stack) > 0) {
tooltip.add(I18n.format("enchantment.lootBonusDigger") + " " + I18n.format("enchantment.level." + getFortuneLevel(stack)));
}
public Type getType() {
return type;
}
@Override
public void getSubItems(CreativeTabs tab, NonNullList<ItemStack> items) {
if (!isInCreativeTab(tab)) {
return;
}
for (int i = 0; i <= 9; ++i) {
if (i != 5) { // Removal of interdimensional upgrade
items.add(new ItemStack(this, 1, i));
}
}
}
public static int getFortuneLevel(@Nullable ItemStack stack) {
if (stack != null) {
if (stack.getMetadata() == TYPE_FORTUNE_1) {
return 1;
} else if (stack.getMetadata() == TYPE_FORTUNE_2) {
return 2;
} else if (stack.getMetadata() == TYPE_FORTUNE_3) {
return 3;
}
}
return 0;
}
public static int getEnergyUsage(ItemStack stack) {
switch (stack.getItemDamage()) {
case TYPE_RANGE:
return RS.INSTANCE.config.rangeUpgradeUsage;
case TYPE_SPEED:
return RS.INSTANCE.config.speedUpgradeUsage;
case TYPE_CRAFTING:
return RS.INSTANCE.config.craftingUpgradeUsage;
case TYPE_STACK:
return RS.INSTANCE.config.stackUpgradeUsage;
case TYPE_SILK_TOUCH:
return RS.INSTANCE.config.silkTouchUpgradeUsage;
case TYPE_FORTUNE_1:
case TYPE_FORTUNE_2:
case TYPE_FORTUNE_3:
return RS.INSTANCE.config.fortuneUpgradeUsagePerFortune * getFortuneLevel(stack);
default:
return 0;
}
}*/
}

View File

@@ -90,10 +90,6 @@ public class ProxyCommon {
public void registerRecipes(RegistryEvent.Register<IRecipe> e) {
e.getRegistry().register(new RecipeCover().setRegistryName(new ResourceLocation(RS.ID, "cover")));
e.getRegistry().register(new RecipeHollowCover().setRegistryName(new ResourceLocation(RS.ID, "hollow_cover")));
e.getRegistry().register(new RecipeUpgradeWithEnchantedBook("fortune", 1, ItemUpgrade.TYPE_FORTUNE_1).setRegistryName(new ResourceLocation(RS.ID, "fortune_1_upgrade")));
e.getRegistry().register(new RecipeUpgradeWithEnchantedBook("fortune", 2, ItemUpgrade.TYPE_FORTUNE_2).setRegistryName(new ResourceLocation(RS.ID, "fortune_2_upgrade")));
e.getRegistry().register(new RecipeUpgradeWithEnchantedBook("fortune", 3, ItemUpgrade.TYPE_FORTUNE_3).setRegistryName(new ResourceLocation(RS.ID, "fortune_3_upgrade")));
e.getRegistry().register(new RecipeUpgradeWithEnchantedBook("silk_touch", 1, ItemUpgrade.TYPE_SILK_TOUCH).setRegistryName(new ResourceLocation(RS.ID, "silk_touch_upgrade")));
}
@SubscribeEvent

View File

@@ -1,36 +1,29 @@
package com.raoulvdberge.refinedstorage.recipe;
/*
TODO
import com.raoulvdberge.refinedstorage.RS;
import com.raoulvdberge.refinedstorage.RSItems;
import net.minecraft.block.Blocks;
import net.minecraft.enchantment.Enchantment;
import net.minecraft.enchantment.EnchantmentData;
import net.minecraft.init.Blocks;
import net.minecraft.inventory.InventoryCrafting;
import net.minecraft.inventory.CraftingInventory;
import net.minecraft.item.EnchantedBookItem;
import net.minecraft.item.ItemEnchantedBook;
import net.minecraft.item.ItemStack;
import net.minecraft.item.crafting.Ingredient;
import net.minecraft.item.crafting.ShapedRecipe;
import net.minecraft.item.crafting.ShapedRecipes;
import net.minecraft.nbt.CompoundNBT;
import net.minecraft.nbt.ListNBT;
import net.minecraft.util.NonNullList;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.registry.Registry;
import net.minecraft.world.World;
import net.minecraftforge.registries.ForgeRegistries;
// MC JSON recipes don't like comparing to NBT, that's why we need a custom recipe class.
// We need to compare to NBT for the enchanted book.
public class RecipeUpgradeWithEnchantedBook extends ShapedRecipe {
public class UpgradeWithEnchantedBookRecipe extends ShapedRecipe {
private EnchantmentData enchant;
private ItemStack result;
public RecipeUpgradeWithEnchantedBook(String enchantmentId, int enchantmentLevel, int upgradeId) {
super(RS.ID, 3, 3, NonNullList.from(Ingredient.EMPTY,
public UpgradeWithEnchantedBookRecipe(ResourceLocation recipeId, Enchantment enchantment, int enchantmentLevel, ItemStack result) {
super(recipeId, "", 3, 3, NonNullList.from(Ingredient.EMPTY,
Ingredient.fromStacks(new ItemStack(RSItems.QUARTZ_ENRICHED_IRON)),
Ingredient.fromStacks(EnchantedBookItem.getEnchantedItemStack(new EnchantmentData(Registry.ENCHANTMENT.getOrDefault(new ResourceLocation("minecraft", enchantmentId)), enchantmentLevel))),
Ingredient.fromStacks(EnchantedBookItem.getEnchantedItemStack(new EnchantmentData(enchantment, enchantmentLevel))),
Ingredient.fromStacks(new ItemStack(RSItems.QUARTZ_ENRICHED_IRON)),
Ingredient.fromStacks(new ItemStack(Blocks.BOOKSHELF)),
Ingredient.fromStacks(new ItemStack(RSItems.UPGRADE)),
@@ -38,21 +31,30 @@ public class RecipeUpgradeWithEnchantedBook extends ShapedRecipe {
Ingredient.fromStacks(new ItemStack(RSItems.QUARTZ_ENRICHED_IRON)),
Ingredient.fromStacks(new ItemStack(RSItems.QUARTZ_ENRICHED_IRON)),
Ingredient.fromStacks(new ItemStack(RSItems.QUARTZ_ENRICHED_IRON))
), new ItemStack(RSItems.UPGRADE, 1));
), result);
this.enchant = new EnchantmentData(Enchantment.getEnchantmentByLocation(enchantmentId), enchantmentLevel);
this.enchant = new EnchantmentData(enchantment, enchantmentLevel);
this.result = result;
}
public EnchantmentData getEnchant() {
return enchant;
}
public ItemStack getResult() {
return result;
}
@Override
public boolean matches(InventoryCrafting inv, World world) {
public boolean matches(CraftingInventory inv, World world) {
if (super.matches(inv, world)) {
ListNBT enchantments = ItemEnchantedBook.getEnchantments(inv.getStackInSlot(1));
ListNBT enchantments = EnchantedBookItem.getEnchantments(inv.getStackInSlot(1));
for (int i = 0; i < enchantments.size(); ++i) {
CompoundNBT enchantmentNbt = enchantments.getCompound(i);
// @Volatile: NBT tags from ItemEnchantedBook
if (Enchantment.getEnchantmentByID(enchantmentNbt.getShort("id")) == enchant.enchantment && enchantmentNbt.getShort("lvl") == enchant.enchantmentLevel) {
if (ForgeRegistries.ENCHANTMENTS.getValue(new ResourceLocation(enchantmentNbt.getString("id"))) == enchant.enchantment && enchantmentNbt.getShort("lvl") == enchant.enchantmentLevel) {
return true;
}
}
@@ -61,4 +63,3 @@ public class RecipeUpgradeWithEnchantedBook extends ShapedRecipe {
return false;
}
}
*/

View File

@@ -0,0 +1,41 @@
package com.raoulvdberge.refinedstorage.recipe;
import com.google.gson.JsonObject;
import com.mojang.realmsclient.util.JsonUtils;
import net.minecraft.enchantment.Enchantment;
import net.minecraft.item.ItemStack;
import net.minecraft.item.crafting.IRecipeSerializer;
import net.minecraft.network.PacketBuffer;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.registries.ForgeRegistries;
import net.minecraftforge.registries.ForgeRegistryEntry;
import javax.annotation.Nullable;
public class UpgradeWithEnchantedBookRecipeSerializer extends ForgeRegistryEntry<IRecipeSerializer<?>> implements IRecipeSerializer<UpgradeWithEnchantedBookRecipe> {
@Override
public UpgradeWithEnchantedBookRecipe read(ResourceLocation recipeId, JsonObject json) {
ItemStack result = new ItemStack(ForgeRegistries.ITEMS.getValue(new ResourceLocation(json.getAsJsonPrimitive("result").getAsString())));
Enchantment enchantment = ForgeRegistries.ENCHANTMENTS.getValue(new ResourceLocation(json.getAsJsonObject("enchantment").getAsJsonPrimitive("id").getAsString()));
int level = JsonUtils.func_225172_a("level", json.getAsJsonObject("enchantment"), 1);
return new UpgradeWithEnchantedBookRecipe(recipeId, enchantment, level, result);
}
@Nullable
@Override
public UpgradeWithEnchantedBookRecipe read(ResourceLocation recipeId, PacketBuffer buffer) {
ItemStack result = buffer.readItemStack();
Enchantment enchantment = ForgeRegistries.ENCHANTMENTS.getValue(buffer.readResourceLocation());
int level = buffer.readInt();
return new UpgradeWithEnchantedBookRecipe(recipeId, enchantment, level, result);
}
@Override
public void write(PacketBuffer buffer, UpgradeWithEnchantedBookRecipe recipe) {
buffer.writeItemStack(recipe.getResult());
buffer.writeResourceLocation(recipe.getEnchant().enchantment.getRegistryName());
buffer.writeInt(recipe.getEnchant().enchantmentLevel);
}
}

View File

@@ -256,15 +256,15 @@
"item.refinedstorage.1024k_fluid_storage_part": "1024k Fluid Storage Part",
"item.refinedstorage.4096k_fluid_storage_part": "4096k Fluid Storage Part",
"item.refinedstorage:pattern": "Pattern",
"item.refinedstorage:upgrade.0": "Upgrade",
"item.refinedstorage:upgrade.1": "Range Upgrade",
"item.refinedstorage:upgrade.2": "Speed Upgrade",
"item.refinedstorage:upgrade.3": "Crafting Upgrade",
"item.refinedstorage:upgrade.4": "Stack Upgrade",
"item.refinedstorage:upgrade.6": "Silk Touch Upgrade",
"item.refinedstorage:upgrade.7": "Fortune Upgrade",
"item.refinedstorage:upgrade.8": "Fortune Upgrade",
"item.refinedstorage:upgrade.9": "Fortune Upgrade",
"item.refinedstorage.upgrade": "Upgrade",
"item.refinedstorage.range_upgrade": "Range Upgrade",
"item.refinedstorage.speed_upgrade": "Speed Upgrade",
"item.refinedstorage.crafting_upgrade": "Crafting Upgrade",
"item.refinedstorage.stack_upgrade": "Stack Upgrade",
"item.refinedstorage.silk_touch_upgrade": "Silk Touch Upgrade",
"item.refinedstorage.fortune_1_upgrade": "Fortune Upgrade",
"item.refinedstorage.fortune_2_upgrade": "Fortune Upgrade",
"item.refinedstorage.fortune_3_upgrade": "Fortune Upgrade",
"item.refinedstorage.storage_housing": "Storage Housing",
"item.refinedstorage:filter": "Filter",
"item.refinedstorage.network_card": "Network Card",

View File

@@ -0,0 +1,6 @@
{
"parent": "item/generated",
"textures": {
"layer0": "refinedstorage:items/fortune_upgrade"
}
}

View File

@@ -0,0 +1,6 @@
{
"parent": "item/generated",
"textures": {
"layer0": "refinedstorage:items/fortune_upgrade"
}
}

View File

@@ -1,28 +0,0 @@
{
"type": "forge:ore_shaped",
"pattern": [
"EOE",
"CUC",
"EEE"
],
"key": {
"E": {
"item": "refinedstorage:quartz_enriched_iron"
},
"C": {
"type": "forge:ore_dict",
"ore": "workbench"
},
"O": {
"item": "#construction_core"
},
"U": {
"item": "refinedstorage:upgrade",
"data": 0
}
},
"result": {
"item": "refinedstorage:upgrade",
"data": 3
}
}

View File

@@ -1,25 +0,0 @@
{
"type": "forge:ore_shaped",
"pattern": [
"EPE",
"PUP",
"EEE"
],
"key": {
"E": {
"item": "refinedstorage:quartz_enriched_iron"
},
"P": {
"type": "forge:ore_dict",
"ore": "enderpearl"
},
"U": {
"item": "refinedstorage:upgrade",
"data": 0
}
},
"result": {
"item": "refinedstorage:upgrade",
"data": 1
}
}

View File

@@ -0,0 +1,25 @@
{
"type": "minecraft:crafting_shaped",
"pattern": [
"EOE",
"CUC",
"EEE"
],
"key": {
"E": {
"item": "refinedstorage:quartz_enriched_iron"
},
"C": {
"tag": "refinedstorage:crafting_tables"
},
"O": {
"item": "refinedstorage:construction_core"
},
"U": {
"item": "refinedstorage:upgrade"
}
},
"result": {
"item": "refinedstorage:crafting_upgrade"
}
}

View File

@@ -0,0 +1,8 @@
{
"type": "refinedstorage:upgrade_with_enchanted_book",
"enchantment": {
"level": 1,
"id": "minecraft:fortune"
},
"result": "refinedstorage:fortune_1_upgrade"
}

View File

@@ -0,0 +1,8 @@
{
"type": "refinedstorage:upgrade_with_enchanted_book",
"enchantment": {
"level": 2,
"id": "minecraft:fortune"
},
"result": "refinedstorage:fortune_2_upgrade"
}

View File

@@ -0,0 +1,8 @@
{
"type": "refinedstorage:upgrade_with_enchanted_book",
"enchantment": {
"level": 3,
"id": "minecraft:fortune"
},
"result": "refinedstorage:fortune_3_upgrade"
}

View File

@@ -0,0 +1,22 @@
{
"type": "minecraft:crafting_shaped",
"pattern": [
"EPE",
"PUP",
"EEE"
],
"key": {
"E": {
"item": "refinedstorage:quartz_enriched_iron"
},
"P": {
"tag": "forge:ender_pearls"
},
"U": {
"item": "refinedstorage:upgrade"
}
},
"result": {
"item": "refinedstorage:range_upgrade"
}
}

View File

@@ -0,0 +1,7 @@
{
"type": "refinedstorage:upgrade_with_enchanted_book",
"enchantment": {
"id": "minecraft:silk_touch"
},
"result": "refinedstorage:silk_touch_upgrade"
}

View File

@@ -13,12 +13,10 @@
"item": "minecraft:sugar"
},
"U": {
"item": "refinedstorage:upgrade",
"data": 0
"item": "refinedstorage:upgrade"
}
},
"result": {
"item": "refinedstorage:upgrade",
"data": 2
"item": "refinedstorage:speed_upgrade"
}
}

View File

@@ -10,12 +10,10 @@
"item": "minecraft:sugar"
},
"S": {
"item": "refinedstorage:upgrade",
"data": 2
"item": "refinedstorage:speed_upgrade"
}
},
"result": {
"item": "refinedstorage:upgrade",
"data": 4
"item": "refinedstorage:stack_upgrade"
}
}

View File

@@ -10,15 +10,13 @@
"item": "refinedstorage:quartz_enriched_iron"
},
"G": {
"type": "forge:ore_dict",
"ore": "blockGlass"
"tag": "forge:glass"
},
"P": {
"item": "#improved_processor"
"item": "refinedstorage:improved_processor"
}
},
"result": {
"item": "refinedstorage:upgrade",
"data": 0
"item": "refinedstorage:upgrade"
}
}

View File

@@ -0,0 +1,6 @@
{
"replace": false,
"values": [
"minecraft:crafting_table"
]
}