what
This commit is contained in:
Ellpeck 2016-07-18 13:22:44 +02:00
commit 1d4038bde4
76 changed files with 2886 additions and 210 deletions

View file

@ -15,7 +15,10 @@ import de.ellpeck.actuallyadditions.mod.achievement.TheAchievements;
import de.ellpeck.actuallyadditions.mod.blocks.base.BlockContainerBase; import de.ellpeck.actuallyadditions.mod.blocks.base.BlockContainerBase;
import de.ellpeck.actuallyadditions.mod.blocks.base.ItemBlockBase; import de.ellpeck.actuallyadditions.mod.blocks.base.ItemBlockBase;
import de.ellpeck.actuallyadditions.mod.tile.TileEntityAtomicReconstructor; import de.ellpeck.actuallyadditions.mod.tile.TileEntityAtomicReconstructor;
import de.ellpeck.actuallyadditions.mod.util.*; import de.ellpeck.actuallyadditions.mod.util.AssetUtil;
import de.ellpeck.actuallyadditions.mod.util.ModUtil;
import de.ellpeck.actuallyadditions.mod.util.StringUtil;
import de.ellpeck.actuallyadditions.mod.util.Util;
import net.minecraft.block.Block; import net.minecraft.block.Block;
import net.minecraft.block.BlockPistonBase; import net.minecraft.block.BlockPistonBase;
import net.minecraft.block.SoundType; import net.minecraft.block.SoundType;

View file

@ -58,9 +58,12 @@ public class BlockGiantChest extends BlockContainerBase{
@Override @Override
public TileEntity createNewTileEntity(World world, int par2){ public TileEntity createNewTileEntity(World world, int par2){
switch(this.type){ switch(this.type){
case 1: return new TileEntityGiantChestMedium(); case 1:
case 2: return new TileEntityGiantChestLarge(); return new TileEntityGiantChestMedium();
default: return new TileEntityGiantChest(); case 2:
return new TileEntityGiantChestLarge();
default:
return new TileEntityGiantChest();
} }
} }

View file

@ -13,10 +13,7 @@ package de.ellpeck.actuallyadditions.mod.blocks;
import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; import de.ellpeck.actuallyadditions.mod.ActuallyAdditions;
import de.ellpeck.actuallyadditions.mod.blocks.base.BlockContainerBase; import de.ellpeck.actuallyadditions.mod.blocks.base.BlockContainerBase;
import de.ellpeck.actuallyadditions.mod.inventory.GuiHandler; import de.ellpeck.actuallyadditions.mod.inventory.GuiHandler;
import de.ellpeck.actuallyadditions.mod.tile.TileEntityLaserRelay; import de.ellpeck.actuallyadditions.mod.tile.*;
import de.ellpeck.actuallyadditions.mod.tile.TileEntityLaserRelayEnergy;
import de.ellpeck.actuallyadditions.mod.tile.TileEntityLaserRelayItem;
import de.ellpeck.actuallyadditions.mod.tile.TileEntityLaserRelayItemWhitelist;
import net.minecraft.block.Block; import net.minecraft.block.Block;
import net.minecraft.block.SoundType; import net.minecraft.block.SoundType;
import net.minecraft.block.material.Material; import net.minecraft.block.material.Material;
@ -135,13 +132,19 @@ public class BlockLaserRelay extends BlockContainerBase{
return new TileEntityLaserRelayItem(); return new TileEntityLaserRelayItem();
case ITEM_WHITELIST: case ITEM_WHITELIST:
return new TileEntityLaserRelayItemWhitelist(); return new TileEntityLaserRelayItemWhitelist();
case ENERGY_ADVANCED:
return new TileEntityLaserRelayEnergyAdvanced();
case ENERGY_EXTREME:
return new TileEntityLaserRelayEnergyExtreme();
default: default:
return new TileEntityLaserRelayEnergy(); return new TileEntityLaserRelayEnergy();
} }
} }
public enum Type{ public enum Type{
ENERGY, ENERGY_BASIC,
ENERGY_ADVANCED,
ENERGY_EXTREME,
ITEM, ITEM,
ITEM_WHITELIST ITEM_WHITELIST
} }

View file

@ -10,19 +10,33 @@
package de.ellpeck.actuallyadditions.mod.blocks; package de.ellpeck.actuallyadditions.mod.blocks;
import de.ellpeck.actuallyadditions.api.tile.IPhantomTile;
import de.ellpeck.actuallyadditions.mod.blocks.base.BlockContainerBase; import de.ellpeck.actuallyadditions.mod.blocks.base.BlockContainerBase;
import de.ellpeck.actuallyadditions.mod.tile.TileEntityPlayerInterface; import de.ellpeck.actuallyadditions.mod.tile.TileEntityPlayerInterface;
import de.ellpeck.actuallyadditions.mod.util.ModUtil;
import de.ellpeck.actuallyadditions.mod.util.StringUtil;
import net.minecraft.block.Block;
import net.minecraft.block.SoundType; import net.minecraft.block.SoundType;
import net.minecraft.block.material.Material; import net.minecraft.block.material.Material;
import net.minecraft.block.state.IBlockState; import net.minecraft.block.state.IBlockState;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.ScaledResolution;
import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.EnumRarity; import net.minecraft.item.EnumRarity;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.profiler.Profiler;
import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.RayTraceResult;
import net.minecraft.util.math.Vec3d;
import net.minecraft.util.text.TextFormatting;
import net.minecraft.world.World; import net.minecraft.world.World;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
public class BlockPlayerInterface extends BlockContainerBase{ public class BlockPlayerInterface extends BlockContainerBase implements IHudDisplay{
public BlockPlayerInterface(String name){ public BlockPlayerInterface(String name){
super(Material.ROCK, name); super(Material.ROCK, name);
@ -49,10 +63,26 @@ public class BlockPlayerInterface extends BlockContainerBase{
TileEntityPlayerInterface face = (TileEntityPlayerInterface)tile; TileEntityPlayerInterface face = (TileEntityPlayerInterface)tile;
if(face.connectedPlayer == null){ if(face.connectedPlayer == null){
face.connectedPlayer = player.getUniqueID(); face.connectedPlayer = player.getUniqueID();
face.playerName = player.getName();
face.markDirty(); face.markDirty();
face.sendUpdate();
} }
} }
super.onBlockPlacedBy(world, pos, state, player, stack); super.onBlockPlacedBy(world, pos, state, player, stack);
} }
@Override
@SideOnly(Side.CLIENT)
public void displayHud(Minecraft minecraft, EntityPlayer player, ItemStack stack, RayTraceResult posHit, Profiler profiler, ScaledResolution resolution){
TileEntity tile = minecraft.theWorld.getTileEntity(posHit.getBlockPos());
if(tile != null){
if(tile instanceof TileEntityPlayerInterface){
TileEntityPlayerInterface face = (TileEntityPlayerInterface)tile;
String name = face.playerName == null ? "Unknown" : face.playerName;
minecraft.fontRendererObj.drawStringWithShadow("Bound to: "+TextFormatting.RED+name, resolution.getScaledWidth()/2+5, resolution.getScaledHeight()/2+5, StringUtil.DECIMAL_COLOR_WHITE);
minecraft.fontRendererObj.drawStringWithShadow("UUID: "+TextFormatting.DARK_GREEN+face.connectedPlayer, resolution.getScaledWidth()/2+5, resolution.getScaledHeight()/2+15, StringUtil.DECIMAL_COLOR_WHITE);
}
}
}
} }

View file

@ -12,10 +12,8 @@ package de.ellpeck.actuallyadditions.mod.blocks;
import de.ellpeck.actuallyadditions.mod.blocks.base.BlockContainerBase; import de.ellpeck.actuallyadditions.mod.blocks.base.BlockContainerBase;
import de.ellpeck.actuallyadditions.mod.tile.TileEntityShockSuppressor; import de.ellpeck.actuallyadditions.mod.tile.TileEntityShockSuppressor;
import net.minecraft.block.Block;
import net.minecraft.block.SoundType; import net.minecraft.block.SoundType;
import net.minecraft.block.material.Material; import net.minecraft.block.material.Material;
import net.minecraft.block.state.IBlockState;
import net.minecraft.entity.Entity; import net.minecraft.entity.Entity;
import net.minecraft.item.EnumRarity; import net.minecraft.item.EnumRarity;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;

View file

@ -0,0 +1,272 @@
/*
* This file ("BlockTinyTorch.java") is part of the Actually Additions mod for Minecraft.
* It is created and owned by Ellpeck and distributed
* under the Actually Additions License to be found at
* http://ellpeck.de/actaddlicense
* View the source code at https://github.com/Ellpeck/ActuallyAdditions
*
* © 2015-2016 Ellpeck
*/
package de.ellpeck.actuallyadditions.mod.blocks;
import com.google.common.base.Predicate;
import de.ellpeck.actuallyadditions.mod.blocks.base.BlockBase;
import net.minecraft.block.Block;
import net.minecraft.block.BlockTorch;
import net.minecraft.block.SoundType;
import net.minecraft.block.material.Material;
import net.minecraft.block.properties.PropertyDirection;
import net.minecraft.block.state.BlockStateContainer;
import net.minecraft.block.state.IBlockState;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.util.*;
import net.minecraft.util.math.AxisAlignedBB;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import javax.annotation.Nullable;
import java.util.Random;
//Copied from BlockTorch.
//I have no idea what all of this means.
public class BlockTinyTorch extends BlockBase{
//Thanks to xdjackiexd for these.
//Man, I hate numbers.
private static final AxisAlignedBB STANDING_AABB = new AxisAlignedBB(0.4375D, 0.0D, 0.4375D, 0.5625D, 0.3125D, 0.5625D);
private static final AxisAlignedBB TORCH_NORTH_AABB = new AxisAlignedBB(0.4375D, 0.25D, 0.8125D, 0.5625D, 0.5625D, 1.0D);
private static final AxisAlignedBB TORCH_SOUTH_AABB = new AxisAlignedBB(0.4375D, 0.25D, 0.0D, 0.5625D, 0.5625D, 0.1875D);
private static final AxisAlignedBB TORCH_WEST_AABB = new AxisAlignedBB(0.8125D, 0.25D, 0.4375D, 1.0D, 0.5625D, 0.5625D);
private static final AxisAlignedBB TORCH_EAST_AABB = new AxisAlignedBB(0.0D, 0.25D, 0.4375D, 0.1875D, 0.5625D, 0.5625D);
public BlockTinyTorch(String name){
super(Material.CIRCUITS, name);
this.setDefaultState(this.blockState.getBaseState().withProperty(BlockTorch.FACING, EnumFacing.UP));
this.setTickRandomly(true);
this.setCreativeTab(CreativeTabs.DECORATIONS);
this.setHardness(0.0F);
this.setLightLevel(0.67F);
this.setSoundType(SoundType.WOOD);
}
@Override
public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos){
switch(state.getValue(BlockTorch.FACING)){
case EAST:
return TORCH_EAST_AABB;
case WEST:
return TORCH_WEST_AABB;
case SOUTH:
return TORCH_SOUTH_AABB;
case NORTH:
return TORCH_NORTH_AABB;
default:
return STANDING_AABB;
}
}
@Override
@Nullable
public AxisAlignedBB getCollisionBoundingBox(IBlockState blockState, World worldIn, BlockPos pos){
return NULL_AABB;
}
@Override
public boolean isOpaqueCube(IBlockState state){
return false;
}
@Override
public boolean isFullCube(IBlockState state){
return false;
}
private boolean canPlaceOn(World worldIn, BlockPos pos){
IBlockState state = worldIn.getBlockState(pos);
return state.isSideSolid(worldIn, pos, EnumFacing.UP) || state.getBlock().canPlaceTorchOnTop(state, worldIn, pos);
}
@Override
public boolean canPlaceBlockAt(World worldIn, BlockPos pos){
for(EnumFacing enumfacing : BlockTorch.FACING.getAllowedValues()){
if(this.canPlaceAt(worldIn, pos, enumfacing)){
return true;
}
}
return false;
}
private boolean canPlaceAt(World worldIn, BlockPos pos, EnumFacing facing){
BlockPos blockpos = pos.offset(facing.getOpposite());
boolean flag = facing.getAxis().isHorizontal();
return flag && worldIn.isSideSolid(blockpos, facing, true) || facing.equals(EnumFacing.UP) && this.canPlaceOn(worldIn, blockpos);
}
@Override
public IBlockState onBlockPlaced(World worldIn, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer){
if(this.canPlaceAt(worldIn, pos, facing)){
return this.getDefaultState().withProperty(BlockTorch.FACING, facing);
}
else{
for(EnumFacing enumfacing : EnumFacing.Plane.HORIZONTAL){
if(worldIn.isSideSolid(pos.offset(enumfacing.getOpposite()), enumfacing, true)){
return this.getDefaultState().withProperty(BlockTorch.FACING, enumfacing);
}
}
return this.getDefaultState();
}
}
@Override
public void onBlockAdded(World worldIn, BlockPos pos, IBlockState state){
this.checkForDrop(worldIn, pos, state);
}
@Override
public void neighborChanged(IBlockState state, World worldIn, BlockPos pos, Block blockIn){
this.onNeighborChangeInternal(worldIn, pos, state);
}
protected boolean onNeighborChangeInternal(World worldIn, BlockPos pos, IBlockState state){
if(!this.checkForDrop(worldIn, pos, state)){
return true;
}
else{
EnumFacing enumfacing = state.getValue(BlockTorch.FACING);
EnumFacing.Axis axis = enumfacing.getAxis();
EnumFacing enumfacing1 = enumfacing.getOpposite();
boolean flag = false;
if(axis.isHorizontal() && !worldIn.isSideSolid(pos.offset(enumfacing1), enumfacing, true)){
flag = true;
}
else if(axis.isVertical() && !this.canPlaceOn(worldIn, pos.offset(enumfacing1))){
flag = true;
}
if(flag){
this.dropBlockAsItem(worldIn, pos, state, 0);
worldIn.setBlockToAir(pos);
return true;
}
else{
return false;
}
}
}
protected boolean checkForDrop(World worldIn, BlockPos pos, IBlockState state){
if(state.getBlock() == this && this.canPlaceAt(worldIn, pos, state.getValue(BlockTorch.FACING))){
return true;
}
else{
if(worldIn.getBlockState(pos).getBlock() == this){
this.dropBlockAsItem(worldIn, pos, state, 0);
worldIn.setBlockToAir(pos);
}
return false;
}
}
@Override
@SideOnly(Side.CLIENT)
public void randomDisplayTick(IBlockState stateIn, World worldIn, BlockPos pos, Random rand){
if(rand.nextBoolean()){
EnumFacing enumfacing = stateIn.getValue(BlockTorch.FACING);
double d0 = (double)pos.getX()+0.5D;
double d1 = (double)pos.getY()+0.4D;
double d2 = (double)pos.getZ()+0.5D;
if(enumfacing.getAxis().isHorizontal()){
EnumFacing enumfacing1 = enumfacing.getOpposite();
worldIn.spawnParticle(EnumParticleTypes.SMOKE_NORMAL, d0+0.35D*(double)enumfacing1.getFrontOffsetX(), d1+0.22D, d2+0.35D*(double)enumfacing1.getFrontOffsetZ(), 0.0D, 0.0D, 0.0D, new int[0]);
worldIn.spawnParticle(EnumParticleTypes.FLAME, d0+0.35D*(double)enumfacing1.getFrontOffsetX(), d1+0.22D, d2+0.35D*(double)enumfacing1.getFrontOffsetZ(), 0.0D, 0.0D, 0.0D, new int[0]);
}
else{
worldIn.spawnParticle(EnumParticleTypes.SMOKE_NORMAL, d0, d1, d2, 0.0D, 0.0D, 0.0D);
worldIn.spawnParticle(EnumParticleTypes.FLAME, d0, d1, d2, 0.0D, 0.0D, 0.0D);
}
}
}
@Override
public IBlockState getStateFromMeta(int meta){
IBlockState iblockstate = this.getDefaultState();
switch(meta){
case 1:
iblockstate = iblockstate.withProperty(BlockTorch.FACING, EnumFacing.EAST);
break;
case 2:
iblockstate = iblockstate.withProperty(BlockTorch.FACING, EnumFacing.WEST);
break;
case 3:
iblockstate = iblockstate.withProperty(BlockTorch.FACING, EnumFacing.SOUTH);
break;
case 4:
iblockstate = iblockstate.withProperty(BlockTorch.FACING, EnumFacing.NORTH);
break;
case 5:
default:
iblockstate = iblockstate.withProperty(BlockTorch.FACING, EnumFacing.UP);
}
return iblockstate;
}
@Override
@SideOnly(Side.CLIENT)
public BlockRenderLayer getBlockLayer(){
return BlockRenderLayer.CUTOUT;
}
@Override
public int getMetaFromState(IBlockState state){
int i = 0;
switch(state.getValue(BlockTorch.FACING)){
case EAST:
i = i | 1;
break;
case WEST:
i = i | 2;
break;
case SOUTH:
i = i | 3;
break;
case NORTH:
i = i | 4;
break;
case DOWN:
case UP:
default:
i = i | 5;
}
return i;
}
@Override
public IBlockState withRotation(IBlockState state, Rotation rot){
return state.withProperty(BlockTorch.FACING, rot.rotate(state.getValue(BlockTorch.FACING)));
}
@Override
public IBlockState withMirror(IBlockState state, Mirror mirrorIn){
return state.withRotation(mirrorIn.toRotation(state.getValue(BlockTorch.FACING)));
}
@Override
protected BlockStateContainer createBlockState(){
return new BlockStateContainer(this, BlockTorch.FACING);
}
}

View file

