diff options
author | Draknyte1 <Draknyte1@hotmail.com> | 2017-12-21 15:48:47 +1000 |
---|---|---|
committer | Draknyte1 <Draknyte1@hotmail.com> | 2017-12-21 15:48:47 +1000 |
commit | ecc60485f31011bf9cc6a02edb985fb683793bb7 (patch) | |
tree | 5211970e67d0773f91903054f27819c6938df141 /src/Java/gtPlusPlus/core/world | |
parent | 6a05213a156b3c5fe95f422234a8cb9a19ec00f1 (diff) | |
download | GT5-Unofficial-ecc60485f31011bf9cc6a02edb985fb683793bb7.tar.gz GT5-Unofficial-ecc60485f31011bf9cc6a02edb985fb683793bb7.tar.bz2 GT5-Unofficial-ecc60485f31011bf9cc6a02edb985fb683793bb7.zip |
+ Added a dimension ID config option which it now will try use if available.
% More work on the Dimension again.
$ Fixed NPE caused by disabled material handler.
$ Fixed bad fluid used in world generation.
# Fixed spawn rate of mobs in custom dimension.
Diffstat (limited to 'src/Java/gtPlusPlus/core/world')
5 files changed, 221 insertions, 47 deletions
diff --git a/src/Java/gtPlusPlus/core/world/darkworld/Dimension_DarkWorld.java b/src/Java/gtPlusPlus/core/world/darkworld/Dimension_DarkWorld.java index 71d0e59492..22b8973cdb 100644 --- a/src/Java/gtPlusPlus/core/world/darkworld/Dimension_DarkWorld.java +++ b/src/Java/gtPlusPlus/core/world/darkworld/Dimension_DarkWorld.java @@ -5,23 +5,20 @@ import java.util.Random; import cpw.mods.fml.common.event.FMLPreInitializationEvent; import cpw.mods.fml.common.event.FMLServerStartingEvent; import cpw.mods.fml.common.registry.GameRegistry; -import gtPlusPlus.core.block.ModBlocks; -import gtPlusPlus.core.lib.LoadedMods; -import gtPlusPlus.core.world.darkworld.block.*; +import gtPlusPlus.core.lib.CORE; +import gtPlusPlus.core.world.darkworld.block.blockDarkWorldPortal; import gtPlusPlus.core.world.darkworld.item.itemDarkWorldPortalTrigger; import gtPlusPlus.core.world.darkworld.world.WorldProviderMod; import net.minecraft.block.Block; import net.minecraft.init.Blocks; -import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.world.World; import net.minecraftforge.common.DimensionManager; -@SuppressWarnings("unchecked") public class Dimension_DarkWorld { public Object instance; - public static int DIMID = 227; + public static int DIMID = CORE.DARKWORLD_ID; public static blockDarkWorldPortal portalBlock; public static itemDarkWorldPortalTrigger portalItem; @@ -29,7 +26,7 @@ public class Dimension_DarkWorld { public static Block blockSecondLayer; public static Block blockMainFiller = Blocks.stone; public static Block blockSecondaryFiller; - public static Block blockFluidLakes = ModBlocks.blockFluidSludge; + public static Block blockFluidLakes; public static Block blockPortalFrame; diff --git a/src/Java/gtPlusPlus/core/world/darkworld/biome/Biome_DarkWorld.java b/src/Java/gtPlusPlus/core/world/darkworld/biome/Biome_DarkWorld.java index f90966714e..2970a2c3de 100644 --- a/src/Java/gtPlusPlus/core/world/darkworld/biome/Biome_DarkWorld.java +++ b/src/Java/gtPlusPlus/core/world/darkworld/biome/Biome_DarkWorld.java @@ -1,5 +1,6 @@ package gtPlusPlus.core.world.darkworld.biome; +import java.lang.reflect.Field; import java.util.Random; import cpw.mods.fml.common.event.FMLPreInitializationEvent; @@ -10,16 +11,10 @@ import gtPlusPlus.api.objects.Logger; import gtPlusPlus.core.entity.monster.EntitySickBlaze; import gtPlusPlus.core.entity.monster.EntityStaballoyConstruct; import gtPlusPlus.core.lib.CORE; +import gtPlusPlus.core.util.reflect.ReflectionUtils; import gtPlusPlus.core.world.darkworld.Dimension_DarkWorld; -import net.minecraft.entity.monster.EntityBlaze; -import net.minecraft.entity.monster.EntityCaveSpider; -import net.minecraft.entity.monster.EntityCreeper; -import net.minecraft.entity.monster.EntityEnderman; -import net.minecraft.entity.monster.EntityGhast; -import net.minecraft.entity.monster.EntitySkeleton; -import net.minecraft.entity.monster.EntitySpider; -import net.minecraft.entity.monster.EntityZombie; -import net.minecraft.entity.passive.*; +import net.minecraft.entity.passive.EntityBat; +import net.minecraft.entity.passive.EntitySquid; import net.minecraft.item.ItemStack; import net.minecraft.world.World; import net.minecraft.world.biome.BiomeGenBase; @@ -28,7 +23,7 @@ import net.minecraftforge.common.BiomeManager; public class Biome_DarkWorld { - public static BiomeGenbiomeDarkWorld biome = new BiomeGenbiomeDarkWorld(); + public static BiomeGenDarkWorld biome = new BiomeGenDarkWorld(); public Object instance; @@ -38,8 +33,6 @@ public class Biome_DarkWorld { public void load() { BiomeDictionary.registerBiomeType(biome, BiomeDictionary.Type.DEAD); BiomeManager.addSpawnBiome(biome); - // BiomeManager.desertBiomes.add(new BiomeManager.BiomeEntry(biome, - // 10)); } public void generateNether(World world, Random random, int chunkX, int chunkZ) { @@ -61,10 +54,11 @@ public class Biome_DarkWorld { public void preInit(FMLPreInitializationEvent event) { } - static class BiomeGenbiomeDarkWorld extends BiomeGenBase { + static class BiomeGenDarkWorld extends BiomeGenBase { @SuppressWarnings("unchecked") - public BiomeGenbiomeDarkWorld() { + public BiomeGenDarkWorld() { super(CORE.DARKBIOME_ID); + this.setBiomeID(); this.theBiomeDecorator = new BiomeGenerator_Custom(); Logger.INFO("Dark World Temperature Category: "+getTempCategory()); this.setBiomeName("Dark World"); @@ -82,29 +76,41 @@ public class Biome_DarkWorld { this.spawnableCreatureList.clear(); this.spawnableWaterCreatureList.clear(); this.spawnableCaveCreatureList.clear(); - - //Enemies - this.spawnableMonsterList.add(new SpawnListEntry(EntitySickBlaze.class, 10, 4, 10)); - this.spawnableMonsterList.add(new SpawnListEntry(EntitySickBlaze.class, 60, 1, 2)); - this.spawnableMonsterList.add(new SpawnListEntry(EntityStaballoyConstruct.class, 30, 1, 2)); - //this.spawnableMonsterList.add(new SpawnListEntry(EntityStaballoyConstruct.class, 5, 1, 5)); - - addToMonsterSpawnLists(EntityBlaze.class, 5, 1, 5); - addToMonsterSpawnLists(EntityCaveSpider.class, 5, 1, 5); - addToMonsterSpawnLists(EntityCreeper.class, 4, 1, 2); - addToMonsterSpawnLists(EntityEnderman.class, 5, 1, 5); - addToMonsterSpawnLists(EntitySkeleton.class, 5, 1, 5); - addToMonsterSpawnLists(EntitySpider.class, 5, 1, 5); - addToMonsterSpawnLists(EntityZombie.class, 5, 1, 5); - - //Passive - this.spawnableCreatureList.add(new SpawnListEntry(EntityCow.class, 5, 5, 10)); - this.spawnableCreatureList.add(new SpawnListEntry(EntityBat.class, 4, 4, 8)); - this.spawnableCreatureList.add(new SpawnListEntry(EntityWolf.class, 5, 4, 10)); - - //Water - this.spawnableWaterCreatureList.add(new SpawnListEntry(EntitySquid.class, 5, 1, 10)); - + + //Enemies + this.spawnableMonsterList.add(new BiomeGenBase.SpawnListEntry(EntitySickBlaze.class, 100, 4, 4)); + this.spawnableMonsterList.add(new BiomeGenBase.SpawnListEntry(EntityStaballoyConstruct.class, 80, 1, 2)); + + //Animals + this.spawnableWaterCreatureList.add(new BiomeGenBase.SpawnListEntry(EntitySquid.class, 10, 4, 4)); + this.spawnableCaveCreatureList.add(new BiomeGenBase.SpawnListEntry(EntityBat.class, 10, 8, 8)); + + } + + private synchronized boolean setBiomeID() { + BiomeGenBase[] mTempList; + try { + Field mInternalBiomeList = ReflectionUtils.getField(BiomeGenBase.class, "biomeList"); + Field mClone = mInternalBiomeList; + mTempList = (BiomeGenBase[]) mInternalBiomeList.get(null); + if (mTempList != null){ + mTempList[CORE.DARKBIOME_ID] = this; + mInternalBiomeList.set(null, mTempList); + if (mClone != mInternalBiomeList && mClone.hashCode() != mInternalBiomeList.hashCode()){ + ReflectionUtils.setFinalStatic(mInternalBiomeList, mTempList); + Logger.REFLECTION("Set Biome ID for Dark World Biome internally in 'biomeList' field from "+BiomeGenBase.class.getCanonicalName()+"."); + return true; + } + else { + Logger.REFLECTION("Failed to set Biome ID for Dark World Biome internally in 'biomeList' field from "+BiomeGenBase.class.getCanonicalName()+"."); + } + } + return false; + } + catch (Exception e) { + Logger.REFLECTION("Could not access 'biomeList' field in "+BiomeGenBase.class.getCanonicalName()+"."); + return false; + } } @SideOnly(Side.CLIENT) @@ -122,8 +128,8 @@ public class Biome_DarkWorld { public int getSkyColorByTemp(float par1) { return 0xF67A14; } - - @SuppressWarnings("unchecked") + + @SuppressWarnings({ "unchecked", "unused" }) private boolean addToMonsterSpawnLists(Class<?> EntityClass, int a, int b, int c){ //this.spawnableMonsterList.add(new SpawnListEntry(EntityClass, a, b, c)); this.spawnableCaveCreatureList.add(new SpawnListEntry(EntityClass, a, b, c)); diff --git a/src/Java/gtPlusPlus/core/world/darkworld/block/DarkWorldContentLoader.java b/src/Java/gtPlusPlus/core/world/darkworld/block/DarkWorldContentLoader.java new file mode 100644 index 0000000000..1af92c0d3f --- /dev/null +++ b/src/Java/gtPlusPlus/core/world/darkworld/block/DarkWorldContentLoader.java @@ -0,0 +1,68 @@ +package gtPlusPlus.core.world.darkworld.block; + +import static gtPlusPlus.core.world.darkworld.Dimension_DarkWorld.*; + +import cpw.mods.fml.common.registry.GameRegistry; +import gtPlusPlus.core.block.base.BlockBaseFluid; +import gtPlusPlus.core.util.Utils; +import gtPlusPlus.core.world.darkworld.item.itemDarkWorldPortalTrigger; +import net.minecraft.init.Blocks; +import net.minecraftforge.fluids.FluidRegistry; + +public class DarkWorldContentLoader { + + //Static Vars + public static blockDarkWorldSludgeFluid SLUDGE; + + + public synchronized static void run() { + initMisc(); + initItems(); + initBlocks(); + } + + public synchronized static boolean initMisc(){ + + //Fluids + SLUDGE = (blockDarkWorldSludgeFluid) new blockDarkWorldSludgeFluid( + "sludge", + Utils.rgbtoHexValue(30, 130, 30)) + .setDensity(1800) + .setGaseous(false) + .setLuminosity(2) + .setViscosity(25000) + .setTemperature(300); + FluidRegistry.registerFluid(SLUDGE); + + return true; + } + + public synchronized static boolean initItems(){ + portalItem = (itemDarkWorldPortalTrigger) (new itemDarkWorldPortalTrigger().setUnlocalizedName("dimensionDarkWorld_trigger")); + GameRegistry.registerItem(portalItem, "dimensionDarkWorld_trigger"); + + return true; + } + + public synchronized static boolean initBlocks(){ + + //Create Block Instances + blockFluidLakes = new BlockBaseFluid("Sludge", SLUDGE, blockDarkWorldSludgeFluid.SLUDGE).setLightLevel(2f).setLightOpacity(1); + portalBlock = new blockDarkWorldPortal(); + blockTopLayer = new blockDarkWorldGround(); + blockSecondLayer = new blockDarkWorldPollutedDirt(); + blockPortalFrame = new blockDarkWorldPortalFrame(); + + //Registry + GameRegistry.registerBlock(blockTopLayer, "blockDarkWorldGround"); + GameRegistry.registerBlock(blockSecondLayer, "blockDarkWorldGround2"); + GameRegistry.registerBlock(blockPortalFrame, "blockDarkWorldPortalFrame"); + + //Make Flammable + Blocks.fire.setFireInfo(blockTopLayer, 30, 20); + + return true; + } + + +} diff --git a/src/Java/gtPlusPlus/core/world/darkworld/block/blockDarkWorldSludgeFluid.java b/src/Java/gtPlusPlus/core/world/darkworld/block/blockDarkWorldSludgeFluid.java new file mode 100644 index 0000000000..c3c9beddc8 --- /dev/null +++ b/src/Java/gtPlusPlus/core/world/darkworld/block/blockDarkWorldSludgeFluid.java @@ -0,0 +1,98 @@ +package gtPlusPlus.core.world.darkworld.block; + +import net.minecraft.block.material.*; +import net.minecraftforge.fluids.Fluid; + +public class blockDarkWorldSludgeFluid extends Fluid { + + + public static final Material SLUDGE = new MaterialLiquid(MapColor.dirtColor); + + protected static int mapColor = 0xFFFFFFFF; + protected static float overlayAlpha = 0.2F; + //protected static SoundEvent emptySound = SoundEvents.ITEM_BUCKET_EMPTY; + //protected static SoundEvent fillSound = SoundEvents.ITEM_BUCKET_FILL; + protected static Material material = SLUDGE; + + + public blockDarkWorldSludgeFluid(String fluidName, int rgbColour) { + this(fluidName, rgbColour, null); + } + + public blockDarkWorldSludgeFluid(String fluidName, int rgbColour, Float overlayAlpha) { + super(fluidName); + setColor(rgbColour); + if (overlayAlpha != null){ + setAlpha(overlayAlpha.floatValue()); + } + else { + setAlpha(0); + } + } + + @Override + public int getColor() + { + return mapColor; + } + + public blockDarkWorldSludgeFluid setColor(int parColor) + { + mapColor = parColor; + return this; + } + + public float getAlpha() + { + return overlayAlpha; + } + + public blockDarkWorldSludgeFluid setAlpha(float parOverlayAlpha) + { + overlayAlpha = parOverlayAlpha; + return this; + } + + /*public blockDarkWorldSludgeFluid setEmptySound(SoundEvent parSound) + { + emptySound = parSound; + return this; + } + + public SoundEvent getEmptySound() + { + return emptySound; + } + + @Override + public blockDarkWorldSludgeFluid setFillSound(SoundEvent parSound) + { + fillSound = parSound; + return this; + } + + @Override + public SoundEvent getFillSound() + { + return fillSound; + }*/ + + public blockDarkWorldSludgeFluid setMaterial(Material parMaterial) + { + material = parMaterial; + return this; + } + + public Material getMaterial() + { + return material; + } + + /*@Override + public boolean doesVaporize(FluidStack fluidStack) + { + if (block == null) + return false; + return block.getDefaultState().getMaterial() == getMaterial(); + }*/ +} diff --git a/src/Java/gtPlusPlus/core/world/darkworld/chunk/ChunkProviderModded.java b/src/Java/gtPlusPlus/core/world/darkworld/chunk/ChunkProviderModded.java index 1695714eff..82b21d7c0d 100644 --- a/src/Java/gtPlusPlus/core/world/darkworld/chunk/ChunkProviderModded.java +++ b/src/Java/gtPlusPlus/core/world/darkworld/chunk/ChunkProviderModded.java @@ -171,7 +171,12 @@ public class ChunkProviderModded implements IChunkProvider { p_147424_3_[j3 += short1] = Dimension_DarkWorld.blockMainFiller; } else if (k2 * 8 + l2 < b0) { - p_147424_3_[j3 += short1] = Blocks.water; //River Fluid + try { + p_147424_3_[j3 += short1] = Dimension_DarkWorld.blockFluidLakes; //River Fluid . + } + catch (Throwable t){ + p_147424_3_[j3 += short1] = Blocks.water; //River Fluid Fallback + } } else { p_147424_3_[j3 += short1] = null; |