Skip to content

Commit

Permalink
Gradle and travis improvements
Browse files Browse the repository at this point in the history
 - Simplify pocket schematic generation logic
 - Make pocket generator work without having to start Minecraft
 - Add `gradlew generatePocketSchematics` task
 - Fix travis double-build
  • Loading branch information
Runemoro committed Dec 20, 2017
1 parent 70b35a2 commit 3d50cd8
Show file tree
Hide file tree
Showing 42 changed files with 204 additions and 122 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -28,3 +28,4 @@ libs
forge-*-changelog.txt
.DS_Store
Thumbs.db
logs
7 changes: 4 additions & 3 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@ language: java
notifications:
email: false
before_install: chmod +x gradlew
install: "./gradlew setupCIWorkspace -s"
script: "./gradlew build -s"
install: "./gradlew setupCIWorkspace"
script: "./gradlew build"
jdk:
- oraclejdk8
before_cache:
Expand All @@ -18,7 +18,8 @@ deploy:
provider: releases
api_key:
secure: A26twoR4XbarXTCxNIlKr4zbDRw6B+u879+6BWEKmavgAnjhGkPb9PkmR3tPm7iQDp9K9dlkez5KGUJEX/tCMYqL2gQnjlt9BfcVu7YJ4SXhZ6Zcck1/+1jhDox8QHLT2zvgYhmmEWdDD78FHJfO+2+ejhdxDMt6xxVtn47426rs0d0I1L9KDlC8EVoe42c+142Dedk5IaI2GCU07nOKaZFtAnR0NIk/Cf5P7rtecd+jNR3kaAu24U/WPoUMH2cCCf1+ViK/oJgu4FgdEGp1kec0gZnwWqJ+bYvywGiohmbN9B0JsjrwVixYgmzEw00cvdcV8uZHY/RXfOVtDh3ex9xaQYu6Fiq7L8pnw/pN6wsr7kFE0HvhSDAILIAOHFt5jlocAUfjEV/wFQyZUhxZx6Qclx7rdwYt4+iwtB+DPXR71JaaeSLtuQ7Q6HbFxrnjo1biS2ERkdOJobNBHEZvH2A9O1+bx4q9z1+LAP/XXxK2+KpzVZzkDXVUMl81oyAycuipXZQVTyDQdp9XB+waj7xclL57Cibs/DfwOw9l8DKR981h2Q784jBVlJyv/s+vZDgouxLqeTJdsK2cKOuYKl/fMhio6FIJs7p8U7l2OiXbvAg5jY1sJj69ePn7hTiMn2QHVihVM0t3W3/ppp7U0XKo++hB2VXwT/fSS8E5aXs=
file: "./build/libs/dimdoors-1.12.2-3.0.0-a4.jar"
file: "./build/libs/dimdoors.jar"
on:
repo: DimensionalDevelopment/DimDoors
branch: 1.12-WIP
tags: false
8 changes: 8 additions & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ ext.forgeversion = "14.23.1.2555"
version = mcversion + "-" + modversion
group = "com.zixiken.dimdoors" // http://maven.apache.org/guides/mini/guide-naming-conventions.html
archivesBaseName = "dimdoors"
jar.archiveName = "dimdoors.jar" // Constant name for travis

sourceCompatibility = targetCompatibility = "1.8" // Need this here so eclipse task generates correctly.
compileJava {
Expand Down Expand Up @@ -70,3 +71,10 @@ processResources {
exclude 'mcmod.info'
}
}

task generatePocketSchematics(dependsOn: jar, type: JavaExec, group: "dimdoors") {
classpath = files('build/libs/dimdoors.jar')
classpath += sourceSets.main.runtimeClasspath
main = "com.zixiken.dimdoors.shared.util.PocketSchematicGenerator"
args "src/main/resources/assets/dimdoors/pockets/schematic"
}
4 changes: 2 additions & 2 deletions gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#Sat Dec 16 20:23:21 EST 2017
#Tue Dec 19 19:32:34 EST 2017
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-4.4-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-4.4-all.zip
14 changes: 6 additions & 8 deletions src/main/java/com/zixiken/dimdoors/shared/DDProxyCommon.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,10 @@
import com.zixiken.dimdoors.shared.items.ModItems;
import com.zixiken.dimdoors.shared.sound.ModSounds;
import com.zixiken.dimdoors.shared.tileentities.*;
import com.zixiken.dimdoors.shared.util.DefaultSchematicGenerator;
import com.zixiken.dimdoors.shared.world.DimDoorDimensions;
import com.zixiken.dimdoors.shared.world.ModBiomes;
import net.minecraft.util.ResourceLocation;
import net.minecraft.world.WorldProvider;
import net.minecraft.world.biome.Biome;
import net.minecraftforge.client.IRenderHandler;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.fml.common.event.FMLInitializationEvent;
Expand All @@ -30,23 +28,23 @@ public void onPreInitialization(FMLPreInitializationEvent event) {
MinecraftForge.EVENT_BUS.register(ModSounds.class);
MinecraftForge.EVENT_BUS.register(ModBiomes.class);

registerTileEntities();
DimDoorDimensions.registerDimensions();

GameRegistry.registerTileEntity(TileEntityVerticalEntranceRift.class, "TileEntityVerticalEntranceRift"); // TODO: new forge registry system?
GameRegistry.registerTileEntity(TileEntityFloatingRift.class, "TileEntityFloatingRift");
GameRegistry.registerTileEntity(TileEntityHorizontalEntranceRift.class, "TileEntityHorizontalEntranceRift");

EntityRegistry.registerModEntity(new ResourceLocation(DimDoors.MODID, "mob_monolith"), EntityMonolith.class, "monolith", 0, DimDoors.instance, 70, 1, true);
EntityRegistry.registerEgg(new ResourceLocation(DimDoors.MODID, "mob_monolith"), 0, 0xffffff);
}

