Jump to content


  • Posts

  • Joined

  • Last visited

Everything posted by winnetrie

  1. Srry to ask, but where do i find this "signature". I have been looking around, but i cannot find it. Srry if this sounds stupid.
  2. The config files generate after you have started your game once. They do not create by installing the mods
  3. I don't understand why it is so hard for people to download mods from most legit and official site called curseforge Here is a link curseforge <--- Download only from this page or from the mod owners official sites. Even better install the twitch app and use that to install mods. It let's you set up multiple profiles you can easily manage and install mods from within that app. The legit Official and most important free tools are there, please use it.
  4. I have added several liquids to the game and forge has added buckets for all those liquids. The liquids represent all kind of fruit juices (apple_juice, carrot_juice, lemon_juice, etc etc) I have also added bottles with the liquid inside What i want to achieve is that the game also knows that those bottles have the liquids. I tried by adding NBT data: @Override public void addInformation(ItemStack stack, @Nullable World worldIn, List<String> tooltip, ITooltipFlag flagIn) { NBTTagCompound nbt = stack.getTagCompound(); if (nbt == null) {nbt = new NBTTagCompound();} nbt.setString("FluidName", NBTliquid); nbt.setInteger("Amount", 1000); stack.setTagCompound(nbt); } where NBTliquid is a variable (String) i get from the constructor. I have also CraftTweaker installed so i did /ct hand with an apple_juice bottle in my hand to see the tag on it. This is the result from a bucket: <forge:bucketfilled>.withTag({FluidName: "apple_juice", Amount: 1000}) This is the result from a bottle: <winnetriesexpansionmod:apple_juice_bottle>.withTag({FluidName: "apple_juice", Amount: 1000}) Am i'm doing something wrong here. The bucket works properly but the bottle not. For example the bucket is accepted in various mods that load and unloads liquids, the bottles are not
  5. Oh ok thanks, i thought it wouldn't build otherwise.
  6. Could anyone help me with this pls? I just want to know where to put the railcraftapi.jar so i can use it in my mod. Nvm, found it myself. For future searches: 1: put the api jar in "lib" folder 2: rightclick within your IDE(eclipse) the api jar and click "add to buildpath" 3: inside build.gradle add compile files("lib/railcraft-12.0.0-api.jar") in the depencies section 4: done, you can now use it and reference it within your project and it will compile properly
  7. If for example i want to use the railcraft api, how do i properly add it? What i want to do: removing and adding recipes for the rollingmachine (since crafttweaker has nu support for railcraft latest version) Ofcourse i searched the web and this forum for info. What i found was i had to extract the files into src\api\java folder, but doing so doesn't make it useable. It says there isn't source attached.
  8. First of all to answer your question, go ingame and and press F3 + H....This will show advanced tooltips. Now put your item/block in your inventory and hover with your mouse over it. You should see a gray tekst, that tekst contains your modid followed with ":" and then the name of your item/block Actually to be short the gray tekst is the registryname of your item/block. So what does it say? …."imagespawner:imagespawner" ? DavidM is right. Why do you use an enum for naming stuff? Why do you use 2 separate names for registryname and unlocalizedname? Something i do is passing a resourcelocation in the constructor for example my invar block class in a simple way: public class BlockInvar extends Block{ public BlockInvar(ResourceLocation registryname) { super(Material.IRON, MapColor.IRON); setSoundType(SoundType.METAL); setHardness(7.0F); setResistance(10.0F); //setHarvestLevel("pickaxe", 3); setUnlocalizedName(registryname.toString()); setRegistryName(registryname); setCreativeTab(Utilities.WINNETRIESEXPANSIONMOD); } } You can still use an Enum if you like, but just keep 1 name. Creating the block would look like this: ModBlockReference.invar_block = new BlockInvar(new ResourceLocation(References.PREFIX + "block_invar")) If you want to use your enum naming change "block_invar" to Reference.ImageSpawnerEnum.IMAGESPAWNER.getRegistryName() But i think that enum thing is just overkill in my opinion
  9. This is true. Just make your class extend Block. You also should not use this IHasModel thing. I bet you are also using a common proxy wich is also bad!
  10. You can set the blocksound with setSoundType(SoundType.GLASS); Inside the constructor. Where you have your other setters
  11. I think this has to be if(!worldIn.isRemote) Because you want to do the following action if the statement is NOT true EDIT: Just checked the workbench class, you should check the onBlockActivated method again. You forgot an else statement
  12. Can anyone help me with this? I only need to know why the flowing liquid texture is zoomed in. the texture is 16 x 512 EDIT: I just tried to make the texture 32 x 512, because i have to try something. This seems to fix the texture problem, now the flowing texture has the appropriate texture format 16 x 16 and not 8 x 8. I'm not sure this is the right way to do it nor do i know why this happens.
  13. Well, found out that i misspelled something in the blockstate. I had "fluids" instead of "fluid" The fluid has now a texture in game. 1 more weird thing is when the fluid is flowing, his texture looks like it is zoomed in by a x2 factor Edit: I've added a screenshot
  14. I have made a custom fluid, but for some reason the blockstate is not working. blockstate file: fluidclass: fluidblock class: i made a renderHandler class: a fluidinit class: inside the blockregistry event: Btw it is registering just the blockstate isn't loading, so i have purple/black squared textures here the client class: and at last the main mod class: I have searched this forum for similar problems but none apply to me (as far as i know). I don't why is doesn' tload the blockstate Btw the blockstate file is inside assets/winnetriesexpansionmod/blockstates package the textures with the mcmeta files are at assets/winnetriesexpansionmod/textures/blocks the texture files are called : liquid_invar_flow.png, liquid_invar_flow.png.mcmeta, liquid_invar_still.png, liquid_invar_still.png.mcmeta
  15. You can also use the twitch app (was called curse app before), it has it's own section for modded minecraft and it's directly linked to the curse website. You can then setup multiple profiles and install mods from in the app. The app install's the right mod for the version you want and it comes directly from the Original site. I suggest you search on YouTube how to install twitch for minecraft and how to use it. It's pretty easy to use. Me, family and friends are using it too. There are also other apps that will probebly do the same. I prefer the twitch app and as far as i know, it is the only offcial app for this.
  16. Thank you, didn't know that. i tried setupDecompWorkspace but that doesn't work anymore. Problem solved.
  17. 1-Download the mdk 2-put the mdk in a folder …….\minecraft_modding\winnetriesexpansionmod1.13.2 3-Extract the mdk in that folder. 4-Run gradlew eclipse with cmd in that folder 5-Open eclipse and select workspace ……\minecraft_modding 6-In eclipse, click File -> open projects from file system and select the …..\minecraft_modding\winnetriesexpansionmod folder. 7-Done Those are the steps i did. I even tried completely clean with only the mdk example, gave me the same error. It only works with the workaround thing
  18. I'm using Eclipse and yes i did everything like i do Always. Or has something changed for setting up your environment for 1.13.2?
  19. Well , i did that already before. I know where the problem, what it is and why it does it. Just not how to solve it. I tried providing a dummy model and this seems to take away the multimodel error while not affecting my wall. I knew the wall blockstate needed a sort of base model, the problem is when providing 1 that model will be visible in all blockstates. Not something you want ofcourse. By providing a dummy model wich contains just a comment, fixes that visual bug/glitch however you want to call it. Important, the dummy model has to contain some information or else it won't load it or perhaps it will give an error. Look here: { "forge_marker": 1, "defaults": { "textures": { "wall": "minecraft:blocks/concrete_pink", "particle": "#wall" } }, "variants": { "up": { "true": { "submodel": {"wall_up": {"model": "wall_post"}} }, "false": {} }, "north": { "true": { "submodel": {"wall_north": {"model": "wall_side","uvlock": true}} }, "false": {} }, "east": { "true": { "submodel": {"wall_east": {"model": "wall_side","y": 90,"uvlock": true}} }, "false": {} }, "south": { "true": { "submodel": {"wall_south": {"model": "wall_side","y": 180,"uvlock": true}} }, "false": {} }, "west": { "true": { "submodel": {"wall_west": {"model": "wall_side","y": 270,"uvlock": true}} }, "false": {} }, "normal": { "model": "wall_inventory", "textures": { "all": "minecraft:blocks/concrete_pink" } }, "variant": { "default": { "model": "winnetriesexpansionmod:dummy", "textures": { "all": "minecraft:blocks/concrete_pink" } } } } } Here the dummy model: { "__comment": "An empty model", "elements": [ ] } I think this can be very helpfull to others with the same problem. I saw alot of mods i play who has the same error spam in the log, so i'm pretty sure this multumodel stuff is a real thing among other modders.
  20. could still need some help for this. I'm pretty sure it's because i haven't set a base model, but that isn't something i need. Oh wait maybe i can just point to an empty model......i'll try with a dummy model.
  21. Yes, but i found out why this happens. Because forge for 1.13.2 is still beta. I used the work around with "gradlew runClient"
  22. I am trying out modding for 1.13.2, but on startup i get this crash : Exception in thread "main" joptsimple.MissingRequiredOptionsException: Missing required option(s) [accessToken, version] at joptsimple.OptionParser.ensureRequiredOptions(OptionParser.java:426) at joptsimple.OptionParser.parse(OptionParser.java:400) at net.minecraft.client.main.Main.main(Main.java:63) I have no idea what this means and how to fix this. I am not able to find any proper documentation for 1.13.2
  23. Oh right, haha , i forgot the add the error. It's this: [Client thread/ERROR] [FML]: MultiModel minecraft:builtin/missing is empty (no base model or parts were provided/resolved) I don't think it's something ver bad, but ennoying. I have this message now 64 times, because i have added 64 walls
  24. Is there a way to suppress this warning/error, because it spams the log
  25. After a started creating walls for my mod i see this message appearing multiple times (i think the number of wall blocks i have) I'm pretty sure (99%) it comes from the wall blockstate file. I can't see what's wrong, maybe someone else: { "forge_marker": 1, "defaults": { "textures": { "wall": "minecraft:blocks/hardened_clay_stained_black", "particle": "#wall" } }, "variants": { "up": { "true": { "submodel": {"wall_up": {"model": "wall_post"}} }, "false": {} }, "north": { "true": { "submodel": {"wall_north": {"model": "wall_side","uvlock": true}} }, "false": {} }, "east": { "true": { "submodel": {"wall_east": {"model": "wall_side","y": 90,"uvlock": true}} }, "false": {} }, "south": { "true": { "submodel": {"wall_south": {"model": "wall_side","y": 180,"uvlock": true}} }, "false": {} }, "west": { "true": { "submodel": {"wall_west": {"model": "wall_side","y": 270,"uvlock": true}} }, "false": {} }, "normal": { "model": "wall_inventory", "textures": { "all": "minecraft:blocks/hardened_clay_stained_black" } }, "variant": { "default": { "textures": { "all": "minecraft:blocks/hardened_clay_stained_black" } } } } } Everything in the game is fine, i can't see any visual bugs or something. Here is the wall class: public class BlockWinnetrieWall extends Block{ public static final PropertyBool UP = PropertyBool.create("up"); public static final PropertyBool NORTH = PropertyBool.create("north"); public static final PropertyBool EAST = PropertyBool.create("east"); public static final PropertyBool SOUTH = PropertyBool.create("south"); public static final PropertyBool WEST = PropertyBool.create("west"); protected static final AxisAlignedBB[] AABB_BY_INDEX = new AxisAlignedBB[] {new AxisAlignedBB(0.25D, 0.0D, 0.25D, 0.75D, 1.0D, 0.75D), new AxisAlignedBB(0.25D, 0.0D, 0.25D, 0.75D, 1.0D, 1.0D), new AxisAlignedBB(0.0D, 0.0D, 0.25D, 0.75D, 1.0D, 0.75D), new AxisAlignedBB(0.0D, 0.0D, 0.25D, 0.75D, 1.0D, 1.0D), new AxisAlignedBB(0.25D, 0.0D, 0.0D, 0.75D, 1.0D, 0.75D), new AxisAlignedBB(0.3125D, 0.0D, 0.0D, 0.6875D, 0.875D, 1.0D), new AxisAlignedBB(0.0D, 0.0D, 0.0D, 0.75D, 1.0D, 0.75D), new AxisAlignedBB(0.0D, 0.0D, 0.0D, 0.75D, 1.0D, 1.0D), new AxisAlignedBB(0.25D, 0.0D, 0.25D, 1.0D, 1.0D, 0.75D), new AxisAlignedBB(0.25D, 0.0D, 0.25D, 1.0D, 1.0D, 1.0D), new AxisAlignedBB(0.0D, 0.0D, 0.3125D, 1.0D, 0.875D, 0.6875D), new AxisAlignedBB(0.0D, 0.0D, 0.25D, 1.0D, 1.0D, 1.0D), new AxisAlignedBB(0.25D, 0.0D, 0.0D, 1.0D, 1.0D, 0.75D), new AxisAlignedBB(0.25D, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D), new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, 0.75D), new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D)}; protected static final AxisAlignedBB[] CLIP_AABB_BY_INDEX = new AxisAlignedBB[] {AABB_BY_INDEX[0].setMaxY(1.5D), AABB_BY_INDEX[1].setMaxY(1.5D), AABB_BY_INDEX[2].setMaxY(1.5D), AABB_BY_INDEX[3].setMaxY(1.5D), AABB_BY_INDEX[4].setMaxY(1.5D), AABB_BY_INDEX[5].setMaxY(1.5D), AABB_BY_INDEX[6].setMaxY(1.5D), AABB_BY_INDEX[7].setMaxY(1.5D), AABB_BY_INDEX[8].setMaxY(1.5D), AABB_BY_INDEX[9].setMaxY(1.5D), AABB_BY_INDEX[10].setMaxY(1.5D), AABB_BY_INDEX[11].setMaxY(1.5D), AABB_BY_INDEX[12].setMaxY(1.5D), AABB_BY_INDEX[13].setMaxY(1.5D), AABB_BY_INDEX[14].setMaxY(1.5D), AABB_BY_INDEX[15].setMaxY(1.5D)}; private IBlockState parentBlock; public static final PropertyEnum<EnumType> VARIANT = PropertyEnum.<EnumType>create("variant", EnumType.class); public BlockWinnetrieWall(IBlockState modelBlock, ResourceLocation registryname) { super(modelBlock.getMaterial()); this.setDefaultState(this.blockState.getBaseState().withProperty(UP, Boolean.valueOf(false)).withProperty(NORTH, Boolean.valueOf(false)).withProperty(EAST, Boolean.valueOf(false)).withProperty(SOUTH, Boolean.valueOf(false)).withProperty(WEST, Boolean.valueOf(false)).withProperty(VARIANT, EnumType.DEFAULT)); setUnlocalizedName(registryname.toString()); setRegistryName(registryname); setCreativeTab(Utilities.WINNETRIETERRACOTTAEXPANSION); useNeighborBrightness = true; parentBlock = modelBlock; } @Override public SoundType getSoundType(IBlockState state, World world, BlockPos pos, @Nullable Entity entity){ return parentBlock.getBlock().getSoundType(state, world, pos, entity); } @Override public float getBlockHardness(IBlockState blockState, World worldIn, BlockPos pos) { return parentBlock.getBlockHardness(worldIn, pos); } @Override public MapColor getMapColor(IBlockState state, IBlockAccess worldIn, BlockPos pos) { return parentBlock.getMapColor(worldIn, pos); } @Override public int damageDropped(IBlockState state) { return 0; } @Override public IBlockState getStateFromMeta(int meta) { return this.getDefaultState(); } @Override public int getMetaFromState(IBlockState state) { return state.getValue(VARIANT).ordinal(); } @Override protected BlockStateContainer createBlockState() { return new BlockStateContainer(this, new IProperty[] {UP, NORTH, EAST, WEST, SOUTH, VARIANT}); } public enum EnumType implements IStringSerializable { DEFAULT(); @Override @Nonnull public String getName() { return "default"; } } public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) { state = this.getActualState(state, source, pos); return AABB_BY_INDEX[getAABBIndex(state)]; } public void addCollisionBoxToList(IBlockState state, World worldIn, BlockPos pos, AxisAlignedBB entityBox, List<AxisAlignedBB> collidingBoxes, @Nullable Entity entityIn, boolean isActualState) { if (!isActualState) { state = this.getActualState(state, worldIn, pos); } addCollisionBoxToList(pos, entityBox, collidingBoxes, CLIP_AABB_BY_INDEX[getAABBIndex(state)]); } @Nullable public AxisAlignedBB getCollisionBoundingBox(IBlockState blockState, IBlockAccess worldIn, BlockPos pos) { blockState = this.getActualState(blockState, worldIn, pos); return CLIP_AABB_BY_INDEX[getAABBIndex(blockState)]; } private static int getAABBIndex(IBlockState state) { int i = 0; if (((Boolean)state.getValue(NORTH)).booleanValue()) { i |= 1 << EnumFacing.NORTH.getHorizontalIndex(); } if (((Boolean)state.getValue(EAST)).booleanValue()) { i |= 1 << EnumFacing.EAST.getHorizontalIndex(); } if (((Boolean)state.getValue(SOUTH)).booleanValue()) { i |= 1 << EnumFacing.SOUTH.getHorizontalIndex(); } if (((Boolean)state.getValue(WEST)).booleanValue()) { i |= 1 << EnumFacing.WEST.getHorizontalIndex(); } return i; } public boolean isFullCube(IBlockState state) { return false; } /** * Determines if an entity can path through this block */ public boolean isPassable(IBlockAccess worldIn, BlockPos pos) { return false; } /** * Used to determine ambient occlusion and culling when rebuilding chunks for render */ public boolean isOpaqueCube(IBlockState state) { return false; } private boolean canConnectTo(IBlockAccess worldIn, BlockPos pos, EnumFacing p_176253_3_) { IBlockState iblockstate = worldIn.getBlockState(pos); Block block = iblockstate.getBlock(); BlockFaceShape blockfaceshape = iblockstate.getBlockFaceShape(worldIn, pos, p_176253_3_); boolean flag = blockfaceshape == BlockFaceShape.MIDDLE_POLE_THICK || blockfaceshape == BlockFaceShape.MIDDLE_POLE ;//&& block instanceof BlockFenceGate; return !isExcepBlockForAttachWithPiston(block) && blockfaceshape == BlockFaceShape.SOLID || flag; } protected static boolean isExcepBlockForAttachWithPiston(Block p_194143_0_) { return Block.isExceptBlockForAttachWithPiston(p_194143_0_) || p_194143_0_ == Blocks.BARRIER || p_194143_0_ == Blocks.MELON_BLOCK || p_194143_0_ == Blocks.PUMPKIN || p_194143_0_ == Blocks.LIT_PUMPKIN; } @SideOnly(Side.CLIENT) public boolean shouldSideBeRendered(IBlockState blockState, IBlockAccess blockAccess, BlockPos pos, EnumFacing side) { return side == EnumFacing.DOWN ? super.shouldSideBeRendered(blockState, blockAccess, pos, side) : true; } /** * Get the actual Block state of this Block at the given position. This applies properties not visible in the * metadata, such as fence connections. */ public IBlockState getActualState(IBlockState state, IBlockAccess worldIn, BlockPos pos) { boolean flag = canWallConnectTo(worldIn, pos, EnumFacing.NORTH); boolean flag1 = canWallConnectTo(worldIn, pos, EnumFacing.EAST); boolean flag2 = canWallConnectTo(worldIn, pos, EnumFacing.SOUTH); boolean flag3 = canWallConnectTo(worldIn, pos, EnumFacing.WEST); boolean flag4 = flag && !flag1 && flag2 && !flag3 || !flag && flag1 && !flag2 && flag3; return state.withProperty(UP, Boolean.valueOf(!flag4 || !worldIn.isAirBlock(pos.up()))).withProperty(NORTH, Boolean.valueOf(flag)).withProperty(EAST, Boolean.valueOf(flag1)).withProperty(SOUTH, Boolean.valueOf(flag2)).withProperty(WEST, Boolean.valueOf(flag3)); } /** * Get the geometry of the queried face at the given position and state. This is used to decide whether things like * buttons are allowed to be placed on the face, or how glass panes connect to the face, among other things. * <p> * Common values are {@code SOLID}, which is the default, and {@code UNDEFINED}, which represents something that * does not fit the other descriptions and will generally cause other things not to connect to the face. * * @return an approximation of the form of the given face */ public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) { return face != EnumFacing.UP && face != EnumFacing.DOWN ? BlockFaceShape.MIDDLE_POLE_THICK : BlockFaceShape.CENTER_BIG; } /* ======================================== FORGE START ======================================== */ @Override public boolean canBeConnectedTo(IBlockAccess world, BlockPos pos, EnumFacing facing) { Block connector = world.getBlockState(pos.offset(facing)).getBlock(); return connector instanceof BlockWall || connector instanceof BlockWinnetrieWall; } private boolean canWallConnectTo(IBlockAccess world, BlockPos pos, EnumFacing facing) { BlockPos other = pos.offset(facing); Block block = world.getBlockState(other).getBlock(); return block.canBeConnectedTo(world, other, facing.getOpposite()) || canConnectTo(world, other, facing.getOpposite()); } public boolean canPlaceTorchOnTop(IBlockState state, IBlockAccess world, BlockPos pos) { return true; } For the most part i just copy-pasted the whole BlockWall class, because of the enums that's hardcoded in that class (cobblestone & mossy cobblestone). I do not get any other errors of any kind. Only the multimodel part
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.