Skip to content

Commit

Permalink
Add mod support for WorldEdit, Advanced Rocketry, Mystcraft, Journeym…
Browse files Browse the repository at this point in the history
…ap, ClimateControl, and Creeping Nether

Fixes #11
Fixes #5
Fixes #3
Fixes #19
  • Loading branch information
Runemoro committed Jul 15, 2018
1 parent a9b05d9 commit b294e80
Show file tree
Hide file tree
Showing 10 changed files with 203 additions and 6 deletions.
8 changes: 7 additions & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -39,12 +39,18 @@ dependencies {
compileOnly "2561:393:twilightforest-1.12.2-3.7.424-universal@jar"
compileOnly "2569:273:Thaumcraft-1.12.2-6.1.BETA16@jar"
compileOnly "2572:684:AbyssalCraft-1.12.2-1.9.4.10@jar"
compileOnly "2509:208:Creeping+Nether-2.0@jar"
compileOnly "2497:541:GeographiCraft-1.12-0.8.9b@jar"
compileOnly "2581:550:mystcraft-1.12.2-0.13.4.05@jar"
compileOnly "2575:801:AdvancedRocketry-1.12.2-1.4.0-88-universal@jar"
compileOnly "2460:570:worldedit-forge-mc1.12-6.1.8-dist@jar"
compileOnly "2498:312:journeymap-1.12.2-5.5.2@jar"
}

def travisBuildNumber = System.getenv("TRAVIS_BUILD_NUMBER")
def versionSuffix = travisBuildNumber != null ? travisBuildNumber : "SNAPSHOT"

version "1.0.0-$versionSuffix"
version "1.0.1-$versionSuffix"
group "org.dimdev.jeid"
archivesBaseName = "JustEnoughIDs"

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package org.dimdev.jeid.mixin.core;
package org.dimdev.jeid.mixin.core.client;

import net.minecraft.block.Block;
import net.minecraft.block.SoundType;
Expand Down
24 changes: 24 additions & 0 deletions src/main/java/org/dimdev/jeid/mixin/modsupport/MixinBaseBlock.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package org.dimdev.jeid.mixin.modsupport;

import com.sk89q.worldedit.blocks.BaseBlock;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Overwrite;
import org.spongepowered.asm.mixin.Pseudo;
import org.spongepowered.asm.mixin.Shadow;

