Random Things compat (#37)

This commit is contained in:
FalsePattern committed 2022-08-25 22:20:51 +02:00
1 parent 7ff89947ea
commit 9a3126d7f9
5 files changed
+135

No files matched your search

@@ -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;
}
}
}
@@ -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);
}
}
}
}
@@ -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"),
@@ -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-")),