0999312 1 year ago
parent
commit
8111113751
80 changed files with 976 additions and 207 deletions
  1. 1 1
      build.gradle
  2. 1 1
      src/main/java/cn/mcmod/sakura/CreativeTabsSakura.java
  3. 13 0
      src/main/java/cn/mcmod/sakura/SakuraConfig.java
  4. 5 0
      src/main/java/cn/mcmod/sakura/SakuraOreDictLoader.java
  5. 14 2
      src/main/java/cn/mcmod/sakura/block/BlockLoader.java
  6. 43 0
      src/main/java/cn/mcmod/sakura/block/BlockTatara.java
  7. 114 0
      src/main/java/cn/mcmod/sakura/block/BlockTataraSmelting.java
  8. 4 1
      src/main/java/cn/mcmod/sakura/block/crop/BlockGrapeLeaves.java
  9. 4 1
      src/main/java/cn/mcmod/sakura/block/crop/BlockPepperCrop.java
  10. 1 1
      src/main/java/cn/mcmod/sakura/block/fluid/FluidBasic.java
  11. 14 15
      src/main/java/cn/mcmod/sakura/block/noodles/BlockNoodle.java
  12. 1 0
      src/main/java/cn/mcmod/sakura/block/noodles/BlockUdonUnfinished.java
  13. 2 3
      src/main/java/cn/mcmod/sakura/block/slab/BlockFallenLeaves.java
  14. 17 1
      src/main/java/cn/mcmod/sakura/event/SakuraEventLoader.java
  15. 0 13
      src/main/java/cn/mcmod/sakura/item/ItemBase.java
  16. 21 2
      src/main/java/cn/mcmod/sakura/item/ItemLoader.java
  17. 0 37
      src/main/java/cn/mcmod/sakura/item/ItemSeasoning.java
  18. 1 1
      src/main/java/cn/mcmod/sakura/item/tool/ItemBroom.java
  19. 38 0
      src/main/java/cn/mcmod/sakura/item/tool/ItemHammer.java
  20. 1 1
      src/main/java/cn/mcmod/sakura/item/tool/ItemKnifeNoodle.java
  21. 18 0
      src/main/java/cn/mcmod/sakura/util/OreWildIngredientFactory.java
  22. 81 0
      src/main/java/cn/mcmod/sakura/util/OreWildcardIngredient.java
  23. 12 10
      src/main/java/cn/mcmod/sakura/util/SakuraRecipeRegister.java
  24. 9 12
      src/main/java/cn/mcmod/sakura/util/WorldUtil.java
  25. 0 8
      src/main/java/cn/mcmod/sakura/world/gen/WorldGenHotSpring.java
  26. 57 0
      src/main/java/cn/mcmod/sakura/world/gen/WorldGenIronSand.java
  27. 14 18
      src/main/java/cn/mcmod/sakura/world/gen/WorldGenLoader.java
  28. 30 0
      src/main/resources/assets/sakura/blockstates/bamboo_charcoal_block.json
  29. 19 19
      src/main/resources/assets/sakura/blockstates/fluids.json
  30. 17 0
      src/main/resources/assets/sakura/blockstates/iron_sand.json
  31. 17 0
      src/main/resources/assets/sakura/blockstates/tatara.json
  32. 39 0
      src/main/resources/assets/sakura/blockstates/tatara_smelting.json
  33. 21 19
      src/main/resources/assets/sakura/lang/en_us.lang
  34. 28 27
      src/main/resources/assets/sakura/lang/zh_cn.lang
  35. 3 3
      src/main/resources/assets/sakura/models/block/bamboo.json
  36. 50 0
      src/main/resources/assets/sakura/models/item/bamboo_charcoal.json
  37. 4 4
      src/main/resources/assets/sakura/models/item/bamboo_sunburnt.json
  38. 6 0
      src/main/resources/assets/sakura/models/item/iron_hammer.json
  39. 6 0
      src/main/resources/assets/sakura/models/item/sagegane.json
  40. 6 0
      src/main/resources/assets/sakura/models/item/sakura_hammer.json
  41. 6 0
      src/main/resources/assets/sakura/models/item/steel_ingot.json
  42. 6 0
      src/main/resources/assets/sakura/models/item/stone_hammer.json
  43. 6 0
      src/main/resources/assets/sakura/models/item/tamahagane.json
  44. 6 0
      src/main/resources/assets/sakura/models/item/zuku.json
  45. 6 0
      src/main/resources/assets/sakura/models/item/zuku_ingot.json
  46. 21 0
      src/main/resources/assets/sakura/recipes/_constants.json
  47. 5 0
      src/main/resources/assets/sakura/recipes/_factories.json
  48. 14 0
      src/main/resources/assets/sakura/recipes/bamboo_charcoal.json
  49. 16 0
      src/main/resources/assets/sakura/recipes/bamboo_charcoal_block.json
  50. 1 1
      src/main/resources/assets/sakura/recipes/foodoil.json
  51. 2 2
      src/main/resources/assets/sakura/recipes/grape_fluid.json
  52. 2 2
      src/main/resources/assets/sakura/recipes/greengrape_fluid.json
  53. 19 0
      src/main/resources/assets/sakura/recipes/iron_ingot.json
  54. 2 2
      src/main/resources/assets/sakura/recipes/materials_36.json
  55. 28 0
      src/main/resources/assets/sakura/recipes/materials_53.json
  56. 28 0
      src/main/resources/assets/sakura/recipes/materials_54.json
  57. 20 0
      src/main/resources/assets/sakura/recipes/materials_56.json
  58. 17 0
      src/main/resources/assets/sakura/recipes/tatara.json
  59. 17 0
      src/main/resources/assets/sakura/recipes/tatara_1.json
  60. BIN
      src/main/resources/assets/sakura/textures/blocks/bamboo_charcoal.png
  61. BIN
      src/main/resources/assets/sakura/textures/blocks/bamboo_charcoal_block.png
  62. BIN
      src/main/resources/assets/sakura/textures/blocks/bamboo_charcoal_block_top.png
  63. BIN
      src/main/resources/assets/sakura/textures/blocks/iron_sand.png
  64. BIN
      src/main/resources/assets/sakura/textures/blocks/pasta.png
  65. BIN
      src/main/resources/assets/sakura/textures/blocks/ramen.png
  66. BIN
      src/main/resources/assets/sakura/textures/blocks/tatara.png
  67. BIN
      src/main/resources/assets/sakura/textures/blocks/tatara_finished.png
  68. 11 0
      src/main/resources/assets/sakura/textures/blocks/tatara_finished.png.mcmeta
  69. BIN
      src/main/resources/assets/sakura/textures/blocks/tatara_smelting.png
  70. 11 0
      src/main/resources/assets/sakura/textures/blocks/tatara_smelting.png.mcmeta
  71. BIN
      src/main/resources/assets/sakura/textures/items/hammer_iron.png
  72. BIN
      src/main/resources/assets/sakura/textures/items/hammer_sakura.png
  73. BIN
      src/main/resources/assets/sakura/textures/items/hammer_steel.png
  74. BIN
      src/main/resources/assets/sakura/textures/items/hammer_stone.png
  75. BIN
      src/main/resources/assets/sakura/textures/items/sagegane.png
  76. BIN
      src/main/resources/assets/sakura/textures/items/sakura_axe.png
  77. BIN
      src/main/resources/assets/sakura/textures/items/steel_ingot.png
  78. BIN
      src/main/resources/assets/sakura/textures/items/tamahagane.png
  79. BIN
      src/main/resources/assets/sakura/textures/items/zuku.png
  80. BIN
      src/main/resources/assets/sakura/textures/items/zuku_ingot.png

+ 1 - 1
build.gradle

