diff --git a/dependencies.gradle b/dependencies.gradle index 51bfcdf..2b8b697 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -105,6 +105,9 @@ dependencies { //Netherlicious 3.2.3 compile(deobfCurse("netherlicious-385860:3858031")) + //RandomThings 2.2.4 + compileOnly(deobfCurse("randomthings-59816:2225310")) + //Realistic Terrain Generation 1.1.1.7 compile(deobfCurse("rtg-237989:2521557")) diff --git a/src/main/java/com/falsepattern/endlessids/mixin/mixins/common/randomthings/ItemBiomePainterMixin.java b/src/main/java/com/falsepattern/endlessids/mixin/mixins/common/randomthings/ItemBiomePainterMixin.java new file mode 100644 index 0000000..4d9cffe --- /dev/null +++ b/src/main/java/com/falsepattern/endlessids/mixin/mixins/common/randomthings/ItemBiomePainterMixin.java @@ -0,0 +1,63 @@ +package com.falsepattern.endlessids.mixin.mixins.common.randomthings; + +import com.falsepattern.endlessids.mixin.helpers.IChunkMixin; +import lumien.randomthings.Items.ItemBiomeCapsule; +import lumien.randomthings.Items.ItemBiomePainter; +import lumien.randomthings.Items.ModItems; +import lumien.randomthings.Network.Messages.MessagePaintBiome; +import lumien.randomthings.Network.PacketHandler; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Overwrite; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.world.World; +import net.minecraft.world.chunk.Chunk; + +@Mixin(ItemBiomePainter.class) +public abstract class ItemBiomePainterMixin { + /** + * @author FalsePattern + * @reason getBiomeArray fix + */ + @Overwrite + public boolean onItemUse(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, World par3World, int par4, int par5, int par6, int par7, float par8, float par9, float par10) { + if (!par2EntityPlayer.inventory.hasItem(ModItems.biomeCapsule)) { + return false; + } else if (par3World.isRemote) { + return true; + } else { + for(int i = 0; i < par2EntityPlayer.inventory.getSizeInventory(); ++i) { + ItemStack is = par2EntityPlayer.inventory.getStackInSlot(i); + if (is != null && is.getItem() instanceof ItemBiomeCapsule && is.getItemDamage() != 0) { + NBTTagCompound nbt = is.stackTagCompound; + if (nbt == null) { + nbt = is.stackTagCompound = new NBTTagCompound(); + } + + int charges = nbt.getInteger("charges"); + if (charges > 0 || par2EntityPlayer.capabilities.isCreativeMode) { + Chunk c = par3World.getChunkFromBlockCoords(par4, par6); + int biomeID = is.getItemDamage() - 1; + short[] biomeArray = ((IChunkMixin)c).getBiomeShortArray(); //changed + if ((biomeArray[(par6 & 15) << 4 | par4 & 15] & 255) != biomeID) { + biomeArray[(par6 & 15) << 4 | par4 & 15] = (short)(biomeID & 0xFFFF); //changed + ((IChunkMixin)c).setBiomeShortArray(biomeArray); //changed + if (!par2EntityPlayer.capabilities.isCreativeMode) { + nbt.setInteger("charges", charges - 1); + par2EntityPlayer.inventoryContainer.detectAndSendChanges(); + } + + PacketHandler.INSTANCE.sendToDimension(new MessagePaintBiome(par4, par5, par6, par3World.provider.dimensionId, biomeID), par3World.provider.dimensionId); + } + } + + return true; + } + } + + return false; + } + } +} diff --git a/src/main/java/com/falsepattern/endlessids/mixin/mixins/common/randomthings/MessagePaintBiomeMixin.java b/src/main/java/com/falsepattern/endlessids/mixin/mixins/common/randomthings/MessagePaintBiomeMixin.java new file mode 100644 index 0000000..c3d8cc4 --- /dev/null +++ b/src/main/java/com/falsepattern/endlessids/mixin/mixins/common/randomthings/MessagePaintBiomeMixin.java @@ -0,0 +1,64 @@ +package com.falsepattern.endlessids.mixin.mixins.common.randomthings; + +import com.falsepattern.endlessids.mixin.helpers.IChunkMixin; +import lumien.randomthings.Items.ItemBiomeCapsule; +import lumien.randomthings.Network.Messages.MessagePaintBiome; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Overwrite; +import org.spongepowered.asm.mixin.Shadow; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.particle.EntityFX; +import net.minecraft.client.particle.EntitySmokeFX; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.world.biome.BiomeGenBase; +import net.minecraft.world.chunk.Chunk; +import cpw.mods.fml.common.network.simpleimpl.MessageContext; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; + +import java.awt.Color; +import java.util.Random; + +@Mixin(value = MessagePaintBiome.class, + remap = false) +public abstract class MessagePaintBiomeMixin { + + @Shadow private int posZ; + + @Shadow private int posX; + + @Shadow private int biomeID; + + @Shadow private int dimensionID; + + @Shadow private int posY; + + /** + * @author FalsePattern + * @reason getBiomeArray fix + */ + @Overwrite + @SideOnly(Side.CLIENT) + public void onMessage(MessageContext ctx) { + EntityPlayer player = Minecraft.getMinecraft().thePlayer; + if (player != null && player.worldObj.provider.dimensionId == this.dimensionID) { + Chunk c = player.worldObj.getChunkFromBlockCoords(this.posX, this.posZ); + short[] biomeArray = ((IChunkMixin)c).getBiomeShortArray(); //changed + biomeArray[(this.posZ & 15) << 4 | this.posX & 15] = (short)(this.biomeID & 0xFFFF); //changed + ((IChunkMixin)c).setBiomeShortArray(biomeArray); //changed + Minecraft.getMinecraft().thePlayer.worldObj.markBlocksDirtyVertical(this.posX, this.posZ, 0, player.worldObj.getActualHeight()); + BiomeGenBase biome = BiomeGenBase.getBiome(this.biomeID); + int colorInt = ItemBiomeCapsule.getColorForBiome(biome); + Random rng = new Random(); + Color color = new Color(colorInt); + + for(int i = 0; i < 64; ++i) { + EntityFX smoke = new EntitySmokeFX(player.worldObj, (float)this.posX + rng.nextFloat(), (float)this.posY + rng.nextFloat(), (float)this.posZ + rng.nextFloat(), 0.0, 0.0, 0.0); + smoke.setRBGColorF(0.003921569F * (float)color.getRed(), 0.003921569F * (float)color.getGreen(), 0.003921569F * (float)color.getBlue()); + Minecraft.getMinecraft().effectRenderer.addEffect(smoke); + } + } + + } +} diff --git a/src/main/java/com/falsepattern/endlessids/mixin/plugin/Mixin.java b/src/main/java/com/falsepattern/endlessids/mixin/plugin/Mixin.java index 523888a..4bc976f 100644 --- a/src/main/java/com/falsepattern/endlessids/mixin/plugin/Mixin.java +++ b/src/main/java/com/falsepattern/endlessids/mixin/plugin/Mixin.java @@ -165,6 +165,10 @@ public enum Mixin implements IMixin { NetherliciousBiomeConfigurationMixin(Side.COMMON, require(TargetedMod.NETHERLICIOUS), "netherlicious.BiomeConfigurationMixin"), //endregion Netherlicious->common + //region RandomThings->common + ItemBiomePainterMixin(Side.COMMON, require(TargetedMod.RANDOMTHINGS), "randomthings.ItemBiomePainterMixin"), + MessagePaintBiomeMixin(Side.COMMON, require(TargetedMod.RANDOMTHINGS), "randomthings.MessagePaintBiomeMixin"), + //endregion RandomThings->common //region RTG->common RTGChunkProviderRTGMixin(Side.COMMON, require(TargetedMod.RTG), "rtg.ChunkProviderRTGMixin"), RTGLandscapeGeneratorMixin(Side.COMMON, require(TargetedMod.RTG), "rtg.LandscapeGeneratorMixin"), diff --git a/src/main/java/com/falsepattern/endlessids/mixin/plugin/TargetedMod.java b/src/main/java/com/falsepattern/endlessids/mixin/plugin/TargetedMod.java index 9562b9a..80f9e64 100644 --- a/src/main/java/com/falsepattern/endlessids/mixin/plugin/TargetedMod.java +++ b/src/main/java/com/falsepattern/endlessids/mixin/plugin/TargetedMod.java @@ -35,6 +35,7 @@ public enum TargetedMod implements ITargetedMod { MFQM("More Fun Quicksand Mod", true, startsWith("morefunquicksandmod-")), NATURESCOMPASS("Nature's Compass", true, startsWith("naturescompass")), NETHERLICIOUS("Netherlicious", true, startsWith("netherlicious-")), + RANDOMTHINGS("Random Things", true, startsWith("randomthings-")), RTG("Realistic Terrain Generation", true, startsWith("rtg-")), THAUMCRAFT("Thaumcraft", true, startsWith("thaumcraft")), TROPICRAFT("Tropicraft", true, startsWith("tropicraft-")),