Skip to content

Commit

Permalink
NOVA Worldgen Minecraft 1.11 Wrappers
Browse files Browse the repository at this point in the history
  • Loading branch information
ExE-Boss committed Jan 22, 2017
1 parent 7be0aea commit 0c248d1
Show file tree
Hide file tree
Showing 10 changed files with 340 additions and 0 deletions.
4 changes: 4 additions & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,10 @@ nova {
wrapper "nova.core:NOVA-Core-Wrapper-MC1.8:$nova_version"
runtime project(":minecraft:1.8")
}
"1_11" {
wrapper "nova.core:NOVA-Core-Wrapper-MC1.11:$nova_version"
runtime project(":minecraft:1.11")
}
}
}

Expand Down
1 change: 1 addition & 0 deletions minecraft/.gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,6 @@
!/build.gradle
!/.gitignore

!/1.11
!/1.8
!/1.7
17 changes: 17 additions & 0 deletions minecraft/1.11/.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
64 changes: 64 additions & 0 deletions minecraft/1.11/build.gradle
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
apply plugin: "maven-publish"
apply plugin: "com.jfrog.artifactory"
apply from: "https://raw.githubusercontent.com/NOVA-Team/NOVA-Gradle/master/shared-scripts/java.gradle"

publishing {
publications {
main(MavenPublication) {
from components.java

artifactId "NOVA-Worldgen-Wrapper-MC1.11"

artifact sourcesJar
artifact javadocJar

pom.withXml(writePom(project.properties))
}
}
}

artifactory {
publish {
defaults {
publications("main")
publishPom = true
}
}
}

artifacts {
archives jar
}

apply plugin: 'net.minecraftforge.gradle.forge'

minecraft {
version = property("minecraft.version") + "-" + property("forge.version")
mappings = 'snapshot_20161220'
runDir = "run"
}

dependencies {
compile rootProject
compile group: "nova.core", name: "NOVA-Core", version: property("nova_version"), changing: true
compile group: "nova.core", name: "NOVA-Core-Wrapper-MC1.11", version: property("nova_version"), classifier: "deobf", changing: true
}

processResources {
// this will ensure that this task is redone when the versions change.
inputs.property "version", project.version
inputs.property "mcversion", project.minecraft.version

// replace stuff in mcmod.info, nothing else
from(sourceSets.main.resources.srcDirs) {
include "mcmod.info"

// replace version and mcversion
expand "version": project.version, "mcversion": project.minecraft.version
}

// copy everything else, thats not the mcmod.info
from(sourceSets.main.resources.srcDirs) {
exclude "mcmod.info"
}
}
8 changes: 8 additions & 0 deletions minecraft/1.11/gradle.properties
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
minecraft.version = 1.11
forge.version = 13.19.1.2189
forgeGradleVersion = 2.2-SNAPSHOT

packaging = jar
info.inceptionYear = 2016
info.description = The NOVA-Worldgen Minecraft 1.11 wrapper.
info.organization.name = NOVA
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_11.depmodules;

import nova.worldgen.world.WorldInfo;
import nova.worldgen.wrapper.mc.forge.v1_11.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_11.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_11.depmodules.MCWorldgenModule;
import nova.worldgen.wrapper.mc.forge.v1_11.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_11.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,99 @@
/*
* 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_11.wrapper.world.forward;

import net.minecraft.block.Block;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import net.minecraft.world.chunk.IChunkGenerator;
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, IChunkGenerator chunkGenerator, IChunkProvider chunkProvider) {
double worldScale = world.provider.getAverageGroundLevel();
this.oreGen.forEach((ore, generator) -> {
double baseCount = 12 * ore.rarity * worldScale / 64;
int count = (int) Math.round(random.nextGaussian() * Math.sqrt(baseCount) + baseCount);
for(int i = 0; i < count; i++) {
// OreHeight Values: (when worldScale == 64, which is the default)
// 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 / 64) + (5 * worldScale / 64);

int x = chunkX + random.nextInt(16);
int y = (int) Math.round(yAdd + (random.nextDouble() * 10 * worldScale / 64));
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()));
}
}
1 change: 1 addition & 0 deletions settings.gradle
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
rootProject.name = "NOVA-Worldgen"

include "minecraft:1.11"
include "minecraft:1.8"
include "minecraft:1.7"

0 comments on commit 0c248d1

Please sign in to comment.