mirror of
https://github.com/GTNewHorizons/Botania.git
synced 2026-10-26 14:24:22 +00:00
Merge branch 'derpbranch' into MC19
This commit is contained in:
commit
a802650289
7 files changed
+147
-137
No files matched your search
@@ -305,6 +305,11 @@ public class ClientProxy extends CommonProxy {
|
||||
return entity == Minecraft.getMinecraft().thePlayer;
|
||||
}
|
||||
|
||||
@Override
|
||||
public EntityPlayer getClientPlayer() {
|
||||
return Minecraft.getMinecraft().thePlayer;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isClientPlayerWearingMonocle() {
|
||||
return ItemMonocle.hasMonocle(Minecraft.getMinecraft().thePlayer);
|
||||
|
||||
@@ -18,6 +18,7 @@ import net.minecraft.entity.boss.EntityWither;
|
||||
import net.minecraft.entity.item.EntityEnderCrystal;
|
||||
import net.minecraft.entity.item.EntityItemFrame;
|
||||
import net.minecraft.entity.item.EntityPainting;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.entity.player.EntityPlayerMP;
|
||||
import net.minecraft.item.ItemRecord;
|
||||
import net.minecraft.item.ItemStack;
|
||||
@@ -241,6 +242,10 @@ public class CommonProxy {
|
||||
return false;
|
||||
}
|
||||
|
||||
public EntityPlayer getClientPlayer() {
|
||||
return null;
|
||||
}
|
||||
|
||||
public boolean isClientPlayerWearingMonocle() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -15,7 +15,6 @@ import net.minecraft.block.Block;
|
||||
import net.minecraft.block.state.IBlockState;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.gui.ScaledResolution;
|
||||
import net.minecraft.client.multiplayer.WorldClient;
|
||||
import net.minecraft.client.renderer.GlStateManager;
|
||||
import net.minecraft.client.renderer.texture.TextureMap;
|
||||
import net.minecraft.entity.Entity;
|
||||
@@ -36,7 +35,6 @@ import net.minecraft.init.Items;
|
||||
import net.minecraft.init.MobEffects;
|
||||
import net.minecraft.init.SoundEvents;
|
||||
import net.minecraft.inventory.EntityEquipmentSlot;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.item.ItemRecord;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
@@ -59,9 +57,6 @@ import net.minecraft.world.BossInfo;
|
||||
import net.minecraft.world.BossInfoServer;
|
||||
import net.minecraft.world.EnumDifficulty;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraft.world.WorldServer;
|
||||
import net.minecraft.world.storage.loot.LootContext;
|
||||
import net.minecraft.world.storage.loot.LootTable;
|
||||
import net.minecraftforge.common.util.FakePlayer;
|
||||
import net.minecraftforge.fml.relauncher.Side;
|
||||
import net.minecraftforge.fml.relauncher.SideOnly;
|
||||
@@ -82,22 +77,23 @@ import vazkii.botania.common.block.ModBlocks;
|
||||
import vazkii.botania.common.core.handler.ConfigHandler;
|
||||
import vazkii.botania.common.core.helper.Vector3;
|
||||
import vazkii.botania.common.item.ModItems;
|
||||
import vazkii.botania.common.item.relic.ItemRelic;
|
||||
import vazkii.botania.common.lib.LibMisc;
|
||||
import vazkii.botania.common.network.PacketBotaniaEffect;
|
||||
import vazkii.botania.common.network.PacketHandler;
|
||||
|
||||
import java.awt.*;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Random;
|
||||
import java.util.UUID;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
public class EntityDoppleganger extends EntityCreature implements IBotaniaBossWithShader {
|
||||
|
||||
public static final float ARENA_RANGE = 12F;
|
||||
private static final int SPAWN_TICKS = 160;
|
||||
private static final float RANGE = 12F;
|
||||
private static final float MAX_HP = 800F;
|
||||
|
||||
private static final int MOB_SPAWN_START_TICKS = 20;
|
||||
@@ -173,50 +169,35 @@ public class EntityDoppleganger extends EntityCreature implements IBotaniaBossWi
|
||||
return mb.makeSet();
|
||||
}
|
||||
|
||||
public static boolean spawn(EntityPlayer player, ItemStack par1ItemStack, World par3World, BlockPos pos, boolean hard) {
|
||||
if(par3World.getTileEntity(pos) instanceof TileEntityBeacon && isTruePlayer(player)) {
|
||||
if(par3World.getDifficulty() == EnumDifficulty.PEACEFUL) {
|
||||
if(!par3World.isRemote)
|
||||
player.addChatMessage(new TextComponentTranslation("botaniamisc.peacefulNoob").setStyle(new Style().setColor(TextFormatting.RED)));
|
||||
public static boolean spawn(EntityPlayer player, ItemStack stack, World world, BlockPos pos, boolean hard) {
|
||||
if(world.getTileEntity(pos) instanceof TileEntityBeacon && isTruePlayer(player)) {
|
||||
if(world.getDifficulty() == EnumDifficulty.PEACEFUL) {
|
||||
player.addChatMessage(new TextComponentTranslation("botaniamisc.peacefulNoob").setStyle(new Style().setColor(TextFormatting.RED)));
|
||||
return false;
|
||||
}
|
||||
|
||||
for(BlockPos coords : PYLON_LOCATIONS) {
|
||||
BlockPos pos_ = pos.add(coords);
|
||||
|
||||
IBlockState state = par3World.getBlockState(pos_);
|
||||
IBlockState state = world.getBlockState(pos_);
|
||||
Block blockat = state.getBlock();
|
||||
if(blockat != ModBlocks.pylon || state.getValue(BotaniaStateProps.PYLON_VARIANT) != PylonVariant.GAIA) {
|
||||
if(!par3World.isRemote)
|
||||
player.addChatMessage(new TextComponentTranslation("botaniamisc.needsCatalysts").setStyle(new Style().setColor(TextFormatting.RED)));
|
||||
player.addChatMessage(new TextComponentTranslation("botaniamisc.needsCatalysts").setStyle(new Style().setColor(TextFormatting.RED)));
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if(!hasProperArena(par3World, pos)) {
|
||||
for(int i = 0; i < 360; i += 8) {
|
||||
float r = 1F;
|
||||
float g = 0F;
|
||||
float b = 1F;
|
||||
float rad = i * (float) Math.PI / 180F;
|
||||
double x = pos.getX() + 0.5 - Math.cos(rad) * RANGE;
|
||||
double y = pos.getY() + 0.5;
|
||||
double z = pos.getZ() + 0.5 - Math.sin(rad) * RANGE;
|
||||
if(!hasProperArena(world, pos)) {
|
||||
PacketHandler.sendTo((EntityPlayerMP) player,
|
||||
new PacketBotaniaEffect(PacketBotaniaEffect.EffectType.ARENA_INDICATOR, pos.getX(), pos.getY(), pos.getZ()));
|
||||
|
||||
Botania.proxy.sparkleFX(par3World, x, y, z, r, g, b, 5F, 120);
|
||||
}
|
||||
|
||||
if(!par3World.isRemote)
|
||||
player.addChatMessage(new TextComponentTranslation("botaniamisc.badArena").setStyle(new Style().setColor(TextFormatting.RED)));
|
||||
player.addChatMessage(new TextComponentTranslation("botaniamisc.badArena").setStyle(new Style().setColor(TextFormatting.RED)));
|
||||
return false;
|
||||
}
|
||||
|
||||
par1ItemStack.stackSize--;
|
||||
stack.stackSize--;
|
||||
|
||||
if(par3World.isRemote)
|
||||
return true;
|
||||
|
||||
EntityDoppleganger e = new EntityDoppleganger(par3World);
|
||||
EntityDoppleganger e = new EntityDoppleganger(world);
|
||||
e.setPosition(pos.getX() + 0.5, pos.getY() + 3, pos.getZ() + 0.5);
|
||||
e.setInvulTime(SPAWN_TICKS);
|
||||
e.setHealth(1F);
|
||||
@@ -234,7 +215,7 @@ public class EntityDoppleganger extends EntityCreature implements IBotaniaBossWi
|
||||
e.getAttributeMap().getAttributeInstance(SharedMonsterAttributes.MAX_HEALTH).setBaseValue(MAX_HP * playerCount);
|
||||
|
||||
e.playSound(SoundEvents.entity_enderdragon_growl, 10F, 0.1F);
|
||||
par3World.spawnEntityInWorld(e);
|
||||
world.spawnEntityInWorld(e);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -244,10 +225,10 @@ public class EntityDoppleganger extends EntityCreature implements IBotaniaBossWi
|
||||
private static boolean hasProperArena(World world, BlockPos startPos) {
|
||||
int heightCheck = 3;
|
||||
int heightMin = 2;
|
||||
int range = (int) Math.ceil(RANGE);
|
||||
int range = (int) Math.ceil(ARENA_RANGE);
|
||||
for(int i = -range; i < range + 1; i++)
|
||||
for(int j = -range; j < range + 1; j++) {
|
||||
if(Math.abs(i) == 4 && Math.abs(j) == 4 || vazkii.botania.common.core.helper.MathHelper.pointDistancePlane(i, j, 0, 0) > RANGE)
|
||||
if(Math.abs(i) == 4 && Math.abs(j) == 4 || vazkii.botania.common.core.helper.MathHelper.pointDistancePlane(i, j, 0, 0) > ARENA_RANGE)
|
||||
continue; // Ignore pylons and out of circle
|
||||
|
||||
int air = 0;
|
||||
@@ -513,70 +494,97 @@ public class EntityDoppleganger extends EntityCreature implements IBotaniaBossWi
|
||||
public void onLivingUpdate() {
|
||||
super.onLivingUpdate();
|
||||
|
||||
if (!worldObj.isRemote) {
|
||||
dataManager.set(BOSSINFO_ID, Optional.of(bossInfo.getUniqueId()));
|
||||
bossInfo.setPercent(getHealth() / getMaxHealth());
|
||||
BlockPos source = getSource();
|
||||
float range = ARENA_RANGE;
|
||||
int invul = getInvulTime();
|
||||
|
||||
if (worldObj.isRemote) {
|
||||
for(int i = 0; i < 360; i += 8) {
|
||||
float r = 0.6F;
|
||||
float g = 0F;
|
||||
float b = 0.2F;
|
||||
float m = 0.15F;
|
||||
float mv = 0.35F;
|
||||
|
||||
float rad = i * (float) Math.PI / 180F;
|
||||
double x = source.getX() + 0.5 - Math.cos(rad) * range;
|
||||
double y = source.getY() + 0.5;
|
||||
double z = source.getZ() + 0.5 - Math.sin(rad) * range;
|
||||
|
||||
Botania.proxy.wispFX(worldObj, x, y, z, r, g, b, 0.5F, (float) (Math.random() - 0.5F) * m, (float) (Math.random() - 0.5F) * mv, (float) (Math.random() - 0.5F) * m);
|
||||
}
|
||||
|
||||
if(worldObj.isRemote && !isPlayingMusic && !isDead && !getPlayersAround().isEmpty()) {
|
||||
Botania.proxy.playRecordClientSided(worldObj, source, (ItemRecord) (isHardMode() ? ModItems.recordGaia2 : ModItems.recordGaia1));
|
||||
isPlayingMusic = true;
|
||||
}
|
||||
|
||||
EntityPlayer player = Botania.proxy.getClientPlayer();
|
||||
|
||||
player.capabilities.isFlying = player.capabilities.isFlying && player.capabilities.isCreativeMode;
|
||||
|
||||
if(invul > 10) {
|
||||
Vector3 pos = Vector3.fromEntityCenter(this).subtract(new Vector3(0, 0.2, 0));
|
||||
for (BlockPos arr : PYLON_LOCATIONS) {
|
||||
Vector3 pylonPos = new Vector3(source.getX() + arr.getX(), source.getY() + arr.getY(), source.getZ() + arr.getZ());
|
||||
double worldTime = ticksExisted;
|
||||
worldTime /= 5;
|
||||
|
||||
float rad = 0.75F + (float) Math.random() * 0.05F;
|
||||
double xp = pylonPos.x + 0.5 + Math.cos(worldTime) * rad;
|
||||
double zp = pylonPos.z + 0.5 + Math.sin(worldTime) * rad;
|
||||
|
||||
Vector3 partPos = new Vector3(xp, pylonPos.y, zp);
|
||||
Vector3 mot = pos.copy().sub(partPos).multiply(0.04);
|
||||
|
||||
float r = 0.7F + (float) Math.random() * 0.3F;
|
||||
float g = (float) Math.random() * 0.3F;
|
||||
float b = 0.7F + (float) Math.random() * 0.3F;
|
||||
|
||||
Botania.proxy.wispFX(worldObj, partPos.x, partPos.y, partPos.z, r, g, b, 0.25F + (float) Math.random() * 0.1F, -0.075F - (float) Math.random() * 0.015F);
|
||||
Botania.proxy.wispFX(worldObj, partPos.x, partPos.y, partPos.z, r, g, b, 0.4F, (float) mot.x, (float) mot.y, (float) mot.z);
|
||||
}
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
dataManager.set(BOSSINFO_ID, Optional.of(bossInfo.getUniqueId()));
|
||||
bossInfo.setPercent(getHealth() / getMaxHealth());
|
||||
|
||||
if(!getPassengers().isEmpty())
|
||||
this.dismountRidingEntity();
|
||||
|
||||
boolean peaceful = worldObj.getDifficulty() == EnumDifficulty.PEACEFUL;
|
||||
if(!worldObj.isRemote && peaceful)
|
||||
if(worldObj.getDifficulty() == EnumDifficulty.PEACEFUL)
|
||||
setDead();
|
||||
|
||||
if(!worldObj.isRemote) {
|
||||
int radius = 1;
|
||||
int posXInt = MathHelper.floor_double(posX);
|
||||
int posYInt = MathHelper.floor_double(posY);
|
||||
int posZInt = MathHelper.floor_double(posZ);
|
||||
for(int i = -radius; i < radius + 1; i++)
|
||||
for(int j = -radius; j < radius + 1; j++)
|
||||
for(int k = -radius; k < radius + 1; k++) {
|
||||
int xp = posXInt + i;
|
||||
int yp = posYInt + j;
|
||||
int zp = posZInt + k;
|
||||
BlockPos posp = new BlockPos(xp, yp, zp);
|
||||
if(isCheatyBlock(worldObj, posp)) {
|
||||
Block block = worldObj.getBlockState(posp).getBlock();
|
||||
List<ItemStack> items = block.getDrops(worldObj, posp, worldObj.getBlockState(posp), 0);
|
||||
for(ItemStack stack : items) {
|
||||
if(ConfigHandler.blockBreakParticles)
|
||||
worldObj.playAuxSFX(2001, posp, Block.getStateId(worldObj.getBlockState(posp)));
|
||||
worldObj.spawnEntityInWorld(new EntityItem(worldObj, xp + 0.5, yp + 0.5, zp + 0.5, stack));
|
||||
}
|
||||
worldObj.setBlockToAir(posp);
|
||||
int radius = 1;
|
||||
int posXInt = MathHelper.floor_double(posX);
|
||||
int posYInt = MathHelper.floor_double(posY);
|
||||
int posZInt = MathHelper.floor_double(posZ);
|
||||
for(int i = -radius; i < radius + 1; i++)
|
||||
for(int j = -radius; j < radius + 1; j++)
|
||||
for(int k = -radius; k < radius + 1; k++) {
|
||||
int xp = posXInt + i;
|
||||
int yp = posYInt + j;
|
||||
int zp = posZInt + k;
|
||||
BlockPos posp = new BlockPos(xp, yp, zp);
|
||||
if(isCheatyBlock(worldObj, posp)) {
|
||||
Block block = worldObj.getBlockState(posp).getBlock();
|
||||
List<ItemStack> items = block.getDrops(worldObj, posp, worldObj.getBlockState(posp), 0);
|
||||
for(ItemStack stack : items) {
|
||||
if(ConfigHandler.blockBreakParticles)
|
||||
worldObj.playAuxSFX(2001, posp, Block.getStateId(worldObj.getBlockState(posp)));
|
||||
worldObj.spawnEntityInWorld(new EntityItem(worldObj, xp + 0.5, yp + 0.5, zp + 0.5, stack));
|
||||
}
|
||||
worldObj.setBlockToAir(posp);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
BlockPos source = getSource();
|
||||
boolean hard = isHardMode();
|
||||
float range;
|
||||
List<EntityPlayer> players = getPlayersAround();
|
||||
int playerCount = getPlayerCount();
|
||||
|
||||
if(worldObj.isRemote && !isPlayingMusic && !isDead && !players.isEmpty()) {
|
||||
Botania.proxy.playRecordClientSided(worldObj, source, (ItemRecord) (hard ? ModItems.recordGaia2 : ModItems.recordGaia1));
|
||||
isPlayingMusic = true;
|
||||
}
|
||||
|
||||
range = RANGE;
|
||||
for(int i = 0; i < 360; i += 8) {
|
||||
float r = 0.6F;
|
||||
float g = 0F;
|
||||
float b = 0.2F;
|
||||
float m = 0.15F;
|
||||
float mv = 0.35F;
|
||||
|
||||
float rad = i * (float) Math.PI / 180F;
|
||||
double x = source.getX() + 0.5 - Math.cos(rad) * range;
|
||||
double y = source.getY() + 0.5;
|
||||
double z = source.getZ() + 0.5 - Math.sin(rad) * range;
|
||||
|
||||
Botania.proxy.wispFX(worldObj, x, y, z, r, g, b, 0.5F, (float) (Math.random() - 0.5F) * m, (float) (Math.random() - 0.5F) * mv, (float) (Math.random() - 0.5F) * m);
|
||||
}
|
||||
|
||||
if(players.isEmpty() && !worldObj.playerEntities.isEmpty())
|
||||
setDead();
|
||||
else {
|
||||
@@ -584,16 +592,16 @@ public class EntityDoppleganger extends EntityCreature implements IBotaniaBossWi
|
||||
if(player.inventory.armorInventory[0] != null || player.inventory.armorInventory[1] != null || player.inventory.armorInventory[2] != null || player.inventory.armorInventory[3] != null)
|
||||
anyWithArmor = true;
|
||||
|
||||
List<PotionEffect> remove = new ArrayList<>();
|
||||
Collection<PotionEffect> active = player.getActivePotionEffects();
|
||||
for(PotionEffect effect : active)
|
||||
if(effect.getDuration() < 200 && effect.getIsAmbient() && !effect.getPotion().isBadEffect())
|
||||
remove.add(effect);
|
||||
Iterator<PotionEffect> iter = active.iterator();
|
||||
|
||||
active.removeAll(remove);
|
||||
while (iter.hasNext()) {
|
||||
PotionEffect effect = iter.next();
|
||||
if(effect.getDuration() < 200 && effect.getIsAmbient() && !effect.getPotion().isBadEffect())
|
||||
iter.remove();
|
||||
}
|
||||
|
||||
player.capabilities.isFlying = player.capabilities.isFlying && player.capabilities.isCreativeMode;
|
||||
|
||||
if(vazkii.botania.common.core.helper.MathHelper.pointDistanceSpace(player.posX, player.posY, player.posZ, source.getX() + 0.5, source.getY() + 0.5, source.getZ() + 0.5) >= range) {
|
||||
Vector3 sourceVector = new Vector3(source.getX() + 0.5, source.getY() + 0.5, source.getZ() + 0.5);
|
||||
Vector3 playerVector = Vector3.fromEntityCenter(player);
|
||||
@@ -602,6 +610,7 @@ public class EntityDoppleganger extends EntityCreature implements IBotaniaBossWi
|
||||
player.motionX = motion.x;
|
||||
player.motionY = 0.2;
|
||||
player.motionZ = motion.z;
|
||||
player.velocityChanged = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -609,35 +618,9 @@ public class EntityDoppleganger extends EntityCreature implements IBotaniaBossWi
|
||||
if(isDead)
|
||||
return;
|
||||
|
||||
int invul = getInvulTime();
|
||||
int mobTicks = getMobSpawnTicks();
|
||||
boolean spawnMissiles = hard && ticksExisted % 15 < 4;
|
||||
|
||||
if(invul > 10) {
|
||||
Vector3 pos = Vector3.fromEntityCenter(this).subtract(new Vector3(0, 0.2, 0));
|
||||
for(int i = 0; i < PYLON_LOCATIONS.length; i++) {
|
||||
BlockPos arr = PYLON_LOCATIONS[i];
|
||||
|
||||
Vector3 pylonPos = new Vector3(source.getX() + arr.getX(), source.getY() + arr.getY(), source.getZ() + arr.getZ());
|
||||
double worldTime = ticksExisted;
|
||||
worldTime /= 5;
|
||||
|
||||
float rad = 0.75F + (float) Math.random() * 0.05F;
|
||||
double xp = pylonPos.x + 0.5 + Math.cos(worldTime) * rad;
|
||||
double zp = pylonPos.z + 0.5 + Math.sin(worldTime) * rad;
|
||||
|
||||
Vector3 partPos = new Vector3(xp, pylonPos.y, zp);
|
||||
Vector3 mot = pos.copy().sub(partPos).multiply(0.04);
|
||||
|
||||
float r = 0.7F + (float) Math.random() * 0.3F;
|
||||
float g = (float) Math.random() * 0.3F;
|
||||
float b = 0.7F + (float) Math.random() * 0.3F;
|
||||
|
||||
Botania.proxy.wispFX(worldObj, partPos.x, partPos.y, partPos.z, r, g, b, 0.25F + (float) Math.random() * 0.1F, -0.075F - (float) Math.random() * 0.015F);
|
||||
Botania.proxy.wispFX(worldObj, partPos.x, partPos.y, partPos.z, r, g, b, 0.4F, (float) mot.x, (float) mot.y, (float) mot.z);
|
||||
}
|
||||
}
|
||||
|
||||
if(invul > 0 && mobTicks == MOB_SPAWN_TICKS) {
|
||||
if(invul < SPAWN_TICKS) {
|
||||
if(invul > SPAWN_TICKS / 2 && worldObj.rand.nextInt(SPAWN_TICKS - invul + 1) == 0)
|
||||
@@ -645,10 +628,9 @@ public class EntityDoppleganger extends EntityCreature implements IBotaniaBossWi
|
||||
spawnExplosionParticle();
|
||||
}
|
||||
|
||||
if(!worldObj.isRemote) {
|
||||
setHealth(getHealth() + (getMaxHealth() - 1F) / SPAWN_TICKS);
|
||||
setInvulTime(invul - 1);
|
||||
}
|
||||
setHealth(getHealth() + (getMaxHealth() - 1F) / SPAWN_TICKS);
|
||||
setInvulTime(invul - 1);
|
||||
|
||||
motionY = 0;
|
||||
} else {
|
||||
if(isAggroed()) {
|
||||
@@ -664,7 +646,7 @@ public class EntityDoppleganger extends EntityCreature implements IBotaniaBossWi
|
||||
setInvulTime(invul + 1);
|
||||
}
|
||||
|
||||
if(reverseTicks > MOB_SPAWN_START_TICKS * 2 && mobTicks > MOB_SPAWN_END_TICKS && mobTicks % MOB_SPAWN_WAVE_TIME == 0 && !worldObj.isRemote) {
|
||||
if(reverseTicks > MOB_SPAWN_START_TICKS * 2 && mobTicks > MOB_SPAWN_END_TICKS && mobTicks % MOB_SPAWN_WAVE_TIME == 0) {
|
||||
for(int pl = 0; pl < playerCount; pl++)
|
||||
for(int i = 0; i < 3 + worldObj.rand.nextInt(2); i++) {
|
||||
EntityLiving entity = null;
|
||||
@@ -697,6 +679,8 @@ public class EntityDoppleganger extends EntityCreature implements IBotaniaBossWi
|
||||
}
|
||||
|
||||
if(entity != null) {
|
||||
if(!entity.isImmuneToFire())
|
||||
entity.addPotionEffect(new PotionEffect(MobEffects.fireResistance, 30, 0));
|
||||
range = 6F;
|
||||
entity.setPosition(posX + 0.5 + Math.random() * range - range / 2, posY - 1, posZ + 0.5 + Math.random() * range - range / 2);
|
||||
worldObj.spawnEntityInWorld(entity);
|
||||
@@ -712,7 +696,7 @@ public class EntityDoppleganger extends EntityCreature implements IBotaniaBossWi
|
||||
|
||||
setMobSpawnTicks(mobTicks - 1);
|
||||
setTPDelay(10);
|
||||
} else if(getTPDelay() > 0 && !worldObj.isRemote) {
|
||||
} else if(getTPDelay() > 0) {
|
||||
if(invul > 0)
|
||||
setInvulTime(invul - 1);
|
||||
|
||||
@@ -786,13 +770,11 @@ public class EntityDoppleganger extends EntityCreature implements IBotaniaBossWi
|
||||
}
|
||||
|
||||
private void spawnMissile() {
|
||||
if(!worldObj.isRemote) {
|
||||
EntityMagicMissile missile = new EntityMagicMissile(this, true);
|
||||
missile.setPosition(posX + (Math.random() - 0.5 * 0.1), posY + 2.4 + (Math.random() - 0.5 * 0.1), posZ + (Math.random() - 0.5 * 0.1));
|
||||
if(missile.getTarget()) {
|
||||
this.playSound(BotaniaSoundEvents.missile, 0.6F, 0.8F + (float) Math.random() * 0.2F);
|
||||
worldObj.spawnEntityInWorld(missile);
|
||||
}
|
||||
EntityMagicMissile missile = new EntityMagicMissile(this, true);
|
||||
missile.setPosition(posX + (Math.random() - 0.5 * 0.1), posY + 2.4 + (Math.random() - 0.5 * 0.1), posZ + (Math.random() - 0.5 * 0.1));
|
||||
if(missile.getTarget()) {
|
||||
this.playSound(BotaniaSoundEvents.missile, 0.6F, 0.8F + (float) Math.random() * 0.2F);
|
||||
worldObj.spawnEntityInWorld(missile);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -270,7 +270,7 @@ public class ItemGrassSeeds extends ItemMod implements IFloatingFlowerVariant {
|
||||
public boolean tick() {
|
||||
++ticksExisted;
|
||||
|
||||
// Go through all blocks in the specified RANGE, and then
|
||||
// Go through all blocks in the specified ARENA_RANGE, and then
|
||||
// try and spread around that block if it is our target block already
|
||||
for(int i = -RANGE; i <= RANGE; i++) {
|
||||
for(int j = -RANGE; j <= RANGE; j++) {
|
||||
|
||||
@@ -87,7 +87,7 @@ public class ItemManaResource extends ItemMod implements IFlowerComponent, IElve
|
||||
@Override
|
||||
public EnumActionResult onItemUse(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, World par3World, BlockPos pos, EnumHand hand, EnumFacing side, float par8, float par9, float par10) {
|
||||
if(par1ItemStack.getItemDamage() == 4 || par1ItemStack.getItemDamage() == 14)
|
||||
return EntityDoppleganger.spawn(par2EntityPlayer, par1ItemStack, par3World, pos, par1ItemStack.getItemDamage() == 14) ? EnumActionResult.SUCCESS : EnumActionResult.FAIL;
|
||||
return par3World.isRemote || EntityDoppleganger.spawn(par2EntityPlayer, par1ItemStack, par3World, pos, par1ItemStack.getItemDamage() == 14) ? EnumActionResult.SUCCESS : EnumActionResult.FAIL;
|
||||
else if(par1ItemStack.getItemDamage() == 20 && net.minecraft.item.ItemDye.applyBonemeal(par1ItemStack, par3World, pos, par2EntityPlayer)) {
|
||||
if(!par3World.isRemote)
|
||||
par3World.playAuxSFX(2005, pos, 0);
|
||||
|
||||
@@ -3,7 +3,6 @@ package vazkii.botania.common.network;
|
||||
import io.netty.buffer.ByteBuf;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.item.EnumDyeColor;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.util.EnumFacing;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraftforge.fml.common.network.ByteBufUtils;
|
||||
@@ -14,6 +13,7 @@ import vazkii.botania.client.core.handler.LightningHandler;
|
||||
import vazkii.botania.common.Botania;
|
||||
import vazkii.botania.common.core.handler.ConfigHandler;
|
||||
import vazkii.botania.common.core.helper.Vector3;
|
||||
import vazkii.botania.common.entity.EntityDoppleganger;
|
||||
|
||||
public class PacketBotaniaEffect implements IMessage {
|
||||
|
||||
@@ -99,6 +99,19 @@ public class PacketBotaniaEffect implements IMessage {
|
||||
}
|
||||
break;
|
||||
}
|
||||
case ARENA_INDICATOR: {
|
||||
for(int i = 0; i < 360; i += 8) {
|
||||
float r = 1F;
|
||||
float g = 0F;
|
||||
float b = 1F;
|
||||
float rad = i * (float) Math.PI / 180F;
|
||||
double x = message.x + 0.5 - Math.cos(rad) * EntityDoppleganger.ARENA_RANGE;
|
||||
double y = message.y + 0.5;
|
||||
double z = message.z + 0.5 - Math.sin(rad) * EntityDoppleganger.ARENA_RANGE;
|
||||
|
||||
Botania.proxy.sparkleFX(Minecraft.getMinecraft().theWorld, x, y, z, r, g, b, 5F, 120);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
@@ -110,7 +123,8 @@ public class PacketBotaniaEffect implements IMessage {
|
||||
public enum EffectType {
|
||||
POOL_CRAFT(0),
|
||||
POOL_CHARGE(1), // Arg: 1 if outputting, 0 if inputting
|
||||
PAINT_LENS(1); // Arg: colour
|
||||
PAINT_LENS(1), // Arg: colour
|
||||
ARENA_INDICATOR(0);
|
||||
|
||||
private final int argCount;
|
||||
|
||||
|
||||
@@ -43,6 +43,10 @@ public final class PacketHandler {
|
||||
}
|
||||
}
|
||||
|
||||
public static void sendTo(EntityPlayerMP playerMP, IMessage toSend) {
|
||||
HANDLER.sendTo(toSend, playerMP);
|
||||
}
|
||||
|
||||
private PacketHandler() {}
|
||||
|
||||
}
|
||||
Reference in new issue
Block a user