Skip to content

Commit

Permalink
NOVA Worldgen Minecraft 1.8 Wrappers
Browse files Browse the repository at this point in the history
  • Loading branch information
ExE-Boss committed Jan 22, 2017
1 parent 69ffa52 commit 8fad69c
Show file tree
Hide file tree
Showing 8 changed files with 268 additions and 8 deletions.
2 changes: 2 additions & 0 deletions minecraft/.gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,5 @@

!/build.gradle
!/.gitignore

!/1.8
17 changes: 17 additions & 0 deletions minecraft/1.8/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# Ignore All
/*

# Sources
!/src

# github
!/.gitignore
!/README.md

# gradle
!/build.gradle
!/build.properties
!/settings.gradle
!/gradle.properties
!/gradlew*
!/gradle
6 changes: 3 additions & 3 deletions mc18/build.gradle → minecraft/1.8/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ publishing {
main(MavenPublication) {
from components.java

artifactId "NovaWorldgen-Wrapper-MC1.8"
artifactId "NOVA-Worldgen-Wrapper-MC1.8"

artifact sourcesJar
artifact javadocJar
Expand Down Expand Up @@ -57,8 +57,8 @@ minecraft {

dependencies {
compile rootProject
compile group: "nova.core", name: "NovaCore", version: property("nova.version"), changing: true
compile "nova.wrapper.mc18:NovaWrapper-MC1.8:0.1-SNAPSHOT:deobf"
compile group: "nova.core", name: "NOVA-Core", version: property("nova_version"), changing: true
compile group: "nova.core", name: "NOVA-Core-Wrapper-MC1.8", version: property("nova_version"), classifier: "deobf", changing: true
}

processResources {
Expand Down
7 changes: 2 additions & 5 deletions mc18/gradle.properties → minecraft/1.8/gradle.properties
Original file line number Diff line number Diff line change
@@ -1,9 +1,6 @@
version = 0.0.1-SNAPSHOT
group = nova.worldgen.wrapper.mc18

nova.version = 0.1.0-SNAPSHOT
minecraft.version = 1.8
forge.version = 11.14.3.1446
forge.version = 11.14.3.1491
forgeGradleVersion = 1.2-SNAPSHOT

packaging = jar
info.inceptionYear = 2015
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
/*
* Copyright (c) 2017 NOVA, All rights reserved.
* This library is free software, licensed under GNU Lesser General Public License version 3
*
* This file is part of NOVA.
*
* NOVA is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* NOVA is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with NOVA. If not, see <http://www.gnu.org/licenses/>.
*/
package nova.worldgen.wrapper.mc.forge.v1_8.depmodules;

import nova.worldgen.world.WorldInfo;
import nova.worldgen.wrapper.mc.forge.v1_8.wrapper.world.MCWorldInfo;
import se.jbee.inject.bind.BinderModule;
import se.jbee.inject.util.Scoped;

/**
* @author ExE Boss
*/
public class MCWorldgenModule extends BinderModule {

@Override
protected void declare() {
per(Scoped.APPLICATION).bind(WorldInfo.class).to(MCWorldInfo.class);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
/*
* Copyright (c) 2015 NOVA, All rights reserved.
* This library is free software, licensed under GNU Lesser General Public License version 3
*
* This file is part of NOVA.
*
* NOVA is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* NOVA is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with NOVA. If not, see <http://www.gnu.org/licenses/>.
*/

package nova.worldgen.wrapper.mc.forge.v1_8.launch;

import net.minecraftforge.fml.common.registry.GameRegistry;
import nova.core.loader.Loadable;
import nova.core.loader.Mod;
import nova.internal.worldgen.depmodules.WorldgenModule;
import nova.worldgen.WorldgenManager;
import nova.worldgen.wrapper.mc.forge.v1_8.depmodules.MCWorldgenModule;
import nova.worldgen.wrapper.mc.forge.v1_8.wrapper.world.forward.FWWorldGenerator;

/**
*
* @author ExE Boss
*/
@Mod(id = NovaWorldgenWrapper.id, name = NovaWorldgenWrapper.name, version = NovaWorldgenWrapper.version, modules = { MCWorldgenModule.class, WorldgenModule.class }, novaVersion = "0.0.1")
public class NovaWorldgenWrapper implements Loadable {

public static final String version = "0.0.1";
public static final String id = "nova-worldgen-wrapper";
public static final String name = "NOVA Worldgen";

public final WorldgenManager worldgenManager;

public FWWorldGenerator worldGenerator;

public NovaWorldgenWrapper(WorldgenManager worldgenManager) {
this.worldgenManager = worldgenManager;
this.worldGenerator = new FWWorldGenerator(this.worldgenManager);
}

@Override
public void preInit() {
GameRegistry.registerWorldGenerator(this.worldGenerator, 0);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
/*
* Copyright (c) 2017 NOVA, All rights reserved.
* This library is free software, licensed under GNU Lesser General Public License version 3
*
* This file is part of NOVA.
*
* NOVA is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* NOVA is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with NOVA. If not, see <http://www.gnu.org/licenses/>.
*/

package nova.worldgen.wrapper.mc.forge.v1_8.wrapper.world;

import nova.core.util.registry.Registry;
import nova.core.util.shape.Cuboid;
import nova.worldgen.WorldgenManager;
import nova.worldgen.ore.Ore;
import nova.worldgen.world.WorldInfo;

/**
* @author ExE Boss
*/
public class MCWorldInfo extends WorldInfo {

private final WorldgenManager worldgenManager;

public MCWorldInfo(WorldgenManager worldgenManager) {
this.worldgenManager = worldgenManager;
}

@Override
public Cuboid getWorldDimmensions() {
return new Cuboid(Double.NEGATIVE_INFINITY, 0, Double.NEGATIVE_INFINITY,
Double.POSITIVE_INFINITY, 256, Double.POSITIVE_INFINITY);
}

@Override
public Cuboid getWorldGenerationUnitDimmensions() {
return new Cuboid(0, 0, 0, 16, 16, 16);
}

@Override
public Registry<Ore> getOreGenerationRegistry() {
return worldgenManager.registry.stream().filter(gen -> gen instanceof Ore).map(ore -> (Ore) ore).collect(Registry::new, Registry::register, (r1, r2) -> r2.forEach(r1::register));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
/*
* Copyright (c) 2015 NOVA, All rights reserved.
* This library is free software, licensed under GNU Lesser General Public License version 3
*
* This file is part of NOVA.
*
* NOVA is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* NOVA is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with NOVA. If not, see <http://www.gnu.org/licenses/>.
*/

package nova.worldgen.wrapper.mc.forge.v1_8.wrapper.world.forward;

import net.minecraft.block.Block;
import net.minecraft.util.BlockPos;
import net.minecraft.world.World;
import net.minecraft.world.chunk.IChunkProvider;
import net.minecraft.world.gen.feature.WorldGenMinable;
import net.minecraftforge.fml.common.IWorldGenerator;
import nova.internal.core.Game;
import nova.worldgen.WorldgenManager;
import nova.worldgen.event.WorldgenEvent;
import nova.worldgen.generator.CustomGenerator;
import nova.worldgen.ore.Ore;
import nova.worldgen.ore.OreHeight;

import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Random;
import java.util.Set;
import java.util.stream.Collectors;

/**
*
* @author ExE Boss
*/
public class FWWorldGenerator implements IWorldGenerator {

private final Map<Ore, WorldGenMinable> oreGen;
private final Set<CustomGenerator> customGenerators;
private final WorldgenManager worldgenManager;

public FWWorldGenerator(WorldgenManager worldgenManager) {
this.worldgenManager = worldgenManager;
this.oreGen = new HashMap<>();
this.customGenerators = new HashSet<>();
Game.events().on(WorldgenEvent.Register.class).bind(evt -> {
if (evt.generable instanceof Ore) {
this.oreGen.put((Ore) evt.generable, new WorldGenMinable(((Block)Game.natives().toNative(((Ore)evt.generable).block.build())).getDefaultState(), (int) Math.round(((Ore)evt.generable).clusterSize * 5)));
} else if (evt.generable instanceof CustomGenerator) {
this.customGenerators.add((CustomGenerator) evt.generable);
}
});
}

@Override
public void generate(Random random, int chunkX, int chunkZ, World world, IChunkProvider chunkGenerator, IChunkProvider chunkProvider) {
double worldScale = world.provider.getAverageGroundLevel() / 64D;
this.oreGen.forEach((ore, generator) -> {
double baseCount = 12 * ore.rarity * worldScale;
int count = (int) Math.round(random.nextGaussian() * Math.sqrt(baseCount) + baseCount);
for(int i = 0; i < count; i++) {
// OreHeight Values: (when world.provider.getAverageGroundLevel() == 64)
// SURFACE = 60 (55-65)
// UNDERSURFACE = 50 (45-55)
// DEEP = 40 (35-45)
// DEEPER = 30 (25-35)
// DEEPERER = 20 (15-25)
// REALLYDEEP = 10 (5-15)

List<OreHeight> oreHeightList = Arrays.stream(OreHeight.values()).filter(ore.oreLayers::allows).collect(Collectors.toList());
if (oreHeightList.isEmpty()) return;

OreHeight height = oreHeightList.get(random.nextInt(oreHeightList.size()));
double yAdd = (OreHeight.values().length - height.ordinal() - 1) * (10 * worldScale) + (5 * worldScale);

int x = chunkX + random.nextInt(16);
int y = (int) Math.round(yAdd + (random.nextDouble() * 10 * worldScale));
int z = chunkZ + random.nextInt(16);

generator.generate(world, random, new BlockPos(x, y, z));
}
});
this.customGenerators.forEach(generator -> generator.generate(random, chunkX, chunkZ, worldScale, Game.natives().toNova(world), this.worldgenManager.getWorldInfo()));
}
}

0 comments on commit 8fad69c

Please sign in to comment.