Fix fusion reactor closes #1894
This commit is contained in:
parent
eebdf9a4b5
commit
797e66f8ca
4 changed files with 169 additions and 124 deletions
|
@ -1,85 +1,84 @@
|
||||||
/*
|
/*
|
||||||
* This file is part of TechReborn, licensed under the MIT License (MIT).
|
* This file is part of TechReborn, licensed under the MIT License (MIT).
|
||||||
*
|
*
|
||||||
* Copyright (c) 2018 TechReborn
|
* Copyright (c) 2018 TechReborn
|
||||||
*
|
*
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
* of this software and associated documentation files (the "Software"), to deal
|
* of this software and associated documentation files (the "Software"), to deal
|
||||||
* in the Software without restriction, including without limitation the rights
|
* in the Software without restriction, including without limitation the rights
|
||||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
* copies of the Software, and to permit persons to whom the Software is
|
* copies of the Software, and to permit persons to whom the Software is
|
||||||
* furnished to do so, subject to the following conditions:
|
* furnished to do so, subject to the following conditions:
|
||||||
*
|
*
|
||||||
* The above copyright notice and this permission notice shall be included in all
|
* The above copyright notice and this permission notice shall be included in all
|
||||||
* copies or substantial portions of the Software.
|
* copies or substantial portions of the Software.
|
||||||
*
|
*
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
* SOFTWARE.
|
* SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
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;
|
import net.minecraft.util.Identifier;
|
||||||
import net.minecraft.util.Identifier;
|
import net.minecraft.util.JsonHelper;
|
||||||
import net.minecraft.util.JsonHelper;
|
import reborncore.common.crafting.RebornRecipe;
|
||||||
import reborncore.common.crafting.RebornRecipe;
|
import reborncore.common.crafting.RebornRecipeType;
|
||||||
import reborncore.common.crafting.RebornRecipeType;
|
import reborncore.common.crafting.ingredient.RebornIngredient;
|
||||||
import reborncore.common.crafting.ingredient.RebornIngredient;
|
import techreborn.blockentity.fusionReactor.FusionControlComputerBlockEntity;
|
||||||
import techreborn.blockentity.fusionReactor.FusionControlComputerBlockEntity;
|
|
||||||
|
/**
|
||||||
/**
|
* @author drcrazy
|
||||||
* @author drcrazy
|
*
|
||||||
*
|
*/
|
||||||
*/
|
public class FusionReactorRecipe extends RebornRecipe {
|
||||||
public class FusionReactorRecipe extends RebornRecipe {
|
|
||||||
|
private int startE;
|
||||||
private int startE;
|
private int minSize;
|
||||||
private int minSize;
|
|
||||||
|
public FusionReactorRecipe(RebornRecipeType<?> type, Identifier name) {
|
||||||
public FusionReactorRecipe(RebornRecipeType<?> type, Identifier name) {
|
super(type, name);
|
||||||
super(type, name);
|
}
|
||||||
}
|
|
||||||
|
public FusionReactorRecipe(RebornRecipeType<?> type, Identifier name, DefaultedList<RebornIngredient> ingredients, DefaultedList<ItemStack> outputs, int power, int time, int startE, int minSize) {
|
||||||
public FusionReactorRecipe(RebornRecipeType<?> type, Identifier name, DefaultedList<RebornIngredient> ingredients, DefaultedList<ItemStack> outputs, int power, int time, int startE, int minSize) {
|
super(type, name, ingredients, outputs, power, time);
|
||||||
super(type, name, ingredients, outputs, power, time);
|
this.startE = startE;
|
||||||
this.startE = startE;
|
this.minSize = minSize;
|
||||||
this.minSize = minSize;
|
}
|
||||||
}
|
|
||||||
|
public int getStartEnergy () {
|
||||||
public int getStartEnergy () {
|
return startE;
|
||||||
return startE;
|
}
|
||||||
}
|
|
||||||
|
@Override
|
||||||
@Override
|
public void deserialize(JsonObject jsonObject) {
|
||||||
public void deserialize(JsonObject jsonObject) {
|
super.deserialize(jsonObject);
|
||||||
super.deserialize(jsonObject);
|
startE = JsonHelper.getInt(jsonObject, "start-power");
|
||||||
startE = JsonHelper.getInt(jsonObject, "start-power");
|
minSize = JsonHelper.getInt(jsonObject, "min-size");
|
||||||
minSize = JsonHelper.getInt(jsonObject, "min-size");
|
}
|
||||||
}
|
|
||||||
|
@Override
|
||||||
@Override
|
public void serialize(JsonObject jsonObject) {
|
||||||
public void serialize(JsonObject jsonObject) {
|
super.serialize(jsonObject);
|
||||||
super.serialize(jsonObject);
|
jsonObject.addProperty("start-power", startE);
|
||||||
jsonObject.addProperty("start-power", startE);
|
jsonObject.addProperty("min-size", minSize);
|
||||||
jsonObject.addProperty("min-size", minSize);
|
}
|
||||||
}
|
|
||||||
|
@Override
|
||||||
@Override
|
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;
|
||||||
return reactor.getSize() >= minSize && reactor.getEnergy() >= startE;
|
}
|
||||||
}
|
return false;
|
||||||
return false;
|
}
|
||||||
}
|
|
||||||
|
}
|
||||||
}
|
|
||||||
|
|
|
@ -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){
|
||||||
return "Charging";
|
FusionReactorRecipe r = getCurrentRecipeFromID();
|
||||||
|
if(r == null) {
|
||||||
|
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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,25 +1,25 @@
|
||||||
{
|
{
|
||||||
"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": [
|
||||||
{
|
{
|
||||||
"fluid": "techreborn:tritium",
|
"fluid": "techreborn:tritium",
|
||||||
"holder": "techreborn:cell"
|
"holder": "techreborn:cell"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"fluid": "techreborn:deuterium",
|
"fluid": "techreborn:deuterium",
|
||||||
"holder": "techreborn:cell"
|
"holder": "techreborn:cell"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"results": [
|
"results": [
|
||||||
{
|
{
|
||||||
"item": "techreborn:cell",
|
"item": "techreborn:cell",
|
||||||
"nbt":{
|
"nbt":{
|
||||||
"fluid": "techreborn:helium3"
|
"fluid": "techreborn:helium3"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
|
@ -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": [
|
||||||
{
|
{
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue