| // Helpful buffer methods I'm using | |
| public long sizeOf(FloatBuffer buf) { | |
| return buf.capacity() * 4L; | |
| } |
| NBTTagCompound testtag = new NBTTagCompound(); | |
| testtag.setString("group", "marble"); | |
| testtag.setTag("stack", new ItemStack(Items.DIAMOND_PICKAXE, 1, 100).serializeNBT()); | |
| FMLInterModComms.sendMessage(MOD_ID, IMC.ADD_VARIATION_2.toString(), testtag); | |
| testtag = new NBTTagCompound(); | |
| testtag.setString("group", "marble"); | |
| testtag.setString("block", Blocks.WOOL.getRegistryName().toString()); | |
| FMLInterModComms.sendMessage(MOD_ID, IMC.ADD_VARIATION_2.toString(), testtag); | |
| testtag = new NBTTagCompound(); | |
| testtag.setString("group", "marble"); |
| public class ExceptionInDependencyTest { | |
| @Mod(modid = "dependency", name = "Dependency", version = "1.0.0") | |
| public static class Dependency { | |
| @Mod.EventHandler | |
| public void init(FMLPreInitializationEvent event) { | |
| throw new RuntimeException("waldo"); | |
| } | |
| } | |
| @Mod(modid = "dependent", name = "Dependent", version = "1.0.0", dependencies = "required-after:dependency") |
| private static void parseStates(Block block, List<Map<String, String>> states, Collection<IBlockState> data) { | |
| if (states.isEmpty()) { | |
| data.addAll(block.getBlockState().getValidStates()); | |
| } else { | |
| for (Map<String, String> state : states) { | |
| data.add(parseState(block, state)); | |
| } | |
| } | |
| } |
| var colors = [ | |
| 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, | |
| 3, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 3, | |
| 3, 12, 12, 3, 3, 12, 12, 12, 3, 12, 13, 13, 12, 10, 12, 12, 5, 12, 12, 12, 12, 3, | |
| 3, 12, 12, 3, 12, 3, 12, 12, 3, 12, 13, 12, 12, 10, 10, 12, 5, 5, 5, 12, 12, 3, | |
| 3, 12, 12, 3, 3, 12, 12, 3, 12, 12, 13, 13, 12, 10, 12, 12, 5, 12, 5, 12, 12, 3, | |
| 3, 12, 12, 3, 12, 3, 12, 3, 12, 12, 13, 12, 12, 10, 10, 12, 5, 5, 5, 12, 12, 3, | |
| 3, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 3, | |
| 3, 12, 12, 12, 12, 12, 12, 12, 12, 12, 3, 3, 12, 12, 12, 12, 12, 12, 12, 12, 12, 3, | |
| 3, 12, 12, 12, 12, 12, 12, 12, 3, 3, 1, 2, 3, 3, 12, 12, 12, 12, 12, 12, 12, 3, |
| { | |
| "ores" : { | |
| "coal_ore": { | |
| "models" : [ | |
| "coal_ore#normal" | |
| ], | |
| "texture" : "coal_ore", | |
| "preserveShading": false | |
| }, | |
| "iron_ore" : { |
| package tterrag.placelapse; | |
| import java.awt.image.BufferedImage; | |
| import java.io.File; | |
| import java.io.IOException; | |
| import java.io.InputStream; | |
| import java.net.URL; | |
| import java.util.ArrayDeque; | |
| import java.util.Queue; | |
| import java.util.Scanner; |
| package com.creatubbles.ctbmod.client; | |
| import java.awt.Graphics2D; | |
| import java.awt.RenderingHints; | |
| import java.awt.image.BufferedImage; | |
| import java.io.File; | |
| import java.io.FileNotFoundException; | |
| import java.io.FileOutputStream; | |
| import java.nio.IntBuffer; | |
| import java.util.List; |
A capability can be thought of much like a trait. It allows exposing features in a dynamic and flexible way, without having to resort to directly implementing many interfaces.
In general terms, a capability is a marker object (generally a singleton) which provides an implementation of the capability, specific to the parent object. For instance, in the case of a chest with an inventory, we have:
-
The parent object - this is the Tile Entity, ItemStack, Entity, or whatever it may be that "owns" the capability. In this case, it is the chest Tile Entity.
-
The capability - the "idea" of an inventory can be considered the capability. A capability is not any one implementation of an inventory, but more of a contract stating whether the parent object has the ability (or capability) to be treated as an inventory.