From 0aa8974035ea83464f3b8a003d58186e3c5921e6 Mon Sep 17 00:00:00 2001 From: modmuss50 Date: Mon, 9 Oct 2017 11:48:13 +0100 Subject: [PATCH] Fix some issues with the solar panels --- .../generator/solarpanel/BlockSolarPanel.java | 10 +-- .../generator/solarpanel/EnumPanelType.java | 6 +- .../techreborn/client/StackToolTipEvent.java | 2 +- .../tiles/generator/TileSolarPanel.java | 80 +++++++++++++------ 4 files changed, 62 insertions(+), 36 deletions(-) diff --git a/src/main/java/techreborn/blocks/generator/solarpanel/BlockSolarPanel.java b/src/main/java/techreborn/blocks/generator/solarpanel/BlockSolarPanel.java index 7004c0205..3a538d27a 100644 --- a/src/main/java/techreborn/blocks/generator/solarpanel/BlockSolarPanel.java +++ b/src/main/java/techreborn/blocks/generator/solarpanel/BlockSolarPanel.java @@ -24,8 +24,6 @@ package techreborn.blocks.generator.solarpanel; -import java.util.List; - import com.google.common.collect.Lists; import net.minecraft.block.material.Material; import net.minecraft.block.properties.IProperty; @@ -47,11 +45,12 @@ import net.minecraft.world.World; import prospector.shootingstar.ShootingStar; import prospector.shootingstar.model.ModelCompound; import reborncore.common.BaseTileBlock; -import reborncore.common.util.ArrayUtils; import techreborn.client.TechRebornCreativeTab; import techreborn.lib.ModInfo; import techreborn.tiles.generator.TileSolarPanel; +import java.util.List; + /** * Created by modmuss50 on 25/02/2016. */ @@ -76,6 +75,7 @@ public class BlockSolarPanel extends BaseTileBlock { public int getMetaFromState(IBlockState state) { return state.getValue(TYPE).ordinal(); } + protected BlockStateContainer createBlockState() { return new BlockStateContainer(this, new IProperty[]{TYPE}); } @@ -87,7 +87,7 @@ public class BlockSolarPanel extends BaseTileBlock { @Override public TileEntity createNewTileEntity(World worldIn, int meta) { - return new TileSolarPanel(); + return new TileSolarPanel(getStateFromMeta(meta).getValue(TYPE)); } @Override @@ -109,7 +109,5 @@ public class BlockSolarPanel extends BaseTileBlock { for (EnumPanelType panelType : EnumPanelType.values()) { list.add(new ItemStack(this, 1, panelType.ordinal())); } - - } } diff --git a/src/main/java/techreborn/blocks/generator/solarpanel/EnumPanelType.java b/src/main/java/techreborn/blocks/generator/solarpanel/EnumPanelType.java index e2ac25b14..89c59de6c 100644 --- a/src/main/java/techreborn/blocks/generator/solarpanel/EnumPanelType.java +++ b/src/main/java/techreborn/blocks/generator/solarpanel/EnumPanelType.java @@ -6,9 +6,9 @@ import reborncore.api.power.EnumPowerTier; public enum EnumPanelType implements IStringSerializable { Basic("basic", 1, 0, EnumPowerTier.MICRO), Hybrid("hybrid", 16, 0, EnumPowerTier.LOW), - Advanced("advanced", 64, 6, EnumPowerTier.MEDIUM), - Ultimate("ultimate", 256, 26, EnumPowerTier.HIGH), - Quantum("quantum", 1024, 102, EnumPowerTier.EXTREME); + Advanced("advanced", 64, 2, EnumPowerTier.MEDIUM), + Ultimate("ultimate", 256, 16, EnumPowerTier.HIGH), + Quantum("quantum", 1024, 64, EnumPowerTier.EXTREME); private int ID; private String friendlyName; diff --git a/src/main/java/techreborn/client/StackToolTipEvent.java b/src/main/java/techreborn/client/StackToolTipEvent.java index 14eed7f16..dc3e5ce0a 100644 --- a/src/main/java/techreborn/client/StackToolTipEvent.java +++ b/src/main/java/techreborn/client/StackToolTipEvent.java @@ -70,7 +70,7 @@ public class StackToolTipEvent { if (block != null && (block instanceof BlockContainer || block instanceof ITileEntityProvider) && block.getRegistryName().getResourceDomain().contains("techreborn")) { TileEntity tile = block.createTileEntity(Minecraft.getMinecraft().world, - block.getDefaultState()); + block.getStateFromMeta(event.getItemStack().getItemDamage())); if (tile instanceof IListInfoProvider) { ((IListInfoProvider) tile).addInfo(event.getToolTip(), false); } diff --git a/src/main/java/techreborn/tiles/generator/TileSolarPanel.java b/src/main/java/techreborn/tiles/generator/TileSolarPanel.java index f88b06178..315e9e201 100644 --- a/src/main/java/techreborn/tiles/generator/TileSolarPanel.java +++ b/src/main/java/techreborn/tiles/generator/TileSolarPanel.java @@ -26,28 +26,32 @@ package techreborn.tiles.generator; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumFacing; +import net.minecraft.util.text.TextFormatting; import reborncore.api.IToolDrop; import reborncore.api.power.EnumPowerTier; import reborncore.common.powerSystem.TilePowerAcceptor; -import techreborn.blocks.generator.solarpanel.BlockSolarPanel; +import reborncore.common.util.StringUtils; +import techreborn.Core; import techreborn.blocks.generator.solarpanel.EnumPanelType; import techreborn.init.ModBlocks; -public class TileSolarPanel extends TilePowerAcceptor implements IToolDrop { +import java.util.List; +public class TileSolarPanel extends TilePowerAcceptor implements IToolDrop { boolean canSeeSky = false; int powerToAdd; - EnumPanelType panel = null; + EnumPanelType panel; + //This is left here to allow the world to create a new instance of it when loading, do not remove this. public TileSolarPanel() { super(); } - @Override - public void onLoad() { - this.panel = getPanelType(); + public TileSolarPanel(EnumPanelType panel) { + this.panel = panel; } @Override @@ -74,19 +78,9 @@ public class TileSolarPanel extends TilePowerAcceptor implements IToolDrop { return canSeeSky && !this.world.isRaining() && !this.world.isThundering() && this.world.isDaytime(); } - private EnumPanelType getPanelType() { - if (world != null) { - return world.getBlockState(pos).getValue(BlockSolarPanel.TYPE); - } - return EnumPanelType.Basic; - } - @Override public double getBaseMaxPower() { - if (this.panel != null) { - return panel.internalCapacity; - } - return 0; + return panel.internalCapacity; } @Override @@ -101,10 +95,7 @@ public class TileSolarPanel extends TilePowerAcceptor implements IToolDrop { @Override public double getBaseMaxOutput() { - if (this.panel != null) { - return this.panel.generationRateD; - } - return 0; + return panel.generationRateD; } @Override @@ -112,17 +103,54 @@ public class TileSolarPanel extends TilePowerAcceptor implements IToolDrop { return 0; } + @Override + public EnumPowerTier getTier() { + return this.panel.powerTier; + } + @Override public EnumPowerTier getBaseTier() { - if (this.panel != null){ - return this.panel.powerTier; - } - return EnumPowerTier.MEDIUM; + return getTier(); } @Override public ItemStack getToolDrop(final EntityPlayer p0) { - return new ItemStack(ModBlocks.SOLAR_PANEL); + return new ItemStack(ModBlocks.SOLAR_PANEL, 1, world.getBlockState(pos).getBlock().getMetaFromState(world.getBlockState(pos))); } + @Override + public void readFromNBT(NBTTagCompound tag) { + super.readFromNBT(tag); + if(tag.hasKey("panelType")){ + panel = EnumPanelType.values()[tag.getInteger("panelType")]; + } else { + Core.logHelper.warn("A solar panel has failed to load from NBT, it will not work correctly. Please break and replace it to fix the issue. BlockPos:" + pos.toString()); + panel = EnumPanelType.Basic; + } + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound tag) { + tag.setInteger("panelType", panel.ordinal()); + return super.writeToNBT(tag); + } + + @Override + public void checkTeir() { + //Nope + } + + @Override + public void addInfo(List info, boolean isRealTile) { + info.add(TextFormatting.GRAY + "Internal Energy Storage: " + TextFormatting.GOLD + + getLocaliszedPowerFormatted((int) getMaxPower())); + + info.add(TextFormatting.GRAY + "Generation Rate Day: " + TextFormatting.GOLD + + getLocaliszedPowerFormatted(panel.generationRateD)); + + info.add(TextFormatting.GRAY + "Generation Rate Night: " + TextFormatting.GOLD + + getLocaliszedPowerFormatted(panel.generationRateN)); + + info.add(TextFormatting.GRAY + "Tier: " + TextFormatting.GOLD + StringUtils.toFirstCapitalAllLowercase(getTier().toString())); + } } \ No newline at end of file