@Pseudo
@Mixin(BaseBlock.class)
public class MixinBaseBlock {
@Shadow private short id;

@Overwrite(remap = false)
protected final void internalSetId(int id) {
if (id > Short.MAX_VALUE) {
throw new IllegalArgumentException("Can't have a block ID above 32767 (" + id + " given)");
} else if (id < 0) {
throw new IllegalArgumentException("Can't have a block ID below 0");
} else {
this.id = (short)id;
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
package org.dimdev.jeid.mixin.modsupport;

import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import net.minecraft.world.biome.Biome;
import net.minecraft.world.chunk.Chunk;
import net.minecraftforge.fml.common.network.NetworkRegistry;
import org.dimdev.jeid.INewChunk;
import org.dimdev.jeid.network.BiomeChangeMessage;
import org.dimdev.jeid.network.MessageManager;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Overwrite;
import org.spongepowered.asm.mixin.Pseudo;
import zmaster587.advancedRocketry.util.BiomeHandler;

@Pseudo
@Mixin(BiomeHandler.class)
public class MixinBiomeHandler {
@Overwrite(remap = false)
public static void changeBiome(World world, int biomeId, BlockPos pos) {
changeBiome(world, biomeId, world.getChunkFromBlockCoords(pos), pos);
}

@Overwrite(remap = false)
public static void changeBiome(World world, int biomeId, Chunk chunk, BlockPos pos) {
Biome biome = world.getBiome(pos);
Biome biomeTo = Biome.getBiome(biomeId);

if (biome == biomeTo) {
return;
}

int x = pos.getX();
int z = pos.getZ();

if (biome.topBlock != biomeTo.topBlock) {
int topBlockY = chunk.getHeightValue(x & 15, z & 15) - 1;

while (!world.getBlockState(new BlockPos(x, topBlockY, z)).isOpaqueCube() && topBlockY > 0) topBlockY--;
if (topBlockY == 0) return;

if (chunk.getBlockState(x & 15, topBlockY, z & 15) == biome.topBlock) {
chunk.setBlockState(new BlockPos(x & 15, topBlockY, z & 15), biomeTo.topBlock);
}
}

((INewChunk) chunk).getIntBiomeArray()[(pos.getZ() & 15) << 4 | pos.getX() & 15] = biomeId;

NetworkRegistry.TargetPoint point = new NetworkRegistry.TargetPoint(world.provider.getDimension(), pos.getX(), pos.getY(), pos.getZ(), 300);
MessageManager.CHANNEL.sendToAllAround(new BiomeChangeMessage(pos.getX(), pos.getY(), biomeId), point);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package org.dimdev.jeid.mixin.modsupport;

import com.xcompwiz.mystcraft.symbol.symbols.SymbolFloatingIslands;
import net.minecraft.world.biome.Biome;
import net.minecraft.world.chunk.Chunk;
import org.dimdev.jeid.INewChunk;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Overwrite;
import org.spongepowered.asm.mixin.Shadow;

import java.util.Arrays;
import java.util.HashMap;
import java.util.List;

@Mixin(SymbolFloatingIslands.BiomeReplacer.class)
public class MixinBiomeReplacer {
@Shadow private HashMap<List<Integer>, boolean[]> chunks;
@Shadow private Biome biome;

@Overwrite(remap = false)
public void finalizeChunk(Chunk chunk, int chunkX, int chunkZ) {
boolean[] modified = chunks.remove(Arrays.asList(chunkX, chunkZ));

if (modified != null) {
int[] biomes = ((INewChunk) chunk).getIntBiomeArray();

for(int coords = 0; coords < modified.length; ++coords) {
if (modified[coords]) {
biomes[coords] = Biome.getIdForBiome(biome) & 255;
}
}
}
}
}
24 changes: 24 additions & 0 deletions src/main/java/org/dimdev/jeid/mixin/modsupport/MixinChunkMD.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package org.dimdev.jeid.mixin.modsupport;

import journeymap.client.model.ChunkMD;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import net.minecraft.world.biome.Biome;
import net.minecraft.world.chunk.Chunk;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Overwrite;
import org.spongepowered.asm.mixin.Shadow;

import javax.annotation.Nullable;

@Mixin(ChunkMD.class)
public abstract class MixinChunkMD {
@Shadow public abstract World getWorld();
@Shadow public abstract Chunk getChunk();

@Overwrite(remap = false)
@Nullable
public Biome getBiome(final BlockPos pos) {
return getChunk().getBiome(pos, getWorld().getBiomeProvider());
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package org.dimdev.jeid.mixin.modsupport;

import climateControl.DimensionManager;
import net.minecraft.init.Biomes;
import net.minecraft.world.biome.Biome;
import net.minecraft.world.chunk.Chunk;
import org.dimdev.jeid.INewChunk;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Overwrite;
import org.spongepowered.asm.mixin.Pseudo;

@Pseudo
@Mixin(DimensionManager.class)
public class MixinDimensionManager {
@Overwrite(remap = false)
private boolean hasOnlySea(Chunk tested) {
for (int biome : ((INewChunk) tested).getIntBiomeArray()) {
if (biome != 0 && biome != Biome.getIdForBiome(Biomes.DEEP_OCEAN)) {
return false;
}
}

return true;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package org.dimdev.jeid.mixin.modsupport;

import com.cutievirus.creepingnether.entity.EntityPortal;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import net.minecraft.world.biome.Biome;
import net.minecraft.world.chunk.Chunk;
import org.dimdev.jeid.INewChunk;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Overwrite;
import org.spongepowered.asm.mixin.Pseudo;
import org.spongepowered.asm.mixin.Shadow;

@Pseudo
@Mixin(EntityPortal.class)
public class MixinEntityPortal {
@Shadow private static Biome toBiome;

@Overwrite(remap = false)
public static void corruptBiome(World world, BlockPos pos) {
if (world.isBlockLoaded(pos)) {
Chunk chunk = world.getChunkFromBlockCoords(pos);
((INewChunk) chunk).getIntBiomeArray()[(pos.getZ() & 15) << 4 | pos.getX() & 15] = Biome.getIdForBiome(toBiome);
}
}
}
6 changes: 3 additions & 3 deletions src/main/resources/mixins.jeid.core.json
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,11 @@
"MixinSPacketChunkData",
"MixinGenLayerVoronoiZoom",
"MixinChunkPrimer",
"MixinChunkProviderServer",
"MixinRenderGlobal"
"MixinChunkProviderServer"
],
"client": [
"client.MixinChunk"
"client.MixinChunk",
"client.MixinRenderGlobal"
],
"injectors": {
"maxShiftBy": 10
Expand Down
8 changes: 7 additions & 1 deletion src/main/resources/mixins.jeid.modsupport.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,13 @@
"MixinBOPCommand",
"MixinBlockTFMagicLogSpecial",
"MixinUtils",
"MixinCleansingRitualMessage"
"MixinCleansingRitualMessage",
"MixinEntityPortal",
"MixinDimensionManager",
"MixinBiomeReplacer",
"MixinBiomeHandler",
"MixinBaseBlock",
"MixinChunkMD"
],
"injectors": {
"maxShiftBy": 10
Expand Down

0 comments on commit b294e80

Please sign in to comment.