Fix fusion reactor closes #1894

This commit is contained in:
modmuss50 2019-11-28 16:59:27 +00:00
parent eebdf9a4b5
commit 797e66f8ca
4 changed files with 169 additions and 124 deletions

View file

@ -25,7 +25,6 @@
package techreborn.api.recipe.recipes; package techreborn.api.recipe.recipes;
import com.google.gson.JsonObject; import com.google.gson.JsonObject;
import net.minecraft.block.entity.BlockEntity; import net.minecraft.block.entity.BlockEntity;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.util.DefaultedList; import net.minecraft.util.DefaultedList;
@ -77,7 +76,7 @@ public class FusionReactorRecipe extends RebornRecipe {
public boolean canCraft(final BlockEntity blockEntity) { public boolean canCraft(final BlockEntity blockEntity) {
if (blockEntity instanceof FusionControlComputerBlockEntity) { if (blockEntity instanceof FusionControlComputerBlockEntity) {
final FusionControlComputerBlockEntity reactor = (FusionControlComputerBlockEntity) blockEntity; final FusionControlComputerBlockEntity reactor = (FusionControlComputerBlockEntity) blockEntity;
return reactor.getSize() >= minSize && reactor.getEnergy() >= startE; return reactor.getSize() >= minSize;
} }
return false; return false;
} }

View file

@ -27,6 +27,7 @@ package techreborn.blockentity.fusionReactor;
import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.CompoundTag;
import net.minecraft.util.Identifier;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Direction; import net.minecraft.util.math.Direction;
import reborncore.api.IToolDrop; import reborncore.api.IToolDrop;
@ -63,7 +64,9 @@ public class FusionControlComputerBlockEntity extends PowerAcceptorBlockEntity
int bottomStackSlot = 1; int bottomStackSlot = 1;
int outputStackSlot = 2; int outputStackSlot = 2;
FusionReactorRecipe currentRecipe = null; FusionReactorRecipe currentRecipe = null;
Identifier currentRecipeID = null;
boolean hasStartedCrafting = false; boolean hasStartedCrafting = false;
boolean checkNBTRecipe = false;
long lastTick = -1; long lastTick = -1;
public FusionControlComputerBlockEntity() { public FusionControlComputerBlockEntity() {
@ -224,6 +227,16 @@ public class FusionControlComputerBlockEntity extends PowerAcceptorBlockEntity
return; return;
} }
//Move this to here from the nbt read method, as it now requires the world as of 1.14
if(checkNBTRecipe) {
checkNBTRecipe = false;
for (final RebornRecipe reactorRecipe : ModRecipes.FUSION_REACTOR.getRecipes(getWorld())) {
if (validateRecipe((FusionReactorRecipe) reactorRecipe)) {
this.currentRecipe = (FusionReactorRecipe) reactorRecipe;
}
}
}
if(lastTick == world.getTime()){ if(lastTick == world.getTime()){
//Prevent tick accerators, blame obstinate for this. //Prevent tick accerators, blame obstinate for this.
return; return;
@ -246,7 +259,7 @@ public class FusionControlComputerBlockEntity extends PowerAcceptorBlockEntity
} }
if (currentRecipe != null) { if (currentRecipe != null) {
if (!hasStartedCrafting && inventory.hasChanged() && !validateRecipe(currentRecipe)) { if (!validateRecipe(currentRecipe)) {
resetCrafter(); resetCrafter();
return; return;
} }
@ -341,11 +354,7 @@ public class FusionControlComputerBlockEntity extends PowerAcceptorBlockEntity
this.neededPower = tagCompound.getInt("neededPower"); this.neededPower = tagCompound.getInt("neededPower");
this.hasStartedCrafting = tagCompound.getBoolean("hasStartedCrafting"); this.hasStartedCrafting = tagCompound.getBoolean("hasStartedCrafting");
if(tagCompound.contains("hasActiveRecipe") && tagCompound.getBoolean("hasActiveRecipe") && this.currentRecipe == null){ if(tagCompound.contains("hasActiveRecipe") && tagCompound.getBoolean("hasActiveRecipe") && this.currentRecipe == null){
for (final RebornRecipe reactorRecipe : ModRecipes.FUSION_REACTOR.getRecipes(getWorld())) { checkNBTRecipe = true;
if (validateRecipe((FusionReactorRecipe) reactorRecipe)) {
this.currentRecipe = (FusionReactorRecipe) reactorRecipe;
}
}
} }
if(tagCompound.contains("size")){ if(tagCompound.contains("size")){
this.size = tagCompound.getInt("size"); this.size = tagCompound.getInt("size");
@ -394,12 +403,15 @@ public class FusionControlComputerBlockEntity extends PowerAcceptorBlockEntity
public BuiltContainer createContainer(int syncID, final PlayerEntity player) { public BuiltContainer createContainer(int syncID, final PlayerEntity player) {
return new ContainerBuilder("fusionreactor").player(player.inventory).inventory().hotbar() return new ContainerBuilder("fusionreactor").player(player.inventory).inventory().hotbar()
.addInventory().blockEntity(this).slot(0, 34, 47).slot(1, 126, 47).outputSlot(2, 80, 47).syncEnergyValue() .addInventory().blockEntity(this).slot(0, 34, 47).slot(1, 126, 47).outputSlot(2, 80, 47).syncEnergyValue()
.syncIntegerValue(this::getCoilStatus, this::setCoilStatus) .sync(this::getCoilStatus, this::setCoilStatus)
.syncIntegerValue(this::getCrafingTickTime, this::setCrafingTickTime) .sync(this::getCrafingTickTime, this::setCrafingTickTime)
.syncIntegerValue(this::getFinalTickTime, this::setFinalTickTime) .sync(this::getFinalTickTime, this::setFinalTickTime)
.syncIntegerValue(this::getSize, this::setSize) .sync(this::getSize, this::setSize)
.syncIntegerValue(this::getState, this::setState) .sync(this::getState, this::setState)
.syncIntegerValue(this::getNeededPower, this::setNeededPower).addInventory().create(this, syncID); .sync(this::getNeededPower, this::setNeededPower)
.sync(this::getCurrentRecipeID, this::setCurrentRecipeID)
.addInventory()
.create(this, syncID);
} }
public int getCoilStatus() { public int getCoilStatus() {
@ -464,16 +476,50 @@ public class FusionControlComputerBlockEntity extends PowerAcceptorBlockEntity
this.state = state; this.state = state;
} }
public Identifier getCurrentRecipeID() {
if(currentRecipe == null) {
return new Identifier("null", "null");
}
return currentRecipe.getId();
}
public void setCurrentRecipeID(Identifier currentRecipeID) {
if(currentRecipeID.getPath().equals("null")) {
currentRecipeID = null;
}
this.currentRecipeID = currentRecipeID;
}
public FusionReactorRecipe getCurrentRecipeFromID() {
if(currentRecipeID == null) return null;
return ModRecipes.FUSION_REACTOR.getRecipes(world).stream()
.filter(recipe -> recipe.getId().equals(currentRecipeID))
.findFirst()
.orElse(null);
}
public String getStateString(){ public String getStateString(){
if(state == -1){ if(state == -1){
return ""; return "";
} else if (state == 0){ } else if (state == 0){
return "No recipe"; return "No recipe";
} else if (state == 1){ } else if (state == 1){
FusionReactorRecipe r = getCurrentRecipeFromID();
if(r == null) {
return "Charging"; return "Charging";
}
int percentage = percentage(r.getStartEnergy(), getEnergy());
return "Charging (" + percentage + "%)";
} else if (state == 2){ } else if (state == 2){
return "Crafting"; return "Crafting";
} }
return ""; return "";
} }
private int percentage(double MaxValue, double CurrentValue) {
if (CurrentValue == 0) {
return 0;
}
return (int) ((CurrentValue * 100.0f) / MaxValue);
}
} }

View file

@ -2,7 +2,7 @@
"type": "techreborn:fusion_reactor", "type": "techreborn:fusion_reactor",
"power": 16384, "power": 16384,
"time": 2048, "time": 2048,
"start-power": 1, "start-power": 40000000,
"min-size": 1, "min-size": 1,
"ingredients": [ "ingredients": [
{ {

View file

@ -2,7 +2,7 @@
"type": "techreborn:fusion_reactor", "type": "techreborn:fusion_reactor",
"power": 16384, "power": 16384,
"time": 2048, "time": 2048,
"start-power": 1, "start-power": 40000000,
"min-size": 1, "min-size": 1,
"ingredients": [ "ingredients": [
{ {