@@ -10,7 +10,7 @@ buildscript {
 apply plugin: 'net.minecraftforge.gradle.forge'
 //Only edit below this line, the above code adds and enables the necessary things for Forge to be setup.
 
-version = "V0.0.8.1-MC1.12.2"
+version = "V0.0.9pre-MC1.12.2"
 group = "cn.mcmod.sakura" // http://maven.apache.org/guides/mini/guide-naming-conventions.html
 archivesBaseName = "Sakura"
 

+ 1 - 1
src/main/java/cn/mcmod/sakura/CreativeTabsSakura.java

@@ -13,7 +13,7 @@ public class CreativeTabsSakura extends CreativeTabs {
 
 	@Override
 	public ItemStack getTabIconItem() {
-		return new ItemStack(Item.getItemFromBlock(BlockLoader.MAPLE_LEAVE_RED));
+		return new ItemStack(Item.getItemFromBlock(BlockLoader.SAKURA_LEAVES));
 	}
 
 }

+ 13 - 0
src/main/java/cn/mcmod/sakura/SakuraConfig.java

@@ -16,16 +16,29 @@ public class SakuraConfig {
     @Config.RangeInt(min = 0, max = 2000)
     @Config.Comment("Changes generate rate of Vanilla. Increase value to gen more Vanilla.")
     public static int vanilla_weight = 90;
+    
     @Config.LangKey(config + "pepper_weight")
     @Config.RequiresMcRestart
     @Config.RangeInt(min = 0, max = 2000)
     @Config.Comment("Changes generate rate of Pepper. Increase value to gen more Pepper.")
     public static int pepper_weight = 90;
+    
     @Config.LangKey(config + "bambooshot_weight")
     @Config.RequiresMcRestart
     @Config.RangeInt(min = 0, max = 2000)
     @Config.Comment("Changes generate rate of BambooShot. Increase value to gen more BambooShot.")
     public static int bambooshot_weight = 90;
+    
+    @Config.LangKey(config + "iron_sand_amount")
+    @Config.RequiresMcRestart
+    @Config.RangeInt(min = 1, max = 5120)
+    @Config.Comment("Changes generate amount of Iron Sand. Increase value to gen more Iron Sand.")
+    public static int iron_sand_amount = 128;
+    
+    @Config.LangKey(config + "harder_iron_recipe")
+    @Config.RequiresMcRestart
+    @Config.Comment("Whether to enable a more difficult iron ingot recipe.")
+    public static boolean harder_iron_recipe=true;
 
     @SubscribeEvent
     public static void onConfigChanged(ConfigChangedEvent.OnConfigChangedEvent event) {

+ 5 - 0
src/main/java/cn/mcmod/sakura/SakuraOreDictLoader.java

@@ -51,6 +51,7 @@ public class SakuraOreDictLoader {
 		registerOre("seedRice", new ItemStack(ItemLoader.RICE_SEEDS, 1));
 		registerOre("foodSoysauce", new ItemStack(ItemLoader.MATERIAL, 1,33));
 
+		registerOre("foodShrimpraw", new ItemStack(ItemLoader.FOODSET, 1,78));
 		registerOre("cropRadish", new ItemStack(ItemLoader.RADISH, 1));
 		registerOre("cropCabbage", new ItemStack(ItemLoader.CABBAGE, 1));
 		registerOre("cropEggplant", new ItemStack(ItemLoader.EGGPLANT, 1));
@@ -105,6 +106,10 @@ public class SakuraOreDictLoader {
 		registerOre("cropAlmond", new ItemStack(ItemLoader.FOODSET, 1, 117));
 		registerOre("foodBlackberryjuice", new ItemStack(ItemLoader.FOODSET, 1, 118));
 		registerOre("foodOrangejuice", new ItemStack(ItemLoader.FOODSET, 1, 119));
+		registerOre("ingotSteel", new ItemStack(ItemLoader.MATERIAL, 1, 56));
+		registerOre("toolForginghammer", new ItemStack(ItemLoader.STONE_HAMMER, 1, Short.MAX_VALUE));
+		registerOre("toolForginghammer", new ItemStack(ItemLoader.IRON_HAMMER, 1, Short.MAX_VALUE));
+		registerOre("toolForginghammer", new ItemStack(ItemLoader.SAKURA_HAMMER, 1, Short.MAX_VALUE));
 		registerVanillaFoods();
 	}
 	

+ 14 - 2
src/main/java/cn/mcmod/sakura/block/BlockLoader.java

@@ -90,6 +90,7 @@ public class BlockLoader {
     public static BlockBambooShoot BAMBOOSHOOT = new BlockBambooShoot();
     public static Block BAMBOO_BLOCK = new BlockBambooBlock(Material.WOOD,false).setHardness(1.6F).setResistance(6.0F);
     public static Block BAMBOO_BLOCK_SUNBURNT = new BlockBambooBlock(Material.WOOD,true).setHardness(1.6F).setResistance(5.5F);
+    public static Block BAMBOO_CHARCOAL_BLOCK = new BlockBambooBlock(Material.WOOD,true).setHardness(1F).setResistance(5F);
     public static BlockSlabBase BAMBOO_SLAB = new BlockBambooSlab(Material.WOOD);
     public static BlockSlabBase BAMBOO_SLAB_SUNBURNT = new BlockBambooSlab(Material.WOOD);
     public static Block BAMBOOLANTERN = new BlockBambooLantern();
@@ -189,6 +190,10 @@ public class BlockLoader {
 	public static Block MAPLE_SPILE = new BlockMapleSpile();
 	public static Block TAIKO = new BlockTaiko();
 //	public static Block OBON = new BlockOben();
+	public static Block TATARA = new BlockTatara().setHardness(1.75F).setResistance(10.0F);
+	public static Block TATARA_SMELTING = new BlockTataraSmelting().setHardness(1.75F).setResistance(10.0F);
+	public static BlockBase IRON_SAND = (BlockBase) new BlockBase(Material.SAND).setSoundType(SoundType.SAND).setHardness(1.25F).setResistance(5.0F);
+
 	public BlockLoader(FMLPreInitializationEvent event) {
 //		register blocks
 //		DON'T REGISTER RENDERS IN THIS VOID,PLEASE!!!
@@ -257,7 +262,8 @@ public class BlockLoader {
 		LIQUEUR=registerFluidBlock(LIQUEUR_FLUID, new BlockFluidBasic(LIQUEUR_FLUID), "liqueur");
 		FluidRegistry.addBucketForFluid(COCOA_LIQUEUR_FLUID);
 		COCOA_LIQUEUR=registerFluidBlock(COCOA_LIQUEUR_FLUID, new BlockFluidBasic(COCOA_LIQUEUR_FLUID), "cocoa_liqueur");
-		
+		IRON_SAND.setHarvestLevel("shovel", 1);
+		register(IRON_SAND, new ItemBlock(IRON_SAND), "iron_sand");
         register(KAWARA_BLOCK, new ItemBlock(KAWARA_BLOCK), "kawara_block");
         register(KAWARA, new ItemBlock(KAWARA), "kawara");
         register(BAMBOO, new ItemBlock(BAMBOO), "bamboo");
@@ -271,6 +277,7 @@ public class BlockLoader {
         register(BAMBOO_PLANK_STAIR, new ItemBlock(BAMBOO_PLANK_STAIR), "stairs_plank_bamboo");
         register(BAMBOO_PLANK_SLAB, new ItemBlock(BAMBOO_PLANK_SLAB), "slab_plank_bamboo");
         register(BAMBOO_BLOCK, new ItemBlock(BAMBOO_BLOCK), "bamboo_block");
+        register(BAMBOO_CHARCOAL_BLOCK, new ItemBlock(BAMBOO_CHARCOAL_BLOCK), "bamboo_charcoal_block");
         register(BAMBOO_BLOCK_SUNBURNT, new ItemBlock(BAMBOO_BLOCK_SUNBURNT), "bamboo_block_sunburnt");
         register(BAMBOO_STAIR, new ItemBlock(BAMBOO_STAIR), "bamboo_stair");
         register(BAMBOO_SUNBURNT_STAIR, new ItemBlock(BAMBOO_SUNBURNT_STAIR), "bamboo_stair_sunburnt");
@@ -325,7 +332,8 @@ public class BlockLoader {
         register(SAKURA_PLANK, new ItemBlock(SAKURA_PLANK), "plank_sakura");
         register(SAKURA_PLANK_STAIR, new ItemBlock(SAKURA_PLANK_STAIR), "stairs_plank_sakura");
         register(SAKURA_PLANK_SLAB, new ItemBlock(SAKURA_PLANK_SLAB), "slab_plank_sakura");
-	
+        register(TATARA, new ItemBlock(TATARA), "tatara");
+        registerNoItem(TATARA_SMELTING,"tatara_smelting");
         register(MAPLE_SPILE, new ItemBlock(MAPLE_SPILE), "maple_spile");
 //        register(OBON, new ItemBlock(OBON), "obon");
         register(STONEMORTAR, new ItemBlock(STONEMORTAR), "stone_mortar");
@@ -390,7 +398,11 @@ public class BlockLoader {
 	@SideOnly(Side.CLIENT)
 	public static void registerRenders() {
 //		please register blocks' renders in THIS void!
+		registerRender(IRON_SAND);
 		registerRender(TAIKO);
+		registerRender(BAMBOO_CHARCOAL_BLOCK);
+		registerRender(TATARA);
+		registerRender(TATARA_SMELTING);
 //		registerRender(OBON);
 		registerRender(FALLEN_LEAVES_MAPLE_GREEN);
 		registerRender(FALLEN_LEAVES_MAPLE_ORANGE);

+ 43 - 0
src/main/java/cn/mcmod/sakura/block/BlockTatara.java

@@ -0,0 +1,43 @@
+package cn.mcmod.sakura.block;
+
+import net.minecraft.block.material.Material;
+import net.minecraft.block.state.IBlockState;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.init.Items;
+import net.minecraft.init.SoundEvents;
+import net.minecraft.item.ItemStack;
+import net.minecraft.util.EnumFacing;
+import net.minecraft.util.EnumHand;
+import net.minecraft.util.SoundCategory;
+import net.minecraft.util.math.BlockPos;
+import net.minecraft.world.IBlockAccess;
+import net.minecraft.world.World;
+
+public class BlockTatara extends BlockBase {
+	public BlockTatara() {
+		super(Material.ROCK);
+		this.setHarvestLevel("forging_hammer", 1);
+	}
+	@Override
+	public boolean onBlockActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) {
+	    if (worldIn.isRemote) {
+	    	worldIn.playSound(playerIn, pos, SoundEvents.ITEM_FLINTANDSTEEL_USE, SoundCategory.BLOCKS, 1.0F, 0.8F);
+            return true;
+        }
+		ItemStack stack = playerIn.getHeldItem(hand);
+		if (hand == EnumHand.MAIN_HAND) {
+	        if (stack.getItem() == Items.FLINT_AND_STEEL) {
+	            worldIn.setBlockState(pos, BlockLoader.TATARA_SMELTING.getDefaultState());
+	            stack.damageItem(1, playerIn);
+	            return true;
+	        }
+		}
+		return true;
+	}
+	@Override
+	public void onNeighborChange(IBlockAccess world, BlockPos pos, BlockPos neighbor) {
+		// TODO Auto-generated method stub
+		super.onNeighborChange(world, pos, neighbor);
+	}
+
+}

+ 114 - 0
src/main/java/cn/mcmod/sakura/block/BlockTataraSmelting.java

@@ -0,0 +1,114 @@
+package cn.mcmod.sakura.block;
+
+import java.util.Random;
+
+import cn.mcmod.sakura.item.ItemLoader;
+import net.minecraft.block.material.Material;
+import net.minecraft.block.properties.IProperty;
+import net.minecraft.block.properties.PropertyInteger;
+import net.minecraft.block.state.BlockStateContainer;
+import net.minecraft.block.state.IBlockState;
+import net.minecraft.item.ItemStack;
+import net.minecraft.util.NonNullList;
+import net.minecraft.util.math.BlockPos;
+import net.minecraft.world.IBlockAccess;
+import net.minecraft.world.World;
+
+public class BlockTataraSmelting extends BlockBase {
+	public static final PropertyInteger Timer = PropertyInteger.create("timer", 0, 3);
+	public BlockTataraSmelting() {
+		super(Material.IRON);
+		this.setDefaultState(this.blockState.getBaseState().withProperty(this.getTimerProperty(), Integer.valueOf(0)));
+		this.setTickRandomly(true);
+		this.setHarvestLevel("forging_hammer", 1);
+	}
+    public PropertyInteger getTimerProperty(){
+        return Timer;
+    }
+    @Override
+    public void getDrops(NonNullList<ItemStack> drops, IBlockAccess world, BlockPos pos, IBlockState state,
+    		int fortune) {
+        drops.clear();
+        if(!isFinished(state)){ 
+        	drops.add(new ItemStack(BlockLoader.TATARA));
+        	return ;
+        }
+        Random rand = world instanceof World ? ((World)world).rand : RANDOM;
+        if (rand.nextInt(9) == 0){
+        	for (int i = 0; i < 2 + fortune; ++i){
+            	if (rand.nextInt(1) == 0){
+            		 drops.add(new ItemStack(ItemLoader.MATERIAL, 1, 55));
+                }
+            }
+           
+        } else
+        for (int i = 0; i < 9 + fortune; ++i){
+        	if (rand.nextInt(9) <= 7){
+                drops.add(new ItemStack(ItemLoader.MATERIAL, 1, 52));
+            }
+        }
+    }
+    public void updateTick(World worldIn, BlockPos pos, IBlockState state, Random rand){
+        super.updateTick(worldIn, pos, state, rand);
+
+        if (!worldIn.isAreaLoaded(pos, 1)) return; // Forge: prevent loading unloaded chunks when checking neighbor's light
+            int i = this.getTime(state);
+            setSmelting(worldIn, pos);
+            if (i < this.getFinishTime()){
+                if(rand.nextInt(1) == 0){
+                    worldIn.setBlockState(pos, this.withTime(i + 1), 2);
+                }
+            }
+        
+    }
+    
+    public int getFinishTime(){
+        return 3;
+    }
+
+    protected int getTime(IBlockState state){
+        return state.getValue(this.getTimerProperty()).intValue();
+    }
+
+    public IBlockState withTime(int age){
+        return this.getDefaultState().withProperty(this.getTimerProperty(), Integer.valueOf(age));
+    }
+
+    public boolean isFinished(IBlockState state){
+        return state.getValue(this.getTimerProperty()).intValue() >= this.getFinishTime();
+    }
+    /**
+     * Convert the given metadata into a BlockState for this Block
+     */
+    public IBlockState getStateFromMeta(int meta)
+    {
+        return this.withTime(meta);
+    }
+
+    /**
+     * Convert the BlockState into the correct metadata value
+     */
+    public int getMetaFromState(IBlockState state)
+    {
+        return this.getTime(state);
+    }
+
+    protected BlockStateContainer createBlockState()
+    {
+        return new BlockStateContainer(this, new IProperty[] {Timer});
+    }
+	private void setSmelting(World worldIn, BlockPos pos) {
+        if(worldIn.getBlockState(pos.up()).getBlock() == BlockLoader.TATARA)
+    		worldIn.setBlockState(pos.up(), this.withTime(0), 2);
+        if(worldIn.getBlockState(pos.down()).getBlock() == BlockLoader.TATARA)
+    		worldIn.setBlockState(pos.down(), this.withTime(0), 2);
+        if(worldIn.getBlockState(pos.east()).getBlock() == BlockLoader.TATARA)
+    		worldIn.setBlockState(pos.east(), this.withTime(0), 2);
+        if(worldIn.getBlockState(pos.north()).getBlock() == BlockLoader.TATARA)
+    		worldIn.setBlockState(pos.north(), this.withTime(0), 2);
+        if(worldIn.getBlockState(pos.west()).getBlock() == BlockLoader.TATARA)
+    		worldIn.setBlockState(pos.west(), this.withTime(0), 2);
+        if(worldIn.getBlockState(pos.south()).getBlock() == BlockLoader.TATARA)
+    		worldIn.setBlockState(pos.south(), this.withTime(0), 2);
+	}
+}

+ 4 - 1
src/main/java/cn/mcmod/sakura/block/crop/BlockGrapeLeaves.java

@@ -46,6 +46,9 @@ public class BlockGrapeLeaves extends BlockCrops implements IShearable {
 	}
 	@Override
 	public boolean onBlockActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn,EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) {
+		if(worldIn.isRemote){
+			return true;
+		}
 		int i = this.getAge(state);
 		if(i>=6){
 			if(playerIn.getHeldItem(hand).getItem() instanceof ItemShears){
@@ -55,7 +58,7 @@ public class BlockGrapeLeaves extends BlockCrops implements IShearable {
 			worldIn.setBlockState(pos, this.getDefaultState().withProperty(AGE, 2));
 			}
 		}
-		return super.onBlockActivated(worldIn, pos, state, playerIn, hand, facing, hitX, hitY, hitZ);
+		return true;
 	}
     /**
      * Get the Item that this Block should drop when harvested.

+ 4 - 1
src/main/java/cn/mcmod/sakura/block/crop/BlockPepperCrop.java

@@ -48,6 +48,9 @@ public class BlockPepperCrop extends BlockCrops implements IShearable {
 	@Override
 	public boolean onBlockActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn,
 			EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) {
+		if(worldIn.isRemote){
+			return true;
+		}
 		int i = this.getAge(state);
 		if(i>=6){
 			if(playerIn.getHeldItem(hand).getItem() instanceof ItemShears){
@@ -57,7 +60,7 @@ public class BlockPepperCrop extends BlockCrops implements IShearable {
 			worldIn.setBlockState(pos, this.getDefaultState().withProperty(AGE, 2));
 			}
 		}
-		return super.onBlockActivated(worldIn, pos, state, playerIn, hand, facing, hitX, hitY, hitZ);
+		return true;
 	}
     /**
      * Get the Item that this Block should drop when harvested.

+ 1 - 1
src/main/java/cn/mcmod/sakura/block/fluid/FluidBasic.java

@@ -6,7 +6,7 @@ import net.minecraftforge.fluids.Fluid;
 
 public class FluidBasic extends Fluid {
     public FluidBasic(String name) {
-        super(name, new ResourceLocation(SakuraMain.MODID, "blocks/"+name+"_still"), new ResourceLocation(SakuraMain.MODID, "blocks/"+name+"_flow"));
+        super(SakuraMain.MODID+"."+name, new ResourceLocation(SakuraMain.MODID, "blocks/"+name+"_still"), new ResourceLocation(SakuraMain.MODID, "blocks/"+name+"_flow"));
     }
 
 }

+ 14 - 15
src/main/java/cn/mcmod/sakura/block/noodles/BlockNoodle.java

@@ -1,6 +1,6 @@
 package cn.mcmod.sakura.block.noodles;
 
-import cn.mcmod.sakura.item.ItemKnifeNoodle;
+import cn.mcmod.sakura.item.tool.ItemKnifeNoodle;
 import net.minecraft.block.Block;
 import net.minecraft.block.material.Material;
 import net.minecraft.block.properties.IProperty;
@@ -66,8 +66,7 @@ public abstract class BlockNoodle extends Block {
     @Override
     public boolean onBlockActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn,
     		EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) {
-    	if (worldIn.isRemote)
-        {
+    	if (worldIn.isRemote) {
             return true;
         }
 		int i = this.getCutting(state);
@@ -138,18 +137,18 @@ public abstract class BlockNoodle extends Block {
     {
         return new BlockStateContainer(this, new IProperty[] {CUTTING});
     }
-	  @Override
-	    public boolean isFullCube(IBlockState state) {
-	        return false;
-	    }
+	@Override
+    public boolean isFullCube(IBlockState state) {
+        return false;
+    }
 
-	    @SideOnly(Side.CLIENT)
-	    public BlockRenderLayer getBlockLayer() {
-	        return BlockRenderLayer.CUTOUT;
-	    }
+    @SideOnly(Side.CLIENT)
+    public BlockRenderLayer getBlockLayer() {
+        return BlockRenderLayer.CUTOUT;
+    }
 
-	    @Override
-	    public boolean isOpaqueCube(IBlockState state) {
-	        return false;
-	    }
+    @Override
+    public boolean isOpaqueCube(IBlockState state) {
+        return false;
+    }
 }

+ 1 - 0
src/main/java/cn/mcmod/sakura/block/noodles/BlockUdonUnfinished.java

@@ -31,6 +31,7 @@ public class BlockUdonUnfinished extends Block {
      */
     @Override
     public void onFallenUpon(World worldIn, BlockPos pos, Entity entityIn, float fallDistance) {
+    	if(worldIn.isRemote) return;
         if (worldIn.rand.nextInt(80)==0) {
             worldIn.setBlockState(pos, BlockLoader.UDON_BLOCK.getDefaultState());
         }

+ 2 - 3
src/main/java/cn/mcmod/sakura/block/slab/BlockFallenLeaves.java

@@ -15,13 +15,12 @@ import net.minecraft.util.NonNullList;
 import net.minecraft.util.math.AxisAlignedBB;
 import net.minecraft.util.math.BlockPos;
 import net.minecraft.world.IBlockAccess;
-import net.minecraft.world.World;
 import net.minecraftforge.common.IShearable;
 import net.minecraftforge.fml.relauncher.Side;
 import net.minecraftforge.fml.relauncher.SideOnly;
 
 public class BlockFallenLeaves extends BlockBase implements IShearable{
-	protected static final AxisAlignedBB CARPET_AABB = new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 0.0625D, 1.0D);
+	protected static final AxisAlignedBB CARPET_AABB = new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 0.125D, 1.0D);
 	public BlockFallenLeaves(Material material) {
 		super(material);
 	}
@@ -30,7 +29,7 @@ public class BlockFallenLeaves extends BlockBase implements IShearable{
 		return NULL_AABB;
 	}
 	@Override
-	public AxisAlignedBB getSelectedBoundingBox(IBlockState state, World worldIn, BlockPos pos) {
+	public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) {
 		return CARPET_AABB;
 	}
 	@Override

+ 17 - 1
src/main/java/cn/mcmod/sakura/event/SakuraEventLoader.java

@@ -6,12 +6,15 @@ import java.util.Set;
 import com.google.common.collect.ImmutableSet;
 
 import cn.mcmod.sakura.ClientProxy;
+import cn.mcmod.sakura.SakuraConfig;
 import cn.mcmod.sakura.SakuraMain;
+import cn.mcmod.sakura.block.BlockLoader;
 import cn.mcmod.sakura.item.ItemLoader;
 import cn.mcmod.sakura.packet.PacketKeyMessage;
 import cn.mcmod.sakura.util.ClientUtils;
 import net.minecraft.item.ItemStack;
 import net.minecraft.item.crafting.IRecipe;
+import net.minecraft.util.text.TextComponentTranslation;
 import net.minecraft.world.storage.loot.LootEntry;
 import net.minecraft.world.storage.loot.LootEntryItem;
 import net.minecraft.world.storage.loot.LootTableList;
@@ -21,9 +24,11 @@ import net.minecraft.world.storage.loot.functions.LootFunction;
 import net.minecraft.world.storage.loot.functions.SetMetadata;
 import net.minecraftforge.event.LootTableLoadEvent;
 import net.minecraftforge.event.RegistryEvent;
+import net.minecraftforge.event.furnace.FurnaceFuelBurnTimeEvent;
 import net.minecraftforge.fml.common.Mod.EventBusSubscriber;
 import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
 import net.minecraftforge.fml.common.gameevent.InputEvent;
+import net.minecraftforge.fml.common.gameevent.PlayerEvent.PlayerLoggedInEvent;
 import net.minecraftforge.fml.common.gameevent.TickEvent;
 import net.minecraftforge.fml.relauncher.Side;
 import net.minecraftforge.fml.relauncher.SideOnly;
@@ -34,6 +39,13 @@ public class SakuraEventLoader {
             .add(LootTableList.GAMEPLAY_FISHING_FISH.toString())
             .build();
     private final static Set<LootEntry> FishinglootPools = new HashSet<LootEntry>();
+    @SubscribeEvent
+    public static void onFuelRegister(FurnaceFuelBurnTimeEvent event) {
+    	if(ItemStack.areItemsEqual(event.getItemStack(), new ItemStack(ItemLoader.MATERIAL, 1,51)))
+    		event.setBurnTime(1600);
+    	if(ItemStack.areItemsEqual(event.getItemStack(), new ItemStack(BlockLoader.BAMBOO_CHARCOAL_BLOCK)))
+    		event.setBurnTime(8000);
+	}
     
     @SubscribeEvent
 	public static void OnRecipeRegister(RegistryEvent.Register<IRecipe> event) {
@@ -68,5 +80,9 @@ public class SakuraEventLoader {
 			ClientProxy.getNetwork().sendToServer(new PacketKeyMessage(SakuraMain.MODID));
 		 }
 	}
-
+    @SubscribeEvent
+	public static void onPlayerLoggin(PlayerLoggedInEvent event) {
+    	if(SakuraConfig.harder_iron_recipe)
+		event.player.sendMessage(new TextComponentTranslation("sakura.warning.harder_iron_recipe_enabled", new Object()));
+	}
 }

+ 0 - 13
src/main/java/cn/mcmod/sakura/item/ItemBase.java

@@ -2,7 +2,6 @@ package cn.mcmod.sakura.item;
 
 import cn.mcmod.sakura.SakuraMain;
 import net.minecraft.creativetab.CreativeTabs;
-import net.minecraft.entity.item.EntityItem;
 import net.minecraft.entity.player.EntityPlayer;
 import net.minecraft.init.SoundEvents;
 import net.minecraft.item.Item;
@@ -64,16 +63,4 @@ public class ItemBase extends Item {
 		return super.onItemRightClick(worldIn, playerIn, handIn);
 	}
 
-	@Override
-	public boolean onEntityItemUpdate(EntityItem entityItem) {
-		if (entityItem.isInWater()) {
-			if (entityItem.getItem().getMetadata() == 4) {
-				entityItem.getItem().setItemDamage(6);
-			}
-			if (entityItem.getItem().getMetadata() == 5) {
-				entityItem.getItem().setItemDamage(7);
-			}
-		}
-		return super.onEntityItemUpdate(entityItem);
-	}
 }

+ 21 - 2
src/main/java/cn/mcmod/sakura/item/ItemLoader.java

@@ -12,6 +12,9 @@ import cn.mcmod.sakura.item.katana.ItemKotachi;
 import cn.mcmod.sakura.item.katana.ItemSheath;
 import cn.mcmod.sakura.item.katana.ItemSheathKatana;
 import cn.mcmod.sakura.item.katana.ItemShinai;
+import cn.mcmod.sakura.item.tool.ItemBroom;
+import cn.mcmod.sakura.item.tool.ItemHammer;
+import cn.mcmod.sakura.item.tool.ItemKnifeNoodle;
 import cn.mcmod.sakura.util.JSON_Creator;
 import net.minecraft.client.renderer.block.model.ModelResourceLocation;
 import net.minecraft.init.Blocks;
@@ -19,6 +22,7 @@ import net.minecraft.init.MobEffects;
 import net.minecraft.init.SoundEvents;
 import net.minecraft.inventory.EntityEquipmentSlot;
 import net.minecraft.item.*;
+import net.minecraft.item.Item.ToolMaterial;
 import net.minecraft.potion.PotionEffect;
 import net.minecraft.util.ResourceLocation;
 import net.minecraftforge.client.model.ModelLoader;
@@ -362,7 +366,6 @@ public class ItemLoader {
             SakuraMain.MODID + "." + "alkaline",//35
             SakuraMain.MODID + "." + "yeast",//36
             SakuraMain.MODID + "." + "hop",//37
-            
             SakuraMain.MODID + "." + "brown_rice",//38
             SakuraMain.MODID + "." + "green_tea_leaves",//39
             SakuraMain.MODID + "." + "black_tea_leaves",//40
@@ -374,9 +377,15 @@ public class ItemLoader {
             SakuraMain.MODID + "." + "mint_tea_leaves",//46
             SakuraMain.MODID + "." + "empty_bottle",//47
             SakuraMain.MODID + "." + "bamboo_sunburnt",//48
-           
             SakuraMain.MODID + "." + "maple_syrup",//49
             SakuraMain.MODID + "." + "coin",//50
+            SakuraMain.MODID + "." + "bamboo_charcoal",//51
+            
+            SakuraMain.MODID + "." + "zuku",//52
+            SakuraMain.MODID + "." + "zuku_ingot",//53
+            SakuraMain.MODID + "." + "sagegane",//54
+            SakuraMain.MODID + "." + "tamahagane",//55
+            SakuraMain.MODID + "." + "steel_ingot",//56
             });
     public static Item POT = new ItemPot();
     public static Item KNIFE_NOODLE = new ItemKnifeNoodle();
@@ -395,6 +404,9 @@ public class ItemLoader {
     public static Item HAORI = new ItemHaori();
     public static ItemSheathKatana KATANA_SHEATH = new ItemSheathKatana(KATANA);
     public static ItemSheathKatana SAKURAKATANA_SHEATH = new ItemSheathKatana(SAKURAKATANA);
+    public static Item STONE_HAMMER = new ItemHammer(ToolMaterial.STONE).setUnlocalizedName(SakuraMain.MODID + "." + "stone_hammer");
+    public static Item IRON_HAMMER = new ItemHammer(ToolMaterial.IRON).setUnlocalizedName(SakuraMain.MODID + "." + "iron_hammer");
+    public static Item SAKURA_HAMMER = new ItemHammer(SAKURA_TOOLMATERIAL).setUnlocalizedName(SakuraMain.MODID + "." + "sakura_hammer");
     public ItemLoader(FMLPreInitializationEvent event) {
     	register(cup);
         register(POT);
@@ -436,7 +448,11 @@ public class ItemLoader {
         register(SAMURAI_CHEST);
         register(SAMURAI_PANTS);
         register(SAMURAI_SHOES);
+    	register(STONE_HAMMER);
+        register(IRON_HAMMER);
+        register(SAKURA_HAMMER);
         MinecraftForge.addGrassSeed(new ItemStack(TOMATO_SEEDS), 2);
+        MinecraftForge.addGrassSeed(new ItemStack(ONION_SEEDS), 2);
         MinecraftForge.addGrassSeed(new ItemStack(EGGPLANT_SEEDS), 2);
         MinecraftForge.addGrassSeed(new ItemStack(CABBAGE_SEEDS), 2);
         MinecraftForge.addGrassSeed(new ItemStack(RADISH_SEEDS), 2);
@@ -448,6 +464,9 @@ public class ItemLoader {
 
     @SideOnly(Side.CLIENT)
     public static void registerRenders() {
+    	registerRender(STONE_HAMMER);
+    	registerRender(IRON_HAMMER);
+        registerRender(SAKURA_HAMMER);
     	registerRender(SHEATH);
     	registerRender(HAORI);
     	registerRender(KIMONO);

+ 0 - 37
src/main/java/cn/mcmod/sakura/item/ItemSeasoning.java

@@ -1,37 +0,0 @@
-package cn.mcmod.sakura.item;
-
-import net.minecraft.init.Items;
-import net.minecraft.item.Item;
-import net.minecraft.item.ItemStack;
-
-public class ItemSeasoning extends Item {
-    public ItemSeasoning(String name, int damage) {
-        setUnlocalizedName(name);
-        setMaxDamage(damage);
-        setMaxStackSize(1);
-        setContainerItem(Items.GLASS_BOTTLE);
-    }
-
-    @Override
-    public ItemStack getContainerItem(ItemStack itemStack) {
-        int dmg = itemStack.getItemDamage();
-        if (dmg < this.getMaxDamage(itemStack))
-        {
-            ItemStack stack = itemStack.copy();
-            stack.setItemDamage(dmg +1);
-            return stack;
-        }
-		return super.getContainerItem(itemStack);
-    }
-
-    @Override
-    public boolean hasContainerItem(ItemStack stack) {
-        int dmg = stack.getItemDamage();
-        if (dmg < this.getMaxDamage(stack))
-        {
-            return true;
-        }
-		return super.hasContainerItem(stack);
-    }
-
-}

+ 1 - 1
src/main/java/cn/mcmod/sakura/item/ItemBroom.java → src/main/java/cn/mcmod/sakura/item/tool/ItemBroom.java

@@ -1,4 +1,4 @@
-package cn.mcmod.sakura.item;
+package cn.mcmod.sakura.item.tool;
 
 import net.minecraft.block.Block;
 import net.minecraft.block.BlockFarmland;

+ 38 - 0
src/main/java/cn/mcmod/sakura/item/tool/ItemHammer.java

@@ -0,0 +1,38 @@
+package cn.mcmod.sakura.item.tool;
+
+import java.util.Set;
+
+import com.google.common.collect.Sets;
+
+import cn.mcmod.sakura.block.BlockLoader;
+import net.minecraft.block.Block;
+import net.minecraft.item.ItemStack;
+import net.minecraft.item.ItemTool;
+
+public class ItemHammer extends ItemTool {
+    private static final Set<Block> EFFECTIVE_ON = Sets.newHashSet(BlockLoader.TATARA,BlockLoader.TATARA_SMELTING);
+
+	public ItemHammer(ToolMaterial materialIn) {
+		super(materialIn, EFFECTIVE_ON);
+		this.setHarvestLevel("forging_hammer", materialIn.getHarvestLevel());
+	}
+	@Override
+	public ItemStack getContainerItem(ItemStack itemStack) {
+		 int dmg = itemStack.getItemDamage();
+		 if (dmg < this.getMaxDamage(itemStack)) {
+			 ItemStack stack = itemStack.copy();
+			 stack.setItemDamage(dmg+1);
+	         return stack;
+	        }
+		return super.getContainerItem(itemStack);
+	}
+
+	@Override
+	public boolean hasContainerItem(ItemStack stack) {
+		  int dmg = stack.getItemDamage();
+		  if (dmg < this.getMaxDamage(stack)) {
+	            return true;
+	        }
+		return super.hasContainerItem(stack);
+	}
+}

+ 1 - 1
src/main/java/cn/mcmod/sakura/item/ItemKnifeNoodle.java → src/main/java/cn/mcmod/sakura/item/tool/ItemKnifeNoodle.java

@@ -1,4 +1,4 @@
-package cn.mcmod.sakura.item;
+package cn.mcmod.sakura.item.tool;
 
 import cn.mcmod.sakura.SakuraMain;
 import net.minecraft.item.ItemStack;

+ 18 - 0
src/main/java/cn/mcmod/sakura/util/OreWildIngredientFactory.java

@@ -0,0 +1,18 @@
+package cn.mcmod.sakura.util;
+
+import javax.annotation.Nonnull;
+
+import com.google.gson.JsonObject;
+
+import net.minecraft.item.crafting.Ingredient;
+import net.minecraft.util.JsonUtils;
+import net.minecraftforge.common.crafting.IIngredientFactory;
+import net.minecraftforge.common.crafting.JsonContext;
+
+public final class OreWildIngredientFactory implements IIngredientFactory {
+    @Nonnull
+    @Override
+    public Ingredient parse(JsonContext context, JsonObject json) {
+        return new OreWildcardIngredient(JsonUtils.getString(json, "ore"));
+    }
+}

+ 81 - 0
src/main/java/cn/mcmod/sakura/util/OreWildcardIngredient.java

@@ -0,0 +1,81 @@
+package cn.mcmod.sakura.util;
+
+import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
+
+import it.unimi.dsi.fastutil.ints.IntArrayList;
+import it.unimi.dsi.fastutil.ints.IntComparators;
+import it.unimi.dsi.fastutil.ints.IntList;
+import net.minecraft.client.util.RecipeItemHelper;
+import net.minecraft.item.ItemStack;
+import net.minecraft.util.NonNullList;
+import net.minecraftforge.oredict.OreDictionary;
+import net.minecraftforge.oredict.OreIngredient;
+
+public class OreWildcardIngredient extends OreIngredient {
+    private NonNullList<ItemStack> ores;
+    private IntList itemIds = null;
+    private ItemStack[] array = null;
+    private int lastSizeA = -1, lastSizeL = -1;
+
+    public OreWildcardIngredient(String ore){
+        super(ore);
+        ores = OreDictionary.getOres(ore);
+    }
+
+    @Override
+    @Nonnull
+    public ItemStack[] getMatchingStacks() {
+        if (array == null || this.lastSizeA != ores.size()) {
+            NonNullList<ItemStack> lst = NonNullList.create();
+            for (ItemStack itemstack : this.ores){
+                    lst.add(itemstack);
+            }
+            this.array = lst.toArray(new ItemStack[lst.size()]);
+            this.lastSizeA = ores.size();
+        }
+        return this.array;
+    }
+
+
+    @Override
+    @Nonnull
+    public IntList getValidItemStacksPacked() {
+        if (this.itemIds == null || this.lastSizeL != ores.size()) {
+            this.itemIds = new IntArrayList(this.ores.size());
+
+            for (ItemStack itemstack : this.ores) {
+             this.itemIds.add(RecipeItemHelper.pack(itemstack));
+            }
+
+            this.itemIds.sort(IntComparators.NATURAL_COMPARATOR);
+            this.lastSizeL = ores.size();
+        }
+
+        return this.itemIds;
+    }
+
+
+    @Override
+    public boolean apply(@Nullable ItemStack input) {
+        if (input == null)
+            return false;
+
+        for (ItemStack target : this.ores)
+            if (RecipesUtil.itemMatches(target, input, false))
+                return true;
+
+        return false;
+    }
+
+    @Override
+    protected void invalidate() {
+        this.itemIds = null;
+        this.array = null;
+    }
+
+    @Override
+    public boolean isSimple() {
+        return false;
+    }
+}

+ 12 - 10
src/main/java/cn/mcmod/sakura/util/SakuraRecipeRegister.java

@@ -5,6 +5,7 @@ import java.util.List;
 
 import org.apache.logging.log4j.Level;
 
+import cn.mcmod.sakura.SakuraConfig;
 import cn.mcmod.sakura.SakuraMain;
 import cn.mcmod.sakura.api.recipes.BarrelRecipes;
 import cn.mcmod.sakura.api.recipes.DistillationRecipes;
@@ -25,6 +26,7 @@ import net.minecraftforge.fluids.FluidStack;
 import net.minecraftforge.fluids.FluidUtil;
 import net.minecraftforge.fml.common.Loader;
 import net.minecraftforge.fml.common.Optional.Method;
+import net.minecraftforge.oredict.OreDictionary;
 
 public class SakuraRecipeRegister {
 	public static List<IAction> actions = new ArrayList<IAction>();
@@ -100,6 +102,7 @@ public class SakuraRecipeRegister {
 	}
 	
     public static void furnaceRegister() {
+    	FurnaceRecipes.instance().addSmeltingRecipe(new ItemStack(BlockLoader.IRON_SAND), new ItemStack(Items.IRON_INGOT), 0.1F);
         FurnaceRecipes.instance().addSmeltingRecipe(new ItemStack(ItemLoader.MATERIAL, 1, 1), new ItemStack(ItemLoader.MATERIAL, 1, 38), 0.1F);
         FurnaceRecipes.instance().addSmeltingRecipe(new ItemStack(ItemLoader.MATERIAL, 1, 21), new ItemStack(ItemLoader.MATERIAL, 1, 22), 0.1F);
         FurnaceRecipes.instance().addSmeltingRecipe(new ItemStack(ItemLoader.EGGPLANT, 1), new ItemStack(ItemLoader.FOODSET, 1, 87), 0.1F);
@@ -111,7 +114,13 @@ public class SakuraRecipeRegister {
         FurnaceRecipes.instance().addSmeltingRecipe(new ItemStack(ItemLoader.MATERIAL, 1, 31), new ItemStack(ItemLoader.FOODSET, 1, 73), 0.1F);
 		FurnaceRecipes.instance().addSmeltingRecipe(new ItemStack(BlockLoader.MAPLE_LOG, 1), new ItemStack(Items.COAL, 1, 1), 0.1F);
 		FurnaceRecipes.instance().addSmeltingRecipe(new ItemStack(BlockLoader.SAKURA_LOG, 1), new ItemStack(Items.COAL, 1, 1), 0.1F);
-		FurnaceRecipes.instance().addSmeltingRecipe(new ItemStack(BlockLoader.BAMBOO_BLOCK, 1), new ItemStack(Items.COAL, 1, 1), 0.1F);
+		FurnaceRecipes.instance().addSmeltingRecipe(new ItemStack(BlockLoader.BAMBOO_BLOCK, 1), new ItemStack(BlockLoader.BAMBOO_CHARCOAL_BLOCK), 0.1F);
+		FurnaceRecipes.instance().addSmeltingRecipe(new ItemStack(BlockLoader.BAMBOO, 1), new ItemStack(ItemLoader.MATERIAL, 1, 51), 0.1F);
+    	if(SakuraConfig.harder_iron_recipe)
+		FurnaceRecipes.instance().getSmeltingList().forEach((key,value) ->{
+    		if(RecipesUtil.containsMatch(false, OreDictionary.getOres("ingotIron"), value))
+    			FurnaceRecipes.instance().getSmeltingList().put(key, new ItemStack(ItemLoader.MATERIAL,1,52));
+    	});
     }
 
     public static void barrelRegister() {
@@ -999,7 +1008,7 @@ public class SakuraRecipeRegister {
         PotRecipes.addRecipe(
                 new PotRecipes(
                         new ItemStack(ItemLoader.FOODSET, 2, 79),
-                        new ItemStack(ItemLoader.FOODSET, 1, 78),
+                        "foodShrimpraw",
                         new Object[]{
                         new ItemStack(ItemLoader.MATERIAL, 1, 14),
                         },
@@ -1103,14 +1112,6 @@ public class SakuraRecipeRegister {
                         "listAllmeatraw"
                         },
                         new FluidStack(FluidRegistry.WATER, 200)));
-//        PotRecipes.addPotRecipe(
-//                new PotRecipes(
-//                        new ItemStack(ItemLoader.FOODSET, 2, 79),
-//                        new ItemStack(ItemLoader.FOODSET, 1, 78),
-//                        new Object[]{
-//                        new ItemStack(ItemLoader.MATERIAL, 1, 14)
-//                        },
-//                        new FluidStack(FluidRegistry.WATER, 200)));
         PotRecipes.addRecipe(
                 new PotRecipes(
                         new ItemStack(ItemLoader.MATERIAL, 2, 13),
@@ -1251,4 +1252,5 @@ public class SakuraRecipeRegister {
                         },
                         new FluidStack(FluidRegistry.WATER, 200)));
     }
+
 }

+ 9 - 12
src/main/java/cn/mcmod/sakura/util/WorldUtil.java

@@ -17,7 +17,10 @@ import net.minecraft.world.World;
 import net.minecraftforge.fluids.IFluidBlock;
 
 public class WorldUtil {
-    
+//    public static boolean buildPit(World par1World, BlockPos pos, Block block) {
+//    	
+//		return false;
+//	}
     public static int getHeatStrength(World par1World, BlockPos pos) {
         for (int i = 1; i < 5; i++) {
             Block block = par1World.getBlockState(pos.down(i)).getBlock();
@@ -32,18 +35,17 @@ public class WorldUtil {
     }
     
     @Nullable
-    public static BlockPos.MutableBlockPos findGround(World world, BlockPos pos, boolean ignoreLeaves, boolean stopOnFluid, boolean useWorldHeight)
-    {
+    public static BlockPos.MutableBlockPos findGround(World world, BlockPos pos, boolean ignoreLeaves, boolean stopOnFluid, boolean useWorldHeight){
         return findGround(world, pos, ignoreLeaves, stopOnFluid, useWorldHeight, 8);
     }
 
     @Nullable
-    public static BlockPos.MutableBlockPos findGround(World world, BlockPos pos, boolean ignoreLeaves, boolean stopOnFluid, boolean useWorldHeight, int offset)
-    {
+    public static BlockPos.MutableBlockPos findGround(World world, BlockPos pos, boolean ignoreLeaves, boolean stopOnFluid, boolean useWorldHeight, int offset) {
+        if (pos.getY() <= 4) {
+            return null;
+        }
         if (useWorldHeight)
-        {
             pos = world.getHeight(pos);
-        }
 
         BlockPos.MutableBlockPos position = new BlockPos.MutableBlockPos(pos);
         if (position.getY() > 0){
@@ -51,19 +53,14 @@ public class WorldUtil {
             do {
                 IBlockState state = world.getBlockState(position);
                 if (stopOnFluid && (state.getBlock() instanceof BlockLiquid || state.getBlock() instanceof IFluidBlock))
-                {
                    return position.move(EnumFacing.UP);
-                }
 
                 if (!state.getBlock().isReplaceable(world, position) && (!ignoreLeaves || !state.getBlock().isLeaves(state, world, position)))
-                {
                     return position.move(EnumFacing.UP);
-                }
             }
             while (yOrigin - position.getY() < 40 && position.move(EnumFacing.DOWN).getY() > 0);
         }
         return null;
     }
 
-    
 }

+ 0 - 8
src/main/java/cn/mcmod/sakura/world/gen/WorldGenHotSpring.java

@@ -13,14 +13,6 @@ import net.minecraft.world.gen.feature.WorldGenerator;
 
 public class WorldGenHotSpring extends WorldGenerator{
     public boolean generate(World worldIn, Random rand, BlockPos position) {
-        for (position = position.add(-8, 0, -8); position.getY() > 5 && worldIn.isAirBlock(position); position = position.down()) {
-            ;
-        }
-
-        if (position.getY() <= 4)
-        {
-            return false;
-        }
 		position = position.down(4);
 		boolean[] aboolean = new boolean[2048];
 		int i = rand.nextInt(4) + 4;

+ 57 - 0
src/main/java/cn/mcmod/sakura/world/gen/WorldGenIronSand.java

@@ -0,0 +1,57 @@
+package cn.mcmod.sakura.world.gen;
+
+import cn.mcmod.sakura.block.BlockLoader;
+
+import java.util.Random;
+
+import net.minecraft.block.Block;
+import net.minecraft.block.BlockLiquid;
+import net.minecraft.block.material.Material;
+import net.minecraft.block.state.IBlockState;
+import net.minecraft.init.Blocks;
+import net.minecraft.util.EnumFacing;
+import net.minecraft.util.math.BlockPos;
+import net.minecraft.world.World;
+import net.minecraft.world.biome.BiomeBeach;
+import net.minecraft.world.biome.BiomeRiver;
+import net.minecraft.world.chunk.IChunkProvider;
+import net.minecraft.world.gen.IChunkGenerator;
+import net.minecraftforge.fml.common.IWorldGenerator;
+
+public class WorldGenIronSand implements IWorldGenerator {
+	private final int block_count;
+    public WorldGenIronSand(int blockCount) {
+    	block_count=blockCount;
+    }
+
+	@Override
+	public void generate(Random rand, int chunkX, int chunkZ, World worldIn, IChunkGenerator chunkGenerator, IChunkProvider chunkProvider) {
+		  for (int i = 0; i < block_count; i++) {
+	            int rX = (chunkX  * 16) + rand.nextInt(16) + 8;
+	            int rY = 48 + rand.nextInt(19);
+	            int rZ = (chunkZ  * 16) + rand.nextInt(16) + 8;
+	            BlockPos pos = new BlockPos(rX, rY, rZ);
+	            IBlockState stateAt = worldIn.getBlockState(pos);
+	            if(!stateAt.getBlock().equals(Blocks.SAND)) {
+	                continue;
+	            }
+
+	            boolean canSpawn = false;
+	            for (int yy = 0; yy < 2; yy++) {
+	                BlockPos check = pos.offset(EnumFacing.UP, yy);
+	                IBlockState bs = worldIn.getBlockState(check);
+	                Block block = bs.getBlock();
+	                if(worldIn.getBiome(pos) instanceof BiomeBeach|| worldIn.getBiome(pos) instanceof BiomeRiver)
+	                if((worldIn.isAirBlock(pos.up())||block instanceof BlockLiquid && bs.getMaterial() == Material.WATER)) {
+	                    canSpawn = true;
+	                    break;
+	                }
+	            }
+	            if(!canSpawn)
+	                continue;
+	            worldIn.setBlockState(pos, BlockLoader.IRON_SAND.getDefaultState());
+//	            SakuraMain.logger.info(String.format("Iron Sand in: %d %d %d", pos.getX(),pos.getY(),pos.getZ()));
+	        }
+	}
+
+}

+ 14 - 18
src/main/java/cn/mcmod/sakura/world/gen/WorldGenLoader.java

@@ -1,23 +1,27 @@
 package cn.mcmod.sakura.world.gen;
 
+import cn.mcmod.sakura.SakuraConfig;
 import cn.mcmod.sakura.block.BlockLoader;
 import cn.mcmod.sakura.util.WorldUtil;
 import cn.mcmod.sakura.world.biome.SakuraBiomes;
 import net.minecraft.init.Biomes;
 import net.minecraft.util.math.BlockPos;
 import net.minecraft.world.World;
+import net.minecraft.world.WorldProviderSurface;
 import net.minecraft.world.biome.Biome;
 import net.minecraft.world.gen.feature.WorldGenMinable;
 import net.minecraftforge.event.terraingen.DecorateBiomeEvent.Decorate;
 import net.minecraftforge.event.terraingen.OreGenEvent;
 import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
+import net.minecraftforge.fml.common.registry.GameRegistry;
 
 public class WorldGenLoader {
 	
 	public WorldGenLoader() {
-//		GameRegistry.registerWorldGenerator(new WorldGenBambooShot(), 1);
-//		GameRegistry.registerWorldGenerator(new WorldGenPepper(), 1);
-//		GameRegistry.registerWorldGenerator(new WorldGenVanilla(), 1);
+		GameRegistry.registerWorldGenerator(new WorldGenBambooShot(), 1);
+		GameRegistry.registerWorldGenerator(new WorldGenPepper(), 1);
+		GameRegistry.registerWorldGenerator(new WorldGenVanilla(), 1);
+		GameRegistry.registerWorldGenerator(new WorldGenIronSand(SakuraConfig.iron_sand_amount), 1);
 	}
 	@SubscribeEvent
 	public void onOreGen(OreGenEvent.Post event) {
@@ -30,24 +34,16 @@ public class WorldGenLoader {
                     new WorldGenMinable(BlockLoader.SAKURA_DIAMOND_ORE.getDefaultState(),3 + event.getRand().nextInt(5)).generate(worldIn, event.getRand(), pos);
                 }
         }
-
 	}
     @SubscribeEvent
     public void HotSpringGen(Decorate event) {
-    	BlockPos pos = event.getChunkPos().getBlock( event.getRand().nextInt(16) + 8, 0, event.getRand().nextInt(16) + 8);
-        Biome biome = event.getWorld().getBiome(pos);
-    	if (biome != Biomes.DESERT && biome != Biomes.DESERT_HILLS && event.getRand().nextInt(500) == 0
-    		) {
-            new WorldGenHotSpring().generate(event.getWorld(), event.getRand(), WorldUtil.findGround(event.getWorld(),pos, true, false, true));
-        }
-	}
-    @SubscribeEvent
-    public void cropGen(Decorate event) {
-    	BlockPos pos = event.getChunkPos().getBlock( event.getRand().nextInt(16) + 8, 0, event.getRand().nextInt(16) + 8);
-        Biome biome = event.getWorld().getBiome(pos);
-    	if (biome != Biomes.DESERT && biome != Biomes.DESERT_HILLS && biome != Biomes.OCEAN && event.getRand().nextInt(500) == 0
-    		) {
-            new WorldGenHotSpring().generate(event.getWorld(), event.getRand(), WorldUtil.findGround(event.getWorld(),pos, true, false, true));
+    	BlockPos pos = event.getChunkPos().getBlock(event.getRand().nextInt(16) + 8, 0, event.getRand().nextInt(16) + 8);
+    	BlockPos newPos = WorldUtil.findGround(event.getWorld(),pos, true, false, true);
+    	Biome biome = event.getWorld().getBiome(pos);
+        
+    	if (newPos != null&&event.getWorld().provider instanceof WorldProviderSurface&&biome != Biomes.DESERT && biome != Biomes.DESERT_HILLS && event.getRand().nextInt(500) == 0) {
+            new WorldGenHotSpring().generate(event.getWorld(), event.getRand(), newPos);
         }
 	}
+
 }

+ 30 - 0
src/main/resources/assets/sakura/blockstates/bamboo_charcoal_block.json

@@ -0,0 +1,30 @@
+{
+  "forge_marker": 1,
+  "defaults": {
+    "textures": {
+      "end": "sakura:blocks/bamboo_charcoal_block_top",
+      "side": "sakura:blocks/bamboo_charcoal_block",
+      "all": "sakura:blocks/bamboo_charcoal_block"
+    }
+  },
+  "variants": {
+    "axis=y": {
+      "model": "cube_column"
+    },
+    "axis=z": {
+      "model": "cube_column",
+      "x": 90
+    },
+    "axis=x": {
+      "model": "cube_column",
+      "x": 90,
+      "y": 90
+    },
+    "axis=none": {
+      "model": "cube_all"
+    },
+    "inventory": {
+      "model": "cube_column"
+    }
+  }
+}

+ 19 - 19
src/main/resources/assets/sakura/blockstates/fluids.json

@@ -4,115 +4,115 @@
       "food_oil" : {
          "model" : "forge:fluid",
          "custom" : {
-            "fluid" : "food_oil"
+            "fluid" : "sakura.food_oil"
          }
       },
       "grape_fluid" : {
          "model" : "forge:fluid",
          "custom" : {
-            "fluid" : "grape_fluid"
+            "fluid" : "sakura.grape_fluid"
          }
       },
       "red_wine" : {
          "model" : "forge:fluid",
          "custom" : {
-            "fluid" : "red_wine"
+            "fluid" : "sakura.red_wine"
          }
       },
       "green_grape_fluid" : {
          "model" : "forge:fluid",
          "custom" : {
-            "fluid" : "green_grape_fluid"
+            "fluid" : "sakura.green_grape_fluid"
          }
       },
       "white_wine" : {
          "model" : "forge:fluid",
          "custom" : {
-            "fluid" : "white_wine"
+            "fluid" : "sakura.white_wine"
          }
       },
       "champagne" : {
          "model" : "forge:fluid",
          "custom" : {
-            "fluid" : "champagne"
+            "fluid" : "sakura.champagne"
          }
       },
       "rum" : {
          "model" : "forge:fluid",
          "custom" : {
-            "fluid" : "rum"
+            "fluid" : "sakura.rum"
          }
       },
       "doburoku" : {
          "model" : "forge:fluid",
          "custom" : {
-            "fluid" : "doburoku"
+            "fluid" : "sakura.doburoku"
          }
       },
       "sake" : {
          "model" : "forge:fluid",
          "custom" : {
-            "fluid" : "sake"
+            "fluid" : "sakura.sake"
          }
       },
       "shouchu" : {
          "model" : "forge:fluid",
          "custom" : {
-            "fluid" : "shouchu"
+            "fluid" : "sakura.shouchu"
          }
       },
       "beer" : {
          "model" : "forge:fluid",
          "custom" : {
-            "fluid" : "beer"
+            "fluid" : "sakura.beer"
          }
       },
       "vodka" : {
          "model" : "forge:fluid",
          "custom" : {
-            "fluid" : "vodka"
+            "fluid" : "sakura.vodka"
          }
       },
       "whiskey" : {
          "model" : "forge:fluid",
          "custom" : {
-            "fluid" : "whiskey"
+            "fluid" : "sakura.whiskey"
          }
       },
       "brandy" : {
          "model" : "forge:fluid",
          "custom" : {
-            "fluid" : "brandy"
+            "fluid" : "sakura.brandy"
          }
       },
       "liqueur" : {
          "model" : "forge:fluid",
          "custom" : {
-            "fluid" : "liqueur"
+            "fluid" : "sakura.liqueur"
          }
       },
       "cocoa_liqueur" : {
          "model" : "forge:fluid",
          "custom" : {
-            "fluid" : "cocoa_liqueur"
+            "fluid" : "sakura.cocoa_liqueur"
          }
       },
       "maple_syrup" : {
          "model" : "forge:fluid",
          "custom" : {
-            "fluid" : "maple_syrup"
+            "fluid" : "sakura.maple_syrup"
          }
       },
       "hot_spring_water" : {
          "model" : "forge:fluid",
          "custom" : {
-            "fluid" : "hot_spring_water"
+            "fluid" : "sakura.hot_spring_water"
          }
       },
       "yeast_liquid" : {
          "model" : "forge:fluid",
          "custom" : {
-            "fluid" : "yeast_liquid"
+            "fluid" : "sakura.yeast_liquid"
          }
       }
    }

+ 17 - 0
src/main/resources/assets/sakura/blockstates/iron_sand.json

@@ -0,0 +1,17 @@
+{
+  "forge_marker": 1,
+  "defaults": {
+    "model": "cube_all",
+    "textures": {
+      "all": "sakura:blocks/iron_sand"
+    }
+  },
+  "variants": {
+    "normal": {
+      "model": "cube_all"
+    },
+    "inventory": {
+      "model": "cube_all"
+    }
+  }
+}

+ 17 - 0
src/main/resources/assets/sakura/blockstates/tatara.json

@@ -0,0 +1,17 @@
+{
+  "forge_marker": 1,
+  "defaults": {
+    "model": "cube_all",
+    "textures": {
+      "all": "sakura:blocks/tatara"
+    }
+  },
+  "variants": {
+    "normal": {
+      "model": "cube_all"
+    },
+    "inventory": {
+      "model": "cube_all"
+    }
+  }
+}

+ 39 - 0
src/main/resources/assets/sakura/blockstates/tatara_smelting.json

@@ -0,0 +1,39 @@
+{
+   "forge_marker" : 1,
+   "defaults" : {
+      "model" : "cube_all",
+      "textures" : {
+         "all" : "sakura:blocks/tatara_smelting"
+      }
+   },
+   "variants" : {
+      "timer=0" : [
+         {
+            "textures" : {
+               "all" : "sakura:blocks/tatara_smelting"
+            }
+         }
+      ],
+      "timer=1" : [
+         {
+            "textures" : {
+               "all" : "sakura:blocks/tatara_smelting"
+            }
+         }
+      ],
+      "timer=2" : [
+         {
+            "textures" : {
+               "all" : "sakura:blocks/tatara_smelting"
+            }
+         }
+      ],
+      "timer=3" : [
+         {
+            "textures" : {
+               "all" : "sakura:blocks/tatara_finished"
+            }
+         }
+      ]
+   }
+}

+ 21 - 19
src/main/resources/assets/sakura/lang/en_us.lang

@@ -402,27 +402,29 @@ item.sakura.glass_moscow_mule.name=Moscow Mule
 item.sakura.glass_boilermaker.name=Boilermaker
 
 #Fluid
-fluid.food_oil=Food Oil
-fluid.grape_fluid=Grape Fluid
-fluid.red_wine=Red Wine
-fluid.green_grape_fluid=Green Grape Fluid
-fluid.white_wine=White Wine
-fluid.champagne=Champagne
-fluid.doburoku=Doburoku
-fluid.sake=Sake
-fluid.shouchu=Shouchu
-fluid.beer=Beer
-fluid.vodka=Vodka
-fluid.rum=Rum
-fluid.brandy=Brandy
-fluid.whiskey=Whiskey
-fluid.liqueur=Liqueur
-fluid.cocoa_liqueur=Cocoa Liqueur
-fluid.maple_syrup=Maple Syrup
+fluid.sakura.food_oil=Food Oil
+fluid.sakura.grape_fluid=Grape Fluid
+fluid.sakura.red_wine=Red Wine
+fluid.sakura.green_grape_fluid=Green Grape Fluid
+fluid.sakura.white_wine=White Wine
+fluid.sakura.champagne=Champagne
+fluid.sakura.doburoku=Doburoku
+fluid.sakura.sake=Sake
+fluid.sakura.shouchu=Shouchu
+fluid.sakura.beer=Beer
+fluid.sakura.vodka=Vodka
+fluid.sakura.rum=Rum
+fluid.sakura.brandy=Brandy
+fluid.sakura.whiskey=Whiskey
+fluid.sakura.liqueur=Liqueur
+fluid.sakura.cocoa_liqueur=Cocoa Liqueur
+fluid.sakura.maple_syrup=Maple Syrup
+fluid.sakura.yeast_liquid=Yeast Liquid
+fluid.sakura.hot_spring_water=Hot Spring Water
 
 #Tooltips
-item.sakura.kimono.texture.name=Kimono
-item.sakura.haori.texture.name=Haori
+sakura.kimono.texture.name=Kimono Texture
+sakura.haori.texture.name=Haori Texture
 
 #Keybinding
 key.categories.sakura=Sakura

+ 28 - 27
src/main/resources/assets/sakura/lang/zh_cn.lang

@@ -1,4 +1,4 @@
-#方块
+#方块
 tile.sakura.kawara_block.name=瓦块
 tile.sakura.kawara.name=瓦
 tile.sakura.tatami_tan.name=榻榻米(日晒)
@@ -370,17 +370,17 @@ item.sakura.glass_between_the_sheets.name=床笫之间
 item.sakura.glass_black_russian.name=黑俄
 item.sakura.glass_godfather.name=教父
 item.sakura.glass_godmother.name=教母
-item.sakura.glass_grasshopper.name=绿色蚱蜢
+item.sakura.glass_grasshopper.name=蚱蜢
 item.sakura.glass_mint_julep.name=薄荷朱利普
 item.sakura.glass_mojito.name=莫吉托
 item.sakura.glass_rusty_nail.name=锈钉
-item.sakura.glass_lemon_margarita.name=柠檬玛格丽塔
+item.sakura.glass_lemon_margarita.name=柠檬玛格丽塔
 item.sakura.glass_russian_spring.name=俄罗斯之春
 item.sakura.glass_alexander.name=亚历山大
 item.sakura.glass_aviation.name=飞行
 item.sakura.glass_porto_flip.name=波菲利普
 item.sakura.glass_red_eyes.name=红眼
-item.sakura.glass_spritzer.name=斯普瑞兹
+item.sakura.glass_spritzer.name=汽酒
 item.sakura.glass_panache.name=什锦鸡尾酒
 item.sakura.glass_screw_driver.name=螺丝刀
 item.sakura.glass_bloody_mary.name=血腥玛丽
@@ -389,41 +389,42 @@ item.sakura.glass_beer_margarita.name=啤酒玛格丽塔
 item.sakura.glass_long_island_iced_tea.name=长岛冰茶
 item.sakura.glass_highball.name=海波
 item.sakura.glass_porchcrawler.name=传送走廊
-item.sakura.glass_stinger.name=痛击
+item.sakura.glass_stinger.name=毒刺
 item.sakura.glass_negroni.name=尼格罗尼
 item.sakura.glass_old_fashioned.name=古典鸡尾酒
 item.sakura.glass_whiskey_sour.name=威士忌酸
 item.sakura.glass_gimlet.name=琴蕾
 item.sakura.glass_tequila_sunrise.name=龙舌兰日出
 item.sakura.glass_flying_grasshopper.name=飞蝗
-item.sakura.glass_eggnog.name=蛋
+item.sakura.glass_eggnog.name=蛋奶酒
 item.sakura.glass_scorpion.name=天蝎
 item.sakura.glass_moscow_mule.name=莫斯科骡子
 item.sakura.glass_boilermaker.name=酒鬼炸弹
 
 #液体方块
-fluid.food_oil=食用油
-fluid.grape_fluid=葡萄汁
-fluid.red_wine=红葡萄酒
-fluid.green_grape_fluid=绿葡萄汁
-fluid.white_wine=白葡萄酒
-fluid.champagne=香槟
-fluid.doburoku=浊酒
-fluid.sake=清酒
-fluid.shouchu=日本烧酒
-fluid.beer=啤酒
-fluid.vodka=伏特加
-fluid.rum=朗姆酒
-fluid.brandy=白兰地
-fluid.whiskey=威士忌
-fluid.liqueur=利口酒
-fluid.cocoa_liqueur=可可利口酒
-fluid.maple_syrup=枫糖浆
-
-#物品信息
-item.sakura.kimono.texture.name=和服
-item.sakura.haori.texture.name=羽织
+fluid.sakura.food_oil=食用油
+fluid.sakura.grape_fluid=葡萄汁
+fluid.sakura.red_wine=红葡萄酒
+fluid.sakura.green_grape_fluid=绿葡萄汁
+fluid.sakura.white_wine=白葡萄酒
+fluid.sakura.champagne=香槟
+fluid.sakura.doburoku=浊酒
+fluid.sakura.sake=清酒
+fluid.sakura.shouchu=日本烧酒
+fluid.sakura.beer=啤酒
+fluid.sakura.vodka=伏特加
+fluid.sakura.rum=朗姆酒
+fluid.sakura.brandy=白兰地
+fluid.sakura.whiskey=威士忌
+fluid.sakura.liqueur=利口酒
+fluid.sakura.cocoa_liqueur=可可利口酒
+fluid.sakura.maple_syrup=枫糖浆
+fluid.sakura.yeast_liquid=酵母液
+fluid.sakura.hot_spring_water=温泉水
 
+#Tooltips
+sakura.kimono.texture.name=和服材质
+sakura.haori.texture.name=羽织材质
 #按键绑定
 key.categories.sakura=樱
 key.sakura.sheath_in=收刀入鞘

+ 3 - 3
src/main/resources/assets/sakura/models/block/bamboo.json

@@ -35,9 +35,9 @@
 			"scale": [0.42, 0.42, 0.42]
 		},
 		"gui": {
-			"rotation": [27, 32, 0],
-			"translation": [0, -3.5, 0],
-			"scale": [0.49, 0.49, 0.49]
+			"rotation": [4, 45, -57],
+			"translation": [0, -0.5, 0],
+			"scale": [0.65, 0.65, 0.65]
 		},
 		"head": {
 			"translation": [0, 8.75, 0],

+ 50 - 0
src/main/resources/assets/sakura/models/item/bamboo_charcoal.json

@@ -0,0 +1,50 @@
+{
+	"credit": "Made with Blockbench",
+	"textures": {
+		"0": "sakura:blocks/bamboo_charcoal",
+		"particle": "sakura:blocks/bamboo_charcoal"
+	},
+	"elements": [
+		{
+			"from": [5, 0, 5],
+			"to": [11, 16, 11],
+			"faces": {
+				"north": {"uv": [0, 0, 6, 16], "texture": "#0"},
+				"east": {"uv": [0, 0, 6, 16], "texture": "#0"},
+				"south": {"uv": [0, 0, 6, 16], "texture": "#0"},
+				"west": {"uv": [0, 0, 6, 16], "texture": "#0"},
+				"up": {"uv": [10, 0, 16, 6], "texture": "#0"},
+				"down": {"uv": [10, 0, 16, 6], "texture": "#0"}
+			}
+		}
+	],
+	"display": {
+		"thirdperson_righthand": {
+			"scale": [0.42, 0.42, 0.42]
+		},
+		"thirdperson_lefthand": {
+			"scale": [0.42, 0.42, 0.42]
+		},
+		"firstperson_righthand": {
+			"scale": [0.42, 0.42, 0.42]
+		},
+		"firstperson_lefthand": {
+			"scale": [0.42, 0.42, 0.42]
+		},
+		"ground": {
+			"scale": [0.42, 0.42, 0.42]
+		},
+		"gui": {
+			"rotation": [4, 45, -57],
+			"translation": [0, -0.5, 0],
+			"scale": [0.65, 0.65, 0.65]
+		},
+		"head": {
+			"translation": [0, 8.75, 0],
+			"scale": [0.42, 0.42, 0.42]
+		},
+		"fixed": {
+			"scale": [0.49, 0.49, 0.49]
+		}
+	}
+}

+ 4 - 4
src/main/resources/assets/sakura/models/item/bamboo_sunburnt.json

@@ -35,9 +35,9 @@
 			"scale": [0.42, 0.42, 0.42]
 		},
 		"gui": {
-			"rotation": [27, 32, 0],
-			"translation": [0, -3.5, 0],
-			"scale": [0.49, 0.49, 0.49]
+			"rotation": [4, 45, -57],
+			"translation": [0, -0.5, 0],
+			"scale": [0.65, 0.65, 0.65]
 		},
 		"head": {
 			"translation": [0, 8.75, 0],
@@ -47,4 +47,4 @@
 			"scale": [0.49, 0.49, 0.49]
 		}
 	}
-}
+}

+ 6 - 0
src/main/resources/assets/sakura/models/item/iron_hammer.json

@@ -0,0 +1,6 @@
+{
+   "parent" : "item/handheld",
+   "textures" : {
+      "layer0" : "sakura:items/hammer_iron"
+   }
+}

+ 6 - 0
src/main/resources/assets/sakura/models/item/sagegane.json

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

+ 6 - 0
src/main/resources/assets/sakura/models/item/sakura_hammer.json

@@ -0,0 +1,6 @@
+{
+   "parent" : "item/handheld",
+   "textures" : {
+      "layer0" : "sakura:items/hammer_sakura"
+   }
+}

+ 6 - 0
src/main/resources/assets/sakura/models/item/steel_ingot.json

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

+ 6 - 0
src/main/resources/assets/sakura/models/item/stone_hammer.json

@@ -0,0 +1,6 @@
+{
+   "parent" : "item/handheld",
+   "textures" : {
+      "layer0" : "sakura:items/hammer_stone"
+   }
+}

+ 6 - 0
src/main/resources/assets/sakura/models/item/tamahagane.json

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

+ 6 - 0
src/main/resources/assets/sakura/models/item/zuku.json

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

+ 6 - 0
src/main/resources/assets/sakura/models/item/zuku_ingot.json

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

+ 21 - 0
src/main/resources/assets/sakura/recipes/_constants.json

@@ -6,6 +6,27 @@
       },
       "name" : "BAMBOO"
    },
+   {
+      "ingredient" : {
+         "type" : "forge:ore_dict",
+         "ore" : "oreIron"
+      },
+      "name" : "OREIRON"
+   },
+   {
+      "ingredient" : {
+         "type" : "forge:ore_dict",
+         "ore" : "blockCoal"
+      },
+      "name" : "BLOCKCOAL"
+   },
+   {
+      "ingredient" : {
+         "type" : "sakura:wildcard_oredict",
+         "ore" : "toolForginghammer"
+      },
+      "name" : "TOOLFORGINGHAMMER"
+   },
    {
       "ingredient" : {
          "type" : "forge:ore_dict",

+ 5 - 0
src/main/resources/assets/sakura/recipes/_factories.json

@@ -0,0 +1,5 @@
+{
+    "ingredients": {
+        "wildcard_oredict": "cn.mcmod.sakura.util.OreWildIngredientFactory"
+    }
+}

+ 14 - 0
src/main/resources/assets/sakura/recipes/bamboo_charcoal.json

@@ -0,0 +1,14 @@
+{
+  "result": {
+    "item": "sakura:materials",
+    "data":51,
+    "count": 4
+  },
+
+  "type": "forge:ore_shapeless",
+  "ingredients": [
+    {
+          "item":"sakura:bamboo_charcoal_block"
+    }
+  ]
+}

+ 16 - 0
src/main/resources/assets/sakura/recipes/bamboo_charcoal_block.json

@@ -0,0 +1,16 @@
+{
+  "type": "minecraft:crafting_shaped",
+  "pattern": [
+    "##",
+    "##"
+  ],
+  "key": {
+    "#": {
+    "item": "sakura:materials",
+    "data":51
+    }
+  },
+  "result": {
+    "item": "sakura:bamboo_charcoal_block"
+  }
+}

+ 1 - 1
src/main/resources/assets/sakura/recipes/foodoil.json

@@ -1,6 +1,6 @@
 {
   "result": {
-    "nbt": "{FluidName:\"food_oil\",Amount:1000}",
+    "nbt": "{FluidName:\"sakura.food_oil\",Amount:1000}",
     "item": "forge:bucketfilled",
     "type": "minecraft:item_nbt"
   },

+ 2 - 2
src/main/resources/assets/sakura/recipes/grape_fluid.json

@@ -1,6 +1,6 @@
 {
   "result": {
-    "nbt": "{FluidName:\"grape_fluid\",Amount:1000}",
+    "nbt": "{FluidName:\"sakura.grape_fluid\",Amount:1000}",
     "item": "forge:bucketfilled",
     "type": "minecraft:item_nbt"
   },
@@ -34,4 +34,4 @@
     }
   ],
   "type": "forge:ore_shapeless"
-}
+}

+ 2 - 2
src/main/resources/assets/sakura/recipes/greengrape_fluid.json

@@ -1,6 +1,6 @@
 {
   "result": {
-    "nbt": "{FluidName:\"green_grape_fluid\",Amount:1000}",
+    "nbt": "{FluidName:\"sakura.green_grape_fluid\",Amount:1000}",
     "item": "forge:bucketfilled",
     "type": "minecraft:item_nbt"
   },
@@ -34,4 +34,4 @@
     }
   ],
   "type": "forge:ore_shapeless"
-}
+}

+ 19 - 0
src/main/resources/assets/sakura/recipes/iron_ingot.json

@@ -0,0 +1,19 @@
+{
+  "result": {
+    "item": "minecraft:iron_ingot"
+  },
+  "ingredients": [
+    {
+      "item": "sakura:materials",
+      "data": 54
+    },
+    {
+      "item": "sakura:materials",
+      "data": 54
+    },
+    {
+      "item": "#TOOLFORGINGHAMMER"
+    }
+  ],
+  "type": "forge:ore_shapeless"
+}

+ 2 - 2
src/main/resources/assets/sakura/recipes/materials_36.json

@@ -6,7 +6,7 @@
   },
   "ingredients": [
     {
-      "nbt": "{FluidName:\"yeast_liquid\",Amount:1000}",
+      "nbt": "{FluidName:\"sakura.yeast_liquid\",Amount:1000}",
       "item": "forge:bucketfilled",
       "type": "minecraft:item_nbt"
     },
@@ -21,4 +21,4 @@
     }
   ],
   "type": "forge:ore_shapeless"
-}
+}

+ 28 - 0
src/main/resources/assets/sakura/recipes/materials_53.json

@@ -0,0 +1,28 @@
+{
+  "result": {
+    "item": "sakura:materials",
+    "data": 53
+  },
+  "ingredients": [
+    {
+      "item": "sakura:materials",
+      "data": 52
+    },
+    {
+      "item": "sakura:materials",
+      "data": 52
+    },
+    {
+      "item": "sakura:materials",
+      "data": 52
+    },
+    {
+      "item": "sakura:materials",
+      "data": 52
+    },
+    {
+      "item": "#TOOLFORGINGHAMMER"
+    }
+  ],
+  "type": "forge:ore_shapeless"
+}

+ 28 - 0
src/main/resources/assets/sakura/recipes/materials_54.json

@@ -0,0 +1,28 @@
+{
+  "result": {
+    "item": "sakura:materials",
+    "data": 54
+  },
+  "ingredients": [
+    {
+      "item": "sakura:materials",
+      "data": 53
+    },
+    {
+      "item": "sakura:materials",
+      "data": 53
+    },
+    {
+      "item": "sakura:materials",
+      "data": 53
+    },
+    {
+      "item": "sakura:materials",
+      "data": 53
+    },
+    {
+      "item": "#TOOLFORGINGHAMMER"
+    }
+  ],
+  "type": "forge:ore_shapeless"
+}

+ 20 - 0
src/main/resources/assets/sakura/recipes/materials_56.json

@@ -0,0 +1,20 @@
+{
+  "result": {
+    "item": "sakura:materials",
+    "data": 56
+  },
+  "ingredients": [
+    {
+      "item": "sakura:materials",
+      "data": 55
+    },
+    {
+      "item": "sakura:materials",
+      "data": 55
+    },
+    {
+      "item": "#TOOLFORGINGHAMMER"
+    }
+  ],
+  "type": "forge:ore_shapeless"
+}

+ 17 - 0
src/main/resources/assets/sakura/recipes/tatara.json

@@ -0,0 +1,17 @@
+{
+  "result": {
+    "item": "sakura:tatara"
+  },
+  "ingredients": [
+    {
+	  "item": "#OREIRON"
+    },
+    {
+	  "item": "sakura:bamboo_charcoal_block"
+    },
+    {
+      "item": "#TOOLFORGINGHAMMER"
+    }
+  ],
+  "type": "forge:ore_shapeless"
+}

+ 17 - 0
src/main/resources/assets/sakura/recipes/tatara_1.json

@@ -0,0 +1,17 @@
+{
+  "result": {
+    "item": "sakura:tatara"
+  },
+  "ingredients": [
+    {
+	  "item": "#OREIRON"
+    },
+    {
+	  "item": "#BLOCKCOAL"
+    },
+    {
+      "item": "#TOOLFORGINGHAMMER"
+    }
+  ],
+  "type": "forge:ore_shapeless"
+}

BIN
src/main/resources/assets/sakura/textures/blocks/bamboo_charcoal.png


BIN
src/main/resources/assets/sakura/textures/blocks/bamboo_charcoal_block.png


BIN
src/main/resources/assets/sakura/textures/blocks/bamboo_charcoal_block_top.png


BIN
src/main/resources/assets/sakura/textures/blocks/iron_sand.png


BIN
src/main/resources/assets/sakura/textures/blocks/pasta.png


BIN
src/main/resources/assets/sakura/textures/blocks/ramen.png


BIN
src/main/resources/assets/sakura/textures/blocks/tatara.png


BIN
src/main/resources/assets/sakura/textures/blocks/tatara_finished.png


+ 11 - 0
src/main/resources/assets/sakura/textures/blocks/tatara_finished.png.mcmeta

@@ -0,0 +1,11 @@
+{
+  "animation": {
+    "frametime": 8,
+    "interpolate": true,
+    "frames": [
+      0,
+      1,
+      2
+    ]
+  }
+}

BIN
src/main/resources/assets/sakura/textures/blocks/tatara_smelting.png


+ 11 - 0
src/main/resources/assets/sakura/textures/blocks/tatara_smelting.png.mcmeta

@@ -0,0 +1,11 @@
+{
+  "animation": {
+    "frametime": 8,
+    "interpolate": true,
+    "frames": [
+      0,
+      1,
+      2
+    ]
+  }
+}

BIN
src/main/resources/assets/sakura/textures/items/hammer_iron.png


BIN
src/main/resources/assets/sakura/textures/items/hammer_sakura.png


BIN
src/main/resources/assets/sakura/textures/items/hammer_steel.png


BIN
src/main/resources/assets/sakura/textures/items/hammer_stone.png


BIN
src/main/resources/assets/sakura/textures/items/sagegane.png


BIN
src/main/resources/assets/sakura/textures/items/sakura_axe.png


BIN
src/main/resources/assets/sakura/textures/items/steel_ingot.png


BIN
src/main/resources/assets/sakura/textures/items/tamahagane.png


BIN
src/main/resources/assets/sakura/textures/items/zuku.png


BIN
src/main/resources/assets/sakura/textures/items/zuku_ingot.png