From e2e81139fa5cc495f5e77d6dcda8abecaf39c4e6 Mon Sep 17 00:00:00 2001 From: melchior Date: Sun, 12 Jul 2020 18:53:31 -0400 Subject: [PATCH] W.I.P. Transition still not quite working --- ElementalTools/Assignments.cs | 3 +- ElementalTools/Block/PackCarburization.cs | 70 ++++++++++++++++--- .../BlockEntities/PackCarburizationEntity.cs | 52 +++++++++----- ElementalTools/assets/fma/lang/en.json | 6 +- 4 files changed, 98 insertions(+), 33 deletions(-) diff --git a/ElementalTools/Assignments.cs b/ElementalTools/Assignments.cs index 8bba11b..df4d6e5 100644 --- a/ElementalTools/Assignments.cs +++ b/ElementalTools/Assignments.cs @@ -22,7 +22,6 @@ namespace ElementalTools internal const string fmaKey = @"fma"; internal const string pack_carburizationClassKey = @"PackCarburization"; - internal const string pack_carburizationBEKey = @"PackCarburizationEntity"; internal const string PackCarburizationEntityNameKey = @"PackCarburizationEntity"; internal const string IronNameKey = @"iron"; @@ -39,7 +38,7 @@ namespace ElementalTools private void RegisterBlockClasses( ) { CoreAPI.RegisterBlockClass(pack_carburizationClassKey, typeof(PackCarburization)); - CoreAPI.RegisterBlockEntityClass(pack_carburizationBEKey, typeof(PackCarburizationEntity)); + CoreAPI.RegisterBlockEntityClass(PackCarburizationEntityNameKey, typeof(PackCarburizationEntity)); } private void ManipulateGridRecipies( ) diff --git a/ElementalTools/Block/PackCarburization.cs b/ElementalTools/Block/PackCarburization.cs index 5bfa1f6..349a873 100644 --- a/ElementalTools/Block/PackCarburization.cs +++ b/ElementalTools/Block/PackCarburization.cs @@ -24,15 +24,18 @@ namespace ElementalTools //Heat to 'Red' hot for ~ 30-60 minutes (equive to ??? game cook time ??? ) + //Output 'Blister' steel... not 'Shear' steel + internal PackCarburizationEntity Entity(BlockPos here) { var pcEnt = api.World.BlockAccessor.GetBlockEntity(here) as PackCarburizationEntity; if (pcEnt == null) { - api.World.Logger.Warning($"PackCarburization [{here}]: BlockEntity NULL! (regenerating)"); + api.World.Logger.Warning($"PackCarburization [{here}]: {this.EntityClass} Not-present/NULL! (regenerating)"); api.World.BlockAccessor.SpawnBlockEntity(ElementalToolsSystem.PackCarburizationEntityNameKey, here); + pcEnt = api.World.BlockAccessor.GetBlockEntity(here) as PackCarburizationEntity; } - return null; + return pcEnt; } public float SteelTransitionTemp { @@ -55,6 +58,13 @@ namespace ElementalTools } } + public string State { + get + { + return this.Variant[@"type"]; + } + } + /// /// Clone Recipie component data / attributes /// @@ -77,10 +87,10 @@ namespace ElementalTools //outputSlot.Itemstack.Attributes = ironThingSlot.Itemstack.Attributes.Clone( ); - ItemStack[ ] encapsulatedItems = new ItemStack[ ] { ironThingSlot.Itemstack.Clone( ) };//More than 1 or Quantity *# + ItemStack[ ] encapsulatedItems = new ItemStack[ ] { ironThingSlot.Itemstack.Clone( ) }; + encapsulatedItems.First( ).StackSize = 1;//There can be only 1, per pack SetContents(outputSlot.Itemstack, encapsulatedItems ); - } /// @@ -251,15 +261,14 @@ namespace ElementalTools } - outputStack.Attributes = contentStack.Attributes.Clone( ); - outputStack.TempAttributes = contentStack.TempAttributes.Clone( ); + //outputStack.Attributes = contentStack.Attributes.Clone( ); + //outputStack.TempAttributes = contentStack.TempAttributes.Clone( ); outputStack.Collectible.SetTemperature(world, outputStack, temperature); - firedPack.SetContents(outputStack, GetContents(world, contentStack)); - SetTemperature(world, outputStack, temperature - 100f, false); + firedPack.SetContents(outputStack, GetContents(world, contentStack)); outputSlot.Itemstack = outputStack; inputSlot.Itemstack = null; //inputSlot.MarkDirty( ); - //outputSlot.MarkDirty(); //? + outputSlot.MarkDirty(); //? #if DEBUG world.Logger.VerboseDebug("Finished: 'DoSmelt' " ); #endif @@ -273,6 +282,7 @@ namespace ElementalTools } + public override bool CanSpoil(ItemStack itemstack) { return false; @@ -304,6 +314,48 @@ namespace ElementalTools } + public override float OnGettingBroken(IPlayer player, BlockSelection blockSel, ItemSlot itemslot, float remainingResistance, float dt, int counter) + { + EnumTool? tool = itemslot.Itemstack?.Collectible?.Tool; + + if (tool == EnumTool.Hammer || tool == EnumTool.Pickaxe || tool == EnumTool.Shovel || tool == EnumTool.Sword || tool == EnumTool.Spear || tool == EnumTool.Axe || tool == EnumTool.Hoe) { + if (counter % 5 == 0 || remainingResistance <= 0) { + double posx = blockSel.Position.X + blockSel.HitPosition.X; + double posy = blockSel.Position.Y + blockSel.HitPosition.Y; + double posz = blockSel.Position.Z + blockSel.HitPosition.Z; + player.Entity.World.PlaySoundAt(remainingResistance > 0 ? Sounds.GetHitSound(player) : Sounds.GetBreakSound(player), posx, posy, posz, player, true, 16, 1); + } + + return remainingResistance - 0.05f; + } + + return base.OnGettingBroken(player, blockSel, itemslot, remainingResistance, dt, counter); + } + + public override void OnBlockBroken(IWorldAccessor world, BlockPos pos, IPlayer byPlayer, float dropQuantityMultiplier = 1) + { + SimpleParticleProperties ash = + new SimpleParticleProperties( + 9, 18, + ColorUtil.ToRgba(127, 222, 222, 222), + new Vec3d(pos.X, pos.Y, pos.Z), + new Vec3d(pos.X + 1, pos.Y + 1, pos.Z + 1), + new Vec3f(-0.2f, -0.1f, -0.2f), + new Vec3f(0.2f, 0.2f, 0.2f), + 1.5f, + 0, + 0.5f, + 1.0f, + EnumParticleModel.Quad + ); + + ash.OpacityEvolve = new EvolvingNatFloat(EnumTransformFunction.LINEAR, -200); + ash.SizeEvolve = new EvolvingNatFloat(EnumTransformFunction.LINEAR, 2); + + world.SpawnParticles(ash); + + base.OnBlockBroken(world, pos, byPlayer, dropQuantityMultiplier); + } } } diff --git a/ElementalTools/BlockEntities/PackCarburizationEntity.cs b/ElementalTools/BlockEntities/PackCarburizationEntity.cs index 748a23c..cf6367a 100644 --- a/ElementalTools/BlockEntities/PackCarburizationEntity.cs +++ b/ElementalTools/BlockEntities/PackCarburizationEntity.cs @@ -1,5 +1,7 @@ using System; +using System.Linq; using System.Text; + using Vintagestory.API.Common; using Vintagestory.API.Config; using Vintagestory.GameContent; @@ -8,6 +10,7 @@ namespace ElementalTools { public class PackCarburizationEntity : BlockEntityContainer { + private const string _invName = @"carburization_pack"; //Item Container for Iron object to convert... internal InventoryGeneric internalInventory; @@ -22,7 +25,7 @@ namespace ElementalTools public override string InventoryClassName { get { - return @"Packcarburization_Inventory"; + return _invName; } } @@ -30,36 +33,30 @@ namespace ElementalTools get { return base.Block as PackCarburization; } } - public float Temperature { get; private set; } + public float Temperature { get; set; } - public PackCarburizationEntity( ) - { - internalInventory = new InventoryGeneric(1, null, null); + public PackCarburizationEntity( ) + { + internalInventory = new InventoryGeneric(1, _invName+"-0", null);//required: 'Instance ID' is a Dummy...token (real value set later) } - public override void Initialize(ICoreAPI api) - { - base.Initialize(api); - } protected override void OnTick(float dt) { - //Soak up Carbon; Transform into S-T-E-E-L .... eventually. + + if (this.Temperature > 20) { + this.Temperature -= 1f;//Rain? Compute vs. ambient temp / biome, on snow/ice... + } + if (!internalInventory.IsEmpty) { foreach (ItemSlot slot in internalInventory) { - if (slot.Itemstack == null) continue; + if (slot.Empty) continue; AssetLocation objCode = slot.Itemstack.Collectible.Code; - slot.Itemstack.Collectible.SetTemperature(this.Api.World, slot.Itemstack, Temperature, true); - - if (Temperature > this.Block.SteelTransitionTemp) { - //Convert here or on 'DoSmelt' ? - //Which is really mostly about the clay container...not quenching to make it Martensite - - } + slot.Itemstack.Collectible.SetTemperature(this.Api.World, slot.Itemstack, Temperature, false); } MarkDirty(true); @@ -86,13 +83,30 @@ namespace ElementalTools else { foreach (var thing in internalInventory) { + if (thing.Empty) continue; dsc.AppendFormat("{1} \u00d7 {0}\n", thing.Itemstack.GetName( ), thing.StackSize); } } } - //OnBlockPlaced -- Perform base call! + + public override void OnBlockPlaced(ItemStack byItemStack = null) + { + if (byItemStack != null ) { + var contents = this.Block.GetContents(this.Api.World, byItemStack); + if (contents != null || contents.Length == 0) return; + + internalInventory[0].Itemstack = contents.First( ).Clone( ); + //internalInventory[0].Itemstack.SetFrom(byItemStack); + var temp =this.Block.GetTemperature(this.Api.World, byItemStack); + this.Temperature = temp; + } + else { + Api.World.Logger.VerboseDebug("No items in Stacks?! - thus empty..."); + } + } + } } diff --git a/ElementalTools/assets/fma/lang/en.json b/ElementalTools/assets/fma/lang/en.json index 96b9e9b..044ba07 100644 --- a/ElementalTools/assets/fma/lang/en.json +++ b/ElementalTools/assets/fma/lang/en.json @@ -2,7 +2,7 @@ "itemdesc-mallet": "Basicaly LOG on a stick\n the ORGANIC Alternative to Hammers.", "item-mallet":"Mallet", "item-carburization_powder":"Carburization Powder", - "itemdesc-carburization_powder":"A 'magical' dark grey dust...ask the metal sages how its used...", - "block-pack_carbirization-*":"Carburization Pack", - "blockdesc-pack_carbirization-*":"A new Metal age dawns...SOOON!", + "itemdesc-carburization_powder":"A 'magical' dark grey dust...ask the metal sages how its used...", + "fma:block-pack_carburization-*":"Carburization Pack", + "fma:blockdesc-pack_carbirization-*":"A new Metal age dawns...SOOON!", } \ No newline at end of file