Compare commits

..

3 commits

Author SHA1 Message Date
Flanks255
20a5dc1712 Magical seeds oh my... 2022-01-09 11:58:55 -06:00
Flanks255
2707b69d7a Farmer goes brrrr 2022-01-09 11:01:49 -06:00
Flanks255
1a3f223a4b fixing coal generator production to 20rf/t.
Cleaning up the furnace tile a bit.
2022-01-09 10:18:45 -06:00
24 changed files with 199 additions and 232 deletions

View file

@ -844,13 +844,13 @@ a63b57c27d8548ddd13d64d18b098d4f5c127a30 data/actuallyadditions/recipes/restonia
85d2537a973d520c9eaaf2f15109c265faa2df3a data/actuallyadditions/recipes/rice_slime_potion.json 85d2537a973d520c9eaaf2f15109c265faa2df3a data/actuallyadditions/recipes/rice_slime_potion.json
d4ca5d77d16ff6fdfc60e665694fdd97bce25463 data/actuallyadditions/recipes/shock_suppressor.json d4ca5d77d16ff6fdfc60e665694fdd97bce25463 data/actuallyadditions/recipes/shock_suppressor.json
655fab699bb97ec252deb61d91fbef6f4738fe1c data/actuallyadditions/recipes/single_battery.json 655fab699bb97ec252deb61d91fbef6f4738fe1c data/actuallyadditions/recipes/single_battery.json
cc4cd7379a8de3372d2a8310ea576bf5ca08c20e data/actuallyadditions/recipes/solid_fuel/charcoal-block.json dcf0bf28f7be72a9d65b7d34626d1a211c97365a data/actuallyadditions/recipes/solid_fuel/charcoal-block.json
8cb9b0e94a5de6e0bb74d808207ddf041d444280 data/actuallyadditions/recipes/solid_fuel/charcoal.json 000ef9362f2202191f74132c3079ec4c1e2bfec8 data/actuallyadditions/recipes/solid_fuel/charcoal.json
1207208a8393f613e537cb4542e1766a837282e4 data/actuallyadditions/recipes/solid_fuel/coal-block.json 64211ff8cd4ae617f3be4bc6d7e9ff1f73c46e7d data/actuallyadditions/recipes/solid_fuel/coal-block.json
3a4c2b0ca2e150ef24edb2defe018f6574cb4827 data/actuallyadditions/recipes/solid_fuel/coal.json 340732fadc7be543ba9ae17f6f1c974022d31de3 data/actuallyadditions/recipes/solid_fuel/coal.json
a7488a05a2fbc4e4017a4b7769f65ff8ce48613a data/actuallyadditions/recipes/solid_fuel/lava.json 2bfd72d945bdffcb4c3daf722c85fcbc66cd5caa data/actuallyadditions/recipes/solid_fuel/lava.json
5bf07f52f8a4b7734a800dc64e5759caf48257b9 data/actuallyadditions/recipes/solid_fuel/stick.json 7cea1293846d740cd9470ee0e86e12004ce36bd4 data/actuallyadditions/recipes/solid_fuel/stick.json
1234e59cf88f96ae64032ce6bb0c734dc8870471 data/actuallyadditions/recipes/solid_fuel/tiny-coal.json 652b6e46c68cc83528e47b09a57bef3c91ccbb07 data/actuallyadditions/recipes/solid_fuel/tiny-coal.json
8ebd738f3968564e22ba6841eb821e5064c78588 data/actuallyadditions/recipes/stone_aiot.json 8ebd738f3968564e22ba6841eb821e5064c78588 data/actuallyadditions/recipes/stone_aiot.json
bc7a41d9f36cc43e146e0b727b6f439cc0d29343 data/actuallyadditions/recipes/teleport_staff.json bc7a41d9f36cc43e146e0b727b6f439cc0d29343 data/actuallyadditions/recipes/teleport_staff.json
bdf7dbf563485903e444400d341e56d0bf308481 data/actuallyadditions/recipes/tiny_torch.json bdf7dbf563485903e444400d341e56d0bf308481 data/actuallyadditions/recipes/tiny_torch.json

View file

@ -3,6 +3,6 @@
"item": { "item": {
"item": "actuallyadditions:charcoal_block" "item": "actuallyadditions:charcoal_block"
}, },
"total_energy": 480000, "total_energy": 320000,
"burn_time": 16000 "burn_time": 16000
} }

View file

@ -3,6 +3,6 @@
"item": { "item": {
"item": "minecraft:charcoal" "item": "minecraft:charcoal"
}, },
"total_energy": 48000, "total_energy": 32000,
"burn_time": 1600 "burn_time": 1600
} }

View file

@ -3,6 +3,6 @@
"item": { "item": {
"item": "minecraft:coal_block" "item": "minecraft:coal_block"
}, },
"total_energy": 480000, "total_energy": 320000,
"burn_time": 16000 "burn_time": 16000
} }

View file

@ -3,6 +3,6 @@
"item": { "item": {
"item": "minecraft:coal" "item": "minecraft:coal"
}, },
"total_energy": 48000, "total_energy": 32000,
"burn_time": 1600 "burn_time": 1600
} }

View file

@ -3,6 +3,6 @@
"item": { "item": {
"item": "minecraft:lava_bucket" "item": "minecraft:lava_bucket"
}, },
"total_energy": 600000, "total_energy": 400000,
"burn_time": 20000 "burn_time": 20000
} }

View file

@ -3,6 +3,6 @@
"item": { "item": {
"item": "minecraft:stick" "item": "minecraft:stick"
}, },
"total_energy": 3000, "total_energy": 2000,
"burn_time": 100 "burn_time": 100
} }

View file

@ -3,6 +3,6 @@
"item": { "item": {
"tag": "actuallyadditions:tiny_coals" "tag": "actuallyadditions:tiny_coals"
}, },
"total_energy": 6000, "total_energy": 4000,
"burn_time": 200 "burn_time": 200
} }

View file

