[1.7.10][WIP] Lord British's Legacy

  • The FTB Forum is now read-only, and is here as an archive. To participate in our community discussions, please join our Discord! https://ftb.team/discord

RavynousHunter

New Member
Jul 29, 2019
2,784
-3
1
So, after listening to this song about fifteen times (because its good and quite relaxing), I've decided to take up modding again for something that can actually start out simple, and then be made more complex later on. It all hinges on one game series, which many of you may be able to guess by the mod's title: the Ultima series, Ultima Online in particular.

What am I currently working on?
Well, my current endeavor is to recreate the alchemy system of Ultima Online, but with a more Minecrafty feel to it. I've managed to import the base reagents (not including Age of Shadows content or anything afterward) and have the mortar and pestle created...just need to get about designing the GUI and determining how it'll all work. Current reagents are:
  • Black Pearl: Will be generated underwater in ocean biomes, right-click a black oyster to receive 1 pearl. Black oysters will be harvestable with silk touch picks, but must be underwater to function and will generate a new black pearl every 20 minutes. Pearls will be used to create Red Potions.
  • Mandrake Root: Grows randomly in marshy biomes; yields 2-3 roots if harvested at the full moon, 1-2 otherwise. Can be planted and harvested like any normal crop. Used to create White Potions.
  • Sulfurous Ash: Found deep underground in small ore veins. Each ore yields 1-3 sulfurous ash, and the yield is affected by Fortune enchantments. Used to create Purple Potions.
  • Blood Moss: Also found in marshy biomes (or less often in plains), yields 1-2 moss when harvested. Follow normal crop rules. Used to create Blue Potions.
  • Garlic: Found mostly in forests. Harvesting yields 2-3 garlic. Used to create Orange Potions. Is also edible, healing 2 hunger shanks and having 2 points of saturation. (Will, however, make your breath absolutely revolting.)
  • Ginseng: Like garlic, is found mostly in forests. Harvesting yields 1-2 ginseng. Used to create Yellow Potions.
  • Nightshade: Found in swamps and marshes. Yields 1-2 nightshade when harvested and makes Green Potions. Is also edible, but only heals 1 hunger shank with 1 saturation, and has a 95% chance of inflicting Poison III (30sec duration) upon the fool who decides to actually eat it.
  • Spider Silk: An occasional drop when cobwebs are broken or spiders are slain (roughly a 10% chance for both). Used to create Black Potions.
As for what the potions do...
  • Red Potions grant the Saturation buff, as well as granting low-level Speed for a short duration.
  • White Potions grant the Strength buff, as well as low-level Resistance for a short duration.
  • Purple Potions are basically grenades; the higher level the potion, the more potent (and deadly) the explosion.
  • Blue Potions grant equal shares of both the Speed and Haste buffs.
  • Yellow Potions heal you, as well as granting low-level Regeneration for a short duration.
  • Green Potions inflict varying levels of Poison (as well as some Instant Damage) on whoever is fool enough to drink them.
  • Black Potions grant you the Night Vision buff.
Another planned feature is potion kegs, which can store up to 4 stacks of a single potion, which is retained upon breaking, and can either be right-clicked or crafted with an empty bottle to drain a potion's worth of fluid of the appropriate colour and level.

Of course, I also plan on adding more to it, including the various ores as well as features of some of the more useful (in Minecraft terms) skills such as poisoning, magery, and maybe tracking. I'll even throw in moongates, as well as craftable Orbs of the Moon, and maybe even a Quest of the Avatar. But, for now, I'm keeping it as simple as I can so I don't end up overwhelming myself by trying to do a thousand different things at once.

So...whaddya think?
 

RavynousHunter

New Member
Jul 29, 2019
2,784
-3
1
Ha, that's funny, because one of my brother's first comments on seeing Minecraft was that it reminded him a lot of Underworld. Along with Thief, that was some of Looking Glass Studio's best work.