@Override
public void onInitialization(FMLInitializationEvent event) {

SchematicHandler.INSTANCE.loadSchematics();
DefaultSchematicGenerator.generateDefaultSchematics();
}

public void registerTileEntities() { // TODO: new registry system
GameRegistry.registerTileEntity(TileEntityVerticalEntranceRift.class, "TileEntityVerticalEntranceRift"); // TODO: new forge registry system?
GameRegistry.registerTileEntity(TileEntityFloatingRift.class, "TileEntityFloatingRift");
GameRegistry.registerTileEntity(TileEntityHorizontalEntranceRift.class, "TileEntityHorizontalEntranceRift");
}

abstract public void setCloudRenderer(WorldProvider provider, IRenderHandler renderer);

Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,166 @@
package com.zixiken.dimdoors.shared.util;

import com.zixiken.dimdoors.DimDoors;
import com.zixiken.dimdoors.server.DDProxyServer;
import com.zixiken.dimdoors.shared.blocks.BlockFabric;
import com.zixiken.dimdoors.shared.blocks.ModBlocks;
import com.zixiken.dimdoors.shared.rifts.RiftDestination;
import com.zixiken.dimdoors.shared.rifts.TileEntityRift;
import com.zixiken.dimdoors.shared.rifts.WeightedRiftDestination;
import net.minecraft.block.Block;
import net.minecraft.block.BlockDoor;
import net.minecraft.block.state.IBlockState;
import net.minecraft.init.Blocks;
import net.minecraft.init.Bootstrap;
import net.minecraft.nbt.CompressedStreamTools;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraftforge.event.RegistryEvent;
import net.minecraftforge.fml.common.DummyModContainer;
import net.minecraftforge.fml.common.Loader;
import net.minecraftforge.fml.common.ModContainer;
import net.minecraftforge.fml.common.ModMetadata;
import net.minecraftforge.registries.GameData;
import net.minecraftforge.registries.RegistryManager;

import java.io.DataOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