@ -16,6 +16,7 @@ import de.ellpeck.actuallyadditions.mod.misc.apiimpl.farmer.*;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World; import net.minecraft.world.World;
import net.minecraft.world.server.ServerWorld;
public interface IFarmerBehavior { public interface IFarmerBehavior {
@ -40,7 +41,7 @@ public interface IFarmerBehavior {
* @param farmer The Farmer doing this action. Can be used to query and extract energy and add items to the slots * @param farmer The Farmer doing this action. Can be used to query and extract energy and add items to the slots
* @return If harvesting was successful * @return If harvesting was successful
*/ */
FarmerResult tryHarvestPlant(World world, BlockPos pos, IFarmer farmer); FarmerResult tryHarvestPlant(ServerWorld world, BlockPos pos, IFarmer farmer);
int getPriority(); int getPriority();

View file

@ -33,13 +33,13 @@ public class SolidFuelGenerator extends RecipeProvider {
@Override @Override
protected void buildShapelessRecipes(@Nonnull Consumer<IFinishedRecipe> consumer) { protected void buildShapelessRecipes(@Nonnull Consumer<IFinishedRecipe> consumer) {
addFuel(consumer, "coal", Items.COAL, 48000, 1600); addFuel(consumer, "coal", Items.COAL, 32000, 1600);
addFuel(consumer, "stick", Items.STICK, 3000, 100); addFuel(consumer, "stick", Items.STICK, 2000, 100);
addFuel(consumer, "tiny-coal", ActuallyTags.Items.TINY_COALS, 6000, 200); addFuel(consumer, "tiny-coal", ActuallyTags.Items.TINY_COALS, 4000, 200);
addFuel(consumer, "charcoal", Items.CHARCOAL, 48000, 1600); addFuel(consumer, "charcoal", Items.CHARCOAL, 32000, 1600);
addFuel(consumer, "coal-block", Items.COAL_BLOCK, 480000, 16000); addFuel(consumer, "coal-block", Items.COAL_BLOCK, 320000, 16000);
addFuel(consumer, "charcoal-block", ActuallyBlocks.CHARCOAL_BLOCK.getItem(), 480000, 16000); addFuel(consumer, "charcoal-block", ActuallyBlocks.CHARCOAL_BLOCK.getItem(), 320000, 16000);
addFuel(consumer, "lava", Items.LAVA_BUCKET, 600000, 20000); addFuel(consumer, "lava", Items.LAVA_BUCKET, 400000, 20000);
} }
private void addFuel(Consumer<IFinishedRecipe> consumer, String name, Item item, int energy, int burnTime) { private void addFuel(Consumer<IFinishedRecipe> consumer, String name, Item item, int energy, int burnTime) {

View file

@ -63,7 +63,6 @@ import net.minecraftforge.registries.ForgeRegistries;
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.Logger;
//@Mod(modid = ActuallyAdditions.MODID, name = ActuallyAdditions.NAME, version = ActuallyAdditions.VERSION, guiFactory = ActuallyAdditions.GUIFACTORY, dependencies = ActuallyAdditions.DEPS)
@Mod(ActuallyAdditions.MODID) @Mod(ActuallyAdditions.MODID)
public class ActuallyAdditions { public class ActuallyAdditions {
@ -76,7 +75,6 @@ public class ActuallyAdditions {
@Deprecated @Deprecated
public static final String GUIFACTORY = "de.ellpeck.actuallyadditions.mod.config.GuiFactory"; public static final String GUIFACTORY = "de.ellpeck.actuallyadditions.mod.config.GuiFactory";
public static final String DEPS = "required:forge@[14.23.5.2836,);before:craftingtweaks;after:fastbench@[1.3.2,)"; public static final String DEPS = "required:forge@[14.23.5.2836,);before:craftingtweaks;after:fastbench@[1.3.2,)";
// public static final boolean DEOBF = (boolean) Launch.blackboard.get("fml.deobfuscatedEnvironment");
public static final ItemGroup GROUP = new ItemGroup(MODID) { public static final ItemGroup GROUP = new ItemGroup(MODID) {
@OnlyIn(Dist.CLIENT) @OnlyIn(Dist.CLIENT)
@ -90,13 +88,6 @@ public class ActuallyAdditions {
public static final DeferredRegister<EntityType<?>> ENTITIES = DeferredRegister.create(ForgeRegistries.ENTITIES, "entities"); public static final DeferredRegister<EntityType<?>> ENTITIES = DeferredRegister.create(ForgeRegistries.ENTITIES, "entities");
public static final RegistryObject<EntityType<EntityWorm>> ENTITY_WORM = ENTITIES.register("worm", () -> EntityType.Builder.of(EntityWorm::new, EntityClassification.CREATURE).build(MODID + ":worm")); public static final RegistryObject<EntityType<EntityWorm>> ENTITY_WORM = ENTITIES.register("worm", () -> EntityType.Builder.of(EntityWorm::new, EntityClassification.CREATURE).build(MODID + ":worm"));
@Deprecated
public static ActuallyAdditions INSTANCE;
// TODO: [port] eval
// static {
// FluidRegistry.enableUniversalBucket();
// }
public static boolean commonCapsLoaded; public static boolean commonCapsLoaded;
public ActuallyAdditions() { public ActuallyAdditions() {

View file

@ -42,6 +42,7 @@ import java.util.Locale;
public class CommonEvents { public class CommonEvents {
//TODO spawner shards are yeeted right?
@SubscribeEvent @SubscribeEvent
public void onBlockBreakEvent(BlockEvent.BreakEvent event) { public void onBlockBreakEvent(BlockEvent.BreakEvent event) {
BlockState state = event.getState(); BlockState state = event.getState();
@ -125,7 +126,7 @@ public class CommonEvents {
} }
} }
//TODO Checking Achievements? //TODO Checking Achievements? yeet?
/*public static void checkAchievements(ItemStack gotten, PlayerEntity player, InitAchievements.Type type){ /*public static void checkAchievements(ItemStack gotten, PlayerEntity player, InitAchievements.Type type){
if(gotten != null && player != null){ if(gotten != null && player != null){
for(TheAchievements ach : TheAchievements.values()){ for(TheAchievements ach : TheAchievements.values()){
@ -138,6 +139,7 @@ public class CommonEvents {
} }
}*/ }*/
//TODO this isnt how this should be done im pretty sure...
@SubscribeEvent @SubscribeEvent
public void onEntityDropEvent(LivingDropsEvent event) { public void onEntityDropEvent(LivingDropsEvent event) {
if (event.getEntityLiving().level != null && !event.getEntityLiving().level.isClientSide && event.getSource().getEntity() instanceof PlayerEntity) { if (event.getEntityLiving().level != null && !event.getEntityLiving().level.isClientSide && event.getSource().getEntity() instanceof PlayerEntity) {
@ -159,6 +161,7 @@ public class CommonEvents {
} }
} }
//TODO im pretty sure this can be done with normal advancements...
@SubscribeEvent @SubscribeEvent
public void onCraftedEvent(PlayerEvent.ItemCraftedEvent event) { public void onCraftedEvent(PlayerEvent.ItemCraftedEvent event) {
//checkAchievements(event.crafting, event.player, InitAchievements.Type.CRAFTING); //checkAchievements(event.crafting, event.player, InitAchievements.Type.CRAFTING);
@ -182,11 +185,13 @@ public class CommonEvents {
} }
} }
//TODO im pretty sure this can be done with normal advancements...
@SubscribeEvent @SubscribeEvent
public void onSmeltedEvent(PlayerEvent.ItemSmeltedEvent event) { public void onSmeltedEvent(PlayerEvent.ItemSmeltedEvent event) {
//checkAchievements(event.smelting, event.player, InitAchievements.Type.SMELTING); //checkAchievements(event.smelting, event.player, InitAchievements.Type.SMELTING);
} }
//TODO im pretty sure this can be done with normal advancements...
@SubscribeEvent @SubscribeEvent
public void onPickupEvent(EntityItemPickupEvent event) { public void onPickupEvent(EntityItemPickupEvent event) {
//checkAchievements(event.getItem().getItem(), event.getEntityPlayer(), InitAchievements.Type.PICK_UP); //checkAchievements(event.getItem().getItem(), event.getEntityPlayer(), InitAchievements.Type.PICK_UP);

View file

@ -66,8 +66,8 @@ public final class ActuallyItems {
public static final RegistryObject<Item> DRILL_CORE = ITEMS.register("drill_core", ItemBase::new); public static final RegistryObject<Item> DRILL_CORE = ITEMS.register("drill_core", ItemBase::new);
public static final RegistryObject<Item> LENS = ITEMS.register("lens", ItemBase::new); public static final RegistryObject<Item> LENS = ITEMS.register("lens", ItemBase::new);
public static final RegistryObject<Item> ENDER_STAR = ITEMS.register("ender_star", ItemBase::new); public static final RegistryObject<Item> ENDER_STAR = ITEMS.register("ender_star", ItemBase::new);
public static final RegistryObject<Item> CRYSTALLIZED_CANOLA_SEED = ITEMS.register("crystallized_canola_seed", ItemBase::new); public static final RegistryObject<Item> CRYSTALLIZED_CANOLA_SEED = ITEMS.register("crystallized_canola_seed", () -> new CanolaSeed(false));
public static final RegistryObject<Item> EMPOWERED_CANOLA_SEED = ITEMS.register("empowered_canola_seed", ItemBase::new); public static final RegistryObject<Item> EMPOWERED_CANOLA_SEED = ITEMS.register("empowered_canola_seed", () -> new CanolaSeed(true));
// SHARDS // SHARDS
public static final RegistryObject<Item> RESTONIA_CRYSTAL_SHARD = ITEMS.register("restonia_crystal_shard", ItemBase::new); public static final RegistryObject<Item> RESTONIA_CRYSTAL_SHARD = ITEMS.register("restonia_crystal_shard", ItemBase::new);

View file

@ -0,0 +1,50 @@
package de.ellpeck.actuallyadditions.mod.items;
import de.ellpeck.actuallyadditions.mod.fluids.InitFluids;
import de.ellpeck.actuallyadditions.mod.items.base.ItemBase;
import net.minecraft.block.Block;
import net.minecraft.block.BlockState;
import net.minecraft.block.FlowingFluidBlock;
import net.minecraft.entity.item.ItemEntity;
import net.minecraft.fluid.Fluid;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.math.BlockPos;
import net.minecraftforge.fluids.IFluidBlock;
public class CanolaSeed extends ItemBase {
public boolean empowered;
public CanolaSeed(boolean empowered) {
this.empowered = empowered;
}
@Override
public boolean isFoil(ItemStack p_77636_1_) {
return empowered;
}
@Override
public boolean onEntityItemUpdate(ItemStack stack, ItemEntity entity) {
if (!entity.level.isClientSide) {
if (stack != null) {
BlockPos pos = entity.blockPosition();
BlockState state = entity.level.getBlockState(pos);
Block block = state.getBlock();
if (block instanceof FlowingFluidBlock && state.getFluidState().isSource()) {
Fluid fluid = ((FlowingFluidBlock) block).getFluid();
if (fluid != null && fluid == (empowered
? InitFluids.CRYSTALIZED_OIL.get()
: InitFluids.REFINED_CANOLA_OIL.get())) {
entity.kill();
entity.level.setBlockAndUpdate(pos, (empowered
? InitFluids.EMPOWERED_OIL.getBlock()
: InitFluids.CRYSTALIZED_OIL.getBlock()).defaultBlockState());
}
}
}
}
return super.onEntityItemUpdate(stack, entity);
}
}

View file

@ -1,114 +0,0 @@
/*
* This file ("ItemMisc.java") is part of the Actually Additions mod for Minecraft.
* It is created and owned by Ellpeck and distributed
* under the Actually Additions License to be found at
* http://ellpeck.de/actaddlicense
* View the source code at https://github.com/Ellpeck/ActuallyAdditions
*
* © 2015-2017 Ellpeck
*/
package de.ellpeck.actuallyadditions.mod.items;
import de.ellpeck.actuallyadditions.mod.items.base.ItemBase;
public class ItemMisc extends ItemBase {
// public static final TheMiscItems[] ALL_MISC_ITEMS = TheMiscItems.values();
//
// public ItemMisc() {
// super(name);
// this.setHasSubtypes(true);
// }
//
// @Override
// public int getMetadata(int damage) {
// return damage;
// }
//
// @Override
// public String getTranslationKey(ItemStack stack) {
// return stack.getItemDamage() >= ALL_MISC_ITEMS.length
// ? StringUtil.BUGGED_ITEM_NAME
// : this.getTranslationKey() + "_" + ALL_MISC_ITEMS[stack.getItemDamage()].name;
// }
//
// @Override
// public IRarity getForgeRarity(ItemStack stack) {
// return stack.getItemDamage() >= ALL_MISC_ITEMS.length
// ? EnumRarity.COMMON
// : ALL_MISC_ITEMS[stack.getItemDamage()].rarity;
// }
//
// @Override
// @OnlyIn(Dist.CLIENT)
// public void getSubItems(CreativeTabs tab, NonNullList<ItemStack> list) {
// if (this.isInCreativeTab(tab)) {
// for (int j = 0; j < ALL_MISC_ITEMS.length; j++) {
// if (j != TheMiscItems.YOUTUBE_ICON.ordinal()) {
// list.add(new ItemStack(this, 1, j));
// }
// }
// }
// }
//
// @Override
// protected void registerRendering() {
// for (int i = 0; i < ALL_MISC_ITEMS.length; i++) {
// String name = this.getRegistryName() + "_" + ALL_MISC_ITEMS[i].name;
// ActuallyAdditions.PROXY.addRenderRegister(new ItemStack(this, 1, i), new ResourceLocation(name), "inventory");
// }
// }
//
// @Override
// public boolean onEntityItemUpdate(ItemEntity entity) {
// if (!entity.world.isRemote) {
// ItemStack stack = entity.getItem();
// if (stack != null) {
// boolean isEmpowered = stack.getItemDamage() == TheMiscItems.EMPOWERED_CANOLA_SEED.ordinal();
// if (stack.getItemDamage() == TheMiscItems.CRYSTALLIZED_CANOLA_SEED.ordinal() || isEmpowered) {
// BlockPos pos = entity.getPosition();
// BlockState state = entity.world.getBlockState(pos);
// Block block = state.getBlock();
//
// if (block instanceof IFluidBlock && block.getMetaFromState(state) == 0) {
// Fluid fluid = ((IFluidBlock) block).getFluid();
// if (fluid != null && fluid == (isEmpowered
// ? InitFluids.fluidCrystalOil
// : InitFluids.fluidRefinedCanolaOil)) {
// entity.setDead();
// entity.world.setBlockState(pos, (isEmpowered
// ? InitFluids.blockEmpoweredOil
// : InitFluids.blockCrystalOil).getDefaultState());
// }
// }
// }
// }
// }
//
// return super.onEntityItemUpdate(entity);
// }
//
// @Override
// public boolean hasEffect(ItemStack stack) {
// return stack.getItemDamage() == TheMiscItems.EMPOWERED_CANOLA_SEED.ordinal();
// }
//
// @Override
// public int getItemBurnTime(ItemStack stack) {
// int k = stack.getMetadata();
//
// if (k == TheMiscItems.TINY_CHAR.ordinal()) {
// return 200;
// }
// if (k == TheMiscItems.TINY_COAL.ordinal()) {
// return 200;
// }
// if (k == TheMiscItems.BIOCOAL.ordinal()) {
// return 800;
// }
//
// return super.getItemBurnTime(stack);
// }
}

View file

@ -19,9 +19,15 @@ import net.minecraft.block.Blocks;
import net.minecraft.item.BlockItem; import net.minecraft.item.BlockItem;
import net.minecraft.item.Item; import net.minecraft.item.Item;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.loot.LootContext;
import net.minecraft.loot.LootParameters;
import net.minecraft.util.NonNullList; import net.minecraft.util.NonNullList;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.vector.Vector3d;
import net.minecraft.world.World; import net.minecraft.world.World;
import net.minecraft.world.server.ServerWorld;
import java.util.List;
public class CactusFarmerBehavior implements IFarmerBehavior { public class CactusFarmerBehavior implements IFarmerBehavior {
@ -49,7 +55,7 @@ public class CactusFarmerBehavior implements IFarmerBehavior {
} }
@Override @Override
public FarmerResult tryHarvestPlant(World world, BlockPos pos, IFarmer farmer) { public FarmerResult tryHarvestPlant(ServerWorld world, BlockPos pos, IFarmer farmer) {
int use = 250; int use = 250;
if (farmer.getEnergy() >= use) { if (farmer.getEnergy() >= use) {
BlockState state = world.getBlockState(pos); BlockState state = world.getBlockState(pos);
@ -61,8 +67,9 @@ public class CactusFarmerBehavior implements IFarmerBehavior {
BlockPos up = pos.above(i); BlockPos up = pos.above(i);
BlockState upState = world.getBlockState(up); BlockState upState = world.getBlockState(up);
if (upState.getBlock() == Blocks.CACTUS) { if (upState.getBlock() == Blocks.CACTUS) {
NonNullList<ItemStack> drops = NonNullList.create(); List<ItemStack> drops = state.getDrops(new LootContext.Builder(world)
//upState.getBlock().getDrops(drops, world, up, upState, 0); .withParameter(LootParameters.ORIGIN, new Vector3d(pos.getX(), pos.getY(), pos.getZ()))
.withParameter(LootParameters.TOOL, ItemStack.EMPTY));
if (!drops.isEmpty()) { if (!drops.isEmpty()) {
if (farmer.canAddToOutput(drops)) { if (farmer.canAddToOutput(drops)) {

View file

@ -16,14 +16,14 @@ import de.ellpeck.actuallyadditions.api.internal.IFarmer;
import de.ellpeck.actuallyadditions.mod.util.StackUtil; import de.ellpeck.actuallyadditions.mod.util.StackUtil;
import net.minecraft.block.*; import net.minecraft.block.*;
import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.BlockItem; import net.minecraft.item.*;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;
import net.minecraft.loot.LootContext; import net.minecraft.loot.LootContext;
import net.minecraft.loot.LootParameters;
import net.minecraft.state.properties.BlockStateProperties; import net.minecraft.state.properties.BlockStateProperties;
import net.minecraft.util.*; import net.minecraft.util.*;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.BlockRayTraceResult;
import net.minecraft.util.math.vector.Vector3d;
import net.minecraft.world.World; import net.minecraft.world.World;
import net.minecraft.world.server.ServerWorld; import net.minecraft.world.server.ServerWorld;
import net.minecraftforge.common.IPlantable; import net.minecraftforge.common.IPlantable;
@ -75,7 +75,7 @@ public class DefaultFarmerBehavior implements IFarmerBehavior {
} }
@Override @Override
public FarmerResult tryHarvestPlant(World world, BlockPos pos, IFarmer farmer) { public FarmerResult tryHarvestPlant(ServerWorld world, BlockPos pos, IFarmer farmer) {
int use = 250; int use = 250;
if (farmer.getEnergy() >= use) { if (farmer.getEnergy() >= use) {
BlockState state = world.getBlockState(pos); BlockState state = world.getBlockState(pos);
@ -86,8 +86,8 @@ public class DefaultFarmerBehavior implements IFarmerBehavior {
return this.doFarmerStuff(state, world, pos, farmer); return this.doFarmerStuff(state, world, pos, farmer);
} }
} }
else if (state.hasProperty(BlockStateProperties.AGE_25)) { else if (state.hasProperty(BlockStateProperties.AGE_7)) {
if (state.getValue(BlockStateProperties.AGE_25) >= 7 && !(block instanceof StemBlock)) { if (state.getValue(BlockStateProperties.AGE_7) >= 7 && !(block instanceof StemBlock)) {
return this.doFarmerStuff(state, world, pos, farmer); return this.doFarmerStuff(state, world, pos, farmer);
} }
} }
@ -95,11 +95,14 @@ public class DefaultFarmerBehavior implements IFarmerBehavior {
return FarmerResult.FAIL; return FarmerResult.FAIL;
} }
private FarmerResult doFarmerStuff(BlockState state, World world, BlockPos pos, IFarmer farmer) { private FarmerResult doFarmerStuff(BlockState state, ServerWorld world, BlockPos pos, IFarmer farmer) {
List<ItemStack> seeds = new ArrayList<>(); List<ItemStack> seeds = new ArrayList<>();
List<ItemStack> other = new ArrayList<>(); List<ItemStack> other = new ArrayList<>();
NonNullList<ItemStack> drops = NonNullList.create(); List<ItemStack> drops = state.getDrops(new LootContext.Builder(world)
//state.getBlock().getDrops(drops, world, pos, state, 0); .withParameter(LootParameters.ORIGIN, new Vector3d(pos.getX(), pos.getY(), pos.getZ()))
.withParameter(LootParameters.TOOL, ItemStack.EMPTY));
if (drops.isEmpty())
return FarmerResult.FAIL;
for (ItemStack stack : drops) { for (ItemStack stack : drops) {
if (this.getPlantableFromStack(stack) != null) { if (this.getPlantableFromStack(stack) != null) {
seeds.add(stack); seeds.add(stack);
@ -172,39 +175,33 @@ public class DefaultFarmerBehavior implements IFarmerBehavior {
public static ActionResultType useHoeAt(World world, BlockPos pos) { public static ActionResultType useHoeAt(World world, BlockPos pos) {
PlayerEntity player = FakePlayerFactory.getMinecraft((ServerWorld) world); PlayerEntity player = FakePlayerFactory.getMinecraft((ServerWorld) world); //TODO we need our own fakeplayer for the mod.
ItemStack itemstack = getHoeStack(); ItemStack itemstack = getHoeStack();
if (!player.mayUseItemAt(pos.relative(Direction.UP), Direction.UP, itemstack)) { if (!player.mayUseItemAt(pos.relative(Direction.UP), Direction.UP, itemstack)) {
return ActionResultType.FAIL; return ActionResultType.FAIL;
} else { } else {
/* int hook = net.minecraftforge.event.ForgeEventFactory.onHoeUse(itemstack, player, world, pos); ItemUseContext dummyContext = new ItemUseContext(world, player, Hand.MAIN_HAND, itemstack, new BlockRayTraceResult(new Vector3d(0.5, 0.5, 0.5), Direction.UP, pos, false));
int hook = net.minecraftforge.event.ForgeEventFactory.onHoeUse(dummyContext);
if (hook != 0) { if (hook != 0) {
return hook > 0 return hook > 0
? ActionResultType.SUCCESS ? ActionResultType.SUCCESS
: ActionResultType.FAIL; : ActionResultType.FAIL;
} }
if (world.isEmptyBlock(pos.above())) { if (world.isEmptyBlock(pos.above())) {
Block block = world.getBlockState(pos).getBlock();
if (block == Blocks.GRASS || block == Blocks.GRASS_PATH) { if (block == Blocks.GRASS || block == Blocks.GRASS_PATH) {
world.setBlockAndUpdate(pos, Blocks.FARMLAND.defaultBlockState()); world.setBlockAndUpdate(pos, Blocks.FARMLAND.defaultBlockState());
return ActionResultType.SUCCESS; return ActionResultType.SUCCESS;
} }
if (block == Blocks.DIRT) { if (Tags.Blocks.DIRT.contains(block)) {
switch (iblockstate.getValue(BlockDirt.VARIANT)) {
case DIRT:
world.setBlockAndUpdate(pos, Blocks.FARMLAND.defaultBlockState()); world.setBlockAndUpdate(pos, Blocks.FARMLAND.defaultBlockState());
return ActionResultType.SUCCESS; return ActionResultType.SUCCESS;
case COARSE_DIRT:
world.setBlockAndUpdate(pos, Blocks.DIRT.defaultBlockState().withProperty(BlockDirt.VARIANT, BlockDirt.DirtType.DIRT));
return ActionResultType.SUCCESS;
default:
} }
} }
}*/
return ActionResultType.PASS; return ActionResultType.PASS;
} }
} }

View file

@ -20,9 +20,15 @@ import net.minecraft.block.Blocks;
import net.minecraft.item.Item; import net.minecraft.item.Item;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.item.Items; import net.minecraft.item.Items;
import net.minecraft.loot.LootContext;
import net.minecraft.loot.LootParameters;
import net.minecraft.util.NonNullList; import net.minecraft.util.NonNullList;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.vector.Vector3d;
import net.minecraft.world.World; import net.minecraft.world.World;
import net.minecraft.world.server.ServerWorld;
import java.util.List;
public class MelonPumpkinFarmerBehavior implements IFarmerBehavior { public class MelonPumpkinFarmerBehavior implements IFarmerBehavior {
@ -51,14 +57,15 @@ public class MelonPumpkinFarmerBehavior implements IFarmerBehavior {
} }
@Override @Override
public FarmerResult tryHarvestPlant(World world, BlockPos pos, IFarmer farmer) { public FarmerResult tryHarvestPlant(ServerWorld world, BlockPos pos, IFarmer farmer) {
int use = 500; int use = 500;
if (farmer.getEnergy() >= use) { if (farmer.getEnergy() >= use) {
BlockState state = world.getBlockState(pos); BlockState state = world.getBlockState(pos);
Block block = state.getBlock(); Block block = state.getBlock();
if (block == Blocks.PUMPKIN || block == Blocks.MELON) { if (block == Blocks.PUMPKIN || block == Blocks.MELON) {
NonNullList<ItemStack> drops = NonNullList.create(); List<ItemStack> drops = state.getDrops(new LootContext.Builder(world)
//block.getDrops(drops, world, pos, state, 0); .withParameter(LootParameters.ORIGIN, new Vector3d(pos.getX(), pos.getY(), pos.getZ()))
.withParameter(LootParameters.TOOL, ItemStack.EMPTY));
if (!drops.isEmpty()) { if (!drops.isEmpty()) {
if (farmer.canAddToOutput(drops)) { if (farmer.canAddToOutput(drops)) {
world.levelEvent(2001, pos, Block.getId(state)); world.levelEvent(2001, pos, Block.getId(state));

View file

@ -19,13 +19,19 @@ import net.minecraft.block.Blocks;
import net.minecraft.block.NetherWartBlock; import net.minecraft.block.NetherWartBlock;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.item.Items; import net.minecraft.item.Items;
import net.minecraft.loot.LootContext;
import net.minecraft.loot.LootParameters;
import net.minecraft.state.properties.BlockStateProperties; import net.minecraft.state.properties.BlockStateProperties;
import net.minecraft.util.Direction; import net.minecraft.util.Direction;
import net.minecraft.util.NonNullList; import net.minecraft.util.NonNullList;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.vector.Vector3d;
import net.minecraft.world.World; import net.minecraft.world.World;
import net.minecraft.world.server.ServerWorld;
import net.minecraftforge.common.IPlantable; import net.minecraftforge.common.IPlantable;
import java.util.List;
public class NetherWartFarmerBehavior implements IFarmerBehavior { public class NetherWartFarmerBehavior implements IFarmerBehavior {
@Override @Override
@ -45,14 +51,15 @@ public class NetherWartFarmerBehavior implements IFarmerBehavior {
} }
@Override @Override
public FarmerResult tryHarvestPlant(World world, BlockPos pos, IFarmer farmer) { public FarmerResult tryHarvestPlant(ServerWorld world, BlockPos pos, IFarmer farmer) {
int use = 500; int use = 500;
if (farmer.getEnergy() >= use) { if (farmer.getEnergy() >= use) {
BlockState state = world.getBlockState(pos); BlockState state = world.getBlockState(pos);
if (state.getBlock() instanceof NetherWartBlock) { if (state.getBlock() instanceof NetherWartBlock) {
if (state.getValue(BlockStateProperties.AGE_3) >= 3) { if (state.getValue(BlockStateProperties.AGE_3) >= 3) {
NonNullList<ItemStack> drops = NonNullList.create(); List<ItemStack> drops = state.getDrops(new LootContext.Builder(world)
//state.getBlock().getDrops(drops, world, pos, state, 0); .withParameter(LootParameters.ORIGIN, new Vector3d(pos.getX(), pos.getY(), pos.getZ()))
.withParameter(LootParameters.TOOL, ItemStack.EMPTY));
if (!drops.isEmpty()) { if (!drops.isEmpty()) {
boolean toInput = farmer.canAddToSeeds(drops); boolean toInput = farmer.canAddToSeeds(drops);
if (toInput || farmer.canAddToOutput(drops)) { if (toInput || farmer.canAddToOutput(drops)) {

View file

@ -19,9 +19,15 @@ import net.minecraft.block.Blocks;
import net.minecraft.block.SugarCaneBlock; import net.minecraft.block.SugarCaneBlock;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.item.Items; import net.minecraft.item.Items;
import net.minecraft.loot.LootContext;
import net.minecraft.loot.LootParameters;
import net.minecraft.util.NonNullList; import net.minecraft.util.NonNullList;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.vector.Vector3d;
import net.minecraft.world.World; import net.minecraft.world.World;
import net.minecraft.world.server.ServerWorld;
import java.util.List;
public class ReedFarmerBehavior implements IFarmerBehavior { public class ReedFarmerBehavior implements IFarmerBehavior {
@ -42,7 +48,7 @@ public class ReedFarmerBehavior implements IFarmerBehavior {
} }
@Override @Override
public FarmerResult tryHarvestPlant(World world, BlockPos pos, IFarmer farmer) { public FarmerResult tryHarvestPlant(ServerWorld world, BlockPos pos, IFarmer farmer) {
int use = 250; int use = 250;
if (farmer.getEnergy() >= use) { if (farmer.getEnergy() >= use) {
BlockState state = world.getBlockState(pos); BlockState state = world.getBlockState(pos);
@ -54,8 +60,9 @@ public class ReedFarmerBehavior implements IFarmerBehavior {
BlockPos up = pos.above(i); BlockPos up = pos.above(i);
BlockState upState = world.getBlockState(up); BlockState upState = world.getBlockState(up);
if (upState.getBlock() instanceof SugarCaneBlock) { if (upState.getBlock() instanceof SugarCaneBlock) {
NonNullList<ItemStack> drops = NonNullList.create(); List<ItemStack> drops = state.getDrops(new LootContext.Builder(world)
//upState.getBlock().getDrops(drops, world, pos, state, 0); .withParameter(LootParameters.ORIGIN, new Vector3d(pos.getX(), pos.getY(), pos.getZ()))
.withParameter(LootParameters.TOOL, ItemStack.EMPTY));
if (!drops.isEmpty()) { if (!drops.isEmpty()) {
if (farmer.canAddToOutput(drops)) { if (farmer.canAddToOutput(drops)) {

View file

@ -46,7 +46,6 @@ import java.util.Optional;
public class TileEntityCanolaPress extends TileEntityInventoryBase implements INamedContainerProvider, ISharingFluidHandler { public class TileEntityCanolaPress extends TileEntityInventoryBase implements INamedContainerProvider, ISharingFluidHandler {
//public static final int PRODUCE = 80;
public static final int ENERGY_USE = 35; public static final int ENERGY_USE = 35;
private static final int TIME = 30; private static final int TIME = 30;
public final CustomEnergyStorage storage = new CustomEnergyStorage(40000, 100, 0); public final CustomEnergyStorage storage = new CustomEnergyStorage(40000, 100, 0);
@ -64,10 +63,6 @@ public class TileEntityCanolaPress extends TileEntityInventoryBase implements IN
super(ActuallyBlocks.CANOLA_PRESS.getTileEntityType(), 1); super(ActuallyBlocks.CANOLA_PRESS.getTileEntityType(), 1);
} }
// public static boolean isCanola(ItemStack stack) {
// return stack.getItem() == ActuallyBlocks.CANOLA.getItem();
// }
@OnlyIn(Dist.CLIENT) @OnlyIn(Dist.CLIENT)
public int getTankScaled(int i) { public int getTankScaled(int i) {
return this.tank.getFluidAmount() * i / this.tank.getCapacity(); return this.tank.getFluidAmount() * i / this.tank.getCapacity();

View file

@ -36,6 +36,7 @@ import net.minecraft.util.text.ITextComponent;
import net.minecraft.util.text.StringTextComponent; import net.minecraft.util.text.StringTextComponent;
import net.minecraft.util.text.TranslationTextComponent; import net.minecraft.util.text.TranslationTextComponent;
import net.minecraft.world.World; import net.minecraft.world.World;
import net.minecraft.world.server.ServerWorld;
import net.minecraftforge.common.util.LazyOptional; import net.minecraftforge.common.util.LazyOptional;
import net.minecraftforge.energy.IEnergyStorage; import net.minecraftforge.energy.IEnergyStorage;
@ -141,7 +142,7 @@ public class TileEntityFarmer extends TileEntityInventoryBase implements IFarmer
} }
for (IFarmerBehavior behavior : SORTED_FARMER_BEHAVIORS) { for (IFarmerBehavior behavior : SORTED_FARMER_BEHAVIORS) {
FarmerResult harvestResult = behavior.tryHarvestPlant(this.level, query, this); FarmerResult harvestResult = behavior.tryHarvestPlant((ServerWorld) level, query, this);
if (harvestResult == FarmerResult.STOP_PROCESSING) { if (harvestResult == FarmerResult.STOP_PROCESSING) {
return; return;
} }

View file

@ -10,7 +10,9 @@
package de.ellpeck.actuallyadditions.mod.tile; package de.ellpeck.actuallyadditions.mod.tile;
import de.ellpeck.actuallyadditions.api.ActuallyAdditionsAPI;
import de.ellpeck.actuallyadditions.mod.blocks.ActuallyBlocks; import de.ellpeck.actuallyadditions.mod.blocks.ActuallyBlocks;
import de.ellpeck.actuallyadditions.mod.crafting.PressingRecipe;
import de.ellpeck.actuallyadditions.mod.crafting.SingleItem; import de.ellpeck.actuallyadditions.mod.crafting.SingleItem;
import de.ellpeck.actuallyadditions.mod.inventory.ContainerFurnaceDouble; import de.ellpeck.actuallyadditions.mod.inventory.ContainerFurnaceDouble;
import de.ellpeck.actuallyadditions.mod.network.gui.IButtonReactor; import de.ellpeck.actuallyadditions.mod.network.gui.IButtonReactor;
@ -41,6 +43,7 @@ import net.minecraftforge.energy.IEnergyStorage;
import javax.annotation.Nonnull; import javax.annotation.Nonnull;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import java.util.Optional;
public class TileEntityPoweredFurnace extends TileEntityInventoryBase implements IButtonReactor, INamedContainerProvider { public class TileEntityPoweredFurnace extends TileEntityInventoryBase implements IButtonReactor, INamedContainerProvider {
@ -184,9 +187,17 @@ public class TileEntityPoweredFurnace extends TileEntityInventoryBase implements
} }
} }
public boolean validInput(ItemStack stack) {
return getOutputForInput(stack).isPresent();
}
public Optional<ItemStack> getOutputForInput(ItemStack stack) {
return level.getServer().getRecipeManager().getRecipeFor(IRecipeType.SMELTING, new SingleItem(stack), level).map(AbstractCookingRecipe::getResultItem);
}
@Override @Override
public IAcceptor getAcceptor() { public IAcceptor getAcceptor() {
return (slot, stack, automation) -> !automation || (slot == SLOT_INPUT_1 || slot == SLOT_INPUT_2) && StackUtil.isValid(level.getServer().getRecipeManager().getRecipeFor(IRecipeType.SMELTING, new SingleItem(stack), this.level).map(AbstractCookingRecipe::getResultItem).orElse(ItemStack.EMPTY)); return (slot, stack, automation) -> !automation || (slot == SLOT_INPUT_1 || slot == SLOT_INPUT_2) && validInput(stack);
} }
@Override @Override
@ -195,18 +206,20 @@ public class TileEntityPoweredFurnace extends TileEntityInventoryBase implements
} }
public boolean canSmeltOn(int theInput, int theOutput) { public boolean canSmeltOn(int theInput, int theOutput) {
if (StackUtil.isValid(this.inv.getStackInSlot(theInput))) { ItemStack input = this.inv.getStackInSlot(theInput);
ItemStack output = level.getServer().getRecipeManager().getRecipeFor(IRecipeType.SMELTING, new Inventory(this.inv.getStackInSlot(theInput)), this.level).map(AbstractCookingRecipe::getResultItem).orElse(ItemStack.EMPTY); ItemStack output = this.inv.getStackInSlot(theOutput);
if (StackUtil.isValid(output)) { if (!input.isEmpty()) {
return !StackUtil.isValid(this.inv.getStackInSlot(theOutput)) || this.inv.getStackInSlot(theOutput).sameItem(output) && this.inv.getStackInSlot(theOutput).getCount() <= this.inv.getStackInSlot(theOutput).getMaxStackSize() - output.getCount(); ItemStack outputStack = getOutputForInput(input).orElse(ItemStack.EMPTY);
if (!output.isEmpty()) {
return output.isEmpty() || output.sameItem(outputStack) && output.getCount() <= output.getMaxStackSize() - outputStack.getCount();
} }
} }
return false; return false;
} }
public void finishBurning(int theInput, int theOutput) { public void finishBurning(int theInput, int theOutput) {
ItemStack output = level.getServer().getRecipeManager().getRecipeFor(IRecipeType.SMELTING, new Inventory(this.inv.getStackInSlot(theInput)), this.level).map(AbstractCookingRecipe::getResultItem).orElse(ItemStack.EMPTY); ItemStack output = getOutputForInput(inv.getStackInSlot(theInput)).orElse(ItemStack.EMPTY);
if (!StackUtil.isValid(this.inv.getStackInSlot(theOutput))) { if (inv.getStackInSlot(theOutput).isEmpty()) {
this.inv.setStackInSlot(theOutput, output.copy()); this.inv.setStackInSlot(theOutput, output.copy());
} else if (this.inv.getStackInSlot(theOutput).getItem() == output.getItem()) { } else if (this.inv.getStackInSlot(theOutput).getItem() == output.getItem()) {
this.inv.getStackInSlot(theOutput).grow(output.getCount()); this.inv.getStackInSlot(theOutput).grow(output.getCount());

View file

@ -96,10 +96,10 @@
"death.actuallyadditions.atomicReconstructor.5": "%s should have used some re-construction foam.", "death.actuallyadditions.atomicReconstructor.5": "%s should have used some re-construction foam.",
"_comment": "Blocks", "_comment": "Blocks",
"block.actuallyadditions.compost": "Compost", "block.actuallyadditions.compost": "Compost",
"block.actuallyadditions.misc_ore_black_quartz": "Black Quartz Ore", "block.actuallyadditions.ore_black_quartz": "Black Quartz Ore",
"block.actuallyadditions.misc_black_quartz": "Block of Black Quartz", "block.actuallyadditions.black_quartz": "Block of Black Quartz",
"block.actuallyadditions.misc_black_quartz_chiseled": "Chiseled Block of Black Quartz", "block.actuallyadditions.black_quartz_chiseled": "Chiseled Block of Black Quartz",
"block.actuallyadditions.misc_black_quartz_pillar": "Pillar of Black Quartz", "block.actuallyadditions.black_quartz_pillar": "Pillar of Black Quartz",
"block.actuallyadditions.feeder": "Automatic Feeder", "block.actuallyadditions.feeder": "Automatic Feeder",
"block.actuallyadditions.giant_chest": "Small Storage Crate", "block.actuallyadditions.giant_chest": "Small Storage Crate",
"block.actuallyadditions.giant_chest_medium": "Medium Storage Crate", "block.actuallyadditions.giant_chest_medium": "Medium Storage Crate",
@ -111,12 +111,12 @@
"block.actuallyadditions.furnace_solar": "Solar Panel", "block.actuallyadditions.furnace_solar": "Solar Panel",
"block.actuallyadditions.heat_collector": "Heat Collector", "block.actuallyadditions.heat_collector": "Heat Collector",
"block.actuallyadditions.item_repairer": "Item Repairer", "block.actuallyadditions.item_repairer": "Item Repairer",
"block.actuallyadditions.misc_wood_casing": "Wood Casing", "block.actuallyadditions.wood_casing": "Wood Casing",
"block.actuallyadditions.greenhouse_glass": "Greenhouse Glass", "block.actuallyadditions.greenhouse_glass": "Greenhouse Glass",
"block.actuallyadditions.energizer": "Energizer", "block.actuallyadditions.energizer": "Energizer",
"block.actuallyadditions.enervator": "Enervator", "block.actuallyadditions.enervator": "Enervator",
"block.actuallyadditions.rice": "Rice Plant", "block.actuallyadditions.rice": "Rice Plant",
"block.actuallyadditions.misc_charcoal": "Block of Charcoal", "block.actuallyadditions.charcoal": "Block of Charcoal",
"block.actuallyadditions.coal_generator": "Coal Generator", "block.actuallyadditions.coal_generator": "Coal Generator",
"block.actuallyadditions.lamp_powerer": "Lamp Controller", "block.actuallyadditions.lamp_powerer": "Lamp Controller",
"block.actuallyadditions.colored_lamp_white": "White Lamp", "block.actuallyadditions.colored_lamp_white": "White Lamp",
@ -143,7 +143,7 @@
"block.actuallyadditions.phantom_placer": "Phantom Placer", "block.actuallyadditions.phantom_placer": "Phantom Placer",
"block.actuallyadditions.phantom_breaker": "Phantom Breaker", "block.actuallyadditions.phantom_breaker": "Phantom Breaker",
"block.actuallyadditions.lava_factory_controller": "Lava Factory Controller", "block.actuallyadditions.lava_factory_controller": "Lava Factory Controller",
"block.actuallyadditions.misc_lava_factory_case": "Casing", "block.actuallyadditions.lava_factory_case": "Casing",
"block.actuallyadditions.fluid_placer": "Fluid Placer", "block.actuallyadditions.fluid_placer": "Fluid Placer",
"block.actuallyadditions.fluid_collector": "Fluid Collector", "block.actuallyadditions.fluid_collector": "Fluid Collector",
"block.actuallyadditions.phantom_booster": "Phantom Booster", "block.actuallyadditions.phantom_booster": "Phantom Booster",
@ -166,12 +166,12 @@
"block.actuallyadditions.refined_canola_oil": "Refined Canola Oil", "block.actuallyadditions.refined_canola_oil": "Refined Canola Oil",
"block.actuallyadditions.crystallized_oil": "Crystallized Oil", "block.actuallyadditions.crystallized_oil": "Crystallized Oil",
"block.actuallyadditions.empowered_oil": "Empowered Oil", "block.actuallyadditions.empowered_oil": "Empowered Oil",
"block.actuallyadditions.misc_enderpearl": "Block of Enderpearl", "block.actuallyadditions.enderpearl": "Block of Enderpearl",
"block.actuallyadditions.oil_generator": "Oil Generator", "block.actuallyadditions.oil_generator": "Oil Generator",
"block.actuallyadditions.breaker": "Auto-Breaker", "block.actuallyadditions.breaker": "Auto-Breaker",
"block.actuallyadditions.placer": "Auto-Placer", "block.actuallyadditions.placer": "Auto-Placer",
"block.actuallyadditions.dropper": "Automatic Precision Dropper", "block.actuallyadditions.dropper": "Automatic Precision Dropper",
"block.actuallyadditions.misc_ender_casing": "Ender Casing", "block.actuallyadditions.ender_casing": "Ender Casing",
"block.actuallyadditions.flax": "Flax Plant", "block.actuallyadditions.flax": "Flax Plant",
"block.actuallyadditions.coffee_machine": "Coffee Maker", "block.actuallyadditions.coffee_machine": "Coffee Maker",
"block.actuallyadditions.xp_solidifier": "Experience Solidifier", "block.actuallyadditions.xp_solidifier": "Experience Solidifier",
@ -183,7 +183,7 @@
"block.actuallyadditions.laser_relay_advanced": "Advanced Energy Laser Relay", "block.actuallyadditions.laser_relay_advanced": "Advanced Energy Laser Relay",
"block.actuallyadditions.laser_relay_extreme": "Extreme Energy Laser Relay", "block.actuallyadditions.laser_relay_extreme": "Extreme Energy Laser Relay",
"block.actuallyadditions.laser_relay_fluids": "Fluid Laser Relay", "block.actuallyadditions.laser_relay_fluids": "Fluid Laser Relay",
"block.actuallyadditions.misc_iron_casing": "Iron Casing", "block.actuallyadditions.iron_casing": "Iron Casing",
"block.actuallyadditions.black_lotus": "Black Lotus", "block.actuallyadditions.black_lotus": "Black Lotus",
"block.actuallyadditions.testifi_bucks_white_fence": "Ethetic Quartz Wall", "block.actuallyadditions.testifi_bucks_white_fence": "Ethetic Quartz Wall",
"block.actuallyadditions.testifi_bucks_green_fence": "Ethetic Green Wall", "block.actuallyadditions.testifi_bucks_green_fence": "Ethetic Green Wall",
@ -262,12 +262,12 @@
"item.actuallyadditions.drill": "Drill", "item.actuallyadditions.drill": "Drill",
"item.actuallyadditions.rice": "Rice", "item.actuallyadditions.rice": "Rice",
"item.actuallyadditions.food_doughnut": "Doughnut", "item.actuallyadditions.food_doughnut": "Doughnut",
"item.actuallyadditions.misc_rice_dough": "Rice Dough", "item.actuallyadditions.rice_dough": "Rice Dough",
"item.actuallyadditions.food_rice_bread": "Rice Bread", "item.actuallyadditions.food_rice_bread": "Rice Bread",
"item.actuallyadditions.rice_seeds": "Rice Seeds", "item.actuallyadditions.rice_seeds": "Rice Seeds",
"item.actuallyadditions.misc_tiny_coal": "Tiny Coal", "item.actuallyadditions.tiny_coal": "Tiny Coal",
"item.actuallyadditions.misc_tiny_charcoal": "Tiny Charcoal", "item.actuallyadditions.tiny_charcoal": "Tiny Charcoal",
"item.actuallyadditions.misc_rice_slime": "Rice Slimeball", "item.actuallyadditions.rice_slime": "Rice Slimeball",
"item.actuallyadditions.battery": "Single Battery", "item.actuallyadditions.battery": "Single Battery",
"item.actuallyadditions.battery_double": "Double Battery", "item.actuallyadditions.battery_double": "Double Battery",
"item.actuallyadditions.battery_triple": "Triple Battery", "item.actuallyadditions.battery_triple": "Triple Battery",
@ -281,7 +281,7 @@
"item.actuallyadditions.crystallized_oil_bucket": "Crystallized Oil Bucket", "item.actuallyadditions.crystallized_oil_bucket": "Crystallized Oil Bucket",
"item.actuallyadditions.empowered_oil_bucket": "Empowered Oil Bucket", "item.actuallyadditions.empowered_oil_bucket": "Empowered Oil Bucket",
"item.actuallyadditions.wings_of_the_bats": "Wings Of The Bats", "item.actuallyadditions.wings_of_the_bats": "Wings Of The Bats",
"item.actuallyadditions.misc_bat_wing": "Bat's Wing", "item.actuallyadditions.bat_wing": "Bat's Wing",
"item.actuallyadditions.wooden_paxel": "Wooden AIOT", "item.actuallyadditions.wooden_paxel": "Wooden AIOT",
"item.actuallyadditions.stone_paxel": "Stone AIOT", "item.actuallyadditions.stone_paxel": "Stone AIOT",
"item.actuallyadditions.iron_paxel": "Iron AIOT", "item.actuallyadditions.iron_paxel": "Iron AIOT",
@ -291,7 +291,7 @@
"item.actuallyadditions.obsidian_paxel": "Obsidian AIOT", "item.actuallyadditions.obsidian_paxel": "Obsidian AIOT",
"item.actuallyadditions.quartz_paxel": "Black Quartz AIOT", "item.actuallyadditions.quartz_paxel": "Black Quartz AIOT",
"item.actuallyadditions.phantom_connector": "Phantom Connector", "item.actuallyadditions.phantom_connector": "Phantom Connector",
"item.actuallyadditions.misc_cup": "Empty Cup", "item.actuallyadditions.cup": "Empty Cup",
"item.actuallyadditions.coffee": "Cup with Coffee", "item.actuallyadditions.coffee": "Cup with Coffee",
"item.actuallyadditions.coffee_seeds": "Coffee Seeds", "item.actuallyadditions.coffee_seeds": "Coffee Seeds",
"item.actuallyadditions.coffee_beans": "Coffee Beans", "item.actuallyadditions.coffee_beans": "Coffee Beans",
@ -307,15 +307,15 @@
"item.actuallyadditions.drill_upgrade_block_placing": "Drill Block Placing Augment", "item.actuallyadditions.drill_upgrade_block_placing": "Drill Block Placing Augment",
"item.actuallyadditions.drill_upgrade_three_by_three": "Drill Mining Augment I", "item.actuallyadditions.drill_upgrade_three_by_three": "Drill Mining Augment I",
"item.actuallyadditions.drill_upgrade_five_by_five": "Drill Mining Augment II", "item.actuallyadditions.drill_upgrade_five_by_five": "Drill Mining Augment II",
"item.actuallyadditions.misc_mashed_food": "Bio-Mash", "item.actuallyadditions.mashed_food": "Bio-Mash",
"item.actuallyadditions.fertilizer": "Fertilizer", "item.actuallyadditions.fertilizer": "Fertilizer",
"item.actuallyadditions.misc_dough": "Dough", "item.actuallyadditions.dough": "Dough",
"item.actuallyadditions.misc_paper_cone": "Paper Cone", "item.actuallyadditions.paper_cone": "Paper Cone",
"item.actuallyadditions.misc_knife_blade": "Knife Blade", "item.actuallyadditions.knife_blade": "Knife Blade",
"item.actuallyadditions.misc_knife_handle": "Knife Handle", "item.actuallyadditions.knife_handle": "Knife Handle",
"item.actuallyadditions.misc_black_quartz": "Black Quartz", "item.actuallyadditions.black_quartz": "Black Quartz",
"item.actuallyadditions.misc_ring": "Ring", "item.actuallyadditions.ring": "Ring",
"item.actuallyadditions.misc_ring.storage": "Blaze Stored", "item.actuallyadditions.ring.storage": "Blaze Stored",
"item.actuallyadditions.tele_staff": "Teleport Staff", "item.actuallyadditions.tele_staff": "Teleport Staff",
"item.actuallyadditions.jam_cu_ba_ra": "CuBaRa-Jam", "item.actuallyadditions.jam_cu_ba_ra": "CuBaRa-Jam",
"item.actuallyadditions.jam_gra_ki_ba": "GraKiBa-Jam", "item.actuallyadditions.jam_gra_ki_ba": "GraKiBa-Jam",
@ -361,8 +361,8 @@
"item.actuallyadditions.food_carrot_juice": "Carrot Juice", "item.actuallyadditions.food_carrot_juice": "Carrot Juice",
"item.actuallyadditions.food_pumpkin_stew": "Pumpkin Stew", "item.actuallyadditions.food_pumpkin_stew": "Pumpkin Stew",
"item.actuallyadditions.food_cheese": "Cheese", "item.actuallyadditions.food_cheese": "Cheese",
"item.actuallyadditions.misc_coil": "Basic Coil", "item.actuallyadditions.coil": "Basic Coil",
"item.actuallyadditions.misc_coil_advanced": "Advanced Coil", "item.actuallyadditions.coil_advanced": "Advanced Coil",
"item.actuallyadditions.potion_ring": "Ring of", "item.actuallyadditions.potion_ring": "Ring of",
"item.actuallyadditions.potion_ring_advanced": "Advanced Ring of", "item.actuallyadditions.potion_ring_advanced": "Advanced Ring of",
"item.actuallyadditions.solidified_experience": "Solidified Experience", "item.actuallyadditions.solidified_experience": "Solidified Experience",
@ -393,8 +393,8 @@
"item.actuallyadditions.chest_to_crate_upgrade": "Chest To Storage Crate Upgrade", "item.actuallyadditions.chest_to_crate_upgrade": "Chest To Storage Crate Upgrade",
"item.actuallyadditions.small_to_medium_crate_upgrade": "Small To Medium Storage Crate Upgrade", "item.actuallyadditions.small_to_medium_crate_upgrade": "Small To Medium Storage Crate Upgrade",
"item.actuallyadditions.medium_to_large_crate_upgrade": "Medium To Large Storage Crate Upgrade", "item.actuallyadditions.medium_to_large_crate_upgrade": "Medium To Large Storage Crate Upgrade",
"item.actuallyadditions.misc_drill_core": "Drill Core", "item.actuallyadditions.drill_core": "Drill Core",
"item.actuallyadditions.misc_black_dye": "Black Dye", "item.actuallyadditions.black_dye": "Black Dye",
"item.actuallyadditions.crystal_red": "Restonia Crystal", "item.actuallyadditions.crystal_red": "Restonia Crystal",
"item.actuallyadditions.crystal_blue": "Palis Crystal", "item.actuallyadditions.crystal_blue": "Palis Crystal",
"item.actuallyadditions.crystal_light_blue": "Diamatine Crystal", "item.actuallyadditions.crystal_light_blue": "Diamatine Crystal",
@ -407,7 +407,7 @@
"item.actuallyadditions.crystal_empowered_green": "Empowered Emeradic Crystal", "item.actuallyadditions.crystal_empowered_green": "Empowered Emeradic Crystal",
"item.actuallyadditions.crystal_empowered_black": "Empowered Void Crystal", "item.actuallyadditions.crystal_empowered_black": "Empowered Void Crystal",
"item.actuallyadditions.crystal_empowered_white": "Empowered Enori Crystal", "item.actuallyadditions.crystal_empowered_white": "Empowered Enori Crystal",
"item.actuallyadditions.misc_lens": "Lens", "item.actuallyadditions.lens": "Lens",
"item.actuallyadditions.color_lens": "Lens of Color", "item.actuallyadditions.color_lens": "Lens of Color",
"item.actuallyadditions.explosion_lens": "Lens of Detonation", "item.actuallyadditions.explosion_lens": "Lens of Detonation",
"item.actuallyadditions.damage_lens": "Lens of Certain Death", "item.actuallyadditions.damage_lens": "Lens of Certain Death",
@ -474,21 +474,21 @@
"item.actuallyadditions.paxel_crystal_white": "Enori Crystal AIOT", "item.actuallyadditions.paxel_crystal_white": "Enori Crystal AIOT",
"item.actuallyadditions.paxel_crystal_green": "Emeradic Crystal AIOT", "item.actuallyadditions.paxel_crystal_green": "Emeradic Crystal AIOT",
"item.actuallyadditions.food_bacon": "Bacon", "item.actuallyadditions.food_bacon": "Bacon",
"item.actuallyadditions.misc_ender_star": "Ender Star", "item.actuallyadditions.ender_star": "Ender Star",
"item.actuallyadditions.spawner_changer": "Spawner Changer", "item.actuallyadditions.spawner_changer": "Spawner Changer",
"item.actuallyadditions.misc_spawner_shard": "Spawner Shards", "item.actuallyadditions.spawner_shard": "Spawner Shards",
"item.actuallyadditions.minecart_firework_box": "Firework Box Cart", "item.actuallyadditions.minecart_firework_box": "Firework Box Cart",
"item.actuallyadditions.water_bowl": "Bowl of Water", "item.actuallyadditions.water_bowl": "Bowl of Water",
"item.actuallyadditions.filter": "Item Filter", "item.actuallyadditions.filter": "Item Filter",
"item.actuallyadditions.misc_biomass": "Biomass", "item.actuallyadditions.biomass": "Biomass",
"item.actuallyadditions.misc_biocoal": "Bio Coal", "item.actuallyadditions.biocoal": "Bio Coal",
"item.actuallyadditions.player_probe": "Player Probe", "item.actuallyadditions.player_probe": "Player Probe",
"item.actuallyadditions.worm": "Worm", "item.actuallyadditions.worm": "Worm",
"item.actuallyadditions.bag": "Traveler's Sack", "item.actuallyadditions.bag": "Traveler's Sack",
"item.actuallyadditions.bag.storage": "filled slots", "item.actuallyadditions.bag.storage": "filled slots",
"item.actuallyadditions.void_bag": "Void Sack", "item.actuallyadditions.void_bag": "Void Sack",
"item.actuallyadditions.misc_crystallized_canola_seed": "Crystallized Canola Seed", "item.actuallyadditions.crystallized_canola_seed": "Crystallized Canola Seed",
"item.actuallyadditions.misc_empowered_canola_seed": "Empowered Canola Seed", "item.actuallyadditions.empowered_canola_seed": "Empowered Canola Seed",
"item.actuallyadditions.mining_lens": "Lens of the Miner", "item.actuallyadditions.mining_lens": "Lens of the Miner",
"item.actuallyadditions.more_damage_lens": "Lens of the Killer", "item.actuallyadditions.more_damage_lens": "Lens of the Killer",
"item.actuallyadditions.filling_wand": "Handheld Filler", "item.actuallyadditions.filling_wand": "Handheld Filler",