(Also, yes, the mod's name is a shameless play on the "Mondain's Legacy" expansion.)

I also don't plan on including much, if anything, past the Renaissance expansion, because Third Dawn ("Third Dawn," "3-D," get it? Because that was the first attempt at a complete failure of a 3D UO client? GET IT?!) was officially where EA took a large, steaming crap all over established lore and just started making random shit up.
 
  • Like
Reactions: Pyure

tedyhere

New Member
Jul 29, 2019
1,286
0
0
I love Ultima... I have since the first C64 version I played many moons ago when I was but a wee lad. I will be watching this mod and possibly adding it to my pack I am working on when it's ready
 

RavynousHunter

New Member
Jul 29, 2019
2,784
-3
1
Wow! Direct competition for the Lord's current game:D I likes it.
Haha, I'd never compete with m'lord. I would, however, happily join forces with him.

I love Ultima... I have since the first C64 version I played many moons ago when I was but a wee lad. I will be watching this mod and possibly adding it to my pack I am working on when it's ready
I'll keep workin on her as steadily as I can. Just note that a lot of the bigger stuff (like a Quest of the Avatar) probably won't be in the initial release. Moongates, however, should be there. I would want the moongates to actually work kinda like they do in Ultima IV, in that when they open depends on the phase of the moon. Basically, you can place it down in any dirt, sand, grass, or gravel block that has a line of sight to the sky, and it'll ask you which two phases of the moon you want it open on, unless its mate is already placed, in which case, it'll take on the phases assigned to its mate. Then, when those phases of the moon are active, it'll open a gateway to its mate (since they'll be crafted in pairs). However, if you want it to work interdimensionally, you'll have to find, dig up, and somehow shape some blackrock to build a black gate for both ends. Also, the timing will depend on the first moonstone placed; so, if you placed the first moonstone in a Mystcraft world that runs at double normal speed, but placed the other in the Overworld, your moongate will be opening more frequently than if they were placed in reverse order.

As for black (interdimensional) gates, you'd need to find a way to magically process the blackrock chunks you get from the ore (since blackrock can't be affected by physical force) and join them together into blocks. Build a blackrock structure 3 meters wide, 4 meters tall, and 1 meter deep, then make 12 eyes of ender and hit each block in the structure with one. The magic of the ender eyes will make them more permeable, this change is permanent, and once all blocks become permeable, right-click anywhere in the structure with a moonstone to activate it. The moonstone will be consumed, and the black gate will become active. Both ends will need a black gate for it to function properly (you can't just make one gate and simply bury the other moonstone).
 
  • Like
Reactions: LostBMe

RavynousHunter

New Member
Jul 29, 2019
2,784
-3
1
I've got some things to show!

How to make a mortar and pestle, as well as the various reagents!


Grinding (some) ingredients? What is this madness?!

Now, all I need to do is figure out how to make a recipe NOT consume an item, as well as damaging said item (think the quartz cutting knife from AE1), and those recipes will be all set! Also, yes, the M&P is strictly for grinding down certain reagents for use in potions. Sulfurous ash and spider silk don't need any grinding, they're about as fine as they can get and are ready-made for mixing. Others, like black pearls, blood moss, and mandrake root, need to be ground down to release essential juices or otherwise make them useable for alchemy.

Grinding some things down is the first step of the alchemical process of creating potions. After that, you'll (eventually, this is bit's just in my head, currently) need to put the necessary reagent, as well as a bottle of fresh water, into an apprentice alchemist's oven, which uses standard furnace fuel (at standard furnace fuel consumption rates) to carefully boil the water in the bottle and brew the potion. There will be four tiers of alchemist's ovens: apprentice, journeyman, master, and grandmaster, as well as four tiers of potion: lesser, (no title, standard potion), greater, and superior. To craft a potion of a higher tier, you must first craft a potion of the tier below (which, itself, requires any applicable lower-tier potion be made to make it), and supply more of the potion's primary ingredient, in the following portions: 1 for lesser potions, 2 for standard potions, 3 for greater potions, and 4 for superior potions. Yes, this means that you'll need a total of 10 of a given ingredient to make a single superior potion, but since their effects are so superlative (best healing, most powerful explosion, most lethal poison, etc), I think you'll agree that such requirements are a good thing.
 
  • Like
Reactions: Pyure

InfinityRaider

New Member
Jul 29, 2019
1,169
-1
1
EDIT:
For recipes not consuming items override this in your item class:
Code:
//when this item is used in a crafting grid, it stays in the grid
@Override
public boolean doesContainerItemLeaveCraftingGrid(ItemStack itemStack)
{
return true;    //return false to keep it in the crafting grid
}

