Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add Dislocator Inhibitor #60

Merged
merged 3 commits into from
Jan 23, 2025
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@
import com.brandon3055.draconicevolution.common.tileentities.TileChaosShard;
import com.brandon3055.draconicevolution.common.tileentities.TileContainerTemplate;
import com.brandon3055.draconicevolution.common.tileentities.TileCustomSpawner;
import com.brandon3055.draconicevolution.common.tileentities.TileDislocatorInhibitor;
import com.brandon3055.draconicevolution.common.tileentities.TileDissEnchanter;
import com.brandon3055.draconicevolution.common.tileentities.TileDraconiumChest;
import com.brandon3055.draconicevolution.common.tileentities.TileEnergyInfuser;
Expand Down Expand Up @@ -262,6 +263,9 @@ public void registerTileEntities() {
GameRegistry.registerTileEntity(TileChaosShard.class, References.RESOURCESPREFIX + "TileChaosShard");
GameRegistry
.registerTileEntity(TileUpgradeModifier.class, References.RESOURCESPREFIX + "TileEnhancementModifier");
GameRegistry.registerTileEntity(
TileDislocatorInhibitor.class,
References.RESOURCESPREFIX + "TileDislocatorInhibitor");
if (DraconicEvolution.debug) {
GameRegistry.registerTileEntity(TileTestBlock.class, References.RESOURCESPREFIX + "TileTestBlock");
GameRegistry.registerTileEntity(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
import com.brandon3055.draconicevolution.common.blocks.TeleporterStand;
import com.brandon3055.draconicevolution.common.blocks.TestBlock;
import com.brandon3055.draconicevolution.common.blocks.XRayBlock;
import com.brandon3055.draconicevolution.common.blocks.machine.DislocatorInhibitor;
import com.brandon3055.draconicevolution.common.blocks.machine.DissEnchanter;
import com.brandon3055.draconicevolution.common.blocks.machine.EnergyCrystal;
import com.brandon3055.draconicevolution.common.blocks.machine.EnergyInfuser;
Expand Down Expand Up @@ -90,6 +91,7 @@ public class ModBlocks {
public static BlockDE reactorEnergyInjector;
public static BlockDE chaosCrystal;
public static BlockDE upgradeModifier;
public static BlockDE dislocatorInhibitor;
public static Block safetyFlame;
public static Block chaosShardAtmos = new ChaosShardAtmos()
.setBlockName(References.RESOURCESPREFIX + "chaosShardAtmos")
Expand Down Expand Up @@ -133,6 +135,7 @@ public static void init() {
reactorEnergyInjector = new ReactorEnergyInjector();
chaosCrystal = new ChaosCrystal();
upgradeModifier = new UpgradeModifier();
dislocatorInhibitor = new DislocatorInhibitor();

longRangeDislocator = new LongRangeDislocator();

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
package com.brandon3055.draconicevolution.common.blocks.machine;

import net.minecraft.block.Block;
import net.minecraft.block.ITileEntityProvider;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.ChatComponentText;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;

import com.brandon3055.draconicevolution.DraconicEvolution;
import com.brandon3055.draconicevolution.common.ModBlocks;
import com.brandon3055.draconicevolution.common.blocks.BlockDE;
import com.brandon3055.draconicevolution.common.lib.References;
import com.brandon3055.draconicevolution.common.lib.Strings;
import com.brandon3055.draconicevolution.common.tileentities.TileDislocatorInhibitor;

import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;

public class DislocatorInhibitor extends BlockDE implements ITileEntityProvider {

public DislocatorInhibitor() {
this.setBlockName(Strings.dislocatorInhibitor);
this.setCreativeTab(DraconicEvolution.tabBlocksItems);
this.setStepSound(soundTypeStone);
ModBlocks.register(this);
}

@Override
public boolean isBlockSolid(IBlockAccess world, int x, int y, int z, int side) {
return true;
}

@Override
public boolean isSideSolid(IBlockAccess world, int x, int y, int z, ForgeDirection side) {
return true;
}

@Override
public boolean hasTileEntity(int metadata) {
return true;
}

@Override
public TileEntity createNewTileEntity(World worldIn, int meta) {
return new TileDislocatorInhibitor();
}

@Override
public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float prx,
float pry, float prz) {
TileEntity tile = world.getTileEntity(x, y, z);
if (tile != null) {
if (tile instanceof TileDislocatorInhibitor te) {
if (!player.isSneaking()) te.increaseRange();
else te.decreaseRange();

if (world.isRemote) player.addChatMessage(new ChatComponentText("Range: " + te.getRange()));
}
}
return true;
}

@Override
public void breakBlock(World worldIn, int x, int y, int z, Block blockBroken, int meta) {
TileEntity tile = worldIn.getTileEntity(x, y, z);
if (tile != null) {
if (tile instanceof TileDislocatorInhibitor) {
((TileDislocatorInhibitor) tile).unregister();
}
}

super.breakBlock(worldIn, x, y, z, blockBroken, meta);
}

@SideOnly(Side.CLIENT)
@Override
public void registerBlockIcons(IIconRegister iconRegister) {
blockIcon = iconRegister.registerIcon(References.RESOURCESPREFIX + "inhibitor_block");
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -609,6 +609,17 @@ public static void init() {
"ingotDraconium",
'C',
ModItems.draconicCore);
addOre(
ModBlocks.dislocatorInhibitor,
"IBI",
"BDB",
"IBI",
'I',
"ingotIron",
'B',
Blocks.iron_bars,
'D',
new ItemStack(ModItems.magnet, 1, 0));

// machines adv
ItemStack mobSoul = new ItemStack(ModItems.mobSoul);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
import com.brandon3055.draconicevolution.common.handler.ConfigHandler;
import com.brandon3055.draconicevolution.common.items.ItemDE;
import com.brandon3055.draconicevolution.common.lib.References;
import com.brandon3055.draconicevolution.common.tileentities.TileDislocatorInhibitor;
import com.brandon3055.draconicevolution.common.utills.IConfigurableItem;
import com.brandon3055.draconicevolution.common.utills.ItemConfigField;
import com.brandon3055.draconicevolution.integration.ModHelper;
Expand Down Expand Up @@ -113,7 +114,8 @@ public void onUpdate(ItemStack stack, World world, Entity entity, int slot, bool
boolean playSound = false;

for (EntityItem item : items) {
if (item.getEntityItem() == null || ModHelper.isAE2EntityFloatingItem(item)) {
if (item.getEntityItem() == null || ModHelper.isAE2EntityFloatingItem(item)
|| TileDislocatorInhibitor.isInInhibitorRange(world, item.posX, item.posY, item.posZ)) {
continue;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -72,4 +72,5 @@ public class Strings { // public static Block name
public static final String draconiumFluxCapacitorName = "draconiumFluxCapacitor";
public static final String energyCrystalName = "energyCrystal";
public static final String wrenchName = "wrench";
public static final String dislocatorInhibitor = "dislocatorInhibitor";
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,116 @@
package com.brandon3055.draconicevolution.common.tileentities;

import java.util.HashMap;
import java.util.HashSet;

import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.network.NetworkManager;
import net.minecraft.network.Packet;
import net.minecraft.network.play.server.S35PacketUpdateTileEntity;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.world.World;

public class TileDislocatorInhibitor extends TileEntity {

public static final int MAXIMUM_RANGE = 16;
public static final int MINIMUM_RANGE = 1;
public static final HashMap<World, HashSet<TileDislocatorInhibitor>> inhibitors = new HashMap<>();

private boolean registered = false;
private int range = 5;

public static boolean isInInhibitorRange(World world, double x, double y, double z) {
HashSet<TileDislocatorInhibitor> list = inhibitors.get(world);
if (list == null) {
return false;
}
for (TileDislocatorInhibitor inhibitor : list) {
if (inhibitor.isInRange(x, y, z)) {
return true;
}
}
return false;
}

@Override
public void updateEntity() {
if (!registered) {
HashSet<TileDislocatorInhibitor> map = inhibitors.computeIfAbsent(this.worldObj, k -> new HashSet<>());
map.add(this);
registered = true;
}
}

public void unregister() {
if (inhibitors.containsKey(this.worldObj)) {
HashSet<TileDislocatorInhibitor> list = inhibitors.get(this.worldObj);
list.remove(this);
if (list.isEmpty()) {
inhibitors.remove(this.worldObj);
}
}
}

public int getRange() {
return range;
}

public void setRange(int value) {
if (value > MAXIMUM_RANGE) {
value = MINIMUM_RANGE;
}
if (value < MINIMUM_RANGE) {
value = MAXIMUM_RANGE;
}
this.range = value;
}

public void increaseRange() {
if (range < MAXIMUM_RANGE) {
range++;
}
}

public void decreaseRange() {
if (range > MINIMUM_RANGE) {
range--;
}
}

public boolean isInRange(double x, double y, double z) {
AxisAlignedBB aabb = AxisAlignedBB.getBoundingBox(
this.xCoord + 0.5,
this.yCoord + 0.5,
this.zCoord + 0.5,
this.xCoord + 0.5,
this.yCoord + 0.5,
this.zCoord + 0.5).expand(range + 0.5, range + 0.5, range + 0.5);
return x >= aabb.minX && x <= aabb.maxX && y >= aabb.minY && y <= aabb.maxY && z >= aabb.minZ && z <= aabb.maxZ;
serenibyss marked this conversation as resolved.
Show resolved Hide resolved
}

@Override
public Packet getDescriptionPacket() {
NBTTagCompound tagCompound = new NBTTagCompound();
this.writeToNBT(tagCompound);
return new S35PacketUpdateTileEntity(this.xCoord, this.yCoord, this.zCoord, 1, tagCompound);
}

@Override
public void onDataPacket(NetworkManager net, S35PacketUpdateTileEntity pkt) {
readFromNBT(pkt.func_148857_g());
worldObj.markBlockForUpdate(xCoord, yCoord, zCoord);
}

@Override
public void writeToNBT(NBTTagCompound compound) {
compound.setInteger("Range", range);
super.writeToNBT(compound);
}

@Override
public void readFromNBT(NBTTagCompound compound) {
range = compound.getInteger("Range");
super.readFromNBT(compound);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@ tile.draconicevolution:energyCrystal2.name=Energy Transceiver
tile.draconicevolution:energyCrystal3.name=Advanced Energy Transceiver
tile.draconicevolution:energyCrystal4.name=Wireless Energy Transceiver
tile.draconicevolution:energyCrystal5.name=Advanced Wireless Transceiver
tile.draconicevolution:dislocatorInhibitor.name=Dislocator Inhibitor


//Item Information ----------------------------------------------------------------------------------------------------------------------------------------
Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading