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

View file

@ -27,6 +27,7 @@ package techreborn.blockentity.fusionReactor;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.util.Identifier;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Direction;
import reborncore.api.IToolDrop;
@ -63,7 +64,9 @@ public class FusionControlComputerBlockEntity extends PowerAcceptorBlockEntity
int bottomStackSlot = 1;
int outputStackSlot = 2;
FusionReactorRecipe currentRecipe = null;
Identifier currentRecipeID = null;
boolean hasStartedCrafting = false;
boolean checkNBTRecipe = false;
long lastTick = -1;
public FusionControlComputerBlockEntity() {
@ -224,6 +227,16 @@ public class FusionControlComputerBlockEntity extends PowerAcceptorBlockEntity
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()){
//Prevent tick accerators, blame obstinate for this.
return;
@ -246,7 +259,7 @@ public class FusionControlComputerBlockEntity extends PowerAcceptorBlockEntity
}
if (currentRecipe != null) {
if (!hasStartedCrafting && inventory.hasChanged() && !validateRecipe(currentRecipe)) {
if (!validateRecipe(currentRecipe)) {
resetCrafter();
return;
}
@ -341,11 +354,7 @@ public class FusionControlComputerBlockEntity extends PowerAcceptorBlockEntity
this.neededPower = tagCompound.getInt("neededPower");
this.hasStartedCrafting = tagCompound.getBoolean("hasStartedCrafting");
if(tagCompound.contains("hasActiveRecipe") && tagCompound.getBoolean("hasActiveRecipe") && this.currentRecipe == null){
for (final RebornRecipe reactorRecipe : ModRecipes.FUSION_REACTOR.getRecipes(getWorld())) {
if (validateRecipe((FusionReactorRecipe) reactorRecipe)) {
this.currentRecipe = (FusionReactorRecipe) reactorRecipe;
}
}
checkNBTRecipe = true;
}
if(tagCompound.contains("size")){
this.size = tagCompound.getInt("size");
@ -394,12 +403,15 @@ public class FusionControlComputerBlockEntity extends PowerAcceptorBlockEntity
public BuiltContainer createContainer(int syncID, final PlayerEntity player) {
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()
.syncIntegerValue(this::getCoilStatus, this::setCoilStatus)
.syncIntegerValue(this::getCrafingTickTime, this::setCrafingTickTime)
.syncIntegerValue(this::getFinalTickTime, this::setFinalTickTime)
.syncIntegerValue(this::getSize, this::setSize)
.syncIntegerValue(this::getState, this::setState)
.syncIntegerValue(this::getNeededPower, this::setNeededPower).addInventory().create(this, syncID);
.sync(this::getCoilStatus, this::setCoilStatus)
.sync(this::getCrafingTickTime, this::setCrafingTickTime)
.sync(this::getFinalTickTime, this::setFinalTickTime)
.sync(this::getSize, this::setSize)
.sync(this::getState, this::setState)
.sync(this::getNeededPower, this::setNeededPower)
.sync(this::getCurrentRecipeID, this::setCurrentRecipeID)
.addInventory()
.create(this, syncID);
}
public int getCoilStatus() {
@ -464,16 +476,50 @@ public class FusionControlComputerBlockEntity extends PowerAcceptorBlockEntity
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(){
if(state == -1){
return "";
} else if (state == 0){
return "No recipe";
} else if (state == 1){
FusionReactorRecipe r = getCurrentRecipeFromID();
if(r == null) {
return "Charging";
}
int percentage = percentage(r.getStartEnergy(), getEnergy());
return "Charging (" + percentage + "%)";
} else if (state == 2){
return "Crafting";
}
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",
"power": 16384,
"time": 2048,
"start-power": 1,
"start-power": 40000000,
"min-size": 1,
"ingredients": [
{

View file

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