Skip to content

Commit

Permalink
- Changes Dawnstone Anvil functionality to be recipe based
Browse files Browse the repository at this point in the history
- Changes Pedestals to only accept one aspectus, not a whole stack
- Adds visuals to the Ignem Reactor
- Makes Beam Cannon only fire on a rising edge
- Makes the Ember Bore and Ember Injector sounds work properly
- Adds the furnace recipes to the Heat Coil properly
- Adds back FluidTextureUtil as a stub for Soot compat
  • Loading branch information
DaedalusGame committed Jun 8, 2018
1 parent 7c020e0 commit e44e40f
Show file tree
Hide file tree
Showing 25 changed files with 276 additions and 37 deletions.
10 changes: 10 additions & 0 deletions src/main/java/teamroots/embers/proxy/CommonProxy.java
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
import teamroots.embers.recipe.RecipeRegistry;
import teamroots.embers.reflection.Fields;
import teamroots.embers.research.ResearchManager;
import teamroots.embers.tileentity.*;
import teamroots.embers.util.EmberGenUtil;
import teamroots.embers.util.ItemModUtil;

Expand All @@ -33,6 +34,15 @@ public void init(FMLInitializationEvent event){
}

public void postInit(FMLPostInitializationEvent event){
TileEntityMechAccessor.registerAccessibleTile(TileEntityMechCore.class);
TileEntityMechAccessor.registerAccessibleTile(TileEntityMixerBottom.class);
TileEntityMechAccessor.registerAccessibleTile(TileEntityMixerTop.class);
TileEntityMechAccessor.registerAccessibleTile(TileEntityActivatorBottom.class);
TileEntityMechAccessor.registerAccessibleTile(TileEntityFurnaceBottom.class);
TileEntityMechAccessor.registerAccessibleTile(TileEntityFurnaceTop.class);
TileEntityMechAccessor.registerAccessibleTile(TileEntityBoilerBottom.class);
TileEntityMechAccessor.registerAccessibleTile(TileEntityReactor.class);

ResearchManager.initResearches();
NetworkRegistry.INSTANCE.registerGuiHandler(Embers.instance, new GuiHandler());
RecipeRegistry.mergeOreRecipes();
Expand Down
25 changes: 25 additions & 0 deletions src/main/java/teamroots/embers/recipe/AnvilAddCoreRecipe.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package teamroots.embers.recipe;

import com.google.common.collect.Lists;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import teamroots.embers.RegistryManager;
import teamroots.embers.itemmod.ModifierBase;
import teamroots.embers.util.ItemModUtil;

import java.util.List;

public class AnvilAddCoreRecipe extends DawnstoneAnvilRecipe {
@Override
public boolean matches(ItemStack input1, ItemStack input2) {
ModifierBase modifier = ItemModUtil.modifierRegistry.get(RegistryManager.ancient_motive_core); //TODO: instead of hardcoding this, see if the modifier can be applied as a core
return (!ItemModUtil.hasHeat(input1) || !ItemModUtil.hasModifier(input1, modifier.name)) && modifier.canApplyTo(input1) && input2.getItem() == RegistryManager.ancient_motive_core;
}

@Override
public List<ItemStack> getResult(TileEntity tile, ItemStack input1, ItemStack input2) {
ItemStack result = input1.copy();
ItemModUtil.addModifier(result, input2);
return Lists.newArrayList(result);
}
}
22 changes: 22 additions & 0 deletions src/main/java/teamroots/embers/recipe/AnvilAddModifierRecipe.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package teamroots.embers.recipe;

import com.google.common.collect.Lists;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import teamroots.embers.util.ItemModUtil;

import java.util.List;

public class AnvilAddModifierRecipe extends DawnstoneAnvilRecipe {
@Override
public boolean matches(ItemStack input1, ItemStack input2) {
return ItemModUtil.hasHeat(input1) && ItemModUtil.modifierRegistry.containsKey(input2.getItem()) && ItemModUtil.getLevel(input1) > ItemModUtil.getTotalModLevel(input1) && ItemModUtil.isModValid(input1,input2);
}

@Override
public List<ItemStack> getResult(TileEntity tile, ItemStack input1, ItemStack input2) {
ItemStack result = input1.copy();
ItemModUtil.addModifier(result, input2);
return Lists.newArrayList(result);
}
}
23 changes: 23 additions & 0 deletions src/main/java/teamroots/embers/recipe/AnvilBreakdownRecipe.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package teamroots.embers.recipe;

import com.google.common.collect.Lists;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import teamroots.embers.util.Misc;

import java.util.List;

public class AnvilBreakdownRecipe extends DawnstoneAnvilRecipe {
@Override
public boolean matches(ItemStack input1, ItemStack input2) {
ItemStack repairItem = Misc.getRepairItem(input1);
return !input1.isEmpty() && input1.getItem().getIsRepairable(input1,repairItem) && input2.isEmpty() && Misc.getResourceCount(input1) != -1;
}

@Override
public List<ItemStack> getResult(TileEntity tile, ItemStack input1, ItemStack input2) {
int resourceAmount = Misc.getResourceCount(input1);
ItemStack repairItem = Misc.getRepairItem(input1);
return Lists.newArrayList(new ItemStack(repairItem.getItem(),resourceAmount, repairItem.getItemDamage()));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package teamroots.embers.recipe;

import com.google.common.collect.Lists;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;
import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.common.util.Constants;
import teamroots.embers.util.ItemModUtil;

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

public class AnvilRemoveModifierRecipe extends DawnstoneAnvilRecipe {
@Override
public boolean matches(ItemStack input1, ItemStack input2) {
return ItemModUtil.hasHeat(input1) && input1.getTagCompound().getCompoundTag(ItemModUtil.HEAT_TAG).getTagList("modifiers", Constants.NBT.TAG_COMPOUND).tagCount() > 0 && input2.isEmpty();
}

@Override
public List<ItemStack> getResult(TileEntity tile, ItemStack input1, ItemStack input2) {
NBTTagCompound tagCompound = input1.getTagCompound();
NBTTagCompound heatCompound = tagCompound.getCompoundTag(ItemModUtil.HEAT_TAG);
if (heatCompound.getTagList("modifiers", Constants.NBT.TAG_COMPOUND).tagCount() > 0){ //TODO: cleanup
List<ItemStack> results = new ArrayList<>();
for (int i = 0; i < heatCompound.getTagList("modifiers", Constants.NBT.TAG_COMPOUND).tagCount(); i ++){
ItemStack s = new ItemStack(heatCompound.getTagList("modifiers", Constants.NBT.TAG_COMPOUND).getCompoundTagAt(i).getCompoundTag("item"));
if (ItemModUtil.modifierRegistry.get(s.getItem()) != null && ItemModUtil.modifierRegistry.get(s.getItem()).countTowardsTotalLevel){
for (int j = 0; j < heatCompound.getTagList("modifiers", Constants.NBT.TAG_COMPOUND).getCompoundTagAt(i).getInteger("level"); j ++){
results.add(new ItemStack(heatCompound.getTagList("modifiers", Constants.NBT.TAG_COMPOUND).getCompoundTagAt(i).getCompoundTag("item")));
}
}
}
ItemStack result = input1.copy();
result.getTagCompound().getCompoundTag(ItemModUtil.HEAT_TAG).setTag("modifiers", new NBTTagList());
results.add(result.copy());
return results;
}
return Lists.newArrayList(result);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package teamroots.embers.recipe;

import com.google.common.collect.Lists;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import teamroots.embers.RegistryManager;

import java.util.List;

public class AnvilRepairMateriaRecipe extends DawnstoneAnvilRecipe {
@Override
public boolean matches(ItemStack input1, ItemStack input2) {
return !input1.isEmpty() && input1.getItem().isRepairable() && input2.getItem() == RegistryManager.isolated_materia;
}

@Override
public List<ItemStack> getResult(TileEntity tile, ItemStack input1, ItemStack input2) {
ItemStack result = input1.copy();
result.setItemDamage(Math.max(0, result.getItemDamage() - result.getMaxDamage()));
return Lists.newArrayList(result);
}
}
21 changes: 21 additions & 0 deletions src/main/java/teamroots/embers/recipe/AnvilRepairRecipe.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package teamroots.embers.recipe;

import com.google.common.collect.Lists;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;

import java.util.List;

public class AnvilRepairRecipe extends DawnstoneAnvilRecipe {
@Override
public boolean matches(ItemStack input1, ItemStack input2) {
return !input1.isEmpty() && input1.getItem().getIsRepairable(input1,input2);
}

@Override
public List<ItemStack> getResult(TileEntity tile, ItemStack input1, ItemStack input2) {
ItemStack result = input1.copy();
result.setItemDamage(Math.max(0, result.getItemDamage() - result.getMaxDamage()));
return Lists.newArrayList(result);
}
}
10 changes: 3 additions & 7 deletions src/main/java/teamroots/embers/recipe/DawnstoneAnvilRecipe.java
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,9 @@ public class DawnstoneAnvilRecipe {
public Ingredient top;
public List<ItemStack> result;

public DawnstoneAnvilRecipe(Ingredient bottom, Ingredient top, ItemStack[] result)
{
public DawnstoneAnvilRecipe() {}

public DawnstoneAnvilRecipe(Ingredient bottom, Ingredient top, ItemStack[] result) {
this.result = Lists.newArrayList(result);
this.bottom = bottom;
this.top = top;
Expand All @@ -29,9 +30,4 @@ public List<ItemStack> getResult(TileEntity tile, ItemStack input1, ItemStack in
{
return result.stream().map(ItemStack::copy).collect(Collectors.toList());
}

public List<ItemStack> getJEIResult()
{
return result;
}
}
17 changes: 17 additions & 0 deletions src/main/java/teamroots/embers/recipe/HeatCoilFurnaceRecipe.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package teamroots.embers.recipe;

import net.minecraft.item.ItemStack;
import net.minecraft.item.crafting.FurnaceRecipes;
import net.minecraft.tileentity.TileEntity;

public class HeatCoilFurnaceRecipe extends HeatCoilRecipe {
@Override
public boolean matches(ItemStack stack) {
return !FurnaceRecipes.instance().getSmeltingResult(stack).isEmpty();
}

@Override
public ItemStack getResult(TileEntity tile, ItemStack stack) {
return FurnaceRecipes.instance().getSmeltingResult(stack).copy();
}
}
12 changes: 12 additions & 0 deletions src/main/java/teamroots/embers/recipe/RecipeRegistry.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,10 @@
import net.minecraft.init.Items;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.item.crafting.FurnaceRecipes;
import net.minecraft.item.crafting.IRecipe;
import net.minecraft.item.crafting.Ingredient;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
Expand All @@ -30,6 +32,7 @@
import teamroots.embers.item.EnumStampType;
import teamroots.embers.util.AlchemyUtil;
import teamroots.embers.util.AspectList.AspectRangeList;
import teamroots.embers.util.Misc;
import teamroots.embers.util.WeightedItemStack;

public class RecipeRegistry {
Expand Down Expand Up @@ -1158,6 +1161,15 @@ public void init(RegistryEvent.Register<IRecipe> event){
emberCrystal,
Lists.newArrayList(plateDawnstone, plateDawnstone, plateDawnstone, ingotSilver),
new ItemStack(RegistryManager.flame_barrier,1)));

heatCoilRecipes.add(new HeatCoilFurnaceRecipe());

dawnstoneAnvilRecipes.add(new AnvilAddCoreRecipe());
dawnstoneAnvilRecipes.add(new AnvilAddModifierRecipe());
dawnstoneAnvilRecipes.add(new AnvilRemoveModifierRecipe());
dawnstoneAnvilRecipes.add(new AnvilRepairRecipe()); //Repair with repair item
dawnstoneAnvilRecipes.add(new AnvilRepairMateriaRecipe()); //Repair with Isolated Materia
dawnstoneAnvilRecipes.add(new AnvilBreakdownRecipe()); //BREAKDOWN BREAKDOWN
}

public static BoreOutput getBoreOutput(World world, BlockPos pos) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,11 @@ protected void onContentsChanged(int slot) {
TileEntityAlchemyPedestal.this.markDirty();
}

@Override
public int getSlotLimit(int slot) {
return slot == stackItem ? 1 : super.getSlotLimit(slot);
}

@Nonnull
@Override
public ItemStack insertItem(int slot, @Nonnull ItemStack stack, boolean simulate) {
Expand Down Expand Up @@ -102,11 +107,8 @@ public void onDataPacket(NetworkManager net, SPacketUpdateTileEntity pkt) {
}

@Override
public boolean hasCapability(Capability<?> capability, EnumFacing facing){
if (capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY){
return true;
}
return super.hasCapability(capability, facing);
public boolean hasCapability(Capability<?> capability, EnumFacing facing) {
return capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY || super.hasCapability(capability, facing);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -298,8 +298,8 @@ public void update() {
List<TileEntityAlchemyPedestal> pedestals = AlchemyUtil.getNearbyPedestals(getWorld(),getPos());
if (getWorld().isRemote){
for (TileEntityAlchemyPedestal pedestal : pedestals) {
//if(pedestal instanceof TileEntityAlchemyPedestal && !pedestal.inventory.getStackInSlot(1).isEmpty()) //If there's ash in the pedestal
// ((TileEntityAlchemyPedestal) pedestal).setActive(3);
if(pedestal != null && !pedestal.inventory.getStackInSlot(1).isEmpty()) //If there's ash in the pedestal
pedestal.setActive(3);
ParticleUtil.spawnParticleStar(getWorld(), pedestal.getPos().getX() + 0.5f, pedestal.getPos().getY() + 1.0f, pedestal.getPos().getZ() + 0.5f, 0.0125f * (random.nextFloat() - 0.5f), 0.0125f * (random.nextFloat() - 0.5f), 0.0125f * (random.nextFloat() - 0.5f), 255, 64, 16, 3.5f + 0.5f * random.nextFloat(), 40);
for (int j = 0; j < 8; j++) {
float coeff = random.nextFloat();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,9 @@
public class TileEntityBeamCannon extends TileEntity implements ITileEntityBase, ITickable, ITargetable {
public IEmberCapability capability = new DefaultEmberCapability();
public BlockPos target = null;
public BlockPos lastTarget = null;
public long ticksExisted = 0;
public boolean lastPowered = false;
public Random random = new Random();
int offset = random.nextInt(40);

Expand Down Expand Up @@ -118,9 +120,10 @@ public void update() {
}
ticksExisted++;
boolean isPowered = getWorld().isBlockIndirectlyGettingPowered(getPos()) != 0;
if (this.capability.getEmber() >= 400 && isPowered){
if (this.capability.getEmber() >= 400 && isPowered && !lastPowered){
fire();
}
lastPowered = isPowered;
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,8 @@
import teamroots.embers.network.message.MessageAnvilSparksFX;
import teamroots.embers.network.message.MessageStamperFX;
import teamroots.embers.network.message.MessageTEUpdate;
import teamroots.embers.recipe.DawnstoneAnvilRecipe;
import teamroots.embers.recipe.RecipeRegistry;
import teamroots.embers.util.ItemModUtil;
import teamroots.embers.util.Misc;

Expand Down Expand Up @@ -153,17 +155,15 @@ public void breakBlock(World world, BlockPos pos, IBlockState state, EntityPlaye
}

public boolean isValid(ItemStack stack1, ItemStack stack2){
if (stack1.getItem() instanceof ItemTool || stack1.getItem() instanceof ItemSword || stack1.getItem() instanceof ItemArmor){
/*if (stack1.getItem() instanceof ItemTool || stack1.getItem() instanceof ItemSword || stack1.getItem() instanceof ItemArmor){
if (!ItemModUtil.hasHeat(stack1) && stack2.getItem() == RegistryManager.ancient_motive_core){
return true;
}
else if (ItemModUtil.hasHeat(stack1) && ItemModUtil.modifierRegistry.containsKey(stack2.getItem()) && ItemModUtil.getLevel(stack1) > ItemModUtil.getTotalModLevel(stack1) && ItemModUtil.isModValid(stack1,stack2)){
return true;
}
else if (ItemModUtil.hasHeat(stack1)){
if (stack1.getTagCompound().getCompoundTag(ItemModUtil.HEAT_TAG).getTagList("modifiers", Constants.NBT.TAG_COMPOUND).tagCount() > 0 && stack2.isEmpty()){
return true;
}
else if (ItemModUtil.hasHeat(stack1) && stack1.getTagCompound().getCompoundTag(ItemModUtil.HEAT_TAG).getTagList("modifiers", Constants.NBT.TAG_COMPOUND).tagCount() > 0 && stack2.isEmpty()) {
return true;
}
}
if (stack1.getItem().getIsRepairable(stack1,stack2)
Expand All @@ -172,12 +172,14 @@ else if (ItemModUtil.hasHeat(stack1)){
}
if (!Misc.getRepairItem(stack1).isEmpty() && stack1.getItem().getIsRepairable(stack1, Misc.getRepairItem(stack1)) && Misc.getResourceCount(stack1) != -1 && stack2.isEmpty()){
return true;
}
return false;
}*/
DawnstoneAnvilRecipe recipe = RecipeRegistry.getDawnstoneAnvilRecipe(stack1,stack2);

return recipe != null;
}

public ItemStack[] getResult(ItemStack stack1, ItemStack stack2){
if (stack1.getItem() instanceof ItemTool || stack1.getItem() instanceof ItemSword || stack1.getItem() instanceof ItemArmor){
/*if (stack1.getItem() instanceof ItemTool || stack1.getItem() instanceof ItemSword || stack1.getItem() instanceof ItemArmor){
if ((!ItemModUtil.hasHeat(stack1) || !ItemModUtil.hasModifier(stack1, ItemModUtil.modifierRegistry.get(RegistryManager.ancient_motive_core).name)) && stack2.getItem() == RegistryManager.ancient_motive_core){
ItemModUtil.checkForTag(stack1);
ItemModUtil.addModifier(stack1, stack2.copy());
Expand All @@ -198,7 +200,7 @@ else if (ItemModUtil.hasHeat(stack1) && ItemModUtil.modifierRegistry.containsKey
}
else if (ItemModUtil.hasHeat(stack1) && stack2.isEmpty()){
if (stack1.getTagCompound().getCompoundTag(ItemModUtil.HEAT_TAG).getTagList("modifiers", Constants.NBT.TAG_COMPOUND).tagCount() > 0){
List<ItemStack> stacks = new ArrayList<ItemStack>();
List<ItemStack> stacks = new ArrayList<>();
for (int i = 0; i < stack1.getTagCompound().getCompoundTag(ItemModUtil.HEAT_TAG).getTagList("modifiers", Constants.NBT.TAG_COMPOUND).tagCount(); i ++){
ItemStack s = new ItemStack(stack1.getTagCompound().getCompoundTag(ItemModUtil.HEAT_TAG).getTagList("modifiers", Constants.NBT.TAG_COMPOUND).getCompoundTagAt(i).getCompoundTag("item"));
if (ItemModUtil.modifierRegistry.get(s.getItem()) != null && ItemModUtil.modifierRegistry.get(s.getItem()).countTowardsTotalLevel){
Expand Down Expand Up @@ -230,7 +232,16 @@ else if (ItemModUtil.hasHeat(stack1) && stack2.isEmpty()){
markDirty();
return new ItemStack[]{new ItemStack(Misc.getRepairItem(stack1).getItem(),resourceAmount,Misc.getRepairItem(stack1).getItemDamage())};
}
return new ItemStack[]{};
return new ItemStack[]{};*/
DawnstoneAnvilRecipe recipe = RecipeRegistry.getDawnstoneAnvilRecipe(stack1,stack2);
if(recipe != null) {
inventory.setStackInSlot(1, ItemStack.EMPTY);
inventory.setStackInSlot(0, ItemStack.EMPTY);
markDirty();
List<ItemStack> results = recipe.getResult(this, stack1, stack2);
return results.toArray(new ItemStack[results.size()]);
}
return new ItemStack[0];
}

public boolean dirty = false;
Expand Down
Loading

0 comments on commit e44e40f

Please sign in to comment.