Skip to content

Commit

Permalink
Merge branch 'master' into plate
Browse files Browse the repository at this point in the history
  • Loading branch information
serenibyss authored Jan 19, 2025
2 parents 0ae1ad8 + 26a58fb commit c8be449
Show file tree
Hide file tree
Showing 10 changed files with 290 additions and 221 deletions.
18 changes: 9 additions & 9 deletions dependencies.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -36,14 +36,14 @@
dependencies {
api("com.github.GTNewHorizons:StructureLib:1.4.2:dev")
api("net.industrial-craft:industrialcraft-2:2.2.828-experimental:dev")
api("com.github.GTNewHorizons:NotEnoughItems:2.7.20-GTNH:dev")
api("com.github.GTNewHorizons:NotEnoughItems:2.7.22-GTNH:dev")
api("com.github.GTNewHorizons:NotEnoughIds:2.1.6:dev")
api("com.github.GTNewHorizons:GTNHLib:0.6.2:dev")
api("com.github.GTNewHorizons:ModularUI:1.2.17:dev")
api("com.github.GTNewHorizons:ModularUI2:2.2.0-1.7.10:dev")
api("com.github.GTNewHorizons:waila:1.8.2:dev")
api("com.github.GTNewHorizons:Applied-Energistics-2-Unofficial:rv3-beta-521-GTNH:dev")
api("com.github.GTNewHorizons:AE2FluidCraft-Rework:1.4.22-gtnh:dev")
api("com.github.GTNewHorizons:Applied-Energistics-2-Unofficial:rv3-beta-523-GTNH:dev")
api("com.github.GTNewHorizons:AE2FluidCraft-Rework:1.4.23-gtnh:dev")
api('com.github.GTNewHorizons:Yamcl:0.6.0:dev')
api("com.github.GTNewHorizons:Postea:1.0.13:dev")

Expand All @@ -58,7 +58,7 @@ dependencies {

compileOnlyApi("com.github.GTNewHorizons:Avaritia:1.59:dev")

compileOnlyApi('com.github.GTNewHorizons:Angelica:1.0.0-beta28:api') { transitive = false }
compileOnlyApi('com.github.GTNewHorizons:Angelica:1.0.0-beta29:api') { transitive = false }
compileOnlyApi("com.github.GTNewHorizons:AppleCore:3.3.4:dev") { transitive = false }
compileOnlyApi("com.github.GTNewHorizons:BuildCraft:7.1.42:dev") { transitive = false }
compileOnlyApi("com.github.GTNewHorizons:EnderIO:2.9.2:dev") { transitive = false }
Expand All @@ -80,22 +80,22 @@ dependencies {
compileOnly rfg.deobf("curse.maven:cofh-core-69162:2388751")
compileOnly("com.github.GTNewHorizons:Nuclear-Control:2.6.7:dev") { transitive = false }
compileOnly("thaumcraft:Thaumcraft:1.7.10-4.2.3.5:dev") { transitive = false }
implementation("com.github.GTNewHorizons:Hodgepodge:2.6.15:dev")
implementation("com.github.GTNewHorizons:Hodgepodge:2.6.16:dev")
compileOnly('com.github.GTNewHorizons:Botania:1.12.5-GTNH:dev') { transitive = false }
compileOnly('com.github.GTNewHorizons:HoloInventory:2.5.0-GTNH:dev') { transitive = false }
compileOnly rfg.deobf("curse.maven:extra-utilities-225561:2264384")
compileOnly rfg.deobf('curse.maven:minefactory-reloaded-66672:2366150')
compileOnly("com.github.GTNewHorizons:OpenComputers:1.11.4-GTNH:dev") {transitive = false}
// https://www.curseforge.com/minecraft/mc-mods/advancedsolarpanels
compileOnlyApi rfg.deobf('curse.maven:advsolar-362768:2885953')
compileOnly('com.github.GTNewHorizons:ThaumicEnergistics:1.7.4-GTNH:dev') {transitive = false}
compileOnly("com.github.GTNewHorizons:BloodMagic:1.7.0:dev") { transitive = false }
compileOnly('com.github.GTNewHorizons:ThaumicEnergistics:1.7.5-GTNH:dev') {transitive = false}
compileOnly("com.github.GTNewHorizons:BloodMagic:1.7.3:dev") { transitive = false }
compileOnly("com.github.GTNewHorizons:CraftTweaker:3.4.0:dev") { transitive = false }
compileOnly("com.github.GTNewHorizons:BetterLoadingScreen:1.7.0-GTNH:dev") { transitive = false }
compileOnly rfg.deobf("curse.maven:biomes-o-plenty-220318:2499612")

compileOnly('com.github.GTNewHorizons:SC2:2.3.0:dev') {transitive=false}
compileOnly('com.github.GTNewHorizons:Binnie:2.5.2:dev') {transitive = false}
compileOnly('com.github.GTNewHorizons:Binnie:2.5.4:dev') {transitive = false}
compileOnly('curse.maven:PlayerAPI-228969:2248928') {transitive=false}
devOnlyNonPublishable('com.github.GTNewHorizons:BlockRenderer6343:1.3.2:dev'){transitive=false}

Expand All @@ -106,7 +106,7 @@ dependencies {
// runtimeOnlyNonPublishable("com.github.GTNewHorizons:ForestryMC:4.10.1:dev")
// runtimeOnlyNonPublishable('com.github.GTNewHorizons:neiaddons:1.16.0:dev')
// runtimeOnlyNonPublishable('com.github.GTNewHorizons:MagicBees:2.9.0-GTNH:dev')
// runtimeOnlyNonPublishable('com.github.GTNewHorizons:Binnie:2.5.2:dev')
// runtimeOnlyNonPublishable('com.github.GTNewHorizons:Binnie:2.5.4:dev')

testImplementation(platform('org.junit:junit-bom:5.9.2'))
testImplementation('org.junit.jupiter:junit-jupiter')
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,30 +2,53 @@

import static gregtech.api.enums.GTValues.V;
import static gregtech.api.enums.Textures.BlockIcons.OVERLAYS_ENERGY_OUT;
import static gregtech.api.util.GTUtility.formatNumbers;

import java.util.List;

import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.EnumChatFormatting;
import net.minecraft.util.StatCollector;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;

import com.gtnewhorizons.modularui.api.math.Alignment;
import com.gtnewhorizons.modularui.api.screen.ModularWindow;
import com.gtnewhorizons.modularui.api.screen.UIBuildContext;
import com.gtnewhorizons.modularui.common.internal.wrapper.BaseSlot;
import com.gtnewhorizons.modularui.common.widget.DrawableWidget;
import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget;
import com.gtnewhorizons.modularui.common.widget.ProgressBar;
import com.gtnewhorizons.modularui.common.widget.SlotGroup;
import com.gtnewhorizons.modularui.common.widget.TextWidget;

import gregtech.api.enums.GTValues;
import gregtech.api.enums.Textures;
import gregtech.api.gui.modularui.GTUIInfos;
import gregtech.api.gui.modularui.GTUITextures;
import gregtech.api.interfaces.ITexture;
import gregtech.api.interfaces.modularui.IAddGregtechLogo;
import gregtech.api.interfaces.modularui.IAddUIWidgets;
import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
import gregtech.api.metatileentity.MetaTileEntity;
import gregtech.api.metatileentity.implementations.MTETieredMachineBlock;
import gregtech.api.render.TextureFactory;
import mcp.mobius.waila.api.IWailaConfigHandler;
import mcp.mobius.waila.api.IWailaDataAccessor;

public class MTESolarGenerator extends MTETieredMachineBlock {
public class MTESolarGenerator extends MTETieredMachineBlock implements IAddUIWidgets, IAddGregtechLogo {

public MTESolarGenerator(int aID, String aName, String aNameRegional, int aTier) {
super(
aID,
aName,
aNameRegional,
aTier,
0,
4,
new String[] { "Generates EU From Solar Power", "Does not generate power when raining",
"Cleans itself automatically", "Does not explode in rain!" });
}
Expand Down Expand Up @@ -85,16 +108,107 @@ public boolean isAccessAllowed(EntityPlayer aPlayer) {
return true;
}

// No logic for charge vs decharge because generator should not be chargeable
@Override
public int rechargerSlotCount() {
return 4;
}

@Override
public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer, ForgeDirection side,
float aX, float aY, float aZ) {
GTUIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer);
return true;
}

protected long clientEU;

@Override
public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) {
addGregTechLogo(builder);
addConditionalImages(builder);
builder.widget(
SlotGroup.ofItemHandler(inventoryHandler, 2)
.startFromSlot(0)
.endAtSlot(3)
.slotCreator(index -> new BaseSlot(inventoryHandler, index) {

@Override
public int getSlotStackLimit() {
return 1;
}
})
.background(getGUITextureSet().getItemSlot(), GTUITextures.OVERLAY_SLOT_CHARGER)
.build()
.setPos(100, 15))
.widget(
new ProgressBar()
.setProgress(
() -> (float) getBaseMetaTileEntity().getStoredEU() / getBaseMetaTileEntity().getEUCapacity())
.setDirection(ProgressBar.Direction.RIGHT)
.setTexture(GTUITextures.PROGRESSBAR_STORED_EU, 147)
.setPos(14, 74)
.setSize(147, 5))
.widget(
new TextWidget()
.setStringSupplier(
() -> formatNumbers(clientEU) + "/"
+ formatNumbers(getBaseMetaTileEntity().getEUCapacity())
+ " EU")
.setTextAlignment(Alignment.Center)
.setPos(14, 66)
.setSize(147, 5))
.widget(new FakeSyncWidget.LongSyncer(() -> getBaseMetaTileEntity().getStoredEU(), val -> clientEU = val));
}

public void addConditionalImages(ModularWindow.Builder builder) {
builder
.widget(
new DrawableWidget()
.setDrawable(
() -> dayTime ? GTUITextures.OVERLAY_BUTTON_CHECKMARK : GTUITextures.OVERLAY_BUTTON_CROSS)
.setPos(5, 10)
.setSize(16, 16))
.widget(new TextWidget(StatCollector.translateToLocal("GT5U.machines.solarindicator1")).setPos(21, 15))
.widget(new FakeSyncWidget.BooleanSyncer(() -> dayTime, val -> dayTime = val))
.widget(
new DrawableWidget()
.setDrawable(
() -> noRain ? GTUITextures.OVERLAY_BUTTON_CHECKMARK : GTUITextures.OVERLAY_BUTTON_CROSS)
.setPos(5, 26)
.setSize(16, 16))
.widget(new TextWidget(StatCollector.translateToLocal("GT5U.machines.solarindicator2")).setPos(21, 31))
.widget(new FakeSyncWidget.BooleanSyncer(() -> noRain, val -> noRain = val))
.widget(
new DrawableWidget()
.setDrawable(
() -> seesSky ? GTUITextures.OVERLAY_BUTTON_CHECKMARK : GTUITextures.OVERLAY_BUTTON_CROSS)
.setPos(5, 42)
.setSize(16, 16))
.widget(new TextWidget(StatCollector.translateToLocal("GT5U.machines.solarindicator3")).setPos(21, 47))
.widget(new FakeSyncWidget.BooleanSyncer(() -> seesSky, val -> seesSky = val));
}

@Override
public void addGregTechLogo(ModularWindow.Builder builder) {
builder.widget(
new DrawableWidget().setDrawable(GTUITextures.PICTURE_GT_LOGO_17x17_TRANSPARENT)
.setSize(17, 17)
.setPos(154, 5));
}

private boolean valid = true;

@Override
public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) {
// Check every 5 seconds for world conditions
if (aTick % 100 == 0) {
doWorldChecks(aBaseMetaTileEntity.getWorld(), aBaseMetaTileEntity);
}
if (aTick % 20 == 0 && valid) {
aBaseMetaTileEntity.increaseStoredEnergyUnits(maxEUOutput() * 20, false);
if (aBaseMetaTileEntity.isServerSide()) {
// Check every 5 seconds for world conditions
if (aTick % 100 == 0) {
doWorldChecks(aBaseMetaTileEntity.getWorld(), aBaseMetaTileEntity);
}
if (aTick % 20 == 0 && valid) {
aBaseMetaTileEntity.increaseStoredEnergyUnits(maxEUOutput() * 20, false);
}
}
super.onPostTick(aBaseMetaTileEntity, aTick);
}
Expand All @@ -105,9 +219,46 @@ public void onFirstTick(IGregTechTileEntity aBaseMetaTileEntity) {
super.onFirstTick(aBaseMetaTileEntity);
}

// Checks are independent for the sake of the ui indicators
private boolean noRain = false;
private boolean dayTime = false;
private boolean seesSky = false;

private void doWorldChecks(World world, IGregTechTileEntity aBaseMetaTileEntity) {
valid = (!(world.isRaining() && aBaseMetaTileEntity.getBiome().rainfall > 0.0F) && world.isDaytime()
&& aBaseMetaTileEntity.getSkyAtSide(ForgeDirection.UP));
noRain = !(world.isRaining() && aBaseMetaTileEntity.getBiome().rainfall > 0.0F);
dayTime = world.isDaytime();
seesSky = aBaseMetaTileEntity.getSkyAtSide(ForgeDirection.UP);

valid = noRain && dayTime && seesSky;
}

@Override
public void getWailaNBTData(EntityPlayerMP player, TileEntity tile, NBTTagCompound tag, World world, int x, int y,
int z) {
IGregTechTileEntity aBase = getBaseMetaTileEntity();
tag.setBoolean("valid", valid);
tag.setLong("storedeu", aBase.getStoredEU());
tag.setLong("maxeu", aBase.getEUCapacity());
super.getWailaNBTData(player, tile, tag, world, x, y, z);
}

@Override
public void getWailaBody(ItemStack itemStack, List<String> currenttip, IWailaDataAccessor accessor,
IWailaConfigHandler config) {
final NBTTagCompound tag = accessor.getNBTData();
if (tag.hasKey("valid")) currenttip.add(
tag.getBoolean("valid")
? EnumChatFormatting.GREEN + StatCollector.translateToLocal("GT5U.waila.generating.on")
: EnumChatFormatting.RED + StatCollector.translateToLocal("GT5U.waila.generating.off"));
if (tag.hasKey("storedeu") && tag.hasKey("maxeu")) currenttip.add(
EnumChatFormatting.GREEN + formatNumbers(tag.getLong("storedeu"))
+ EnumChatFormatting.GRAY
+ " / "
+ EnumChatFormatting.YELLOW
+ formatNumbers(tag.getLong("maxeu"))
+ EnumChatFormatting.GRAY
+ " EU");
super.getWailaBody(itemStack, currenttip, accessor, config);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -668,8 +668,8 @@ protected void runMachine(IGregTechTileEntity aBaseMetaTileEntity, long aTick) {
@Override
public void addRecipeOutputs() {
super.addRecipeOutputs();
if (outputMultiplier > 1.01f) {
FluidStack waterOutput = currentRecipe.mFluidOutputs[0];
if (outputMultiplier > 1.01f && mOutputFluids != null) {
FluidStack waterOutput = mOutputFluids[0];
FluidStack bonusOutput = new FluidStack(
waterOutput.getFluid(),
(int) (this.effectiveParallel * waterOutput.amount * (outputMultiplier - 1.0f)));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -432,7 +432,8 @@ private long drainFluidLimited(MTEHatchInput inputHatch, FluidStack fluid, long
public void addRecipeOutputs() {
super.addRecipeOutputs();
// If the cycle was ruined, output steam
if (this.ruinedCycle) {
// currentRecipe is null when multi is unloaded and reloaded
if (this.ruinedCycle && currentRecipe != null) {
FluidStack insertedWater = currentRecipe.mFluidInputs[0];
// Multiply by 60 since that's the water:steam ratio in GTNH
long steamAmount = insertedWater.amount * 60L;
Expand Down
Loading

0 comments on commit c8be449

Please sign in to comment.