/**
*
* @author Robijnvogel
*/
public class PocketSchematicGenerator {

// Run "gradlew generatePocketSchematics" to generate the pocket schematics
@SuppressWarnings("UseOfSystemOutOrSystemErr")
public static void main(String... args) throws IOException, NoSuchMethodException, NoSuchFieldException, IllegalAccessException {
// Register blocks and tile entities to be able to run this without starting Minecraft
Bootstrap.register();
ModMetadata md = new ModMetadata();
md.modId = DimDoors.MODID;
ModContainer mc = new DummyModContainer(md);
Loader.instance().setupTestHarness(mc);
Loader.instance().setActiveModContainer(mc);
ModBlocks.registerBlocks(new RegistryEvent.Register(GameData.BLOCKS, RegistryManager.ACTIVE.getRegistry(GameData.BLOCKS)));
new DDProxyServer().registerTileEntities();
Loader.instance().setActiveModContainer(null);

// Parse arguments
File schematicDir;
if (args.length > 1) {
System.err.println("Too many arguments!");
return;
} else if (args.length == 1) {
schematicDir = new File(args[0]);
if (!schematicDir.isDirectory()) {
System.err.print("The directory " + args[0] + " couldn't be found!");
return;
}
} else {
schematicDir = new File("schematics/");
}

// Generate the schematics
List<Schematic> schematics = generatePocketSchematics(8);

// Save the schematics
boolean isPublic = true;
for (Schematic schematic : schematics) {
NBTTagCompound schematicNBT = Schematic.saveToNBT(schematic);
File saveFile = new File(schematicDir, (isPublic ? "public/" : "private/") + schematic.schematicName + ".schem");
saveFile.getParentFile().mkdirs();
DataOutputStream schematicDataStream = new DataOutputStream(new FileOutputStream(saveFile));
CompressedStreamTools.writeCompressed(schematicNBT, schematicDataStream);
schematicDataStream.flush();
schematicDataStream.close();
isPublic = !isPublic;
}
// TODO: also generate JSON files
}

public static List<Schematic> generatePocketSchematics(int maxPocketSize) {
List<Schematic> schematics = new ArrayList<>();
for (int pocketSize = 0; pocketSize < maxPocketSize; pocketSize++) {
schematics.add(generatePocketSchematic(
"public_pocket", // base name
pocketSize, // size
ModBlocks.FABRIC.getDefaultState().withProperty(BlockFabric.TYPE, BlockFabric.EnumType.ANCIENT), // outer wall
ModBlocks.FABRIC.getDefaultState().withProperty(BlockFabric.TYPE, BlockFabric.EnumType.REALITY), // inner wall
ModBlocks.DIMENSIONAL_DOOR, // door
RiftDestination.PocketExitDestination.builder().build())); // exit rift destination
schematics.add(generatePocketSchematic(
"private_pocket", // base name
pocketSize, // size
ModBlocks.FABRIC.getDefaultState().withProperty(BlockFabric.TYPE, BlockFabric.EnumType.ANCIENT_ALTERED), // outer wall
ModBlocks.FABRIC.getDefaultState().withProperty(BlockFabric.TYPE, BlockFabric.EnumType.ALTERED), // inner wall
ModBlocks.PERSONAL_DIMENSIONAL_DOOR, // door
RiftDestination.PrivatePocketExitDestination.builder().build())); // exit rift destination
}
return schematics;
}

private static Schematic generatePocketSchematic(String baseName, int pocketSize, IBlockState outerWallBlockState, IBlockState innerWallBlockState, Block doorBlock, RiftDestination exitDest) {
int size = (pocketSize + 1) * 16 - 1; // -1 so that the door can be centered

// Set schematic info
Schematic schematic = new Schematic();
schematic.version = 1;
schematic.author = "Robijnvogel"; //@todo set in build.gradle ${modID}
schematic.schematicName = baseName + "_" + pocketSize;
schematic.creationDate = System.currentTimeMillis();
schematic.requiredMods = new String[1];
schematic.requiredMods[0] = DimDoors.MODID;
schematic.width = (short) size;
schematic.height = (short) size;
schematic.length = (short) size;
schematic.offset = new int[]{0, 0, 0}; // TODO: center pockets

// Generate the pallette
schematic.paletteMax = 4;
schematic.pallette = new ArrayList<>();
schematic.pallette.add(Blocks.AIR.getDefaultState());
schematic.pallette.add(outerWallBlockState);
schematic.pallette.add(innerWallBlockState);
schematic.pallette.add(doorBlock.getDefaultState().withProperty(BlockDoor.HALF, BlockDoor.EnumDoorHalf.LOWER)); //bottom
schematic.pallette.add(doorBlock.getDefaultState().withProperty(BlockDoor.HALF, BlockDoor.EnumDoorHalf.UPPER)); //top

// Set block data
schematic.blockData = new int[size][size][size]; //[x][y][z]
for (int x = 0; x < size; x++) {
for (int y = 0; y < size; y++) {
for (int z = 0; z < size; z++) {
int layer = Collections.min(Arrays.asList(x, y, z, size - x, size - y, size - z));
if (layer == 0) {
schematic.blockData[x][y][z] = 1; // outer wall
} else if (layer < 5) {
schematic.blockData[x][y][z] = 2; // inner wall
} else {
schematic.blockData[x][y][z] = 0; // air
}
}
}
}
schematic.blockData[(size - 1)/2][5][4] = 3; // door bottom
schematic.blockData[(size - 1)/2][6][4] = 4; // door top

// Generate the rift TileEntities
schematic.tileEntities = new ArrayList<>();
TileEntityRift rift = (TileEntityRift) doorBlock.createTileEntity(null, doorBlock.getDefaultState());
rift.setSingleDestination(RiftDestination.PocketEntranceDestination.builder()
.ifDestinations(MathUtils.listFrom(new WeightedRiftDestination(exitDest, 1, 0)))
.build());
NBTTagCompound tileNBT = rift.serializeNBT();
tileNBT.setInteger("x", (size - 1) / 2);
tileNBT.setInteger("y", 5);
tileNBT.setInteger("z", 4);
schematic.tileEntities.add(tileNBT);

return schematic;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ public static Entity teleport(Entity entity, Location location, float yaw, float
}

public static Entity teleport(Entity entity, BlockPos pos, float yaw, float pitch) {
return teleport(entity, WorldUtils.getDim(entity.getEntityWorld()), pos.getX(), pos.getY(), pos.getZ(), yaw, pitch);
return teleport(entity, WorldUtils.getDim(entity.getEntityWorld()), pos.getX() + 0.5, pos.getY(), pos.getZ() + 0.5, yaw, pitch);
}

public static Entity teleport(Entity entity, double x, double y, double z, float yaw, float pitch) {
Expand Down
Loading

0 comments on commit 3d50cd8

Please sign in to comment.