//when this item is used in a crafting recipe it is replaced by the item return by this method
@Override
public ItemStack getContainerItem(ItemStack itemStack) {
itemStack.setItemDamage(itemStack.getItemDamage()+1);
return itemStack.;
}
 
Last edited:
  • Like
Reactions: RavynousHunter

RavynousHunter

New Member
Jul 29, 2019
2,784
-3
1
EDIT:
For recipes not consuming items override this in your item class:
Code:
//when this item is used in a crafting grid, it stays in the grid
@Override
public boolean doesContainerItemLeaveCraftingGrid(ItemStack itemStack)
{
return true;    //return false to keep it in the crafting grid
}

//when this item is used in a crafting recipe it is replaced by the item return by this method
@Override
public ItemStack getContainerItem(ItemStack itemStack) {
itemStack.setItemDamage(itemStack.getItemDamage()+1);
return itemStack.;
}
Woohoo! Thank you, sir!

[ETA]

Queer, it doesn't seem to work. Here's what I've got...

ItemMortarAndPestle.java
Code:
public class ItemMortarAndPestle
  extends Item
{
  private String Name = "Mortar and Pestle";

  public ItemMortarAndPestle()
  {
    this.setUnlocalizedName( Globals.MOD_ID + "_" + this.Name );
    this.setTextureName( Globals.MOD_ID + ":" + this.Name );
    this.setMaxDamage( 64 );
    this.setMaxStackSize( 1 );

    GameRegistry.registerItem( this, Name );
    this.setCreativeTab( LBs_Legacy.Tab );
  }

  @Override
  public boolean doesContainerItemLeaveCraftingGrid( ItemStack itemStack )
  {
    return false;
  }

  @Override
  public ItemStack getContainerItem( ItemStack itemStack )
  {
    itemStack.setItemDamage( itemStack.getItemDamage() + 1 );
    return itemStack;
  }
}

And the recipe code...
Code:
GameRegistry.addShapelessRecipe( new ItemStack( CrushedGarlic     ), Mortar, Garlic       );
GameRegistry.addShapelessRecipe( new ItemStack( NightshadeFibres  ), Mortar, Nightshade   );
GameRegistry.addShapelessRecipe( new ItemStack( MandrakeFibres    ), Mortar, MandrakeRoot );
GameRegistry.addShapelessRecipe( new ItemStack( GinsengFibres     ), Mortar, Ginseng      );
GameRegistry.addShapelessRecipe( new ItemStack( CrushedBlackPearl ), Mortar, BlackPearl   );
GameRegistry.addShapelessRecipe( new ItemStack( BloodMossFibres   ), Mortar, BloodMoss    );

Spot anything that might be causing an issue?

