Compare commits

...

274 Commits

Author SHA1 Message Date
yueh 36d6681eac Rework fuzzy comparison for 99 percent threshold (#3367)
* Rework fuzzy comparison for 99 percent threshold

The current implementation is quite convoluted and can handle 99%
incorrectly when items exceed a certain damage range.

* Use metadata explicitly for comparison

Some item could use metadata to pack damageable and undamageable items
into the same id. Thus could lead to get ItemStack#getItemDamage() to
return bogus values for undamageable items.
2018-02-05 15:20:02 +01:00
yueh 6cffe93970 Fixes #3370: Avoid caching the model for facades locally. (#3371) 2018-02-05 15:19:20 +01:00
yueh b1472c58d0 Fixes #3363: Energy providers/requesters incorrectly removed on simulate (#3364) 2018-01-29 15:30:56 +01:00
yueh 96450a76c7 Fixes #3239: Torches should not be placeable on cranks. (#3359) 2018-01-28 13:47:49 +01:00
yueh ac209053b9 Fixes #3345: Added missing sky stone brick recipes. (#3357) 2018-01-28 13:31:07 +01:00
Foxgreat dce1aa37eb Update ru_RU.lang (#3336) 2018-01-28 12:52:53 +01:00
sfs131010 0b6831e4d7 Update zh_TW.lang (#3337) 2018-01-28 12:52:25 +01:00
yueh da6d8ba9a8 Fixes #3338: Upgrade inventory dupe bug due to ignoring player hand. (#3340) 2018-01-28 12:50:20 +01:00
yueh f0e45c7a3c Fixes #3288: Fixes various item rotations when held in 3rd person. (#3330) 2018-01-14 14:36:04 +01:00
fscan cbfc88c87f Fix light sync (#3304)
* Sync light opacity changes to client
* While at it, also fix Light P2P
* Use int for opacity, dont store it in NBT
2018-01-14 13:44:12 +01:00
yueh 8c5842aca9 Fixes #3315: Slightly more permissive checks for autocrafting (#3319)
* Fixes #3315: Slightly more permissive checks for autocrafting

Also fixes a bug in the fallback for looking up patterns to only use
ItemStack.EMPTY.
2018-01-14 13:43:31 +01:00
yueh 483049f555 Fixes #3293: Only update light level if the panel-facing block changes. (#3302) 2017-12-31 13:11:26 +01:00
yueh a7a65ae39d Fixes #3296: Prevent invalid TileEntites from updating their block. (#3301)
Updating the blockstate of invalid TEs will cause Forge to restore the
block including the TE leading to invalid TEs sticking around after
being moved.
2017-12-31 13:06:18 +01:00
yueh 45878df17d Fixes #3286: Incorrectly inverted hasSkyLight causes crashes on spatial transfer. (#3299) 2017-12-31 13:06:08 +01:00
yueh 98142d8ade Fixes CraftTweaker deploying incomplete releases. (#3300)
Due to CraftTweaker not deploying necessary dependencies, we cannot
rely on building against the most recent compatible version. Instead we
have to build against a specific known release to avoid it but have to
risk incompatibilities should there be changes on later versions.
2017-12-30 11:12:04 +01:00
yueh 7956872d1d Reworked IO Port to handle StorageChannels better. (#3284)
* Reworked IO Port to handle custom StorageChannels in a better way.
* Added a transferFactor to `IStorageChannel` to allow addons to speedup the IO Port to transfer faster. E.g. 1000 mB fluid as fast as transfering 1 bucket (item) per operation, not just 1 mB. 
* Also some changes to avoid moving fluids being 1000x as energy expensive as items.
2017-12-21 19:12:45 +01:00
yueh e243c8e9a2 Adds a debug generator for ForgeEnergy. (#3259)
* Adds a debug generator for ForgeEnergy.

This adds a simple debug block to test external energy injection via
ForgeEnergy and not rely solely on creative cells.

The energy has two functions. The first is acting as an infinite
ForgEnergy battery, this is unused by AE2 itself as nothing pulls
energy.
The second one is injecting energy every tick into any adjacent block
accepting ForgeEnergy.
The base generation is 8 per tick, but this is increased by the power of
adjacent TileEnergyGenerators.
2017-12-21 17:29:39 +01:00
yueh 641d0d40cc Fixes #3265: Do not strip special chars when extracting recipes. (#3266) 2017-12-21 17:28:31 +01:00
yueh 50fad685b6 Fixes #3282: Stacksizes > 64 prevent applicator from cycling. (#3287) 2017-12-21 17:28:16 +01:00
yueh 1ad49edd76 Fixes #3260: Only match damaged items when selected and set to 99%. (#3261) 2017-12-01 21:14:29 +01:00
yueh 7ceaa4cc3e Fixes #3217: Allow caps to be used as P2P attunements. (#3257)
Adds a more abstract approach to map a cap to a certain type instead of
the hardcoded ForgeEnergy case.
Reorders the check from exact ItemStack > ModId > ForgeEnergy to
ItemStack > Cap > ModId. Thus the mod wildcard will be used last.
Support for ForgeEnergy and FluidHandlerItems by default.
Result for items supporting multiple capabilities is not defined.
2017-12-01 21:14:11 +01:00
yueh b70c86542b Fixes #3255: Cache invalid patterns instead computing them every frame. (#3256) 2017-12-01 21:13:23 +01:00
yueh c1197c0084 Updated to latest Forge RB. (#3250)
While this is not ideal for a stable release, switching to the latest RB
of Forge avoids the broken recipes in previous versions.
2017-11-26 15:46:38 +01:00
fscan f0d807f0a2 Rework ContainerInscriber validation (#3238)
* Correctly handle metadata wildcard for inscriber inputs
2017-11-26 15:46:02 +01:00
fscan 5fa2c0ab27 Deprecate AE2 recipe system. (#3247)
* Deprecate aerecipes to indicate that they are going away soon.
2017-11-26 15:45:34 +01:00
fscan 3063bd887c Revert DamageableRecipe changes (#3246)
Forge fixed this after all. This is no longer needed.
2017-11-26 15:44:56 +01:00
Florian Scandella fac4a8f9dc Fix typo 2017-11-26 14:38:09 +01:00
fscan 9d8226da19 Remove swingArm in IToolHammer implementation. (#3249)
Fixes #3248
2017-11-25 13:38:22 +01:00
yueh 33754d289d Fixes #932: Fire ExplosionEvent.Detonate when tiny TNT explodes. (#3229)
This still bypasses the start event to prevent it from ever being
cancelled.
2017-11-23 11:06:46 +01:00
fscan 959672dae3 Add CraftTweaker support (#3231) 2017-11-22 21:09:26 +01:00
fscan 90c17c09a8 Add custom recipe for damageable Ingredients (#3230) 2017-11-17 16:20:53 +01:00
yueh e0bf7223e0 Refactors grid connections (#3219)
Extracted all checks and subsequent updates to a factory method from the constructor.
Reordered checks to check for nulls before anything else.
Also existing connections before security breaks.
Fixes TileController#checkController() using the wrong position.
Added debug logging for failed connections.
Improved logging.
Inversed boolean so false no longer means security check passed.
Only issue a security break on SecurityConnectionException.
2017-11-12 18:13:59 +01:00
fscan ba9af94228 Fix StorageBus not updating item count correctly (#3218)
* Queue tick instead of ticking immediatley
2017-11-12 18:12:56 +01:00
yueh 122b6163dc Fixes #3209: Reset stack to prevent leaking meaningful ones (#3210) 2017-11-12 12:53:40 +01:00
yueh fab42ccc75 Use craftinggrid to check existing patterns for JEI recipe transfer. (#3202) 2017-11-12 12:48:18 +01:00
yueh f5dd2c8b0a Fixes tooltips for ME Slots (#3205)
No longer strips colors from names, lore, etc.
Now uses the translation again for "Items Stored:" instead of a hardcoded string.
Removed obsolete methods.
2017-11-12 12:35:05 +01:00
fscan a126112a2d Rework ImportBus (#3206)
Fixes #3201
2017-11-11 19:59:11 +01:00
fscan 99cda5f5a3 Cleanup recipe factories (#3207)
Fixes #3200
2017-11-11 17:51:20 +01:00
Florian Scandella 56a5363528 Fix NetworkToolViewer stack overflow, saveguard against markDirty recursion.
fixes #3199
2017-11-08 13:17:34 +01:00
fscan be65edbd5b Set base biome to "void" to shut up warning. (#3194)
Fixes #3118
2017-11-05 03:12:20 +01:00
fscan fe5d9251eb Spatial IO fixes (#3195)
* fix warning when transfering entities
* clean removed TileEntities from the ITickable list.
2017-11-04 23:12:17 +01:00
yueh 3cf48b2291 Remove channels per side from non smart cable states. (#3192)
These are unnecessary for these cable types and their rendering, but are
actually causing the cache to add duplicate models.
2017-11-04 13:24:57 +01:00
yueh cc4599b5fc Add a basic cache for cable models to avoid constant regeneration. (#3185)
* Add a basic cache for cable models to avoid constant regeneration.
* Improved equals/hashCode to ignore cable unrelated parts or facades.
2017-10-31 21:02:03 +01:00
yueh c1fa77df51 Fixes #3189: Formation plane unable to place special items. (#3190) 2017-10-31 16:12:08 +01:00
yueh 725fa491e6 Fixes #2611: Limit the adaptor to the main player inv. (#3188)
This prevents the result from various inventory actions to be placed into
the offhand or armor slots.
2017-10-31 14:05:05 +01:00
fscan e2a6cd1d57 Fix SkyChest bounding box (#3187)
fixes #3149
2017-10-31 01:40:17 +01:00
fscan 6ddf60fab8 Improve Facade rendering (#3182)
UV fix based on #2941 by @MoreThanHidden
fixes #2679, fixes #2625
2017-10-29 16:47:26 +01:00
fscan 2c07acfe81 Allow extraction for Condenser (#3179)
fixes #2960, fixes #2017, fixes #2602
2017-10-27 15:49:40 +02:00
fscan 3749742231 Fix handling of ItemStacks using getShareTag or Capabilites (#3171)
Temporary fix, ideally we would have a way to reference the original ItemStack so we don't need to send the full NBT data to the client.
2017-10-26 17:59:55 +02:00
yueh 74b9610b45 JSON resource cleanup (#3178)
Unified formatting
Added missing new lines at end of file
Removed superfluous spaces
Removed channel texture from dense covered cables.
2017-10-26 12:47:08 +02:00
yueh a725779ff6 Fixes #3175: Return the correct used amount. (#3176) 2017-10-26 12:46:49 +02:00
Flithor b82df25c75 Update zh_cn.lang (#3137) 2017-10-21 00:47:07 +02:00
fscan cc9b33b473 Implement Advancements (#3160)
Improvements welcome.
2017-10-20 23:54:18 +02:00
fscan 5496b746ea Fix Tiny TNT (#3162) 2017-10-20 23:52:55 +02:00
fscan f80f623ccf Fix AESharedItemStack#compareNBT to get consistent ordering. (#3169) 2017-10-20 23:25:18 +02:00
yueh cba6c5500f Fixes inscriber crash with name presses. 2017-10-16 21:41:44 +02:00
Florian Scandella bc8268af94 readd the non-fortune version 2017-10-15 16:07:12 +02:00
Florian Scandella 297cd16702 cleanup BlockQuartzOre and circumvent Forge bug 2017-10-15 15:53:31 +02:00
Florian Scandella 41711e50b9 Check for null in UpgradeInventory#saveChanges. Fixes #3159 2017-10-14 23:53:34 +02:00
Florian Scandella 2bfb8b75e8 Return correct item defintion. 2017-10-14 19:06:57 +02:00
yueh 58e96aa3de Fixes new modes not being considered JEI modes. 2017-10-14 14:39:05 +02:00
fscan 4f07b63b13 API cleanups (#3155)
* Remove obsolete api and fix some warning
* Move MEMonitorHandler to internal code and fix some warnings
* Rename exceptions to conform to naming scheme
2017-10-14 14:15:28 +02:00
yueh 905dd6c888 Added a clientside config to keep or clear the search filter when opening. (#3154)
Closes #3153.
2017-10-14 14:13:18 +02:00
yueh ab7f35a9ee Further StorageChannel refactoring (#3152)
Updated Drives to support more than Item and Fluid cells.
Use Collections.emptyList() instead of creating empty ArrayLists.
Fixes a NPE with uninitialized ME Chests.

Fixes #3150
2017-10-14 14:12:24 +02:00
yueh 6e81f698c0 Refactored StorageChannel enum into an interface (#3138)
This replaces the static enum with a more dynamic interface providing
factory methods for handling network storage.
2017-10-08 17:59:30 +02:00
fscan 8ad8ce68b5 Added optional TE wrench support. (#3145) 2017-10-08 17:58:57 +02:00
yueh 644194d0d6 Updated Forge to 1.12.2 RB (#3141)
* Updated Forge to 1.12.2 RB

Updated mappings to the MDK defaults for 1.12.2
Updated related depdencies

* With Forge 14.23 not available for < 1.12.2, we have to drop support.

With one potential fix for TE corruption, this step should be
reasonable.
2017-10-08 17:34:05 +02:00
yueh 95b27f490c Added Registry for customized charger rates. (#3139)
* Added Registry for customized charger rates.
* Added rates for all chargable items/block.
* Charger and Inscriber now store 1.6k AE each instead of 1.5k
* A crank applies 160 AE instead of 150
* Charged certus now requires 1.6k instead of 1.5k
2017-10-08 17:33:06 +02:00
fscan 6032c0328e Fixes #3143: Queue network list updates in onTick (#3144) 2017-10-08 15:12:27 +02:00
fscan e8d554d69d Fix Inscriber recipe registration (#3131)
Fixes #3129
2017-10-02 22:03:22 +02:00
fscan 1e15b23506 Rework AEItemStack (#3091)
* Use itemstack as itemdef
* HIGH_TAG/LOW_TAG should be compared both directions
* Remove getTagCompound
* Make Itemlist implementation independent
* Cache item id for performance reasons
* Add preconditions to saveguard against external meddling
* Chache itemDamage
* Remove IAEStackSearchKey for now, rename getDisplayStack
2017-09-30 17:18:30 +02:00
yueh 2ed7a5598a Improved IGrinderRegistry (#3110)
* Improved IGrinderRegistry

Added a builder for grinder recipes similar to IInscriberRegistry.
Replaced different add methods with this builder.
IIinscriberRegistry#addRecipe and removeRecipe now return true on success.
2017-09-29 20:32:59 +02:00
yueh 1c05dd5834 Further improvments for the energygrid. (#3107)
* Further improvments for the enerygrid.

Simplified quartz fiber.
Removed different Actionable code paths and replaced with a unified
approach.
Dropped lastProvider/Requester, it simply iterates over all, but still
drops them when necessary.
2017-09-29 20:32:20 +02:00
Florian Scandella 632d124359 Fix ArithmeticException in PartP2PFEPower 2017-09-26 22:14:04 +02:00
yueh 829c18e2bb Make UVLLoader a bit more robust (#3102)
Catch all parsing exceptions instead of propagating them upwards as
these are meaningless for the actual test.
Renamed uvlMarker to ae2_uvl_marker just in case some other mod uses the
same key.
2017-09-21 20:42:23 +02:00
yueh d3a5be7ed6 Fixes #3105: Dupe bug due to forge default itemhandler implementation. (#3106) 2017-09-21 20:41:30 +02:00
Florian Scandella 217cbf0982 we dont use scala ... 2017-09-17 13:38:44 +02:00
fscan 4dd0a4cd96 Improve terminal search box (#3064)
Uses exsting JEI filter in JEI mode.
Preselects text for easy delete/change without using rightclick.
QoL improvements for focus handling.
2017-09-16 17:44:16 +02:00
Florian Scandella 54c0ce43ea fix fluid p2p voiding excess liquids 2017-09-14 18:38:29 +02:00
yueh bd8f43acbf Updated to forge 1.12.1 RB. (#3087)
Updated related deps.
2017-09-12 13:23:17 +02:00
yueh 970630a90d Refactored the BaseActionSource (#3063)
* Refactored the BaseActionSource

It now uses an interface `IActionSource` instead of a concrete class and further
subclasses. 

Instead of relying on a specific class for a certain action type, it now
uses methods with Optional as return values to determine a player or
machine issuing an action. Refer to the JavaDocs for the exact behaviour.

* `IActionHost` no longer extends `IGridHost`

It never used the additional functionality and if needed the `IGridNode`
will also provide a reference to the corresponding `IGridHost`.

Due to most crafting related GUIs being hardcoded to `IGridHost`, 
they no longer work when `IActionHost` is not extending it. Actually
`IActionHost` is the better solution for it, as it prevents us from looking
the grid up via the `IGridHost` and potentially finding a wrong grid.

* Interfaces now only lock the currently worked slot.

This allows `DualityInterface#onChangeInventory` to update slots of the same interface, should they be the source for a requested item and therefore updating their working set accordingly to queue further crafting requests for unfulfilled stack requirements.
2017-09-12 11:39:00 +02:00
yueh 771a944058 Fixes #3081: Fixes blocking mode blocking on empty inventory. (#3082) 2017-09-11 12:03:32 +02:00
Florian Scandella db1cd8c312 Cache the STORAGE_MONITORABLE_ACCESSOR Capability to reduce the amount of MENetworkCellArrayUpdates 2017-09-09 13:04:21 +02:00
fscan 375e1efb15 We don't need the showCraftingLabel flag, as IAEStack is perfectly fine with 0 size stacks. (#3071)
Adjust rendering code to use ItemStack with size 1 where required.
2017-09-09 12:58:22 +02:00
yueh 955fcac92a Correctly handle the grid power storage during onJoin/onSplit. 2017-09-03 13:40:30 +02:00
Florian Scandella 216e2cb1e3 Fix matter condenser input slot 2017-09-03 04:45:17 +02:00
Florian Scandella 53f5724657 Set stack size to 1 for rendering 2017-09-02 01:06:25 +02:00
Florian Scandella a3269826f9 cleanup inventory change handling 2017-08-31 14:01:46 +02:00
Florian Scandella 1a918be658 only calculate difference when it's the same item 2017-08-29 22:52:59 +02:00
Florian Scandella 90130e72aa call saveChanges when inventory changes. 2017-08-29 22:52:06 +02:00
Florian Scandella c8f10d92bb use index not slotNumber 2017-08-29 21:20:18 +02:00
fscan 548af3c6cc Use standard inheritance to propagage NBT events (#3058)
* Remove the old annotation system
* Use TileEntity#onLoad instead of onChunkLoad event
* Do not call invalidate in onChunkUnload and validate in onLoad
2017-08-28 09:34:09 +02:00
yueh 98b9380494 Fixes machines not extracting power from the local grid.
There is currently no difference between an external grid and the local
machines trying to extract power from the grid. Thus preventing any
external grid from stealing power also does prevent machines from
extracting, if there is no other provider available.

Also a small change to use a priorityqueue with the lowest percentage
stored first. This can better utilize the upper limit by reaching it
faster and exiting earlier.
2017-08-27 15:01:07 +02:00
fscan bbf4d4a9ce Spatial rework (#3048)
* Moved all spatial cells into a single dimension instead of one dimension per cell

Each cell will now be backed by a single region file each. So  backups and restores can still be done on a per cell level.

Old cells will not be migrated.

* Moved custom cell tracking to a capability based one on the world

The size and owner of a cell is now stored inside the capabilities of the world/dimension not a custom system and we can rely on forge handling the persistence of it.

* Added the cell id to the actual item tooltip, as this is now a real identifier and not an arbitrary dimension id.

* Added vanilla banners to the whitelist

* Added unittests to the dimension manager to ensure the algorithm mapping to the correct region file

* Updated the API to conform with the new dimenion/types/biomes registration and mappings

* Fixed a couple of bugs related to world/dimension/biome registration 

* Fixed a bug when transfering certain blocks due to passing missing/incorrect blockstate
2017-08-24 11:24:33 +02:00
yueh 1513ba3f6a Performance improvements for the energygrid (#3051)
* Performance improvements for the energygrid

Reworked the old recursive approach to a queue based loop.
Extract will try to prefer the next grid with the hightest amount of
stored energy.
Inject will try to prefer the grid with the lowest percentage stored.
Other operations are first come, first serve.

* Added a local buffer storage to EnergyGrid

This replaces the old not really working buffer with a special
IAEPowerStorage acting as buffer/proxy for the local energy demand as
well as temporary overflow should something provide more energy than
requested.

Currently it set to hold a maximum of 200 AE (+ optional overflow until
consumed). It will only be used locally, no other grid can use it to
avoid starving the neighbor grids before finding a energy cell.

* Fixes IExternalPowerSink

All implementations currently depend on the network demand being a valid
source, which might not be true.

Further it can cause the sink to iterate the network twice (demand and
inject) and both again for simulate and modulate.

Also it did not return the actual leftover amount instead of relying on
the demand matching it.

* Minor fixes related to removing nodes from a grid.

The grid did remove IStackWatcherHost not IEnergyWatcherHost, this was
fine for AE2 as only level emitters use it and they implement both.
But not for potential addons.

Also they would potentually not being removed as the are indexed by the
gridnodes not the machine.

Fixes #1004
2017-08-24 11:06:31 +02:00
yueh f03f8ec432 Remove RF dependency 2017-08-22 11:07:00 +02:00
Florian Scandella e1dcd588b7 add particle texture to charged quartz 2017-08-21 20:11:20 +02:00
fscan 8338a7d13e Fixes #3049: JEI recipe transfer can voiding items (#3053) 2017-08-21 14:39:29 +02:00
yueh b8e685b1b6 Fixes #3040: Cache recipe and revalidate it (#3042)
* Fixes #3040: Cache recipe and revalidate it

This caches the last used recipe instead of only the result. Which
allows to revalidate the crafting grid against the recipe itself before
hitting the CraftingManager again. Therefore avoiding a high performance
hit for recipe lookups, just find the potential same recipe again.

* Remove old recipe lookup as forge provides it now.

* Further optimizations.

These are a bit quick'n'dirty and need a better solution with a full
container/gui refactoring. But for now they provide some great benefits
in terms of performance.
2017-08-20 21:31:30 +02:00
yueh d84500c5b7 Fixes FE P2P tunnel drain issues
Only queue drain on modulate, also queue it for extracting from the
input side.
2017-08-20 14:35:31 +02:00
yueh a1679c944b Added SCS size to the Spatial IO Port. (#3045)
Uses the same format as the cells display in their tooltip for easy comparison.
2017-08-20 13:14:27 +02:00
fscan a3a39201d1 Missed vibration chamber when fixing the others. (#3050) 2017-08-19 21:31:16 +02:00
Emanuele Torre d788da687e Update it_it.lang (#3041) 2017-08-18 10:31:15 +02:00
yueh 030e0c6a14 Updated gradle.properties for deploying to multiple minecraft versions 2017-08-18 00:47:31 +02:00
fscan 8e4265aa33 P2P Tunnel improvements (#3039)
* Fix P2P Tunnels randomly resetting to ME
* Allow one way push and pull. Outputs can pull from the input side, input can push into outputs.
2017-08-18 00:44:19 +02:00
Gunther De Wachter 80eaa032b9 Fixes #3011: placing the last part in off-hand clearing main hand as well 2017-08-17 22:19:50 +02:00
yueh bee9c70497 Added 1.12.1 as accepted version. 2017-08-17 21:17:55 +02:00
yueh c4fa21c193 Removes coremod (#3038)
From now on every integration must not rely on method stripping through
a coremod or @Optional. Notable example for a very good solution is IC2.

As consequence this drops all support for RF and mods must support on of
our supported energy types. At the time of writing, ForgeEnergy and
IC2/EU.
2017-08-17 21:16:57 +02:00
Gunther De Wachter 8a7450168b Updated JEI plugin to newer API methods. 2017-08-17 20:41:20 +02:00
Gunther De Wachter 7cb641cdc8 Fix shift clicking memory card still triggering off-hand item/block usage. 2017-08-17 20:41:20 +02:00
Gunther De Wachter b5b8050c4c Added workaround for sorting items on amount with fake amount when showing crafting label 2017-08-17 20:41:20 +02:00
Gunther De Wachter e65083b045 Fixed dropping items on the ground when clicking on a crafting label with items in hand 2017-08-17 20:41:20 +02:00
yueh b61219ef88 Covered dense cables (#3030)
* Renamed all dense smart cable related things to include smart
* Added dense covered cables
* Added abstract PartDenseCable to reduce redundant code
* Added dense covered recipes

* Ensures ItemPart ordering to be consitent.

Now takes the metadata into account to preserve the ordering for colored
items instead of just the part type name and depend on the insertion
order of a hashmap.
2017-08-17 18:41:39 +02:00
yueh 4f9fd1b369 IC2 rework to avoid a coremod or @Optional (#3034)
* IC2 rework to avoid a coremod or @Optional

Updated IC2 dependency

Refactored IC2 itemcharging to use an IBackupElectricManager.
Allows charging any ae powered item by using an IBackupElectricManager
instead of having to implement IElectricItem and stripping it by some
sort.

Updated IAEItemPowerStorage to use Actionable for an easier handling
with power APIs supporting a simulation.

Refactored EU P2P to avoid method stripping
Use a modified internal BasicSinkSource instead of implementing
IEnergySource and IEnergySink directly on the tunnel.

Removed the superfluous EU P2P layers.

* Removed internalBattery due to being too complex

* Creative Energy Cell is not a chargeable item
2017-08-17 17:35:34 +02:00
yueh 630fae3f73 Fixes #3024: Crash on recipe lookup for disabled features (#3026)
* Fixes #3024: Crash on recipe lookup for disabled features

Adds a new recipe condition for a single AEFeature or a list of them.
Moved the factories to their own package, in preparation of phasing out
the old recipe handling.
2017-08-17 17:17:26 +02:00
yueh 488ef1b544 Fixes recipes to use correct ingredients
Fluix Pearls instead of Fluix Crystals for spatial related items.
Fluix cables for most items, not any cable to avoid loops or unwanted
crafting steps.
2017-08-17 15:12:34 +02:00
fscan 098ee2f000 Making charged certus ore glow again (#3035) 2017-08-17 11:01:31 +02:00
fscan 04d2b06c0d Ignore MOVE_REGION when clicking on crafting slots (#3032)
Exclude crafting slots from list of slots to move on space click.

Fixes #3031
2017-08-15 15:07:42 +02:00
fscan ac48ab02fc Fix crash in clearStack (#3033) 2017-08-15 15:05:12 +02:00
fscan 9022150e38 Fill existing stacks first when adding to player inventory. (#3025) 2017-08-14 11:03:53 +02:00
yueh 65c6d2249a Fixes encoding issues with spatial cell names 2017-08-13 19:02:03 +02:00
yueh 8e7f79a9ea Ensure gradle uses UTF-8 2017-08-12 16:35:38 +02:00
fscan 95b48b9438 Registration rework (#3018)
Refactored component registration.

Fixes #3008: crank rendering
2017-08-12 15:02:50 +02:00
yueh cdd76b7b22 Added helpers for hex and color output. (#3027) 2017-08-12 14:52:31 +02:00
fscan 3e2bc0e038 Inscriber improvements and fixes (#3028) 2017-08-12 14:52:01 +02:00
yueh eec3e59eea Add missing annotations 2017-08-11 21:44:30 +02:00
yueh e39855b48f Use qualified method and field access 2017-08-11 21:43:47 +02:00
yueh cdcab7d91c Organise Imports 2017-08-11 21:42:26 +02:00
yueh 27ad2c2b96 Code format 2017-08-11 21:41:51 +02:00
yueh 542a2e5d5a Fixes NPE due to using wrong field. 2017-08-11 21:33:57 +02:00
fscan 3b58f5e8da fix me io port (#3019) 2017-08-09 10:39:07 +02:00
fscan 092afad4a5 Correctly detect redstone updates on all sides. (#3017) 2017-08-09 10:30:44 +02:00
Gunther De Wachter 6aa810d62a Re-add a missing piece of IC2 integration code.
This should fix a bunch of IC2 spam in the console and allow items to be charged in IC2 blocks.
2017-08-07 10:15:26 +02:00
Gunther De Wachter 41d98f9944 Fixed ME Chest visually not updating its cell state 2017-08-05 11:43:57 +02:00
Gunther De Wachter 1b198979fd Fixed export bus never speeding up. 2017-08-05 10:45:13 +02:00
tyra 8d5cc916e0 Adds improved tooltip to invalid encodedPattern (#2992)
* Adds improved tooltip to invalid encodedPattern

This also fixes that encodedPattern might be shown as valid,
even though one or more input or output item is missing.
2017-08-04 21:17:35 +02:00
Gunther De Wachter 5abb8bf886 Removed call to super in Crafting Terminal initialisation code. Fixes #2988 2017-08-04 20:28:11 +02:00
Gunther De Wachter 0bed78a144 Re-enabled JEI search integration in terminals. 2017-08-03 22:00:42 +02:00
fscan 30940e91ea InterfaceTerminal: Put into to cursor, not player hand (#2996) 2017-07-31 17:16:56 +02:00
fscan 0f9ac5fdda Fix Inscriber and Molecular Assembler (#2995)
* Fix inscriber
* Allow GUI extraction for Molecular Assembler
2017-07-31 16:06:39 +02:00
fscan 5e001d86cb Move model loading to the correct event. Fixes #2991 (#2994)
* Use the correct event for loading models.
* Introduce IModelRegistry to wrap the ModelLoader
2017-07-31 15:51:53 +02:00
fscan b13a338948 Fix/Remove storage/import/export bus IItemHandler caching (#2987)
* Fix storage/import/export bus IItemHandler caching
2017-07-31 15:51:01 +02:00
yueh 454404b0c1 Changed ItemGen to use IItemHandler 2017-07-30 20:17:23 +02:00
yueh bb1e191666 Changed IPart#onNeighborChanged() to add vanilla arguments (#2985)
Allows more precise checks to limit an update to the facing side.
2017-07-29 15:45:18 +02:00
yueh b72fce97db Removes random energy P2P behaviour (#2986)
Energy P2P now try to evenly distribute over all outputs (to a certain
limit)
Fixes some NPE regarding the caches.

Closes #2969
2017-07-29 15:38:29 +02:00
yueh bcc4a732ed Started P2P rework (#2966)
* First iteration of P2P rework

Changed frequency to short instead of long.
Added a per grid RNG to request a new frequency, hopefully without many collisons.
Added a helper to convert between a frequency and 4 colours
2017-07-28 22:06:19 +02:00
fscan 52d28fabe3 Use IItemHandler instead of IInventory internally (#2971)
* Use IItemHandler instead of IInventory internally
2017-07-28 22:04:32 +02:00
Gunther De Wachter c077840988 Fixed formation plane crashing when placing a block down. 2017-07-26 07:39:59 +02:00
Gunther De Wachter 8f6510aad4 Fixed the spatial cells losing their "cubed" sign because of an encoding issue in the language files. 2017-07-25 02:20:40 +02:00
Gunther De Wachter fa8427dcbd Fixed ItemStack initialisation in ContainerCellWorkbench. 2017-07-23 20:50:30 +02:00
Gunther De Wachter 7eb09fc4db Fixed Container Workbench (and other UI's) giving access to slots that shouldn't be there. 2017-07-23 20:39:01 +02:00
Gunther De Wachter ac528d09ae Fixed empty list when toggling to "Craftable" view in a terminal. 2017-07-23 17:41:05 +02:00
fscan c97165cc63 Fix NPE in MEMonitorIInventory.onTick (#2972) 2017-07-22 21:24:19 +02:00
yueh 08ee8f7656 Updated eclipse codeformat 2017-07-22 21:12:53 +02:00
Gunther De Wachter 727fcc528f Fixed crafting card recipe. 2017-07-22 18:31:30 +02:00
yueh a4c468b9cf Updated caps to be manually disabled via config
Moved the cap injection to a method, allows them to be configurable.
This is not possible for Forge Energy as it is injected before even the
configuration are lodaed, thus violating their own capability contract
to use the method injection to explicitly make it configurable.

Updated the ratio key for forge energy to "ForgeEnergy" without a space
2017-07-22 13:29:14 +02:00
Gunther De Wachter 4ad31f5066 Integrated groups.recipes into the JSON recipes a bit more cleanly.
Groups in groups.recipes that only had 1 item in the group haven't been converted into the JSON system.
That means "monitor" and "densecable" were just left as is.
2017-07-22 02:08:01 +02:00
tyra f70e97046f Fixes PatternTerminal crafting issue (#2964) 2017-07-22 01:12:07 +02:00
tyra 3a053d9ebe Fixes PatternTerminal clearing crafting slot on tried crafting (#2963) 2017-07-22 01:11:42 +02:00
Gunther De Wachter fbaff342e4 Fixed cable anchor recipe. Apparently 32767 is the magic wildcard number we were looking for. 2017-07-22 00:33:16 +02:00
tyra f0baea3be8 Fixes a ItemStack deletion issue in the grindstone (#2962)
Fixes the Grinder eating the item in case of an input ItemStack with size equal to one.
2017-07-21 23:03:13 +02:00
yueh fd7e393d23 Updated github docs 2017-07-21 22:05:38 +02:00
yueh a24ed38e90 Added missing Override annotations 2017-07-20 21:28:16 +02:00
yueh 15582fd1df Always use qualified access for fields and methods 2017-07-20 21:27:22 +02:00
yueh f9cad0758d Always use {} for control statements 2017-07-20 21:24:58 +02:00
yueh 406013142e Superfluous whitespace removal 2017-07-20 21:23:01 +02:00
yueh 7de90ed0ae Finally use Java7 <> 2017-07-20 21:21:45 +02:00
yueh 8ec8babb6a Organised imports 2017-07-20 21:18:49 +02:00
yueh 621910df91 Format sourcecode 2017-07-20 21:17:10 +02:00
yueh 66437897be Removed superfluous thirdparty sourceset 2017-07-20 20:59:37 +02:00
Gunther De Wachter 7414840530 Fixed facades not showing up before F3+A. This is caused by the BlockRendererDispatcher not existing yet in the ModelBakeEvent event. 2017-07-19 19:08:49 +02:00
Gunther De Wachter 0741e4ae09 Cosmetic change to smart fluix recipe. (Looks nicer in JEI) 2017-07-19 13:55:39 +02:00
Gunther De Wachter 87f6a63f47 Fixed seeds and P2P bus not having a localised name. 2017-07-19 13:55:09 +02:00
Gunther De Wachter b0950683a1 Updated pack.mcmeta to new version. 2017-07-19 13:54:08 +02:00
Gunther De Wachter 009cf8ac40 Fixed fluix pearl and Dense Smart Fluix recipes. 2017-07-19 13:52:25 +02:00
Gunther De Wachter 4c272de77f Temporary fix for serverside JEI and valueconfig packets.
It's not pretty but should do until we rewrite the packet/network handler.
2017-07-19 13:50:21 +02:00
Gunther De Wachter 6648d18f00 Changed the Parts and Material enum to be more java compliant.
Renamed Dense Cables to Dense Smart Cables.
2017-07-16 02:22:30 +02:00
Gunther De Wachter 16b5b5aea2 Fixed setting a Tunnel Type to "Forge Energy". Forgot to edit the part that actually sets the tunnel. 2017-07-15 01:19:29 +02:00
Gunther De Wachter e20697a7d9 Added the Forge Energy line to the language files. 2017-07-15 00:51:08 +02:00
Gunther De Wachter dc0447d137 This layer isn't needed for the traversal of Forge Energy. 2017-07-15 00:49:13 +02:00
Gunther De Wachter 577b1fa757 Add a method to attune the P2P Tunnel by (supported) ModId, or check for ForgeEnergy support if it's not listed. 2017-07-14 22:54:19 +02:00
Gunther De Wachter 3d69dc9bc4 Merge branch 'rv5-1.12' of github.com:GuntherDW/Applied-Energistics-2 into rv5-1.12 2017-07-14 21:52:24 +02:00
Gunther De Wachter 66c87a2fa2 Re-enabled the RF and IC2 handler, as well as their P2P tunnels. Added Forge Energy P2P tunnel. 2017-07-14 21:52:04 +02:00
Gunther De Wachter fdab91323c Re-enabled the WAILA handler, using Hwyla. 2017-07-14 21:48:20 +02:00
Gunther De Wachter 98a8c3d06b Forgot to remove extra debug line before pushing to github. 2017-07-14 16:21:16 +02:00
Gunther De Wachter 458356a2be First attempt at combining the Block registration and TE registration whilst still keeping support for addons.
It might need some refinement in the future.
2017-07-14 04:47:40 +02:00
Gunther De Wachter c91b432e09 Added exceptions to the Recipe handlers. Don't crash, but log to the console what went wrong. 2017-07-13 22:18:59 +02:00
Gunther De Wachter d67d93b343 Fixed a couple recipes that were wrong during the transition. 2017-07-13 11:31:26 +02:00
Gunther De Wachter f6f8da28af Fixed Recipe handler only giving out 1 item instead of the amount specified in the json. 2017-07-13 11:29:00 +02:00
Gunther De Wachter 76fd3c1166 Fix potential crash in the recipes when the material was replaced. 2017-07-13 09:30:39 +02:00
Gunther De Wachter 3da881829e Fixed recipe crash when another mod registers a wooden gear.
I'll have to go through every other recipe later.
2017-07-13 09:03:18 +02:00
Gunther De Wachter 90ee7fb15d Fixed last commit. I should never trust kate's syntax hilighting in the future again. 2017-07-13 04:49:10 +02:00
Gunther De Wachter e5e2714273 Really fixed NotNull this time. My local git repo got desync'ed for a bit. 2017-07-13 04:44:05 +02:00
Gunther De Wachter 1534521362 Fixed wrong interface being used for the NonNull ItemStacks causing issues. 2017-07-13 04:21:15 +02:00
Gunther De Wachter 0f8204cd93 Fixed serversided issue. Forgot to check for uses of isEnabled before changing it to a clientside only method. 2017-07-13 04:18:33 +02:00
Gunther De Wachter eb11845a2f Fixed applying the type of tunnel for P2P tunnels.
This was caused by the enforced lowercase mod id's and item names since 1.11.
2017-07-12 06:04:06 +02:00
Gunther De Wachter fe213e5ac5 Add item handler capabilities to Item P2P tunnels. 2017-07-12 06:02:31 +02:00
Gunther De Wachter 25c82b2c9f Forgot to remove test recipe. 2017-07-11 05:12:47 +02:00
Gunther De Wachter d03faae983 JSON Recipes initial import.
Moved the old recipe handler to a different direct to not confuse the vanilla/forge JSON loader.
2017-07-11 04:50:02 +02:00
Gunther De Wachter 76e19874cf Small code cosmetics and null checks update. 2017-07-09 13:44:11 +02:00
Gunther De Wachter 1975c3c262 Moved makeUnique() a bit back to fix almost every AE item being disabled. 2017-07-09 13:43:16 +02:00
Gunther De Wachter 720feb4f16 Iron nuggets are vanilla nowadays. There's no sense in keeping them around in AE2. 2017-07-09 11:33:22 +02:00
Gunther De Wachter 588579d67f Updated CoFH RF API. Removed the old API from thirdparty/.
Those files are available from their maven server now.
2017-07-09 10:34:34 +02:00
Gunther De Wachter 043f6e9919 Fixed ME Drive not rendering in-world. 2017-07-09 10:10:56 +02:00
Gunther De Wachter cc7824a0e5 Merge remote-tracking branch 'origin/rv5-1.12' into rv5-1.12 2017-07-09 07:18:45 +02:00
Gunther De Wachter a57cd3f580 More 1.12 shenanigans. Still far from done. 2017-07-09 07:17:24 +02:00
GuntherDW 33f54a1bd6 Merge pull request #8 from tyra314/creative-tab-leak
Fixes creative tab leak
2017-07-09 05:53:32 +02:00
tyra314 3008088ad7 Fixes creative tab leak 2017-07-08 11:26:51 +02:00
Gunther De Wachter 198ea9f16e Fixed crash caused by delayed block registration.
Added Callback section for the Model Registry event to the builder setup.
Moved the State Mapper section to the Model Registry Callback section.
2017-07-06 14:05:54 +02:00
Gunther De Wachter d8c5e6a5fa Fixed UI background not being drawn.
Mezz removed said displayGuiScreenWithoutClose() so said workaround can be removed.
2017-07-06 08:07:51 +02:00
Gunther De Wachter fbcf8c4705 Highly incomplete code. First work on porting to 1.12. Still need to rework a LOT of things. 2017-07-06 01:57:19 +02:00
Gunther De Wachter d67f97cd16 FMLRelaunchLog is deprecated in favour of FMLLog. Small grammatical fixed as well.
They want you to get a logger in the PreInit phase, but seeing as we are a coremod we run before those events take place.
2017-07-04 17:50:10 +02:00
Gunther De Wachter 0e2f8a22a2 Decided to go for a more "separated" TE registration.
This will still make it so addons still get to add custom blocks without having to change too much of the internals.

It still needs thorough testing though. I don't want to change this too much because it ruins older worlds.
2017-07-04 15:40:57 +02:00
Gunther De Wachter 20fc0e136d Fixed more bugs caused by the new mappings. 2017-07-03 09:11:06 +02:00
Gunther De Wachter 7f7495f1df Fixed bug caused by mapping update, not being able to rclick on parts on a certain side. 2017-07-03 08:20:13 +02:00
Gunther De Wachter e6e858820f Updated forge and added some more stuff from the new mappings. 2017-07-03 07:34:24 +02:00
Gunther De Wachter 4679b0ee61 Forgot to add this file for the Named Inventories fix. 2017-07-03 06:56:03 +02:00
Gunther De Wachter 890eef1803 Update MCP Mappings to stable_32
Some mapping updates are just straight up weird. 20170516 -> isBlockSolid, 20170517 -> causesDownwardCurrent
2017-07-03 06:54:45 +02:00
Gunther De Wachter 780ce89ac3 Internal change to fix Named Inventories. This change will not affect the reobfed version (much). 2017-07-03 05:54:25 +02:00
Gunther De Wachter e96339dd2b Fix more items and unsafe checks that made items get deleted. 2017-07-02 07:44:21 +02:00
Gunther De Wachter b67d7eed82 Fixed tools getting deleted when being used in off-hand. 2017-07-02 07:33:16 +02:00
Gunther De Wachter 5ebd8452bf Fixed another crash from the Entropy Manipulator.
I have no words for this one.
2017-07-02 06:57:40 +02:00
Gunther De Wachter ee774cd3f8 Even more null fixes. 2017-07-02 06:43:33 +02:00
Gunther De Wachter 0a2f90d115 Fixed Entropy Manipulator crash. 2017-07-02 06:17:23 +02:00
Gunther De Wachter 0f86efa3f5 Added workaround for dispenser logic. 2017-07-02 06:05:43 +02:00
Gunther De Wachter 7398af0e1c Add an ease of use tooltip to the creative cell. Displays the items provided/formatted by the cell. 2017-07-02 05:26:37 +02:00
Gunther De Wachter eb0b304fd9 Even more null fixes. 2017-07-02 04:13:49 +02:00
Gunther De Wachter c455ee69b8 When not shifting an encoded item pattern item should let the right click through. 2017-07-02 04:11:26 +02:00
Gunther De Wachter 820a6bdbd6 Fixed the ME system not finding any Crafting CPU's.
Might have to rework it a bit later. looks kind of ugly like this.
2017-07-01 09:08:43 +02:00
Gunther De Wachter 7a8499c455 Fixed tools not working due to a change in the onItemUse method fields in ItemStack.java
I will have to fix the dispenser logic. Manually right clicking works.
2017-06-30 19:17:06 +02:00
Gunther De Wachter 76f17ba53c Fixed Network Tool crashing on null ItemStacks. 2017-06-30 18:35:38 +02:00
Gunther De Wachter 16a0872d06 Fixed Crafting Multiblocks not forming. I accidentally used the wrong subclass to define the StorageTiles here. 2017-06-30 18:16:02 +02:00
Gunther De Wachter 49a87f62ce More null's and cosmetic fixes. 2017-06-30 17:30:03 +02:00
Gunther De Wachter c382ab7300 Made the SkyChestTE's class names more in line with the other ones. 2017-06-30 17:25:02 +02:00
Gunther De Wachter 49a6df5bc7 Fixed up the Tile Entity mess a bit, still need to look at the CableBus stuff a bit though. 2017-06-30 17:22:06 +02:00
Gunther De Wachter 10e050c35b Fixed potential memory leak in the UI code. 2017-06-30 17:17:34 +02:00
Gunther De Wachter b1e249aad0 Fixed Color Applicator not accepting dyes as valid items 2017-06-29 11:34:39 +02:00
Gunther De Wachter d3bb71d834 Fixed JEI clearing the search bar. That last commit was pushed a bit too hastily. 2017-06-29 10:40:47 +02:00
Gunther De Wachter 3f7051ec8e Fixed clearing of the search bar when looking at recipes
Why mezz why...
2017-06-29 10:30:14 +02:00
Gunther De Wachter 2f1f19bbb3 Fixed ResourceLocation for the items and seeds. 2017-06-29 06:34:02 +02:00
yueh 4c7f065af3 Fixes #2729: Fix transformer regression introduced during FG downtime. (#2730)
Added a unittest to verify the necessary string returns match the actual
existing classes, in case something screws up the refactoring.
2017-06-29 06:00:23 +02:00
yueh 6c52f31686 Replaces old fluid handlers with the new capability based ones. (#2727)
* Changed ME Chest and P2P tunnels to use fluid capabilities.
* Renamed all occurrences of liquid to fluids.
2017-06-29 05:57:43 +02:00
Gunther De Wachter 3ac7e518b1 Fixed compile error from cherry-picked commit. 2017-06-29 05:47:51 +02:00
yueh af85a2bf67 Fixes #2713: Call super#onBlockActivated() for wrench interaction. (#2728) 2017-06-29 05:39:31 +02:00
Gunther De Wachter c4b4a257f3 Removed old ASMIntegration file, the rename didn't get picked up by the cherry-pick 2017-06-29 05:39:11 +02:00
yueh 4eba3bca5b Fixes IDE not correctly cleaning up the list of staged files. 2017-06-29 05:35:50 +02:00
yueh cd78586910 Fixes #2768: Incorrect return value when charging items via Tesla. (#2771) 2017-06-29 05:26:00 +02:00
Gunther De Wachter 178198b0c6 Fixed render issue with cables/certain blocks on a specific side. 2017-06-29 04:16:35 +02:00
Gunther De Wachter bdf46a6ee2 Fixed hoppers continuing to insert when they shouldn't into inscribers. Thanks @fscan
Original pull request : #2933
2017-06-28 18:11:11 +02:00
Gunther De Wachter 0be2011645 Fixed blank patterns in the pattern terminal not decreasing when encoding a pattern. 2017-06-28 06:21:11 +02:00
Gunther De Wachter bce500616c Fixed exception being thrown when placing last item of a stack of parts. 2017-06-28 06:19:17 +02:00
Gunther De Wachter e022c23c8f Fixed crash on startup. Apparently there's still null's lurking in the code. 2017-06-27 20:52:56 +02:00
Gunther De Wachter 61b81fc802 Fix facade recipes. Hopefully the last null check fix. 2017-06-27 20:39:06 +02:00
Gunther De Wachter b819fe4adb Fixed "Air" tooltip displaying in the interface terminal. More missed null checks. 2017-06-27 18:00:55 +02:00
Gunther De Wachter 66a797dd7c Fixed grindstone not working with crank due to missed null checks. 2017-06-27 17:20:13 +02:00
Gunther De Wachter 99c294e948 More aesthetic and typo fixes. 2017-06-27 04:04:48 +02:00
Gunther De Wachter 6529de911a Code aesthetics and typo fixes. 2017-06-26 16:35:50 +02:00
Gunther De Wachter 650edae902 More ItemStack null changes. 2017-06-26 07:07:04 +02:00
Gunther De Wachter 78904204cf Fixed inscriber not starting due to vanilla changes. 2017-06-26 07:06:19 +02:00
Gunther De Wachter df7ab00c37 Fixed a null check when the array wasn't initialised yet. I should fix this up in the future though. 2017-06-26 05:43:08 +02:00
Gunther De Wachter 5432decf95 Fix items showing up as craftable when they weren't after taking out the last one. 2017-06-26 05:42:21 +02:00
Gunther De Wachter da5879b667 First batch of null -> isEmpty() checks.
I most likely still missed a ton of checks...
2017-06-26 05:15:25 +02:00
Gunther De Wachter 370fc49357 Temporary (?) hacky fix to display the craftable items
This is kind of a hackjob IMO but it saves me the trouble of possibly rewriting large portions of either the AE codebase or ASM'ing the vanilla classes.
2017-06-25 18:01:30 +02:00
Gunther De Wachter c74aaddbd3 Fixed texture issue for the crafting window. 2017-06-24 16:50:26 +02:00
Gunther De Wachter 1a4db4b8d7 Fixed taking items out of the AE system
Same issue as last commit. ItemStacks with a count of 0 get "nullified".
2017-06-24 16:45:28 +02:00
Gunther De Wachter d77d21858e Fixed manually crafting items
This can hopefully be done in a more sensible fashion later.
2017-06-24 15:51:03 +02:00
Gunther De Wachter 42bfc549be Fixed drawing of items in storage.
An ItemStack count of 0 trips the check for isEmpty and hence doesn't give us the item we want.
2017-06-24 15:01:06 +02:00
Gunther De Wachter c6bdf845a8 Add a temporary (?) method to register the TileEntities because the Forge method changed from 1.10 to 1.11.2. 2017-06-03 00:53:32 +02:00
Gunther De Wachter ccc46e77a3 Fix the coremod looking for the wrong minecraft version 2017-06-03 00:01:01 +02:00
Gunther De Wachter 7e45cf0e37 Add the remainder of the WAILA/IC2 disable comments for now while we focus on fixing the core mod 2017-06-02 23:57:57 +02:00
Gunther De Wachter 86dd8193f7 Add/Change some missing code for the 1.11.2 upgrade 2017-06-02 23:55:31 +02:00
Gunther De Wachter 5fff8310d6 Update gradle and dependencies for 1.11.2 2017-06-02 23:37:27 +02:00
yueh 1cde7bc933 Changed to Null ItemStack instead of null. 2016-12-21 20:38:37 +01:00
yueh ed9e6dd21c Port to 1.11 2016-12-21 20:38:36 +01:00
1742 changed files with 38835 additions and 24600 deletions
+11 -6
View File
@@ -12,15 +12,18 @@ top of things.
Applied Energistics 2 crashing, have a suggestion, found a bug? Create an issue now!
1. Make sure your issue has not already been answered or fixed and you are using the latest version. Also think about whether your issue is a valid one before submitting it.
* If it is already possible with vanilla and AE2 itself, the suggestion will be considered invalid.
* Asking for a smaller version, more compact version, or more efficient version of something will also be considered invalid.
2. Go to [the issues page](https://github.com/AppliedEnergistics/Applied-Energistics-2/issues) and click [new issue](https://github.com/AppliedEnergistics/Applied-Energistics-2/issues/new)
3. Enter your a title of your issue (something that summarizes your issue), and then create a detailed description of the issue.
* Do not tag it with something like `[Feature]` or `[Bug]`. When it is applicable, we will take care of it.
* The following details are required. Not including them can cause the issue to be closed.
* Do not tag it with something like `[Feature]`, `[Bug]`, or a version.
* Restrict it to a single bug or feature, it makes managing them way easier for us.
* The following details are required. Also refer to the issue template when creating one.
* Forge version
* AE2 version
* Crash log, when reporting a crash (Please make sure to use [pastebin](http://pastebin.com/))
* Do not post an excerpt of what you consider important, instead:
* Post the full log
* Never post an excerpt of what you consider important
* Always post the full log
* Other mods and their version, when reporting an issue between AE and another mod
* Also consider updating these before submitting a new issue, it might be already fixed
* A detailed description of the bug or feature
@@ -33,10 +36,12 @@ Applied Energistics 2 crashing, have a suggestion, found a bug? Create an issue
* Mod Pack using and version?
* Keep in mind that some mods might use an outdated version of AE2
* If so you should report it to your modpack
5. Click `Submit New Issue`, and wait for feedback!
4. Click `Submit New Issue`, and wait for feedback!
Providing as many details as possible does help us to find and resolve the issue faster and also you getting a fixed version as fast as possible.
Please note that we might close any issue not matching these requirements.
### Submitting Changes
* Submit an issue to the github project, assuming one does not already exist.
@@ -108,7 +113,7 @@ the styling guidelines used by AE.
PRs that do not conform to these standards will be rejected.
You can find presets for Eclipse and IntelliJ IDEA in the `codeformat` folder.
We try to keep them up to date, but in case you find them not formatting it correctly, then please report it
We try to keep them up to date. Please report any case of maintaining the correct formatting.
### Whitespace
+69 -21
View File
@@ -1,5 +1,5 @@
[![Travis](https://img.shields.io/travis/AppliedEnergistics/Applied-Energistics-2.svg?maxAge=2592000&style=flat-square)](https://travis-ci.org/AppliedEnergistics/Applied-Energistics-2)
[![Latest Release](https://img.shields.io/github/release/AppliedEnergistics/Applied-Energistics-2.svg?label=Latest Release&style=flat-square)](https://github.com/AppliedEnergistics/Applied-Energistics-2/releases)
[![Latest Release](https://img.shields.io/github/release/AppliedEnergistics/Applied-Energistics-2.svg?label=Latest%20Release&style=flat-square)](https://github.com/AppliedEnergistics/Applied-Energistics-2/releases)
# Applied Energistics 2
@@ -9,12 +9,12 @@
* [Contacts](#contacts)
* [License](#license)
* [Downloads](#downloads)
* [Nightly Builds](#nightly-builds)
* [Installation](#installation)
* [Issues](#issues)
* [Building](#building)
* [Contribution](#contribution)
* [API](#applied-energistics-2-api)
* [CraftTweaker](#applied-energistics-2-crafttweaker)
* [Localization](#applied-energistics-2-localization)
* [Credits](#credits)
@@ -31,13 +31,13 @@ A Mod about Matter, Energy and using them to conquer the world..
## License
* Applied Energistics 2 API
- (c) 2013 - 2015 AlgorithmX2 et al
- (c) 2013 - 2017 AlgorithmX2 et al
- [![License](https://img.shields.io/badge/License-MIT-red.svg?style=flat-square)](http://opensource.org/licenses/MIT)
* Applied Energistics 2
- (c) 2013 - 2015 AlgorithmX2 et al
- (c) 2013 - 2017 AlgorithmX2 et al
- [![License](https://img.shields.io/badge/License-LGPLv3-blue.svg?style=flat-square)](https://raw.githubusercontent.com/AppliedEnergistics/Applied-Energistics-2/rv2/LICENSE)
* Textures and Models
- (c) 2013 - 2015 AlgorithmX2 et al
- (c) 2013 - 2017 AlgorithmX2 et al
- [![License](https://img.shields.io/badge/License-CC%20BY--NC--SA%203.0-yellow.svg?style=flat-square)](https://creativecommons.org/licenses/by-nc-sa/3.0/)
* Text and Translations
- [![License](https://img.shields.io/badge/License-No%20Restriction-green.svg?style=flat-square)](https://creativecommons.org/publicdomain/zero/1.0/)
@@ -46,14 +46,6 @@ A Mod about Matter, Energy and using them to conquer the world..
Downloads can be found on [CurseForge](http://www.curse.com/mc-mods/minecraft/223794-applied-energistics-2) or on the [official website](http://ae-mod.info/Downloads/).
## Nightly Builds
[![Build status](https://ci.appveyor.com/api/projects/status/w0sg7upakn0vj5gc?svg=true)](https://ci.appveyor.com/project/shartte/applied-energistics-2/history)
[Download Latest Nightly Build](https://ci.appveyor.com/api/projects/shartte/applied-energistics-2/artifacts/ae2-rv4-nightly.zip?branch=master)
Nightly builds for the Minecraft 1.10.2 branch of AE2 (rv4-alpha) are available from [AppVeyor](https://ci.appveyor.com/project/shartte/applied-energistics-2/history). These builds are only for testing purposes and might lead to loss of data, and will contain significant bugs. Please see below on how you can report bugs you find during testing.
## Installation
You install this mod by putting it into the `minecraft/mods/` folder. It has no additional hard dependencies.
@@ -63,15 +55,18 @@ You install this mod by putting it into the `minecraft/mods/` folder. It has no
Applied Energistics 2 crashing, have a suggestion, found a bug? Create an issue now!
1. Make sure your issue has not already been answered or fixed and you are using the latest version. Also think about whether your issue is a valid one before submitting it.
* If it is already possible with vanilla and AE2 itself, the suggestion will be considered invalid.
* Asking for a smaller version, more compact version, or more efficient version of something will also be considered invalid.
2. Go to [the issues page](https://github.com/AppliedEnergistics/Applied-Energistics-2/issues) and click [new issue](https://github.com/AppliedEnergistics/Applied-Energistics-2/issues/new)
3. Enter your a title of your issue (something that summarizes your issue), and then create a detailed description of the issue.
* Do not tag it with something like `[Feature]` or `[Bug]`. When it is applicable, we will take care of it.
* The following details are required. Not including them can cause the issue to be closed.
* Do not tag it with something like `[Feature]`, `[Bug]`, or a version.
* Restrict it to a single bug or feature, it makes managing them way easier for us.
* The following details are required. Also refer to the issue template when creating one.
* Forge version
* AE2 version
* Crash log, when reporting a crash (Please make sure to use [pastebin](http://pastebin.com/))
* Do not post an excerpt of what you consider important, instead:
* Post the full log
* Never post an excerpt of what you consider important
* Always post the full log
* Other mods and their version, when reporting an issue between AE and another mod
* Also consider updating these before submitting a new issue, it might be already fixed
* A detailed description of the bug or feature
@@ -84,10 +79,12 @@ Applied Energistics 2 crashing, have a suggestion, found a bug? Create an issue
* Mod Pack using and version?
* Keep in mind that some mods might use an outdated version of AE2
* If so you should report it to your modpack
5. Click `Submit New Issue`, and wait for feedback!
4. Click `Submit New Issue`, and wait for feedback!
Providing as many details as possible does help us to find and resolve the issue faster and also you getting a fixed version as fast as possible.
Please note that we might close any issue not matching these requirements.
## Building
1. Clone this repository via
@@ -110,7 +107,7 @@ Providing as many details as possible does help us to find and resolve the issue
Before you want to add major changes, you might want to discuss them with us first, before wasting your time.
If you are still willing to contribute to this project, you can contribute via [Pull-Request](https://help.github.com/articles/creating-a-pull-request).
The [guidelines for contributing](https://github.com/AppliedEnergistics/Applied-Energistics-2/blob/master/CONTRIBUTING.md) contain more detailed information about topics like the used code style and should also be considered.
The [guidelines for contributing](https://github.com/AppliedEnergistics/Applied-Energistics-2/blob/master/.github/CONTRIBUTING.md) contain more detailed information about topics like the used code style and should also be considered.
Here are a few things to keep in mind that will help get your PR approved.
@@ -122,7 +119,7 @@ Here are a few things to keep in mind that will help get your PR approved.
- Does your feature simplify another feature of AE2? These changes will not be accepted.
- If your feature can be done by any popular mod, discuss with us first.
Getting Started
**Getting Started**
1. Fork this repository
2. Clone the fork via
@@ -142,7 +139,7 @@ If you are only doing single file pull requests, GitHub supports using a quick w
The API for Applied Energistics 2. It is open source to discuss changes, improve documentation, and provide better add-on support in general.
Development and standard builds can be obtained [Here](http://ae2.ae-mod.info/Downloads/).
Universal builds obtained [Here](http://ae2.ae-mod.info/Downloads/) should work in a development environment.
### Maven
@@ -158,6 +155,57 @@ Where the __ are filled in with the correct version criteria; AE2 is available f
An example string would be `appeng:appliedenergistics2:rv2-alpha-30:dev`
## Applied Energistics 2 CraftTweaker
### Inscriber
Add a recipe. When `inscribe` is true the bottom and top inputs are not consumed.
mods.appliedenergistics2.Inscriber.addRecipe(ItemStack output, ItemStack input, boolean inscribe,
@Optional ItemStack topInput, @Optional ItemStack bottomInput );
Remove all recipes for this output stack.
mods.appliedenergistics2.Inscriber.removeRecipe(ItemStack output);
### Grindstone
Add a recipe.
mods.appliedenergistics2.Grinder.addRecipe( ItemStack output, ItemStack input, int turns,
@Optional ItemStack secondary1Output, @Optional float secondary1Chance,
@Optional ItemStack secondary2Output, @Optional float secondary2Chance);
Remove recipes for this input.
mods.appliedenergistics2.Grinder.removeRecipe(ItemStack input);
### Spatial
Whitelist a TileEntity class for Spatial IO.
mods.appliedenergistics2.Spatial.whitelistEntity( String fullEntityClassName );
### Attunement
Attune a ItemStack or ModID to a specific P2P-Tunnel type. ModID's are used as fallback when no ItemStack was found.
mods.appliedenergistics2.Attunement.attuneME( ItemStack itemStack );
mods.appliedenergistics2.Attunement.attuneME( String modID );
mods.appliedenergistics2.Attunement.attuneItem( ItemStack itemStack );
mods.appliedenergistics2.Attunement.attuneItem( String modID );
mods.appliedenergistics2.Attunement.attuneFluid( ItemStack itemStack );
mods.appliedenergistics2.Attunement.attuneFluid( String modID );
mods.appliedenergistics2.Attunement.attuneRedstone( ItemStack itemStack );
mods.appliedenergistics2.Attunement.attuneRedstone( String modID );
mods.appliedenergistics2.Attunement.attuneRF( ItemStack itemStack );
mods.appliedenergistics2.Attunement.attuneRF( String modID );
mods.appliedenergistics2.Attunement.attuneIC2( ItemStack itemStack );
mods.appliedenergistics2.Attunement.attuneIC2( String modID );
mods.appliedenergistics2.Attunement.attuneLight( ItemStack itemStack );
mods.appliedenergistics2.Attunement.attuneLight( String modID );
### Cannon
Add ammo types for the matter cannon.
mods.appliedenergistics2.Cannon.registerAmmo( ItemStack itemStack, double weight );
## Applied Energistics 2 Localization
### English Text
+7 -17
View File
@@ -27,7 +27,7 @@ buildscript {
}
}
dependencies {
classpath 'net.minecraftforge.gradle:ForgeGradle:2.2-SNAPSHOT'
classpath 'net.minecraftforge.gradle:ForgeGradle:2.3-SNAPSHOT'
}
}
apply plugin: 'net.minecraftforge.gradle.forge'
@@ -45,6 +45,12 @@ apply from: 'gradle/scripts/optional.gradle'
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
// ensure everything uses UTF-8 and not some random codepage chosen by gradle
compileJava.options.encoding = 'UTF-8'
tasks.withType(JavaCompile) {
options.encoding = 'UTF-8'
}
version = aeversion + "-" + aechannel + "-" + aebuild
group = aegroup
archivesBaseName = aebasename
@@ -52,7 +58,6 @@ archivesBaseName = aebasename
// Add Coremod Manifest
jar {
manifest {
attributes 'FMLCorePluginContainsFMLMod': 'true'
attributes 'FMLAT': 'appeng_at.cfg'
}
@@ -68,8 +73,6 @@ jar {
}
minecraft {
coreMod = "appeng.coremod.AppEngCore"
version = minecraft_version + "-" + forge_version
replaceIn "AEConfig.java"
@@ -86,21 +89,8 @@ minecraft {
}
sourceSets {
api
// This source set will contain third party API code that we need to compile, but which is not shipped with the jar
thirdparty {
// Third Party APIs often need access to Minecraft classes (i.e. EnumFacing), so set this up here
compileClasspath += configurations.forgeGradleMc + configurations.forgeGradleMcDeps
}
main
}
dependencies {
compile sourceSets.thirdparty.output
}
processResources
+27 -8
View File
@@ -1,24 +1,28 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<profiles version="12">
<profile kind="CodeFormatterProfile" name="AE2" version="12">
<profiles version="13">
<profile kind="CodeFormatterProfile" name="AE2" version="13">
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_ellipsis" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_for_statment" value="common_lines"/>
<setting id="org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_method_invocation" value="common_lines"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.blank_lines_after_imports" value="2"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_switch_statement" value="common_lines"/>
<setting id="org.eclipse.jdt.core.formatter.comment.format_javadoc_comments" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.indentation.size" value="4"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_enum_constant_declaration" value="common_lines"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits" value="do not insert"/>
@@ -26,17 +30,19 @@
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.disabling_tag" value="@formatter:off"/>
<setting id="org.eclipse.jdt.core.formatter.continuation_indentation" value="2"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_enum_constants" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_enum_constants" value="80"/>
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_imports" value="1"/>
<setting id="org.eclipse.jdt.core.formatter.blank_lines_after_package" value="2"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_binary_operator" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_if_while_statement" value="common_lines"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.comment.indent_root_tags" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.enabling_tag" value="@formatter:on"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.comment.count_line_length_from_starting_position" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter" value="do not insert"/>
@@ -52,14 +58,16 @@
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_parameterized_type_references" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_enum_constant" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column" value="false"/>
<setting id="org.eclipse.jdt.core.compiler.problem.enumIdentifier" value="error"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.indent_statements_compare_to_block" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration" value="end_of_line"/>
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration" value="next_line"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments" value="do not insert"/>
@@ -82,6 +90,7 @@
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_binary_expression" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_catch_clause" value="common_lines"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations" value="insert"/>
@@ -93,15 +102,16 @@
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_block" value="next_line"/>
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration" value="next_line"/>
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_lambda_body" value="end_of_line"/>
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_lambda_body" value="next_line"/>
<setting id="org.eclipse.jdt.core.formatter.compact_else_if" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_type_parameters" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation" value="16"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration" value="0"/>
<setting id="org.eclipse.jdt.core.compiler.problem.assertIdentifier" value="error"/>
<setting id="org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment" value="true"/>
@@ -112,9 +122,10 @@
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_binary_operator" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_unary_operator" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer" value="16"/>
<setting id="org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve" value="1"/>
<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_annotation" value="common_lines"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_ellipsis" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources" value="do not insert"/>
@@ -153,15 +164,18 @@
<setting id="org.eclipse.jdt.core.formatter.alignment_for_method_declaration" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.join_wrapped_lines" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.wrap_before_conditional_operator" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.align_fields_grouping_blank_lines" value="2147483647"/>
<setting id="org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration" value="next_line"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_resources_in_try" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_try_clause" value="common_lines"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation" value="80"/>
<setting id="org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column" value="false"/>
<setting id="org.eclipse.jdt.core.compiler.source" value="1.8"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized" value="insert"/>
@@ -183,6 +197,7 @@
<setting id="org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.wrap_before_assignment_operator" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement" value="do not insert"/>
<setting id="org.eclipse.jdt.core.compiler.codegen.targetPlatform" value="1.8"/>
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_switch" value="next_line"/>
@@ -194,8 +209,10 @@
<setting id="org.eclipse.jdt.core.formatter.comment.format_html" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_method_delcaration" value="common_lines"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_compact_if" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.indent_empty_lines" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_type_arguments" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_unary_operator" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant" value="do not insert"/>
@@ -256,6 +273,7 @@
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_lambda_declaration" value="common_lines"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations" value="do not insert"/>
@@ -271,6 +289,7 @@
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_expressions_in_for_loop_header" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments" value="do not insert"/>
+17 -9
View File
@@ -1,4 +1,4 @@
aeversion=rv4
aeversion=rv5
aechannel=alpha
aebuild=0
aegroup=appeng
@@ -7,19 +7,27 @@ aebasename=appliedenergistics2
#########################################################
# Versions #
#########################################################
minecraft_version=1.10.2
mcp_mappings=snapshot_20161111
forge_version=12.18.3.2185
minecraft_version=1.12.2
mcp_mappings=snapshot_20171003
forge_version=14.23.1.2554
#########################################################
# Installable #
#########################################################
waila_version=1.7.0-B3_1.9.4
hwyla_version=1.8.20-B35_1.12
#########################################################
# Provided APIs #
#########################################################
jei_version=3.13.6.391
tesla_version=1.10.2-1.2.1.50
ic2_version=2.6.99-ex110
top_version=1.10-1.3.3-41
jei_version=4.8.0.105
tesla_version=1.0.61
ic2_version=2.8.19-ex112
top_version=1.12-1.4.18-10
cofhcore_version=1.12-4.+
crafttweaker_version=4.0.10.310
#########################################################
# Deployment #
#########################################################
website_version=1.12.2
curse_versions=1.12.2
+27 -5
View File
@@ -39,10 +39,30 @@ repositories {
url = "http://maven.ic2.player.to"
}
maven {
name = "CoFH Maven"
url = "http://maven.covers1624.net"
}
maven { // TheOneProbe
name 'tterrag maven'
url "http://maven.tterrag.com/"
}
maven { // McJtyLib
name 'mcjty'
url "http://maven.k-4u.nl/"
}
maven { // Hwyla
name 'tehnut'
url "http://tehnut.info/maven"
}
maven { // CraftTweaker
name 'jared maven'
url "http://maven.blamejared.com/"
}
}
configurations {
@@ -51,16 +71,18 @@ configurations {
dependencies {
// installable runtime dependencies
mods "mcp.mobius.waila:Waila:${waila_version}"
mods "mcp.mobius.waila:Hwyla:${hwyla_version}"
mods "net.industrial-craft:industrialcraft-2:${ic2_version}:dev"
mods "mcjty.theoneprobe:TheOneProbe:${top_version}"
mods "mcjty.theoneprobe:TheOneProbe-${minecraft_version}:${top_version}"
// compile against provided APIs
compileOnly "mezz.jei:jei_${minecraft_version}:${jei_version}:api"
compileOnly "mcp.mobius.waila:Waila:${waila_version}"
compileOnly "net.darkhax.tesla:Tesla:${tesla_version}"
compileOnly "mcp.mobius.waila:Hwyla:${hwyla_version}"
compileOnly "net.darkhax.tesla:Tesla-1.12:${tesla_version}"
compileOnly "net.industrial-craft:industrialcraft-2:${ic2_version}:api"
compileOnly "mcjty.theoneprobe:TheOneProbe:${top_version}:api"
compileOnly "mcjty.theoneprobe:TheOneProbe-1.12:${top_version}:api"
compileOnly "cofh:CoFHCore:${cofhcore_version}:deobf"
compileOnly "CraftTweaker2:CraftTweaker2-API:${crafttweaker_version}"
// at runtime, use the full JEI jar
runtime "mezz.jei:jei_${minecraft_version}:${jei_version}"
+6 -6
View File
@@ -20,15 +20,15 @@ task wrapper(type: Wrapper) {
gradleVersion = "2.14"
}
// WAILA
task installWaila(type: Copy, dependsOn: "deinstallWaila") {
// HWYLA
task installHwyla(type: Copy, dependsOn: "deinstallHwyla") {
from { configurations.mods }
include "**/*Waila*.jar"
include "**/*Hwyla*.jar"
into file(minecraft.runDir + "/mods")
}
task deinstallWaila(type: Delete) {
delete fileTree(dir: minecraft.runDir + "/mods", include: "*Waila*.jar")
task deinstallHwyla(type: Delete) {
delete fileTree(dir: minecraft.runDir + "/mods", include: "*Hwyla*.jar")
}
// IC2
@@ -43,7 +43,7 @@ task deinstallIC2(type: Delete) {
}
// TOP
task installTop(type: Copy, dependsOn: "deinstallTop") {
task installTop(type: Copy, dependsOn: ["deinstallTop"]) {
from { configurations.mods }
include "**/*TheOneProbe*.jar"
into file(minecraft.runDir + "/mods")
+1 -1
View File
@@ -1,4 +1,4 @@
#Fri Sep 16 14:56:32 CEST 2016
#Tue Jul 04 22:38:49 CEST 2017
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
+10 -24
View File
@@ -25,14 +25,13 @@ package appeng.api;
import appeng.api.definitions.IDefinitions;
import appeng.api.exceptions.FailedConnection;
import appeng.api.features.IRegistryContainer;
import appeng.api.networking.IGridBlock;
import appeng.api.networking.IGridConnection;
import appeng.api.networking.IGridHelper;
import appeng.api.networking.IGridNode;
import appeng.api.parts.IPartHelper;
import appeng.api.storage.IStorageHelper;
@AEInjectable
public interface IAppEngApi
{
@@ -42,36 +41,23 @@ public interface IAppEngApi
IRegistryContainer registries();
/**
* @return helper for working with storage data types.
* @return A helper for working with storage data types.
*/
IStorageHelper storage();
/**
* @return helper for working with grids, and buses.
* @return A helper to create {@link IGridNode} and other grid related objects.
*/
IGridHelper grid();
/**
* @return A helper for working with grids, and buses.
*/
IPartHelper partHelper();
/**
* @return an accessible list of all AE definitions
* @return An accessible list of all AE definitions
*/
IDefinitions definitions();
/**
* create a grid node for your {@link appeng.api.networking.IGridHost}
*
* @param block grid block
*
* @return grid node of block
*/
IGridNode createGridNode( IGridBlock block );
/**
* create a connection between two {@link appeng.api.networking.IGridNode}
*
* @param a to be connected gridnode
* @param b to be connected gridnode
*
* @throws appeng.api.exceptions.FailedConnection
*/
IGridConnection createGridConnection( IGridNode a, IGridNode b ) throws FailedConnection;
}
@@ -1,64 +0,0 @@
/*
* The MIT License (MIT)
*
* Copyright (c) 2013 AlgorithmX2
*
* Permission is hereby granted, free of charge, to any person obtaining a copy of
* this software and associated documentation files (the "Software"), to deal in
* the Software without restriction, including without limitation the rights to
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
* the Software, and to permit persons to whom the Software is furnished to do so,
* subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
package appeng.api.client;
import java.util.List;
import com.google.common.collect.ImmutableList;
import net.minecraft.block.state.IBlockState;
import net.minecraft.client.renderer.block.model.IBakedModel;
import net.minecraft.util.EnumFacing;
/**
* TODO: Needs to be moved to an internal class. API is only allowed to contain interfaces and/or data.
*
* @deprecated
*/
@Deprecated
public class BakingPipeline<F, T> implements BakingPipelineElement<F, T>
{
private final ImmutableList<BakingPipelineElement<?, ?>> pipeline;
public BakingPipeline( BakingPipelineElement<?, ?>... pipeline )
{
this.pipeline = ImmutableList.copyOf( pipeline );
}
/**
* TODO: fix generics
*/
@Override
public List pipe( List things, IBakedModel parent, IBlockState state, EnumFacing side, long rand )
{
for( BakingPipelineElement pipe : pipeline )
{
things = pipe.pipe( things, parent, state, side, rand );
}
return things;
}
}
@@ -1,39 +0,0 @@
/*
* The MIT License (MIT)
*
* Copyright (c) 2013 AlgorithmX2
*
* Permission is hereby granted, free of charge, to any person obtaining a copy of
* this software and associated documentation files (the "Software"), to deal in
* the Software without restriction, including without limitation the rights to
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
* the Software, and to permit persons to whom the Software is furnished to do so,
* subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
package appeng.api.client;
import java.util.List;
import net.minecraft.block.state.IBlockState;
import net.minecraft.client.renderer.block.model.IBakedModel;
import net.minecraft.util.EnumFacing;
public interface BakingPipelineElement<F, T>
{
public List<T> pipe( List<F> elements, IBakedModel parent, IBlockState state, EnumFacing side, long rand );
}
@@ -26,5 +26,5 @@ package appeng.api.config;
public enum SearchBoxMode
{
AUTOSEARCH, MANUAL_SEARCH, JEI_AUTOSEARCH, JEI_MANUAL_SEARCH
AUTOSEARCH, AUTOSEARCH_KEEP, MANUAL_SEARCH, MANUAL_SEARCH_KEEP, JEI_AUTOSEARCH, JEI_AUTOSEARCH_KEEP, JEI_MANUAL_SEARCH, JEI_MANUAL_SEARCH_KEEP
}
+35 -11
View File
@@ -33,29 +33,53 @@ public enum Settings
{
LEVEL_EMITTER_MODE( EnumSet.allOf( LevelEmitterMode.class ) ),
REDSTONE_EMITTER( EnumSet.of( RedstoneMode.HIGH_SIGNAL, RedstoneMode.LOW_SIGNAL ) ), REDSTONE_CONTROLLED( EnumSet.allOf( RedstoneMode.class ) ),
REDSTONE_EMITTER( EnumSet.of( RedstoneMode.HIGH_SIGNAL, RedstoneMode.LOW_SIGNAL ) ),
REDSTONE_CONTROLLED( EnumSet.allOf( RedstoneMode.class ) ),
CONDENSER_OUTPUT( EnumSet.allOf( CondenserOutput.class ) ),
POWER_UNITS( EnumSet.allOf( PowerUnits.class ) ), ACCESS( EnumSet.of( AccessRestriction.READ_WRITE, AccessRestriction.READ, AccessRestriction.WRITE ) ),
POWER_UNITS( EnumSet.allOf( PowerUnits.class ) ),
SORT_DIRECTION( EnumSet.allOf( SortDir.class ) ), SORT_BY( EnumSet.allOf( SortOrder.class ) ),
ACCESS( EnumSet.of( AccessRestriction.READ_WRITE, AccessRestriction.READ, AccessRestriction.WRITE ) ),
SEARCH_TOOLTIPS( EnumSet.of( YesNo.YES, YesNo.NO ) ), VIEW_MODE( EnumSet.allOf( ViewItems.class ) ), SEARCH_MODE( EnumSet.allOf( SearchBoxMode.class ) ),
SORT_DIRECTION( EnumSet.allOf( SortDir.class ) ),
ACTIONS( EnumSet.allOf( ActionItems.class ) ), IO_DIRECTION( EnumSet.of( RelativeDirection.LEFT, RelativeDirection.RIGHT ) ),
SORT_BY( EnumSet.allOf( SortOrder.class ) ),
BLOCK( EnumSet.of( YesNo.YES, YesNo.NO ) ), OPERATION_MODE( EnumSet.allOf( OperationMode.class ) ),
SEARCH_TOOLTIPS( EnumSet.of( YesNo.YES, YesNo.NO ) ),
FULLNESS_MODE( EnumSet.allOf( FullnessMode.class ) ), CRAFT_ONLY( EnumSet.of( YesNo.YES, YesNo.NO ) ),
VIEW_MODE( EnumSet.allOf( ViewItems.class ) ),
FUZZY_MODE( EnumSet.allOf( FuzzyMode.class ) ), LEVEL_TYPE( EnumSet.allOf( LevelType.class ) ),
SEARCH_MODE( EnumSet.allOf( SearchBoxMode.class ) ),
TERMINAL_STYLE( EnumSet.of( TerminalStyle.TALL, TerminalStyle.SMALL ) ), COPY_MODE( EnumSet.allOf( CopyMode.class ) ),
ACTIONS( EnumSet.allOf( ActionItems.class ) ),
INTERFACE_TERMINAL( EnumSet.of( YesNo.YES, YesNo.NO ) ), CRAFT_VIA_REDSTONE( EnumSet.of( YesNo.YES, YesNo.NO ) ),
IO_DIRECTION( EnumSet.of( RelativeDirection.LEFT, RelativeDirection.RIGHT ) ),
STORAGE_FILTER( EnumSet.allOf( StorageFilter.class ) ), PLACE_BLOCK( EnumSet.of( YesNo.YES, YesNo.NO ) ),
BLOCK( EnumSet.of( YesNo.YES, YesNo.NO ) ),
OPERATION_MODE( EnumSet.allOf( OperationMode.class ) ),
FULLNESS_MODE( EnumSet.allOf( FullnessMode.class ) ),
CRAFT_ONLY( EnumSet.of( YesNo.YES, YesNo.NO ) ),
FUZZY_MODE( EnumSet.allOf( FuzzyMode.class ) ),
LEVEL_TYPE( EnumSet.allOf( LevelType.class ) ),
TERMINAL_STYLE( EnumSet.of( TerminalStyle.TALL, TerminalStyle.SMALL ) ),
COPY_MODE( EnumSet.allOf( CopyMode.class ) ),
INTERFACE_TERMINAL( EnumSet.of( YesNo.YES, YesNo.NO ) ),
CRAFT_VIA_REDSTONE( EnumSet.of( YesNo.YES, YesNo.NO ) ),
STORAGE_FILTER( EnumSet.allOf( StorageFilter.class ) ),
PLACE_BLOCK( EnumSet.of( YesNo.YES, YesNo.NO ) ),
SCHEDULING_MODE( EnumSet.allOf( SchedulingMode.class ) );
@@ -28,7 +28,7 @@ public enum TunnelType
{
ME, // Network Tunnel
IC2_POWER, // EU Tunnel
RF_POWER, // RF Tunnel
FE_POWER, // Forge Energy tunnel
REDSTONE, // Redstone Tunnel
FLUID, // Fluid Tunnel
ITEM, // Item Tunnel
@@ -111,8 +111,6 @@ public interface IMaterials
IItemDefinition matterBall();
IItemDefinition ironNugget();
IItemDefinition certusQuartzCrystal();
IItemDefinition certusQuartzCrystalCharged();
@@ -38,7 +38,9 @@ public interface IParts
AEColoredItemDefinition cableGlass();
AEColoredItemDefinition cableDense();
AEColoredItemDefinition cableDenseCovered();
AEColoredItemDefinition cableDenseSmart();
AEColoredItemDefinition lumenCableSmart();
@@ -46,7 +48,7 @@ public interface IParts
AEColoredItemDefinition lumenCableGlass();
AEColoredItemDefinition lumenCableDense();
AEColoredItemDefinition lumenDenseCableSmart();
IItemDefinition quartzFiber();
@@ -76,11 +78,11 @@ public interface IParts
IItemDefinition p2PTunnelItems();
IItemDefinition p2PTunnelLiquids();
IItemDefinition p2PTunnelFluids();
IItemDefinition p2PTunnelEU();
// IItemDefinition p2PTunnelRF();
IItemDefinition p2PTunnelFE();
IItemDefinition p2PTunnelLight();
@@ -21,6 +21,8 @@ package appeng.api.exceptions;
public class CoreInaccessibleException extends RuntimeException
{
private static final long serialVersionUID = -7434641554655517242L;
public CoreInaccessibleException( final String message )
{
super( message );
@@ -37,7 +37,7 @@ import appeng.api.networking.IGridNode;
* @version rv3
* @since rv3
*/
public class ExistingConnectionException extends FailedConnection
public class ExistingConnectionException extends FailedConnectionException
{
private static final long serialVersionUID = 2975450379720353182L;
@@ -40,16 +40,16 @@ import appeng.api.networking.IGridNode;
* @version rv3
* @since rv0
*/
public class FailedConnection extends Exception
public class FailedConnectionException extends Exception
{
private static final long serialVersionUID = -2544208090248293753L;
public FailedConnection()
public FailedConnectionException()
{
}
public FailedConnection( String message )
public FailedConnectionException( String message )
{
super( message );
}
@@ -19,9 +19,11 @@
package appeng.api.exceptions;
public class MissingDefinition extends RuntimeException
public class MissingDefinitionException extends RuntimeException
{
public MissingDefinition( final String message )
private static final long serialVersionUID = -6547396584255825761L;
public MissingDefinitionException( final String message )
{
super( message );
}
@@ -24,12 +24,12 @@
package appeng.api.exceptions;
public class MissingIngredientError extends Exception
public class MissingIngredientException extends Exception
{
private static final long serialVersionUID = -998858343831371697L;
public MissingIngredientError( final String n )
public MissingIngredientException( final String n )
{
super( n );
}
@@ -24,12 +24,12 @@
package appeng.api.exceptions;
public class ModNotInstalled extends Exception
public class ModNotInstalledException extends Exception
{
private static final long serialVersionUID = -9052435206368425494L;
public ModNotInstalled( final String t )
public ModNotInstalledException( final String t )
{
super( t );
}
@@ -34,7 +34,7 @@ package appeng.api.exceptions;
* @version rv3
* @since rv3
*/
public class NullNodeConnectionException extends FailedConnection
public class NullNodeConnectionException extends FailedConnectionException
{
private static final long serialVersionUID = -2143719383495321764L;
@@ -24,12 +24,12 @@
package appeng.api.exceptions;
public class RecipeError extends Exception
public class RecipeException extends Exception
{
private static final long serialVersionUID = -6602870588617670262L;
public RecipeError( final String n )
public RecipeException( final String n )
{
super( n );
}
@@ -24,12 +24,12 @@
package appeng.api.exceptions;
public class RegistrationError extends Exception
public class RegistrationException extends Exception
{
private static final long serialVersionUID = -6602870588617670263L;
public RegistrationError( final String n )
public RegistrationException( final String n )
{
super( n );
}
@@ -34,7 +34,7 @@ package appeng.api.exceptions;
* @version rv3
* @since rv3
*/
public class SecurityConnectionException extends FailedConnection
public class SecurityConnectionException extends FailedConnectionException
{
private static final long serialVersionUID = 5048714900434215426L;
private static final String DEFAULT_MESSAGE = "Connection failed due to different security realms.";
@@ -0,0 +1,84 @@
/*
* The MIT License (MIT)
*
* Copyright (c) 2017 AlgorithmX2
*
* Permission is hereby granted, free of charge, to any person obtaining a copy of
* this software and associated documentation files (the "Software"), to deal in
* the Software without restriction, including without limitation the rights to
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
* the Software, and to permit persons to whom the Software is furnished to do so,
* subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
package appeng.api.features;
import javax.annotation.Nonnegative;
import javax.annotation.Nonnull;
import net.minecraft.item.Item;
import appeng.api.implementations.items.IAEItemPowerStorage;
/**
* A registry to allow mapping {@link Item}s to a specific charge rate when being placed inside a charger.
*
* The registry is used in favor of an additional method for {@link IAEItemPowerStorage} with a fixed value per item.
* This allows more flexibility for other charger like machines to choose their own values when needed.
*
* There is no guarantee that this is charged per tick, it only represents the value per operation.
* By default this is one charging operation every 10 ticks in case of an AE2 charger.
*
* @author yueh
* @version rv5
* @since rv5
*/
public interface IChargerRegistry
{
/**
* Fetch a charge rate for a specific item.
*
* The specific item does not need to have a mapping registered at all.
* In this case it will use a default value of 160 AE.
*
* @param item A {@link Item} implementing {@link IAEItemPowerStorage}.
* @return custom rate or default of 160
*/
@Nonnegative
double getChargeRate( @Nonnull Item item );
/**
* Register a custom charge rate for a specific item.
*
* Capped at 16000 to avoid extracting too much energy from a network for each operation.
* This is done silently without any feedback or exception.
* Further the cap is not fixed, it can change at any time in the future should power issues arise.
*
* @param item A {@link Item} implementing {@link IAEItemPowerStorage}.
* @param chargeRate the custom rate, must be > 0, capped to 16000d
*/
void addChargeRate( @Nonnull Item item, @Nonnegative double chargeRate );
/**
* Remove the custom rate for a specific item.
*
* It will revert to the default value afterwards.
*
* @param item A {@link Item} implementing {@link IAEItemPowerStorage}.
*/
void removeChargeRate( @Nonnull Item item );
}
@@ -0,0 +1,115 @@
/*
* The MIT License (MIT)
*
* Copyright (c) 2013 AlgorithmX2
*
* Permission is hereby granted, free of charge, to any person obtaining a copy of
* this software and associated documentation files (the "Software"), to deal in
* the Software without restriction, including without limitation the rights to
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
* the Software, and to permit persons to whom the Software is furnished to do so,
* subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
package appeng.api.features;
import javax.annotation.Nonnegative;
import javax.annotation.Nonnull;
import net.minecraft.item.ItemStack;
/**
* Builder for a grinder recipe.
*
* The only default value provided are turns at a value of 8.
*
* @author yueh
* @version rv5
* @since rv5
*/
public interface IGrinderRecipeBuilder
{
/**
* Creates an grinder recipe with inputs.
* Needs to be invoked.
*
* @param input new input for the recipe
*
* @return currently used builder
*/
@Nonnull
IGrinderRecipeBuilder withInput( @Nonnull ItemStack input );
/**
* Creates an grinder recipe with output.
* Needs to be invoked.
*
* @param output new output for the recipe
*
* @return currently used builder
*/
@Nonnull
IGrinderRecipeBuilder withOutput( @Nonnull ItemStack output );
/**
* Creates an grinder recipe with the first optional output and its chance.
*
* @param optional new first optional for the recipe
* @param chance chance for the first optional output, must be within 0.0 - 1.0
*
* @return currently used builder
*/
@Nonnull
IGrinderRecipeBuilder withFirstOptional( @Nonnull ItemStack optional, float chance );
/**
* Creates an grinder recipe with the second optional output and its chance.
*
* @param optional new second optional for the recipe
* @param chance chance for the second optional output, must be within 0.0 - 1.0
*
* @return currently used builder
*/
@Nonnull
IGrinderRecipeBuilder withSecondOptional( @Nonnull ItemStack optional, float chance );
/**
* Creates an grinder recipe with the amount of turns as cost.
*
* Defaults to 8 when not called.
*
* @param turns new turns for the recipe, must be > 0
*
* @return currently used builder
*/
@Nonnull
IGrinderRecipeBuilder withTurns( @Nonnegative int turns );
/**
* Finalizes the process of making the recipe.
* Needs to be invoked to fetch grinder recipe.
*
* @return valid grinder recipe
*
* @throws IllegalStateException when input is not defined
* @throws IllegalStateException when input has no size
* @throws IllegalStateException when output is not defined
* @throws IllegalStateException when both optionals are not defined
* @throws IllegalStateException when process type is not defined
*/
@Nonnull
IGrinderRecipe build();
}
@@ -38,6 +38,14 @@ import net.minecraft.item.ItemStack;
public interface IGrinderRegistry
{
/**
* Extensible way to create a grinder recipe.
*
* @return builder for grinder recipes
*/
@Nonnull
IGrinderRecipeBuilder builder();
/**
* An immutable list of the currently registered recipes.
*
@@ -47,44 +55,9 @@ public interface IGrinderRegistry
Collection<IGrinderRecipe> getRecipes();
/**
* Add a new recipe with a single input and output and how many turns it requires.
*
* Will ignore duplicate recipes with the same input item.
*
* @param in The {@link ItemStack} to grind.
* @param out The {@link ItemStack} to output.
* @param turns Amount of turns to turn the input into the output, with turns > 0.
* Add a new recipe to the registry.
*/
void addRecipe( @Nonnull ItemStack in, @Nonnull ItemStack out, int turns );
/**
* Add a new recipe with an input, output and a single optional output.
*
* Will ignore duplicate recipes with the same input item.
*
* @param in The {@link ItemStack} to grind.
* @param out The {@link ItemStack} to output.
* @param optional The optional {@link ItemStack} to output of a certain chance.
* @param chance Chance to get the optional output within 0.0 - 1.0
* @param turns Amount of turns to turn the input into the output, with turns > 0.
*/
void addRecipe( @Nonnull ItemStack in, @Nonnull ItemStack out, @Nonnull ItemStack optional, float chance, int turns );
/**
* add a new recipe with optional outputs, duplicates will not be added.
*
* Will ignore duplicate recipes with the same input item.
*
* @param in The {@link ItemStack} to grind.
* @param out The {@link ItemStack} to output.
* @param optional The first optional {@link ItemStack} to output of a certain chance.
* @param chance Chance to get the first optional output within 0.0 - 1.0
* @param optional2 The second optional {@link ItemStack} to output of a certain chance.
* @param chance2 chance to get the second optional output within 0.0 - 1.0
* @param turns Amount of turns to turn the input into the output, with turns > 0.
*
*/
void addRecipe( @Nonnull ItemStack in, @Nonnull ItemStack out, @Nonnull ItemStack optional, float chance, @Nonnull ItemStack optional2, float chance2, int turns );
boolean addRecipe( IGrinderRecipe recipe );
/**
* Remove the specific from the recipe list.
@@ -31,11 +31,19 @@ import net.minecraft.item.ItemStack;
* Lets you manipulate Inscriber Recipes, by adding or editing existing ones.
*
* @author thatsIch
* @version rv3
* @version rv5
* @since rv2
*/
public interface IInscriberRegistry
{
/**
* Extensible way to create an inscriber recipe.
*
* @return builder for inscriber recipes
*/
@Nonnull
IInscriberRecipeBuilder builder();
/**
* An immutable copy of currently registered recipes.
*
@@ -65,29 +73,25 @@ public interface IInscriberRegistry
@Nonnull
Set<ItemStack> getInputs();
/**
* Extensible way to create an inscriber recipe.
*
* @return builder for inscriber recipes
*/
@Nonnull
IInscriberRecipeBuilder builder();
/**
* add a new recipe the easy way, duplicates will not be added.
* Added recipes will be automatically added to the optionals and inputs.
*
* @param recipe new recipe
*
* @return true, when successfully added
*
* @throws IllegalArgumentException if null is added
*/
void addRecipe( IInscriberRecipe recipe );
boolean addRecipe( IInscriberRecipe recipe );
/**
* Removes all equal recipes from the registry.
*
*
* @param toBeRemovedRecipe to be removed recipe, can be null, makes just no sense.
*
* @return true, when successfully removed
*/
void removeRecipe( IInscriberRecipe toBeRemovedRecipe );
boolean removeRecipe( IInscriberRecipe toBeRemovedRecipe );
}
@@ -24,9 +24,11 @@
package appeng.api.features;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import net.minecraft.item.ItemStack;
import net.minecraftforge.common.capabilities.Capability;
import appeng.api.config.TunnelType;
@@ -44,7 +46,9 @@ public interface IP2PTunnelRegistry
* @param trigger - the item which triggers attunement. Nullable, but then ignored
* @param type - the type of tunnel. Nullable, but then ignored
*/
void addNewAttunement( @Nullable ItemStack trigger, @Nullable TunnelType type );
void addNewAttunement( @Nonnull ItemStack trigger, @Nullable TunnelType type );
void addNewAttunement( @Nonnull String ModId, @Nullable TunnelType type );
void addNewAttunement( @Nonnull Capability<?> cap, @Nullable TunnelType type );
/**
* returns null if no attunement can be found.
@@ -53,6 +57,6 @@ public interface IP2PTunnelRegistry
*
* @return null if no attunement can be found or attunement
*/
@Nullable
@Nonnull
TunnelType getTunnelTypeByItem( ItemStack trigger );
}
@@ -48,6 +48,7 @@ public interface IRecipeHandlerRegistry
* @param name name of crafthandler
* @param handler class of crafthandler
*/
@Deprecated
void addNewCraftHandler( String name, Class<? extends ICraftHandler> handler );
/**
@@ -65,11 +66,13 @@ public interface IRecipeHandlerRegistry
* @return A recipe handler by name, returns null on failure.
*/
@Nullable
@Deprecated
ICraftHandler getCraftHandlerFor( String name );
/**
* @return a new recipe handler, which can be used to parse, and read recipe files.
*/
@Deprecated
IRecipeHandler createNewRecipehandler();
/**
@@ -34,7 +34,8 @@ import appeng.api.storage.ICellRegistry;
/**
* @author AlgorithmX2
* @author thatsIch
* @version rv2
* @author yueh
* @version rv5
* @since rv0
*/
@AEInjectable
@@ -76,6 +77,11 @@ public interface IRegistryContainer
*/
IInscriberRegistry inscriber();
/**
* Manage charger via API
*/
IChargerRegistry charger();
/**
* get access to the locatable registry
*/
@@ -24,7 +24,7 @@
package appeng.api.implementations.guiobjects;
import net.minecraft.inventory.IInventory;
import net.minecraftforge.items.IItemHandler;
import appeng.api.networking.IGridHost;
@@ -32,8 +32,9 @@ import appeng.api.networking.IGridHost;
/**
* Obtained via {@link IGuiItem} getGuiObject
*/
public interface INetworkTool extends IInventory, IGuiItemObject
public interface INetworkTool extends IGuiItemObject
{
IGridHost getGridHost(); // null for most purposes.
IItemHandler getInventory();
}
@@ -27,6 +27,7 @@ package appeng.api.implementations.items;
import net.minecraft.item.ItemStack;
import appeng.api.config.AccessRestriction;
import appeng.api.config.Actionable;
import appeng.api.networking.energy.IAEPowerStorage;
@@ -42,27 +43,27 @@ public interface IAEItemPowerStorage
*
* @return amount unable to be stored
*/
double injectAEPower( ItemStack is, double amt );
double injectAEPower( ItemStack stack, double amount, Actionable mode );
/**
* Attempt to extract power from the device, it will extract what it can and
* return it.
*
* @param amt to be extracted power from device
* @param amount to be extracted power from device
*
* @return what it could extract
*/
double extractAEPower( ItemStack is, double amt );
double extractAEPower( ItemStack stack, double amount, Actionable mode );
/**
* @return the current maximum power ( this can change :P )
*/
double getAEMaxPower( ItemStack is );
double getAEMaxPower( ItemStack stack );
/**
* @return the current AE Power Level, this may exceed getMEMaxPower()
*/
double getAECurrentPower( ItemStack is );
double getAECurrentPower( ItemStack stack );
/**
* Control the power flow by telling what the network can do, either add? or
@@ -70,5 +71,5 @@ public interface IAEItemPowerStorage
*
* @return access restriction of network
*/
AccessRestriction getPowerFlow( ItemStack is );
AccessRestriction getPowerFlow( ItemStack stack );
}
@@ -29,6 +29,7 @@ import net.minecraft.item.ItemStack;
import net.minecraft.world.World;
import appeng.api.implementations.TransitionResult;
import appeng.api.storage.ISpatialDimension;
import appeng.api.util.WorldCoord;
@@ -57,7 +58,7 @@ public interface ISpatialStorageCell
*
* @return the world for this cell
*/
World getWorld( ItemStack is );
ISpatialDimension getSpatialDimension();
/**
* get the currently stored size.
@@ -69,22 +70,13 @@ public interface ISpatialStorageCell
WorldCoord getStoredSize( ItemStack is );
/**
* Minimum coordinates in its world for the storage cell.
* get the currently stored Dimension id.
*
* @param is spatial storage cell
*
* @return minimum coordinate of dimension
* @return dimension id or -1
*/
WorldCoord getMin( ItemStack is );
/**
* Maximum coordinates in its world for the storage cell.
*
* @param is spatial storage cell
*
* @return maximum coordinate of dimension
*/
WorldCoord getMax( ItemStack is );
int getStoredDimensionID( ItemStack is );
/**
* Perform a spatial swap with the contents of the cell, and the world.
@@ -93,9 +85,9 @@ public interface ISpatialStorageCell
* @param w world of spatial
* @param min min coord
* @param max max coord
* @param doTransition transition
* @param playerId owner of current grid or -1
*
* @return result of transition
*/
TransitionResult doSpatialTransition( ItemStack is, World w, WorldCoord min, WorldCoord max, boolean doTransition );
TransitionResult doSpatialTransition( ItemStack is, World w, WorldCoord min, WorldCoord max, int playerId );
}
@@ -23,8 +23,7 @@
package appeng.api.implementations.tiles;
import net.minecraft.inventory.IInventory;
import net.minecraftforge.items.IItemHandler;
public interface ISegmentedInventory
@@ -38,5 +37,5 @@ public interface ISegmentedInventory
*
* @return inventory with inventory name
*/
IInventory getInventoryByName( String name );
IItemHandler getInventoryByName( String name );
}
@@ -23,8 +23,7 @@
package appeng.api.implementations.tiles;
import net.minecraft.inventory.IInventory;
import net.minecraftforge.items.IItemHandler;
public interface IViewCellStorage
@@ -35,5 +34,5 @@ public interface IViewCellStorage
*
* @return inventory with at least 5 slot
*/
IInventory getViewCellStorage();
IItemHandler getViewCellStorage();
}
@@ -1,7 +1,7 @@
/*
* The MIT License (MIT)
*
* Copyright (c) 2013 AlgorithmX2
* Copyright (c) 2017 AlgorithmX2
*
* Permission is hereby granted, free of charge, to any person obtaining a copy of
* this software and associated documentation files (the "Software"), to deal in
@@ -21,39 +21,44 @@
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
package appeng.api.storage.data;
package appeng.api.networking;
import net.minecraft.nbt.NBTTagCompound;
import appeng.api.features.IItemComparison;
import appeng.api.exceptions.FailedConnectionException;
/**
* Don't cast this... either compare with it, or copy it.
*
* Don't Implement.
* A helper responsible for creating new {@link IGridNode}, {@link IGridConnection} or potentially similar tasks.
*
* @author yueh
* @version rv5
* @since rv5
*/
public interface IAETagCompound
public interface IGridHelper
{
/**
* @return a copy ( the copy will not be a IAETagCompound, it will be a NBTTagCompound )
* Create a grid node for your {@link IGridHost}
*
* The passed {@link IGridBlock} represents the definition for properties like connectable sides.
* Refer to its documentation for further details.
*
* @param block grid block
*
* @return grid node of block
*/
NBTTagCompound getNBTTagCompoundCopy();
IGridNode createGridNode( IGridBlock block );
/**
* compare to other NBTTagCompounds or IAETagCompounds
* Create a direct connection between two {@link IGridNode}.
*
* This will be considered as having a distance of 1, regardless of the location of both nodes.
*
* @param a to be connected gridnode
* @param b to be connected gridnode
*
* @param a compared object
*
* @return true, if they are the same.
* @throws appeng.api.exceptions.FailedConnectionException
*/
@Override
boolean equals( Object a );
IGridConnection createGridConnection( IGridNode a, IGridNode b ) throws FailedConnectionException;
/**
* @return the special comparison for this tag
*/
IItemComparison getSpecialComparison();
}
@@ -24,7 +24,7 @@
package appeng.api.networking.crafting;
import appeng.api.networking.security.BaseActionSource;
import appeng.api.networking.security.IActionSource;
import appeng.api.networking.storage.IBaseMonitor;
import appeng.api.storage.data.IAEItemStack;
@@ -40,7 +40,7 @@ public interface ICraftingCPU extends IBaseMonitor<IAEItemStack>
/**
* @return the action source for the CPU.
*/
BaseActionSource getActionSource();
IActionSource getActionSource();
/**
* @return the available storage in bytes
@@ -33,7 +33,7 @@ import net.minecraft.world.World;
import appeng.api.networking.IGrid;
import appeng.api.networking.IGridCache;
import appeng.api.networking.security.BaseActionSource;
import appeng.api.networking.security.IActionSource;
import appeng.api.storage.data.IAEItemStack;
@@ -63,7 +63,7 @@ public interface ICraftingGrid extends IGridCache
* @return a future which will at an undetermined point in the future get you the {@link ICraftingJob} do not wait
* on this, your be waiting forever.
*/
Future<ICraftingJob> beginCraftingJob( World world, IGrid grid, BaseActionSource actionSrc, IAEItemStack craftWhat, ICraftingCallback callback );
Future<ICraftingJob> beginCraftingJob( World world, IGrid grid, IActionSource actionSrc, IAEItemStack craftWhat, ICraftingCallback callback );
/**
* Submit the job to the Crafting system for processing.
@@ -82,7 +82,7 @@ public interface ICraftingGrid extends IGridCache
* {@link ICraftingRequester} methods. if you send null, this object should be discarded after verifying the
* return state.
*/
ICraftingLink submitJob( ICraftingJob job, ICraftingRequester requestingMachine, ICraftingCPU target, boolean prioritizePower, BaseActionSource src );
ICraftingLink submitJob( ICraftingJob job, ICraftingRequester requestingMachine, ICraftingCPU target, boolean prioritizePower, IActionSource src );
/**
* @return list of all the crafting cpus on the grid
@@ -29,16 +29,16 @@ import appeng.api.storage.data.IAEStack;
/**
* DO NOT IMPLEMENT.
*
*
* Will be injected when adding an {@link ICraftingWatcherHost} to a grid.
*/
public interface ICraftingWatcher
{
/**
* Add a specific {@link IAEStack} to watch.
*
*
* Supports multiple values, duplicate ones will not be added.
*
*
* @param stack
* @return true, if successfully added.
*/
@@ -46,7 +46,7 @@ public interface ICraftingWatcher
/**
* Remove a specific {@link IAEStack} from the watcher.
*
*
* @param stack
* @return true, if successfully removed.
*/
@@ -24,7 +24,10 @@
package appeng.api.networking.energy;
import java.util.Set;
import java.util.Collection;
import javax.annotation.Nonnegative;
import javax.annotation.Nonnull;
import appeng.api.config.Actionable;
@@ -35,17 +38,91 @@ import appeng.api.config.Actionable;
public interface IEnergyGridProvider
{
/**
* internal use only
*
* Can return a list of providers behind the current.
*
* An example would be something acting as proxy between different {@link IEnergyGrid}s.
*
* This can contain duplicate entries, AE will ensure that each provider is only visited once.
*
* internal use only
*/
double extractAEPower( double amt, Actionable mode, Set<IEnergyGrid> seen );
@Nonnull
Collection<IEnergyGridProvider> providers();
/**
* internal use only
*
* Extracts the requested amount from the provider.
*
* This should never forward a call to another {@link IEnergyGridProvider}, instead return them via
* {@link IEnergyGridProvider#providers()}
*
* @return the used amount
*/
double injectAEPower( double amt, Actionable mode, Set<IEnergyGrid> seen );
@Nonnegative
double extractProviderPower( @Nonnegative double amt, @Nonnull Actionable mode );
/**
* Injects the offered amount into the provider.
*
* This should never forward a call to another {@link IEnergyGridProvider}, instead return them via
* {@link IEnergyGridProvider#providers()}
*
* internal use only
*
* @return the leftover amount
*/
@Nonnegative
double injectProviderPower( @Nonnegative double amt, @Nonnull Actionable mode );
/**
* internal use only
*
* Returns the current demand of an provider.
*
* This should never forward a call to another {@link IEnergyGridProvider}, instead return them via
* {@link IEnergyGridProvider#providers()}
*
*
* @param d the max amount offered, the demand should never exceed it.
* @return the total amount demanded
*/
double getEnergyDemand( double d, Set<IEnergyGrid> seen );
@Nonnegative
double getProviderEnergyDemand( @Nonnegative double d );
/**
* internal use only
*
* AE currently uses this to enqueue the next visited provider.
*
* There is no guarantee that this works on in a perfect way.
* It can be limited to the returns of the past {@link IEnergyGridProvider#providers()}, but not any future one
* discovered by visiting further providers.
*
* E.g. inject into the the lowest one first or extract from the highest one.
*
* @return the current stored amount.
*
*
*/
@Nonnegative
double getProviderStoredEnergy();
/**
* internal use only
*
* AE currently uses this to enqueue the next visited provider.
*
* There is no guarantee that this works on in a perfect way.
* It can be limited to the returns of the past {@link IEnergyGridProvider#providers()}, but not any future one
* discovered by visiting further providers.
*
* E.g. inject into the the lowest one first or extract from the highest one.
*
* @return the maximum amount stored.
*/
@Nonnegative
double getProviderMaxEnergy();
}
@@ -26,16 +26,16 @@ package appeng.api.networking.energy;
/**
* DO NOT IMPLEMENT.
*
*
* Will be injected when adding an {@link IEnergyWatcherHost} to a grid.
*/
public interface IEnergyWatcher
{
/**
* Add a specific threshold to watch.
*
*
* Supports multiple values, duplicate ones will not be added.
*
*
* @param amount
* @return true, if successfully added.
*/
@@ -43,7 +43,7 @@ public interface IEnergyWatcher
/**
* Remove a specific threshold from the watcher.
*
*
* @param amount
* @return true, if successfully removed.
*/
@@ -25,7 +25,7 @@ package appeng.api.networking.events;
import appeng.api.storage.IMEMonitor;
import appeng.api.storage.StorageChannel;
import appeng.api.storage.IStorageChannel;
/**
@@ -40,9 +40,9 @@ public class MENetworkStorageEvent extends MENetworkEvent
{
public final IMEMonitor monitor;
public final StorageChannel channel;
public final IStorageChannel channel;
public MENetworkStorageEvent( final IMEMonitor o, final StorageChannel chan )
public MENetworkStorageEvent( final IMEMonitor o, final IStorageChannel chan )
{
this.monitor = o;
this.channel = chan;
@@ -24,11 +24,10 @@
package appeng.api.networking.security;
import appeng.api.networking.IGridHost;
import appeng.api.networking.IGridNode;
public interface IActionHost extends IGridHost
public interface IActionHost
{
/**
@@ -0,0 +1,77 @@
/*
* The MIT License (MIT)
*
* Copyright (c) 2013 AlgorithmX2
*
* Permission is hereby granted, free of charge, to any person obtaining a copy of
* this software and associated documentation files (the "Software"), to deal in
* the Software without restriction, including without limitation the rights to
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
* the Software, and to permit persons to whom the Software is furnished to do so,
* subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
package appeng.api.networking.security;
import java.util.Optional;
import javax.annotation.Nonnull;
import net.minecraft.entity.player.EntityPlayer;
/**
* The source of any action.
*
* This can either be a {@link EntityPlayer} or an {@link IActionHost}.
*
* In most cases this is used for security checks, but can be used to validate the source itself.
*
*/
public interface IActionSource
{
/**
* If present, AE will consider the player being the source for the action.
*
* This will take precedence over {@link IActionSource#machine()} in any case.
*
* @return An optional player issuing the action.
*/
@Nonnull
Optional<EntityPlayer> player();
/**
* If present, it indicates the {@link IActionHost} of the source.
*
* Should {@link IActionSource#player()} be absent, it will consider a machine as source.
*
* It is recommended to include the machine even when a player is present.
*
* @return An optional machine issuing the action or acting as proxy for a player.
*/
@Nonnull
Optional<IActionHost> machine();
/**
* An {@link IActionSource} can have multiple optional contexts.
*
* It is strongly recommended to limit the uses for absolutely necessary cases.
*
* Currently there are no public contexts made available by AE.
* An example would be the context interfaces use internally to avoid looping items between each other.
*/
@Nonnull
<T> Optional<T> context( @Nonnull Class<T> key );
}
@@ -1,44 +0,0 @@
/*
* The MIT License (MIT)
*
* Copyright (c) 2013 AlgorithmX2
*
* Permission is hereby granted, free of charge, to any person obtaining a copy of
* this software and associated documentation files (the "Software"), to deal in
* the Software without restriction, including without limitation the rights to
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
* the Software, and to permit persons to whom the Software is furnished to do so,
* subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
package appeng.api.networking.security;
/**
* TODO: Consider refactoring.
*/
public class MachineSource extends BaseActionSource
{
public final IActionHost via;
public MachineSource( final IActionHost v )
{
this.via = v;
}
@Override
public boolean isMachine()
{
return true;
}
}
@@ -1,49 +0,0 @@
/*
* The MIT License (MIT)
*
* Copyright (c) 2013 AlgorithmX2
*
* Permission is hereby granted, free of charge, to any person obtaining a copy of
* this software and associated documentation files (the "Software"), to deal in
* the Software without restriction, including without limitation the rights to
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
* the Software, and to permit persons to whom the Software is furnished to do so,
* subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
package appeng.api.networking.security;
import net.minecraft.entity.player.EntityPlayer;
/**
* TODO: Consider refactoring.
*/
public class PlayerSource extends BaseActionSource
{
public final EntityPlayer player;
public final IActionHost via;
public PlayerSource( final EntityPlayer p, final IActionHost v )
{
this.player = p;
this.via = v;
}
@Override
public boolean isPlayer()
{
return true;
}
}
@@ -28,7 +28,7 @@ import appeng.api.storage.IMEMonitorHandlerReceiver;
import appeng.api.storage.data.IAEStack;
public interface IBaseMonitor<T extends IAEStack>
public interface IBaseMonitor<T extends IAEStack<T>>
{
/**
@@ -29,16 +29,16 @@ import appeng.api.storage.data.IAEStack;
/**
* DO NOT IMPLEMENT.
*
*
* Will be injected when adding an {@link IStackWatcherHost} to a grid.
*/
public interface IStackWatcher
{
/**
* Add a specific {@link IAEStack} to watch.
*
*
* Supports multiple values, duplicate ones will not be added.
*
*
* @param stack
* @return true, if successfully added.
*/
@@ -46,7 +46,7 @@ public interface IStackWatcher
/**
* Remove a specific {@link IAEStack} from the watcher.
*
*
* @param stack
* @return true, if successfully removed.
*/
@@ -24,8 +24,8 @@
package appeng.api.networking.storage;
import appeng.api.networking.security.BaseActionSource;
import appeng.api.storage.StorageChannel;
import appeng.api.networking.security.IActionSource;
import appeng.api.storage.IStorageChannel;
import appeng.api.storage.data.IAEStack;
import appeng.api.storage.data.IItemList;
@@ -50,5 +50,5 @@ public interface IStackWatcherHost
* @param src action source
* @param chan storage channel
*/
void onStackChange( IItemList o, IAEStack fullStack, IAEStack diffStack, BaseActionSource src, StorageChannel chan );
void onStackChange( IItemList<?> o, IAEStack<?> fullStack, IAEStack<?> diffStack, IActionSource src, IStorageChannel<?> chan );
}
@@ -26,11 +26,11 @@ package appeng.api.networking.storage;
import appeng.api.networking.IGridCache;
import appeng.api.networking.IGridHost;
import appeng.api.networking.security.BaseActionSource;
import appeng.api.networking.security.IActionSource;
import appeng.api.storage.ICellContainer;
import appeng.api.storage.ICellProvider;
import appeng.api.storage.IStorageChannel;
import appeng.api.storage.IStorageMonitorable;
import appeng.api.storage.StorageChannel;
import appeng.api.storage.data.IAEStack;
@@ -50,7 +50,7 @@ public interface IStorageGrid extends IGridCache, IStorageMonitorable
*
* @param input injected items
*/
void postAlterationOfStoredItems( StorageChannel chan, Iterable<? extends IAEStack> input, BaseActionSource src );
void postAlterationOfStoredItems( IStorageChannel<?> chan, Iterable<? extends IAEStack<?>> input, IActionSource src );
/**
* Used to add a cell provider to the storage system
@@ -29,5 +29,5 @@ public enum BusSupport
CABLE,
DENSE_CABLE
}
@@ -24,8 +24,6 @@
package appeng.api.parts;
import javax.annotation.Nullable;
import net.minecraft.block.state.IBlockState;
import net.minecraft.entity.Entity;
import net.minecraft.item.Item;
@@ -71,7 +69,6 @@ public interface IFacadePart
/**
* The item that this facade masquerades as.
*/
@Nullable
ItemStack getTextureItem();
/**
+2 -1
View File
@@ -42,6 +42,7 @@ import net.minecraft.util.EnumFacing;
import net.minecraft.util.EnumHand;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Vec3d;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.fml.relauncher.Side;
@@ -129,7 +130,7 @@ public interface IPart extends IBoxProvider, ICustomCableConnection
/**
* a block around the bus's host has been changed.
*/
void onNeighborChanged();
void onNeighborChanged( IBlockAccess w, BlockPos pos, BlockPos neighbor );
/**
* @return output redstone on facing side
@@ -41,9 +41,9 @@ public interface IPartModel
/**
* A solid {@link IPartModel} indicates that the rendering requires a cable connection, which will also result in
* creating an intersection for the cable.
*
*
* This should be true for pretty much all parts.
*
*
* @return true for a solid part.
*/
default boolean requireCableConnection()
@@ -53,7 +53,7 @@ public interface IPartModel
/**
* A collection of {@link ResourceLocation} used as models for a part.
*
*
* @return a collection of models, never null.
*/
@Nonnull
@@ -26,11 +26,11 @@ package appeng.api.recipes;
import java.util.List;
import appeng.api.exceptions.MissingIngredientError;
import appeng.api.exceptions.RecipeError;
import appeng.api.exceptions.RegistrationError;
import appeng.api.exceptions.MissingIngredientException;
import appeng.api.exceptions.RecipeException;
import appeng.api.exceptions.RegistrationException;
@Deprecated
public interface ICraftHandler
{
@@ -40,15 +40,15 @@ public interface ICraftHandler
* @param input parsed inputs
* @param output parsed outputs
*
* @throws RecipeError
* @throws RecipeException
*/
void setup( List<List<IIngredient>> input, List<List<IIngredient>> output ) throws RecipeError;
void setup( List<List<IIngredient>> input, List<List<IIngredient>> output ) throws RecipeException;
/**
* called when all recipes are parsed, and your required to register your recipe.
*
* @throws RegistrationError
* @throws MissingIngredientError
* @throws RegistrationException
* @throws MissingIngredientException
*/
void register() throws RegistrationError, MissingIngredientError;
void register() throws RegistrationException, MissingIngredientException;
}
@@ -26,10 +26,10 @@ package appeng.api.recipes;
import net.minecraft.item.ItemStack;
import appeng.api.exceptions.MissingIngredientError;
import appeng.api.exceptions.RegistrationError;
import appeng.api.exceptions.MissingIngredientException;
import appeng.api.exceptions.RegistrationException;
@Deprecated
public interface IIngredient
{
@@ -39,10 +39,10 @@ public interface IIngredient
*
* @return a single ItemStack for the recipe handler.
*
* @throws RegistrationError
* @throws MissingIngredientError
* @throws RegistrationException
* @throws MissingIngredientException
*/
ItemStack getItemStack() throws RegistrationError, MissingIngredientError;
ItemStack getItemStack() throws RegistrationException, MissingIngredientException;
/**
* Acquire a list of all the input stacks for the current recipe, this is for handlers that support
@@ -50,10 +50,10 @@ public interface IIngredient
*
* @return an array of ItemStacks for the recipe handler.
*
* @throws RegistrationError
* @throws MissingIngredientError
* @throws RegistrationException
* @throws MissingIngredientException
*/
ItemStack[] getItemStackSet() throws RegistrationError, MissingIngredientError;
ItemStack[] getItemStackSet() throws RegistrationException, MissingIngredientException;
/**
* If you wish to support air, you must test before getting the ItemStack, or ItemStackSet
@@ -85,8 +85,8 @@ public interface IIngredient
/**
* Bakes the lists in for faster runtime look-ups.
*
* @throws MissingIngredientError
* @throws RegistrationError
* @throws MissingIngredientException
* @throws RegistrationException
*/
void bake() throws RegistrationError, MissingIngredientError;
void bake() throws RegistrationException, MissingIngredientException;
}
@@ -27,6 +27,7 @@ package appeng.api.recipes;
/**
* Represents the AE2 Recipe Loading/Reading Class
*/
@Deprecated
public interface IRecipeHandler
{
@@ -28,7 +28,7 @@ import java.io.BufferedReader;
import javax.annotation.Nonnull;
@Deprecated
public interface IRecipeLoader
{
/**
@@ -28,6 +28,7 @@ import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import appeng.api.implementations.tiles.IChestOrDrive;
import appeng.api.storage.data.IAEStack;
/**
@@ -56,7 +57,7 @@ public interface ICellHandler
*
* @return a new IMEHandler for the provided item
*/
IMEInventoryHandler getCellInventory( ItemStack is, ISaveProvider host, StorageChannel channel );
<T extends IAEStack<T>> IMEInventoryHandler<T> getCellInventory( ItemStack is, ISaveProvider host, IStorageChannel<T> channel );
/**
* Called when the storage cell is planed in an ME Chest and the user tries to open the terminal side, if your item
@@ -70,7 +71,7 @@ public interface ICellHandler
* @param is item
* @param chan storage channel
*/
void openChestGui( EntityPlayer player, IChestOrDrive chest, ICellHandler cellHandler, IMEInventoryHandler inv, ItemStack is, StorageChannel chan );
<T extends IAEStack<T>> void openChestGui( EntityPlayer player, IChestOrDrive chest, ICellHandler cellHandler, IMEInventoryHandler<T> inv, ItemStack is, IStorageChannel<T> chan );
/**
* 0 - cell is missing.
@@ -86,10 +87,10 @@ public interface ICellHandler
*
* @return get the status of the cell based on its contents.
*/
int getStatusForCell( ItemStack is, IMEInventory handler );
<T extends IAEStack<T>> int getStatusForCell( ItemStack is, IMEInventory<T> handler );
/**
* @return the ae/t to drain for this storage cell inside a chest/drive.
*/
double cellIdleDrain( ItemStack is, IMEInventory handler );
<T extends IAEStack<T>> double cellIdleDrain( ItemStack is, IMEInventory<T> handler );
}
@@ -24,8 +24,8 @@
package appeng.api.storage;
import net.minecraft.inventory.IInventory;
import net.minecraft.item.ItemStack;
import net.minecraftforge.items.IItemHandler;
import appeng.api.config.FuzzyMode;
import appeng.api.storage.data.IAEItemStack;
@@ -52,12 +52,12 @@ public interface ICellInventory extends IMEInventory<IAEItemStack>
/**
* @return access configured list
*/
IInventory getConfigInventory();
IItemHandler getConfigInventory();
/**
* @return access installed upgrades.
*/
IInventory getUpgradesInventory();
IItemHandler getUpgradesInventory();
/**
* @return How many bytes are used for each type?
@@ -42,7 +42,7 @@ public interface ICellProvider
*
* @return a valid list of handlers, NEVER NULL
*/
List<IMEInventoryHandler> getCellArray( StorageChannel channel );
List<IMEInventoryHandler> getCellArray( IStorageChannel<?> channel );
/**
* the storage's priority.
@@ -27,6 +27,7 @@ package appeng.api.storage;
import net.minecraft.item.ItemStack;
import appeng.api.IAppEngApi;
import appeng.api.storage.data.IAEStack;
/**
@@ -73,5 +74,5 @@ public interface ICellRegistry
*
* @return new IMEInventoryHandler, or null if there isn't one.
*/
IMEInventoryHandler getCellInventory( ItemStack is, ISaveProvider host, StorageChannel chan );
<T extends IAEStack<T>> IMEInventoryHandler<T> getCellInventory( ItemStack is, ISaveProvider host, IStorageChannel<T> chan );
}
@@ -24,8 +24,8 @@
package appeng.api.storage;
import net.minecraft.inventory.IInventory;
import net.minecraft.item.ItemStack;
import net.minecraftforge.items.IItemHandler;
import appeng.api.config.FuzzyMode;
@@ -48,7 +48,7 @@ public interface ICellWorkbenchItem
*
* onInventoryChange will be called when saving is needed.
*/
IInventory getUpgradesInventory( ItemStack is );
IItemHandler getUpgradesInventory( ItemStack is );
/**
* Used to extract, or mirror the contents of the work bench onto the cell.
@@ -57,7 +57,7 @@ public interface ICellWorkbenchItem
*
* onInventoryChange will be called when saving is needed.
*/
IInventory getConfigInventory( ItemStack is );
IItemHandler getConfigInventory( ItemStack is );
/**
* @return the current fuzzy status.
@@ -25,7 +25,7 @@ package appeng.api.storage;
import appeng.api.config.Actionable;
import appeng.api.networking.security.BaseActionSource;
import appeng.api.networking.security.IActionSource;
import appeng.api.storage.data.IAEStack;
import appeng.api.storage.data.IItemList;
@@ -40,7 +40,7 @@ import appeng.api.storage.data.IItemList;
* If you want to request a stack of an item, you should should determine that prior to requesting the stack from the
* inventory.
*/
public interface IMEInventory<StackType extends IAEStack>
public interface IMEInventory<T extends IAEStack<T>>
{
/**
@@ -52,7 +52,7 @@ public interface IMEInventory<StackType extends IAEStack>
*
* @return returns the number of items not added.
*/
StackType injectItems( StackType input, Actionable type, BaseActionSource src );
T injectItems( T input, Actionable type, IActionSource src );
/**
* Extract the specified item from the ME Inventory
@@ -62,7 +62,7 @@ public interface IMEInventory<StackType extends IAEStack>
*
* @return returns the number of items extracted, null
*/
StackType extractItems( StackType request, Actionable mode, BaseActionSource src );
T extractItems( T request, Actionable mode, IActionSource src );
/**
* request a full report of all available items, storage.
@@ -71,10 +71,10 @@ public interface IMEInventory<StackType extends IAEStack>
*
* @return returns same list that was passed in, is passed out
*/
IItemList<StackType> getAvailableItems( IItemList<StackType> out );
IItemList<T> getAvailableItems( IItemList<T> out );
/**
* @return the type of channel your handler should be part of
*/
StorageChannel getChannel();
IStorageChannel<T> getChannel();
}
@@ -32,9 +32,9 @@ import appeng.api.storage.data.IAEStack;
* Thin logic layer that can be swapped with different IMEInventory implementations, used to handle features related to
* storage, that are Separate from the storage medium itself.
*
* @param <StackType>
* @param <T>
*/
public interface IMEInventoryHandler<StackType extends IAEStack> extends IMEInventory<StackType>
public interface IMEInventoryHandler<T extends IAEStack<T>> extends IMEInventory<T>
{
/**
@@ -52,7 +52,7 @@ public interface IMEInventoryHandler<StackType extends IAEStack> extends IMEInve
*
* @return if its prioritized
*/
boolean isPrioritized( StackType input );
boolean isPrioritized( T input );
/**
* determine if an item can be accepted and stored.
@@ -61,7 +61,7 @@ public interface IMEInventoryHandler<StackType extends IAEStack> extends IMEInve
*
* @return if the item can be added
*/
boolean canAccept( StackType input );
boolean canAccept( T input );
/**
* determine what the priority of the inventory is.
@@ -29,7 +29,7 @@ import appeng.api.storage.data.IAEStack;
import appeng.api.storage.data.IItemList;
public interface IMEMonitor<T extends IAEStack> extends IMEInventoryHandler<T>, IBaseMonitor<T>
public interface IMEMonitor<T extends IAEStack<T>> extends IMEInventoryHandler<T>, IBaseMonitor<T>
{
/**
@@ -37,7 +37,7 @@ public interface IMEMonitor<T extends IAEStack> extends IMEInventoryHandler<T>,
*/
@Override
@Deprecated
IItemList<T> getAvailableItems( IItemList out );
IItemList<T> getAvailableItems( IItemList<T> out );
/**
* Get access to the full item list of the network, preferred over {@link IMEInventory} .getAvailableItems(...)
@@ -24,12 +24,12 @@
package appeng.api.storage;
import appeng.api.networking.security.BaseActionSource;
import appeng.api.networking.security.IActionSource;
import appeng.api.networking.storage.IBaseMonitor;
import appeng.api.storage.data.IAEStack;
public interface IMEMonitorHandlerReceiver<StackType extends IAEStack>
public interface IMEMonitorHandlerReceiver<T extends IAEStack<T>>
{
/**
@@ -46,7 +46,7 @@ public interface IMEMonitorHandlerReceiver<StackType extends IAEStack>
*
* @param change done change
*/
void postChange( IBaseMonitor<StackType> monitor, Iterable<StackType> change, BaseActionSource actionSource );
void postChange( IBaseMonitor<T> monitor, Iterable<T> change, IActionSource actionSource );
/**
* called when the list updates its contents, this is mostly for handling power events.
@@ -27,5 +27,5 @@ package appeng.api.storage;
public interface ISaveProvider
{
void saveChanges( IMEInventory cellInventory );
void saveChanges( IMEInventory<?> cellInventory );
}
@@ -0,0 +1,41 @@
/*
* This file is part of Applied Energistics 2.
* Copyright (c) 2013 - 2017, AlgorithmX2, All rights reserved.
*
* Applied Energistics 2 is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Applied Energistics 2 is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with Applied Energistics 2. If not, see <http://www.gnu.org/licenses/lgpl>.
*/
package appeng.api.storage;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
public interface ISpatialDimension
{
World getWorld();
int createNewCellDimension( BlockPos contentSize, int playerId );
void deleteCellDimension( int cellDimId );
boolean isCellDimension( int cellDimID );
int getCellDimensionOwner( int cellDimId );
BlockPos getCellDimensionOrigin( int cellDimId );
BlockPos getCellContentSize( int cellDimId );
}
@@ -0,0 +1,116 @@
/*
* The MIT License (MIT)
*
* Copyright (c) 2013 AlgorithmX2
*
* Permission is hereby granted, free of charge, to any person obtaining a copy of
* this software and associated documentation files (the "Software"), to deal in
* the Software without restriction, including without limitation the rights to
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
* the Software, and to permit persons to whom the Software is furnished to do so,
* subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
package appeng.api.storage;
import java.io.IOException;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import io.netty.buffer.ByteBuf;
import net.minecraft.item.ItemStack;
import appeng.api.networking.energy.IEnergySource;
import appeng.api.networking.security.IActionSource;
import appeng.api.storage.data.IAEItemStack;
import appeng.api.storage.data.IAEStack;
import appeng.api.storage.data.IItemList;
public interface IStorageChannel<T extends IAEStack<T>>
{
/**
* Can be used as factor for transferring stacks of a channel.
*
* E.g. used by IO Ports to transfer 1000 mB, not 1 mB to match the
* item channel transferring a full bucket per operation.
*
* @return
*/
default int transferFactor()
{
return 1;
}
/**
* Create a new {@link IItemList} of the specific type.
*
* @return
*/
@Nonnull
IItemList<T> createList();
/**
* Create a new {@link IAEStack} subtype of the specific object.
*
* The parameter is unbound to allow a slightly more flexible approach.
* But the general intention is about converting an {@link ItemStack} into the corresponding {@link IAEItemStack}.
* Another valid case might be to use it instead of {@link IAEStack#copy()}, but this might not be supported by all
* types.
*
* @param input The object to turn into an {@link IAEStack}
* @return The converted stack or null
*/
@Nullable
T createStack( @Nonnull Object input );
/**
*
* @param input
* @return
* @throws IOException
*/
@Nullable
T readFromPacket( @Nonnull ByteBuf input ) throws IOException;
/**
* use energy from energy, to remove request items from cell, at the request of src.
*
* @param energy to be drained energy source
* @param cell cell of requested items
* @param request requested items
* @param src action source
*
* @return items that successfully extracted.
*/
@Nullable
T poweredExtraction( @Nonnull IEnergySource energy, @Nonnull IMEInventory<T> cell, @Nonnull T request, @Nonnull IActionSource src );
/**
* use energy from energy, to inject input items into cell, at the request of src
*
* @param energy to be added energy source
* @param cell injected cell
* @param input to be injected items
* @param src action source
*
* @return items that failed to insert.
*/
@Nullable
T poweredInsert( @Nonnull IEnergySource energy, @Nonnull IMEInventory<T> cell, @Nonnull T input, @Nonnull IActionSource src );
}
@@ -24,26 +24,63 @@
package appeng.api.storage;
import java.io.IOException;
import java.util.Collection;
import io.netty.buffer.ByteBuf;
import javax.annotation.Nonnull;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraftforge.fluids.FluidStack;
import appeng.api.networking.crafting.ICraftingLink;
import appeng.api.networking.crafting.ICraftingRequester;
import appeng.api.networking.energy.IEnergySource;
import appeng.api.networking.security.BaseActionSource;
import appeng.api.storage.data.IAEFluidStack;
import appeng.api.storage.data.IAEItemStack;
import appeng.api.storage.data.IItemList;
import appeng.api.storage.data.IAEStack;
public interface IStorageHelper
{
/**
* Register a new storage channel.
*
* AE2 already provides native channels for {@link IAEItemStack} and {@link IAEFluidStack}.
*
* Each {@link IAEStack} subtype can only have a single factory instance. Overwriting is not intended.
* Each subtype should be a direct one, this might be enforced at any time.
*
* Channel class and factory instance can be used interchangeable as identifier. In most cases the factory instance
* is used as key as having direct access the methods is more beneficial compared to being forced to query the
* registry each time.
*
* Caching the factory instance in a field or local variable is perfectly for performance reasons. But do not use
* any AE2 internal field as they can change randomly between releases.
*
* @param channel The channel type, must be a subtype of {@link IStorageChannel}
* @param factory An instance implementing the channel, must be be an instance of channel
*/
@Nonnull
<T extends IAEStack<T>, C extends IStorageChannel<T>> void registerStorageChannel( @Nonnull Class<C> channel, @Nonnull C factory );
/**
* Fetch the factory instance for a specific storage channel.
*
* Channel must be a direct subtype of {@link IStorageChannel}.
*
* @throws NullPointerException when fetching an unregistered channel.
* @param channel The channel type
* @return the factory instance
*/
@Nonnull
<T extends IAEStack<T>, C extends IStorageChannel<T>> C getStorageChannel( @Nonnull Class<C> channel );
/**
* An unmodifiable collection of all registered factory instance.
*
* This is mainly used as helper to let storage grids construct their internal storage for each type.
*/
@Nonnull
Collection<IStorageChannel<? extends IAEStack<?>>> storageChannels();
/**
* load a crafting link from nbt data.
*
@@ -53,73 +90,4 @@ public interface IStorageHelper
*/
ICraftingLink loadCraftingLink( NBTTagCompound data, ICraftingRequester req );
/**
* @param is An ItemStack
*
* @return a new INSTANCE of {@link IAEItemStack} from a MC {@link ItemStack}
*/
IAEItemStack createItemStack( ItemStack is );
/**
* @param is A FluidStack
*
* @return a new INSTANCE of {@link IAEFluidStack} from a Forge {@link FluidStack}
*/
IAEFluidStack createFluidStack( FluidStack is );
/**
* @return a new INSTANCE of {@link IItemList} for items
*/
IItemList<IAEItemStack> createItemList();
/**
* @return a new INSTANCE of {@link IItemList} for fluids
*/
IItemList<IAEFluidStack> createFluidList();
/**
* Read a AE Item Stack from a byte stream, returns a AE item stack or null.
*
* @param input to be loaded data
*
* @return item based of data
*
* @throws IOException if file could not be read
*/
IAEItemStack readItemFromPacket( ByteBuf input ) throws IOException;
/**
* Read a AE Fluid Stack from a byte stream, returns a AE fluid stack or null.
*
* @param input to be loaded data
*
* @return fluid based on data
*
* @throws IOException if file could not be written
*/
IAEFluidStack readFluidFromPacket( ByteBuf input ) throws IOException;
/**
* use energy from energy, to remove request items from cell, at the request of src.
*
* @param energy to be drained energy source
* @param cell cell of requested items
* @param request requested items
* @param src action source
*
* @return items that successfully extracted.
*/
IAEItemStack poweredExtraction( IEnergySource energy, IMEInventory<IAEItemStack> cell, IAEItemStack request, BaseActionSource src );
/**
* use energy from energy, to inject input items into cell, at the request of src
*
* @param energy to be added energy source
* @param cell injected cell
* @param input to be injected items
* @param src action source
*
* @return items that failed to insert.
*/
IAEItemStack poweredInsert( IEnergySource energy, IMEInventory<IAEItemStack> cell, IAEItemStack input, BaseActionSource src );
}
@@ -24,8 +24,7 @@
package appeng.api.storage;
import appeng.api.storage.data.IAEFluidStack;
import appeng.api.storage.data.IAEItemStack;
import appeng.api.storage.data.IAEStack;
/**
@@ -35,13 +34,6 @@ import appeng.api.storage.data.IAEItemStack;
public interface IStorageMonitorable
{
/**
* Access the item inventory for the monitorable storage.
*/
IMEMonitor<IAEItemStack> getItemInventory();
<T extends IAEStack<T>> IMEMonitor<T> getInventory( IStorageChannel<T> channel );
/**
* Access the fluid inventory for the monitorable storage.
*/
IMEMonitor<IAEFluidStack> getFluidInventory();
}
@@ -4,7 +4,7 @@ package appeng.api.storage;
import javax.annotation.Nullable;
import appeng.api.networking.security.BaseActionSource;
import appeng.api.networking.security.IActionSource;
/**
@@ -22,5 +22,5 @@ public interface IStorageMonitorableAccessor
* @return Null if the network cannot be accessed by the given action source (i.e. security doesn't permit it).
*/
@Nullable
IStorageMonitorable getInventory( BaseActionSource src );
IStorageMonitorable getInventory( IActionSource src );
}
@@ -1,64 +0,0 @@
/*
* The MIT License (MIT)
*
* Copyright (c) 2013 AlgorithmX2
*
* Permission is hereby granted, free of charge, to any person obtaining a copy of
* this software and associated documentation files (the "Software"), to deal in
* the Software without restriction, including without limitation the rights to
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
* the Software, and to permit persons to whom the Software is furnished to do so,
* subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
package appeng.api.storage;
import appeng.api.AEApi;
import appeng.api.storage.data.IAEFluidStack;
import appeng.api.storage.data.IAEItemStack;
import appeng.api.storage.data.IAEStack;
import appeng.api.storage.data.IItemList;
public enum StorageChannel
{
/**
* AE2's Default Storage.
*/
ITEMS( IAEItemStack.class ),
/**
* AE2's Fluid Based Storage ( mainly added to better support ExtraCells )
*/
FLUIDS( IAEFluidStack.class );
public final Class<? extends IAEStack> type;
StorageChannel( final Class<? extends IAEStack> t )
{
this.type = t;
}
public IItemList createList()
{
if( this == ITEMS )
{
return AEApi.instance().storage().createItemList();
}
else
{
return AEApi.instance().storage().createFluidList();
}
}
}
@@ -1,7 +1,7 @@
/*
* The MIT License (MIT)
*
* Copyright (c) 2013 AlgorithmX2
* Copyright (c) 2017 AlgorithmX2
*
* Permission is hereby granted, free of charge, to any person obtaining a copy of
* this software and associated documentation files (the "Software"), to deal in
@@ -21,21 +21,14 @@
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
package appeng.api.networking.security;
package appeng.api.storage.channels;
/**
* TODO: Consider refactoring.
*/
public class BaseActionSource
import appeng.api.storage.IStorageChannel;
import appeng.api.storage.data.IAEFluidStack;
public interface IFluidStorageChannel extends IStorageChannel<IAEFluidStack>
{
public boolean isPlayer()
{
return false;
}
public boolean isMachine()
{
return false;
}
}
@@ -0,0 +1,34 @@
/*
* The MIT License (MIT)
*
* Copyright (c) 2017 AlgorithmX2
*
* Permission is hereby granted, free of charge, to any person obtaining a copy of
* this software and associated documentation files (the "Software"), to deal in
* the Software without restriction, including without limitation the rights to
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
* the Software, and to permit persons to whom the Software is furnished to do so,
* subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
package appeng.api.storage.channels;
import appeng.api.storage.IStorageChannel;
import appeng.api.storage.data.IAEItemStack;
public interface IItemStorageChannel extends IStorageChannel<IAEItemStack>
{
}
@@ -37,7 +37,7 @@ import net.minecraftforge.fluids.FluidStack;
*
* Don't Implement.
*
* Construct with Util.createFluidStack( FluidStack )
* Construct with AEApi.instance().storage().getStorageChannel( IFluidStorageChannel.class).createStack( FluidStack )
*/
public interface IAEFluidStack extends IAEStack<IAEFluidStack>
{
@@ -36,7 +36,7 @@ import net.minecraft.item.ItemStack;
*
* Don't Implement.
*
* Construct with Util.createItemStack( ItemStack )
* Construct with AEApi.instance().storage().getStorageChannel( IItemStorageChannel.class).createStack( ItemStack )
*/
public interface IAEItemStack extends IAEStack<IAEItemStack>
{
@@ -46,7 +46,7 @@ public interface IAEItemStack extends IAEStack<IAEItemStack>
*
* @return new ItemStack
*/
ItemStack getItemStack();
ItemStack createItemStack();
/**
* is there NBT Data for this item?
@@ -105,4 +105,11 @@ public interface IAEItemStack extends IAEStack<IAEItemStack>
* @return true if it is the same type (same item, damage, nbt)
*/
boolean isSameType( ItemStack stored );
/**
* DO NOT MODIFY THIS STACK! NEVER. If you think about it .. DON'T
*
* @return definition stack
*/
ItemStack getDefinition();
}
@@ -28,13 +28,14 @@ import java.io.IOException;
import io.netty.buffer.ByteBuf;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import appeng.api.config.FuzzyMode;
import appeng.api.storage.StorageChannel;
import appeng.api.storage.IStorageChannel;
public interface IAEStack<StackType extends IAEStack>
public interface IAEStack<T extends IAEStack<T>>
{
/**
@@ -42,7 +43,7 @@ public interface IAEStack<StackType extends IAEStack>
*
* @param is added item
*/
void add( StackType is );
void add( T is );
/**
* number of items in the stack.
@@ -56,7 +57,7 @@ public interface IAEStack<StackType extends IAEStack>
*
* @param stackSize , ItemStack.stackSize = N
*/
StackType setStackSize( long stackSize );
T setStackSize( long stackSize );
/**
* Same as getStackSize, but for requestable items. ( LP )
@@ -70,7 +71,7 @@ public interface IAEStack<StackType extends IAEStack>
*
* @return basically itemStack.stackSize = N but for setStackSize items.
*/
StackType setCountRequestable( long countRequestable );
T setCountRequestable( long countRequestable );
/**
* true, if the item can be crafted.
@@ -84,12 +85,12 @@ public interface IAEStack<StackType extends IAEStack>
*
* @param isCraftable can item be crafted
*/
StackType setCraftable( boolean isCraftable );
T setCraftable( boolean isCraftable );
/**
* clears, requestable, craftable, and stack sizes.
*/
StackType reset();
T reset();
/**
* returns true, if the item can be crafted, requested, or extracted.
@@ -173,21 +174,14 @@ public interface IAEStack<StackType extends IAEStack>
*
* @return a new Stack, which is copied from the original.
*/
StackType copy();
T copy();
/**
* create an empty stack.
*
* @return a new stack, which represents an empty copy of the original.
*/
StackType empty();
/**
* obtain the NBT Data for the item.
*
* @return nbt data
*/
IAETagCompound getTagCompound();
T empty();
/**
* @return true if the stack is a {@link IAEItemStack}
@@ -202,5 +196,12 @@ public interface IAEStack<StackType extends IAEStack>
/**
* @return ITEM or FLUID
*/
StorageChannel getChannel();
IStorageChannel<T> getChannel();
/**
* Returns itemstack for display and similar purposes. Always has a count of 1.
*
* @return itemstack
*/
ItemStack asItemStackRepresentation();
}
@@ -34,9 +34,8 @@ import appeng.api.config.FuzzyMode;
*
* Don't Implement.
*
* Construct with Util.createItemList()
*/
public interface IItemContainer<StackType extends IAEStack>
public interface IItemContainer<T extends IAEStack<T>>
{
/**
@@ -44,7 +43,7 @@ public interface IItemContainer<StackType extends IAEStack>
*
* @param option added stack
*/
void add( StackType option ); // adds stack as is
void add( T option ); // adds stack as is
/**
* @param i compared item
@@ -52,14 +51,14 @@ public interface IItemContainer<StackType extends IAEStack>
* @return a stack equivalent to the stack passed in, but with the correct stack size information, or null if its
* not present
*/
StackType findPrecise( StackType i );
T findPrecise( T i );
/**
* @param input compared item
*
* @return a list of relevant fuzzy matched stacks
*/
Collection<StackType> findFuzzy( StackType input, FuzzyMode fuzzy );
Collection<T> findFuzzy( T input, FuzzyMode fuzzy );
/**
* @return true if there are no items in the list
@@ -26,15 +26,20 @@ package appeng.api.storage.data;
import java.util.Iterator;
import appeng.api.storage.IStorageChannel;
/**
* Represents a list of items in AE.
*
* Don't Implement.
*
* Construct with Util.createItemList()
* Construct with
* - For items: AEApi.instance().storage().getStorageChannel( IItemStorageChannel.class).createList()
* - For fluids: AEApi.instance().storage().getStorageChannel( IFluidStorageChannel.class).createList()
* - Replace with the corresponding {@link IStorageChannel} type for non native channels
*/
public interface IItemList<StackType extends IAEStack> extends IItemContainer<StackType>, Iterable<StackType>
public interface IItemList<T extends IAEStack<T>> extends IItemContainer<T>, Iterable<T>
{
/**
@@ -43,14 +48,14 @@ public interface IItemList<StackType extends IAEStack> extends IItemContainer<St
*
* @param option stacktype option
*/
void addStorage( StackType option ); // adds a stack as stored
void addStorage( T option ); // adds a stack as stored
/**
* add a stack to the list as craftable, this will merge the stack with an item already in the list if found.
*
* @param option stacktype option
*/
void addCrafting( StackType option );
void addCrafting( T option );
/**
* add a stack to the list, stack size is used to add to requestable, this will merge the stack with an item already
@@ -58,12 +63,12 @@ public interface IItemList<StackType extends IAEStack> extends IItemContainer<St
*
* @param option stacktype option
*/
void addRequestable( StackType option ); // adds a stack as requestable
void addRequestable( T option ); // adds a stack as requestable
/**
* @return the first item in the list
*/
StackType getFirstItem();
T getFirstItem();
/**
* @return the number of items in the list
@@ -74,7 +79,7 @@ public interface IItemList<StackType extends IAEStack> extends IItemContainer<St
* allows you to iterate the list.
*/
@Override
Iterator<StackType> iterator();
Iterator<T> iterator();
/**
* resets stack sizes to 0.
@@ -47,15 +47,21 @@ public enum AECableType
SMART,
/**
* Dense Cable, represents a tier 2 block that can carry 32 channels.
* Smart Dense Cable, represents a tier 2 block that can carry 32 channels.
*/
DENSE;
DENSE_COVERED,
/**
* Smart Dense Cable, represents a tier 2 block that can carry 32 channels.
*/
DENSE_SMART;
public static final AECableType[] VALIDCABLES = {
GLASS,
COVERED,
SMART,
DENSE
DENSE_COVERED,
DENSE_SMART
};
}
+5 -5
View File
@@ -146,14 +146,14 @@ public enum AEColor
case 0:
return -1;
case TINTINDEX_DARK:
return blackVariant;
return this.blackVariant;
case TINTINDEX_MEDIUM:
return mediumVariant;
return this.mediumVariant;
case TINTINDEX_BRIGHT:
return whiteVariant;
return this.whiteVariant;
case TINTINDEX_MEDIUM_BRIGHT:
final int light = whiteVariant;
final int dark = mediumVariant;
final int light = this.whiteVariant;
final int dark = this.mediumVariant;
return ( ( ( ( ( light >> 16 ) & 0xff ) + ( ( dark >> 16 ) & 0xff ) ) / 2 ) << 16 ) | ( ( ( ( ( light >> 8 ) & 0xff ) + ( ( dark >> 8 ) & 0xff ) ) / 2 ) << 8 ) | ( ( ( ( light ) & 0xff ) + ( ( dark ) & 0xff ) ) / 2 );
default:
return -1;
+21 -22
View File
@@ -31,6 +31,7 @@ import net.minecraft.block.properties.IProperty;
import net.minecraft.block.state.BlockStateContainer;
import net.minecraft.block.state.IBlockState;
import net.minecraft.client.Minecraft;
import net.minecraft.client.util.ITooltipFlag;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
@@ -93,12 +94,6 @@ public abstract class AEBaseBlock extends Block
this.fullBlock = this.isFullSize();
}
@Override
public final boolean isVisuallyOpaque()
{
return this.isOpaque() && this.isFullSize();
}
@Override
protected BlockStateContainer createBlockState()
{
@@ -114,22 +109,23 @@ public abstract class AEBaseBlock extends Block
@Override
public AxisAlignedBB getBoundingBox( IBlockState state, IBlockAccess source, BlockPos pos )
{
return boundingBox;
return this.boundingBox;
}
@SuppressWarnings( "deprecation" )
@Override
public void addCollisionBoxToList( final IBlockState state, final World w, final BlockPos pos, final AxisAlignedBB bb, final List<AxisAlignedBB> out, final Entity e )
public void addCollisionBoxToList( final IBlockState state, final World w, final BlockPos pos, final AxisAlignedBB bb, final List<AxisAlignedBB> out, @Nullable final Entity e, boolean p_185477_7_ )
{
final ICustomCollision collisionHandler = this.getCustomCollision( w, pos );
if( collisionHandler != null && bb != null )
{
final List<AxisAlignedBB> tmp = new ArrayList<AxisAlignedBB>();
final List<AxisAlignedBB> tmp = new ArrayList<>();
collisionHandler.addCollidingBlockToList( w, pos, bb, tmp, e );
for( final AxisAlignedBB b : tmp )
{
final AxisAlignedBB offset = b.offset( pos.getX(), pos.getY(), pos.getZ() );
if( bb.intersectsWith( offset ) )
if( bb.intersects( offset ) )
{
out.add( offset );
}
@@ -137,10 +133,11 @@ public abstract class AEBaseBlock extends Block
}
else
{
super.addCollisionBoxToList( state, w, pos, bb, out, e );
super.addCollisionBoxToList( state, w, pos, bb, out, e, p_185477_7_ );
}
}
@SuppressWarnings( "deprecation" )
@Override
@SideOnly( Side.CLIENT )
public AxisAlignedBB getSelectedBoundingBox( IBlockState state, final World w, final BlockPos pos )
@@ -151,10 +148,10 @@ public abstract class AEBaseBlock extends Block
{
if( Platform.isClient() )
{
final EntityPlayer player = Minecraft.getMinecraft().thePlayer;
final EntityPlayer player = Minecraft.getMinecraft().player;
final LookDirection ld = Platform.getPlayerRay( player, Platform.getEyeOffset( player ) );
final Iterable<AxisAlignedBB> bbs = collisionHandler.getSelectedBoundingBoxesFromPool( w, pos, Minecraft.getMinecraft().thePlayer, true );
final Iterable<AxisAlignedBB> bbs = collisionHandler.getSelectedBoundingBoxesFromPool( w, pos, Minecraft.getMinecraft().player, true );
AxisAlignedBB br = null;
double lastDist = 0;
@@ -169,9 +166,9 @@ public abstract class AEBaseBlock extends Block
if( r != null )
{
final double xLen = ( ld.getA().xCoord - r.hitVec.xCoord );
final double yLen = ( ld.getA().yCoord - r.hitVec.yCoord );
final double zLen = ( ld.getA().zCoord - r.hitVec.zCoord );
final double xLen = ( ld.getA().x - r.hitVec.x );
final double yLen = ( ld.getA().y - r.hitVec.y );
final double zLen = ( ld.getA().z - r.hitVec.z );
final double thisDist = xLen * xLen + yLen * yLen + zLen * zLen;
@@ -233,6 +230,7 @@ public abstract class AEBaseBlock extends Block
return this.isOpaque();
}
@SuppressWarnings( "deprecation" )
@Override
public RayTraceResult collisionRayTrace( final IBlockState state, final World w, final BlockPos pos, final Vec3d a, final Vec3d b )
{
@@ -255,9 +253,9 @@ public abstract class AEBaseBlock extends Block
if( r != null )
{
final double xLen = ( a.xCoord - r.hitVec.xCoord );
final double yLen = ( a.yCoord - r.hitVec.yCoord );
final double zLen = ( a.zCoord - r.hitVec.zCoord );
final double xLen = ( a.x - r.hitVec.x );
final double yLen = ( a.y - r.hitVec.y );
final double zLen = ( a.z - r.hitVec.z );
final double thisDist = xLen * xLen + yLen * yLen + zLen * zLen;
if( br == null || lastDist > thisDist )
@@ -338,8 +336,9 @@ public abstract class AEBaseBlock extends Block
return new EnumFacing[0];
}
@SideOnly( Side.CLIENT )
@Override
public void addInformation( final ItemStack is, final EntityPlayer player, final List<String> lines, final boolean advancedItemTooltips )
public void addInformation( final ItemStack is, final World world, final List<String> lines, final ITooltipFlag advancedItemTooltips )
{
}
@@ -417,8 +416,8 @@ public abstract class AEBaseBlock extends Block
@Override
public String toString()
{
String regName = getRegistryName() != null ? getRegistryName().getResourcePath() : "unregistered";
return getClass().getSimpleName() + "[" + regName + "]";
String regName = this.getRegistryName() != null ? this.getRegistryName().getResourcePath() : "unregistered";
return this.getClass().getSimpleName() + "[" + regName + "]";
}
protected String getUnlocalizedName( final ItemStack is )
@@ -23,6 +23,7 @@ import java.util.List;
import net.minecraft.block.Block;
import net.minecraft.block.state.IBlockState;
import net.minecraft.client.util.ITooltipFlag;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemBlock;
import net.minecraft.item.ItemStack;
@@ -66,16 +67,15 @@ public class AEBaseItemBlock extends ItemBlock
@Override
@SideOnly( Side.CLIENT )
@SuppressWarnings( "unchecked" )
public final void addInformation( final ItemStack itemStack, final EntityPlayer player, final List toolTip, final boolean advancedTooltips )
public final void addInformation( final ItemStack itemStack, final World world, final List<String> toolTip, final ITooltipFlag advancedTooltips )
{
this.addCheckedInformation( itemStack, player, toolTip, advancedTooltips );
this.addCheckedInformation( itemStack, world, toolTip, advancedTooltips );
}
@SideOnly( Side.CLIENT )
public void addCheckedInformation( final ItemStack itemStack, final EntityPlayer player, final List<String> toolTip, final boolean advancedToolTips )
public void addCheckedInformation( final ItemStack itemStack, final World world, final List<String> toolTip, final ITooltipFlag advancedTooltips )
{
this.blockType.addInformation( itemStack, player, toolTip, advancedToolTips );
this.blockType.addInformation( itemStack, world, toolTip, advancedTooltips );
}
@Override
@@ -126,7 +126,7 @@ public class AEBaseItemBlock extends ItemBlock
{
up = EnumFacing.UP;
final byte rotation = (byte) ( MathHelper.floor_double( ( player.rotationYaw * 4F ) / 360F + 2.5D ) & 3 );
final byte rotation = (byte) ( MathHelper.floor( ( player.rotationYaw * 4F ) / 360F + 2.5D ) & 3 );
switch( rotation )
{
@@ -23,13 +23,15 @@ import java.text.MessageFormat;
import java.util.List;
import net.minecraft.block.Block;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.client.util.ITooltipFlag;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.world.World;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import appeng.api.config.AccessRestriction;
import appeng.api.config.Actionable;
import appeng.api.config.PowerUnits;
import appeng.api.definitions.IBlockDefinition;
import appeng.api.implementations.items.IAEItemPowerStorage;
@@ -48,9 +50,9 @@ public class AEBaseItemBlockChargeable extends AEBaseItemBlock implements IAEIte
@Override
@SideOnly( Side.CLIENT )
public void addCheckedInformation( final ItemStack itemStack, final EntityPlayer player, final List<String> toolTip, final boolean advancedTooltips )
public void addCheckedInformation( final ItemStack stack, final World world, final List<String> lines, final ITooltipFlag advancedTooltips )
{
final NBTTagCompound tag = itemStack.getTagCompound();
final NBTTagCompound tag = stack.getTagCompound();
double internalCurrentPower = 0;
final double internalMaxPower = this.getMaxEnergyCapacity();
@@ -61,70 +63,43 @@ public class AEBaseItemBlockChargeable extends AEBaseItemBlock implements IAEIte
final double percent = internalCurrentPower / internalMaxPower;
toolTip.add( GuiText.StoredEnergy.getLocal() + ':' + MessageFormat.format( " {0,number,#} ", internalCurrentPower ) + Platform.gui_localize( PowerUnits.AE.unlocalizedName ) + " - " + MessageFormat.format( " {0,number,#.##%} ", percent ) );
}
private double getMaxEnergyCapacity()
{
final Block blockID = Block.getBlockFromItem( this );
final IBlockDefinition energyCell = Api.INSTANCE.definitions().blocks().energyCell();
return energyCell.maybeBlock().map( block -> {
if( blockID == block )
{
return 200000;
}
else
{
return 8 * 200000;
}
}
).orElse( 0 );
lines.add( GuiText.StoredEnergy.getLocal() + ':' + MessageFormat.format( " {0,number,#} ", internalCurrentPower ) + Platform
.gui_localize( PowerUnits.AE.unlocalizedName ) + " - " + MessageFormat.format( " {0,number,#.##%} ", percent ) );
}
@Override
public double injectAEPower( final ItemStack is, double amt )
public double injectAEPower( final ItemStack is, double amount, Actionable mode )
{
double internalCurrentPower = this.getInternal( is );
final double internalMaxPower = this.getMaxEnergyCapacity();
internalCurrentPower += amt;
if( internalCurrentPower > internalMaxPower )
final double internalCurrentPower = this.getInternal( is );
final double internalMaxPower = this.getAEMaxPower( is );
final double required = internalMaxPower - internalCurrentPower;
final double overflow = Math.max( 0, amount - required );
if( mode == Actionable.MODULATE )
{
amt = internalCurrentPower - internalMaxPower;
internalCurrentPower = internalMaxPower;
this.setInternal( is, internalCurrentPower );
return amt;
final double toAdd = Math.min( required, amount );
final double newPowerStored = internalCurrentPower + toAdd;
this.setInternal( is, newPowerStored );
}
this.setInternal( is, internalCurrentPower );
return 0;
}
private double getInternal( final ItemStack is )
{
final NBTTagCompound nbt = Platform.openNbtData( is );
return nbt.getDouble( "internalCurrentPower" );
}
private void setInternal( final ItemStack is, final double amt )
{
final NBTTagCompound nbt = Platform.openNbtData( is );
nbt.setDouble( "internalCurrentPower", amt );
return overflow;
}
@Override
public double extractAEPower( final ItemStack is, double amt )
public double extractAEPower( final ItemStack is, double amount, Actionable mode )
{
double internalCurrentPower = this.getInternal( is );
if( internalCurrentPower > amt )
final double internalCurrentPower = this.getInternal( is );
final double fulfillable = Math.min( amount, internalCurrentPower );
if( mode == Actionable.MODULATE )
{
internalCurrentPower -= amt;
this.setInternal( is, internalCurrentPower );
return amt;
final double newPowerStored = internalCurrentPower - fulfillable;
this.setInternal( is, newPowerStored );
}
amt = internalCurrentPower;
this.setInternal( is, 0 );
return amt;
return fulfillable;
}
@Override
@@ -144,4 +119,34 @@ public class AEBaseItemBlockChargeable extends AEBaseItemBlock implements IAEIte
{
return AccessRestriction.WRITE;
}
private double getMaxEnergyCapacity()
{
final Block blockID = Block.getBlockFromItem( this );
final IBlockDefinition energyCell = Api.INSTANCE.definitions().blocks().energyCell();
return energyCell.maybeBlock().map( block ->
{
if( blockID == block )
{
return 200000;
}
else
{
return 8 * 200000;
}
} ).orElse( 0 );
}
private double getInternal( final ItemStack is )
{
final NBTTagCompound nbt = Platform.openNbtData( is );
return nbt.getDouble( "internalCurrentPower" );
}
private void setInternal( final ItemStack is, final double amt )
{
final NBTTagCompound nbt = Platform.openNbtData( is );
nbt.setDouble( "internalCurrentPower", amt );
}
}
@@ -43,8 +43,8 @@ public abstract class AEBaseStairBlock extends BlockStairs
@Override
public String toString()
{
String regName = getRegistryName() != null ? getRegistryName().getResourcePath() : "unregistered";
return getClass().getSimpleName() + "[" + regName + "]";
String regName = this.getRegistryName() != null ? this.getRegistryName().getResourcePath() : "unregistered";
return this.getClass().getSimpleName() + "[" + regName + "]";
}
}
+28 -20
View File
@@ -34,8 +34,6 @@ import net.minecraft.block.state.BlockStateContainer;
import net.minecraft.block.state.IBlockState;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.Container;
import net.minecraft.inventory.IInventory;
import net.minecraft.item.EnumDyeColor;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
@@ -48,6 +46,7 @@ import net.minecraft.world.World;
import net.minecraftforge.common.property.ExtendedBlockState;
import net.minecraftforge.common.property.IExtendedBlockState;
import net.minecraftforge.common.property.IUnlistedProperty;
import net.minecraftforge.items.ItemHandlerHelper;
import appeng.api.implementations.items.IMemoryCard;
import appeng.api.implementations.items.MemoryCardMessages;
@@ -56,6 +55,7 @@ import appeng.api.util.AEColor;
import appeng.api.util.IOrientable;
import appeng.block.networking.BlockCableBus;
import appeng.helpers.ICustomCollision;
import appeng.tile.AEBaseInvTile;
import appeng.tile.AEBaseTile;
import appeng.tile.networking.TileCableBus;
import appeng.tile.storage.TileSkyChest;
@@ -86,7 +86,7 @@ public abstract class AEBaseTileBlock extends AEBaseBlock implements ITileEntity
return state;
}
AEBaseTile tile = getTileEntity( world, pos );
AEBaseTile tile = this.getTileEntity( world, pos );
if( tile == null )
{
return state; // No info available
@@ -99,7 +99,7 @@ public abstract class AEBaseTileBlock extends AEBaseBlock implements ITileEntity
@Override
protected BlockStateContainer createBlockState()
{
return new ExtendedBlockState( this, getAEStates(), new IUnlistedProperty[] {
return new ExtendedBlockState( this, this.getAEStates(), new IUnlistedProperty[] {
FORWARD,
UP
} );
@@ -111,16 +111,17 @@ public abstract class AEBaseTileBlock extends AEBaseBlock implements ITileEntity
return 0;
}
protected void setTileEntity( final Class<? extends AEBaseTile> c )
// TODO : Was this change needed?
public void setTileEntity( final Class<? extends AEBaseTile> c )
{
this.tileEntityType = c;
this.setInventory( IInventory.class.isAssignableFrom( c ) );
this.setInventory( AEBaseInvTile.class.isAssignableFrom( c ) );
}
@Override
public boolean hasTileEntity( IBlockState state )
{
return hasBlockTileEntity();
return this.hasBlockTileEntity();
}
private boolean hasBlockTileEntity()
@@ -184,7 +185,7 @@ public abstract class AEBaseTileBlock extends AEBaseBlock implements ITileEntity
final AEBaseTile te = this.getTileEntity( w, pos );
if( te != null )
{
final ArrayList<ItemStack> drops = new ArrayList<ItemStack>();
final ArrayList<ItemStack> drops = new ArrayList<>();
if( te.dropItems() )
{
te.getDrops( w, pos, drops );
@@ -240,9 +241,13 @@ public abstract class AEBaseTileBlock extends AEBaseBlock implements ITileEntity
public int getComparatorInputOverride( IBlockState state, final World w, final BlockPos pos )
{
final TileEntity te = this.getTileEntity( w, pos );
if( te instanceof IInventory )
if( te instanceof AEBaseInvTile )
{
return Container.calcRedstoneFromInventory( (IInventory) te );
AEBaseInvTile invTile = (AEBaseInvTile) te;
if( invTile.getInternalInventory().getSlots() > 0 )
{
return ItemHandlerHelper.calcRedstoneFromInventory( invTile.getInternalInventory() );
}
}
return 0;
}
@@ -269,13 +274,16 @@ public abstract class AEBaseTileBlock extends AEBaseBlock implements ITileEntity
}
@Override
public boolean onBlockActivated( final World w, final BlockPos pos, final IBlockState state, final EntityPlayer player, final EnumHand hand, final @Nullable ItemStack heldItem, final EnumFacing side, final float hitX, final float hitY, final float hitZ )
public boolean onBlockActivated( World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ )
{
if( player != null && heldItem != null )
ItemStack heldItem;
if( player != null && !player.getHeldItem( hand ).isEmpty() )
{
heldItem = player.getHeldItem( hand );
if( Platform.isWrench( player, heldItem, pos ) && player.isSneaking() )
{
final IBlockState blockState = w.getBlockState( pos );
final IBlockState blockState = world.getBlockState( pos );
final Block block = blockState.getBlock();
if( block == null )
@@ -283,7 +291,7 @@ public abstract class AEBaseTileBlock extends AEBaseBlock implements ITileEntity
return false;
}
final AEBaseTile tile = this.getTileEntity( w, pos );
final AEBaseTile tile = this.getTileEntity( world, pos );
if( tile == null )
{
@@ -295,7 +303,7 @@ public abstract class AEBaseTileBlock extends AEBaseBlock implements ITileEntity
return false;
}
final ItemStack[] itemDropCandidates = Platform.getBlockDrops( w, pos );
final ItemStack[] itemDropCandidates = Platform.getBlockDrops( world, pos );
final ItemStack op = new ItemStack( this );
for( final ItemStack ol : itemDropCandidates )
@@ -310,11 +318,11 @@ public abstract class AEBaseTileBlock extends AEBaseBlock implements ITileEntity
}
}
if( block.removedByPlayer( blockState, w, pos, player, false ) )
if( block.removedByPlayer( blockState, world, pos, player, false ) )
{
final List<ItemStack> itemsToDrop = Lists.newArrayList( itemDropCandidates );
Platform.spawnDrops( w, pos, itemsToDrop );
w.setBlockToAir( pos );
Platform.spawnDrops( world, pos, itemsToDrop );
world.setBlockToAir( pos );
}
return false;
@@ -323,7 +331,7 @@ public abstract class AEBaseTileBlock extends AEBaseBlock implements ITileEntity
if( heldItem.getItem() instanceof IMemoryCard && !( this instanceof BlockCableBus ) )
{
final IMemoryCard memoryCard = (IMemoryCard) heldItem.getItem();
final AEBaseTile tileEntity = this.getTileEntity( w, pos );
final AEBaseTile tileEntity = this.getTileEntity( world, pos );
if( tileEntity == null )
{
@@ -361,7 +369,7 @@ public abstract class AEBaseTileBlock extends AEBaseBlock implements ITileEntity
}
}
return this.onActivated( w, pos, player, hand, heldItem, side, hitX, hitY, hitZ );
return this.onActivated( world, pos, player, hand, player.getHeldItem( hand ), facing, hitX, hitY, hitZ );
}
@Override
@@ -36,7 +36,7 @@ public class UnlistedDirection implements IUnlistedProperty<EnumFacing>
@Override
public String getName()
{
return name;
return this.name;
}
@Override
@@ -19,14 +19,12 @@
package appeng.block.crafting;
import java.util.List;
import net.minecraft.block.state.BlockStateContainer;
import net.minecraft.block.state.IBlockState;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.NonNullList;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.IBlockAccess;
import net.minecraftforge.common.property.ExtendedBlockState;
@@ -48,13 +46,12 @@ public class BlockCraftingMonitor extends BlockCraftingUnit
public BlockCraftingMonitor()
{
super( CraftingUnitType.MONITOR );
this.setTileEntity( TileCraftingMonitorTile.class );
}
@Override
protected BlockStateContainer createBlockState()
{
return new ExtendedBlockState( this, getAEStates(), new IUnlistedProperty[] {
return new ExtendedBlockState( this, this.getAEStates(), new IUnlistedProperty[] {
STATE,
COLOR,
FORWARD,
@@ -69,7 +66,7 @@ public class BlockCraftingMonitor extends BlockCraftingUnit
EnumFacing forward = EnumFacing.NORTH;
EnumFacing up = EnumFacing.UP;
TileCraftingMonitorTile te = getTileEntity( world, pos );
TileCraftingMonitorTile te = this.getTileEntity( world, pos );
if( te != null )
{
color = te.getColor();
@@ -85,7 +82,7 @@ public class BlockCraftingMonitor extends BlockCraftingUnit
@Override
@SideOnly( Side.CLIENT )
public void getSubBlocks( final Item item, final CreativeTabs tabs, final List<ItemStack> itemStacks )
public void getSubBlocks( final CreativeTabs tabs, final NonNullList<ItemStack> itemStacks )
{
itemStacks.add( new ItemStack( this, 1, 0 ) );
}
@@ -19,16 +19,12 @@
package appeng.block.crafting;
import appeng.tile.crafting.TileCraftingStorageTile;
public class BlockCraftingStorage extends BlockCraftingUnit
{
public BlockCraftingStorage( final CraftingUnitType type )
{
super( type );
this.setTileEntity( TileCraftingStorageTile.class );
}
}
@@ -21,8 +21,6 @@ package appeng.block.crafting;
import java.util.EnumSet;
import javax.annotation.Nullable;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.block.properties.IProperty;
@@ -30,7 +28,6 @@ import net.minecraft.block.properties.PropertyBool;
import net.minecraft.block.state.BlockStateContainer;
import net.minecraft.block.state.IBlockState;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.util.BlockRenderLayer;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.EnumHand;
@@ -63,7 +60,6 @@ public class BlockCraftingUnit extends AEBaseTileBlock
super( Material.IRON );
this.type = type;
this.setTileEntity( TileCraftingTile.class );
}
@Override
@@ -80,7 +76,7 @@ public class BlockCraftingUnit extends AEBaseTileBlock
for( EnumFacing facing : EnumFacing.values() )
{
if( isConnected( world, pos, facing ) )
if( this.isConnected( world, pos, facing ) )
{
connections.add( facing );
}
@@ -100,7 +96,7 @@ public class BlockCraftingUnit extends AEBaseTileBlock
@Override
protected BlockStateContainer createBlockState()
{
return new ExtendedBlockState( this, getAEStates(), new IUnlistedProperty[] { STATE } );
return new ExtendedBlockState( this, this.getAEStates(), new IUnlistedProperty[] { STATE } );
}
@Override
@@ -118,7 +114,7 @@ public class BlockCraftingUnit extends AEBaseTileBlock
}
@Override
public void neighborChanged( final IBlockState state, final World worldIn, final BlockPos pos, final Block neighborBlock )
public void neighborChanged( final IBlockState state, final World worldIn, final BlockPos pos, final Block blockIn, final BlockPos fromPos )
{
final TileCraftingTile cp = this.getTileEntity( worldIn, pos );
if( cp != null )
@@ -146,9 +142,10 @@ public class BlockCraftingUnit extends AEBaseTileBlock
}
@Override
public boolean onBlockActivated( final World w, final BlockPos pos, final IBlockState state, final EntityPlayer p, final EnumHand hand, final @Nullable ItemStack heldItem, final EnumFacing side, final float hitX, final float hitY, final float hitZ )
public boolean onBlockActivated( final World w, final BlockPos pos, final IBlockState state, final EntityPlayer p, final EnumHand hand, final EnumFacing side, final float hitX, final float hitY, final float hitZ )
{
final TileCraftingTile tg = this.getTileEntity( w, pos );
if( tg != null && !p.isSneaking() && tg.isFormed() && tg.isActive() )
{
if( Platform.isClient() )
@@ -160,7 +157,7 @@ public class BlockCraftingUnit extends AEBaseTileBlock
return true;
}
return false;
return super.onBlockActivated( w, pos, state, p, hand, side, hitX, hitY, hitZ );
}
public enum CraftingUnitType
@@ -19,14 +19,11 @@
package appeng.block.crafting;
import javax.annotation.Nullable;
import net.minecraft.block.material.Material;
import net.minecraft.block.properties.IProperty;
import net.minecraft.block.properties.PropertyBool;
import net.minecraft.block.state.IBlockState;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.util.BlockRenderLayer;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.EnumHand;
@@ -42,6 +39,7 @@ import appeng.core.sync.GuiBridge;
import appeng.tile.crafting.TileMolecularAssembler;
import appeng.util.Platform;
public class BlockMolecularAssembler extends AEBaseTileBlock
{
@@ -51,7 +49,6 @@ public class BlockMolecularAssembler extends AEBaseTileBlock
{
super( Material.IRON );
this.setTileEntity( TileMolecularAssembler.class );
this.setOpaque( false );
this.lightOpacity = 1;
}
@@ -66,7 +63,7 @@ public class BlockMolecularAssembler extends AEBaseTileBlock
public IBlockState getActualState( IBlockState state, IBlockAccess worldIn, BlockPos pos )
{
boolean powered = false;
TileMolecularAssembler te = getTileEntity( worldIn, pos );
TileMolecularAssembler te = this.getTileEntity( worldIn, pos );
if( te != null )
{
powered = te.isPowered();
@@ -88,18 +85,19 @@ public class BlockMolecularAssembler extends AEBaseTileBlock
@SideOnly( Side.CLIENT )
@Override
public boolean canRenderInLayer( BlockRenderLayer layer )
public boolean canRenderInLayer( IBlockState state, BlockRenderLayer layer )
{
return layer == BlockRenderLayer.TRANSLUCENT;
}
public boolean isFullCube(IBlockState state)
@Override
public boolean isFullCube( IBlockState state )
{
return false;
}
@Override
public boolean onBlockActivated( final World w, final BlockPos pos, final IBlockState state, final EntityPlayer p, final EnumHand hand, final @Nullable ItemStack heldItem, final EnumFacing side, final float hitX, final float hitY, final float hitZ )
public boolean onBlockActivated( final World w, final BlockPos pos, final IBlockState state, final EntityPlayer p, final EnumHand hand, final EnumFacing side, final float hitX, final float hitY, final float hitZ )
{
final TileMolecularAssembler tg = this.getTileEntity( w, pos );
if( tg != null && !p.isSneaking() )
@@ -107,6 +105,7 @@ public class BlockMolecularAssembler extends AEBaseTileBlock
Platform.openGUI( p, tg, AEPartLocation.fromFacing( side ), GuiBridge.GUI_MAC );
return true;
}
return false;
return super.onBlockActivated( w, pos, state, p, hand, side, hitX, hitY, hitZ );
}
}
@@ -39,7 +39,7 @@ public class ItemCraftingStorage extends AEBaseItemBlock
@Override
public ItemStack getContainerItem( final ItemStack itemStack )
{
return AEApi.instance().definitions().blocks().craftingUnit().maybeStack( 1 ).orElse( null );
return AEApi.instance().definitions().blocks().craftingUnit().maybeStack( 1 ).orElse( ItemStack.EMPTY );
}
@Override
@@ -23,6 +23,7 @@ import javax.annotation.Nullable;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.block.state.BlockFaceShape;
import net.minecraft.block.state.IBlockState;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayer;
@@ -32,6 +33,7 @@ import net.minecraft.util.EnumBlockRenderType;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.EnumHand;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import net.minecraftforge.common.util.FakePlayer;
@@ -41,6 +43,7 @@ import appeng.core.stats.Stats;
import appeng.tile.AEBaseTile;
import appeng.tile.grindstone.TileCrank;
public class BlockCrank extends AEBaseTileBlock
{
@@ -48,7 +51,6 @@ public class BlockCrank extends AEBaseTileBlock
{
super( Material.WOOD );
this.setTileEntity( TileCrank.class );
this.setLightOpacity( 0 );
this.setHarvestLevel( "axe", 0 );
this.setFullSize( this.setOpaque( false ) );
@@ -78,7 +80,7 @@ public class BlockCrank extends AEBaseTileBlock
private void dropCrank( final World world, final BlockPos pos )
{
world.destroyBlock( pos, true ); // w.destroyBlock( x, y, z, true );
world.notifyBlockUpdate( pos, getDefaultState(), world.getBlockState( pos ), 3 );
world.notifyBlockUpdate( pos, this.getDefaultState(), world.getBlockState( pos ), 3 );
}
@Override
@@ -135,7 +137,7 @@ public class BlockCrank extends AEBaseTileBlock
}
@Override
public void neighborChanged( final IBlockState state, final World world, final BlockPos pos, final Block neighborBlock )
public void neighborChanged( IBlockState state, World world, BlockPos pos, Block blockIn, BlockPos fromPos )
{
final AEBaseTile tile = this.getTileEntity( world, pos );
@@ -164,4 +166,16 @@ public class BlockCrank extends AEBaseTileBlock
return false;
}
@Override
public boolean canPlaceTorchOnTop( IBlockState state, IBlockAccess world, BlockPos pos )
{
return false;
}
@Override
public BlockFaceShape getBlockFaceShape( IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face )
{
return BlockFaceShape.UNDEFINED;
}
}
@@ -35,6 +35,7 @@ import appeng.core.sync.GuiBridge;
import appeng.tile.grindstone.TileGrinder;
import appeng.util.Platform;
public class BlockGrinder extends AEBaseTileBlock
{
@@ -42,7 +43,6 @@ public class BlockGrinder extends AEBaseTileBlock
{
super( Material.ROCK );
this.setTileEntity( TileGrinder.class );
this.setHardness( 3.2F );
}
@@ -35,14 +35,13 @@ import appeng.core.sync.GuiBridge;
import appeng.tile.misc.TileCellWorkbench;
import appeng.util.Platform;
public class BlockCellWorkbench extends AEBaseTileBlock
{
public BlockCellWorkbench()
{
super( Material.IRON );
this.setTileEntity( TileCellWorkbench.class );
}
@Override

Some files were not shown because too many files have changed in this diff Show More