mirror of
https://github.com/HbmMods/Hbm-s-Nuclear-Tech-GIT.git
synced 2026-01-25 10:32:49 +00:00
179 lines
5.5 KiB
Java
179 lines
5.5 KiB
Java
package com.hbm.packet;
|
|
|
|
import java.util.Random;
|
|
|
|
import com.hbm.entity.missile.EntityBobmazon;
|
|
import com.hbm.handler.BobmazonOfferFactory;
|
|
import com.hbm.inventory.gui.GUIScreenBobmazon.Offer;
|
|
import com.hbm.items.ModItems;
|
|
import com.hbm.lib.ModDamageSource;
|
|
|
|
import cpw.mods.fml.common.network.simpleimpl.IMessage;
|
|
import cpw.mods.fml.common.network.simpleimpl.IMessageHandler;
|
|
import cpw.mods.fml.common.network.simpleimpl.MessageContext;
|
|
import io.netty.buffer.ByteBuf;
|
|
import net.minecraft.entity.player.EntityPlayer;
|
|
import net.minecraft.entity.player.EntityPlayerMP;
|
|
import net.minecraft.item.Item;
|
|
import net.minecraft.item.ItemStack;
|
|
import net.minecraft.stats.Achievement;
|
|
import net.minecraft.util.ChatComponentText;
|
|
import net.minecraft.world.World;
|
|
|
|
public class ItemBobmazonPacket implements IMessage {
|
|
|
|
int offer;
|
|
|
|
public ItemBobmazonPacket()
|
|
{
|
|
|
|
}
|
|
|
|
public ItemBobmazonPacket(EntityPlayer player, Offer offer)
|
|
{
|
|
if(player.getHeldItem() != null && player.getHeldItem().getItem() == ModItems.bobmazon_materials)
|
|
this.offer = BobmazonOfferFactory.materials.indexOf(offer);
|
|
if(player.getHeldItem() != null && player.getHeldItem().getItem() == ModItems.bobmazon_machines)
|
|
this.offer = BobmazonOfferFactory.machines.indexOf(offer);
|
|
if(player.getHeldItem() != null && player.getHeldItem().getItem() == ModItems.bobmazon_weapons)
|
|
this.offer = BobmazonOfferFactory.weapons.indexOf(offer);
|
|
if(player.getHeldItem() != null && player.getHeldItem().getItem() == ModItems.bobmazon_tools)
|
|
this.offer = BobmazonOfferFactory.tools.indexOf(offer);
|
|
if(player.getHeldItem() != null && player.getHeldItem().getItem() == ModItems.bobmazon_hidden)
|
|
this.offer = BobmazonOfferFactory.special.indexOf(offer);
|
|
}
|
|
|
|
@Override
|
|
public void fromBytes(ByteBuf buf) {
|
|
offer = buf.readInt();
|
|
}
|
|
|
|
@Override
|
|
public void toBytes(ByteBuf buf) {
|
|
buf.writeInt(offer);
|
|
}
|
|
|
|
public static class Handler implements IMessageHandler<ItemBobmazonPacket, IMessage> {
|
|
|
|
@Override
|
|
public IMessage onMessage(ItemBobmazonPacket m, MessageContext ctx) {
|
|
|
|
EntityPlayerMP p = ctx.getServerHandler().playerEntity;
|
|
World world = p.worldObj;
|
|
|
|
Offer offer = null;
|
|
if(p.getHeldItem() != null && p.getHeldItem().getItem() == ModItems.bobmazon_materials)
|
|
offer = BobmazonOfferFactory.materials.get(m.offer);
|
|
if(p.getHeldItem() != null && p.getHeldItem().getItem() == ModItems.bobmazon_machines)
|
|
offer = BobmazonOfferFactory.machines.get(m.offer);
|
|
if(p.getHeldItem() != null && p.getHeldItem().getItem() == ModItems.bobmazon_weapons)
|
|
offer = BobmazonOfferFactory.weapons.get(m.offer);
|
|
if(p.getHeldItem() != null && p.getHeldItem().getItem() == ModItems.bobmazon_tools)
|
|
offer = BobmazonOfferFactory.tools.get(m.offer);
|
|
if(p.getHeldItem() != null && p.getHeldItem().getItem() == ModItems.bobmazon_hidden)
|
|
offer = BobmazonOfferFactory.special.get(m.offer);
|
|
|
|
if(offer == null) {
|
|
p.addChatMessage(new ChatComponentText("[BOBMAZON] There appears to be a mismatch between the offer you have requested and the offers that exist."));
|
|
p.addChatMessage(new ChatComponentText("[BOBMAZON] Engaging fail-safe..."));
|
|
p.attackEntityFrom(ModDamageSource.nuclearBlast, 1000);
|
|
p.motionY = 2.0D;
|
|
return null;
|
|
}
|
|
|
|
ItemStack stack = offer.offer;
|
|
|
|
Achievement req = offer.requirement.achievement;
|
|
|
|
if(req != null && p.func_147099_x().hasAchievementUnlocked(req) || p.capabilities.isCreativeMode) {
|
|
|
|
if(countCaps(p) >= offer.cost || p.capabilities.isCreativeMode) {
|
|
|
|
payCaps(p, offer.cost);
|
|
p.inventoryContainer.detectAndSendChanges();
|
|
|
|
Random rand = world.rand;
|
|
EntityBobmazon bob = new EntityBobmazon(world);
|
|
bob.posX = p.posX + rand.nextGaussian() * 10;
|
|
bob.posY = 300;
|
|
bob.posZ = p.posZ + rand.nextGaussian() * 10;
|
|
bob.payload = stack.copy();
|
|
|
|
world.spawnEntityInWorld(bob);
|
|
} else {
|
|
p.addChatMessage(new ChatComponentText("[BOBMAZON] Not enough caps!"));
|
|
}
|
|
|
|
} else {
|
|
p.addChatMessage(new ChatComponentText("[BOBMAZON] Achievement requirement not met!"));
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
private int countCaps(EntityPlayer player) {
|
|
|
|
int count = 0;
|
|
|
|
for(int i = 0; i < player.inventory.getSizeInventory(); i++) {
|
|
|
|
ItemStack stack = player.inventory.getStackInSlot(i);
|
|
|
|
if(stack != null) {
|
|
|
|
Item item = stack.getItem();
|
|
|
|
if(item == ModItems.cap_fritz ||
|
|
item == ModItems.cap_korl ||
|
|
item == ModItems.cap_nuka ||
|
|
item == ModItems.cap_quantum ||
|
|
item == ModItems.cap_rad ||
|
|
item == ModItems.cap_sparkle ||
|
|
item == ModItems.cap_star ||
|
|
item == ModItems.cap_sunset)
|
|
count += stack.stackSize;
|
|
|
|
}
|
|
}
|
|
|
|
return count;
|
|
}
|
|
|
|
private void payCaps(EntityPlayer player, int price) {
|
|
|
|
if(price == 0)
|
|
return;
|
|
|
|
for(int i = 0; i < player.inventory.getSizeInventory(); i++) {
|
|
|
|
ItemStack stack = player.inventory.getStackInSlot(i);
|
|
|
|
if(stack != null) {
|
|
|
|
Item item = stack.getItem();
|
|
|
|
if(item == ModItems.cap_fritz ||
|
|
item == ModItems.cap_korl ||
|
|
item == ModItems.cap_nuka ||
|
|
item == ModItems.cap_quantum ||
|
|
item == ModItems.cap_rad ||
|
|
item == ModItems.cap_sparkle ||
|
|
item == ModItems.cap_star ||
|
|
item == ModItems.cap_sunset) {
|
|
|
|
int size = stack.stackSize;
|
|
for(int j = 0; j < size; j++) {
|
|
|
|
player.inventory.decrStackSize(i, 1);
|
|
price--;
|
|
|
|
if(price == 0)
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|