@ -10,6 +10,7 @@
package de.ellpeck.actuallyadditions.mod.blocks; package de.ellpeck.actuallyadditions.mod.blocks;
import de.ellpeck.actuallyadditions.mod.blocks.BlockLaserRelay.Type;
import de.ellpeck.actuallyadditions.mod.blocks.base.BlockPlant; import de.ellpeck.actuallyadditions.mod.blocks.base.BlockPlant;
import de.ellpeck.actuallyadditions.mod.blocks.base.BlockStair; import de.ellpeck.actuallyadditions.mod.blocks.base.BlockStair;
import de.ellpeck.actuallyadditions.mod.blocks.metalists.TheMiscBlocks; import de.ellpeck.actuallyadditions.mod.blocks.metalists.TheMiscBlocks;
@ -95,6 +96,8 @@ public final class InitBlocks{
public static Block blockRangedCollector; public static Block blockRangedCollector;
public static Block blockLaserRelay; public static Block blockLaserRelay;
public static Block blockLaserRelayAdvanced;
public static Block blockLaserRelayExtreme;
public static Block blockLaserRelayItem; public static Block blockLaserRelayItem;
public static Block blockLaserRelayItemWhitelist; public static Block blockLaserRelayItemWhitelist;
public static Block blockItemViewer; public static Block blockItemViewer;
@ -121,9 +124,12 @@ public final class InitBlocks{
public static Block blockDisplayStand; public static Block blockDisplayStand;
public static Block blockShockSuppressor; public static Block blockShockSuppressor;
public static Block blockTinyTorch;
public static void init(){ public static void init(){
ModUtil.LOGGER.info("Initializing Blocks..."); ModUtil.LOGGER.info("Initializing Blocks...");
blockTinyTorch = new BlockTinyTorch("blockTinyTorch");
blockShockSuppressor = new BlockShockSuppressor("blockShockSuppressor"); blockShockSuppressor = new BlockShockSuppressor("blockShockSuppressor");
blockDisplayStand = new BlockDisplayStand("blockDisplayStand"); blockDisplayStand = new BlockDisplayStand("blockDisplayStand");
blockPlayerInterface = new BlockPlayerInterface("blockPlayerInterface"); blockPlayerInterface = new BlockPlayerInterface("blockPlayerInterface");
@ -134,9 +140,11 @@ public final class InitBlocks{
blockAtomicReconstructor = new BlockAtomicReconstructor("blockAtomicReconstructor"); blockAtomicReconstructor = new BlockAtomicReconstructor("blockAtomicReconstructor");
blockCrystal = new BlockCrystal("blockCrystal"); blockCrystal = new BlockCrystal("blockCrystal");
blockBlackLotus = new BlockBlackLotus("blockBlackLotus"); blockBlackLotus = new BlockBlackLotus("blockBlackLotus");
blockLaserRelay = new BlockLaserRelay("blockLaserRelay", BlockLaserRelay.Type.ENERGY); blockLaserRelay = new BlockLaserRelay("blockLaserRelay", Type.ENERGY_BASIC);
blockLaserRelayItem = new BlockLaserRelay("blockLaserRelayItem", BlockLaserRelay.Type.ITEM); blockLaserRelayAdvanced = new BlockLaserRelay("blockLaserRelayAdvanced", Type.ENERGY_ADVANCED);
blockLaserRelayItemWhitelist = new BlockLaserRelay("blockLaserRelayItemWhitelist", BlockLaserRelay.Type.ITEM_WHITELIST); blockLaserRelayExtreme = new BlockLaserRelay("blockLaserRelayExtreme", Type.ENERGY_EXTREME);
blockLaserRelayItem = new BlockLaserRelay("blockLaserRelayItem", Type.ITEM);
blockLaserRelayItemWhitelist = new BlockLaserRelay("blockLaserRelayItemWhitelist", Type.ITEM_WHITELIST);
blockRangedCollector = new BlockRangedCollector("blockRangedCollector"); blockRangedCollector = new BlockRangedCollector("blockRangedCollector");
blockDirectionalBreaker = new BlockDirectionalBreaker("blockDirectionalBreaker"); blockDirectionalBreaker = new BlockDirectionalBreaker("blockDirectionalBreaker");
blockLeafGenerator = new BlockLeafGenerator("blockLeafGenerator"); blockLeafGenerator = new BlockLeafGenerator("blockLeafGenerator");

View file

@ -229,12 +229,20 @@ public final class BookletUtils{
} }
private static boolean getChapterStacksContainString(String text, IBookletChapter chapter){ private static boolean getChapterStacksContainString(String text, IBookletChapter chapter){
Minecraft mc = Minecraft.getMinecraft();
for(BookletPage page : chapter.getPages()){ for(BookletPage page : chapter.getPages()){
ItemStack[] pageStacks = page.getItemStacksForPage(); ItemStack[] pageStacks = page.getItemStacksForPage();
if(pageStacks != null){ if(pageStacks != null){
for(ItemStack stack : pageStacks){ for(ItemStack stack : pageStacks){
if(stack != null && stack.getDisplayName().toLowerCase(Locale.ROOT).contains(text)){ if(stack != null && stack.getItem() != null){
return true; List<String> list = stack.getTooltip(mc.thePlayer, mc.gameSettings.advancedItemTooltips);
for(String s : list){
if(s != null && !s.isEmpty()){
if(s.toLowerCase(Locale.ROOT).contains(text)){
return true;
}
}
}
} }
} }
} }

View file

@ -91,10 +91,10 @@ public class GuiBooklet extends GuiScreen implements IBookletGui{
public GuiButton buttonViewOnline; public GuiButton buttonViewOnline;
public GuiTextField searchField; public GuiTextField searchField;
public boolean shouldSaveDataNextClose; public boolean shouldSaveDataNextClose;
public String bookletName;
private int ticksElapsed; private int ticksElapsed;
private boolean mousePressed; private boolean mousePressed;
private int hisNameIsAt; private int hisNameIsAt;
public String bookletName;
public GuiBooklet(GuiScreen parentScreen, boolean tryOpenMainPage, boolean saveOnClose){ public GuiBooklet(GuiScreen parentScreen, boolean tryOpenMainPage, boolean saveOnClose){
this.xSize = 146; this.xSize = 146;
@ -405,15 +405,17 @@ public class GuiBooklet extends GuiScreen implements IBookletGui{
BookletUtils.openLastBookPage(this, data.theCompound.getCompoundTag("BookletData")); BookletUtils.openLastBookPage(this, data.theCompound.getCompoundTag("BookletData"));
} }
} }
this.shouldSaveDataNextClose = false;
} }
else{ else{
//Open forced entry //Open forced entry
BookletUtils.openIndexEntry(this, ItemBooklet.forcedEntry.entry, ItemBooklet.forcedEntry.pageInIndex, true); BookletUtils.openIndexEntry(this, ItemBooklet.forcedEntry.entry, ItemBooklet.forcedEntry.pageInIndex, true);
BookletUtils.openChapter(this, ItemBooklet.forcedEntry.chapter, ItemBooklet.forcedEntry.page); BookletUtils.openChapter(this, ItemBooklet.forcedEntry.chapter, ItemBooklet.forcedEntry.page);
ItemBooklet.forcedEntry = null; ItemBooklet.forcedEntry = null;
this.shouldSaveDataNextClose = true;
} }
this.shouldSaveDataNextClose = false;
} }
@Override @Override

View file

@ -24,9 +24,8 @@ import net.minecraftforge.fml.relauncher.SideOnly;
@SideOnly(Side.CLIENT) @SideOnly(Side.CLIENT)
public class GuiBookletStand extends GuiBooklet{ public class GuiBookletStand extends GuiBooklet{
private GuiButton buttonSetPage;
private final TileEntityBookletStand theStand; private final TileEntityBookletStand theStand;
private GuiButton buttonSetPage;
public GuiBookletStand(TileEntityBase theStand){ public GuiBookletStand(TileEntityBase theStand){
super(null, false, false); super(null, false, false);

View file

@ -88,6 +88,7 @@ public final class InitBooklet{
new BookletChapter("hairBalls", ActuallyAdditionsAPI.entryMisc, new ItemStack(InitItems.itemHairyBall), new PagePicture(1, "pageFurBalls", 110).setStacks(new ItemStack(InitItems.itemHairyBall)), new PageTextOnly(2)).setSpecial(); new BookletChapter("hairBalls", ActuallyAdditionsAPI.entryMisc, new ItemStack(InitItems.itemHairyBall), new PagePicture(1, "pageFurBalls", 110).setStacks(new ItemStack(InitItems.itemHairyBall)), new PageTextOnly(2)).setSpecial();
new BookletChapter("blackLotus", ActuallyAdditionsAPI.entryMisc, new ItemStack(InitBlocks.blockBlackLotus), new PageTextOnly(1).setStacks(new ItemStack(InitBlocks.blockBlackLotus)), new PageCrafting(2, ItemCrafting.recipeBlackDye)); new BookletChapter("blackLotus", ActuallyAdditionsAPI.entryMisc, new ItemStack(InitBlocks.blockBlackLotus), new PageTextOnly(1).setStacks(new ItemStack(InitBlocks.blockBlackLotus)), new PageCrafting(2, ItemCrafting.recipeBlackDye));
new BookletChapter("waterBowl", ActuallyAdditionsAPI.entryMisc, new ItemStack(InitItems.itemWaterBowl), new PageTextOnly(1).setStacks(new ItemStack(InitItems.itemWaterBowl))); new BookletChapter("waterBowl", ActuallyAdditionsAPI.entryMisc, new ItemStack(InitItems.itemWaterBowl), new PageTextOnly(1).setStacks(new ItemStack(InitItems.itemWaterBowl)));
new BookletChapter("tinyTorch", ActuallyAdditionsAPI.entryMisc, new ItemStack(InitBlocks.blockTinyTorch), new PageCrafting(1, BlockCrafting.recipesTinyTorch).setPageStacksWildcard()).setSpecial();
//No RF Using Blocks //No RF Using Blocks
new BookletChapter("itemStorage", ActuallyAdditionsAPI.entryFunctionalNonRF, new ItemStack(InitBlocks.blockLaserRelayItemWhitelist), new PageTextOnly(1), new PageTextOnly(2), new PageCrafting(3, BlockCrafting.recipeLaserRelayItem).setNoText().setPageStacksWildcard(), new PageCrafting(4, BlockCrafting.recipeLaserRelayItemWhitelist).setNoText().setPageStacksWildcard(), new PageCrafting(5, BlockCrafting.recipeItemInterface).setNoText()).setImportant(); new BookletChapter("itemStorage", ActuallyAdditionsAPI.entryFunctionalNonRF, new ItemStack(InitBlocks.blockLaserRelayItemWhitelist), new PageTextOnly(1), new PageTextOnly(2), new PageCrafting(3, BlockCrafting.recipeLaserRelayItem).setNoText().setPageStacksWildcard(), new PageCrafting(4, BlockCrafting.recipeLaserRelayItemWhitelist).setNoText().setPageStacksWildcard(), new PageCrafting(5, BlockCrafting.recipeItemInterface).setNoText()).setImportant();
@ -107,7 +108,7 @@ public final class InitBooklet{
//RF Using Blocks //RF Using Blocks
new BookletChapter("fireworkBox", ActuallyAdditionsAPI.entryFunctionalRF, new ItemStack(InitBlocks.blockFireworkBox), new PageTextOnly(1).addTextReplacement("<rf>", TileEntityFireworkBox.USE_PER_SHOT), new PageCrafting(2, BlockCrafting.recipeFireworkBox)).setSpecial(); new BookletChapter("fireworkBox", ActuallyAdditionsAPI.entryFunctionalRF, new ItemStack(InitBlocks.blockFireworkBox), new PageTextOnly(1).addTextReplacement("<rf>", TileEntityFireworkBox.USE_PER_SHOT), new PageCrafting(2, BlockCrafting.recipeFireworkBox)).setSpecial();
new BookletChapter("laserRelays", ActuallyAdditionsAPI.entryFunctionalRF, new ItemStack(InitBlocks.blockLaserRelay), new PageTextOnly(1).addTextReplacement("<range>", TileEntityLaserRelay.MAX_DISTANCE).addTextReplacement("<loss>", ConfigIntValues.LASER_RELAY_LOSS.getValue()), new PagePicture(2, "pageLaserRelay", 0).setNoText(), new PageCrafting(3, BlockCrafting.recipeLaserRelay).setNoText().setPageStacksWildcard(), new PageCrafting(4, ItemCrafting.recipeLaserWrench)).setImportant(); new BookletChapter("laserRelays", ActuallyAdditionsAPI.entryFunctionalRF, new ItemStack(InitBlocks.blockLaserRelay), new PageTextOnly(1).addTextReplacement("<range>", TileEntityLaserRelay.MAX_DISTANCE), new PageTextOnly(2).addTextReplacement("<cap1>", TileEntityLaserRelayEnergy.CAP).addTextReplacement("<cap2>", TileEntityLaserRelayEnergyAdvanced.CAP).addTextReplacement("<cap3>", TileEntityLaserRelayEnergyExtreme.CAP), new PagePicture(3, "pageLaserRelay", 0).setNoText(), new PageCrafting(4, BlockCrafting.recipeLaserRelay).setNoText().setPageStacksWildcard(), new PageCrafting(5, BlockCrafting.recipeLaserRelayAdvanced).setNoText().setPageStacksWildcard(), new PageCrafting(6, BlockCrafting.recipeLaserRelayExtreme).setNoText().setPageStacksWildcard(), new PageCrafting(7, ItemCrafting.recipeLaserWrench)).setImportant();
new BookletChapter("miner", ActuallyAdditionsAPI.entryFunctionalRF, new ItemStack(InitBlocks.blockMiner), new PageTextOnly(1).addTextReplacement("<rf>", TileEntityMiner.ENERGY_USE_PER_BLOCK).addTextReplacement("<range>", TileEntityMiner.DEFAULT_RANGE), new PageCrafting(2, BlockCrafting.recipeMiner)).setSpecial(); new BookletChapter("miner", ActuallyAdditionsAPI.entryFunctionalRF, new ItemStack(InitBlocks.blockMiner), new PageTextOnly(1).addTextReplacement("<rf>", TileEntityMiner.ENERGY_USE_PER_BLOCK).addTextReplacement("<range>", TileEntityMiner.DEFAULT_RANGE), new PageCrafting(2, BlockCrafting.recipeMiner)).setSpecial();
new BookletChapterCoffee("coffeeMachine", ActuallyAdditionsAPI.entryFunctionalRF, new ItemStack(InitBlocks.blockCoffeeMachine), new PageTextOnly(1).setStacks(new ItemStack(InitItems.itemCoffeeBean)).addTextReplacement("<rf>", TileEntityCoffeeMachine.ENERGY_USED).addTextReplacement("<coffee>", TileEntityCoffeeMachine.CACHE_USE).addTextReplacement("<water>", TileEntityCoffeeMachine.WATER_USE), new PageTextOnly(2).setStacks(new ItemStack(InitItems.itemCoffee)), new PagePicture(3, "pageCoffeeMachine", 115), new PageCrafting(4, BlockCrafting.recipeCoffeeMachine).setNoText().setPageStacksWildcard(), new PageCrafting(5, ItemCrafting.recipeCup).setNoText()).setImportant(); new BookletChapterCoffee("coffeeMachine", ActuallyAdditionsAPI.entryFunctionalRF, new ItemStack(InitBlocks.blockCoffeeMachine), new PageTextOnly(1).setStacks(new ItemStack(InitItems.itemCoffeeBean)).addTextReplacement("<rf>", TileEntityCoffeeMachine.ENERGY_USED).addTextReplacement("<coffee>", TileEntityCoffeeMachine.CACHE_USE).addTextReplacement("<water>", TileEntityCoffeeMachine.WATER_USE), new PageTextOnly(2).setStacks(new ItemStack(InitItems.itemCoffee)), new PagePicture(3, "pageCoffeeMachine", 115), new PageCrafting(4, BlockCrafting.recipeCoffeeMachine).setNoText().setPageStacksWildcard(), new PageCrafting(5, ItemCrafting.recipeCup).setNoText()).setImportant();
new BookletChapterCrusher("crusher", ActuallyAdditionsAPI.entryFunctionalRF, new ItemStack(InitBlocks.blockGrinderDouble), new PageTextOnly(1).addTextReplacement("<rf>", TileEntityGrinder.ENERGY_USE), new PageCrafting(2, BlockCrafting.recipeCrusher).setNoText().setPageStacksWildcard(), new PageCrafting(3, BlockCrafting.recipeDoubleCrusher).setNoText().setPageStacksWildcard(), new PageCrusherRecipe(4, CrusherCrafting.recipeIronHorseArmor).setNoText(), new PageCrusherRecipe(5, CrusherCrafting.recipeGoldHorseArmor).setNoText(), new PageCrusherRecipe(6, CrusherCrafting.recipeDiamondHorseArmor).setNoText()); new BookletChapterCrusher("crusher", ActuallyAdditionsAPI.entryFunctionalRF, new ItemStack(InitBlocks.blockGrinderDouble), new PageTextOnly(1).addTextReplacement("<rf>", TileEntityGrinder.ENERGY_USE), new PageCrafting(2, BlockCrafting.recipeCrusher).setNoText().setPageStacksWildcard(), new PageCrafting(3, BlockCrafting.recipeDoubleCrusher).setNoText().setPageStacksWildcard(), new PageCrusherRecipe(4, CrusherCrafting.recipeIronHorseArmor).setNoText(), new PageCrusherRecipe(5, CrusherCrafting.recipeGoldHorseArmor).setNoText(), new PageCrusherRecipe(6, CrusherCrafting.recipeDiamondHorseArmor).setNoText());
@ -128,8 +129,9 @@ public final class InitBooklet{
//No RF Using Items //No RF Using Items
new BookletChapter("wings", ActuallyAdditionsAPI.entryItemsNonRF, new ItemStack(InitItems.itemWingsOfTheBats), new PageTextOnly(1).setStacks(new ItemStack(InitItems.itemMisc, 1, TheMiscItems.BAT_WING.ordinal())), new PageCrafting(2, ItemCrafting.recipeWings).setNoText()).setSpecial(); new BookletChapter("wings", ActuallyAdditionsAPI.entryItemsNonRF, new ItemStack(InitItems.itemWingsOfTheBats), new PageTextOnly(1).setStacks(new ItemStack(InitItems.itemMisc, 1, TheMiscItems.BAT_WING.ordinal())), new PageCrafting(2, ItemCrafting.recipeWings).setNoText()).setSpecial();
new BookletChapter("foods", ActuallyAdditionsAPI.entryItemsNonRF, new ItemStack(InitItems.itemFoods, 1, TheFoods.HAMBURGER.ordinal()), new PageCrafting(1, FoodCrafting.recipeBacon), new PageFurnace(2, new ItemStack(InitItems.itemFoods, 1, TheFoods.RICE_BREAD.ordinal())).setNoText(), new PageCrafting(3, FoodCrafting.recipeHamburger).setNoText(), new PageCrafting(4, FoodCrafting.recipeBigCookie).setNoText(), new PageCrafting(5, FoodCrafting.recipeSubSandwich).setNoText(), new PageCrafting(6, FoodCrafting.recipeFrenchFry).setNoText(), new PageCrafting(7, FoodCrafting.recipeFrenchFries).setNoText(), new PageCrafting(8, FoodCrafting.recipeFishNChips).setNoText(), new PageCrafting(9, FoodCrafting.recipeCheese).setNoText(), new PageCrafting(10, FoodCrafting.recipePumpkinStew).setNoText(), new PageCrafting(11, FoodCrafting.recipeCarrotJuice).setNoText(), new PageCrafting(12, FoodCrafting.recipeSpaghetti).setNoText(), new PageCrafting(13, FoodCrafting.recipeNoodle).setNoText(), new PageCrafting(14, FoodCrafting.recipeChocolate).setNoText(), new PageCrafting(15, FoodCrafting.recipeChocolateCake).setNoText(), new PageCrafting(16, FoodCrafting.recipeToast).setNoText(), new PageFurnace(17, new ItemStack(InitItems.itemFoods, 1, TheFoods.BAGUETTE.ordinal())).setNoText(), new PageCrafting(18, FoodCrafting.recipeChocolateToast).setNoText(), new PageCrafting(1, FoodCrafting.recipePizza).setNoText()); new BookletChapter("foods", ActuallyAdditionsAPI.entryItemsNonRF, new ItemStack(InitItems.itemFoods, 1, TheFoods.HAMBURGER.ordinal()), new PageCrafting(1, FoodCrafting.recipeBacon).setNoText(), new PageFurnace(2, new ItemStack(InitItems.itemFoods, 1, TheFoods.RICE_BREAD.ordinal())).setNoText(), new PageCrafting(3, FoodCrafting.recipeHamburger).setNoText(), new PageCrafting(4, FoodCrafting.recipeBigCookie).setNoText(), new PageCrafting(5, FoodCrafting.recipeSubSandwich).setNoText(), new PageCrafting(6, FoodCrafting.recipeFrenchFry).setNoText(), new PageCrafting(7, FoodCrafting.recipeFrenchFries).setNoText(), new PageCrafting(8, FoodCrafting.recipeFishNChips).setNoText(), new PageCrafting(9, FoodCrafting.recipeCheese).setNoText(), new PageCrafting(10, FoodCrafting.recipePumpkinStew).setNoText(), new PageCrafting(11, FoodCrafting.recipeCarrotJuice).setNoText(), new PageCrafting(12, FoodCrafting.recipeSpaghetti).setNoText(), new PageCrafting(13, FoodCrafting.recipeNoodle).setNoText(), new PageCrafting(14, FoodCrafting.recipeChocolate).setNoText(), new PageCrafting(15, FoodCrafting.recipeChocolateCake).setNoText(), new PageCrafting(16, FoodCrafting.recipeToast).setNoText(), new PageFurnace(17, new ItemStack(InitItems.itemFoods, 1, TheFoods.BAGUETTE.ordinal())).setNoText(), new PageCrafting(18, FoodCrafting.recipeChocolateToast).setNoText(), new PageCrafting(1, FoodCrafting.recipePizza).setNoText());
new BookletChapter("leafBlower", ActuallyAdditionsAPI.entryItemsNonRF, new ItemStack(InitItems.itemLeafBlowerAdvanced), new PageTextOnly(1), new PageCrafting(2, ItemCrafting.recipeLeafBlower).setNoText(), new PageCrafting(3, ItemCrafting.recipeLeafBlowerAdvanced).setNoText()).setImportant(); new BookletChapter("leafBlower", ActuallyAdditionsAPI.entryItemsNonRF, new ItemStack(InitItems.itemLeafBlowerAdvanced), new PageTextOnly(1), new PageCrafting(2, ItemCrafting.recipeLeafBlower).setNoText(), new PageCrafting(3, ItemCrafting.recipeLeafBlowerAdvanced).setNoText()).setImportant();
new BookletChapter("playerProbe", ActuallyAdditionsAPI.entryItemsNonRF, new ItemStack(InitItems.itemPlayerProbe), new PageTextOnly(1), new PageCrafting(2, ItemCrafting.recipePlayerProbe).setNoText()).setSpecial();
ArrayList<BookletPage> aiotPages = new ArrayList<BookletPage>(); ArrayList<BookletPage> aiotPages = new ArrayList<BookletPage>();
aiotPages.add(new PageTextOnly(aiotPages.size()+1)); aiotPages.add(new PageTextOnly(aiotPages.size()+1));
for(IRecipe recipe : ToolCrafting.RECIPES_PAXELS){ for(IRecipe recipe : ToolCrafting.RECIPES_PAXELS){
@ -149,7 +151,7 @@ public final class InitBooklet{
new BookletChapter("itemFilter", ActuallyAdditionsAPI.entryFunctionalNonRF, new ItemStack(InitItems.itemFilter), new PageTextOnly(1), new PageCrafting(2, ItemCrafting.recipeFilter).setNoText()).setImportant(); new BookletChapter("itemFilter", ActuallyAdditionsAPI.entryFunctionalNonRF, new ItemStack(InitItems.itemFilter), new PageTextOnly(1), new PageCrafting(2, ItemCrafting.recipeFilter).setNoText()).setImportant();
//RF Using Items //RF Using Items
new BookletChapter("drill", ActuallyAdditionsAPI.entryItemsRF, new ItemStack(InitItems.itemDrill, 1, TheColoredLampColors.LIGHT_BLUE.ordinal()), new PageTextOnly(1), new PageCrafting(2, ItemCrafting.recipeDrill).setNoText(), new PageCrafting(3, ItemCrafting.RECIPES_DRILL_COLORING), new PageCrafting(4, ItemCrafting.recipeDrillCore).setNoText(), new PageCrafting(5, ItemCrafting.recipeDrillSpeedI).setNoText(), new PageCrafting(6, ItemCrafting.recipeDrillSpeedII).setNoText(), new PageCrafting(7, ItemCrafting.recipeDrillSpeedIII).setNoText(), new PageCrafting(8, ItemCrafting.recipeDrillFortuneI).setNoText(), new PageCrafting(9, ItemCrafting.recipeDrillFortuneII).setNoText(), new PageCrafting(10, ItemCrafting.recipeDrillSilk).setNoText(), new PageCrafting(11, ItemCrafting.recipeDrillThree).setNoText(), new PageCrafting(12, ItemCrafting.recipeDrillFive).setNoText(), new PageCrafting(13, ItemCrafting.recipeDrillPlacing).setNoText()).setSpecial(); new BookletChapter("drill", ActuallyAdditionsAPI.entryItemsRF, new ItemStack(InitItems.itemDrill, 1, TheColoredLampColors.LIGHT_BLUE.ordinal()), new PageTextOnly(1), new PageTextOnly(2), new PageCrafting(3, ItemCrafting.recipeDrill).setNoText().setPageStacksWildcard(), new PageCrafting(4, ItemCrafting.recipeDrillCore).setNoText(), new PageCrafting(5, ItemCrafting.recipeDrillSpeedI).setNoText(), new PageCrafting(6, ItemCrafting.recipeDrillSpeedII).setNoText(), new PageCrafting(7, ItemCrafting.recipeDrillSpeedIII).setNoText(), new PageCrafting(8, ItemCrafting.recipeDrillFortuneI).setNoText(), new PageCrafting(9, ItemCrafting.recipeDrillFortuneII).setNoText(), new PageCrafting(10, ItemCrafting.recipeDrillSilk).setNoText(), new PageCrafting(11, ItemCrafting.recipeDrillThree).setNoText(), new PageCrafting(12, ItemCrafting.recipeDrillFive).setNoText(), new PageCrafting(13, ItemCrafting.recipeDrillPlacing).setNoText()).setSpecial();
new BookletChapter("staff", ActuallyAdditionsAPI.entryItemsRF, new ItemStack(InitItems.itemTeleStaff), new PageTextOnly(1), new PageCrafting(2, ItemCrafting.recipeStaff).setNoText()).setImportant(); new BookletChapter("staff", ActuallyAdditionsAPI.entryItemsRF, new ItemStack(InitItems.itemTeleStaff), new PageTextOnly(1), new PageCrafting(2, ItemCrafting.recipeStaff).setNoText()).setImportant();
new BookletChapter("magnetRing", ActuallyAdditionsAPI.entryItemsRF, new ItemStack(InitItems.itemMagnetRing), new PageCrafting(1, ItemCrafting.recipeMagnetRing)); new BookletChapter("magnetRing", ActuallyAdditionsAPI.entryItemsRF, new ItemStack(InitItems.itemMagnetRing), new PageCrafting(1, ItemCrafting.recipeMagnetRing));
new BookletChapter("growthRing", ActuallyAdditionsAPI.entryItemsRF, new ItemStack(InitItems.itemGrowthRing), new PageCrafting(1, ItemCrafting.recipeGrowthRing)); new BookletChapter("growthRing", ActuallyAdditionsAPI.entryItemsRF, new ItemStack(InitItems.itemGrowthRing), new PageCrafting(1, ItemCrafting.recipeGrowthRing));

View file

@ -11,7 +11,6 @@
package de.ellpeck.actuallyadditions.mod.config; package de.ellpeck.actuallyadditions.mod.config;
import de.ellpeck.actuallyadditions.mod.util.ModUtil; import de.ellpeck.actuallyadditions.mod.util.ModUtil;
import de.ellpeck.actuallyadditions.mod.util.Util;
import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.common.config.Configuration; import net.minecraftforge.common.config.Configuration;
import net.minecraftforge.fml.client.event.ConfigChangedEvent; import net.minecraftforge.fml.client.event.ConfigChangedEvent;

View file

@ -37,6 +37,7 @@ public enum ConfigBoolValues{
DO_SPIDER_DROPS("Spider Cobweb Drop", ConfigCategories.MOB_DROPS, true, "If Cobwebs should sometimes drop from Spiders"), DO_SPIDER_DROPS("Spider Cobweb Drop", ConfigCategories.MOB_DROPS, true, "If Cobwebs should sometimes drop from Spiders"),
DO_BAT_DROPS("Bat Wing Drop", ConfigCategories.MOB_DROPS, true, "If Wings should sometimes drop from Bats"), DO_BAT_DROPS("Bat Wing Drop", ConfigCategories.MOB_DROPS, true, "If Wings should sometimes drop from Bats"),
DO_XP_DROPS("Solidified XP Drop", ConfigCategories.MOB_DROPS, true, "If Mobs should randomly drop solidified XP occasionally"),
CTRL_EXTRA_INFO("Advanced Info", ConfigCategories.OTHER, true, "Show Advanced Item Info when holding Control on every Item"), CTRL_EXTRA_INFO("Advanced Info", ConfigCategories.OTHER, true, "Show Advanced Item Info when holding Control on every Item"),
CTRL_INFO_FOR_EXTRA_INFO("Advanced Info Tooltips", ConfigCategories.OTHER, true, "Show the 'Press Control for more Info'-Text on Item Tooltips"), CTRL_INFO_FOR_EXTRA_INFO("Advanced Info Tooltips", ConfigCategories.OTHER, true, "Show the 'Press Control for more Info'-Text on Item Tooltips"),
@ -55,7 +56,9 @@ public enum ConfigBoolValues{
LESS_SOUND("Less Sound", ConfigCategories.PERFORMANCE, false, "If blocks in Actually Additions should have less sounds"), LESS_SOUND("Less Sound", ConfigCategories.PERFORMANCE, false, "If blocks in Actually Additions should have less sounds"),
LESS_PARTICLES("Less Particles", ConfigCategories.PERFORMANCE, false, "If blocks in Actually Additions should have less particles"), LESS_PARTICLES("Less Particles", ConfigCategories.PERFORMANCE, false, "If blocks in Actually Additions should have less particles"),
LESS_BLOCK_BREAKING_EFFECTS("Less Block Breaking Effects", ConfigCategories.PERFORMANCE, false, "If there should not be a sound effect and particles when a block is being destroyed by a breaker or similar"); LESS_BLOCK_BREAKING_EFFECTS("Less Block Breaking Effects", ConfigCategories.PERFORMANCE, false, "If there should not be a sound effect and particles when a block is being destroyed by a breaker or similar"),
LASER_RELAY_LOSS("Laser Relay Energy Loss", ConfigCategories.MACHINE_VALUES, true, "If Energy Laser Relays should have energy loss");
public final String name; public final String name;
public final String category; public final String category;

View file

@ -98,6 +98,7 @@ public enum ConfigCrafting{
PHANTOMFACE("Phantomface", ConfigCategories.BLOCKS_CRAFTING), PHANTOMFACE("Phantomface", ConfigCategories.BLOCKS_CRAFTING),
PHANTOM_CONNECTOR("Phantom Connector", ConfigCategories.ITEMS_CRAFTING), PHANTOM_CONNECTOR("Phantom Connector", ConfigCategories.ITEMS_CRAFTING),
PLAYER_INTERFACE("Player Interface", ConfigCategories.BLOCKS_CRAFTING), PLAYER_INTERFACE("Player Interface", ConfigCategories.BLOCKS_CRAFTING),
PLAYER_PROBE("Player Probe", ConfigCategories.ITEMS_CRAFTING),
PHANTOM_ENERGYFACE("Phantom Energyface", ConfigCategories.BLOCKS_CRAFTING), PHANTOM_ENERGYFACE("Phantom Energyface", ConfigCategories.BLOCKS_CRAFTING),
PHANTOM_REDSTONEFACE("Phantom Redstoneface", ConfigCategories.BLOCKS_CRAFTING), PHANTOM_REDSTONEFACE("Phantom Redstoneface", ConfigCategories.BLOCKS_CRAFTING),

View file

@ -23,9 +23,6 @@ public enum ConfigIntValues{
BLACK_LOTUS_AMOUNT("Black Lotus: Amount", ConfigCategories.WORLD_GEN, 14, 1, 50, "The Amount of Black Lotus generating"), BLACK_LOTUS_AMOUNT("Black Lotus: Amount", ConfigCategories.WORLD_GEN, 14, 1, 50, "The Amount of Black Lotus generating"),
LUSH_CAVE_CHANCE("Lush Caves: Chance", ConfigCategories.WORLD_GEN, 20, 1, 100, "The chance for lush caves to generate. The lower the number, the likelier."), LUSH_CAVE_CHANCE("Lush Caves: Chance", ConfigCategories.WORLD_GEN, 20, 1, 100, "The chance for lush caves to generate. The lower the number, the likelier."),
LASER_RELAY_LOSS("Laser Relay: Loss", ConfigCategories.MACHINE_VALUES, 5, 0, 80, "The Energy Loss of the Laser Relay per Transfer in Percent"),
LASER_RELAY_MAX_TRANSFER("Laser Relay: Max Transfer", ConfigCategories.MACHINE_VALUES, 10000, 100, 1000000, "The max amount of RF a Laser Relay can receive and try to transfer (if it's given 100 RF and can only transfer 50, it will only accept 50, it won't waste any power!)"),
TILE_ENTITY_UPDATE_INTERVAL("Tile Entities: Update Interval", ConfigCategories.OTHER, 5, 1, 100, "The amount of ticks waited before a TileEntity sends an additional Update to the Client"); TILE_ENTITY_UPDATE_INTERVAL("Tile Entities: Update Interval", ConfigCategories.OTHER, 5, 1, 100, "The amount of ticks waited before a TileEntity sends an additional Update to the Client");
public final String name; public final String name;

View file

@ -20,7 +20,7 @@ public enum ConfigStringListValues{
DRILL_EXTRA_MINING_WHITELIST("Drill Extra Whitelist", ConfigCategories.TOOL_VALUES, new String[]{"TConstruct:GravelOre"}, "By default, the Drill can mine certain blocks. If there is one that it can't mine, but should be able to, put its REGISTRY NAME here. These are the actual registered Item Names, the ones you use, for example, when using the /give Command."), DRILL_EXTRA_MINING_WHITELIST("Drill Extra Whitelist", ConfigCategories.TOOL_VALUES, new String[]{"TConstruct:GravelOre"}, "By default, the Drill can mine certain blocks. If there is one that it can't mine, but should be able to, put its REGISTRY NAME here. These are the actual registered Item Names, the ones you use, for example, when using the /give Command."),
MINER_EXTRA_WHITELIST("Vertical Digger Extra Whitelist", ConfigCategories.MACHINE_VALUES, new String[0], "By default, the Vertical Digger mines everything that starts with 'ore' in the OreDictionary. If there is one that it can't mine, but should be able to, put its REGISTRY NAME here. These are the actual registered Item Names, the ones you use, for example, when using the /give Command. This Config Option only applies if the miner is in Ores Only Mode."), MINER_EXTRA_WHITELIST("Vertical Digger Extra Whitelist", ConfigCategories.MACHINE_VALUES, new String[0], "By default, the Vertical Digger mines everything that starts with 'ore' in the OreDictionary. If there is one that it can't mine, but should be able to, put its REGISTRY NAME here. These are the actual registered Item Names, the ones you use, for example, when using the /give Command. This Config Option only applies if the miner is in Ores Only Mode."),
MINER_BLACKLIST("Vertical Digger Blacklist", ConfigCategories.MACHINE_VALUES, new String[0], "By default, the Vertical Digger mines everything that starts with 'ore' in the OreDictionary. If there is one that it can mine, but shouldn't be able to, put its REGISTRY NAME here. These are the actual registered Item Names, the ones you use, for example, when using the /give Command. This Config Option will apply in both modes."), MINER_BLACKLIST("Vertical Digger Blacklist", ConfigCategories.MACHINE_VALUES, new String[0], "By default, the Vertical Digger mines everything that starts with 'ore' in the OreDictionary. If there is one that it can mine, but shouldn't be able to, put its REGISTRY NAME here. These are the actual registered Item Names, the ones you use, for example, when using the /give Command. This Config Option will apply in both modes."),
REPAIRER_EXTRA_WHITELIST("Item Repairer Extra Whitelist", ConfigCategories.MACHINE_VALUES, new String[]{"tconstruct:pickaxe", "tconstruct:shovel", "tconstruct:hatchet", "tconstruct:mattock", "tconstruct:broadsword", "tconstruct:longsword", "tconstruct:frypan", "tconstruct:battlesign", "tconstruct:hammer", "tconstruct:excavator", "tconstruct:lumberaxe", "tconstruct:cleaver"}, "By default, the Item Repairer only repairs items which are repairable in an anvil. Add an item's REGISTRY NAME here if you want it to be repairable."), REPAIRER_EXTRA_WHITELIST("Item Repairer Extra Whitelist", ConfigCategories.MACHINE_VALUES, new String[]{"tconstruct:pickaxe", "tconstruct:shovel", "tconstruct:hatchet", "tconstruct:mattock", "tconstruct:broadsword", "tconstruct:longsword", "tconstruct:frypan", "tconstruct:battlesign", "tconstruct:hammer", "tconstruct:excavator", "tconstruct:lumberaxe", "tconstruct:cleaver", "tconstruct:rapier"}, "By default, the Item Repairer only repairs items which are repairable in an anvil. Add an item's REGISTRY NAME here if you want it to be repairable."),
SPAWNER_CHANGER_BLACKLIST("Spawner Changer Blacklist", ConfigCategories.OTHER, new String[]{"VillagerGolem"}, "By default, the Spawner Changer allows every living entity to be put into a spawner. If there is one that shouldn't be able to, put its MAPPING NAME here."); SPAWNER_CHANGER_BLACKLIST("Spawner Changer Blacklist", ConfigCategories.OTHER, new String[]{"VillagerGolem"}, "By default, the Spawner Changer allows every living entity to be put into a spawner. If there is one that shouldn't be able to, put its MAPPING NAME here.");
public final String name; public final String name;

View file

@ -80,6 +80,8 @@ public final class BlockCrafting{
public static IRecipe recipeDropper; public static IRecipe recipeDropper;
public static IRecipe recipeRangedCollector; public static IRecipe recipeRangedCollector;
public static IRecipe recipeLaserRelay; public static IRecipe recipeLaserRelay;
public static IRecipe recipeLaserRelayAdvanced;
public static IRecipe recipeLaserRelayExtreme;
public static IRecipe recipeAtomicReconstructor; public static IRecipe recipeAtomicReconstructor;
public static IRecipe recipeMiner; public static IRecipe recipeMiner;
public static IRecipe recipeFireworkBox; public static IRecipe recipeFireworkBox;
@ -90,9 +92,24 @@ public final class BlockCrafting{
public static IRecipe recipePlayerInterface; public static IRecipe recipePlayerInterface;
public static IRecipe recipeDisplayStand; public static IRecipe recipeDisplayStand;
public static IRecipe recipeShockSuppressor; public static IRecipe recipeShockSuppressor;
public static IRecipe[] recipesTinyTorch = new IRecipe[2];
public static void init(){ public static void init(){
//Tiny Torch
GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(InitBlocks.blockTinyTorch, 2),
"C",
"W",
'C', new ItemStack(InitItems.itemMisc, 1, TheMiscItems.TINY_COAL.ordinal()),
'W', "stickWood"));
recipesTinyTorch[0] = RecipeUtil.lastIRecipe();
GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(InitBlocks.blockTinyTorch, 2),
"C",
"W",
'C', new ItemStack(InitItems.itemMisc, 1, TheMiscItems.TINY_CHAR.ordinal()),
'W', "stickWood"));
recipesTinyTorch[1] = RecipeUtil.lastIRecipe();
//Firework Box //Firework Box
if(ConfigCrafting.FIREWORK_BOX.isEnabled()){ if(ConfigCrafting.FIREWORK_BOX.isEnabled()){
GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(InitBlocks.blockFireworkBox), GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(InitBlocks.blockFireworkBox),
@ -207,6 +224,20 @@ public final class BlockCrafting{
'R', new ItemStack(InitItems.itemCrystal, 1, TheCrystals.REDSTONE.ordinal()), 'R', new ItemStack(InitItems.itemCrystal, 1, TheCrystals.REDSTONE.ordinal()),
'C', new ItemStack(InitItems.itemMisc, 1, TheMiscItems.COIL_ADVANCED.ordinal()))); 'C', new ItemStack(InitItems.itemMisc, 1, TheMiscItems.COIL_ADVANCED.ordinal())));
recipeLaserRelay = RecipeUtil.lastIRecipe(); recipeLaserRelay = RecipeUtil.lastIRecipe();
GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(InitBlocks.blockLaserRelayAdvanced),
" I ", "XRX", " I ",
'I', new ItemStack(InitItems.itemCrystal, 1, TheCrystals.IRON.ordinal()),
'R', new ItemStack(InitBlocks.blockLaserRelay),
'X', new ItemStack(InitItems.itemCrystal, 1, TheCrystals.REDSTONE.ordinal())));
recipeLaserRelayAdvanced = RecipeUtil.lastIRecipe();
GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(InitBlocks.blockLaserRelayExtreme),
" I ", "XRX", " I ",
'I', new ItemStack(InitItems.itemCrystal, 1, TheCrystals.DIAMOND.ordinal()),
'R', new ItemStack(InitBlocks.blockLaserRelayAdvanced),
'X', new ItemStack(InitItems.itemCrystal, 1, TheCrystals.REDSTONE.ordinal())));
recipeLaserRelayExtreme = RecipeUtil.lastIRecipe();
} }
//Item Laser Relay //Item Laser Relay

View file

@ -11,11 +11,15 @@
package de.ellpeck.actuallyadditions.mod.crafting; package de.ellpeck.actuallyadditions.mod.crafting;
import de.ellpeck.actuallyadditions.api.ActuallyAdditionsAPI; import de.ellpeck.actuallyadditions.api.ActuallyAdditionsAPI;
import de.ellpeck.actuallyadditions.mod.blocks.metalists.TheColoredLampColors;
import de.ellpeck.actuallyadditions.mod.items.InitItems; import de.ellpeck.actuallyadditions.mod.items.InitItems;
import de.ellpeck.actuallyadditions.mod.items.metalists.TheMiscItems; import de.ellpeck.actuallyadditions.mod.items.metalists.TheMiscItems;
import de.ellpeck.actuallyadditions.mod.util.ModUtil; import de.ellpeck.actuallyadditions.mod.util.ModUtil;
import de.ellpeck.actuallyadditions.mod.util.RecipeUtil;
import net.minecraft.init.Blocks; import net.minecraft.init.Blocks;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraftforge.fml.common.registry.GameRegistry;
import net.minecraftforge.oredict.RecipeSorter;
public final class InitCrafting{ public final class InitCrafting{
@ -30,6 +34,9 @@ public final class InitCrafting{
ActuallyAdditionsAPI.addCompostRecipe(new ItemStack(InitItems.itemMisc, 10, TheMiscItems.MASHED_FOOD.ordinal()), Blocks.LEAVES, new ItemStack(InitItems.itemFertilizer, 10), Blocks.DIRT); ActuallyAdditionsAPI.addCompostRecipe(new ItemStack(InitItems.itemMisc, 10, TheMiscItems.MASHED_FOOD.ordinal()), Blocks.LEAVES, new ItemStack(InitItems.itemFertilizer, 10), Blocks.DIRT);
ActuallyAdditionsAPI.addCompostRecipe(new ItemStack(InitItems.itemCanolaSeed, 20), Blocks.DIRT, new ItemStack(InitItems.itemMisc, 1, TheMiscItems.BIOMASS.ordinal()), Blocks.SOUL_SAND); ActuallyAdditionsAPI.addCompostRecipe(new ItemStack(InitItems.itemCanolaSeed, 20), Blocks.DIRT, new ItemStack(InitItems.itemMisc, 1, TheMiscItems.BIOMASS.ordinal()), Blocks.SOUL_SAND);
RecipeSorter.register(ModUtil.MOD_ID+":drillColoring", RecipeDrillColor.class, RecipeSorter.Category.SHAPELESS, "");
GameRegistry.addRecipe(new RecipeDrillColor());
} }
} }

View file

@ -37,7 +37,6 @@ import java.util.ArrayList;
public final class ItemCrafting{ public final class ItemCrafting{
public static final ArrayList<IRecipe> RECIPES_MASHED_FOOD = new ArrayList<IRecipe>(); public static final ArrayList<IRecipe> RECIPES_MASHED_FOOD = new ArrayList<IRecipe>();
public static final ArrayList<IRecipe> RECIPES_DRILL_COLORING = new ArrayList<IRecipe>();
public static final ArrayList<IRecipe> RECIPES_POTION_RINGS = new ArrayList<IRecipe>(); public static final ArrayList<IRecipe> RECIPES_POTION_RINGS = new ArrayList<IRecipe>();
public static IRecipe recipePhantomConnector; public static IRecipe recipePhantomConnector;
public static IRecipe recipeCoil; public static IRecipe recipeCoil;
@ -83,6 +82,7 @@ public final class ItemCrafting{
public static IRecipe recipeEnderStar; public static IRecipe recipeEnderStar;
public static IRecipe recipeSpawnerChanger; public static IRecipe recipeSpawnerChanger;
public static IRecipe recipeFilter; public static IRecipe recipeFilter;
public static IRecipe recipePlayerProbe;
public static void init(){ public static void init(){
@ -181,21 +181,13 @@ public final class ItemCrafting{
//Drill //Drill
if(ConfigCrafting.DRILL.isEnabled()){ if(ConfigCrafting.DRILL.isEnabled()){
ItemStack lightBlueDrill = new ItemStack(InitItems.itemDrill, 1, TheColoredLampColors.LIGHT_BLUE.ordinal()); GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(InitItems.itemDrill, 1, TheColoredLampColors.LIGHT_BLUE.ordinal()),
GameRegistry.addRecipe(new ShapedOreRecipe(lightBlueDrill.copy(),
"DDD", "CRC", "III", "DDD", "CRC", "III",
'D', new ItemStack(InitItems.itemCrystal, 1, TheCrystals.DIAMOND.ordinal()), 'D', new ItemStack(InitItems.itemCrystal, 1, TheCrystals.DIAMOND.ordinal()),
'C', new ItemStack(InitItems.itemMisc, 1, TheMiscItems.COIL_ADVANCED.ordinal()), 'C', new ItemStack(InitItems.itemMisc, 1, TheMiscItems.COIL_ADVANCED.ordinal()),
'R', new ItemStack(InitItems.itemMisc, 1, TheMiscItems.DRILL_CORE.ordinal()), 'R', new ItemStack(InitItems.itemMisc, 1, TheMiscItems.DRILL_CORE.ordinal()),
'I', new ItemStack(InitBlocks.blockCrystal, 1, TheCrystals.IRON.ordinal()))); 'I', new ItemStack(InitBlocks.blockCrystal, 1, TheCrystals.IRON.ordinal())));
recipeDrill = RecipeUtil.lastIRecipe(); recipeDrill = RecipeUtil.lastIRecipe();
for(int i = 0; i < 16; i++){
if(i != TheColoredLampColors.LIGHT_BLUE.ordinal()){
GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(InitItems.itemDrill, 1, i), lightBlueDrill.copy(), "dye"+TheColoredLampColors.values()[i].name));
RECIPES_DRILL_COLORING.add(RecipeUtil.lastIRecipe());
}
}
} }
//Drill Core //Drill Core
@ -450,6 +442,17 @@ public final class ItemCrafting{
recipePhantomConnector = RecipeUtil.lastIRecipe(); recipePhantomConnector = RecipeUtil.lastIRecipe();
} }
//Player Probe
if(ConfigCrafting.PLAYER_PROBE.isEnabled()){
GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(InitItems.itemPlayerProbe),
"A A", "AIA", "RHR",
'A', new ItemStack(Blocks.IRON_BARS),
'R', new ItemStack(InitItems.itemCrystal, 1, TheCrystals.REDSTONE.ordinal()),
'H', new ItemStack(Items.SKULL, 1, 1),
'I', new ItemStack(Items.IRON_HELMET)));
recipePlayerProbe = RecipeUtil.lastIRecipe();
}
//Quartz //Quartz
GameRegistry.addSmelting(new ItemStack(InitBlocks.blockMisc, 1, TheMiscBlocks.ORE_QUARTZ.ordinal()), GameRegistry.addSmelting(new ItemStack(InitBlocks.blockMisc, 1, TheMiscBlocks.ORE_QUARTZ.ordinal()),
new ItemStack(InitItems.itemMisc, 1, TheMiscItems.QUARTZ.ordinal()), 1F); new ItemStack(InitItems.itemMisc, 1, TheMiscItems.QUARTZ.ordinal()), 1F);

View file

@ -0,0 +1,121 @@
/*
* This file ("RecipeDrillColor.java") is part of the Actually Additions mod for Minecraft.
* It is created and owned by Ellpeck and distributed
* under the Actually Additions License to be found at
* http://ellpeck.de/actaddlicense
* View the source code at https://github.com/Ellpeck/ActuallyAdditions
*
* © 2015-2016 Ellpeck
*/
package de.ellpeck.actuallyadditions.mod.crafting;
import de.ellpeck.actuallyadditions.mod.blocks.metalists.TheColoredLampColors;
import de.ellpeck.actuallyadditions.mod.items.ItemDrill;
import net.minecraft.inventory.InventoryCrafting;
import net.minecraft.item.ItemStack;
import net.minecraft.item.crafting.IRecipe;
import net.minecraft.world.World;
import net.minecraftforge.common.ForgeHooks;
import net.minecraftforge.oredict.OreDictionary;
import javax.annotation.Nullable;
public class RecipeDrillColor implements IRecipe{
@Override
public boolean matches(InventoryCrafting inv, World worldIn){
boolean hasDrill = false;
boolean hasColor = false;
for(int i = 0; i < inv.getSizeInventory(); i++){
ItemStack stack = inv.getStackInSlot(i);
if(stack != null && stack.getItem() != null){
if(stack.getItem() instanceof ItemDrill){
if(!hasDrill){
hasDrill = true;
}
else{
return false;
}
}
else{
int[] ids = OreDictionary.getOreIDs(stack);
if(ids != null){
for(int id : ids){
String name = OreDictionary.getOreName(id);
if(name != null){
TheColoredLampColors color = TheColoredLampColors.getColorFromDyeName(name);
if(color != null){
if(!hasColor){
hasColor = true;
}
else{
return false;
}
}
}
}
}
}
}
}
return hasDrill && hasColor;
}
@Nullable
@Override
public ItemStack getCraftingResult(InventoryCrafting inv){
ItemStack drillStack = null;
ItemStack colorStack = null;
for(int i = 0; i < inv.getSizeInventory(); i++){
ItemStack stack = inv.getStackInSlot(i);
if(stack != null && stack.getItem() != null){
if(stack.getItem() instanceof ItemDrill){
drillStack = stack.copy();
}
else{
colorStack = stack.copy();
}
}
}
if(drillStack != null && colorStack != null){
int[] ids = OreDictionary.getOreIDs(colorStack);
if(ids != null){
for(int id : ids){
String name = OreDictionary.getOreName(id);
if(name != null){
TheColoredLampColors color = TheColoredLampColors.getColorFromDyeName(name);
if(color != null){
if(color.ordinal() != drillStack.getItemDamage()){
drillStack.setItemDamage(color.ordinal());
return drillStack;
}
}
}
}
}
}
return null;
}
@Override
public int getRecipeSize(){
return 2;
}
@Nullable
@Override
public ItemStack getRecipeOutput(){
return null;
}
@Override
public ItemStack[] getRemainingItems(InventoryCrafting inv){
return ForgeHooks.defaultRecipeGetRemainingItems(inv);
}
}

View file

@ -55,6 +55,8 @@ public class CreativeTab extends CreativeTabs{
this.add(InitBlocks.blockFireworkBox); this.add(InitBlocks.blockFireworkBox);
this.add(InitBlocks.blockLaserRelay); this.add(InitBlocks.blockLaserRelay);
this.add(InitBlocks.blockLaserRelayAdvanced);
this.add(InitBlocks.blockLaserRelayExtreme);
this.add(InitBlocks.blockLaserRelayItem); this.add(InitBlocks.blockLaserRelayItem);
this.add(InitBlocks.blockLaserRelayItemWhitelist); this.add(InitBlocks.blockLaserRelayItemWhitelist);
this.add(InitBlocks.blockItemViewer); this.add(InitBlocks.blockItemViewer);
@ -136,6 +138,7 @@ public class CreativeTab extends CreativeTabs{
this.add(InitBlocks.blockBlackLotus); this.add(InitBlocks.blockBlackLotus);
this.add(InitBlocks.blockBookletStand); this.add(InitBlocks.blockBookletStand);
this.add(InitItems.itemPlayerProbe);
this.add(InitItems.itemColorLens); this.add(InitItems.itemColorLens);
this.add(InitItems.itemExplosionLens); this.add(InitItems.itemExplosionLens);
this.add(InitItems.itemDamageLens); this.add(InitItems.itemDamageLens);

View file

@ -18,28 +18,32 @@ import java.util.UUID;
public final class PlayerData{ public final class PlayerData{
public static PlayerSave getDataFromPlayer(EntityPlayer player){ public static PlayerSave getDataFromPlayer(UUID id){
ArrayList<PlayerSave> data = WorldData.PLAYER_SAVE_DATA; ArrayList<PlayerSave> data = WorldData.PLAYER_SAVE_DATA;
//Get Data from existing data //Get Data from existing data
for(PlayerSave save : data){ for(PlayerSave save : data){
if(save.thePlayerUUID.equals(player.getUniqueID())){ if(save.theId != null && save.theId.equals(id)){
return save; return save;
} }
} }
//Add Data if none is existant //Add Data if none is existant
PlayerSave aSave = new PlayerSave(player.getUniqueID(), new NBTTagCompound()); PlayerSave aSave = new PlayerSave(id, new NBTTagCompound());
data.add(aSave); data.add(aSave);
return aSave; return aSave;
} }
public static PlayerSave getDataFromPlayer(EntityPlayer player){
return getDataFromPlayer(player.getUniqueID());
}
public static class PlayerSave{ public static class PlayerSave{
public final UUID thePlayerUUID; public final UUID theId;
public NBTTagCompound theCompound; public NBTTagCompound theCompound;
public PlayerSave(UUID theUUID, NBTTagCompound theCompound){ public PlayerSave(UUID theId, NBTTagCompound theCompound){
this.thePlayerUUID = theUUID; this.theId = theId;
this.theCompound = theCompound; this.theCompound = theCompound;
} }
@ -51,8 +55,8 @@ public final class PlayerData{
public NBTTagCompound toNBT(){ public NBTTagCompound toNBT(){
NBTTagCompound compound = new NBTTagCompound(); NBTTagCompound compound = new NBTTagCompound();
compound.setLong("LeastSignificant", this.thePlayerUUID.getLeastSignificantBits()); compound.setLong("LeastSignificant", this.theId.getLeastSignificantBits());
compound.setLong("MostSignificant", this.thePlayerUUID.getMostSignificantBits()); compound.setLong("MostSignificant", this.theId.getMostSignificantBits());
compound.setTag("Tag", this.theCompound); compound.setTag("Tag", this.theCompound);
@ -60,4 +64,5 @@ public final class PlayerData{
} }
} }
} }

View file

@ -44,6 +44,18 @@ public class CommonEvents{
MinecraftForge.EVENT_BUS.register(this); MinecraftForge.EVENT_BUS.register(this);
} }
public static void checkAchievements(ItemStack gotten, EntityPlayer player, InitAchievements.Type type){
for(TheAchievements ach : TheAchievements.values()){
if(ach.type == type){
if(gotten != null && ach.chieve.theItemStack != null && gotten.getItem() == ach.chieve.theItemStack.getItem()){
if(gotten.getItemDamage() == ach.chieve.theItemStack.getItemDamage()){
player.addStat(ach.chieve, 1);
}
}
}
}
}
@SubscribeEvent @SubscribeEvent
public void livingDeathEvent(LivingDeathEvent event){ public void livingDeathEvent(LivingDeathEvent event){
if(event.getEntityLiving().worldObj != null && !event.getEntityLiving().worldObj.isRemote && event.getEntityLiving() instanceof EntityPlayer){ if(event.getEntityLiving().worldObj != null && !event.getEntityLiving().worldObj.isRemote && event.getEntityLiving() instanceof EntityPlayer){
@ -80,24 +92,20 @@ public class CommonEvents{
} }
@SubscribeEvent @SubscribeEvent
public void onLogInEvent(EntityJoinWorldEvent event){ public void onLogInEvent(PlayerEvent.PlayerLoggedInEvent event){
if(!event.getEntity().worldObj.isRemote && event.getEntity() instanceof EntityPlayerMP){ if(!event.player.worldObj.isRemote && event.player instanceof EntityPlayerMP){
EntityPlayerMP player = (EntityPlayerMP)event.getEntity(); EntityPlayerMP player = (EntityPlayerMP)event.player;
PlayerData.PlayerSave data = PlayerData.getDataFromPlayer(player); PlayerData.PlayerSave data = PlayerData.getDataFromPlayer(player);
if(!data.theCompound.hasNoTags()){ if(!data.theCompound.hasNoTags()){
PacketHandler.theNetwork.sendTo(new PacketServerToClient(data.theCompound, PacketHandler.PLAYER_DATA_TO_CLIENT_HANDLER), player); NBTTagCompound compound = new NBTTagCompound();
compound.setUniqueId("UUID", player.getUniqueID());
compound.setTag("Data", data.theCompound);
compound.setBoolean("Log", true);
PacketHandler.theNetwork.sendTo(new PacketServerToClient(compound, PacketHandler.PLAYER_DATA_TO_CLIENT_HANDLER), player);
ModUtil.LOGGER.info("Sending Player Data to player "+player.getName()+" with UUID "+player.getUniqueID()+" with info "+data.theCompound+".");
} }
} else{
} ModUtil.LOGGER.info("Not sending Player Data to player "+player.getName()+" with UUID "+player.getUniqueID()+" because he doesn't have any.");
public static void checkAchievements(ItemStack gotten, EntityPlayer player, InitAchievements.Type type){
for(TheAchievements ach : TheAchievements.values()){
if(ach.type == type){
if(gotten != null && ach.chieve.theItemStack != null && gotten.getItem() == ach.chieve.theItemStack.getItem()){
if(gotten.getItemDamage() == ach.chieve.theItemStack.getItemDamage()){
player.addStat(ach.chieve, 1);
}
}
} }
} }
} }

View file

@ -12,10 +12,6 @@ package de.ellpeck.actuallyadditions.mod.gen;
import net.minecraft.block.state.IBlockState; import net.minecraft.block.state.IBlockState;
import net.minecraft.init.Blocks; import net.minecraft.init.Blocks;
import net.minecraft.init.Items;
import net.minecraft.item.EnumDyeColor;
import net.minecraft.item.ItemDye;
import net.minecraft.item.ItemStack;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World; import net.minecraft.world.World;
import net.minecraft.world.gen.feature.*; import net.minecraft.world.gen.feature.*;

View file

@ -13,6 +13,7 @@ package de.ellpeck.actuallyadditions.mod.inventory.gui;
import de.ellpeck.actuallyadditions.mod.inventory.ContainerCrafter; import de.ellpeck.actuallyadditions.mod.inventory.ContainerCrafter;
import de.ellpeck.actuallyadditions.mod.util.AssetUtil; import de.ellpeck.actuallyadditions.mod.util.AssetUtil;
import de.ellpeck.actuallyadditions.mod.util.ModUtil; import de.ellpeck.actuallyadditions.mod.util.ModUtil;
import de.ellpeck.actuallyadditions.mod.util.StringUtil;
import net.minecraft.client.gui.inventory.GuiContainer; import net.minecraft.client.gui.inventory.GuiContainer;
import net.minecraft.client.renderer.GlStateManager; import net.minecraft.client.renderer.GlStateManager;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayer;
@ -34,7 +35,7 @@ public class GuiCrafter extends GuiContainer{
@Override @Override
public void drawGuiContainerForegroundLayer(int x, int y){ public void drawGuiContainerForegroundLayer(int x, int y){
AssetUtil.displayNameString(this.fontRendererObj, this.xSize, -10, "container."+ModUtil.MOD_ID+".crafting"); AssetUtil.displayNameString(this.fontRendererObj, this.xSize, -10, StringUtil.localize("container."+ModUtil.MOD_ID+".crafting.name"));
} }
@Override @Override

View file

@ -13,6 +13,7 @@ package de.ellpeck.actuallyadditions.mod.inventory.gui;
import de.ellpeck.actuallyadditions.mod.inventory.ContainerDrill; import de.ellpeck.actuallyadditions.mod.inventory.ContainerDrill;
import de.ellpeck.actuallyadditions.mod.util.AssetUtil; import de.ellpeck.actuallyadditions.mod.util.AssetUtil;
import de.ellpeck.actuallyadditions.mod.util.ModUtil; import de.ellpeck.actuallyadditions.mod.util.ModUtil;
import de.ellpeck.actuallyadditions.mod.util.StringUtil;
import net.minecraft.client.gui.inventory.GuiContainer; import net.minecraft.client.gui.inventory.GuiContainer;
import net.minecraft.client.renderer.GlStateManager; import net.minecraft.client.renderer.GlStateManager;
import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.entity.player.InventoryPlayer;
@ -33,7 +34,7 @@ public class GuiDrill extends GuiContainer{
@Override @Override
public void drawGuiContainerForegroundLayer(int x, int y){ public void drawGuiContainerForegroundLayer(int x, int y){
AssetUtil.displayNameString(this.fontRendererObj, this.xSize, -10, "container."+ModUtil.MOD_ID+".drill"); AssetUtil.displayNameString(this.fontRendererObj, this.xSize, -10, StringUtil.localize("container."+ModUtil.MOD_ID+".drill.name"));
} }
@Override @Override

View file

@ -13,6 +13,7 @@ package de.ellpeck.actuallyadditions.mod.inventory.gui;
import de.ellpeck.actuallyadditions.mod.inventory.ContainerFilter; import de.ellpeck.actuallyadditions.mod.inventory.ContainerFilter;
import de.ellpeck.actuallyadditions.mod.util.AssetUtil; import de.ellpeck.actuallyadditions.mod.util.AssetUtil;
import de.ellpeck.actuallyadditions.mod.util.ModUtil; import de.ellpeck.actuallyadditions.mod.util.ModUtil;
import de.ellpeck.actuallyadditions.mod.util.StringUtil;
import net.minecraft.client.gui.inventory.GuiContainer; import net.minecraft.client.gui.inventory.GuiContainer;
import net.minecraft.client.renderer.GlStateManager; import net.minecraft.client.renderer.GlStateManager;
import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.entity.player.InventoryPlayer;
@ -33,7 +34,7 @@ public class GuiFilter extends GuiContainer{
@Override @Override
public void drawGuiContainerForegroundLayer(int x, int y){ public void drawGuiContainerForegroundLayer(int x, int y){
AssetUtil.displayNameString(this.fontRendererObj, this.xSize, -10, "container."+ModUtil.MOD_ID+".filter"); AssetUtil.displayNameString(this.fontRendererObj, this.xSize, -10, StringUtil.localize("container."+ModUtil.MOD_ID+".filter.name"));
} }
@Override @Override

View file

@ -62,14 +62,16 @@ public class GuiGiantChest extends GuiContainer{
@Override @Override
protected void actionPerformed(GuiButton button) throws IOException{ protected void actionPerformed(GuiButton button) throws IOException{
NBTTagCompound compound = new NBTTagCompound(); if(button.id >= 0 && button.id < 3){
compound.setInteger("X", this.chest.getPos().getX()); NBTTagCompound compound = new NBTTagCompound();
compound.setInteger("Y", this.chest.getPos().getY()); compound.setInteger("X", this.chest.getPos().getX());
compound.setInteger("Z", this.chest.getPos().getZ()); compound.setInteger("Y", this.chest.getPos().getY());
compound.setInteger("PlayerID", Minecraft.getMinecraft().thePlayer.getEntityId()); compound.setInteger("Z", this.chest.getPos().getZ());
compound.setInteger("WorldID", this.chest.getWorld().provider.getDimension()); compound.setInteger("PlayerID", Minecraft.getMinecraft().thePlayer.getEntityId());
compound.setInteger("ButtonID", button.id); compound.setInteger("WorldID", this.chest.getWorld().provider.getDimension());
PacketHandler.theNetwork.sendToServer(new PacketClientToServer(compound, PacketHandler.GUI_BUTTON_TO_TILE_HANDLER)); compound.setInteger("ButtonID", button.id);
PacketHandler.theNetwork.sendToServer(new PacketClientToServer(compound, PacketHandler.GUI_BUTTON_TO_TILE_HANDLER));
}
} }
@Override @Override

View file

@ -207,10 +207,12 @@ public final class InitItems{
public static Item itemWaterBowl; public static Item itemWaterBowl;
public static Item itemFilter; public static Item itemFilter;
public static Item itemPlayerProbe;
public static void init(){ public static void init(){
ModUtil.LOGGER.info("Initializing Items..."); ModUtil.LOGGER.info("Initializing Items...");
itemPlayerProbe = new ItemPlayerProbe("itemPlayerProbe");
itemFilter = new ItemFilter("itemFilter"); itemFilter = new ItemFilter("itemFilter");
itemWaterBowl = new ItemWaterBowl("itemWaterBowl"); itemWaterBowl = new ItemWaterBowl("itemWaterBowl");
itemSpawnerChanger = new ItemSpawnerChanger("itemSpawnerChanger"); itemSpawnerChanger = new ItemSpawnerChanger("itemSpawnerChanger");

View file

@ -20,6 +20,7 @@ import net.minecraft.item.EnumRarity;
import net.minecraft.item.Item; import net.minecraft.item.Item;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import java.util.Collections;
import java.util.Set; import java.util.Set;
public class ItemAxeAA extends ItemToolAA{ public class ItemAxeAA extends ItemToolAA{
@ -39,4 +40,9 @@ public class ItemAxeAA extends ItemToolAA{
Material material = state.getMaterial(); Material material = state.getMaterial();
return material != Material.WOOD && material != Material.PLANTS && material != Material.VINE ? super.getStrVsBlock(stack, state) : this.efficiencyOnProperMaterial; return material != Material.WOOD && material != Material.PLANTS && material != Material.VINE ? super.getStrVsBlock(stack, state) : this.efficiencyOnProperMaterial;
} }
@Override
public Set<String> getToolClasses(ItemStack stack){
return Collections.singleton("axe");
}
} }

View file

@ -98,7 +98,7 @@ public class ItemBooklet extends ItemBase implements IHudDisplay{
@Override @Override
public void displayHud(Minecraft minecraft, EntityPlayer player, ItemStack stack, RayTraceResult posHit, Profiler profiler, ScaledResolution resolution){ public void displayHud(Minecraft minecraft, EntityPlayer player, ItemStack stack, RayTraceResult posHit, Profiler profiler, ScaledResolution resolution){
if(posHit != null){ if(posHit != null && posHit.getBlockPos() != null){
IBlockState state = minecraft.theWorld.getBlockState(posHit.getBlockPos()); IBlockState state = minecraft.theWorld.getBlockState(posHit.getBlockPos());
Block block = state.getBlock(); Block block = state.getBlock();
if(block != null && !block.isAir(minecraft.theWorld.getBlockState(posHit.getBlockPos()), minecraft.theWorld, posHit.getBlockPos())){ if(block != null && !block.isAir(minecraft.theWorld.getBlockState(posHit.getBlockPos()), minecraft.theWorld, posHit.getBlockPos())){

View file

@ -54,8 +54,8 @@ import java.util.Set;
public class ItemDrill extends ItemEnergy{ public class ItemDrill extends ItemEnergy{
private static final int ENERGY_USE = 100;
public static final int HARVEST_LEVEL = 4; public static final int HARVEST_LEVEL = 4;
private static final int ENERGY_USE = 100;
public ItemDrill(String name){ public ItemDrill(String name){
super(500000, 5000, name); super(500000, 5000, name);
@ -268,9 +268,8 @@ public class ItemDrill extends ItemEnergy{
@Override @Override
public boolean canHarvestBlock(IBlockState state, ItemStack stack){ public boolean canHarvestBlock(IBlockState state, ItemStack stack){
int harvestLevel = this.getHarvestLevel(stack, "");
Block block = state.getBlock(); Block block = state.getBlock();
return this.getEnergyStored(stack) >= this.getEnergyUsePerBlock(stack) && (this.hasExtraWhitelist(block) || block.getMaterial(state).isToolNotRequired() || (block == Blocks.SNOW_LAYER || block == Blocks.SNOW || (block == Blocks.OBSIDIAN ? harvestLevel >= 3 : (block != Blocks.DIAMOND_BLOCK && block != Blocks.DIAMOND_ORE ? (block != Blocks.EMERALD_ORE && block != Blocks.EMERALD_BLOCK ? (block != Blocks.GOLD_BLOCK && block != Blocks.GOLD_ORE ? (block != Blocks.IRON_BLOCK && block != Blocks.IRON_ORE ? (block != Blocks.LAPIS_BLOCK && block != Blocks.LAPIS_ORE ? (block != Blocks.REDSTONE_ORE && block != Blocks.LIT_REDSTONE_ORE ? (block.getMaterial(state) == Material.ROCK || (block.getMaterial(state) == Material.IRON || block.getMaterial(state) == Material.ANVIL)) : harvestLevel >= 2) : harvestLevel >= 1) : harvestLevel >= 1) : harvestLevel >= 2) : harvestLevel >= 2) : harvestLevel >= 2)))); return this.getEnergyStored(stack) >= this.getEnergyUsePerBlock(stack) && (this.hasExtraWhitelist(block) || block.getMaterial(state).isToolNotRequired() || (block == Blocks.SNOW_LAYER || block == Blocks.SNOW || (block == Blocks.OBSIDIAN ? HARVEST_LEVEL >= 3 : (block != Blocks.DIAMOND_BLOCK && block != Blocks.DIAMOND_ORE ? (block != Blocks.EMERALD_ORE && block != Blocks.EMERALD_BLOCK ? (block != Blocks.GOLD_BLOCK && block != Blocks.GOLD_ORE ? (block != Blocks.IRON_BLOCK && block != Blocks.IRON_ORE ? (block != Blocks.LAPIS_BLOCK && block != Blocks.LAPIS_ORE ? (block != Blocks.REDSTONE_ORE && block != Blocks.LIT_REDSTONE_ORE ? (block.getMaterial(state) == Material.ROCK || (block.getMaterial(state) == Material.IRON || block.getMaterial(state) == Material.ANVIL)) : HARVEST_LEVEL >= 2) : HARVEST_LEVEL >= 1) : HARVEST_LEVEL >= 1) : HARVEST_LEVEL >= 2) : HARVEST_LEVEL >= 2) : HARVEST_LEVEL >= 2))));
} }
@Override @Override

View file

@ -23,6 +23,7 @@ import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.item.EnumRarity; import net.minecraft.item.EnumRarity;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.ActionResult; import net.minecraft.util.ActionResult;
import net.minecraft.util.EnumActionResult; import net.minecraft.util.EnumActionResult;
@ -93,7 +94,10 @@ public class ItemLaserWrench extends ItemBase{
save.theCompound.setInteger("LaserWrenchMode", currMode); save.theCompound.setInteger("LaserWrenchMode", currMode);
if(player instanceof EntityPlayerMP){ if(player instanceof EntityPlayerMP){
PacketHandler.theNetwork.sendTo(new PacketServerToClient(save.theCompound, PacketHandler.PLAYER_DATA_TO_CLIENT_HANDLER), (EntityPlayerMP)player); NBTTagCompound compound = new NBTTagCompound();
compound.setUniqueId("UUID", player.getUniqueID());
compound.setTag("Data", save.theCompound);
PacketHandler.theNetwork.sendTo(new PacketServerToClient(compound, PacketHandler.PLAYER_DATA_TO_CLIENT_HANDLER), (EntityPlayerMP)player);
} }
player.addChatComponentMessage(new TextComponentString("Mode changed to "+WrenchMode.values()[currMode].name+"!")); player.addChatComponentMessage(new TextComponentString("Mode changed to "+WrenchMode.values()[currMode].name+"!"));

View file

@ -20,6 +20,7 @@ import net.minecraft.item.EnumRarity;
import net.minecraft.item.Item; import net.minecraft.item.Item;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import java.util.Collections;
import java.util.Set; import java.util.Set;
public class ItemPickaxeAA extends ItemToolAA{ public class ItemPickaxeAA extends ItemToolAA{
@ -80,4 +81,9 @@ public class ItemPickaxeAA extends ItemToolAA{
Material material = state.getMaterial(); Material material = state.getMaterial();
return material != Material.IRON && material != Material.ANVIL && material != Material.ROCK ? super.getStrVsBlock(stack, state) : this.efficiencyOnProperMaterial; return material != Material.IRON && material != Material.ANVIL && material != Material.ROCK ? super.getStrVsBlock(stack, state) : this.efficiencyOnProperMaterial;
} }
@Override
public Set<String> getToolClasses(ItemStack stack){
return Collections.singleton("pickaxe");
}
} }

View file

@ -0,0 +1,124 @@
/*
* This file ("ItemPlayerProbe.java") is part of the Actually Additions mod for Minecraft.
* It is created and owned by Ellpeck and distributed
* under the Actually Additions License to be found at
* http://ellpeck.de/actaddlicense
* View the source code at https://github.com/Ellpeck/ActuallyAdditions
*
* © 2015-2016 Ellpeck
*/
package de.ellpeck.actuallyadditions.mod.items;
import de.ellpeck.actuallyadditions.mod.items.base.ItemBase;
import de.ellpeck.actuallyadditions.mod.tile.TileEntityPlayerInterface;
import de.ellpeck.actuallyadditions.mod.util.ModUtil;
import de.ellpeck.actuallyadditions.mod.util.StringUtil;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.EnumActionResult;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.EnumHand;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.text.TextComponentString;
import net.minecraft.util.text.TextComponentTranslation;
import net.minecraft.world.World;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import java.util.List;
import java.util.UUID;
public class ItemPlayerProbe extends ItemBase{
public ItemPlayerProbe(String name){
super(name);
this.setMaxStackSize(1);
}
@Override
public void onUpdate(ItemStack stack, World world, Entity entity, int itemSlot, boolean isSelected){
if(!world.isRemote){
if(stack.hasTagCompound()){
NBTTagCompound compound = stack.getTagCompound();
if(compound.hasKey("UUIDMost")){
UUID id = compound.getUniqueId("UUID");
EntityPlayer player = world.getPlayerEntityByUUID(id);
if(player != null){
if(player.isSneaking()){
stack.setTagCompound(new NBTTagCompound());
entity.addChatMessage(new TextComponentTranslation("tooltip."+ModUtil.MOD_ID+".playerProbe.disconnect.1"));
player.addChatMessage(new TextComponentTranslation("tooltip."+ModUtil.MOD_ID+".playerProbe.notice"));
}
}
else{
stack.setTagCompound(new NBTTagCompound());
entity.addChatMessage(new TextComponentTranslation("tooltip."+ModUtil.MOD_ID+".playerProbe.disconnect.2"));
}
}
}
}
}
@Override
public EnumActionResult onItemUse(ItemStack stack, EntityPlayer player, World world, BlockPos pos, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ){
TileEntity tile = world.getTileEntity(pos);
if(tile instanceof TileEntityPlayerInterface){
if(stack.hasTagCompound()){
NBTTagCompound compound = stack.getTagCompound();
if(compound.hasKey("UUIDMost")){
if(!world.isRemote){
TileEntityPlayerInterface face = (TileEntityPlayerInterface)tile;
face.connectedPlayer = compound.getUniqueId("UUID");
face.playerName = compound.getString("Name");
face.markDirty();
face.sendUpdate();
stack.setTagCompound(new NBTTagCompound());
}
return EnumActionResult.SUCCESS;
}
}
}
return EnumActionResult.FAIL;
}
@Override
public boolean itemInteractionForEntity(ItemStack aStack, EntityPlayer player, EntityLivingBase entity, EnumHand hand){
if(!player.worldObj.isRemote){
ItemStack stack = player.getHeldItemMainhand();
if(stack != null && stack.getItem() == this){
if(entity instanceof EntityPlayer){
EntityPlayer playerHit = (EntityPlayer)entity;
if(!playerHit.isSneaking()){
if(!stack.hasTagCompound()){
stack.setTagCompound(new NBTTagCompound());
}
NBTTagCompound compound = stack.getTagCompound();
compound.setString("Name", playerHit.getName());
compound.setUniqueId("UUID", playerHit.getUniqueID());
return true;
}
}
}
}
return false;
}
@Override
@SideOnly(Side.CLIENT)
public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean isHeld){
if(stack.hasTagCompound()){
String name = stack.getTagCompound().getString("Name");
if(name != null){
list.add(StringUtil.localize("tooltip."+ModUtil.MOD_ID+".playerProbe.probing")+": "+name);
}
}
}
}

View file

@ -26,6 +26,7 @@ import net.minecraft.util.EnumHand;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World; import net.minecraft.world.World;
import java.util.Collections;
import java.util.Set; import java.util.Set;
public class ItemShovelAA extends ItemToolAA{ public class ItemShovelAA extends ItemToolAA{
@ -51,4 +52,9 @@ public class ItemShovelAA extends ItemToolAA{
public EnumActionResult onItemUse(ItemStack stack, EntityPlayer playerIn, World worldIn, BlockPos pos, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ){ public EnumActionResult onItemUse(ItemStack stack, EntityPlayer playerIn, World worldIn, BlockPos pos, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ){
return Items.IRON_SHOVEL.onItemUse(stack, playerIn, worldIn, pos, hand, facing, hitX, hitY, hitZ); return Items.IRON_SHOVEL.onItemUse(stack, playerIn, worldIn, pos, hand, facing, hitX, hitY, hitZ);
} }
@Override
public Set<String> getToolClasses(ItemStack stack){
return Collections.singleton("shovel");
}
} }

View file

@ -15,9 +15,7 @@ import de.ellpeck.actuallyadditions.mod.items.base.ItemBase;
import de.ellpeck.actuallyadditions.mod.util.Util; import de.ellpeck.actuallyadditions.mod.util.Util;
import net.minecraft.entity.EntityCreature; import net.minecraft.entity.EntityCreature;
import net.minecraft.entity.item.EntityXPOrb; import net.minecraft.entity.item.EntityXPOrb;
import net.minecraft.entity.monster.EntitySpider;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Blocks;
import net.minecraft.item.EnumRarity; import net.minecraft.item.EnumRarity;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.util.ActionResult; import net.minecraft.util.ActionResult;
@ -40,11 +38,13 @@ public class ItemSolidifiedExperience extends ItemBase{
@SubscribeEvent @SubscribeEvent
public void onEntityDropEvent(LivingDropsEvent event){ public void onEntityDropEvent(LivingDropsEvent event){
if(event.getEntityLiving().worldObj != null && !event.getEntityLiving().worldObj.isRemote && event.getSource().getEntity() instanceof EntityPlayer){ if(ConfigBoolValues.DO_XP_DROPS.isEnabled()){
//Drop Solidified XP if(event.getEntityLiving().worldObj != null && !event.getEntityLiving().worldObj.isRemote && event.getSource().getEntity() instanceof EntityPlayer){
if(event.getEntityLiving() instanceof EntityCreature){ //Drop Solidified XP
if(Util.RANDOM.nextInt(10) <= event.getLootingLevel()*2){ if(event.getEntityLiving() instanceof EntityCreature){
event.getEntityLiving().entityDropItem(new ItemStack(InitItems.itemSolidifiedExperience, Util.RANDOM.nextInt(2+event.getLootingLevel())+1), 0); if(Util.RANDOM.nextInt(10) <= event.getLootingLevel()*2){
event.getEntityLiving().entityDropItem(new ItemStack(InitItems.itemSolidifiedExperience, Util.RANDOM.nextInt(2+event.getLootingLevel())+1), 0);
}
} }
} }
} }

View file

@ -15,7 +15,6 @@ import de.ellpeck.actuallyadditions.mod.items.base.ItemBase;
import de.ellpeck.actuallyadditions.mod.items.metalists.TheMiscItems; import de.ellpeck.actuallyadditions.mod.items.metalists.TheMiscItems;
import de.ellpeck.actuallyadditions.mod.util.ModUtil; import de.ellpeck.actuallyadditions.mod.util.ModUtil;
import de.ellpeck.actuallyadditions.mod.util.StringUtil; import de.ellpeck.actuallyadditions.mod.util.StringUtil;
import de.ellpeck.actuallyadditions.mod.util.Util;
import net.minecraft.block.state.IBlockState; import net.minecraft.block.state.IBlockState;
import net.minecraft.entity.EntityList; import net.minecraft.entity.EntityList;
import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.EntityLivingBase;
@ -31,6 +30,7 @@ import net.minecraft.util.EnumFacing;
import net.minecraft.util.EnumHand; import net.minecraft.util.EnumHand;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.minecraft.util.text.TextFormatting; import net.minecraft.util.text.TextFormatting;
import net.minecraft.world.BossInfo;
import net.minecraft.world.World; import net.minecraft.world.World;
import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.event.world.BlockEvent; import net.minecraftforge.event.world.BlockEvent;
@ -107,7 +107,7 @@ public class ItemSpawnerChanger extends ItemBase{
stack.setTagCompound(new NBTTagCompound()); stack.setTagCompound(new NBTTagCompound());
} }
if(!(entity instanceof EntityPlayer)){ if(!(entity instanceof EntityPlayer) && entity.isNonBoss()){
String entityName = EntityList.getEntityString(entity); String entityName = EntityList.getEntityString(entity);
if(entityName != null && !entityName.isEmpty()){ if(entityName != null && !entityName.isEmpty()){
for(String name : ConfigStringListValues.SPAWNER_CHANGER_BLACKLIST.getValue()){ for(String name : ConfigStringListValues.SPAWNER_CHANGER_BLACKLIST.getValue()){

View file

@ -14,17 +14,13 @@ import de.ellpeck.actuallyadditions.mod.config.values.ConfigBoolValues;
import de.ellpeck.actuallyadditions.mod.items.base.ItemBase; import de.ellpeck.actuallyadditions.mod.items.base.ItemBase;
import de.ellpeck.actuallyadditions.mod.items.metalists.TheMiscItems; import de.ellpeck.actuallyadditions.mod.items.metalists.TheMiscItems;
import de.ellpeck.actuallyadditions.mod.util.Util; import de.ellpeck.actuallyadditions.mod.util.Util;
import net.minecraft.entity.EntityCreature;
import net.minecraft.entity.monster.EntitySpider;
import net.minecraft.entity.passive.EntityBat; import net.minecraft.entity.passive.EntityBat;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Blocks;
import net.minecraft.item.EnumRarity; import net.minecraft.item.EnumRarity;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.event.entity.living.LivingDropsEvent; import net.minecraftforge.event.entity.living.LivingDropsEvent;
import net.minecraftforge.event.entity.living.LivingEvent; import net.minecraftforge.event.entity.living.LivingEvent;
import net.minecraftforge.event.entity.player.PlayerInteractEvent;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import net.minecraftforge.fml.common.gameevent.PlayerEvent; import net.minecraftforge.fml.common.gameevent.PlayerEvent;
@ -51,6 +47,57 @@ public class ItemWingsOfTheBats extends ItemBase{
MinecraftForge.EVENT_BUS.register(this); MinecraftForge.EVENT_BUS.register(this);
} }
/**
* Checks if the Player is winged
*
* @param player The Player
* @return Winged?
*/
public static boolean isPlayerWinged(EntityPlayer player){
return WINGED_PLAYERS.contains(player.getUniqueID()+(player.worldObj.isRemote ? "-Remote" : ""));
}
/**
* Same as above, but Remote Checking is done automatically
*/
public static void removeWingsFromPlayer(EntityPlayer player){
removeWingsFromPlayer(player, player.worldObj.isRemote);
}
/**
* Removes the Player from the List of Players that have Wings
*
* @param player The Player
* @param worldRemote If the World the Player is in is remote
*/
public static void removeWingsFromPlayer(EntityPlayer player, boolean worldRemote){
WINGED_PLAYERS.remove(player.getUniqueID()+(worldRemote ? "-Remote" : ""));
}
/**
* Adds the Player to the List of Players that have Wings
*
* @param player The Player
*/
public static void addWingsToPlayer(EntityPlayer player){
WINGED_PLAYERS.add(player.getUniqueID()+(player.worldObj.isRemote ? "-Remote" : ""));
}
/**
* Checks if the Player has Wings in its Inventory
*
* @param player The Player
* @return The Wings
*/
public static ItemStack getWingItem(EntityPlayer player){
for(int i = 0; i < player.inventory.getSizeInventory(); i++){
if(player.inventory.getStackInSlot(i) != null && player.inventory.getStackInSlot(i).getItem() instanceof ItemWingsOfTheBats){
return player.inventory.getStackInSlot(i);
}
}
return null;
}
@SubscribeEvent @SubscribeEvent
public void onLogOutEvent(PlayerEvent.PlayerLoggedOutEvent event){ public void onLogOutEvent(PlayerEvent.PlayerLoggedOutEvent event){
//Remove Player from Wings' Fly Permission List //Remove Player from Wings' Fly Permission List
@ -104,58 +151,6 @@ public class ItemWingsOfTheBats extends ItemBase{
} }
} }
/**
* Checks if the Player is winged
*
* @param player The Player
* @return Winged?
*/
public static boolean isPlayerWinged(EntityPlayer player){
return WINGED_PLAYERS.contains(player.getUniqueID()+(player.worldObj.isRemote ? "-Remote" : ""));
}
/**
* Same as above, but Remote Checking is done automatically
*/
public static void removeWingsFromPlayer(EntityPlayer player){
removeWingsFromPlayer(player, player.worldObj.isRemote);
}
/**
* Removes the Player from the List of Players that have Wings
*
* @param player The Player
* @param worldRemote If the World the Player is in is remote
*/
public static void removeWingsFromPlayer(EntityPlayer player, boolean worldRemote){
WINGED_PLAYERS.remove(player.getUniqueID()+(worldRemote ? "-Remote" : ""));
}
/**
* Adds the Player to the List of Players that have Wings
*
* @param player The Player
*/
public static void addWingsToPlayer(EntityPlayer player){
WINGED_PLAYERS.add(player.getUniqueID()+(player.worldObj.isRemote ? "-Remote" : ""));
}
/**
* Checks if the Player has Wings in its Inventory
*
* @param player The Player
* @return The Wings
*/
public static ItemStack getWingItem(EntityPlayer player){
for(int i = 0; i < player.inventory.getSizeInventory(); i++){
if(player.inventory.getStackInSlot(i) != null && player.inventory.getStackInSlot(i).getItem() instanceof ItemWingsOfTheBats){
return player.inventory.getStackInSlot(i);
}
}
return null;
}
@Override @Override
public EnumRarity getRarity(ItemStack stack){ public EnumRarity getRarity(ItemStack stack){
return EnumRarity.EPIC; return EnumRarity.EPIC;

View file

@ -15,7 +15,6 @@ import de.ellpeck.actuallyadditions.mod.blocks.base.BlockPlant;
import de.ellpeck.actuallyadditions.mod.util.ItemUtil; import de.ellpeck.actuallyadditions.mod.util.ItemUtil;
import net.minecraft.block.Block; import net.minecraft.block.Block;
import net.minecraft.block.state.IBlockState; import net.minecraft.block.state.IBlockState;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Blocks; import net.minecraft.init.Blocks;
import net.minecraft.item.EnumRarity; import net.minecraft.item.EnumRarity;
import net.minecraft.item.Item; import net.minecraft.item.Item;
@ -23,7 +22,6 @@ import net.minecraft.item.ItemSeedFood;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.minecraft.world.IBlockAccess; import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
public class ItemFoodSeed extends ItemSeedFood{ public class ItemFoodSeed extends ItemSeedFood{

View file

@ -16,6 +16,7 @@ import de.ellpeck.actuallyadditions.mod.util.ModUtil;
import de.ellpeck.actuallyadditions.mod.util.Util; import de.ellpeck.actuallyadditions.mod.util.Util;
import net.minecraft.block.Block; import net.minecraft.block.Block;
import net.minecraft.block.state.IBlockState; import net.minecraft.block.state.IBlockState;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.item.EntityItem;
import net.minecraft.item.Item; import net.minecraft.item.Item;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
@ -37,9 +38,9 @@ public class LensDisruption extends Lens{
ItemStack stack = item.getEntityItem(); ItemStack stack = item.getEntityItem();
if(!item.isDead && stack != null){ if(!item.isDead && stack != null){
if(!stack.hasTagCompound() || !stack.getTagCompound().getBoolean(ModUtil.MOD_ID+"DisruptedAlready")){ if(!stack.hasTagCompound() || !stack.getTagCompound().getBoolean(ModUtil.MOD_ID+"DisruptedAlready")){
ItemStack newStack = null;
while(newStack == null || newStack.getItem() == null){ ItemStack newStack;
do{
if(Util.RANDOM.nextBoolean()){ if(Util.RANDOM.nextBoolean()){
newStack = new ItemStack(Item.REGISTRY.getRandomObject(Util.RANDOM)); newStack = new ItemStack(Item.REGISTRY.getRandomObject(Util.RANDOM));
} }
@ -47,6 +48,8 @@ public class LensDisruption extends Lens{
newStack = new ItemStack(Block.REGISTRY.getRandomObject(Util.RANDOM)); newStack = new ItemStack(Block.REGISTRY.getRandomObject(Util.RANDOM));
} }
} }
while(newStack == null || newStack.getItem() == null);
newStack.stackSize = stack.stackSize; newStack.stackSize = stack.stackSize;
if(!newStack.hasTagCompound()){ if(!newStack.hasTagCompound()){

View file

@ -11,7 +11,6 @@
package de.ellpeck.actuallyadditions.mod.jei.crusher; package de.ellpeck.actuallyadditions.mod.jei.crusher;
import de.ellpeck.actuallyadditions.api.recipe.CrusherRecipe; import de.ellpeck.actuallyadditions.api.recipe.CrusherRecipe;
import de.ellpeck.actuallyadditions.api.recipe.LensConversionRecipe;
import mezz.jei.api.recipe.IRecipeHandler; import mezz.jei.api.recipe.IRecipeHandler;
import mezz.jei.api.recipe.IRecipeWrapper; import mezz.jei.api.recipe.IRecipeWrapper;

View file

@ -10,7 +10,6 @@
package de.ellpeck.actuallyadditions.mod.misc.special; package de.ellpeck.actuallyadditions.mod.misc.special;
import de.ellpeck.actuallyadditions.mod.util.Util;
import net.minecraft.block.Block; import net.minecraft.block.Block;
import net.minecraft.item.Item; import net.minecraft.item.Item;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;

View file

@ -34,6 +34,7 @@ import net.minecraftforge.fml.relauncher.SideOnly;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.UUID;
public final class PacketHandler{ public final class PacketHandler{
@ -98,9 +99,11 @@ public final class PacketHandler{
@Override @Override
@SideOnly(Side.CLIENT) @SideOnly(Side.CLIENT)
public void handleData(NBTTagCompound compound){ public void handleData(NBTTagCompound compound){
EntityPlayer player = Minecraft.getMinecraft().thePlayer; NBTTagCompound data = compound.getCompoundTag("Data");
if(player != null){ UUID id = compound.getUniqueId("UUID");
PlayerData.getDataFromPlayer(player).theCompound = compound; PlayerData.getDataFromPlayer(id).theCompound = data;
if(compound.getBoolean("Log")){
ModUtil.LOGGER.info("Receiving Player Data for current player with UUID "+id+" with info "+data+".");
} }
} }
}; };
@ -133,7 +136,10 @@ public final class PacketHandler{
PlayerData.PlayerSave playerData = PlayerData.getDataFromPlayer(player); PlayerData.PlayerSave playerData = PlayerData.getDataFromPlayer(player);
playerData.theCompound.merge(data); playerData.theCompound.merge(data);
if(player instanceof EntityPlayerMP){ if(player instanceof EntityPlayerMP){
PacketHandler.theNetwork.sendTo(new PacketServerToClient(playerData.theCompound, PLAYER_DATA_TO_CLIENT_HANDLER), (EntityPlayerMP)player); NBTTagCompound tag = new NBTTagCompound();
tag.setUniqueId("UUID", player.getUniqueID());
tag.setTag("Data", playerData.theCompound);
PacketHandler.theNetwork.sendTo(new PacketServerToClient(tag, PLAYER_DATA_TO_CLIENT_HANDLER), (EntityPlayerMP)player);
} }
} }
} }

View file

@ -16,7 +16,6 @@ import de.ellpeck.actuallyadditions.mod.config.values.ConfigIntValues;
import de.ellpeck.actuallyadditions.mod.network.PacketHandler; import de.ellpeck.actuallyadditions.mod.network.PacketHandler;
import de.ellpeck.actuallyadditions.mod.network.PacketServerToClient; import de.ellpeck.actuallyadditions.mod.network.PacketServerToClient;
import de.ellpeck.actuallyadditions.mod.util.ModUtil; import de.ellpeck.actuallyadditions.mod.util.ModUtil;
import de.ellpeck.actuallyadditions.mod.util.StringUtil;
import de.ellpeck.actuallyadditions.mod.util.WorldUtil; import de.ellpeck.actuallyadditions.mod.util.WorldUtil;
import de.ellpeck.actuallyadditions.mod.util.compat.TeslaUtil; import de.ellpeck.actuallyadditions.mod.util.compat.TeslaUtil;
import net.minecraft.block.state.IBlockState; import net.minecraft.block.state.IBlockState;
@ -41,10 +40,10 @@ import net.minecraftforge.fml.common.registry.GameRegistry;
public abstract class TileEntityBase extends TileEntity implements ITickable{ public abstract class TileEntityBase extends TileEntity implements ITickable{
public static boolean teslaLoaded; public static boolean teslaLoaded;
public final String name;
public boolean isRedstonePowered; public boolean isRedstonePowered;
public boolean isPulseMode; public boolean isPulseMode;
protected int ticksElapsed; protected int ticksElapsed;
public final String name;
public TileEntityBase(String name){ public TileEntityBase(String name){
this.name = name; this.name = name;
@ -99,6 +98,8 @@ public abstract class TileEntityBase extends TileEntity implements ITickable{
register(TileEntityPhantomRedstoneface.class, "PhantomRedstoneface"); register(TileEntityPhantomRedstoneface.class, "PhantomRedstoneface");
register(TileEntityLaserRelayItem.class, "LaserRelayItem"); register(TileEntityLaserRelayItem.class, "LaserRelayItem");
register(TileEntityLaserRelayEnergy.class, "LaserRelay"); register(TileEntityLaserRelayEnergy.class, "LaserRelay");
register(TileEntityLaserRelayEnergyAdvanced.class);
register(TileEntityLaserRelayEnergyExtreme.class);
register(TileEntityLaserRelayItemWhitelist.class, "LaserRelayItemWhitelist"); register(TileEntityLaserRelayItemWhitelist.class, "LaserRelayItemWhitelist");
register(TileEntityItemViewer.class, "ItemViewer"); register(TileEntityItemViewer.class, "ItemViewer");
register(TileEntityBookletStand.class, "BookletStand"); register(TileEntityBookletStand.class, "BookletStand");
@ -118,14 +119,24 @@ public abstract class TileEntityBase extends TileEntity implements ITickable{
try{ try{
//This is hacky and dirty but it works so whatever //This is hacky and dirty but it works so whatever
String name = ModUtil.MOD_ID+":"+tileClass.newInstance().name; String name = ModUtil.MOD_ID+":"+tileClass.newInstance().name;
String oldName = ModUtil.MOD_ID+":tileEntity"+legacyName;
GameRegistry.registerTileEntityWithAlternatives(tileClass, name, oldName); if(legacyName != null && !legacyName.isEmpty()){
String oldName = ModUtil.MOD_ID+":tileEntity"+legacyName;
GameRegistry.registerTileEntityWithAlternatives(tileClass, name, oldName);
}
else{
GameRegistry.registerTileEntity(tileClass, name);
}
} }
catch(Exception e){ catch(Exception e){
ModUtil.LOGGER.fatal("Registering a TileEntity failed!", e); ModUtil.LOGGER.fatal("Registering a TileEntity failed!", e);
} }
} }
private static void register(Class<? extends TileEntityBase> tileClass){
register(tileClass, null);
}
@Override @Override
public void readFromNBT(NBTTagCompound compound){ public void readFromNBT(NBTTagCompound compound){
super.readFromNBT(compound); super.readFromNBT(compound);

View file

@ -13,7 +13,6 @@ package de.ellpeck.actuallyadditions.mod.tile;
import de.ellpeck.actuallyadditions.mod.util.Util; import de.ellpeck.actuallyadditions.mod.util.Util;
import de.ellpeck.actuallyadditions.mod.util.WorldUtil; import de.ellpeck.actuallyadditions.mod.util.WorldUtil;
import net.minecraft.block.material.Material; import net.minecraft.block.material.Material;
import net.minecraft.block.state.IBlockState;
import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.item.EntityItem;
import net.minecraft.inventory.IInventory; import net.minecraft.inventory.IInventory;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;

View file

@ -27,6 +27,7 @@ import net.minecraftforge.fml.relauncher.SideOnly;
public class TileEntityFluidCollector extends TileEntityBase implements net.minecraftforge.fluids.IFluidHandler{ public class TileEntityFluidCollector extends TileEntityBase implements net.minecraftforge.fluids.IFluidHandler{
public boolean isPlacer;
public final FluidTank tank = new FluidTank(8*Util.BUCKET){ public final FluidTank tank = new FluidTank(8*Util.BUCKET){
@Override @Override
public boolean canFill(){ public boolean canFill(){
@ -38,7 +39,6 @@ public class TileEntityFluidCollector extends TileEntityBase implements net.mine
return !TileEntityFluidCollector.this.isPlacer; return !TileEntityFluidCollector.this.isPlacer;
} }
}; };
public boolean isPlacer;
private int lastTankAmount; private int lastTankAmount;
private int currentTime; private int currentTime;

View file

@ -16,8 +16,6 @@ import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList; import net.minecraft.nbt.NBTTagList;
import net.minecraft.util.EnumFacing; import net.minecraft.util.EnumFacing;
import net.minecraft.util.text.ITextComponent;
import net.minecraft.util.text.TextComponentTranslation;
import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.items.CapabilityItemHandler; import net.minecraftforge.items.CapabilityItemHandler;
import net.minecraftforge.items.wrapper.SidedInvWrapper; import net.minecraftforge.items.wrapper.SidedInvWrapper;

View file

@ -77,9 +77,10 @@ public class TileEntityItemRepairer extends TileEntityInventoryBase implements I
public void updateEntity(){ public void updateEntity(){
super.updateEntity(); super.updateEntity();
if(!this.worldObj.isRemote){ if(!this.worldObj.isRemote){
if(this.slots[SLOT_OUTPUT] == null && canBeRepaired(this.slots[SLOT_INPUT])){ ItemStack input = this.slots[SLOT_INPUT];
if(this.slots[SLOT_INPUT].getItemDamage() <= 0){ if(this.slots[SLOT_OUTPUT] == null && canBeRepaired(input)){
this.slots[SLOT_OUTPUT] = this.slots[SLOT_INPUT].copy(); if(input.getItemDamage() <= 0){
this.slots[SLOT_OUTPUT] = input.copy();
this.slots[SLOT_INPUT] = null; this.slots[SLOT_INPUT] = null;
this.nextRepairTick = 0; this.nextRepairTick = 0;
} }
@ -89,7 +90,15 @@ public class TileEntityItemRepairer extends TileEntityInventoryBase implements I
this.storage.extractEnergy(ENERGY_USE, false); this.storage.extractEnergy(ENERGY_USE, false);
if(this.nextRepairTick >= 2){ if(this.nextRepairTick >= 2){
this.nextRepairTick = 0; this.nextRepairTick = 0;
this.slots[SLOT_INPUT].setItemDamage(this.slots[SLOT_INPUT].getItemDamage()-1); input.setItemDamage(input.getItemDamage()-1);
if(input.hasTagCompound()){
//TiCon un-break tools
if("tconstruct".equalsIgnoreCase(input.getItem().getRegistryName().getResourceDomain())){
NBTTagCompound stats = input.getTagCompound().getCompoundTag("Stats");
stats.removeTag("Broken");
}
}
} }
} }
} }

View file

@ -11,9 +11,9 @@
package de.ellpeck.actuallyadditions.mod.tile; package de.ellpeck.actuallyadditions.mod.tile;
import cofh.api.energy.IEnergyReceiver; import cofh.api.energy.IEnergyReceiver;
import de.ellpeck.actuallyadditions.mod.config.values.ConfigBoolValues;
import de.ellpeck.actuallyadditions.mod.config.values.ConfigIntValues; import de.ellpeck.actuallyadditions.mod.config.values.ConfigIntValues;
import de.ellpeck.actuallyadditions.mod.misc.LaserRelayConnectionHandler; import de.ellpeck.actuallyadditions.mod.misc.LaserRelayConnectionHandler;
import de.ellpeck.actuallyadditions.mod.util.WorldUtil;
import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.EnumFacing; import net.minecraft.util.EnumFacing;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
@ -27,8 +27,14 @@ public class TileEntityLaserRelayEnergy extends TileEntityLaserRelay implements
public final Map<EnumFacing, IEnergyReceiver> receiversAround = new HashMap<EnumFacing, IEnergyReceiver>(); public final Map<EnumFacing, IEnergyReceiver> receiversAround = new HashMap<EnumFacing, IEnergyReceiver>();
public static final int CAP = 1000;
public TileEntityLaserRelayEnergy(String name){
super(name, false);
}
public TileEntityLaserRelayEnergy(){ public TileEntityLaserRelayEnergy(){
super("laserRelay", false); this("laserRelay");
} }
@Override @Override
@ -51,7 +57,7 @@ public class TileEntityLaserRelayEnergy extends TileEntityLaserRelay implements
if(maxTransmit > 0){ if(maxTransmit > 0){
LaserRelayConnectionHandler.Network network = LaserRelayConnectionHandler.getNetworkFor(this.pos, this.worldObj); LaserRelayConnectionHandler.Network network = LaserRelayConnectionHandler.getNetworkFor(this.pos, this.worldObj);
if(network != null){ if(network != null){
transmitted = this.transferEnergyToReceiverInNeed(from, network, Math.min(ConfigIntValues.LASER_RELAY_MAX_TRANSFER.getValue(), maxTransmit), simulate); transmitted = this.transferEnergyToReceiverInNeed(from, network, maxTransmit, simulate);
} }
} }
return transmitted; return transmitted;
@ -86,14 +92,17 @@ public class TileEntityLaserRelayEnergy extends TileEntityLaserRelay implements
alreadyChecked.add(relay); alreadyChecked.add(relay);
TileEntity relayTile = this.worldObj.getTileEntity(relay); TileEntity relayTile = this.worldObj.getTileEntity(relay);
if(relayTile instanceof TileEntityLaserRelayEnergy){ if(relayTile instanceof TileEntityLaserRelayEnergy){
for(Map.Entry<EnumFacing, IEnergyReceiver> receiver : ((TileEntityLaserRelayEnergy)relayTile).receiversAround.entrySet()){ TileEntityLaserRelayEnergy theRelay = (TileEntityLaserRelayEnergy)relayTile;
double highestLoss = Math.max(theRelay.getLossPercentage(), this.getLossPercentage());
int lowestCap = Math.min(theRelay.getEnergyCap(), this.getEnergyCap());
for(Map.Entry<EnumFacing, IEnergyReceiver> receiver : theRelay.receiversAround.entrySet()){
if(receiver != null && receiver.getKey() != null && receiver.getValue() != null){ if(receiver != null && receiver.getKey() != null && receiver.getValue() != null){
if(receiver.getKey() != from){ if(receiver.getKey() != from){
if(receiver.getValue().canConnectEnergy(receiver.getKey().getOpposite())){ if(receiver.getValue().canConnectEnergy(receiver.getKey().getOpposite())){
//Transfer the energy (with the energy loss!) //Transfer the energy (with the energy loss!)
int theoreticalReceived = receiver.getValue().receiveEnergy(receiver.getKey().getOpposite(), maxTransfer-transmitted, true); int theoreticalReceived = receiver.getValue().receiveEnergy(receiver.getKey().getOpposite(), Math.min(maxTransfer, lowestCap)-transmitted, true);
//The amount of energy lost during a transfer //The amount of energy lost during a transfer
int deduct = (int)(theoreticalReceived*((double)ConfigIntValues.LASER_RELAY_LOSS.getValue()/100)); int deduct = ConfigBoolValues.LASER_RELAY_LOSS.isEnabled() ? (int)(theoreticalReceived*(highestLoss/100)) : 0;
transmitted += receiver.getValue().receiveEnergy(receiver.getKey().getOpposite(), theoreticalReceived-deduct, simulate); transmitted += receiver.getValue().receiveEnergy(receiver.getKey().getOpposite(), theoreticalReceived-deduct, simulate);
transmitted += deduct; transmitted += deduct;
@ -112,4 +121,12 @@ public class TileEntityLaserRelayEnergy extends TileEntityLaserRelay implements
} }
return transmitted; return transmitted;
} }
public int getEnergyCap(){
return CAP;
}
public double getLossPercentage(){
return 5;
}
} }

View file

@ -0,0 +1,30 @@
/*
* This file ("TileEntityLaserRelayEnergyAdvanced.java") is part of the Actually Additions mod for Minecraft.
* It is created and owned by Ellpeck and distributed
* under the Actually Additions License to be found at
* http://ellpeck.de/actaddlicense
* View the source code at https://github.com/Ellpeck/ActuallyAdditions
*
* © 2015-2016 Ellpeck
*/
package de.ellpeck.actuallyadditions.mod.tile;
public class TileEntityLaserRelayEnergyAdvanced extends TileEntityLaserRelayEnergy{
public static final int CAP = 10000;
public TileEntityLaserRelayEnergyAdvanced(){
super("laserRelayAdvanced");
}
@Override
public int getEnergyCap(){
return CAP;
}
@Override
public double getLossPercentage(){
return 8;
}
}

View file

@ -0,0 +1,30 @@
/*
* This file ("TileEntityLaserRelayEnergyExtreme.java") is part of the Actually Additions mod for Minecraft.
* It is created and owned by Ellpeck and distributed
* under the Actually Additions License to be found at
* http://ellpeck.de/actaddlicense
* View the source code at https://github.com/Ellpeck/ActuallyAdditions
*
* © 2015-2016 Ellpeck
*/
package de.ellpeck.actuallyadditions.mod.tile;
public class TileEntityLaserRelayEnergyExtreme extends TileEntityLaserRelayEnergy{
public static final int CAP = 100000;
public TileEntityLaserRelayEnergyExtreme(){
super("laserRelayExtreme");
}
@Override
public int getEnergyCap(){
return CAP;
}
@Override
public double getLossPercentage(){
return 10;
}
}

View file

@ -36,8 +36,8 @@ public class TileEntityPhantomPlacer extends TileEntityInventoryBase implements
public int currentTime; public int currentTime;
public int range; public int range;
public boolean isBreaker; public boolean isBreaker;
private int oldRange;
public int side; public int side;
private int oldRange;
public TileEntityPhantomPlacer(int slots, String name){ public TileEntityPhantomPlacer(int slots, String name){
super(slots, name); super(slots, name);

View file

@ -23,8 +23,9 @@ import java.util.UUID;
public class TileEntityPlayerInterface extends TileEntityInventoryBase implements IEnergyReceiver, IEnergyDisplay{ public class TileEntityPlayerInterface extends TileEntityInventoryBase implements IEnergyReceiver, IEnergyDisplay{
public static final int DEFAULT_RANGE = 32; public static final int DEFAULT_RANGE = 32;
public UUID connectedPlayer;
private final EnergyStorage storage = new EnergyStorage(30000); private final EnergyStorage storage = new EnergyStorage(30000);
public UUID connectedPlayer;
public String playerName;
private int oldEnergy; private int oldEnergy;
private int range; private int range;
@ -85,6 +86,7 @@ public class TileEntityPlayerInterface extends TileEntityInventoryBase implement
this.storage.writeToNBT(compound); this.storage.writeToNBT(compound);
if(this.connectedPlayer != null && type != NBTType.SAVE_BLOCK){ if(this.connectedPlayer != null && type != NBTType.SAVE_BLOCK){
compound.setUniqueId("Player", this.connectedPlayer); compound.setUniqueId("Player", this.connectedPlayer);
compound.setString("PlayerName", this.playerName);
} }
} }
@ -93,6 +95,7 @@ public class TileEntityPlayerInterface extends TileEntityInventoryBase implement
this.storage.readFromNBT(compound); this.storage.readFromNBT(compound);
if(compound.hasKey("PlayerLeast") && type != NBTType.SAVE_BLOCK){ if(compound.hasKey("PlayerLeast") && type != NBTType.SAVE_BLOCK){
this.connectedPlayer = compound.getUniqueId("Player"); this.connectedPlayer = compound.getUniqueId("Player");
this.playerName = compound.getString("PlayerName");
} }
} }

View file

@ -12,7 +12,6 @@ package de.ellpeck.actuallyadditions.mod.util;
import net.minecraft.item.EnumRarity; import net.minecraft.item.EnumRarity;
import net.minecraft.util.text.TextFormatting; import net.minecraft.util.text.TextFormatting;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.common.util.EnumHelper; import net.minecraftforge.common.util.EnumHelper;
import net.minecraftforge.fluids.Fluid; import net.minecraftforge.fluids.Fluid;
import net.minecraftforge.oredict.OreDictionary; import net.minecraftforge.oredict.OreDictionary;

View file

@ -341,6 +341,7 @@ public final class WorldUtil{
//Cobbled together from Tinkers' Construct (with permission, thanks!) and PlayerInteractionManager code. //Cobbled together from Tinkers' Construct (with permission, thanks!) and PlayerInteractionManager code.
//Breaking blocks is a hideous pain so yea. //Breaking blocks is a hideous pain so yea.
//This doesn't do any additional harvestability checks that the blocks itself don't do!
public static boolean playerHarvestBlock(ItemStack stack, World world, EntityPlayer player, BlockPos pos){ public static boolean playerHarvestBlock(ItemStack stack, World world, EntityPlayer player, BlockPos pos){
if(world.isAirBlock(pos)){ if(world.isAirBlock(pos)){
return false; return false;
@ -349,17 +350,6 @@ public final class WorldUtil{
IBlockState state = world.getBlockState(pos); IBlockState state = world.getBlockState(pos);
Block block = state.getBlock(); Block block = state.getBlock();
boolean effective = false;
for(String type : stack.getItem().getToolClasses(stack)){
if(block.isToolEffective(type, state)){
effective = true;
}
}
if(!effective || !ForgeHooks.canHarvestBlock(block, player, world, pos)){
return false;
}
if(player.capabilities.isCreativeMode){ if(player.capabilities.isCreativeMode){
block.onBlockHarvested(world, pos, state, player); block.onBlockHarvested(world, pos, state, player);
if(block.removedByPlayer(state, world, pos, player, false)){ if(block.removedByPlayer(state, world, pos, player, false)){
@ -367,7 +357,7 @@ public final class WorldUtil{
} }
if(!world.isRemote){ if(!world.isRemote){
world.playEvent(2001, pos, Block.getStateId(state)); world.playEvent(player, 2001, pos, Block.getStateId(state));
if(player instanceof EntityPlayerMP){ if(player instanceof EntityPlayerMP){
((EntityPlayerMP)player).connection.sendPacket(new SPacketBlockChange(world, pos)); ((EntityPlayerMP)player).connection.sendPacket(new SPacketBlockChange(world, pos));
@ -395,7 +385,7 @@ public final class WorldUtil{
block.dropXpOnBlockBreak(world, pos, xp); block.dropXpOnBlockBreak(world, pos, xp);
} }
world.playEvent(2001, pos, Block.getStateId(state)); world.playEvent(player, 2001, pos, Block.getStateId(state));
playerMp.connection.sendPacket(new SPacketBlockChange(world, pos)); playerMp.connection.sendPacket(new SPacketBlockChange(world, pos));
return true; return true;
} }
@ -406,6 +396,7 @@ public final class WorldUtil{
} }
stack.onBlockDestroyed(world, state, pos, player); stack.onBlockDestroyed(world, state, pos, player);
world.playEvent(2001, pos, Block.getStateId(state));
if(stack.stackSize <= 0 && stack == player.getHeldItemMainhand()){ if(stack.stackSize <= 0 && stack == player.getHeldItemMainhand()){
ForgeEventFactory.onPlayerDestroyItem(player, stack, EnumHand.MAIN_HAND); ForgeEventFactory.onPlayerDestroyItem(player, stack, EnumHand.MAIN_HAND);

View file

@ -0,0 +1,19 @@
{
"forge_marker": 1,
"defaults": {
"model": "actuallyadditions:blockLaserRelayAdvanced",
"transform": "forge:default-block"
},
"variants": {
"normal": [{}],
"inventory": [{}],
"meta": {
"0": { "x": 180 },
"1": {},
"2": { "x": 90 },
"3": { "x": 270 },
"4": { "x": 90, "y": 270 },
"5": { "x": 270, "y": 270 }
}
}
}

View file

@ -0,0 +1,19 @@
{
"forge_marker": 1,
"defaults": {
"model": "actuallyadditions:blockLaserRelayExtreme",
"transform": "forge:default-block"
},
"variants": {
"normal": [{}],
"inventory": [{}],
"meta": {
"0": { "x": 180 },
"1": {},
"2": { "x": 90 },
"3": { "x": 270 },
"4": { "x": 90, "y": 270 },
"5": { "x": 270, "y": 270 }
}
}
}

View file

@ -0,0 +1,9 @@
{
"variants": {
"facing=up": { "model": "actuallyadditions:blockTinyTorch" },
"facing=east": { "model": "actuallyadditions:blockTinyTorchWall" },
"facing=south": { "model": "actuallyadditions:blockTinyTorchWall", "y": 90 },
"facing=west": { "model": "actuallyadditions:blockTinyTorchWall", "y": 180 },
"facing=north": { "model": "actuallyadditions:blockTinyTorchWall", "y": 270 }
}
}

View file

@ -84,7 +84,7 @@ container.nei.actuallyadditions.compost.name=Compost
container.nei.actuallyadditions.furnaceDouble.name=Double Furnace container.nei.actuallyadditions.furnaceDouble.name=Double Furnace
container.nei.actuallyadditions.treasureChest.name=Treasure Chest container.nei.actuallyadditions.treasureChest.name=Treasure Chest
container.nei.actuallyadditions.treasureChest.info=Items at container.nei.actuallyadditions.treasureChest.info=Items at
container.nei.actuallyadditions.coffee.name=Coffee Machine container.nei.actuallyadditions.coffee.name=Coffee Maker
container.nei.actuallyadditions.coffee.special=Special Feature container.nei.actuallyadditions.coffee.special=Special Feature
container.nei.actuallyadditions.coffee.maxAmount=Max Amount container.nei.actuallyadditions.coffee.maxAmount=Max Amount
container.nei.actuallyadditions.coffee.extra.milk=+01:00, -1 Level container.nei.actuallyadditions.coffee.extra.milk=+01:00, -1 Level
@ -178,13 +178,15 @@ tile.actuallyadditions.blockPlacer.name=Auto-Placer
tile.actuallyadditions.blockDropper.name=Automatic Precision Dropper tile.actuallyadditions.blockDropper.name=Automatic Precision Dropper
tile.actuallyadditions.blockMiscEnderCasing.name=Ender Casing tile.actuallyadditions.blockMiscEnderCasing.name=Ender Casing
tile.actuallyadditions.blockFlax.name=Flax Plant tile.actuallyadditions.blockFlax.name=Flax Plant
tile.actuallyadditions.blockCoffeeMachine.name=Coffee Machine tile.actuallyadditions.blockCoffeeMachine.name=Coffee Maker
tile.actuallyadditions.blockXPSolidifier.name=Experience Solidifier tile.actuallyadditions.blockXPSolidifier.name=Experience Solidifier
tile.actuallyadditions.blockSmileyCloud.name=Smiley Cloud tile.actuallyadditions.blockSmileyCloud.name=Smiley Cloud
tile.actuallyadditions.blockLeafGenerator.name=Leaf-Eating Generator tile.actuallyadditions.blockLeafGenerator.name=Leaf-Eating Generator
tile.actuallyadditions.blockDirectionalBreaker.name=Long-Range Breaker tile.actuallyadditions.blockDirectionalBreaker.name=Long-Range Breaker
tile.actuallyadditions.blockRangedCollector.name=Ranged Collector tile.actuallyadditions.blockRangedCollector.name=Ranged Collector
tile.actuallyadditions.blockLaserRelay.name=Laser Relay tile.actuallyadditions.blockLaserRelay.name=Energy Laser Relay
tile.actuallyadditions.blockLaserRelayAdvanced.name=Advanced Energy Laser Relay
tile.actuallyadditions.blockLaserRelayExtreme.name=Extreme Energy Laser Relay
tile.actuallyadditions.blockMiscIronCasing.name=Iron Casing tile.actuallyadditions.blockMiscIronCasing.name=Iron Casing
tile.actuallyadditions.blockBlackLotus.name=Black Lotus tile.actuallyadditions.blockBlackLotus.name=Black Lotus
tile.actuallyadditions.blockTestifiBucksWhiteFence.name=Ethetic Quartz Wall tile.actuallyadditions.blockTestifiBucksWhiteFence.name=Ethetic Quartz Wall
@ -213,6 +215,7 @@ tile.actuallyadditions.blockImpureIron.name=Impure Iron
tile.actuallyadditions.blockBookletStand.name=Wall-Mount Manual tile.actuallyadditions.blockBookletStand.name=Wall-Mount Manual
tile.actuallyadditions.blockDisplayStand.name=Display Stand tile.actuallyadditions.blockDisplayStand.name=Display Stand
tile.actuallyadditions.blockShockSuppressor.name=Shock Absorber tile.actuallyadditions.blockShockSuppressor.name=Shock Absorber
tile.actuallyadditions.blockTinyTorch.name=Tiny Torch
#ESD #ESD
tile.actuallyadditions.blockInputter.name=ESD tile.actuallyadditions.blockInputter.name=ESD
@ -331,7 +334,7 @@ item.actuallyadditions.itemDrillUpgradeFortuneII.name=Drill Fortune Augment II (
item.actuallyadditions.itemDrillUpgradeBlockPlacing.name=Drill Block Placing Augment item.actuallyadditions.itemDrillUpgradeBlockPlacing.name=Drill Block Placing Augment
item.actuallyadditions.itemDrillUpgradeThreeByThree.name=Drill Mining Augment I item.actuallyadditions.itemDrillUpgradeThreeByThree.name=Drill Mining Augment I
item.actuallyadditions.itemDrillUpgradeFiveByFive.name=Drill Mining Augment II item.actuallyadditions.itemDrillUpgradeFiveByFive.name=Drill Mining Augment II
item.actuallyadditions.itemMiscMashedFood.name=Mashed Food item.actuallyadditions.itemMiscMashedFood.name=Bio-Mash
item.actuallyadditions.itemFertilizer.name=Fertilizer item.actuallyadditions.itemFertilizer.name=Fertilizer
item.actuallyadditions.itemMiscDough.name=Dough item.actuallyadditions.itemMiscDough.name=Dough
item.actuallyadditions.itemMiscPaperCone.name=Paper Cone item.actuallyadditions.itemMiscPaperCone.name=Paper Cone
@ -496,6 +499,7 @@ item.actuallyadditions.itemWaterBowl.name=Bowl of Water
item.actuallyadditions.itemFilter.name=Item Filter item.actuallyadditions.itemFilter.name=Item Filter
item.actuallyadditions.itemMiscBiomass.name=Biomass item.actuallyadditions.itemMiscBiomass.name=Biomass
item.actuallyadditions.itemMiscBiocoal.name=Bio Coal item.actuallyadditions.itemMiscBiocoal.name=Bio Coal
item.actuallyadditions.itemPlayerProbe.name=Player Probe
#Tooltips #Tooltips
tooltip.actuallyadditions.onSuffix.desc=On tooltip.actuallyadditions.onSuffix.desc=On
@ -526,6 +530,10 @@ tooltip.actuallyadditions.laser.stored.desc=<Laser stored!>
tooltip.actuallyadditions.laser.connected.desc=<Laser connected!> tooltip.actuallyadditions.laser.connected.desc=<Laser connected!>
tooltip.actuallyadditions.laser.cantConnect.desc=Can't connect: The relays are either part of the same network, the stored relay isn't the same type or doesn't exist anymore or it is too far away! tooltip.actuallyadditions.laser.cantConnect.desc=Can't connect: The relays are either part of the same network, the stored relay isn't the same type or doesn't exist anymore or it is too far away!
tooltip.actuallyadditions.itemBooklet.desc=Or "Booklet", if you will tooltip.actuallyadditions.itemBooklet.desc=Or "Booklet", if you will
tooltip.actuallyadditions.playerProbe.disconnect.1=The player you were probing has broken the connection before you could strap him to the Player Interface! Data will be cleared!
tooltip.actuallyadditions.playerProbe.disconnect.2=The player you were probing has disconnected before you could strap him to the Player Interface! Data will be cleared!
tooltip.actuallyadditions.playerProbe.probing=Probing
tooltip.actuallyadditions.playerProbe.notice=Look out! Someone tried to probe you and strap you to a Player Interface, but they failed!
#Gui Information #Gui Information
info.actuallyadditions.gui.animals=Animals info.actuallyadditions.gui.animals=Animals
@ -590,7 +598,7 @@ container.actuallyadditions.liquiface.name=Liquiface
container.actuallyadditions.energyface.name=Energyface container.actuallyadditions.energyface.name=Energyface
container.actuallyadditions.fluidPlacer.name=Fluid Placer container.actuallyadditions.fluidPlacer.name=Fluid Placer
container.actuallyadditions.fluidCollector.name=Fluid Collector container.actuallyadditions.fluidCollector.name=Fluid Collector
container.actuallyadditions.coffeeMachine.name=Coffee Machine container.actuallyadditions.coffeeMachine.name=Coffee Maker
container.actuallyadditions.drill.name=Drill container.actuallyadditions.drill.name=Drill
container.actuallyadditions.energizer.name=Energizer container.actuallyadditions.energizer.name=Energizer
container.actuallyadditions.enervator.name=Enervator container.actuallyadditions.enervator.name=Enervator
@ -647,7 +655,7 @@ achievement.actuallyadditions.pickUpCoffee=Makes you addicted
achievement.actuallyadditions.pickUpCoffee.desc=Harvest some coffee achievement.actuallyadditions.pickUpCoffee.desc=Harvest some coffee
achievement.actuallyadditions.craftCoffeeMachine=Addiction in cups achievement.actuallyadditions.craftCoffeeMachine=Addiction in cups
achievement.actuallyadditions.craftCoffeeMachine.desc=Craft a Coffee Machine achievement.actuallyadditions.craftCoffeeMachine.desc=Craft a Coffee Maker
achievement.actuallyadditions.obscured=§ksome chieve name achievement.actuallyadditions.obscured=§ksome chieve name
achievement.actuallyadditions.obscured.desc=§klolwut y u actually look over meow achievement.actuallyadditions.obscured.desc=§klolwut y u actually look over meow
@ -739,16 +747,16 @@ booklet.actuallyadditions.chapter.feeder.name=Feeder
booklet.actuallyadditions.chapter.feeder.text.1=The <item>Feeder<r> is a good alternative to a manual animal farm. Place it in the middle of an animal pen and supply it with some wheat, seeds or carrots, depending on the animal you want to feed, and just wait. It will <imp>automatically feed the animals<r> and if there is enough animals near it, it will <imp>shut off on its own<r> to prevent lag or animal overflow. <n><n><i>Greenpeace approves booklet.actuallyadditions.chapter.feeder.text.1=The <item>Feeder<r> is a good alternative to a manual animal farm. Place it in the middle of an animal pen and supply it with some wheat, seeds or carrots, depending on the animal you want to feed, and just wait. It will <imp>automatically feed the animals<r> and if there is enough animals near it, it will <imp>shut off on its own<r> to prevent lag or animal overflow. <n><n><i>Greenpeace approves
booklet.actuallyadditions.chapter.compost.name=Compost and Fertilizer booklet.actuallyadditions.chapter.compost.name=Compost and Fertilizer
booklet.actuallyadditions.chapter.compost.text.1=The <item>Compost<r> is used to make <item>Fertilizier<r> from <item>Mashed Food<r>. <item>Fertilizer<r> acts just like Bone Meal, but can be crafted in a much simpler manner just by crafting <item>Mashed Food<r> and then putting 10 of those inside of a <item>Compost<r> and waiting for a bit. When the mashed food is composted, just take it out by right-clicking again. <n><n>This, however, also works for some other items, which will be explained when needed. booklet.actuallyadditions.chapter.compost.text.1=The <item>Compost<r> is used to make <item>Fertilizier<r> from <item>Bio-Mash<r>. <item>Fertilizer<r> acts just like Bone Meal, but can be crafted in a much simpler manner just by crafting <item>Bio-Mash<r> and then putting 10 of those inside of a <item>Compost<r> and waiting for a bit. When the mash is composted, just take it out by right-clicking again. <n><n>This, however, also works for some other items, which will be explained when needed.
booklet.actuallyadditions.chapter.compost.text.3=<item>Mashed Food<r> can be crafted from <imp>any type of food or plantable item<r>. booklet.actuallyadditions.chapter.compost.text.3=<item>Bio-Mash<r> can be crafted from <imp>any type of food or plantable item<r>.
booklet.actuallyadditions.chapter.crate.name=Storage Crates booklet.actuallyadditions.chapter.crate.name=Storage Crates
booklet.actuallyadditions.chapter.crate.text.1=<item>Storage Crates<r> are big. <imp>Really big<r>. They hold tons of items, more than 4 chests worth of them. <n>Not only that, but they can be <imp>upgraded in size<r>! View the following pages to get information on that and some other items regarding crates! booklet.actuallyadditions.chapter.crate.text.1=<item>Storage Crates<r> are big. <imp>Really big<r>. They hold tons of items, more than 4 chests worth of them. <n>Not only that, but they can be <imp>upgraded in size<r>! View the following pages to get information on that and some other items regarding crates!
booklet.actuallyadditions.chapter.crate.text.4=Placing a <item>Storage Crate Keeper<r> inside the Storage Crate before breaking it will cause it to <imp>keep all of its items<r>, however the Keeper will be destroyed upon placing the Crate back down. booklet.actuallyadditions.chapter.crate.text.4=Placing a <item>Storage Crate Keeper<r> inside the Storage Crate before breaking it will cause it to <imp>keep all of its items<r>, however the Keeper will be destroyed upon placing the Crate back down.
booklet.actuallyadditions.chapter.crate.text.5=The <item>Chest To Storage Crate Upgrade<r> allows you to <imp>convert any chest into a Storage Crate<r>, retaining its items! <n>Just <imp>shift-right-click<r> onto the chest to apply it. booklet.actuallyadditions.chapter.crate.text.5=The <item>Chest To Storage Crate Upgrade<r> allows you to <imp>convert any chest into a Storage Crate<r>, retaining its items! <n>Just <imp>shift-right-click<r> onto the chest to apply it.
booklet.actuallyadditions.chapter.coffeeMachine.name=Coffee Machine booklet.actuallyadditions.chapter.coffeeMachine.name=Coffee Maker
booklet.actuallyadditions.chapter.coffeeMachine.text.1=The <item>Coffee Machine<r> is a block used to make <item>Coffee<r>, a <imp>potion-like<r> item that gives the user several buffs. <n>To use the coffee machine, you need a <item>Empty Cup<r>, <coffee> <item>Coffee Beans<r>, which can be found in the wild, harvested and <imp>planted on farmland<r> again, <rf> RF/t and <water>mB of Water per cup brewed. <n>On the coffee machine recipe pages at the back, to see what the item does, just hover over the Cup of Coffee. booklet.actuallyadditions.chapter.coffeeMachine.text.1=The <item>Coffee Maker<r> is a block used to make <item>Coffee<r>, a <imp>potion-like<r> item that gives the user several buffs. <n>To use the coffee maker, you need a <item>Empty Cup<r>, <coffee> <item>Coffee Beans<r>, which can be found in the wild, harvested and <imp>planted on farmland<r> again, <rf> RF/t and <water>mB of Water per cup brewed. <n>On the coffee maker recipe pages at the back, to see what the item does, just hover over the Cup of Coffee.
booklet.actuallyadditions.chapter.coffeeMachine.text.2=To actually give your coffee some buffs, <imp>put some of the items shown on the later pages into the slots on the right<r>. <n>The more slots are filled up with one item, the higher the <imp>Amplifier<r> of the effect will be. The <imp>Maximum Amplifier<r> is the max amount of items to be put into one coffee. <n>Order matters: When using, for example, <item>Milk<r> (to see what it does exactly, go to a later page), you are going to have to plan the items out inside the <imp>numbered slots<r> in such a way that it brews the coffee you want. booklet.actuallyadditions.chapter.coffeeMachine.text.2=To actually give your coffee some buffs, <imp>put some of the items shown on the later pages into the slots on the right<r>. <n>The more slots are filled up with one item, the higher the <imp>Amplifier<r> of the effect will be. The <imp>Maximum Amplifier<r> is the max amount of items to be put into one coffee. <n>Order matters: When using, for example, <item>Milk<r> (to see what it does exactly, go to a later page), you are going to have to plan the items out inside the <imp>numbered slots<r> in such a way that it brews the coffee you want.
booklet.actuallyadditions.chapter.coffeeMachine.text.3=This is an example of a recipe making a coffee containing <imp>Fire Resistance 1 for 0:20<r> and <imp>Speed 1 for 2:30<r>. booklet.actuallyadditions.chapter.coffeeMachine.text.3=This is an example of a recipe making a coffee containing <imp>Fire Resistance 1 for 0:20<r> and <imp>Speed 1 for 2:30<r>.
booklet.actuallyadditions.chapter.coffeeMachine.text.6=<item>Milk<r> is an important item when brewing coffee: It <imp>adds 2 minutes<r> to all effects of items in slots with lower numbers while <imp>removing 1 amplifier<r>. When the amplifier of an effect is 1, however, it will remove the effect. booklet.actuallyadditions.chapter.coffeeMachine.text.6=<item>Milk<r> is an important item when brewing coffee: It <imp>adds 2 minutes<r> to all effects of items in slots with lower numbers while <imp>removing 1 amplifier<r>. When the amplifier of an effect is 1, however, it will remove the effect.
@ -787,7 +795,6 @@ booklet.actuallyadditions.chapter.wings.name=Wings Of The Bats
booklet.actuallyadditions.chapter.wings.text.1=Sometimes, bats will drop <item>Wings<r>. These wings can't really be used to fly, but that's just because they're not powerful enough. <n>To make them more powerful, you can craft <item>Wings Of The Bats<r>. When you have these in your inventory, they will allow you to <imp>fly like in creative mode<r>. booklet.actuallyadditions.chapter.wings.text.1=Sometimes, bats will drop <item>Wings<r>. These wings can't really be used to fly, but that's just because they're not powerful enough. <n>To make them more powerful, you can craft <item>Wings Of The Bats<r>. When you have these in your inventory, they will allow you to <imp>fly like in creative mode<r>.
booklet.actuallyadditions.chapter.foods.name=Foodstuffs booklet.actuallyadditions.chapter.foods.name=Foodstuffs
booklet.actuallyadditions.chapter.foods.text.1=Yes, this is <item>Bacon<r>. Don't try naming it <imp>Ellspeck<r>. <n><n><i>Please, just don't.
booklet.actuallyadditions.chapter.leafBlower.name=Leaf Blowers booklet.actuallyadditions.chapter.leafBlower.name=Leaf Blowers
booklet.actuallyadditions.chapter.leafBlower.text.1=The <item>Leaf Blower<r> can blow away tall grass, flowers and other stuff around you when you <imp>hold right-click<r>. There is an <item>Advanced Leaf Blower<r>, which works like the basic one, except that it operates <imp>much faster<r> and <imp>also breaks Leaves<r>. booklet.actuallyadditions.chapter.leafBlower.text.1=The <item>Leaf Blower<r> can blow away tall grass, flowers and other stuff around you when you <imp>hold right-click<r>. There is an <item>Advanced Leaf Blower<r>, which works like the basic one, except that it operates <imp>much faster<r> and <imp>also breaks Leaves<r>.
@ -805,7 +812,7 @@ booklet.actuallyadditions.chapter.potionRings.text.1=The <item>Potion Rings<r> h
booklet.actuallyadditions.chapter.drill.name=Drills booklet.actuallyadditions.chapter.drill.name=Drills
booklet.actuallyadditions.chapter.drill.text.1=The <item>Drill<r> works like a Pickaxe and a Shovel. It uses <imp>RF<r> per block. It can be <imp>charged in an Energizer<r> and upgraded by <imp>right-clicking<r> with it in your hand. There is <imp>a lot of upgrades<r>, but here is an explanation of some of them: <n>The <item>Mining Uprgades<r> enlarge the hole which the Drill digs. <n>The <item>Placement Upgrade<r>, after you right-click it in any slot of your hotbar, will make the Drill able to <imp>place a block from that slot by right-clicking<r>. You can also put a <item>Battery<r> inside the Drill to give it more charge. booklet.actuallyadditions.chapter.drill.text.1=The <item>Drill<r> works like a Pickaxe and a Shovel. It uses <imp>RF<r> per block. It can be <imp>charged in an Energizer<r> and upgraded by <imp>right-clicking<r> with it in your hand. There is <imp>a lot of upgrades<r>, but here is an explanation of some of them: <n>The <item>Mining Uprgades<r> enlarge the hole which the Drill digs. <n>The <item>Placement Upgrade<r>, after you right-click it in any slot of your hotbar, will make the Drill able to <imp>place a block from that slot by right-clicking<r>. You can also put a <item>Battery<r> inside the Drill to give it more charge.
booklet.actuallyadditions.chapter.drill.text.3=The <item>Drill<r> can also be <imp>dyed<r> in Minecraft's 16 colors. <n>It's only cosmetic and won't have any effect other than it looking different, however. booklet.actuallyadditions.chapter.drill.text.2=It should be noted that, in fact, the <item>Speed<r>, <item>Mining<r> and <item>Fortune Upgrades<r> <imp>need their previous tiers to be installed<r> for them to work. <n>This means that, if you want Speed III in the Drill, it needs Speed II and Speed I inside it as well. <n><n>Additionally, the <item>Drill<r> can also be <imp>dyed<r> in Minecraft's 16 colors by crafting it together with one. <n>It's only cosmetic and won't have any effect other than it looking different, however.
booklet.actuallyadditions.chapter.staff.name=Staff booklet.actuallyadditions.chapter.staff.name=Staff
booklet.actuallyadditions.chapter.staff.text.1=The <item>Teleport Staff<r>, when charged in an Energizer, can be <imp>right-clicked<r> to <imp>teleport you to where you're looking<r>. When you are looking at a block, it will teleport you there, however, when you aren't looking at a block, you can only be looking upwards up to <imp>5 degrees<r>, otherwise the teleport will fail. booklet.actuallyadditions.chapter.staff.text.1=The <item>Teleport Staff<r>, when charged in an Energizer, can be <imp>right-clicked<r> to <imp>teleport you to where you're looking<r>. When you are looking at a block, it will teleport you there, however, when you aren't looking at a block, you can only be looking upwards up to <imp>5 degrees<r>, otherwise the teleport will fail.
@ -840,13 +847,14 @@ booklet.actuallyadditions.chapter.hairBalls.name=Ball of Fur-s
booklet.actuallyadditions.chapter.hairBalls.text.1=<item>Balls of Fur<r> dropped by <imp>live<r> cats. <n>More information on the next page. booklet.actuallyadditions.chapter.hairBalls.text.1=<item>Balls of Fur<r> dropped by <imp>live<r> cats. <n>More information on the next page.
booklet.actuallyadditions.chapter.hairBalls.text.2=<item>Balls of Fur<r> are an item rarely dropped by <imp>cats<r> which have been <imp>tamed<r> by the player. <n>Cats are very mysterious creatures as they <imp>appear to get everything stuck in their fur<r>. <item>Balls of Fur<r> may seem disgusting at first, but when removing all of the hair by <imp>right-clicking<r>, they will reveal some <imp>valuable items<r>. <n>Or just some String. <n><n><n><i>FUURRRRRR!! booklet.actuallyadditions.chapter.hairBalls.text.2=<item>Balls of Fur<r> are an item rarely dropped by <imp>cats<r> which have been <imp>tamed<r> by the player. <n>Cats are very mysterious creatures as they <imp>appear to get everything stuck in their fur<r>. <item>Balls of Fur<r> may seem disgusting at first, but when removing all of the hair by <imp>right-clicking<r>, they will reveal some <imp>valuable items<r>. <n>Or just some String. <n><n><n><i>FUURRRRRR!!
booklet.actuallyadditions.chapter.laserRelays.name=Laser Relays booklet.actuallyadditions.chapter.laserRelays.name=Energy Laser Relays
booklet.actuallyadditions.chapter.laserRelays.text.1=The <item>Laser Relay<r> is a block that can <imp>wirelessly transfer RF<r> just by being connected with a <item>Laser Wrench<r>, generating a network. <n>When placing a Power Generator or Receiver next to the relay, it can receive Power <imp>from any other relay<r> in the network. <n>Two relays can be at most <range> blocks apart. <n>During an energy transfer, they have an <imp>Energy Loss<r> of <loss>%. booklet.actuallyadditions.chapter.laserRelays.text.1=The <item>Energy Laser Relay<r> is a block that can <imp>wirelessly transfer RF (or Tesla)<r> just by being connected with a <item>Laser Wrench<r>, generating a network. <n>When placing a Power Generator or Receiver next to the relay, it can receive Power <imp>from any other relay<r> in the network. This system always works in both directions simultaneously. <n>Two relays can be at most <range> blocks apart. <n>During an energy transfer, they have a light <imp>Energy Loss<r>, but nothing to worry about.
booklet.actuallyadditions.chapter.laserRelays.text.4=The <item>Laser Wrench<r>'s mode can be switched by <imp>sneak-right-clicking it<r> anywhere. <n>Possible modes are to <imp>always show lasers<r>, <imp>never show lasers<r> or only show lasers when <imp>holding the wrench<r>. booklet.actuallyadditions.chapter.laserRelays.text.2=There are <imp>three tiers<r> of Energy Laser Relay. They have different maximum amounts of energy to be transferred through them in one tick. The <imp>energy caps<r> are, in order, <cap1>, <cap2>, and <cap3>. <n>Additionally, the energy loss is a bit higher every tier. <n><n><imp>Interconnecting<r> different tiers is possible, however the <imp>lowest cap<r> and <imp>highest loss<r> of the two relays connected to the blocks involved in the transfer is considered.
booklet.actuallyadditions.chapter.laserRelays.text.7=The <item>Laser Wrench<r>'s mode can be switched by <imp>sneak-right-clicking it<r> anywhere. <n>Possible modes are to <imp>always show lasers<r>, <imp>never show lasers<r> or only show lasers when <imp>holding the wrench<r>.
booklet.actuallyadditions.chapter.blackLotus.name=Black Lotus booklet.actuallyadditions.chapter.blackLotus.name=Black Lotus
booklet.actuallyadditions.chapter.blackLotus.text.1=Think of this: <n>You need to craft <imp>black wool<r>, <imp>black clay<r> or anything else that <imp>needs black dye<r> but you are just guilty about killing so many <imp>innocent squids<r>? <n>Well, the <item>Black Lotus<r> is exactly the thing you need! <n>Just look around <imp>in the wild<r> a bit, and you will find one, then being able to craft some <item>Black Dye<r> that can be used <imp>instead of Ink Sacs<r> so that you don't need to kill poor squids and L any longer. booklet.actuallyadditions.chapter.blackLotus.text.1=Think of this: <n>You need to craft <imp>black wool<r>, <imp>black clay<r> or anything else that <imp>needs black dye<r> but you are just guilty about killing so many <imp>innocent squids<r>? <n>Well, the <item>Black Lotus<r> is exactly the thing you need! <n>Just look around <imp>in the wild<r> a bit, and you will find one, then being able to craft some <item>Black Dye<r> that can be used <imp>instead of Ink Sacs<r> so that you don't need to kill poor squids and L any longer.
booklet.actuallyadditions.chapter.blackLotus.text.2=<i>No, not that one, Vaz booklet.actuallyadditions.chapter.blackLotus.text.2=<i>Do the lotus pose
booklet.actuallyadditions.chapter.crystals.name=Crystals and Reconstructor booklet.actuallyadditions.chapter.crystals.name=Crystals and Reconstructor
booklet.actuallyadditions.chapter.crystals.text.1=The <item>Atomic Reconstructor<r> is used to craft <item>Crystals<r>, which are the main crafting ingredient in most items from <imp>Actually Additions<r>. <n>Upon being supplied with power, it shoots out a Laser. <tifisgrin>When the Laser hits a block<r>, it will convert all surrounding items and blocks, provided they can be converted. <n>When shooting a laser, it uses <imp><rf> RF<r>, but additional rates vary depending on the conversion. booklet.actuallyadditions.chapter.crystals.text.1=The <item>Atomic Reconstructor<r> is used to craft <item>Crystals<r>, which are the main crafting ingredient in most items from <imp>Actually Additions<r>. <n>Upon being supplied with power, it shoots out a Laser. <tifisgrin>When the Laser hits a block<r>, it will convert all surrounding items and blocks, provided they can be converted. <n>When shooting a laser, it uses <imp><rf> RF<r>, but additional rates vary depending on the conversion.
@ -921,4 +929,10 @@ booklet.actuallyadditions.chapter.videoGuide.page.1.button=Watch Video
booklet.actuallyadditions.chapter.shockSuppressor.name=Shock Absorber booklet.actuallyadditions.chapter.shockSuppressor.name=Shock Absorber
booklet.actuallyadditions.chapter.shockSuppressor.text.1=The <item>Shock Absorber<r> is a block that, when supplied with <imp>RF<r>, it will protect an area of <imp>up to <range> blocks around it<r> from any type of <imp>Explosion<r>, be it ghasts, TNT or creepers. <n>Every block that is protected will result in a loss of <imp><rf> RF<r>. booklet.actuallyadditions.chapter.shockSuppressor.text.1=The <item>Shock Absorber<r> is a block that, when supplied with <imp>RF<r>, it will protect an area of <imp>up to <range> blocks around it<r> from any type of <imp>Explosion<r>, be it ghasts, TNT or creepers. <n>Every block that is protected will result in a loss of <imp><rf> RF<r>.
booklet.actuallyadditions.chapter.shockSuppressor.text.2=<i>Credit where credit is due: <r><n><n>Or something like that. <n>Anyways, this thing was thought up and suggested to me by <imp>praetoras<r>. Thanks for that brilliant idea! <n><n><i>What's a fourth wall..? booklet.actuallyadditions.chapter.shockSuppressor.text.2=<i>Credit where credit is due: <r><n><n>Or something like that. <n>Anyways, this thing was thought up and suggested to me by <imp>praetoras<r>. Thanks for that brilliant idea! <n><n><i>What's a fourth wall..?
booklet.actuallyadditions.chapter.tinyTorch.name=Tiny Torch
booklet.actuallyadditions.chapter.tinyTorch.text.1=<i>Yea.
booklet.actuallyadditions.chapter.playerProbe.name=Player Probe
booklet.actuallyadditions.chapter.playerProbe.text.1=The <item>Player Probe<r> can be used to change the player a <item>Player Interface<r> is connected to. If you don't know what the <item>Player Interface<r> does, look it up in here first! <n><n>To use the Player Probe, simply <imp>right-click any player<r> with it and then <imp>right-click the interface<r>. But watch out! <n>The Probe will <imp>notify the player and disconenct<r> from him whenever he sneaks and will also do so when he <imp>leaves the server<r>! <n><n><i>Shenanigans

View file

@ -546,7 +546,11 @@ info.actuallyadditions.gui.whitelist=白名单
info.actuallyadditions.gui.blacklist=黑名单 info.actuallyadditions.gui.blacklist=黑名单
info.actuallyadditions.gui.coffee=咖啡 info.actuallyadditions.gui.coffee=咖啡
info.actuallyadditions.gui.ok=Ok info.actuallyadditions.gui.ok=Ok
<<<<<<< HEAD
info.actuallyadditions.gui.the=\ info.actuallyadditions.gui.the=\
=======
info.actuallyadditions.gui.the=\
>>>>>>> master
#info.actuallyadditions.gui.smart= #info.actuallyadditions.gui.smart=
#info.actuallyadditions.gui.smartInfo= #info.actuallyadditions.gui.smartInfo=
#info.actuallyadditions.inputter.info.1=This is the first Slot in the connected Inventory to <p> at. #info.actuallyadditions.inputter.info.1=This is the first Slot in the connected Inventory to <p> at.
@ -921,4 +925,8 @@ booklet.actuallyadditions.chapter.videoGuide.page.1.button=立即浏览
booklet.actuallyadditions.chapter.shockSuppressor.name=震波吸收器 booklet.actuallyadditions.chapter.shockSuppressor.name=震波吸收器
booklet.actuallyadditions.chapter.shockSuppressor.text.1=<item>震波吸收器<r>在供应<imp>RF<r>能量后,能够保护周围<imp>至少<range>个方块的区域<r>免受各类<imp>爆炸<r>的破坏无论是恶魂TNT还是爬行者发生的爆炸。<n>保护一个方块需要消耗<imp><rf> RF<r>。 booklet.actuallyadditions.chapter.shockSuppressor.text.1=<item>震波吸收器<r>在供应<imp>RF<r>能量后,能够保护周围<imp>至少<range>个方块的区域<r>免受各类<imp>爆炸<r>的破坏无论是恶魂TNT还是爬行者发生的爆炸。<n>保护一个方块需要消耗<imp><rf> RF<r>。
<<<<<<< HEAD
#booklet.actuallyadditions.chapter.shockSuppressor.text.2=<i>Credit where credit is due: <r><n><n>Or something like that. <n>Anyways, this thing was thought up and suggested to me by <imp>praetoras<r>. Thanks for that brilliant idea! <n><n><i>What's a fourth wall..? #booklet.actuallyadditions.chapter.shockSuppressor.text.2=<i>Credit where credit is due: <r><n><n>Or something like that. <n>Anyways, this thing was thought up and suggested to me by <imp>praetoras<r>. Thanks for that brilliant idea! <n><n><i>What's a fourth wall..?
=======
#booklet.actuallyadditions.chapter.shockSuppressor.text.2=<i>Credit where credit is due: <r><n><n>Or something like that. <n>Anyways, this thing was thought up and suggested to me by <imp>praetoras<r>. Thanks for that brilliant idea! <n><n><i>What's a fourth wall..?
>>>>>>> master

View file

@ -0,0 +1,880 @@
{
"__createdBy": "canitzp",
"ambientocclusion": false,
"textures": {
"particle": "actuallyadditions:blocks/models/modelLaserRelayAdvanced",
"laserRelay": "actuallyadditions:blocks/models/modelLaserRelayAdvanced"
},
"elements": [
{
"from": [4,0,4],
"to": [12,1,12],
"faces": {
"up": {
"uv": [0,0,8,8],
"texture": "#laserRelay"
},
"down": {
"uv": [0,0,8,8],
"texture": "#laserRelay"
},
"west": {
"uv": [0,0,8,1],
"texture": "#laserRelay"
},
"east": {
"uv": [0,0,8,1],
"texture": "#laserRelay"
},
"north": {
"uv": [0,0,8,1],
"texture": "#laserRelay"
},
"south": {
"uv": [0,0,8,1],
"texture": "#laserRelay"
}
}
},
{
"from": [4,1,3],
"to": [12,4,4],
"faces": {
"up": {
"uv": [0,0,8,1],
"texture": "#laserRelay"
},
"down": {
"uv": [0,0,8,1],
"texture": "#laserRelay"
},
"west": {
"uv": [0,0,1,3],
"texture": "#laserRelay"
},
"east": {
"uv": [0,0,1,3],
"texture": "#laserRelay"
},
"north": {
"uv": [0,0,8,3],
"texture": "#laserRelay"
},
"south": {
"uv": [0,0,8,3],
"texture": "#laserRelay"
}
}
},
{
"from": [4,1,12],
"to": [12,4,13],
"faces": {
"up": {
"uv": [0,0,8,1],
"texture": "#laserRelay"
},
"down": {
"uv": [0,0,8,1],
"texture": "#laserRelay"
},
"west": {
"uv": [0,0,1,3],
"texture": "#laserRelay"
},
"east": {
"uv": [0,0,1,3],
"texture": "#laserRelay"
},
"north": {
"uv": [0,0,8,3],
"texture": "#laserRelay"
},
"south": {
"uv": [0,0,8,3],
"texture": "#laserRelay"
}
}
},
{
"from": [4,11,12],
"to": [12,14,13],
"faces": {
"up": {
"uv": [0,0,8,1],
"texture": "#laserRelay"
},
"down": {
"uv": [0,0,8,1],
"texture": "#laserRelay"
},
"west": {
"uv": [0,0,1,3],
"texture": "#laserRelay"
},
"east": {
"uv": [0,0,1,3],
"texture": "#laserRelay"
},
"north": {
"uv": [0,0,8,3],
"texture": "#laserRelay"
},
"south": {
"uv": [0,0,8,3],
"texture": "#laserRelay"
}
}
},
{
"from": [4,11,3],
"to": [12,14,4],
"faces": {
"up": {
"uv": [0,0,8,1],
"texture": "#laserRelay"
},
"down": {
"uv": [0,0,8,1],
"texture": "#laserRelay"
},
"west": {
"uv": [0,0,1,3],
"texture": "#laserRelay"
},
"east": {
"uv": [0,0,1,3],
"texture": "#laserRelay"
},
"north": {
"uv": [0,0,8,3],
"texture": "#laserRelay"
},
"south": {
"uv": [0,0,8,3],
"texture": "#laserRelay"
}
}
},
{
"from": [4,4,2],
"to": [12,5,3],
"faces": {
"up": {
"uv": [0,0,8,1],
"texture": "#laserRelay"
},
"down": {
"uv": [0,0,8,1],
"texture": "#laserRelay"
},
"west": {
"uv": [0,0,1,1],
"texture": "#laserRelay"
},
"east": {
"uv": [0,0,1,1],
"texture": "#laserRelay"
},
"north": {
"uv": [0,0,8,1],
"texture": "#laserRelay"
},
"south": {
"uv": [0,0,8,1],
"texture": "#laserRelay"
}
}
},
{
"from": [4,10,2],
"to": [12,11,3],
"faces": {
"up": {
"uv": [0,0,8,1],
"texture": "#laserRelay"
},
"down": {
"uv": [0,0,8,1],
"texture": "#laserRelay"
},
"west": {
"uv": [0,0,1,1],
"texture": "#laserRelay"
},
"east": {
"uv": [0,0,1,1],
"texture": "#laserRelay"
},
"north": {
"uv": [0,0,8,1],
"texture": "#laserRelay"
},
"south": {
"uv": [0,0,8,1],
"texture": "#laserRelay"
}
}
},
{
"from": [4,10,13],
"to": [12,11,14],
"faces": {
"up": {
"uv": [0,0,8,1],
"texture": "#laserRelay"
},
"down": {
"uv": [0,0,8,1],
"texture": "#laserRelay"
},
"west": {
"uv": [0,0,1,1],
"texture": "#laserRelay"
},
"east": {
"uv": [0,0,1,1],
"texture": "#laserRelay"
},
"north": {
"uv": [0,0,8,1],
"texture": "#laserRelay"
},
"south": {
"uv": [0,0,8,1],
"texture": "#laserRelay"
}
}
},
{
"from": [4,4,13],
"to": [12,5,14],
"faces": {
"up": {
"uv": [0,0,8,1],
"texture": "#laserRelay"
},
"down": {
"uv": [0,0,8,1],
"texture": "#laserRelay"
},
"west": {
"uv": [0,0,1,1],
"texture": "#laserRelay"
},
"east": {
"uv": [0,0,1,1],
"texture": "#laserRelay"
},
"north": {
"uv": [0,0,8,1],
"texture": "#laserRelay"
},
"south": {
"uv": [0,0,8,1],
"texture": "#laserRelay"
}
}
},
{
"from": [5.5,1,5.5],
"to": [10.5,3,10.5],
"faces": {
"up": {
"uv": [13.5,13.5,16,16],
"texture": "#laserRelay"
},
"down": {
"uv": [0.0,0.0,5.0,5.0],
"texture": "missingtexture"
},
"west": {
"uv": [0,0,5,2],
"texture": "#laserRelay"
},
"east": {
"uv": [0,0,5,2],
"texture": "#laserRelay"
},
"north": {
"uv": [0,0,5,2],
"texture": "#laserRelay"
},
"south": {
"uv": [0,0,5,2],
"texture": "#laserRelay"
}
}
},
{
"from": [7,3,7],
"to": [9,14,9],
"faces": {
"up": {
"uv": [0.0,0.0,2.0,2.0],
"texture": "missingtexture"
},
"down": {
"uv": [0.0,0.0,2.0,2.0],
"texture": "missingtexture"
},
"west": {
"uv": [14,2,16,7.5],
"texture": "#laserRelay"
},
"east": {
"uv": [14,2,16,7.5],
"texture": "#laserRelay"
},
"north": {
"uv": [14,2,16,7.5],
"texture": "#laserRelay"
},
"south": {
"uv": [14,2,16,7.5],
"texture": "#laserRelay"
}
}
},
{
"from": [4,14,4],
"to": [12,15,12],
"faces": {
"up": {
"uv": [1,12,5,15],
"texture": "#laserRelay"
},
"down": {
"uv": [0,0,8,8],
"texture": "#laserRelay"
},
"west": {
"uv": [0,0,8,1],
"texture": "#laserRelay"
},
"east": {
"uv": [0,0,8,1],
"texture": "#laserRelay"
},
"north": {
"uv": [0,0,8,1],
"texture": "#laserRelay"
},
"south": {
"uv": [0,0,8,1],
"texture": "#laserRelay"
}
}
},
{
"from": [6.5,6.5,6.5],
"to": [9.5,9.5,9.5],
"faces": {
"up": {
"uv": [14,0,16,2],
"texture": "#laserRelay"
},
"down": {
"uv": [14,0,16,2],
"texture": "#laserRelay"
},
"west": {
"uv": [14,0,16,2],
"texture": "#laserRelay"
},
"east": {
"uv": [14,0,16,2],
"texture": "#laserRelay"
},
"north": {
"uv": [14,0,16,2],
"texture": "#laserRelay"
},
"south": {
"uv": [14,0,16,2],
"texture": "#laserRelay"
}
}
},
{
"from": [4,5,2],
"to": [5,10,3],
"faces": {
"up": {
"uv": [0.0,0.0,1.0,1.0],
"texture": "missingtexture"
},
"down": {
"uv": [0.0,0.0,1.0,1.0],
"texture": "missingtexture"
},
"west": {
"uv": [0,0,1,5],
"texture": "#laserRelay"
},
"east": {
"uv": [0,0,1,5],
"texture": "#laserRelay"
},
"north": {
"uv": [0,0,1,5],
"texture": "#laserRelay"
},
"south": {
"uv": [0,0,1,5],
"texture": "#laserRelay"
}
}
},
{
"from": [11,5,2],
"to": [12,10,3],
"faces": {
"up": {
"uv": [0.0,0.0,1.0,1.0],
"texture": "missingtexture"
},
"down": {
"uv": [0.0,0.0,1.0,1.0],
"texture": "missingtexture"
},
"west": {
"uv": [0,0,1,5],
"texture": "#laserRelay"
},
"east": {
"uv": [0,0,1,5],
"texture": "#laserRelay"
},
"north": {
"uv": [0,0,1,5],
"texture": "#laserRelay"
},
"south": {
"uv": [0,0,1,5],
"texture": "#laserRelay"
}
}
},
{
"from": [11,5,13],
"to": [12,10,14],
"faces": {
"up": {
"uv": [0.0,0.0,1.0,1.0],
"texture": "missingtexture"
},
"down": {
"uv": [0.0,0.0,1.0,1.0],
"texture": "missingtexture"
},
"west": {
"uv": [0,0,1,5],
"texture": "#laserRelay"
},
"east": {
"uv": [0,0,1,5],
"texture": "#laserRelay"
},
"north": {
"uv": [0,0,1,5],
"texture": "#laserRelay"
},
"south": {
"uv": [0,0,1,5],
"texture": "#laserRelay"
}
}
},
{
"from": [4,5,13],
"to": [5,10,14],
"faces": {
"up": {
"uv": [0.0,0.0,1.0,1.0],
"texture": "missingtexture"
},
"down": {
"uv": [0.0,0.0,1.0,1.0],
"texture": "missingtexture"
},
"west": {
"uv": [0,0,1,5],
"texture": "#laserRelay"
},
"east": {
"uv": [0,0,1,5],
"texture": "#laserRelay"
},
"north": {
"uv": [0,0,1,5],
"texture": "#laserRelay"
},
"south": {
"uv": [0,0,1,5],
"texture": "#laserRelay"
}
}
},
{
"from": [3,1,4],
"to": [4,4,12],
"faces": {
"up": {
"uv": [0,0,1,8],
"texture": "#laserRelay"
},
"down": {
"uv": [0,0,1,8],
"texture": "#laserRelay"
},
"west": {
"uv": [0,0,8,3],
"texture": "#laserRelay"
},
"east": {
"uv": [0,0,8,3],
"texture": "#laserRelay"
},
"north": {
"uv": [0,0,1,3],
"texture": "#laserRelay"
},
"south": {
"uv": [0,0,1,3],
"texture": "#laserRelay"
}
}
},
{
"from": [12,1,4],
"to": [13,4,12],
"faces": {
"up": {
"uv": [0,0,1,8],
"texture": "#laserRelay"
},
"down": {
"uv": [0,0,1,8],
"texture": "#laserRelay"
},
"west": {
"uv": [0,0,8,3],
"texture": "#laserRelay"
},
"east": {
"uv": [0,0,8,3],
"texture": "#laserRelay"
},
"north": {
"uv": [0,0,1,3],
"texture": "#laserRelay"
},
"south": {
"uv": [0,0,1,3],
"texture": "#laserRelay"
}
}
},
{
"from": [12,11,4],
"to": [13,14,12],
"faces": {
"up": {
"uv": [0,0,1,8],
"texture": "#laserRelay"
},
"down": {
"uv": [0,0,1,8],
"texture": "#laserRelay"
},
"west": {
"uv": [0,0,8,3],
"texture": "#laserRelay"
},
"east": {
"uv": [0,0,8,3],
"texture": "#laserRelay"
},
"north": {
"uv": [0,0,1,3],
"texture": "#laserRelay"
},
"south": {
"uv": [0,0,1,3],
"texture": "#laserRelay"
}
}
},
{
"from": [3,11,4],
"to": [4,14,12],
"faces": {
"up": {
"uv": [0,0,1,8],
"texture": "#laserRelay"
},
"down": {
"uv": [0,0,1,8],
"texture": "#laserRelay"
},
"west": {
"uv": [0,0,8,3],
"texture": "#laserRelay"
},
"east": {
"uv": [0,0,8,3],
"texture": "#laserRelay"
},
"north": {
"uv": [0,0,1,3],
"texture": "#laserRelay"
},
"south": {
"uv": [0,0,1,3],
"texture": "#laserRelay"
}
}
},
{
"from": [2,4,4],
"to": [3,5,12],
"faces": {
"up": {
"uv": [0,0,1,8],
"texture": "#laserRelay"
},
"down": {
"uv": [0,0,1,8],
"texture": "#laserRelay"
},
"west": {
"uv": [0,0,8,1],
"texture": "#laserRelay"
},
"east": {
"uv": [0,0,8,1],
"texture": "#laserRelay"
},
"north": {
"uv": [0,0,1,1],
"texture": "#laserRelay"
},
"south": {
"uv": [0,0,1,1],
"texture": "#laserRelay"
}
}
},
{
"from": [2,10,4],
"to": [3,11,12],
"faces": {
"up": {
"uv": [0,0,1,8],
"texture": "#laserRelay"
},
"down": {
"uv": [0,0,1,8],
"texture": "#laserRelay"
},
"west": {
"uv": [0,0,8,1],
"texture": "#laserRelay"
},
"east": {
"uv": [0,0,8,1],
"texture": "#laserRelay"
},
"north": {
"uv": [0,0,1,1],
"texture": "#laserRelay"
},
"south": {
"uv": [0,0,1,1],
"texture": "#laserRelay"
}
}
},
{
"from": [13,10,4],
"to": [14,11,12],
"faces": {
"up": {
"uv": [0,0,1,8],
"texture": "#laserRelay"
},
"down": {
"uv": [0,0,1,8],
"texture": "#laserRelay"
},
"west": {
"uv": [0,0,8,1],
"texture": "#laserRelay"
},
"east": {
"uv": [0,0,8,1],
"texture": "#laserRelay"
},
"north": {
"uv": [0,0,1,1],
"texture": "#laserRelay"
},
"south": {
"uv": [0,0,1,1],
"texture": "#laserRelay"
}
}
},
{
"from": [13,4,4],
"to": [14,5,12],
"faces": {
"up": {
"uv": [0,0,1,8],
"texture": "#laserRelay"
},
"down": {
"uv": [0,0,1,8],
"texture": "#laserRelay"
},
"west": {
"uv": [0,0,8,1],
"texture": "#laserRelay"
},
"east": {
"uv": [0,0,8,1],
"texture": "#laserRelay"
},
"north": {
"uv": [0,0,1,1],
"texture": "#laserRelay"
},
"south": {
"uv": [0,0,1,1],
"texture": "#laserRelay"
}
}
},
{
"from": [2,5,4],
"to": [3,10,5],
"faces": {
"up": {
"uv": [0.0,0.0,1.0,1.0],
"texture": "missingtexture"
},
"down": {
"uv": [0.0,0.0,1.0,1.0],
"texture": "missingtexture"
},
"west": {
"uv": [0,0,1,5],
"texture": "#laserRelay"
},
"east": {
"uv": [0,0,1,5],
"texture": "#laserRelay"
},
"north": {
"uv": [0,0,1,5],
"texture": "#laserRelay"
},
"south": {
"uv": [0,0,1,5],
"texture": "#laserRelay"
}
}
},
{
"from": [2,5,11],
"to": [3,10,12],
"faces": {
"up": {
"uv": [0.0,0.0,1.0,1.0],
"texture": "missingtexture"
},
"down": {
"uv": [0.0,0.0,1.0,1.0],
"texture": "missingtexture"
},
"west": {
"uv": [0,0,1,5],
"texture": "#laserRelay"
},
"east": {
"uv": [0,0,1,5],
"texture": "#laserRelay"
},
"north": {
"uv": [0,0,1,5],
"texture": "#laserRelay"
},
"south": {
"uv": [0,0,1,5],
"texture": "#laserRelay"
}
}
},
{
"from": [13,5,11],
"to": [14,10,12],
"faces": {
"up": {
"uv": [0.0,0.0,1.0,1.0],
"texture": "missingtexture"
},
"down": {
"uv": [0.0,0.0,1.0,1.0],
"texture": "missingtexture"
},
"west": {
"uv": [0,0,1,5],
"texture": "#laserRelay"
},
"east": {
"uv": [0,0,1,5],
"texture": "#laserRelay"
},
"north": {
"uv": [0,0,1,5],
"texture": "#laserRelay"
},
"south": {
"uv": [0,0,1,5],
"texture": "#laserRelay"
}
}
},
{
"from": [13,5,4],
"to": [14,10,5],
"faces": {
"up": {
"uv": [0.0,0.0,1.0,1.0],
"texture": "missingtexture"
},
"down": {
"uv": [0.0,0.0,1.0,1.0],
"texture": "missingtexture"
},
"west": {
"uv": [0,0,1,5],
"texture": "#laserRelay"
},
"east": {
"uv": [0,0,1,5],
"texture": "#laserRelay"
},
"north": {
"uv": [0,0,1,5],
"texture": "#laserRelay"
},
"south": {
"uv": [0,0,1,5],
"texture": "#laserRelay"
}
}
}
]
}

View file

@ -0,0 +1,880 @@
{
"__createdBy": "canitzp",
"ambientocclusion": false,
"textures": {
"particle": "actuallyadditions:blocks/models/modelLaserRelayExtreme",
"laserRelay": "actuallyadditions:blocks/models/modelLaserRelayExtreme"
},
"elements": [
{
"from": [4,0,4],
"to": [12,1,12],
"faces": {
"up": {
"uv": [0,0,8,8],
"texture": "#laserRelay"
},
"down": {
"uv": [0,0,8,8],
"texture": "#laserRelay"
},
"west": {
"uv": [0,0,8,1],
"texture": "#laserRelay"
},
"east": {
"uv": [0,0,8,1],
"texture": "#laserRelay"
},
"north": {
"uv": [0,0,8,1],
"texture": "#laserRelay"
},
"south": {
"uv": [0,0,8,1],
"texture": "#laserRelay"
}
}
},
{
"from": [4,1,3],
"to": [12,4,4],
"faces": {
"up": {
"uv": [0,0,8,1],
"texture": "#laserRelay"
},
"down": {
"uv": [0,0,8,1],
"texture": "#laserRelay"
},
"west": {
"uv": [0,0,1,3],
"texture": "#laserRelay"
},
"east": {
"uv": [0,0,1,3],
"texture": "#laserRelay"
},
"north": {
"uv": [0,0,8,3],
"texture": "#laserRelay"
},
"south": {
"uv": [0,0,8,3],
"texture": "#laserRelay"
}
}
},
{
"from": [4,1,12],
"to": [12,4,13],
"faces": {
"up": {
"uv": [0,0,8,1],
"texture": "#laserRelay"
},
"down": {
"uv": [0,0,8,1],
"texture": "#laserRelay"
},
"west": {
"uv": [0,0,1,3],
"texture": "#laserRelay"
},
"east": {
"uv": [0,0,1,3],
"texture": "#laserRelay"
},
"north": {
"uv": [0,0,8,3],
"texture": "#laserRelay"
},
"south": {
"uv": [0,0,8,3],
"texture": "#laserRelay"
}
}
},
{
"from": [4,11,12],
"to": [12,14,13],
"faces": {
"up": {
"uv": [0,0,8,1],
"texture": "#laserRelay"
},
"down": {
"uv": [0,0,8,1],
"texture": "#laserRelay"
},
"west": {
"uv": [0,0,1,3],
"texture": "#laserRelay"
},
"east": {
"uv": [0,0,1,3],
"texture": "#laserRelay"
},
"north": {
"uv": [0,0,8,3],
"texture": "#laserRelay"
},
"south": {
"uv": [0,0,8,3],
"texture": "#laserRelay"
}
}
},
{
"from": [4,11,3],
"to": [12,14,4],
"faces": {
"up": {
"uv": [0,0,8,1],
"texture": "#laserRelay"
},
"down": {
"uv": [0,0,8,1],
"texture": "#laserRelay"
},
"west": {
"uv": [0,0,1,3],
"texture": "#laserRelay"
},
"east": {
"uv": [0,0,1,3],
"texture": "#laserRelay"
},
"north": {
"uv": [0,0,8,3],
"texture": "#laserRelay"
},
"south": {
"uv": [0,0,8,3],
"texture": "#laserRelay"
}
}
},
{
"from": [4,4,2],
"to": [12,5,3],
"faces": {
"up": {
"uv": [0,0,8,1],
"texture": "#laserRelay"
},
"down": {
"uv": [0,0,8,1],
"texture": "#laserRelay"
},
"west": {
"uv": [0,0,1,1],
"texture": "#laserRelay"
},
"east": {
"uv": [0,0,1,1],
"texture": "#laserRelay"
},
"north": {
"uv": [0,0,8,1],
"texture": "#laserRelay"
},
"south": {
"uv": [0,0,8,1],
"texture": "#laserRelay"
}
}
},
{
"from": [4,10,2],
"to": [12,11,3],
"faces": {
"up": {
"uv": [0,0,8,1],
"texture": "#laserRelay"
},
"down": {
"uv": [0,0,8,1],
"texture": "#laserRelay"
},
"west": {
"uv": [0,0,1,1],
"texture": "#laserRelay"
},
"east": {
"uv": [0,0,1,1],
"texture": "#laserRelay"
},
"north": {
"uv": [0,0,8,1],
"texture": "#laserRelay"
},
"south": {
"uv": [0,0,8,1],
"texture": "#laserRelay"
}
}
},
{
"from": [4,10,13],
"to": [12,11,14],
"faces": {
"up": {
"uv": [0,0,8,1],
"texture": "#laserRelay"
},
"down": {
"uv": [0,0,8,1],
"texture": "#laserRelay"
},
"west": {
"uv": [0,0,1,1],
"texture": "#laserRelay"
},
"east": {
"uv": [0,0,1,1],
"texture": "#laserRelay"
},
"north": {
"uv": [0,0,8,1],
"texture": "#laserRelay"
},
"south": {
"uv": [0,0,8,1],
"texture": "#laserRelay"
}
}
},
{
"from": [4,4,13],
"to": [12,5,14],
"faces": {
"up": {
"uv": [0,0,8,1],
"texture": "#laserRelay"
},
"down": {
"uv": [0,0,8,1],
"texture": "#laserRelay"
},
"west": {
"uv": [0,0,1,1],
"texture": "#laserRelay"
},
"east": {
"uv": [0,0,1,1],
"texture": "#laserRelay"
},
"north": {
"uv": [0,0,8,1],
"texture": "#laserRelay"
},
"south": {
"uv": [0,0,8,1],
"texture": "#laserRelay"
}
}
},
{
"from": [5.5,1,5.5],
"to": [10.5,3,10.5],
"faces": {
"up": {
"uv": [13.5,13.5,16,16],
"texture": "#laserRelay"
},
"down": {
"uv": [0.0,0.0,5.0,5.0],
"texture": "missingtexture"
},
"west": {
"uv": [0,0,5,2],
"texture": "#laserRelay"
},
"east": {
"uv": [0,0,5,2],
"texture": "#laserRelay"
},
"north": {
"uv": [0,0,5,2],
"texture": "#laserRelay"
},
"south": {
"uv": [0,0,5,2],
"texture": "#laserRelay"
}
}
},
{
"from": [7,3,7],
"to": [9,14,9],
"faces": {
"up": {
"uv": [0.0,0.0,2.0,2.0],
"texture": "missingtexture"
},
"down": {
"uv": [0.0,0.0,2.0,2.0],
"texture": "missingtexture"
},
"west": {
"uv": [14,2,16,7.5],
"texture": "#laserRelay"
},
"east": {
"uv": [14,2,16,7.5],
"texture": "#laserRelay"
},
"north": {
"uv": [14,2,16,7.5],
"texture": "#laserRelay"
},
"south": {
"uv": [14,2,16,7.5],
"texture": "#laserRelay"
}
}
},
{
"from": [4,14,4],
"to": [12,15,12],
"faces": {
"up": {
"uv": [1,12,5,15],
"texture": "#laserRelay"
},
"down": {
"uv": [0,0,8,8],
"texture": "#laserRelay"
},
"west": {
"uv": [0,0,8,1],
"texture": "#laserRelay"
},
"east": {
"uv": [0,0,8,1],
"texture": "#laserRelay"
},
"north": {
"uv": [0,0,8,1],
"texture": "#laserRelay"
},
"south": {
"uv": [0,0,8,1],
"texture": "#laserRelay"
}
}
},
{
"from": [6.5,6.5,6.5],
"to": [9.5,9.5,9.5],
"faces": {
"up": {
"uv": [14,0,16,2],
"texture": "#laserRelay"
},
"down": {
"uv": [14,0,16,2],
"texture": "#laserRelay"
},
"west": {
"uv": [14,0,16,2],
"texture": "#laserRelay"
},
"east": {
"uv": [14,0,16,2],
"texture": "#laserRelay"
},
"north": {
"uv": [14,0,16,2],
"texture": "#laserRelay"
},
"south": {
"uv": [14,0,16,2],
"texture": "#laserRelay"
}
}
},
{
"from": [4,5,2],
"to": [5,10,3],
"faces": {
"up": {
"uv": [0.0,0.0,1.0,1.0],
"texture": "missingtexture"
},
"down": {
"uv": [0.0,0.0,1.0,1.0],
"texture": "missingtexture"
},
"west": {
"uv": [0,0,1,5],
"texture": "#laserRelay"
},
"east": {
"uv": [0,0,1,5],
"texture": "#laserRelay"
},
"north": {
"uv": [0,0,1,5],
"texture": "#laserRelay"
},
"south": {
"uv": [0,0,1,5],
"texture": "#laserRelay"
}
}
},
{
"from": [11,5,2],
"to": [12,10,3],
"faces": {
"up": {
"uv": [0.0,0.0,1.0,1.0],
"texture": "missingtexture"
},
"down": {
"uv": [0.0,0.0,1.0,1.0],
"texture": "missingtexture"
},
"west": {
"uv": [0,0,1,5],
"texture": "#laserRelay"
},
"east": {
"uv": [0,0,1,5],
"texture": "#laserRelay"
},
"north": {
"uv": [0,0,1,5],
"texture": "#laserRelay"
},
"south": {
"uv": [0,0,1,5],
"texture": "#laserRelay"
}
}
},
{
"from": [11,5,13],
"to": [12,10,14],
"faces": {
"up": {
"uv": [0.0,0.0,1.0,1.0],
"texture": "missingtexture"
},
"down": {
"uv": [0.0,0.0,1.0,1.0],
"texture": "missingtexture"
},
"west": {
"uv": [0,0,1,5],
"texture": "#laserRelay"
},
"east": {
"uv": [0,0,1,5],
"texture": "#laserRelay"
},
"north": {
"uv": [0,0,1,5],
"texture": "#laserRelay"
},
"south": {
"uv": [0,0,1,5],
"texture": "#laserRelay"
}
}
},
{
"from": [4,5,13],
"to": [5,10,14],
"faces": {
"up": {
"uv": [0.0,0.0,1.0,1.0],
"texture": "missingtexture"
},
"down": {
"uv": [0.0,0.0,1.0,1.0],
"texture": "missingtexture"
},
"west": {
"uv": [0,0,1,5],
"texture": "#laserRelay"
},
"east": {
"uv": [0,0,1,5],
"texture": "#laserRelay"
},
"north": {
"uv": [0,0,1,5],
"texture": "#laserRelay"
},
"south": {
"uv": [0,0,1,5],
"texture": "#laserRelay"
}
}
},
{
"from": [3,1,4],
"to": [4,4,12],
"faces": {
"up": {
"uv": [0,0,1,8],
"texture": "#laserRelay"
},
"down": {
"uv": [0,0,1,8],
"texture": "#laserRelay"
},
"west": {
"uv": [0,0,8,3],
"texture": "#laserRelay"
},
"east": {
"uv": [0,0,8,3],
"texture": "#laserRelay"
},
"north": {
"uv": [0,0,1,3],
"texture": "#laserRelay"
},
"south": {
"uv": [0,0,1,3],
"texture": "#laserRelay"
}
}
},
{
"from": [12,1,4],
"to": [13,4,12],
"faces": {
"up": {
"uv": [0,0,1,8],
"texture": "#laserRelay"
},
"down": {
"uv": [0,0,1,8],
"texture": "#laserRelay"
},
"west": {
"uv": [0,0,8,3],
"texture": "#laserRelay"
},
"east": {
"uv": [0,0,8,3],
"texture": "#laserRelay"
},
"north": {
"uv": [0,0,1,3],
"texture": "#laserRelay"
},
"south": {
"uv": [0,0,1,3],
"texture": "#laserRelay"
}
}
},
{
"from": [12,11,4],
"to": [13,14,12],
"faces": {
"up": {
"uv": [0,0,1,8],
"texture": "#laserRelay"
},
"down": {
"uv": [0,0,1,8],
"texture": "#laserRelay"
},
"west": {
"uv": [0,0,8,3],
"texture": "#laserRelay"
},
"east": {
"uv": [0,0,8,3],
"texture": "#laserRelay"
},
"north": {
"uv": [0,0,1,3],
"texture": "#laserRelay"
},
"south": {
"uv": [0,0,1,3],
"texture": "#laserRelay"
}
}
},
{
"from": [3,11,4],
"to": [4,14,12],
"faces": {
"up": {
"uv": [0,0,1,8],
"texture": "#laserRelay"
},
"down": {
"uv": [0,0,1,8],
"texture": "#laserRelay"
},
"west": {
"uv": [0,0,8,3],
"texture": "#laserRelay"
},
"east": {
"uv": [0,0,8,3],
"texture": "#laserRelay"
},
"north": {
"uv": [0,0,1,3],
"texture": "#laserRelay"
},
"south": {
"uv": [0,0,1,3],
"texture": "#laserRelay"
}
}
},
{
"from": [2,4,4],
"to": [3,5,12],
"faces": {
"up": {
"uv": [0,0,1,8],
"texture": "#laserRelay"
},
"down": {
"uv": [0,0,1,8],
"texture": "#laserRelay"
},
"west": {
"uv": [0,0,8,1],
"texture": "#laserRelay"
},
"east": {
"uv": [0,0,8,1],
"texture": "#laserRelay"
},
"north": {
"uv": [0,0,1,1],
"texture": "#laserRelay"
},
"south": {
"uv": [0,0,1,1],
"texture": "#laserRelay"
}
}
},
{
"from": [2,10,4],
"to": [3,11,12],
"faces": {
"up": {
"uv": [0,0,1,8],
"texture": "#laserRelay"
},
"down": {
"uv": [0,0,1,8],
"texture": "#laserRelay"
},
"west": {
"uv": [0,0,8,1],
"texture": "#laserRelay"
},
"east": {
"uv": [0,0,8,1],
"texture": "#laserRelay"
},
"north": {
"uv": [0,0,1,1],
"texture": "#laserRelay"
},
"south": {
"uv": [0,0,1,1],
"texture": "#laserRelay"
}
}
},
{
"from": [13,10,4],
"to": [14,11,12],
"faces": {
"up": {
"uv": [0,0,1,8],
"texture": "#laserRelay"
},
"down": {
"uv": [0,0,1,8],
"texture": "#laserRelay"
},
"west": {
"uv": [0,0,8,1],
"texture": "#laserRelay"
},
"east": {
"uv": [0,0,8,1],
"texture": "#laserRelay"
},
"north": {
"uv": [0,0,1,1],
"texture": "#laserRelay"
},
"south": {
"uv": [0,0,1,1],
"texture": "#laserRelay"
}
}
},
{
"from": [13,4,4],
"to": [14,5,12],
"faces": {
"up": {
"uv": [0,0,1,8],
"texture": "#laserRelay"
},
"down": {
"uv": [0,0,1,8],
"texture": "#laserRelay"
},
"west": {
"uv": [0,0,8,1],
"texture": "#laserRelay"
},
"east": {
"uv": [0,0,8,1],
"texture": "#laserRelay"
},
"north": {
"uv": [0,0,1,1],
"texture": "#laserRelay"
},
"south": {
"uv": [0,0,1,1],
"texture": "#laserRelay"
}
}
},
{
"from": [2,5,4],
"to": [3,10,5],
"faces": {
"up": {
"uv": [0.0,0.0,1.0,1.0],
"texture": "missingtexture"
},
"down": {
"uv": [0.0,0.0,1.0,1.0],
"texture": "missingtexture"
},
"west": {
"uv": [0,0,1,5],
"texture": "#laserRelay"
},
"east": {
"uv": [0,0,1,5],
"texture": "#laserRelay"
},
"north": {
"uv": [0,0,1,5],
"texture": "#laserRelay"
},
"south": {
"uv": [0,0,1,5],
"texture": "#laserRelay"
}
}
},
{
"from": [2,5,11],
"to": [3,10,12],
"faces": {
"up": {
"uv": [0.0,0.0,1.0,1.0],
"texture": "missingtexture"
},
"down": {
"uv": [0.0,0.0,1.0,1.0],
"texture": "missingtexture"
},
"west": {
"uv": [0,0,1,5],
"texture": "#laserRelay"
},
"east": {
"uv": [0,0,1,5],
"texture": "#laserRelay"
},
"north": {
"uv": [0,0,1,5],
"texture": "#laserRelay"
},
"south": {
"uv": [0,0,1,5],
"texture": "#laserRelay"
}
}
},
{
"from": [13,5,11],
"to": [14,10,12],
"faces": {
"up": {
"uv": [0.0,0.0,1.0,1.0],
"texture": "missingtexture"
},
"down": {
"uv": [0.0,0.0,1.0,1.0],
"texture": "missingtexture"
},
"west": {
"uv": [0,0,1,5],
"texture": "#laserRelay"
},
"east": {
"uv": [0,0,1,5],
"texture": "#laserRelay"
},
"north": {
"uv": [0,0,1,5],
"texture": "#laserRelay"
},
"south": {
"uv": [0,0,1,5],
"texture": "#laserRelay"
}
}
},
{
"from": [13,5,4],
"to": [14,10,5],
"faces": {
"up": {
"uv": [0.0,0.0,1.0,1.0],
"texture": "missingtexture"
},
"down": {
"uv": [0.0,0.0,1.0,1.0],
"texture": "missingtexture"
},
"west": {
"uv": [0,0,1,5],
"texture": "#laserRelay"
},
"east": {
"uv": [0,0,1,5],
"texture": "#laserRelay"
},
"north": {
"uv": [0,0,1,5],
"texture": "#laserRelay"
},
"south": {
"uv": [0,0,1,5],
"texture": "#laserRelay"
}
}
}
]
}

View file

@ -0,0 +1,33 @@
{
"ambientocclusion": false,
"textures": {
"particle": "actuallyadditions:blocks/blockTinyTorch",
"torch": "actuallyadditions:blocks/blockTinyTorch"
},
"elements": [
{ "from": [ 7, 0, 7 ],
"to": [ 9, 5, 9 ],
"shade": false,
"faces": {
"down": { "uv": [ 7, 13, 9, 15 ], "texture": "#torch" },
"up": { "uv": [ 7, 11, 9, 13 ], "texture": "#torch" }
}
},
{ "from": [ 7, 0, 0 ],
"to": [ 9, 16, 16 ],
"shade": false,
"faces": {
"west": { "uv": [ 0, 0, 16, 16 ], "texture": "#torch" },
"east": { "uv": [ 0, 0, 16, 16 ], "texture": "#torch" }
}
},
{ "from": [ 0, 0, 7 ],
"to": [ 16, 16, 9 ],
"shade": false,
"faces": {
"north": { "uv": [ 0, 0, 16, 16 ], "texture": "#torch" },
"south": { "uv": [ 0, 0, 16, 16 ], "texture": "#torch" }
}
}
]
}

View file

@ -0,0 +1,36 @@
{
"ambientocclusion": false,
"textures": {
"particle": "actuallyadditions:blocks/blockTinyTorch",
"torch": "actuallyadditions:blocks/blockTinyTorch"
},
"elements": [
{ "from": [ -1, 3.5, 7 ],
"to": [ 1, 8.5, 9 ],
"rotation": { "origin": [ 0, 3.5, 8 ], "axis": "z", "angle": -22.5 },
"shade": false,
"faces": {
"down": { "uv": [ 7, 13, 9, 15 ], "texture": "#torch" },
"up": { "uv": [ 7, 11, 9, 13 ], "texture": "#torch" }
}
},
{ "from": [ -1, 3.5, 0 ],
"to": [ 1, 19.5, 16 ],
"rotation": { "origin": [ 0, 3.5, 8 ], "axis": "z", "angle": -22.5 },
"shade": false,
"faces": {
"west": { "uv": [ 0, 0, 16, 16 ], "texture": "#torch" },
"east": { "uv": [ 0, 0, 16, 16 ], "texture": "#torch" }
}
},
{ "from": [ -8, 3.5, 7 ],
"to": [ 8, 19.5, 9 ],
"rotation": { "origin": [ 0, 3.5, 8 ], "axis": "z", "angle": -22.5 },
"shade": false,
"faces": {
"north": { "uv": [ 0, 0, 16, 16 ], "texture": "#torch" },
"south": { "uv": [ 0, 0, 16, 16 ], "texture": "#torch" }
}
}
]
}

View file

@ -0,0 +1,6 @@
{
"parent": "actuallyadditions:item/standardItem",
"textures": {
"layer0": "actuallyadditions:blocks/blockTinyTorch"
}
}

View file

@ -0,0 +1,6 @@
{
"parent": "actuallyadditions:item/standardItem",
"textures": {
"layer0": "actuallyadditions:items/itemPlayerProbe"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 232 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 233 B

After

Width:  |  Height:  |  Size: 283 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 283 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 280 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 413 B

After

Width:  |  Height:  |  Size: 670 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 439 B

After

Width:  |  Height:  |  Size: 660 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 456 B

View file

@ -1,3 +1,28 @@
# 1.10.2-r51
* Made TiCon Rapier be able to be repaired in the Item Repairer
* Added Player Probe
* Renamed Mashed Food to bio mash
* Made the booklet search bar search a whole item's tooltip and not just the name
* Added different Energy Laser Relays for different amounts of power transfer
* Added Tiny Torch
* Booklet now states that the drill needs previous tiers of upgrades
* Made drill coloring not use all of the nbt, meaning you can color a drill without the upgrades being gone
* Made ActAdd tools work in hopefully most automatic farms etc.
# 1.10.2-r50
* Changed the name of the coffee machine to coffee maker because that's apparently a more proper name
* Fixed the drill sometimes acting up on redstone and glowstone
* Fixed the particles of breaking with the drill being delayed making it look weird
* Fixed a crash with the InvTweaks sorting buttons in a storage crate
* TiCon tools now lose their broken tag when repairing them with the item repairer
* Added a config option for Solid XP dropping
* Fixed a bug with the game sometimes crashing when looking at an entity with the booklet in hand
* Fixed Drill, Crafter and Filter having an unlocalized name in the GUIs
# 1.10.2-r49
* Fixed a dube bug that caused the reconstructor to create about a thousand bajillion more items and blocks than it should.
* Yea. I'm pretty great. >_<
# 1.10.2-r48 # 1.10.2-r48
* Added Shock Suppressor, a block that will cause explosions not to happen * Added Shock Suppressor, a block that will cause explosions not to happen
* Added Phantom Placer Siding rule button * Added Phantom Placer Siding rule button

View file

@ -3,4 +3,4 @@
1.9=33 1.9=33
1.9.4=45 1.9.4=45
1.10=46 1.10=46
1.10.2=48 1.10.2=51