(Also, I haven't got any crafting event handlers, dunno if that would change things or not.)
(Yes, I am VERY anal with my spacing.)
 
Last edited:

RavynousHunter

New Member
Jul 29, 2019
2,784
-3
1
Try setting the method to true, that's the only difference compared to my code (besides the fact that I have a custom recipe, but the recipe just copies the NBT tag)
Item class: https://github.com/InfinityRaider/A...finityRaider/AgriCraft/items/ItemJournal.java
Recipe class: https://github.com/InfinityRaider/A...r/AgriCraft/items/crafting/RecipeJournal.java
Think I got it, I forgot to do return itemStack.copy() instead of just return itemStack. Hokay, now, to make the recipe ignore damage!
 
  • Like
Reactions: InfinityRaider

RavynousHunter

New Member
Jul 29, 2019
2,784
-3
1
So, like...

GameRegistry.addShapelessRecipe( new ItemStack( CrushedBlackPearl ), new ItemStack( Mortar, 1, OreDictionary.WILDCARD_VALUE ), BlackPearl );
?
 

RavynousHunter

New Member
Jul 29, 2019
2,784
-3
1
Bit of news! I've begun working on my first potions. The potion cooking system isn't implemented, as of yet, but this is more so I can learn how to have potions with both primary and secondary effects. Currently working on the tier 1 yellow potion, and the healing works as advertised, but for some reason, the regeneration isn't taking effect. When its sorted, it'll be sitting at Heal I and 5 seconds of Regen I; good enough to get you out of a pinch, but not good enough to turn you into a combat machine, or recover instantly from catastrophic wounds.

OH! Also, if anyone either is or knows a decent texture artist, the assistance of one would be greatly appreciated. I mean, the potions are just sprites I've half-assedly ripped from an Ultima VI sprite sheet, and the various plant fibres are just...well, to be honest, they're crap I cobbled together in a few minutes just to have something there.
 

RavynousHunter

New Member
Jul 29, 2019
2,784
-3
1
More news! I have the tier 1 purple potion working! Throws like a splash potion, leaves a hole like TNT! Also, if you score a direct hit against an entity, it'll do an extra 3 damage. Both, of course, increase when they're upgraded: +1x TNT per tier, and +3 damage on a direct hit per tier. So, yes, if you get a Superior Tier purple potion, you'll have something worth 4 cubic meters of TNT that also deals 12 damage if you manage to whack someone right in the face with it.

Now, I just need to get a renderer to make it show the potion flying instead of a white box and that potion, at least, will be all set!

[ETA]

I've tacked on the Tier 2 purple potion to make sure the tiering works properly for it, and it does! I have proof!

Tier 1 explosion:


Tier 2 explosion:
 
Last edited:
  • Like
Reactions: LostBMe

RavynousHunter

New Member
Jul 29, 2019
2,784
-3
1
Hrm...would someone mind helpin me out a little bit real fast? I can't quite seem to get this working:

Code:
package RavynousHunter.LBs_Legacy.Alchemy;

import java.util.ArrayList;
import java.util.List;

import cpw.mods.fml.common.registry.GameRegistry;
import RavynousHunter.LBs_Legacy.Globals;
import RavynousHunter.LBs_Legacy.LBs_Legacy;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.EnumAction;
import net.minecraft.item.ItemFood;
import net.minecraft.item.ItemStack;
import net.minecraft.potion.Potion;
import net.minecraft.potion.PotionEffect;
import net.minecraft.world.World;

public class ItemYellowPotionTier1
  extends ItemFood
{
  private String Name = "Yellow Potion";
 
  private ArrayList<PotionEffect> Effects = new ArrayList<PotionEffect>();

  public ItemYellowPotionTier1( int heal, float saturation, boolean wolfFood )
  {
    super( heal, saturation, wolfFood );
   
    this.setUnlocalizedName( Globals.MOD_ID + "_" + this.Name );
    this.setTextureName( Globals.MOD_ID + ":" + this.Name );
    GameRegistry.registerItem( this, this.Name + "Tier 1" );
    this.setCreativeTab( LBs_Legacy.Tab );
   
    this.Effects.add( new PotionEffect( Potion.heal.id,  1, 0 ) );
    this.Effects.add( new PotionEffect( Potion.regeneration.id, 5, 0 ) );
   
    this.setAlwaysEdible();
  }
 
  public EnumAction getItemUseAction( ItemStack stack )
  {
    return EnumAction.drink;
  }
 
  @Override
  protected void onFoodEaten( ItemStack stack, World world, EntityPlayer player )
  {
    super.onFoodEaten( stack, world, player );
   
    if ( Effects != null )
    {
      for ( PotionEffect effect : Effects )
      {
        if ( world.isRemote == false && effect.getPotionID() > 0 )
        {
          player.addPotionEffect( new PotionEffect( effect ) );
        }
      }
    }
  }
 
  @Override
  public void addInformation( ItemStack stack, EntityPlayer player, List list, boolean bool )
  {
    list.add( "Tier: Lesser" );
    list.add( "Effects:" );
    list.add( "Heal I (1 sec)" );
    list.add( "Regeneration I (5 sec)" );
  }
}

Basically, the healing is working just fine, you get 3 hearts whenever you drink a yellow potion. The problem is that the regeneration never applies. Could someone with better eyes perhaps give this a lookie and see if they can spot the problem?
 

Kocyk

New Member
Jul 29, 2019
113
0
1
Umm... regeneration duration is expressed in ticks, so your effect will last 1/4s. It probably applies, just goes away before you notice.

BTW isn't calling
Code:
world.isRemote == false
kinda redundant? You could just use:
Code:
!world.isRemote